GnuCash  4.11-354-g0815ab64c1
Files | Data Structures | Typedefs | Enumerations | Enumerator | Functions | Variables

GnuCash Options System for Book, Report, and Stylesheet Options. More...

Files

file  gnc-option-date.hpp
 Relative date enumeration and manipulation functions.
 
file  gnc-option-impl.hpp
 Implementation templates and specializtions for GncOption values.
 
file  gnc-option-uitype.hpp
 OptionUITypes.
 
file  gnc-option.hpp
 C++ Public interface for individual options.
 
file  gnc-optiondb-impl.hpp
 Implementation details for GncOptionDB.
 
file  gnc-optiondb.h
 C public interface for the Options Database.
 
file  gnc-optiondb.hpp
 The primary C++ interface to options for books, reports, and stylesheets.
 

Data Structures

struct  OptionClassifier
 This class is the parent of all option implmentations. More...
 
class  GncOptionValue< ValueType >
 The generic option-value class. More...
 
class  GncOptionQofInstanceValue
 
class  GncOptionCommodityValue
 class GncOptionCommodityValue Commodities are stored with their namespace and mnemonic instead of their gncGIUD so that they can be correctly retrieved even if they're deleted and recreated. More...
 
struct  is_QofInstanceValue< T >
 
struct  is_QofQueryValue< T >
 
class  GncOptionRangeValue< ValueType >
 Used for numeric ranges and plot sizes. More...
 
class  GncOptionMultichoiceValue
 Multichoice options have a vector of valid options (GncMultichoiceOptionChoices) and validate the selection as being one of those values. More...
 
class  GncOptionAccountListValue
 Set one or more accounts on which to report, optionally restricted to certain account types. More...
 
class  GncOptionAccountSelValue
 
class  GncOptionDateValue
 A legal date value is a pair of either a RelativeDatePeriod, the absolute flag and a time64, or for legacy purposes the absolute flag and a timespec. More...
 
struct  is_OptionClassifier< T >
 
struct  is_same_decayed< T, U >
 
struct  is_RangeValue< T >
 
class  GncOption
 Represents the public interface for an option. More...
 
class  GncOptionSection
 class GncOptionSection The upper-level classification implmentation. More...
 
struct  GncOptionDBCallback
 
class  GncOptionDB
 Holds all of the options for a book, report, or stylesheet, organized by GncOptionSections. More...
 

Typedefs

using RelativeDatePeriodVec = std::vector< RelativeDatePeriod >
 
using GncItem = std::pair< QofIdTypeConst, GncGUID >
 
using GncMultichoiceOptionEntry = std::tuple< const std::string, const std::string, GncOptionMultichoiceKeyType >
 
using GncMultichoiceOptionIndexVec = std::vector< std::size_t >
 
using GncMultichoiceOptionChoices = std::vector< GncMultichoiceOptionEntry >
 
using GncOptionAccountList = std::vector< GncGUID >
 
using GncOptionAccountTypeList = std::vector< GNCAccountType >
 
using GncOptionUIItemPtr = std::unique_ptr< GncOptionUIItem >
 
using GncOwner = _gncOwner
 
using QofQuery = _QofQuery
 A Query.
 
using QofInstance = QofInstance_s
 
using GncOptionReportPlacement = std::tuple< uint32_t, uint32_t, uint32_t >
 
using GncOptionReportPlacementVec = std::vector< GncOptionReportPlacement >
 
using GncOptionVariant = std::variant< GncOptionValue< std::string >, GncOptionValue< bool >, GncOptionValue< int64_t >, GncOptionQofInstanceValue, GncOptionValue< const QofQuery * >, GncOptionValue< const GncOwner * >, GncOptionValue< GncOptionReportPlacementVec >, GncOptionAccountListValue, GncOptionAccountSelValue, GncOptionMultichoiceValue, GncOptionRangeValue< int >, GncOptionRangeValue< double >, GncOptionCommodityValue, GncOptionDateValue >
 
using GncOptionVariantPtr = std::unique_ptr< GncOptionVariant >
 
using GncOptionVec = std::vector< GncOption >
 
using GncOptionSectionPtr = std::shared_ptr< GncOptionSection >
 
using GncOptionDBChangeCallback = void(*)(void *user_data)
 
using GncCallbackVec = std::vector< GncOptionDBCallback >
 
using GncOptionDBPtr = std::unique_ptr< GncOptionDB >
 
using GncOptionAccountList = std::vector< GncGUID >
 
using GncOptionAccountTypeList = std::vector< GNCAccountType >
 
using GncMultichoiceOptionEntry = std::tuple< const std::string, const std::string, GncOptionMultichoiceKeyType >
 
using GncMultichoiceOptionChoices = std::vector< GncMultichoiceOptionEntry >
 

Enumerations

enum  RelativeDatePeriod : int {
  ABSOLUTE = -1, TODAY, ONE_WEEK_AGO, ONE_WEEK_AHEAD,
  ONE_MONTH_AGO, ONE_MONTH_AHEAD, THREE_MONTHS_AGO, THREE_MONTHS_AHEAD,
  SIX_MONTHS_AGO, SIX_MONTHS_AHEAD, ONE_YEAR_AGO, ONE_YEAR_AHEAD,
  START_THIS_MONTH, END_THIS_MONTH, START_PREV_MONTH, END_PREV_MONTH,
  START_NEXT_MONTH, END_NEXT_MONTH, START_CURRENT_QUARTER, END_CURRENT_QUARTER,
  START_PREV_QUARTER, END_PREV_QUARTER, START_NEXT_QUARTER, END_NEXT_QUARTER,
  START_CAL_YEAR, END_CAL_YEAR, START_PREV_YEAR, END_PREV_YEAR,
  START_NEXT_YEAR, END_NEXT_YEAR, START_ACCOUNTING_PERIOD, END_ACCOUNTING_PERIOD
}
 Reporting periods relative to the current date. More...
 
enum  GncOptionUIType : unsigned int {
  INTERNAL, BOOLEAN, STRING, TEXT,
  CURRENCY, COMMODITY, MULTICHOICE, DATE_ABSOLUTE,
  DATE_RELATIVE, DATE_BOTH, ACCOUNT_LIST, ACCOUNT_SEL,
  LIST, NUMBER_RANGE, COLOR, FONT,
  PLOT_SIZE, BUDGET, PIXMAP, RADIOBUTTON,
  DATE_FORMAT, OWNER, CUSTOMER, VENDOR,
  EMPLOYEE, INVOICE, JOB, TAX_TABLE,
  QUERY, REPORT_PLACEMENT, MAX_VALUE
}
 Used by GncOptionClassifier to indicate to dialog-options what control should be displayed for the option.
 
enum  GncOptionMultichoiceKeyType { SYMBOL, STRING, NUMBER }
 
enum  RelativeDateUI : uint8_t { ABSOLUTE, RELATIVE, BOTH }
 

Functions

bool gnc_relative_date_is_single (RelativeDatePeriod)
 Report whether the relative date represents a period offset to today's date rather than the beginning or end of a date range. More...
 
bool gnc_relative_date_is_starting (RelativeDatePeriod)
 Report whether the relative date represents the beginning of a date range. More...
 
bool gnc_relative_date_is_ending (RelativeDatePeriod)
 Report whether the relative date represents the end of a date range. More...
 
const char * gnc_relative_date_storage_string (RelativeDatePeriod)
 Provide the string representation of a relative date for persisting the value. More...
 
