GnuCash  4.12-527-g05ffd3d4eb
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< 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 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_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_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 uint16_t_max = std::numeric_limits<uint16_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 730 of file gnc-optiondb.cpp.

732 {
733  GncOptionAccountList list;
734  AccountPair funcdata{list, types};
735  Account* base_acct = gnc_book_get_root_account(book);
736  gnc_account_foreach_descendant(base_acct, (AccountCb)find_children,
737  &funcdata);
738  return list;
739 }
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 254 of file gnc-option.hpp.

257 {
258  return new GncOption(section, name, key, doc_string, value, ui_type);
259 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

1139 {
1140  constexpr const char* business_section{N_("Business")};
1141  constexpr const char* counter_section{N_("Counters")};
1142  static const std::string empty_string{""};
1143 
1144 //Accounts Tab
1145 
1146  gnc_register_number_range_option<double>(odb, OPTION_SECTION_ACCOUNTS,
1147  OPTION_NAME_AUTO_READONLY_DAYS, "a",
1148  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."),
1149  0.0, 0.0, 3650.0, 1.0);
1150 
1151  gnc_register_simple_boolean_option(odb, OPTION_SECTION_ACCOUNTS,
1152  OPTION_NAME_NUM_FIELD_SOURCE, "b",
1153  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."),
1154  false);
1155  gnc_register_simple_boolean_option(odb, OPTION_SECTION_ACCOUNTS,
1156  OPTION_NAME_TRADING_ACCOUNTS, "a",
1157  N_("Check to have trading accounts used for transactions involving more than one currency or commodity."),
1158  false);
1159 
1160 //Budgeting Tab
1161 
1162  gnc_register_budget_option(odb, OPTION_SECTION_BUDGETING,
1163  OPTION_NAME_DEFAULT_BUDGET, "a",
1164  N_("Budget to be used when none has been otherwise specified."),
1165  nullptr);
1166 
1167 //Counters Tab
1168 
1169  gnc_register_counter_option(odb, counter_section,
1170  N_("Customer number"), "gncCustomera",
1171  N_("The previous customer number generated. This number will be incremented to generate the next customer number."),
1172  0.0);
1173  gnc_register_counter_format_option(odb, counter_section,
1174  N_("Customer number format"),
1175  "gncCustomerb",
1176  N_("The format string to use for generating customer numbers. This is a printf-style format string."),
1177  empty_string);
1178  gnc_register_counter_option(odb, counter_section,
1179  N_("Employee number"), "gncEmployeea",
1180  N_("The previous employee number generated. This number will be incremented to generate the next employee number."),
1181  0.0);
1182  gnc_register_counter_format_option(odb, counter_section,
1183  N_("Employee number format"),
1184  "gncEmployeeb",
1185  N_("The format string to use for generating employee numbers. This is a printf-style format string."),
1186  empty_string);
1187  gnc_register_counter_option(odb, counter_section,
1188  N_("Invoice number"), "gncInvoicea",
1189  N_("The previous invoice number generated. This number will be incremented to generate the next invoice number."),
1190  0.0);
1191  gnc_register_counter_format_option(odb, counter_section,
1192  N_("Invoice number format"),
1193  "gncInvoiceb",
1194  N_("The format string to use for generating invoice numbers. This is a printf-style format string."),
1195  empty_string);
1196  gnc_register_counter_option(odb, counter_section,
1197  N_("Bill number"), "gncBilla",
1198  N_("The previous bill number generated. This number will be incremented to generate the next bill number."),
1199  0.0);
1200  gnc_register_counter_format_option(odb, counter_section,
1201  N_("Bill number format"), "gncBillb",
1202  N_("The format string to use for generating bill numbers. This is a printf-style format string."),
1203  empty_string);
1204  gnc_register_counter_option(odb, counter_section,
1205  N_("Expense voucher number"), "gncExpVouchera",
1206  N_("The previous expense voucher number generated. This number will be incremented to generate the next voucher number."),
1207  0.0);
1208  gnc_register_counter_format_option(odb, counter_section,
1209  N_("Expense voucher number format"),
1210  "gncExpVoucherb",
1211  N_("The format string to use for generating expense voucher numbers. This is a printf-style format string."),
1212  empty_string);
1213  gnc_register_counter_option(odb, counter_section,
1214  N_("Job number"), "gncJoba",
1215  N_("The previous job number generated. This number will be incremented to generate the next job number."),
1216  0.0);
1217  gnc_register_counter_format_option(odb, counter_section,
1218  N_("Job number format"), "gncJobb",
1219  N_("The format string to use for generating job numbers. This is a printf-style format string."),
1220  empty_string);
1221  gnc_register_counter_option(odb, counter_section,
1222  N_("Order number"), "gncOrdera",
1223  N_("The previous order number generated. This number will be incremented to generate the next order number."),
1224  0.0);
1225  gnc_register_counter_format_option(odb, counter_section,
1226  N_("Order number format"), "gncOrderb",
1227  N_("The format string to use for generating order numbers. This is a printf-style format string."),
1228  empty_string);
1229  gnc_register_counter_option(odb, counter_section,
1230  N_("Vendor number"), "gncVendora",
1231  N_("The previous vendor number generated. This number will be incremented to generate the next vendor number."),
1232  0.0);
1233  gnc_register_counter_format_option(odb, counter_section,
1234  N_("Vendor number format"), "gncVendorb",
1235  N_("The format string to use for generating vendor numbers. This is a printf-style format string."),
1236  empty_string);
1237 
1238 //Business Tab
1239 
1240  gnc_register_string_option(odb, business_section, N_("Company Name"), "a",
1241  N_("The name of your business."),
1242  empty_string);
1243  gnc_register_text_option(odb, business_section, N_("Company Address"), "b1",
1244  N_("The address of your business."),
1245  empty_string);
1246  gnc_register_string_option(odb, business_section,
1247  N_("Company Contact Person"), "b2",
1248  N_("The contact person to print on invoices."),
1249  empty_string);
1250  gnc_register_string_option(odb, business_section,
1251  N_("Company Phone Number"), "c1",
1252  N_("The contact person to print on invoices."),
1253  empty_string);
1254  gnc_register_string_option(odb, business_section,
1255  N_("Company Fax Number"), "c2",
1256  N_("The fax number of your business."),
1257  empty_string);
1258  gnc_register_string_option(odb, business_section,
1259  N_("Company Email Address"), "c3",
1260  N_ ("The email address of your business."),
1261  empty_string);
1262  gnc_register_string_option(odb, business_section,
1263  N_("Company Website URL"), "c4",
1264  N_("The URL address of your website."),
1265  empty_string);
1266  gnc_register_string_option(odb, business_section, N_("Company ID"), "c5",
1267  N_("The ID for your company (eg 'Tax-ID: 00-000000)."),
1268  empty_string);
1269 
1270  gnc_register_taxtable_option(odb, business_section,
1271  N_("Default Customer TaxTable"), "e",
1272  N_("The default tax table to apply to customers."),
1273  nullptr);
1274  gnc_register_taxtable_option(odb, business_section,
1275  N_("Default Vendor TaxTable"), "f",
1276  N_("The default tax table to apply to vendors."),
1277  nullptr);
1278  gnc_register_dateformat_option(odb, business_section,
1279  N_("Fancy Date Format"), "g",
1280  N_("The default date format used for fancy printed dates."),
1281  empty_string);
1282 
1283 //Tax Tab
1284 
1285  gnc_register_string_option(odb, N_("Tax"), N_("Tax Number"), "a",
1286  N_("The electronic tax number of your business"),
1287  empty_string);
1288 }
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 1114 of file gnc-optiondb.cpp.

1115 {
1116  odb->foreach_section(
1117  [](GncOptionSectionPtr& section){
1118  section->foreach_option(
1119  [](GncOption& option) {
1120  option.set_ui_item_from_option();
1121  });
1122  });
1123 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

1089 {
1090  GList* errors{};
1091  odb->foreach_section(
1092  [&errors](GncOptionSectionPtr& section){
1093  section->foreach_option(
1094  [&errors](GncOption& option) {
1095  try
1096  {
1097  option.set_option_from_ui_item();
1098  }
1099  catch (const std::invalid_argument& err)
1100  {
1101  PWARN("Option %s:%s failed to set its value %s",
1102  option.get_section().c_str(),
1103  option.get_name().c_str(), err.what());
1104  errors = g_list_prepend(errors,
1105  (void*)option.get_name().c_str());
1106  } });
1107  });
1108  if (!errors)
1109  odb->run_callbacks();
1110  return errors;
1111 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
#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 1082 of file gnc-optiondb.cpp.

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

1126 {
1127  odb->load_from_kvp(book);
1128 }

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

1309 {
1310  auto option{odb->find_option(section, name)};
1311  return option->get_value<const QofInstance*>();
1312 }

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

1292 {
1293  auto value{odb->lookup_string_option(section, name)};
1294  if (value.empty())
1295  return nullptr;
1296  return strdup(value.c_str());
1297 }

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

1077 {
1078  return new GncOptionDB;
1079 }
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 1131 of file gnc-optiondb.cpp.

1133 {
1134  odb->save_to_kvp(book, static_cast<bool>(clear_options));
1135 }

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

1302 {
1303  odb->set_option<std::string>(section, name, value);
1304 }

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

702 {
703  try
704  {
705  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
706  GncOptionUIType::ACCOUNT_LIST, value, std::move(allowed)}};
707  db->register_option(section, std::move(option));
708  }
709  catch (const std::invalid_argument& err)
710  {
711  PWARN("Account List Limited Option, value failed validation, option not registered.");
712  }
713 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 685 of file gnc-optiondb.cpp.

689 {
690  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
691  GncOptionUIType::ACCOUNT_LIST, value}};
692  db->register_option(section, std::move(option));
693 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 743 of file gnc-optiondb.cpp.

748 {
749  try
750  {
751  GncOption option{GncOptionAccountSelValue{section, name, key, doc_string,
752  GncOptionUIType::ACCOUNT_SEL, value, std::move(allowed)}};
753  db->register_option(section, std::move(option));
754  }
755  catch (const std::invalid_argument& err)
756  {
757  PWARN("Account Sel Limited Option, value failed validation, option not registerd.");
758  }
759 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
#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 608 of file gnc-optiondb.cpp.

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

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

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

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

632 {
633  GncOption option{GncOptionCommodityValue{section, name, key, doc_string,
634  value,
635  GncOptionUIType::COMMODITY}};
636  db->register_option(section, std::move(option));
637 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 640 of file gnc-optiondb.cpp.

643 {
644  gnc_commodity* commodity{};
645  const auto book{qof_session_get_book(gnc_get_current_session())};
646  const auto commodity_table{gnc_commodity_table_get_table(book)};
647  const auto namespaces{gnc_commodity_table_get_namespaces(commodity_table)};
648  for (auto node = namespaces; node && commodity == nullptr;
649  node = g_list_next(node))
650  {
651  commodity = gnc_commodity_table_lookup(commodity_table,
652  (const char*)(node->data),
653  value);
654  if (commodity)
655  break;
656  }
657  GncOption option{GncOptionCommodityValue{section, name, key, doc_string,
658  commodity,
659  GncOptionUIType::COMMODITY}};
660  db->register_option(section, std::move(option));
661 }
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:130
QofBook * qof_session_get_book(const QofSession *session)
Returns the QofBook of this session.
Definition: qofsession.cpp:578
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 897 of file gnc-optiondb.cpp.

901 {
902  GncOption option{section, name, key, doc_string, value,
903  GncOptionUIType::STRING};
904  db->register_option(section, std::move(option));
905 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

890 {
891  GncOption option{GncOptionRangeValue<double>{section, name, key, doc_string,
892  value, 0.0, 999999999.0, 1.0}};
893  db->register_option(section, std::move(option));
894 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 918 of file gnc-optiondb.cpp.

921 {
923  section, name, key, doc_string, value, GncOptionUIType::CURRENCY
924  }};
925  db->register_option(section, std::move(option));
926 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 959 of file gnc-optiondb.cpp.

963 {
964  auto ui_type = ui == RelativeDateUI::BOTH ? GncOptionUIType::DATE_BOTH :
965  ui == RelativeDateUI::RELATIVE ? GncOptionUIType::DATE_RELATIVE :
966  GncOptionUIType::DATE_ABSOLUTE;
967  GncOption option{GncOptionDateValue(section, name, key, doc_string,
968  ui_type, period)};
969  db->register_option(section, std::move(option));
970 }
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:130

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

949 {
950  auto ui_type = ui == RelativeDateUI::BOTH ? GncOptionUIType::DATE_BOTH :
951  ui == RelativeDateUI::RELATIVE ? GncOptionUIType::DATE_RELATIVE :
952  GncOptionUIType::DATE_ABSOLUTE;
953  GncOption option{GncOptionDateValue(section, name, key, doc_string,
954  ui_type, time)};
955  db->register_option(section, std::move(option));
956 }
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:130

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

978 {
979  auto is_absolute = period_set.size() == 1 &&
980  period_set.front() == RelativeDatePeriod::ABSOLUTE;
981  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
982  is_absolute ? GncOptionUIType::DATE_ABSOLUTE : GncOptionUIType::DATE_RELATIVE;
983  GncOption option{GncOptionDateValue(section, name, key, doc_string,
984  ui_type, period_set)};
985  if (is_absolute)
986  option.set_default_value(gnc_time(nullptr));
987  db->register_option(section, std::move(option));
988 }
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:130
time64 gnc_time(time64 *tbuf)
get the current local time
Definition: gnc-date.cpp:273

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

911 {
912  GncOption option{section, name, key, doc_string, value,
913  GncOptionUIType::DATE_FORMAT};
914  db->register_option(section, std::move(option));
915 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

1031 {
1032  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
1033  GncOptionUIType::DATE_RELATIVE;
1034  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1035  ui_type, end_dates)};
1036  db->register_option(section, std::move(option));
1037 }
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:130

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

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

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

868 {
869  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
870  (const QofInstance*)value,
871  GncOptionUIType::INVOICE}};
872  db->register_option(section, std::move(option));
873 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

785 {
786  GncOption option{GncOptionMultichoiceValue{section, name, key, doc_string,
787  value, std::move(list), GncOptionUIType::LIST}};
788  db->register_option(section, std::move(option));
789 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 762 of file gnc-optiondb.cpp.

766 {
767  std::string defval{default_val};
768  auto found{std::find_if(choices.begin(), choices.end(),
769  [&defval](auto& choice)->bool {
770  return defval == std::get<0>(choice);
771  })};
772  if (found == choices.end())
773  defval = (choices.empty() ? std::string{"None"} :
774  std::get<0>(choices.at(0)));
775  GncOption option{GncOptionMultichoiceValue{section, name, key, doc_string,
776  defval.c_str(), std::move(choices)}};
777  db->register_option(section, std::move(option));
778 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 815 of file gnc-optiondb.cpp.

819 {
820  // Pixel values don't make much sense so always use percent.
821  GncOption option{GncOptionRangeValue<int>{section, name, key, doc_string,
822  value, 10, 100, 1}};
823  db->register_option(section, std::move(option));
824 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 795 of file gnc-optiondb.cpp.

799 {
800  try
801  {
802  GncOption option{GncOptionRangeValue<ValueType>{section, name, key,
803  doc_string, value, min,
804  max, step}};
805  db->register_option(section, std::move(option));
806  }
807  catch(const std::invalid_argument& err)
808  {
809  PWARN("Number Range Option %s, option not registerd.",
810  err.what());
811  }
812 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
#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 836 of file gnc-optiondb.cpp.

840 {
841  GncOptionUIType uitype;
842  switch (type)
843  {
844  case GNC_OWNER_CUSTOMER:
845  uitype = GncOptionUIType::CUSTOMER;
846  break;
847  case GNC_OWNER_EMPLOYEE:
848  uitype = GncOptionUIType::EMPLOYEE;
849  break;
850  case GNC_OWNER_JOB:
851  uitype = GncOptionUIType::JOB;
852  break;
853  case GNC_OWNER_VENDOR:
854  uitype = GncOptionUIType::VENDOR;
855  break;
856  default:
857  uitype = GncOptionUIType::INTERNAL;
858  };
859  GncOption option{section, name, key, doc_string, value,
860  uitype};
861  db->register_option(section, std::move(option));
862 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130
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 675 of file gnc-optiondb.cpp.

678 {
679  GncOption option{section, name, key, doc_string, value,
680  GncOptionUIType::PIXMAP};
681  db->register_option(section, std::move(option));
682 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

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

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

668 {
669  GncOption option{section, name, key, doc_string, value,
670  GncOptionUIType::BOOLEAN};
671  db->register_option(section, std::move(option));
672 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

1007 {
1008  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
1009  GncOptionUIType::DATE_RELATIVE;
1010  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1011  ui_type, begin_dates)};
1012  db->register_option(section, std::move(option));
1013 }
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:130

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

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

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

879 {
880  GncOption option{GncOptionQofInstanceValue{section, name, key, doc_string,
881  (const QofInstance*)value,
882  GncOptionUIType::TAX_TABLE}};
883  db->register_option(section, std::move(option));
884 }
Represents the public interface for an option.
Definition: gnc-option.hpp:130

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

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

◆ 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.