GnuCash  5.6-133-gc519490283+
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 implementations. More...
 
class  GncOptionValue< ValueType >
 The generic option-value class. More...
 
struct  GncOwnerDeleter
 class GncOptionGncOwnerValue More...
 
class  GncOptionGncOwnerValue
 
class  GncOptionQofInstanceValue
 
class  GncOptionCommodityValue
 class GncOptionCommodityValue Commodities are stored with their namespace and mnemonic instead of their gncGUID so that they can be correctly retrieved even if they're deleted and recreated. More...
 
struct  is_GncOwnerValue< T >
 
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 implementation. 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 GncOwnerPtr = std::unique_ptr< GncOwner, GncOwnerDeleter >
 
using GncItem = std::pair< QofIdTypeConst, GncGUID >
 class GncOptionQofinstanceValue More...
 
using GncMultichoiceOptionEntry = std::tuple< const std::string, const std::string, GncOptionMultichoiceKeyType >
 
using GncMultichoiceOptionIndexVec = std::vector< uint16_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 GncOptionDateFormat = std::tuple< QofDateFormat, GNCDateMonthFormat, bool, std::string >
 
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, GncOptionGncOwnerValue, GncOptionValue< const QofQuery * >, GncOptionValue< GncOptionReportPlacementVec >, GncOptionAccountListValue, GncOptionAccountSelValue, GncOptionMultichoiceValue, GncOptionRangeValue< int >, GncOptionRangeValue< double >, GncOptionCommodityValue, GncOptionDateValue, GncOptionValue< GncOptionDateFormat > >
 
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,
  INV_REPORT, 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 QofInstancegnc_option_db_lookup_qofinstance_value (GncOptionDB *, const char *, const char *)
 Retrieve the QofInstance 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_commodity_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const char *value)
 As above but with a const char* value, which should be the symbol for the commodity. More...
 
void gnc_register_commodity_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const char *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_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 (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, float value)
 
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_number_plot_size_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, float value)
 
void gnc_register_query_option (GncOptionDB *db, const char *section, const char *name, 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 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, GncOwnerType type)
 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, GncOwnerType type)
 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 std::string &value)
 
void gnc_register_internal_option (GncOptionDBPtr &db, const char *section, const char *name, 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_currency_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, const char *value)
 As above but with a const char* value, which must be the ISO4217 three-letter symbol for the currency.
 
void gnc_register_currency_option (const GncOptionDBPtr &db, const char *section, const char *name, const char *key, const char *doc_string, const char *value)
 
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_invoice_print_report_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
 Create a new print report option and register it in the options database. More...
 
