GnuCash  5.6-150-g038405b370+
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 172 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 780 of file gnc-optiondb.cpp.

782 {
783  GncOptionAccountList list;
784  AccountPair funcdata{list, types};
785  Account* base_acct = gnc_book_get_root_account(book);
786  gnc_account_foreach_descendant(base_acct, (AccountCb)find_children,
787  &funcdata);
788  return list;
789 }
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 264 of file gnc-option.hpp.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

752 {
753  try
754  {
755  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
756  GncOptionUIType::ACCOUNT_LIST, value, std::move(allowed)}};
757  db->register_option(section, std::move(option));
758  }
759  catch (const std::invalid_argument& err)
760  {
761  PWARN("Account List Limited Option, value failed validation, option not registered.");
762  }
763 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
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 735 of file gnc-optiondb.cpp.

739 {
740  GncOption option{GncOptionAccountListValue{section, name, key, doc_string,
741  GncOptionUIType::ACCOUNT_LIST, value}};
742  db->register_option(section, std::move(option));
743 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
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 793 of file gnc-optiondb.cpp.

798 {
799  try
800  {
801  GncOption option{GncOptionAccountSelValue{section, name, key, doc_string,
802  GncOptionUIType::ACCOUNT_SEL, value, std::move(allowed)}};
803  db->register_option(section, std::move(option));
804  }
805  catch (const std::invalid_argument& err)
806  {
807  PWARN("Account Sel Limited Option, value failed validation, option not registerd.");
808  }
809 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
#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:136

◆ 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:136

◆ 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:136
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  g_list_free (namespaces);
711 }
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:136
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 958 of file gnc-optiondb.cpp.

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

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

950 {
951  GncOption option{GncOptionRangeValue<int>{section, name, key, doc_string,
952  value, 0, 999999999, 1}};
953  option.set_alternate(true);
954  db->register_option(section, std::move(option));
955 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
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 979 of file gnc-optiondb.cpp.

982 {
984  section, name, key, doc_string, value, GncOptionUIType::CURRENCY
985  }};
986  db->register_option(section, std::move(option));
987 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
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 1020 of file gnc-optiondb.cpp.

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

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

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

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

1039 {
1040  auto is_absolute = period_set.size() == 1 &&
1041  period_set.front() == RelativeDatePeriod::ABSOLUTE;
1042  auto ui_type = both ? GncOptionUIType::DATE_BOTH :
1043  is_absolute ? GncOptionUIType::DATE_ABSOLUTE : GncOptionUIType::DATE_RELATIVE;
1044  GncOption option{GncOptionDateValue(section, name, key, doc_string,
1045  ui_type, period_set)};
1046  if (is_absolute)
1047  option.set_default_value(gnc_time(nullptr));
1048  db->register_option(section, std::move(option));
1049 }
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:136
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 969 of file gnc-optiondb.cpp.

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

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

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

◆ 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:136

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

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

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

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

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

835 {
836  GncOption option{GncOptionMultichoiceValue{section, name, key, doc_string,
837  value, std::move(list), GncOptionUIType::LIST}};
838  db->register_option(section, std::move(option));
839 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
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 812 of file gnc-optiondb.cpp.

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

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

849 {
850  try
851  {
852  GncOption option{GncOptionRangeValue<ValueType>{section, name, key,
853  doc_string, value, min,
854  max, step}};
855  db->register_option(section, std::move(option));
856  }
857  catch(const std::invalid_argument& err)
858  {
859  PWARN("Number Range Option %s, option not registerd.",
860  err.what());
861  }
862 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
#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 886 of file gnc-optiondb.cpp.

890 {
891  GncOptionUIType uitype;
892  switch (type)
893  {
894  case GNC_OWNER_CUSTOMER:
895  uitype = GncOptionUIType::CUSTOMER;
896  break;
897  case GNC_OWNER_EMPLOYEE:
898  uitype = GncOptionUIType::EMPLOYEE;
899  break;
900  case GNC_OWNER_JOB:
901  uitype = GncOptionUIType::JOB;
902  break;
903  case GNC_OWNER_VENDOR:
904  uitype = GncOptionUIType::VENDOR;
905  break;
906  default:
907  uitype = GncOptionUIType::INTERNAL;
908  };
909  GncOption option{GncOptionGncOwnerValue{section, name, key, doc_string,
910  value, uitype}};
911  db->register_option(section, std::move(option));
912 }
Represents the public interface for an option.
Definition: gnc-option.hpp:136
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 725 of file gnc-optiondb.cpp.

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

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

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

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

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

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

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

◆ 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:136

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

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

◆ 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:136

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

488 {
489  if (period == RelativeDatePeriod::TODAY)
490  return static_cast<time64>(GncDateTime());
491  if (period == RelativeDatePeriod::START_ACCOUNTING_PERIOD)
492  return gnc_accounting_period_fiscal_start();
493  if (period == RelativeDatePeriod::END_ACCOUNTING_PERIOD)
494  return gnc_accounting_period_fiscal_end();
495 
496  GncDateTime now_t;
497  if (period == RelativeDatePeriod::TODAY)
498  return static_cast<time64>(now_t);
499  auto now{static_cast<tm>(now_t)};
500  struct tm acct_per{};
501  if (gnc_prefs_get_bool (GNC_PREFS_GROUP_ACCT_SUMMARY,
502  GNC_PREF_START_CHOICE_ABS))
503  acct_per = static_cast<tm>(GncDateTime(gnc_accounting_period_fiscal_start()));
504 
505  switch(reldate_offset(period))
506  {
507  case RelativeDateOffset::NONE:
508 // Report on today so nothing to do
509  break;
510  case RelativeDateOffset::YEAR:
511  if (reldate_is_prev(period))
512  --now.tm_year;
513  else if (reldate_is_next(period))
514  ++now.tm_year;
515  if (gnc_relative_date_is_starting(period))
516  now.tm_mon = 0;
517  else if (gnc_relative_date_is_ending(period))
518  now.tm_mon = 11;
519  break;
520  case RelativeDateOffset::SIX:
521  if (reldate_is_prev(period))
522  now.tm_mon -= 6;
523  else if (reldate_is_next(period))
524  now.tm_mon += 6;
525  break;
526  case RelativeDateOffset::QUARTER:
527  {
528  auto delta = (now.tm_mon >= acct_per.tm_mon ?
529  ( now.tm_mon - acct_per.tm_mon) % 3 :
530  3 - ((acct_per.tm_mon - now.tm_mon) % 3));
531  now.tm_mon = now.tm_mon - delta;
532  }
533  [[fallthrough]];
534  case RelativeDateOffset::THREE:
535  if (reldate_is_prev(period))
536  now.tm_mon -= 3;
537  else if (reldate_is_next(period))
538  now.tm_mon += 3;
539  if (gnc_relative_date_is_ending(period))
540  now.tm_mon += 2;
541  break;
542  case RelativeDateOffset::MONTH:
543  if (reldate_is_prev(period))
544  --now.tm_mon;
545  else if (reldate_is_next(period))
546  ++now.tm_mon;
547  break;
548  case RelativeDateOffset::WEEK:
549  if (reldate_is_prev(period))
550  now.tm_mday -= 7;
551  else if (reldate_is_next(period))
552  now.tm_mday += 7;
553  }
554  reldate_set_day_and_time(now, checked_reldate(period).m_type);
555  normalize_reldate_tm(now);
556  return static_cast<time64>(GncDateTime(now));
557 }
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.
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Get a boolean value from the preferences backend.
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 560 of file gnc-option-date.cpp.

561 {
562  ostr << "'reldate . " << gnc_relative_date_display_string(per);
563  return ostr;
564 }
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.