[options] Provide a const char* value flavor for register_commodity

And register_currency_option
This commit is contained in:
John Ralls 2022-08-05 16:01:31 -07:00
parent 1ff844c195
commit 6faaf3b427
3 changed files with 89 additions and 1 deletions

View File

@ -749,6 +749,7 @@ wrap_unique_ptr(GncOptionDBPtr, GncOptionDB);
%ignore gnc_register_font_option(GncOptionDB*, const char*, const char*, const char*, const char*, std::string);
%ignore gnc_register_budget_option(GncOptionDB*, const char*, const char*, const char*, const char*, GncBudget*);
%ignore gnc_register_commodity_option(GncOptionDB*, const char*, const char*, const char*, const char*, gnc_commodity*);
%ignore gnc_register_commodity_option(GncOptionDB*, const char*, const char*, const char*, const char*, const char*);
%ignore gnc_register_simple_boolean_option(GncOptionDB*, const char* section, const char* name, const char* key, const char* doc_string, bool value);
%ignore gnc_register_complex_boolean_option(GncOptionDB*, const char* section, const char* name, const char* key, const char* doc_string, bool value);
%ignore gnc_register_pixmap_option(GncOptionDB*, const char*, const char*, const char*, const char*, std::string);
@ -761,6 +762,7 @@ wrap_unique_ptr(GncOptionDBPtr, GncOptionDB);
%ignore gnc_register_query_option(GncOptionDB*, const char*, const char*, const char*, const char*, QofQuery*);
%ignore gnc_register_color_option(GncOptionDB*, const char*, const char*, const char*, const char*, std::string);
%ignore gnc_register_currency_option(GncOptionDB*, const char*, const char*, const char*, const char*, gnc_commodity*);
%ignore gnc_register_currency_option(GncOptionDB*, const char*, const char*, const char*, const char*, const char*);
%ignore gnc_register_invoice_option(GncOptionDB*, const char*, const char*, const char*, const char*, GncInvoice*);
%ignore gnc_register_taxtable_option(GncOptionDB*, const char*, const char*, const char*, const char*, GncTaxTable*);
%ignore gnc_register_counter_option(GncOptionDB*, const char*, const char*, const char*, const char*, double);

View File

@ -33,6 +33,10 @@
#include "gnc-optiondb-impl.hpp"
#include "gnc-option-ui.hpp"
extern "C"
{
#include <gnc-session.h>
}
constexpr const char* log_module{G_LOG_DOMAIN};
constexpr auto stream_max = std::numeric_limits<std::streamsize>::max();
@ -632,6 +636,30 @@ gnc_register_commodity_option(GncOptionDB* db, const char* section,
db->register_option(section, std::move(option));
}
void
gnc_register_commodity_option(GncOptionDB* db, const char* section,
const char* name, const char* key,
const char* doc_string, const char* value)
{
gnc_commodity* commodity{};
const auto book{qof_session_get_book(gnc_get_current_session())};
const auto commodity_table{gnc_commodity_table_get_table(book)};
const auto namespaces{gnc_commodity_table_get_namespaces(commodity_table)};
for (auto node = namespaces; node && commodity == nullptr;
node = g_list_next(node))
{
commodity = gnc_commodity_table_lookup(commodity_table,
(const char*)(node->data),
value);
if (commodity)
break;
}
GncOption option{GncOptionCommodityValue{section, name, key, doc_string,
commodity,
GncOptionUIType::COMMODITY}};
db->register_option(section, std::move(option));
}
void
gnc_register_simple_boolean_option(GncOptionDB* db,
const char* section, const char* name,
@ -901,7 +929,23 @@ gnc_register_currency_option(GncOptionDB* db, const char* section,
const char* doc_string, gnc_commodity *value)
{
GncOption option{GncOptionCommodityValue{
section, name, key, doc_string, value,GncOptionUIType::CURRENCY
section, name, key, doc_string, value, GncOptionUIType::CURRENCY
}};
db->register_option(section, std::move(option));
}
void
gnc_register_currency_option(GncOptionDB* db, const char* section,
const char* name, const char* key,
const char* doc_string, const char* value)
{
const auto book{qof_session_get_book(gnc_get_current_session())};
const auto commodity_table{gnc_commodity_table_get_table(book)};
const auto commodity = gnc_commodity_table_lookup(commodity_table,
"CURRENCY",
value);
GncOption option{GncOptionCommodityValue{
section, name, key, doc_string, commodity, GncOptionUIType::CURRENCY
}};
db->register_option(section, std::move(option));
}

View File

@ -203,6 +203,28 @@ inline void gnc_register_commodity_option(const GncOptionDBPtr& db,
gnc_register_commodity_option(db.get(), section, name, key,
doc_string, 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.
*/
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 takes a const GncOptionDBPtr& (const std::unique_ptr<GncOptionDB>&) for calling from C++.
*/
inline void gnc_register_commodity_option(const GncOptionDBPtr& db,
const char* section,
const char* name, const char* key,
const char* doc_string,
const char* value)
{
gnc_register_commodity_option(db.get(), section, name, key,
doc_string, value);
}
/**
* Create a new simple boolean option and register it in the options database.
@ -603,6 +625,26 @@ inline void gnc_register_currency_option(const GncOptionDBPtr& db,
doc_string, 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(GncOptionDB* db,
const char* section,
const char* name, const char* key,
const char* doc_string,
const char* value);
inline void gnc_register_currency_option(const GncOptionDBPtr& db,
const char* section,
const char* name, const char* key,
const char* doc_string,
const char* value)
{
gnc_register_currency_option(db.get(), section, name, key,
doc_string, value);
}
/**
* Create a new invoice option and register it in the options database.
*