void gnc_register_invoice_print_report_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_counter_option (GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, int 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, GncOptionDateFormat &&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, GncOptionDateFormat &&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 uint16_t_max = std::numeric_limits<uint16_t>::max()
 
template<typename T >
constexpr bool is_GncOwnerValue_v = is_GncOwnerValue<T>::value
 
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.

Typedef Documentation

◆ GncItem

using GncItem = std::pair<QofIdTypeConst, GncGUID>

class GncOptionQofinstanceValue

QofInstances know what type they are but getting them to tell you is a pain so we put them in a pair with a type identifier.

Definition at line 171 of file gnc-option-impl.hpp.

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 44 of file gnc-option-date.hpp.

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

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 779 of file gnc-optiondb.cpp.

781 {
782  GncOptionAccountList list;
783  AccountPair funcdata{list, types};
784  Account* base_acct = gnc_book_get_root_account(book);
785  gnc_account_foreach_descendant(base_acct, (AccountCb)find_children,
786  &funcdata);
787  return list;
788 }
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:3248
STRUCTS.

◆ 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 263 of file gnc-option.hpp.

266 {
267  return new GncOption(section, name, key, doc_string, value, ui_type);
268 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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 1198 of file gnc-optiondb.cpp.

1199 {
1200  constexpr const char* business_section{N_("Business")};
1201  constexpr const char* counter_section{N_("Counters")};
1202  static const std::string empty_string{""};
1203 
1204 //Accounts Tab
1205 
1206  gnc_register_number_range_option<double>(odb, OPTION_SECTION_ACCOUNTS,
1207  OPTION_NAME_AUTO_READONLY_DAYS, "a",
1208  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."),
1209  0.0, 0.0, 3650.0, 1.0);
1210 
1211  gnc_register_simple_boolean_option(odb, OPTION_SECTION_ACCOUNTS,
1212  OPTION_NAME_NUM_FIELD_SOURCE, "b",
1213  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."),
1214  false);
1215  gnc_register_simple_boolean_option(odb, OPTION_SECTION_ACCOUNTS,
1216  OPTION_NAME_TRADING_ACCOUNTS, "a",
1217  N_("Check to have trading accounts used for transactions involving more than one currency or commodity."),
1218  false);
1219 
1220 //Budgeting Tab
1221 
1222  gnc_register_budget_option(odb, OPTION_SECTION_BUDGETING,
1223  OPTION_NAME_DEFAULT_BUDGET, "a",
1224  N_("Budget to be used when none has been otherwise specified."),
1225  nullptr);
1226 
1227 //Counters Tab
1228 
1229  gnc_register_counter_option(odb, counter_section,
1230  N_("Customer number"), "gncCustomera",
1231  N_("The previous customer number generated. This number will be incremented to generate the next customer number."),
1232  0);
1233  gnc_register_counter_format_option(odb, counter_section,
1234  N_("Customer number format"),
1235  "gncCustomerb",
1236  N_("The format string to use for generating customer numbers. This is a printf-style format string."),
1237  empty_string);
1238  gnc_register_counter_option(odb, counter_section,
1239  N_("Employee number"), "gncEmployeea",
1240  N_("The previous employee number generated. This number will be incremented to generate the next employee number."),
1241  0);
1242  gnc_register_counter_format_option(odb, counter_section,
1243  N_("Employee number format"),
1244  "gncEmployeeb",
1245  N_("The format string to use for generating employee numbers. This is a printf-style format string."),
1246  empty_string);
1247  gnc_register_counter_option(odb, counter_section,
1248  N_("Invoice number"), "gncInvoicea",
1249  N_("The previous invoice number generated. This number will be incremented to generate the next invoice number."),
1250  0);
1251  gnc_register_counter_format_option(odb, counter_section,
1252  N_("Invoice number format"),
1253  "gncInvoiceb",
1254  N_("The format string to use for generating invoice numbers. This is a printf-style format string."),
1255  empty_string);
1256  gnc_register_counter_option(odb, counter_section,
1257  N_("Bill number"), "gncBilla",
1258  N_("The previous bill number generated. This number will be incremented to generate the next bill number."),
1259  0);
1260  gnc_register_counter_format_option(odb, counter_section,
1261  N_("Bill number format"), "gncBillb",
1262  N_("The format string to use for generating bill numbers. This is a printf-style format string."),
1263  empty_string);
1264  gnc_register_counter_option(odb, counter_section,
1265  N_("Expense voucher number"), "gncExpVouchera",
1266  N_("The previous expense voucher number generated. This number will be incremented to generate the next voucher number."),
1267  0);
1268  gnc_register_counter_format_option(odb, counter_section,
1269  N_("Expense voucher number format"),
1270  "gncExpVoucherb",
1271  N_("The format string to use for generating expense voucher numbers. This is a printf-style format string."),
1272  empty_string);
1273  gnc_register_counter_option(odb, counter_section,
1274  N_("Job number"), "gncJoba",
1275  N_("The previous job number generated. This number will be incremented to generate the next job number."),
1276  0);
1277  gnc_register_counter_format_option(odb, counter_section,
1278  N_("Job number format"), "gncJobb",
1279  N_("The format string to use for generating job numbers. This is a printf-style format string."),
1280  empty_string);
1281  gnc_register_counter_option(odb, counter_section,
1282  N_("Order number"), "gncOrdera",
1283  N_("The previous order number generated. This number will be incremented to generate the next order number."),
1284  0);
1285  gnc_register_counter_format_option(odb, counter_section,
1286  N_("Order number format"), "gncOrderb",
1287  N_("The format string to use for generating order numbers. This is a printf-style format string."),
1288  empty_string);
1289  gnc_register_counter_option(odb, counter_section,
1290  N_("Vendor number"), "gncVendora",
1291  N_("The previous vendor number generated. This number will be incremented to generate the next vendor number."),
1292  0);
1293  gnc_register_counter_format_option(odb, counter_section,
1294  N_("Vendor number format"), "gncVendorb",
1295  N_("The format string to use for generating vendor numbers. This is a printf-style format string."),
1296  empty_string);
1297 
1298 //Business Tab
1299 
1300  gnc_register_string_option(odb, business_section, N_("Company Name"), "a",
1301  N_("The name of your business."),
1302  empty_string);
1303  gnc_register_text_option(odb, business_section, N_("Company Address"), "b1",
1304  N_("The address of your business."),
1305  empty_string);
1306  gnc_register_string_option(odb, business_section,
1307  N_("Company Contact Person"), "b2",
1308  N_("The contact person to print on invoices."),
1309  empty_string);
1310  gnc_register_string_option(odb, business_section,
1311  N_("Company Phone Number"), "c1",
1312  N_("The contact person to print on invoices."),
1313  empty_string);
1314  gnc_register_string_option(odb, business_section,
1315  N_("Company Fax Number"), "c2",
1316  N_("The fax number of your business."),
1317  empty_string);
1318  gnc_register_string_option(odb, business_section,
1319  N_("Company Email Address"), "c3",
1320  N_ ("The email address of your business."),
1321  empty_string);
1322  gnc_register_string_option(odb, business_section,
1323  N_("Company Website URL"), "c4",
1324  N_("The URL address of your website."),
1325  empty_string);
1326  gnc_register_string_option(odb, business_section, N_("Company ID"), "c5",
1327  N_("The ID for your company (eg 'Tax-ID: 00-000000)."),
1328  empty_string);
1329  gnc_register_invoice_print_report_option(odb, business_section,
1330  OPTION_NAME_DEFAULT_INVOICE_REPORT, "e1",
1331  N_("The invoice report to be used for printing."),
1332  empty_string);
1333  gnc_register_number_range_option<double>(odb, business_section,
1334  OPTION_NAME_DEFAULT_INVOICE_REPORT_TIMEOUT, "e2",
1335  N_("Length of time to change the used invoice report. A value of 0 means disabled."),
1336  0.0, 0.0, 20.0, 1.0);
1337  gnc_register_taxtable_option(odb, business_section,
1338  N_("Default Customer TaxTable"), "f1",
1339  N_("The default tax table to apply to customers."),
1340  nullptr);
1341  gnc_register_taxtable_option(odb, business_section,
1342  N_("Default Vendor TaxTable"), "f2",
1343  N_("The default tax table to apply to vendors."),
1344  nullptr);
1345 
1346  gnc_register_dateformat_option(odb, business_section,
1347  N_("Fancy Date Format"), "g",
1348  N_("The default date format used for fancy printed dates."),
1349  {QOF_DATE_FORMAT_UNSET, GNCDATE_MONTH_NUMBER, true, ""});
1350 
1351 //Tax Tab
1352 
1353  gnc_register_string_option(odb, N_("Tax"), N_("Tax Number"), "a",
1354  N_("The electronic tax number of your business"),
1355  empty_string);
1356 }
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_invoice_print_report_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, std::string value)
Create a new print report option and register it in the options database.
No Fancy Date Format, use Global.
Definition: gnc-date.h:131
void gnc_register_counter_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, int value)
Create a new counter 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_dateformat_option(GncOptionDB *db, const char *section, const char *name, const char *key, const char *doc_string, GncOptionDateFormat &&value)
Create a new date format 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 1174 of file gnc-optiondb.cpp.