const char * gnc_relative_date_display_string (RelativeDatePeriod)
 Provide the string representation of a relative date for displaying value to a user. More...
 
const char * gnc_relative_date_description (RelativeDatePeriod)
 Provide the description of a relative date. More...
 
RelativeDatePeriod gnc_relative_date_from_storage_string (const char *)
 Convert a relative date storage string back to a RelativeDatePeriod value. More...
 
time64 gnc_relative_date_to_time64 (RelativeDatePeriod)
 Convert a RelativeDatePeriod value to a concrete time64 by applying the value to the current time. More...
 
std::ostream & operator<< (std::ostream &, const RelativeDatePeriod)
 Add the display string to the provided std::ostream. More...
 
QofInstanceqof_instance_from_string (const std::string &str, GncOptionUIType type)
 
QofInstanceqof_instance_from_guid (GncGUID *, GncOptionUIType type)
 
std::string qof_instance_to_string (const QofInstance *inst)
 
template<class OptType , typename std::enable_if_t< is_OptionClassifier_v< OptType > &&!(is_QofInstanceValue_v< OptType >||is_RangeValue_v< OptType >), int > = 0>
std::ostream & operator<< (std::ostream &oss, const OptType &opt)
 
template<>
std::ostream & operator<<< GncOptionValue< bool >> (std::ostream &oss, const GncOptionValue< bool > &opt)
 
std::ostream & operator<< (std::ostream &oss, const GncOptionCommodityValue &opt)
 
template<class OptType , typename std::enable_if_t< is_OptionClassifier_v< OptType > &&!(is_QofInstanceValue_v< OptType >||is_RangeValue_v< OptType >), int > = 0>
std::istream & operator>> (std::istream &iss, OptType &opt)
 
std::istream & operator>> (std::istream &iss, GncOptionCommodityValue &opt)
 
template<>
std::istream & operator>>< GncOptionValue< bool >> (std::istream &iss, GncOptionValue< bool > &opt)
 
template<>
std::istream & operator>>< GncOptionValue< GncOptionReportPlacementVec >> (std::istream &iss, GncOptionValue< GncOptionReportPlacementVec > &opt)
 
template<>
std::ostream & operator<<< GncOptionMultichoiceValue > (std::ostream &oss, const GncOptionMultichoiceValue &opt)
 
template<>
std::istream & operator>>< GncOptionMultichoiceValue > (std::istream &iss, GncOptionMultichoiceValue &opt)
 
template<>
std::ostream & operator<<< GncOptionAccountListValue > (std::ostream &oss, const GncOptionAccountListValue &opt)
 
template<>
std::istream & operator>>< GncOptionAccountListValue > (std::istream &iss, GncOptionAccountListValue &opt)
 
template<>
std::ostream & operator<<< GncOptionAccountSelValue > (std::ostream &oss, const GncOptionAccountSelValue &opt)
 
template<>
std::istream & operator>>< GncOptionAccountSelValue > (std::istream &iss, GncOptionAccountSelValue &opt)
 
template<>
std::ostream & operator<<< GncOptionDateValue > (std::ostream &oss, const GncOptionDateValue &opt)
 
template<>
std::istream & operator>>< GncOptionDateValue > (std::istream &iss, GncOptionDateValue &opt)
 
bool operator< (const GncOption &right, const GncOption &left)
 
std::ostream & operator<< (std::ostream &oss, const GncOption &opt)
 
std::istream & operator>> (std::istream &iss, GncOption &opt)
 
std::ostream & output_color_value (std::ostream &oss, const std::string &value)
 
template<typename ValueType >
GncOptiongnc_make_option (const char *section, const char *name, const char *key, const char *doc_string, ValueType value, GncOptionUIType ui_type)
 Free function wrapping GncOption's constructor. More...
 
bool operator< (const GncOptionSectionPtr &right, const GncOptionSectionPtr &left)
 
GncOptionDBgnc_option_db_new (void)
 Create an empty option database. More...
 
void gnc_option_db_destroy (GncOptionDB *odb)
 Destruct and release a GncOptionDB. More...
 
GList * gnc_option_db_commit (GncOptionDB *odb)
 Write all changed ui_item values to their options. More...
 
void gnc_option_db_clean (GncOptionDB *odb)
 Reset all ui_items to the option value. More...
 
void gnc_option_db_load (GncOptionDB *odb, QofBook *book)
 Load a book's options into the GncOptionDB. More...
 
void gnc_option_db_save (GncOptionDB *odb, QofBook *book, gboolean clear_options)
 Save the GncOptionDB contents into a book's options store. More...
 
void gnc_option_db_book_options (GncOptionDB *)
 Register the standard option set for a QofBook. More...
 
const char * gnc_option_db_lookup_string_value (GncOptionDB *, const char *, const char *)
 Retrieve the string value of an option in the GncOptionDB. More...
 
void gnc_option_db_set_string_value (GncOptionDB *, const char *, const char *, const char *)
 Set the string value of an option in the GncOptionDB. More...
 
const QofInstancegnc_option_db_lookup_qofinstance_value (GncOptionDB *, const char *, const char *)
 Retrieve the string value of an option in the GncOptionDB. More...
 
GncOptionAccountList gnc_account_list_from_types (QofBook *book, const GncOptionAccountTypeList &types)
 Extract a list of accounts in the book having one of the GNCAccountTypes in types. More...
 
void gnc_register_string_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new string option and register it in the options database. More...
 
void gnc_register_string_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_text_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new text option and register it in the options database. More...
 
void gnc_register_text_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_font_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new font option and register it in the options database. More...
 
void gnc_register_font_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_budget_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, GncBudget *value)
 Create a new budget option and register it in the options database. More...
 
void gnc_register_budget_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, GncBudget *value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_commodity_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, gnc_commodity *value)
 Create a new commodity option and register it in the options database. More...
 
void gnc_register_commodity_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, gnc_commodity *value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_simple_boolean_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, bool value)
 Create a new simple boolean option and register it in the options database. More...
 
void gnc_register_simple_boolean_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, bool value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_complex_boolean_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, bool value)
 Create a new complex boolean option and register it in the options database. More...
 
void gnc_register_complex_boolean_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, bool value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_pixmap_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new pixmap option and register it in the options database. More...
 
void gnc_register_pixmap_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_account_list_limited_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const GncOptionAccountList &value, GncOptionAccountTypeList &&allowed)
 Create a new limited account list option and register it in the options database. More...
 
void gnc_register_account_list_limited_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const GncOptionAccountList &value, GncOptionAccountTypeList &&allowed)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_account_list_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const GncOptionAccountList &value)
 Create a new account list option and register it in the options database. More...
 
void gnc_register_account_list_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const GncOptionAccountList &value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_account_sel_limited_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const Account *value, GncOptionAccountTypeList &&allowed)
 Create a limited account selection option and register it in the options database. More...
 
void gnc_register_account_sel_limited_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const Account *value, GncOptionAccountTypeList &&allowed)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_multichoice_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const char *default_val, GncMultichoiceOptionChoices &&value)
 Create a new multichoice option and register it in the options database. More...
 
void gnc_register_multichoice_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const char *default_val, GncMultichoiceOptionChoices &&value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_list_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const char *value, GncMultichoiceOptionChoices &&list)
 Create a new list option and register it in the options database. More...
 
void gnc_register_list_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const char *value, GncMultichoiceOptionChoices &&list)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
template<typename ValueType >
void gnc_register_number_range_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, ValueType value, ValueType min, ValueType max, ValueType step)
 Create a new number range option and register it in the options database. More...
 
template<typename ValueType >
void gnc_register_number_range_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, ValueType value, ValueType min, ValueType max, ValueType step)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_number_plot_size_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, int value)
 Create a new plot-size option and register it in the options database. More...
 
void gnc_register_number_plot_size_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, int value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_query_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const QofQuery *value)
 Create a new QofQuery option and register it in the options database. More...
 
void gnc_register_query_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const QofQuery *value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_owner_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const GncOwner *value)
 Create a new GncOwner option and register it in the options database. More...
 
void gnc_register_owner_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const GncOwner *value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_color_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new color option and register it in the options database. More...
 
void gnc_register_color_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_internal_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const std::string &value)
 
void gnc_register_internal_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, bool value)
 
void gnc_register_report_placement_option (GncOptionDBPtr &db, const char *section, const char *name)
 
void gnc_register_currency_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, gnc_commodity *value)
 Create a new currency option and register it in the options database. More...
 
void gnc_register_currency_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, gnc_commodity *value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_invoice_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, GncInvoice *value)
 Create a new invoice option and register it in the options database. More...
 
void gnc_register_invoice_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, GncInvoice *value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_taxtable_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, GncTaxTable *value)
 Create a new taxtable option and register it in the options database. More...
 
void gnc_register_taxtable_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, GncTaxTable *value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_counter_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, double value)
 Create a new counter option and register it in the options database. More...
 
void gnc_register_counter_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, double value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_counter_format_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new counter format option and register it in the options database. More...
 
void gnc_register_counter_format_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_dateformat_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new date format option and register it in the options database. More...
 
void gnc_register_dateformat_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_date_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, RelativeDatePeriod period=RelativeDatePeriod::TODAY, RelativeDateUI ui=RelativeDateUI::BOTH)
 Create a new date option and register it in the options database. More...
 
void gnc_register_date_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, RelativeDatePeriod period=RelativeDatePeriod::TODAY, RelativeDateUI ui=RelativeDateUI::BOTH)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_date_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, time64 time, RelativeDateUI ui=RelativeDateUI::BOTH)
 Create a new date option and register it in the options database. More...
 
void gnc_register_date_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, time64 time, RelativeDateUI ui=RelativeDateUI::BOTH)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_date_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, RelativeDatePeriodVec &period_set, bool both=true)
 Create a new date option and register it in the options database. More...
 
void gnc_register_date_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, RelativeDatePeriodVec &period_set, bool both=true)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_start_date_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, bool both=true)
 Create a new start-date option and register it in the options database. More...
 
void gnc_register_start_date_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, bool both=true)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 
void gnc_register_end_date_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, bool both=true)
 Create a new end-date option and register it in the options database. More...
 
void gnc_register_end_date_option (GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, bool both=true)
 As above but takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
 

Variables

constexpr unsigned relative_date_periods
 
size_t constexpr classifier_size_max {50}
 
size_t constexpr sort_tag_size_max {10}
 
auto constexpr size_t_max = std::numeric_limits<std::size_t>::max()
 
template<typename T >
constexpr bool is_QofInstanceValue_v = is_QofInstanceValue<T>::value
 
template<typename T >
constexpr bool is_QofQueryValue_v = is_QofQueryValue<T>::value
 
template<typename T >
constexpr bool is_OptionClassifier_v = is_OptionClassifier<T>::value
 
template<typename T , typename U >
constexpr bool is_same_decayed_v = is_same_decayed<T, U>::value
 
template<typename T >
constexpr bool is_RangeValue_v = is_RangeValue<T>::value
 

Detailed Description

GnuCash Options System for Book, Report, and Stylesheet Options.

The GnuCash Options System supports two somewhat different purposes:

The options system is centered on an options database or optiondb. A separate optionsdb is created and instantiated for every use, so the book gets one at the beginning of the session with its values loaded from KVP, and every report gets one when the report is run, as do report stylesheets when they are edited. Customized report and stylesheet options are saved as Scheme code fragments in files in the user's GnuCash Config directory.

Note
Persistence via text scheme code is a security vulnerability as it enables an attacker to make GnuCash execute arbitrary code. The Guile interpreter affords full system access with at least the user's privileges.

Enumeration Type Documentation

◆ RelativeDatePeriod

enum RelativeDatePeriod : int
strong

Reporting periods relative to the current date.

The original design allowed custom RelativeDatePeriods, but that facility is unused so we'll go with compiled-in enums.

Definition at line 47 of file gnc-option-date.hpp.

47  : int
48 {
49  ABSOLUTE = -1,
50  TODAY,
51  ONE_WEEK_AGO,
52  ONE_WEEK_AHEAD,
53  ONE_MONTH_AGO,
54  ONE_MONTH_AHEAD,
55  THREE_MONTHS_AGO,
56  THREE_MONTHS_AHEAD,
57  SIX_MONTHS_AGO,
58  SIX_MONTHS_AHEAD,
59  ONE_YEAR_AGO,
60  ONE_YEAR_AHEAD,
61  START_THIS_MONTH,
62  END_THIS_MONTH,
63  START_PREV_MONTH,
64  END_PREV_MONTH,
65  START_NEXT_MONTH,
66  END_NEXT_MONTH,
67  START_CURRENT_QUARTER,
68  END_CURRENT_QUARTER,
69  START_PREV_QUARTER,
70  END_PREV_QUARTER,
71  START_NEXT_QUARTER,
72  END_NEXT_QUARTER,
73  START_CAL_YEAR,
74  END_CAL_YEAR,
75  START_PREV_YEAR,
76  END_PREV_YEAR,
77  START_NEXT_YEAR,
78  END_NEXT_YEAR,
79  START_ACCOUNTING_PERIOD,
80  END_ACCOUNTING_PERIOD,
81 };

Function Documentation

◆ gnc_account_list_from_types()

GncOptionAccountList gnc_account_list_from_types ( QofBook *  book,
const GncOptionAccountTypeList &  types 
)

Extract a list of accounts in the book having one of the GNCAccountTypes in types.

Note that in Scheme it's important to use this function and not to create a list of accounts using gnc-get-descendants-sorted because the latter method produces a SWIGTYPE for the accounts that's incompatible with the SWIGTYPE used in this module.

Parameters
bookThe book whose accounts to search
typesA std::vector of GNCAccountType containing the Account types to include in ther result
Returns
A std::vector<const Account*> of all accounts in the book having the Account types in the types parameter.

Definition at line 719 of file gnc-optiondb.cpp.

721 {
722  GncOptionAccountList list;
723  AccountPair funcdata{list, types};
724  Account* base_acct = gnc_book_get_root_account(book);
725  gnc_account_foreach_descendant(base_acct, (AccountCb)find_children,
726  &funcdata);
727  return list;
728 }
void gnc_account_foreach_descendant(const Account *acc, AccountCb thunk, gpointer user_data)
This method will traverse all children of this accounts and their descendants, calling &#39;func&#39; on each...
Definition: Account.cpp:3245

◆ gnc_make_option()

template<typename ValueType >
GncOption* gnc_make_option ( const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
ValueType  value,
GncOptionUIType  ui_type 
)

Free function wrapping GncOption's constructor.

The type of GncOptionValue to create is determined from the UI type. Some GncOptionValue types require more parameters for their constructors and can't be created with this function.