1175 {
1176  odb->foreach_section(
1177  [](GncOptionSectionPtr& section){
1178  section->foreach_option(
1179  [](GncOption& option) {
1180  option.set_ui_item_from_option();
1181  });
1182  });
1183 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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 1148 of file gnc-optiondb.cpp.

1149 {
1150  GList* errors{};
1151  odb->foreach_section(
1152  [&errors](GncOptionSectionPtr& section){
1153  section->foreach_option(
1154  [&errors](GncOption& option) {
1155  try
1156  {
1157  option.set_option_from_ui_item();
1158  }
1159  catch (const std::invalid_argument& err)
1160  {
1161  PWARN("Option %s:%s failed to set its value %s",
1162  option.get_section().c_str(),
1163  option.get_name().c_str(), err.what());
1164  errors = g_list_prepend(errors,
1165  (void*)option.get_name().c_str());
1166  } });
1167  });
1168  if (!errors)
1169  odb->run_callbacks();
1170  return errors;
1171 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
#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 1142 of file gnc-optiondb.cpp.

1143 {
1144  PWARN("Direct Destroy called on GncOptionDB %" G_GUINT64_FORMAT, (uint64_t)odb);
1145 }
#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 1185 of file gnc-optiondb.cpp.

1186 {
1187  odb->load_from_kvp(book);
1188 }

◆ gnc_option_db_lookup_qofinstance_value()

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

Retrieve the QofInstance 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 1358 of file gnc-optiondb.cpp.

1360 {
1361  auto option{odb->find_option(section, name)};
1362  if (option)
1363  return option->get_value<const QofInstance*>();
1364  else
1365  return nullptr;
1366 }

◆ 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 1136 of file gnc-optiondb.cpp.

1137 {
1138  return new GncOptionDB;
1139 }
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 1191 of file gnc-optiondb.cpp.

1193 {
1194  odb->save_to_kvp(book, static_cast<bool>(clear_options));
1195 }

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 745 of file gnc-optiondb.cpp.

751 {
752  try
753  {
754  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
755  GncOptionUIType::ACCOUNT_LIST, value, std::move(allowed)}};
756  db->register_option(section, std::move(option));
757  }
758  catch (const std::invalid_argument& err)
759  {
760  PWARN("Account List Limited Option, value failed validation, option not registered.");
761  }
762 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
Set one or more accounts on which to report, optionally restricted to certain account types...
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 734 of file gnc-optiondb.cpp.

738 {
739  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
740  GncOptionUIType::ACCOUNT_LIST, value}};
741  db->register_option(section, std::move(option));
742 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
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.
keyA short tag used to sort the controls in the dialog.
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 792 of file gnc-optiondb.cpp.