Definition at line 251 of file gnc-option.hpp.

254 {
255  return new GncOption(section, name, key, doc_string, value, ui_type);
256 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_option_db_book_options()

void gnc_option_db_book_options ( GncOptionDB )

Register the standard option set for a QofBook.

Parameters
odbThe GncOptionDB

Definition at line 1066 of file gnc-optiondb.cpp.

1067 {
1068  constexpr const char* business_section{N_("Business")};
1069  constexpr const char* counter_section{N_("Counters")};
1070  static const std::string empty_string{""};
1071 
1072 //Accounts Tab
1073 
1074  gnc_register_number_range_option<double>(odb, OPTION_SECTION_ACCOUNTS,
1075  OPTION_NAME_AUTO_READONLY_DAYS, "a",
1076  N_("Choose the number of days after which transactions will be read-only and cannot be edited anymore. This threshold is marked by a red line in the account register windows. If zero, all transactions can be edited and none are read-only."),
1077  0.0, 0.0, 3650.0, 1.0);
1078 
1079  gnc_register_simple_boolean_option(odb, OPTION_SECTION_ACCOUNTS,
1080  OPTION_NAME_NUM_FIELD_SOURCE, "b",
1081  N_("Check to have split action field used in registers for 'Num' field in place of transaction number; transaction number shown as 'T-Num' on second line of register. Has corresponding effect on business features, reporting and imports/exports."),
1082  false);
1083  gnc_register_simple_boolean_option(odb, OPTION_SECTION_ACCOUNTS,
1084  OPTION_NAME_TRADING_ACCOUNTS, "a",
1085  N_("Check to have trading accounts used for transactions involving more than one currency or commodity."),
1086  false);
1087 
1088 //Budgeting Tab
1089 
1090  gnc_register_budget_option(odb, OPTION_SECTION_BUDGETING,
1091  OPTION_NAME_DEFAULT_BUDGET, "a",
1092  N_("Budget to be used when none has been otherwise specified."),
1093  nullptr);
1094 
1095 //Counters Tab
1096 
1097  gnc_register_counter_option(odb, counter_section,
1098  N_("Customer number"), "gncCustomera",
1099  N_("The previous customer number generated. This number will be incremented to generate the next customer number."),
1100  0.0);
1101  gnc_register_counter_format_option(odb, counter_section,
1102  N_("Customer number format"),
1103  "gncCustomerb",
1104  N_("The format string to use for generating customer numbers. This is a printf-style format string."),
1105  empty_string);
1106  gnc_register_counter_option(odb, counter_section,
1107  N_("Employee number"), "gncEmployeea",
1108  N_("The previous employee number generated. This number will be incremented to generate the next employee number."),
1109  0.0);
1110  gnc_register_counter_format_option(odb, counter_section,
1111  N_("Employee number format"),
1112  "gncEmployeeb",
1113  N_("The format string to use for generating employee numbers. This is a printf-style format string."),
1114  empty_string);
1115  gnc_register_counter_option(odb, counter_section,
1116  N_("Invoice number"), "gncInvoicea",
1117  N_("The previous invoice number generated. This number will be incremented to generate the next invoice number."),
1118  0.0);
1119  gnc_register_counter_format_option(odb, counter_section,
1120  N_("Invoice number format"),
1121  "gncInvoiceb",
1122  N_("The format string to use for generating invoice numbers. This is a printf-style format string."),
1123  empty_string);
1124  gnc_register_counter_option(odb, counter_section,
1125  N_("Bill number"), "gncBilla",
1126  N_("The previous bill number generated. This number will be incremented to generate the next bill number."),
1127  0.0);
1128  gnc_register_counter_format_option(odb, counter_section,
1129  N_("Bill number format"), "gncBillb",
1130  N_("The format string to use for generating bill numbers. This is a printf-style format string."),
1131  empty_string);
1132  gnc_register_counter_option(odb, counter_section,
1133  N_("Expense voucher number"), "gncExpVouchera",
1134  N_("The previous expense voucher number generated. This number will be incremented to generate the next voucher number."),
1135  0.0);
1136  gnc_register_counter_format_option(odb, counter_section,
1137  N_("Expense voucher number format"),
1138  "gncExpVoucherb",
1139  N_("The format string to use for generating expense voucher numbers. This is a printf-style format string."),
1140  empty_string);
1141  gnc_register_counter_option(odb, counter_section,
1142  N_("Job number"), "gncJoba",
1143  N_("The previous job number generated. This number will be incremented to generate the next job number."),
1144  0.0);
1145  gnc_register_counter_format_option(odb, counter_section,
1146  N_("Job number format"), "gncJobb",
1147  N_("The format string to use for generating job numbers. This is a printf-style format string."),
1148  empty_string);
1149  gnc_register_counter_option(odb, counter_section,
1150  N_("Order number"), "gncOrdera",
1151  N_("The previous order number generated. This number will be incremented to generate the next order number."),
1152  0.0);
1153  gnc_register_counter_format_option(odb, counter_section,
1154  N_("Order number format"), "gncOrderb",
1155  N_("The format string to use for generating order numbers. This is a printf-style format string."),
1156  empty_string);
1157  gnc_register_counter_option(odb, counter_section,
1158  N_("Vendor number"), "gncVendora",
1159  N_("The previous vendor number generated. This number will be incremented to generate the next vendor number."),
1160  0.0);
1161  gnc_register_counter_format_option(odb, counter_section,
1162  N_("Vendor number format"), "gncVendorb",
1163  N_("The format string to use for generating vendor numbers. This is a printf-style format string."),
1164  empty_string);
1165 
1166 //Business Tab
1167 
1168  gnc_register_string_option(odb, business_section, N_("Company Name"), "a",
1169  N_("The name of your business."),
1170  empty_string);
1171  gnc_register_text_option(odb, business_section, N_("Company Address"), "b1",
1172  N_("The address of your business."),
1173  empty_string);
1174  gnc_register_string_option(odb, business_section,
1175  N_("Company Contact Person"), "b2",
1176  N_("The contact person to print on invoices."),
1177  empty_string);
1178  gnc_register_string_option(odb, business_section,
1179  N_("Company Phone Number"), "c1",
1180  N_("The contact person to print on invoices."),
1181  empty_string);
1182  gnc_register_string_option(odb, business_section,
1183  N_("Company Fax Number"), "c2",
1184  N_("The fax number of your business."),
1185  empty_string);
1186  gnc_register_string_option(odb, business_section,
1187  N_("Company Email Address"), "c3",
1188  N_ ("The email address of your business."),
1189  empty_string);
1190  gnc_register_string_option(odb, business_section,
1191  N_("Company Website URL"), "c4",
1192  N_("The URL address of your website."),
1193  empty_string);
1194  gnc_register_string_option(odb, business_section, N_("Company ID"), "c5",
1195  N_("The ID for your company (eg 'Tax-ID: 00-000000)."),
1196  empty_string);
1197 
1198  gnc_register_taxtable_option(odb, business_section,
1199  N_("Default Customer TaxTable"), "e",
1200  N_("The default tax table to apply to customers."),
1201  nullptr);
1202  gnc_register_taxtable_option(odb, business_section,
1203  N_("Default Vendor TaxTable"), "f",
1204  N_("The default tax table to apply to vendors."),
1205  nullptr);
1206  gnc_register_dateformat_option(odb, business_section,
1207  N_("Fancy Date Format"), "g",
1208  N_("The default date format used for fancy printed dates."),
1209  empty_string);
1210 
1211 //Tax Tab
1212 
1213  gnc_register_string_option(odb, N_("Tax"), N_("Tax Number"), "a",
1214  N_("The electronic tax number of your business"),
1215  empty_string);
1216 }
void gnc_register_simple_boolean_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, bool value)
Create a new simple boolean option and register it in the options database.
void gnc_register_counter_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, double value)
Create a new counter option and register it in the options database.
void gnc_register_dateformat_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
Create a new date format option and register it in the options database.
void gnc_register_string_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
Create a new string option and register it in the options database.
void gnc_register_taxtable_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, GncTaxTable *value)
Create a new taxtable option and register it in the options database.
void gnc_register_budget_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, GncBudget *value)
Create a new budget option and register it in the options database.
void gnc_register_counter_format_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
Create a new counter format option and register it in the options database.
void gnc_register_text_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
Create a new text option and register it in the options database.

◆ gnc_option_db_clean()

void gnc_option_db_clean ( GncOptionDB odb)

Reset all ui_items to the option value.

Parameters
odbThe GncOptionDB.

Definition at line 1042 of file gnc-optiondb.cpp.

1043 {
1044  odb->foreach_section(
1045  [](GncOptionSectionPtr& section){
1046  section->foreach_option(
1047  [](GncOption& option) {
1048  option.set_ui_item_from_option();
1049  });
1050  });
1051 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_option_db_commit()

GList* gnc_option_db_commit ( GncOptionDB odb)

Write all changed ui_item values to their options.

Parameters
odbThe GncOptionDB.
Returns
A GList* conatining the names of options that raised exceptions when attempting to set their values. The names are const, free only the list.

Definition at line 1016 of file gnc-optiondb.cpp.

1017 {
1018  GList* errors{};
1019  odb->foreach_section(
1020  [&errors](GncOptionSectionPtr& section){
1021  section->foreach_option(
1022  [&errors](GncOption& option) {
1023  try
1024  {
1025  option.set_option_from_ui_item();
1026  }
1027  catch (const std::invalid_argument& err)
1028  {
1029  PWARN("Option %s:%s failed to set its value %s",
1030  option.get_section().c_str(),
1031  option.get_name().c_str(), err.what());
1032  errors = g_list_prepend(errors,
1033  (void*)option.get_name().c_str());
1034  } });
1035  });
1036  if (!errors)
1037  odb->run_callbacks();
1038  return errors;
1039 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250

◆ gnc_option_db_destroy()

void gnc_option_db_destroy ( GncOptionDB odb)

Destruct and release a GncOptionDB.

Parameters
odbThe GncOptionDB.

Definition at line 1010 of file gnc-optiondb.cpp.

1011 {
1012  PWARN("Direct Destroy called on GncOptionDB %" G_GUINT64_FORMAT, (uint64_t)odb);
1013 }
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250

◆ gnc_option_db_load()

void gnc_option_db_load ( GncOptionDB odb,
QofBook *  book 
)

Load a book's options into the GncOptionDB.

Parameters
odbThe GncOptionDB
bookThe book in which the options are saved.

Definition at line 1053 of file gnc-optiondb.cpp.

1054 {
1055  odb->load_from_kvp(book);
1056 }

◆ gnc_option_db_lookup_qofinstance_value()

const QofInstance* gnc_option_db_lookup_qofinstance_value ( GncOptionDB ,
const char *  ,
const char *   
)

Retrieve the string value of an option in the GncOptionDB.

Parameters
odbthe GncOptionDB
sectionthe section in which the option is stored
namethe option name
Returns
the const QofInstance* of the value or nullptr if the option isn't found or if its value isn't a QofInstance*.

Definition at line 1235 of file gnc-optiondb.cpp.

1237 {
1238  auto option{odb->find_option(section, name)};
1239  return option->get_value<const QofInstance*>();
1240 }

◆ gnc_option_db_lookup_string_value()

const char* gnc_option_db_lookup_string_value ( GncOptionDB ,
const char *  ,
const char *   
)

Retrieve the string value of an option in the GncOptionDB.

Parameters
odbthe GncOptionDB
sectionthe section in which the option is stored
namethe option name
Returns
the static char* of the value or nullptr if the option isn't found or if its value isn't a string.

Definition at line 1219 of file gnc-optiondb.cpp.

1220 {
1221  auto value{odb->lookup_string_option(section, name)};
1222  if (value.empty())
1223  return nullptr;
1224  return strdup(value.c_str());
1225 }

◆ gnc_option_db_new()

GncOptionDB* gnc_option_db_new ( void  )

Create an empty option database.

Returns
A newly allocated GncOptionDB. Use delete to destroy it.

Definition at line 1004 of file gnc-optiondb.cpp.

1005 {
1006  return new GncOptionDB;
1007 }
Holds all of the options for a book, report, or stylesheet, organized by GncOptionSections.

◆ gnc_option_db_save()

void gnc_option_db_save ( GncOptionDB odb,
QofBook *  book,
gboolean  clear_options 
)

Save the GncOptionDB contents into a book's options store.

Parameters
odbThe GncOptionDB
bookThe book in which the options are saved.
clear_optionsTRUE if the books existing options should be removed first.

Definition at line 1059 of file gnc-optiondb.cpp.

1061 {
1062  odb->save_to_kvp(book, static_cast<bool>(clear_options));
1063 }

◆ gnc_option_db_set_string_value()

void gnc_option_db_set_string_value ( GncOptionDB ,
const char *  ,
const char *  ,
const char *   
)

Set the string value of an option in the GncOptionDB.

The value will not be saved if the option is not in the GncOptionDB or if the type of the option isn't string or text.

Parameters
odbthe GncOptionDB
sectionthe section in which the option is stored
namethe option name
valuethe value to be stored in the option.

Definition at line 1228 of file gnc-optiondb.cpp.

1230 {
1231  odb->set_option<std::string>(section, name, value);
1232 }

◆ gnc_register_account_list_limited_option()

void gnc_register_account_list_limited_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
const GncOptionAccountList &  value,
GncOptionAccountTypeList &&  allowed 
)

Create a new limited account list option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default values for the option.
allowedThe accounts which are available for selection.

Definition at line 680 of file gnc-optiondb.cpp.

686 {
687  try
688  {
689  std::cout << "gnc_register_account_list_limited_option for accounts ";
690  std::for_each(value.begin(), value.end(), [](auto& guid){
691  std::cout << gnc::GUID(guid).to_string() << " ";
692  });
693  std::cout << std::endl;
694  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
695  GncOptionUIType::ACCOUNT_LIST, value, std::move(allowed)}};
696  db->register_option(section, std::move(option));
697  }
698  catch (const std::invalid_argument& err)
699  {
700  std::cerr << "Account List Limited Option, value failed validation, option not registered.\n";
701  }
702 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
Set one or more accounts on which to report, optionally restricted to certain account types...

◆ gnc_register_account_list_option()

void gnc_register_account_list_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
const GncOptionAccountList &  value 
)

Create a new account list option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default values for the option.

Definition at line 669 of file gnc-optiondb.cpp.

673 {
674  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
675  GncOptionUIType::ACCOUNT_LIST, value}};
676  db->register_option(section, std::move(option));
677 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
Set one or more accounts on which to report, optionally restricted to certain account types...

◆ gnc_register_account_sel_limited_option()

void gnc_register_account_sel_limited_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
const Account value,
GncOptionAccountTypeList &&  allowed 
)