797 {
798  try
799  {
800  GncOption option{GncOptionAccountSelValue{section, name, key, doc_string,
801  GncOptionUIType::ACCOUNT_SEL, value, std::move(allowed)}};
802  db->register_option(section, std::move(option));
803  }
804  catch (const std::invalid_argument& err)
805  {
806  PWARN("Account Sel Limited Option, value failed validation, option not registerd.");
807  }
808 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 657 of file gnc-optiondb.cpp.

660 {
661  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
662  (const QofInstance*)value,
663  GncOptionUIType::BUDGET}};
664  db->register_option(section, std::move(option));
665 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 668 of file gnc-optiondb.cpp.

671 {
672  GncOption option{section, name, key, doc_string, value,
673  GncOptionUIType::COLOR};
674  db->register_option(section, std::move(option));
675 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ gnc_register_commodity_option() [1/2]

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.
keyA short tag used to sort the controls in the dialog.
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 678 of file gnc-optiondb.cpp.

681 {
682  GncOption option{GncOptionCommodityValue{section, name, key, doc_string,
683  value,
684  GncOptionUIType::COMMODITY}};
685  db->register_option(section, std::move(option));
686 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
class GncOptionCommodityValue Commodities are stored with their namespace and mnemonic instead of the...

◆ gnc_register_commodity_option() [2/2]

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

As above but with a const char* value, which should be the symbol for the commodity.

All security editor namespaces will be searched to retrieve it.

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

692 {
693  gnc_commodity* commodity{};
694  const auto book{qof_session_get_book(gnc_get_current_session())};
695  const auto commodity_table{gnc_commodity_table_get_table(book)};
696  const auto namespaces{gnc_commodity_table_get_namespaces(commodity_table)};
697  for (auto node = namespaces; node && commodity == nullptr;
698  node = g_list_next(node))
699  {
700  commodity = gnc_commodity_table_lookup(commodity_table,
701  (const char*)(node->data),
702  value);
703  if (commodity)
704  break;
705  }
706  GncOption option{GncOptionCommodityValue{section, name, key, doc_string,
707  commodity,
708  GncOptionUIType::COMMODITY}};
709  db->register_option(section, std::move(option));
710 }
gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book)
Returns the commodity table associated with a book.
Represents the public interface for an option.
Definition: gnc-option.hpp:135
QofBook * qof_session_get_book(const QofSession *session)
Returns the QofBook of this session.
Definition: qofsession.cpp:574
GList * gnc_commodity_table_get_namespaces(const gnc_commodity_table *table)
Return a list of all namespaces in the commodity table.
class GncOptionCommodityValue Commodities are stored with their namespace and mnemonic instead of the...

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 957 of file gnc-optiondb.cpp.

961 {
962  GncOption option{section, name, key, doc_string, value,
963  GncOptionUIType::STRING};
964  db->register_option(section, std::move(option));
965 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ gnc_register_counter_option()

void gnc_register_counter_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
int  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.
keyA short tag used to sort the controls in the dialog.
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 946 of file gnc-optiondb.cpp.

949 {
950  GncOption option{GncOptionRangeValue<int>{section, name, key, doc_string,
951  value, 0, 999999999, 1}};
952  option.set_alternate(true);
953  db->register_option(section, std::move(option));
954 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
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.
keyA short tag used to sort the controls in the dialog.
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 978 of file gnc-optiondb.cpp.

981 {
983  section, name, key, doc_string, value, GncOptionUIType::CURRENCY
984  }};
985  db->register_option(section, std::move(option));
986 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
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.
keyA short tag used to sort the controls in the dialog.
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 1019 of file gnc-optiondb.cpp.

1023 {
1024  auto ui_type = ui == RelativeDateUI::BOTH ? GncOptionUIType::DATE_BOTH :
1025  ui == RelativeDateUI::RELATIVE ? GncOptionUIType::DATE_RELATIVE :
1026  GncOptionUIType::DATE_ABSOLUTE;
1027  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1028  ui_type, period)};
1029  db->register_option(section, std::move(option));
1030 }
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:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 1005 of file gnc-optiondb.cpp.