Create a limited account selection option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.
allowedThe accounts which are available for selection.

Definition at line 732 of file gnc-optiondb.cpp.

737 {
738  try
739  {
740  GncOption option{GncOptionAccountSelValue{section, name, key, doc_string,
741  GncOptionUIType::ACCOUNT_SEL, value, std::move(allowed)}};
742  db->register_option(section, std::move(option));
743  }
744  catch (const std::invalid_argument& err)
745  {
746  std::cerr <<"Account Sel Limited Option, value failed validation, option not registerd.\n";
747  }
748 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_budget_option()

void gnc_register_budget_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
GncBudget *  value 
)

Create a new budget option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 605 of file gnc-optiondb.cpp.

608 {
609  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
610  (const QofInstance*)value,
611  GncOptionUIType::BUDGET}};
612  db->register_option(section, std::move(option));
613 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_color_option()

void gnc_register_color_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
std::string  value 
)

Create a new color option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 616 of file gnc-optiondb.cpp.

619 {
620  GncOption option{section, name, key, doc_string, value,
621  GncOptionUIType::COLOR};
622  db->register_option(section, std::move(option));
623 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_commodity_option()

void gnc_register_commodity_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
gnc_commodity *  value 
)

Create a new commodity option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 626 of file gnc-optiondb.cpp.

629 {
630  GncOption option{GncOptionCommodityValue{section, name, key, doc_string,
631  value,
632  GncOptionUIType::COMMODITY}};
633  db->register_option(section, std::move(option));
634 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
class GncOptionCommodityValue Commodities are stored with their namespace and mnemonic instead of the...

◆ gnc_register_complex_boolean_option()

void gnc_register_complex_boolean_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
bool  value 
)

Create a new complex boolean option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 648 of file gnc-optiondb.cpp.

652 {
653  GncOption option{section, name, key, doc_string, value,
654  GncOptionUIType::BOOLEAN};
655  db->register_option(section, std::move(option));
656 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_counter_format_option()

void gnc_register_counter_format_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
std::string  value 
)

Create a new counter format option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 867 of file gnc-optiondb.cpp.

871 {
872  GncOption option{section, name, key, doc_string, value,
873  GncOptionUIType::STRING};
874  db->register_option(section, std::move(option));
875 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_counter_option()

void gnc_register_counter_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
double  value 
)

Create a new counter option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 857 of file gnc-optiondb.cpp.

860 {
861  GncOption option{GncOptionRangeValue<double>{section, name, key, doc_string,
862  value, 0.0, 999999999.0, 1.0}};
863  db->register_option(section, std::move(option));
864 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
Used for numeric ranges and plot sizes.

◆ gnc_register_currency_option()

void gnc_register_currency_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
gnc_commodity *  value 
)

Create a new currency option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option. It is checked with gnc_commodity_is_currency.

Definition at line 888 of file gnc-optiondb.cpp.

891 {
893  section, name, key, doc_string, value,GncOptionUIType::CURRENCY
894  }};
895  db->register_option(section, std::move(option));
896 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
class GncOptionCommodityValue Commodities are stored with their namespace and mnemonic instead of the...

◆ gnc_register_date_option() [1/3]

void gnc_register_date_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
RelativeDatePeriod  period = RelativeDatePeriod::TODAY,
RelativeDateUI  ui = RelativeDateUI::BOTH 
)

Create a new date option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
periodThe default/starting relative date value for the option.
uiWhat UI to display, relative, absolute, or both.

Definition at line 913 of file gnc-optiondb.cpp.

917 {
918  auto ui_type = ui == RelativeDateUI::BOTH ? GncOptionUIType::DATE_BOTH :
919  ui == RelativeDateUI::RELATIVE ? GncOptionUIType::DATE_RELATIVE :
920  GncOptionUIType::DATE_ABSOLUTE;
921  GncOption option{GncOptionDateValue(section, name, key, doc_string,
922  ui_type, period)};
923  db->register_option(section, std::move(option));
924 }
A legal date value is a pair of either a RelativeDatePeriod, the absolute flag and a time64...
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_date_option() [2/3]

void gnc_register_date_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
time64  time,
RelativeDateUI  ui = RelativeDateUI::BOTH 
)

Create a new date option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
timeThe initial time to set in the option.
uiWhat UI to display, relative, absolute, or both.

Definition at line 899 of file gnc-optiondb.cpp.

903 {
904  auto ui_type = ui == RelativeDateUI::BOTH ? GncOptionUIType::DATE_BOTH :
905  ui == RelativeDateUI::RELATIVE ? GncOptionUIType::DATE_RELATIVE :
906  GncOptionUIType::DATE_ABSOLUTE;
907  GncOption option{GncOptionDateValue(section, name, key, doc_string,
908  ui_type, time)};
909  db->register_option(section, std::move(option));
910 }
A legal date value is a pair of either a RelativeDatePeriod, the absolute flag and a time64...
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_date_option() [3/3]

void gnc_register_date_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
RelativeDatePeriodVec &  period_set,
bool  both = true 
)

Create a new date option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
period_setA vector of relative date periods to display in the relative control.
bothWhether to display both a relative and absolute control or a onla a relative control.

Definition at line 927 of file gnc-optiondb.cpp.

932 {
933  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
934  GncOptionUIType::DATE_RELATIVE;
935  GncOption option{GncOptionDateValue(section, name, key, doc_string,
936  ui_type, period_set)};
937  db->register_option(section, std::move(option));
938 }
A legal date value is a pair of either a RelativeDatePeriod, the absolute flag and a time64...
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_dateformat_option()

void gnc_register_dateformat_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
std::string  value 
)

Create a new date format option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 878 of file gnc-optiondb.cpp.

881 {
882  GncOption option{section, name, key, doc_string, value,
883  GncOptionUIType::DATE_FORMAT};
884  db->register_option(section, std::move(option));
885 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_end_date_option()

void gnc_register_end_date_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
bool  both = true 
)

Create a new end-date option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
bothWhether to display both a relative and absolute control or a onla a relative control.

Definition at line 978 of file gnc-optiondb.cpp.

981 {
982  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
983  GncOptionUIType::DATE_RELATIVE;
984  GncOption option{GncOptionDateValue(section, name, key, doc_string,
985  ui_type, end_dates)};
986  db->register_option(section, std::move(option));
987 }
A legal date value is a pair of either a RelativeDatePeriod, the absolute flag and a time64...
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_font_option()

void gnc_register_font_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
std::string  value 
)

Create a new font option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 595 of file gnc-optiondb.cpp.

598 {
599  GncOption option{section, name, key, doc_string, value,
600  GncOptionUIType::FONT};
601  db->register_option(section, std::move(option));
602 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_invoice_option()

void gnc_register_invoice_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
GncInvoice *  value 
)

Create a new invoice option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 835 of file gnc-optiondb.cpp.

838 {
839  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
840  (const QofInstance*)value,
841  GncOptionUIType::INVOICE}};
842  db->register_option(section, std::move(option));
843 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_list_option()

void gnc_register_list_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
const char *  value,
GncMultichoiceOptionChoices &&  list 
)

Create a new list option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.
listThe values available for selection. Note that this parameter will be moved from so using it after this call will result in undefined behavior.

Definition at line 770 of file gnc-optiondb.cpp.

774 {
775  GncOption option{GncOptionMultichoiceValue{section, name, key, doc_string,
776  value, std::move(list), GncOptionUIType::LIST}};
777  db->register_option(section, std::move(option));
778 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
Multichoice options have a vector of valid options (GncMultichoiceOptionChoices) and validate the sel...

◆ gnc_register_multichoice_option()

void gnc_register_multichoice_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
const char *  default_val,
GncMultichoiceOptionChoices &&  value 
)

Create a new multichoice option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe set of possible values for the option. Only one can be selected. Note that the value will be moved from the parameter and using the parameter after this call will result in undefined behavior.

Definition at line 751 of file gnc-optiondb.cpp.

755 {
756  std::string defval{default_val};
757  auto found{std::find_if(choices.begin(), choices.end(),
758  [&defval](auto& choice)->bool {
759  return defval == std::get<0>(choice);
760  })};
761  if (found == choices.end())
762  defval = (choices.empty() ? std::string{"None"} :
763  std::get<0>(choices.at(0)));
764  GncOption option{GncOptionMultichoiceValue{section, name, key, doc_string,
765  defval.c_str(), std::move(choices)}};
766  db->register_option(section, std::move(option));
767 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
Multichoice options have a vector of valid options (GncMultichoiceOptionChoices) and validate the sel...

◆ gnc_register_number_plot_size_option()

void gnc_register_number_plot_size_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
int  value 
)

Create a new plot-size option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 803 of file gnc-optiondb.cpp.

807 {
808  // Pixel values don't make much sense so always use percent.
809  GncOption option{GncOptionRangeValue<int>{section, name, key, doc_string,
810  value, 10, 100, 1}};
811  db->register_option(section, std::move(option));
812 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
Used for numeric ranges and plot sizes.

◆ gnc_register_number_range_option()

template<typename ValueType >
void gnc_register_number_range_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
ValueType  value,
ValueType  min,
ValueType  max,
ValueType  step 
)

Create a new number range option and register it in the options database.

These are normally associated with spin controls and ValueType is normally double, but it's templated to permit other numeric types if needed.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.
minThe minimum value for the spin control.
maxThe maximum value for the spin control.
stepThe step size (increment) of the spin control.

Definition at line 784 of file gnc-optiondb.cpp.

788 {
789  try
790  {
791  GncOption option{GncOptionRangeValue<ValueType>{section, name, key,
792  doc_string, value, min,
793  max, step}};
794  db->register_option(section, std::move(option));
795  }
796  catch(const std::invalid_argument& err)
797  {
798  std::cerr <<"Number Range Option " << err.what() << ", option not registerd.\n";
799  }
800 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131
Used for numeric ranges and plot sizes.

◆ gnc_register_owner_option()

void gnc_register_owner_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
const GncOwner value 
)

Create a new GncOwner option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 825 of file gnc-optiondb.cpp.

828 {
829  GncOption option{section, name, key, doc_string, value,
830  GncOptionUIType::INTERNAL};
831  db->register_option(section, std::move(option));
832 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_pixmap_option()

void gnc_register_pixmap_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
std::string  value 
)

Create a new pixmap option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 659 of file gnc-optiondb.cpp.

662 {
663  GncOption option{section, name, key, doc_string, value,
664  GncOptionUIType::PIXMAP};
665  db->register_option(section, std::move(option));
666 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_query_option()

void gnc_register_query_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
const QofQuery value 
)

Create a new QofQuery option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 815 of file gnc-optiondb.cpp.

818 {
819  GncOption option{section, name, key, doc_string, value,
820  GncOptionUIType::INTERNAL};
821  db->register_option(section, std::move(option));
822 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_simple_boolean_option()

void gnc_register_simple_boolean_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
bool  value 
)

Create a new simple boolean option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 637 of file gnc-optiondb.cpp.

641 {
642  GncOption option{section, name, key, doc_string, value,
643  GncOptionUIType::BOOLEAN};
644  db->register_option(section, std::move(option));
645 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_start_date_option()

void gnc_register_start_date_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
bool  both = true 
)

Create a new start-date option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
bothWhether to display both a relative and absolute control or a onla a relative control.

Definition at line 954 of file gnc-optiondb.cpp.

957 {
958  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
959  GncOptionUIType::DATE_RELATIVE;
960  GncOption option{GncOptionDateValue(section, name, key, doc_string,
961  ui_type, begin_dates)};
962  db->register_option(section, std::move(option));
963 }
A legal date value is a pair of either a RelativeDatePeriod, the absolute flag and a time64...
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_string_option()

void gnc_register_string_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
std::string  value 
)

Create a new string option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 574 of file gnc-optiondb.cpp.

577 {
578  GncOption option{section, name, key, doc_string, value,
579  GncOptionUIType::STRING};
580  db->register_option(section, std::move(option));
581 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_taxtable_option()

void gnc_register_taxtable_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
GncTaxTable value 
)

Create a new taxtable option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 846 of file gnc-optiondb.cpp.

849 {
850  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
851  (const QofInstance*)value,
852  GncOptionUIType::TAX_TABLE}};
853  db->register_option(section, std::move(option));
854 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_register_text_option()

void gnc_register_text_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
std::string  value 
)

Create a new text option and register it in the options database.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
doc_stringA description of the option. This will be used in tooltips and should be marked for translation.
valueThe initial and default value for the option.

Definition at line 584 of file gnc-optiondb.cpp.

587 {
588  GncOption option{section, name, key, doc_string, value,
589  GncOptionUIType::TEXT};
590  db->register_option(section, std::move(option));
591 
592 }
Represents the public interface for an option.
Definition: gnc-option.hpp:131

◆ gnc_relative_date_description()

const char* gnc_relative_date_description ( RelativeDatePeriod  )

Provide the description of a relative date.

This string is localizable.

Parameters
periodThe relative date period.
Returns
A constant string or nullptr if the period is ABSOLUTE. The string's lifetime will be that of the Relative Date Period. It must not be freed and should be copied if the period might be destroyed before the using code is finished.

Definition at line 376 of file gnc-option-date.cpp.

377 {
378  if (per == RelativeDatePeriod::ABSOLUTE)
379  return nullptr;
380  return checked_reldate(per).m_description;
381 }

◆ gnc_relative_date_display_string()

const char* gnc_relative_date_display_string ( RelativeDatePeriod  )

Provide the string representation of a relative date for displaying value to a user.

This string is localizable.

Parameters
periodThe relative date period.
Returns
A constant string or nullptr if the period is ABSOLUTE. The string's lifetime will be that of the Relative Date Period. It must not be freed and should be copied if the period might be destroyed before the using code is finished.

Definition at line 369 of file gnc-option-date.cpp.

370 {
371  if (per == RelativeDatePeriod::ABSOLUTE)
372  return nullptr;
373  return checked_reldate(per).m_display;
374 }

◆ gnc_relative_date_from_storage_string()

RelativeDatePeriod gnc_relative_date_from_storage_string ( const char *  )

Convert a relative date storage string back to a RelativeDatePeriod value.

Parameters
Astring representation obtained from gnc_relative_date_storage_string.
Returns
A RelativeDatePeriod value.

Definition at line 384 of file gnc-option-date.cpp.

385 {
386  auto per = std::find_if(reldates.begin(), reldates.end(),
387  [str](auto rel) -> bool
388  {
389  return strcmp(str, rel.m_storage) == 0;
390  });
391  return per != reldates.end() ? per->m_period : RelativeDatePeriod::ABSOLUTE;
392 }

◆ gnc_relative_date_is_ending()