1009 {
1010  auto ui_type = ui == RelativeDateUI::BOTH ? GncOptionUIType::DATE_BOTH :
1011  ui == RelativeDateUI::RELATIVE ? GncOptionUIType::DATE_RELATIVE :
1012  GncOptionUIType::DATE_ABSOLUTE;
1013  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1014  ui_type, time)};
1015  db->register_option(section, std::move(option));
1016 }
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:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 1033 of file gnc-optiondb.cpp.

1038 {
1039  auto is_absolute = period_set.size() == 1 &&
1040  period_set.front() == RelativeDatePeriod::ABSOLUTE;
1041  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
1042  is_absolute ? GncOptionUIType::DATE_ABSOLUTE : GncOptionUIType::DATE_RELATIVE;
1043  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1044  ui_type, period_set)};
1045  if (is_absolute)
1046  option.set_default_value(gnc_time(nullptr));
1047  db->register_option(section, std::move(option));
1048 }
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:135
time64 gnc_time(time64 *tbuf)
get the current time
Definition: gnc-date.cpp:261

◆ gnc_register_dateformat_option()

void gnc_register_dateformat_option ( GncOptionDB db,
const char *  section,
const char *  name,
const char *  key,
const char *  doc_string,
GncOptionDateFormat &&  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.
keyA short tag used to sort the controls in the dialog.
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 968 of file gnc-optiondb.cpp.

971 {
972  GncOption option{section, name, key, doc_string, std::move(value),
973  GncOptionUIType::DATE_FORMAT};
974  db->register_option(section, std::move(option));
975 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 1088 of file gnc-optiondb.cpp.

1091 {
1092  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
1093  GncOptionUIType::DATE_RELATIVE;
1094  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1095  ui_type, end_dates)};
1096  db->register_option(section, std::move(option));
1097 }
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:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 647 of file gnc-optiondb.cpp.

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

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 914 of file gnc-optiondb.cpp.

917 {
918  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
919  (const QofInstance*)value,
920  GncOptionUIType::INVOICE}};
921  db->register_option(section, std::move(option));
922 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ gnc_register_invoice_print_report_option()

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

Create a new print report 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 936 of file gnc-optiondb.cpp.

939 {
940  GncOption option{section, name, key, doc_string,
941  value, GncOptionUIType::INV_REPORT};
942  db->register_option(section, std::move(option));
943 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 830 of file gnc-optiondb.cpp.

834 {
835  GncOption option{GncOptionMultichoiceValue{section, name, key, doc_string,
836  value, std::move(list), GncOptionUIType::LIST}};
837  db->register_option(section, std::move(option));
838 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
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.
keyA short tag used to sort the controls in the dialog.
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 811 of file gnc-optiondb.cpp.

815 {
816  std::string defval{default_val};
817  auto found{std::find_if(choices.begin(), choices.end(),
818  [&defval](auto& choice)->bool {
819  return defval == std::get<0>(choice);
820  })};
821  if (found == choices.end())
822  defval = (choices.empty() ? std::string{"None"} :
823  std::get<0>(choices.at(0)));
824  GncOption option{GncOptionMultichoiceValue{section, name, key, doc_string,
825  defval.c_str(), std::move(choices)}};
826  db->register_option(section, std::move(option));
827 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
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.
keyA short tag used to sort the controls in the dialog.
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 864 of file gnc-optiondb.cpp.

868 {
869 //65K is 10x reasonable, but it's a convenient constant.
870  GncOption option{GncOptionRangeValue<int>{section, name, key, doc_string,
871  value, 10, UINT16_MAX, 1, GncOptionUIType::PLOT_SIZE}};
872  db->register_option(section, std::move(option));
873 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
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.
keyA short tag used to sort the controls in the dialog.
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 844 of file gnc-optiondb.cpp.

848 {
849  try
850  {
851  GncOption option{GncOptionRangeValue<ValueType>{section, name, key,
852  doc_string, value, min,
853  max, step}};
854  db->register_option(section, std::move(option));
855  }
856  catch(const std::invalid_argument& err)
857  {
858  PWARN("Number Range Option %s, option not registerd.",
859  err.what());
860  }
861 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250
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,
GncOwnerType  type 
)

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.
keyA short tag used to sort the controls in the dialog.
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.
typeThe type of owner, determines the UI type.

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

889 {
890  GncOptionUIType uitype;
891  switch (type)
892  {
893  case GNC_OWNER_CUSTOMER:
894  uitype = GncOptionUIType::CUSTOMER;
895  break;
896  case GNC_OWNER_EMPLOYEE:
897  uitype = GncOptionUIType::EMPLOYEE;
898  break;
899  case GNC_OWNER_JOB:
900  uitype = GncOptionUIType::JOB;
901  break;
902  case GNC_OWNER_VENDOR:
903  uitype = GncOptionUIType::VENDOR;
904  break;
905  default:
906  uitype = GncOptionUIType::INTERNAL;
907  };
908  GncOption option{GncOptionGncOwnerValue{section, name, key, doc_string,
909  value, uitype}};
910  db->register_option(section, std::move(option));
911 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135
GncOptionUIType
Used by GncOptionClassifier to indicate to dialog-options what control should be displayed for the op...

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 724 of file gnc-optiondb.cpp.

727 {
728  GncOption option{section, name, key, doc_string, value,
729  GncOptionUIType::PIXMAP};
730  db->register_option(section, std::move(option));
731 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ gnc_register_query_option()

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

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

Query options have no UI component so they don't get a key or a docstring.

Parameters
dbA GncOptionDB* for calling from C. Caller retains ownership.
sectionThe database section for the option.
nameThe option name.
valueThe initial and default value for the option.

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

878 {
879  GncOption option{section, name, "", "", value,
880  GncOptionUIType::INTERNAL};
881  db->register_option(section, std::move(option));
882 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 713 of file gnc-optiondb.cpp.

717 {
718  GncOption option{section, name, key, doc_string, value,
719  GncOptionUIType::BOOLEAN};
720  db->register_option(section, std::move(option));
721 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 1064 of file gnc-optiondb.cpp.

1067 {
1068  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
1069  GncOptionUIType::DATE_RELATIVE;
1070  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1071  ui_type, begin_dates)};
1072  db->register_option(section, std::move(option));
1073 }
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:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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{section, name, key, doc_string, value,
631  GncOptionUIType::STRING};
632  db->register_option(section, std::move(option));
633 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 925 of file gnc-optiondb.cpp.

928 {
929  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
930  (const QofInstance*)value,
931  GncOptionUIType::TAX_TABLE}};
932  db->register_option(section, std::move(option));
933 }
Represents the public interface for an option.
Definition: gnc-option.hpp:135

◆ 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.
keyA short tag used to sort the controls in the dialog.
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 636 of file gnc-optiondb.cpp.

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

◆ 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 373 of file gnc-option-date.cpp.

374 {
375  if (per == RelativeDatePeriod::ABSOLUTE)
376  return nullptr;
377  return checked_reldate(per).m_description;
378 }

◆ 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 366 of file gnc-option-date.cpp.

367 {
368  if (per == RelativeDatePeriod::ABSOLUTE)
369  return nullptr;
370  return checked_reldate(per).m_display;
371 }

◆ 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 381 of file gnc-option-date.cpp.

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

◆ 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 350 of file gnc-option-date.cpp.

351 {
352  if (per == RelativeDatePeriod::ABSOLUTE)
353  return false;
354  return checked_reldate(per).m_type == RelativeDateType::END;
355 }

◆ 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 332 of file gnc-option-date.cpp.

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

◆ 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 342 of file gnc-option-date.cpp.

343 {
344  if (per == RelativeDatePeriod::ABSOLUTE)
345  return false;
346  return checked_reldate(per).m_type == RelativeDateType::START;
347 }

◆ 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 358 of file gnc-option-date.cpp.

359 {
360  if (per == RelativeDatePeriod::ABSOLUTE)
361  return nullptr;
362  return checked_reldate(per).m_storage;
363 }

◆ 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 486 of file gnc-option-date.cpp.

487 {
488  if (period == RelativeDatePeriod::TODAY)
489  return static_cast<time64>(GncDateTime());
490  if (period == RelativeDatePeriod::START_ACCOUNTING_PERIOD)
491  return gnc_accounting_period_fiscal_start();
492  if (period == RelativeDatePeriod::END_ACCOUNTING_PERIOD)
493  return gnc_accounting_period_fiscal_end();
494 
495  GncDateTime now_t;
496  if (period == RelativeDatePeriod::TODAY)
497  return static_cast<time64>(now_t);
498  auto now{static_cast<tm>(now_t)};
499  auto acct_per{static_cast<tm>(GncDateTime(gnc_accounting_period_fiscal_start()))};
500 
501  if (acct_per.tm_mon == now.tm_mon && acct_per.tm_mday == now.tm_mday)
502  {
503  //No set accounting period, use the calendar year
504  acct_per.tm_mon = 0;
505  acct_per.tm_mday = 0;
506  }
507 
508  switch(reldate_offset(period))
509  {
510  case RelativeDateOffset::NONE:
511 // Report on today so nothing to do
512  break;
513  case RelativeDateOffset::YEAR:
514  if (reldate_is_prev(period))
515  --now.tm_year;
516  else if (reldate_is_next(period))
517  ++now.tm_year;
518  if (gnc_relative_date_is_starting(period))
519  now.tm_mon = 0;
520  else if (gnc_relative_date_is_ending(period))
521  now.tm_mon = 11;
522  break;
523  case RelativeDateOffset::SIX:
524  if (reldate_is_prev(period))
525  now.tm_mon -= 6;
526  else if (reldate_is_next(period))
527  now.tm_mon += 6;
528  break;
529  case RelativeDateOffset::QUARTER:
530  {
531  auto delta = (now.tm_mon > acct_per.tm_mon ?
532  ( now.tm_mon - acct_per.tm_mon) % 3 :
533  3 - ((acct_per.tm_mon - now.tm_mon) % 3));
534  now.tm_mon = now.tm_mon - delta;
535  }
536  [[fallthrough]];
537  case RelativeDateOffset::THREE:
538  if (reldate_is_prev(period))
539  now.tm_mon -= 3;
540  else if (reldate_is_next(period))
541  now.tm_mon += 3;
542  if (gnc_relative_date_is_ending(period))
543  now.tm_mon += 2;
544  break;
545  case RelativeDateOffset::MONTH:
546  if (reldate_is_prev(period))
547  --now.tm_mon;
548  else if (reldate_is_next(period))
549  ++now.tm_mon;
550  break;
551  case RelativeDateOffset::WEEK:
552  if (reldate_is_prev(period))
553  now.tm_mday -= 7;
554  else if (reldate_is_next(period))
555  now.tm_mday += 7;
556  }
557  reldate_set_day_and_time(now, checked_reldate(period).m_type);
558  normalize_reldate_tm(now);
559  return static_cast<time64>(GncDateTime(now));
560 }
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
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Definition: gnc-date.h:87

◆ 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 563 of file gnc-option-date.cpp.

564 {
565  ostr << "'reldate . " << gnc_relative_date_display_string(per);
566  return ostr;
567 }
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 80 of file gnc-option-date.hpp.