bool gnc_relative_date_is_ending ( RelativeDatePeriod  )

Report whether the relative date represents the end of a date range.

For example END_LAST_MONTH is the end of a range.

Parameters
periodThe Relative Date Period to check.
Returns
true if the date is the end of a date range.

Definition at line 353 of file gnc-option-date.cpp.

354 {
355  if (per == RelativeDatePeriod::ABSOLUTE)
356  return false;
357  return checked_reldate(per).m_type == RelativeDateType::END;
358 }

◆ gnc_relative_date_is_single()

bool gnc_relative_date_is_single ( RelativeDatePeriod  )

Report whether the relative date represents a period offset to today's date rather than the beginning or end of a date range.

For example ONE_MONTH_AGO will be made concrete as the same day as today in the previous month.

Parameters
periodThe Relative Date Period to check.
Returns
true if the date is stand-alone.

Definition at line 335 of file gnc-option-date.cpp.

336 {
337  if (per == RelativeDatePeriod::ABSOLUTE)
338  return false;
339  auto reldate = checked_reldate(per);
340  return reldate.m_type == RelativeDateType::LAST ||
341  reldate.m_type == RelativeDateType::NEXT;
342 }

◆ gnc_relative_date_is_starting()

bool gnc_relative_date_is_starting ( RelativeDatePeriod  )

Report whether the relative date represents the beginning of a date range.

For example START_LAST_MONTH is the beginning of a range.

Parameters
periodThe Relative Date Period to check.
Returns
true if the date is the beginning of a date range

Definition at line 345 of file gnc-option-date.cpp.

346 {
347  if (per == RelativeDatePeriod::ABSOLUTE)
348  return false;
349  return checked_reldate(per).m_type == RelativeDateType::START;
350 }

◆ gnc_relative_date_storage_string()

const char* gnc_relative_date_storage_string ( RelativeDatePeriod  )

Provide the string representation of a relative date for persisting the value.

This string is not localizable.

Parameters
periodThe relative date period.
Returns
A constant string or nullptr if the period is ABSOLUTE. The string's lifetime will be that of the Relative Date Period. It must not be freed and should be copied if the period might be destroyed before the using code is finished.

Definition at line 361 of file gnc-option-date.cpp.

362 {
363  if (per == RelativeDatePeriod::ABSOLUTE)
364  return nullptr;
365  return checked_reldate(per).m_storage;
366 }

◆ gnc_relative_date_to_time64()

time64 gnc_relative_date_to_time64 ( RelativeDatePeriod  )

Convert a RelativeDatePeriod value to a concrete time64 by applying the value to the current time.

For example if it is now 3:15:42 PM local time 3 June, calling this with a period RelativeDatePeriod::ONE_WEEK_AHEAD will return a time64 representing 3:15:42 PM local time 10 June of this year. Times for START periods are changed to midnight local time and for END periods to 23:59:59 local time so for example if the period is instead RelativeDatePeriod::START_THIS_MONTH the time64 will represent 00:00:00 1 June and if it is RelativeDatePeriod::END_THIS_MONTH the time64 will be for 23:59:59 30 June, both in the current time zone.

Parameters
periodThe relative date period to use to calculate the concrete date.
Returns
a time64.

Definition at line 495 of file gnc-option-date.cpp.

496 {
497  if (period == RelativeDatePeriod::TODAY)
498  return static_cast<time64>(GncDateTime());
499  if (period == RelativeDatePeriod::START_ACCOUNTING_PERIOD)
500  return gnc_accounting_period_fiscal_start();
501  if (period == RelativeDatePeriod::END_ACCOUNTING_PERIOD)
502  return gnc_accounting_period_fiscal_end();
503 
504  GncDateTime now_t;
505  if (period == RelativeDatePeriod::TODAY)
506  return static_cast<time64>(now_t);
507  auto now{static_cast<tm>(now_t)};
508  auto acct_per{static_cast<tm>(GncDateTime(gnc_accounting_period_fiscal_start()))};
509 
510  if (acct_per.tm_mon == now.tm_mon && acct_per.tm_mday == now.tm_mday)
511  {
512  //No set accounting period, use the calendar year
513  acct_per.tm_mon = 0;
514  acct_per.tm_mday = 0;
515  }
516 
517  switch(reldate_offset(period))
518  {
519  case RelativeDateOffset::NONE:
520 // Report on today so nothing to do
521  break;
522  case RelativeDateOffset::YEAR:
523  if (reldate_is_prev(period))
524  --now.tm_year;
525  else if (reldate_is_next(period))
526  ++now.tm_year;
527  if (gnc_relative_date_is_starting(period))
528  now.tm_mon = 0;
529  else if (gnc_relative_date_is_ending(period))
530  now.tm_mon = 11;
531  break;
532  case RelativeDateOffset::SIX:
533  if (reldate_is_prev(period))
534  now.tm_mon -= 6;
535  else if (reldate_is_next(period))
536  now.tm_mon += 6;
537  break;
538  case RelativeDateOffset::QUARTER:
539  {
540  auto delta = (now.tm_mon > acct_per.tm_mon ?
541  now.tm_mon - acct_per.tm_mon :
542  acct_per.tm_mon - now.tm_mon) % 3;
543  now.tm_mon = now.tm_mon - delta;
544  }
545  [[fallthrough]];
546  case RelativeDateOffset::THREE:
547  if (reldate_is_prev(period))
548  now.tm_mon -= 3;
549  else if (reldate_is_next(period))
550  now.tm_mon += 3;
551  if (gnc_relative_date_is_ending(period))
552  now.tm_mon += 2;
553  break;
554  case RelativeDateOffset::MONTH:
555  if (reldate_is_prev(period))
556  --now.tm_mon;
557  else if (reldate_is_next(period))
558  ++now.tm_mon;
559  break;
560  case RelativeDateOffset::WEEK:
561  if (reldate_is_prev(period))
562  now.tm_mday -= 7;
563  else if (reldate_is_next(period))
564  now.tm_mday += 7;
565  }
566  reldate_set_day_and_time(now, checked_reldate(period).m_type);
567  normalize_reldate_tm(now);
568  return static_cast<time64>(GncDateTime(now));
569 }
GnuCash DateTime class.
bool gnc_relative_date_is_ending(RelativeDatePeriod per)
Report whether the relative date represents the end of a date range.
bool gnc_relative_date_is_starting(RelativeDatePeriod per)
Report whether the relative date represents the beginning of a date range.
gint64 time64
Many systems, including Microsoft Windows and BSD-derived Unixes like Darwin, are retaining the int-3...
Definition: gnc-date.h:93

◆ operator<<()

std::ostream& operator<< ( std::ostream &  ,
const RelativeDatePeriod   
)

Add the display string to the provided std::ostream.

Parameters
streamthe std::ostream to which to write the period value
periodthe period value to write
Returns
A reference to stream so that the operator can be chained.

Definition at line 572 of file gnc-option-date.cpp.

573 {
574  ostr << "'reldate . " << gnc_relative_date_display_string(per);
575  return ostr;
576 }
const char * gnc_relative_date_display_string(RelativeDatePeriod per)
Provide the string representation of a relative date for displaying value to a user.

Variable Documentation

◆ relative_date_periods

constexpr unsigned relative_date_periods
Initial value:
=
static_cast<unsigned>(RelativeDatePeriod::END_ACCOUNTING_PERIOD) + 2

Definition at line 83 of file gnc-option-date.hpp.