32 #ifndef GNC_OPTIONDB_P_HPP_ 33 #define GNC_OPTIONDB_P_HPP_ 54 using GncOptionVec = std::vector<GncOption>;
63 GncOptionVec m_options;
68 void foreach_option(std::function<
void(
GncOption&)> func);
69 void foreach_option(std::function<
void(
const GncOption&)> func)
const;
70 const std::string& get_name()
const noexcept {
return m_name; }
71 size_t get_num_options()
const noexcept {
return m_options.size(); }
73 void remove_option(
const char* name);
74 const GncOption* find_option(
const char* name)
const;
77 using GncOptionSectionPtr = std::shared_ptr<GncOptionSection>;
80 operator<(
const GncOptionSectionPtr& right,
const GncOptionSectionPtr& left)
82 return right->get_name() < left->get_name();
85 using GncOptionDBChangeCallback = void (*)(
void* user_data);
91 m_id{
id}, m_func{func}, m_data{data} {}
99 GncOptionDBChangeCallback m_func;
103 using GncCallbackVec = std::vector<GncOptionDBCallback>;
119 void foreach_section(std::function<
void(GncOptionSectionPtr&)> func)
121 for (
auto& section : m_sections)
124 void foreach_section(std::function<
void(
const GncOptionSectionPtr&)> func)
const 126 for (
auto& section : m_sections)
129 size_t num_sections()
const noexcept {
return m_sections.size(); }
130 bool get_changed()
const noexcept {
return m_dirty; }
131 void register_option(
const char* section,
GncOption&& option);
132 void register_option(
const char* section,
GncOption* option);
133 void unregister_option(
const char* section,
const char* name);
134 void set_default_section(
const char* section);
136 std::string lookup_string_option(
const char* section,
const char* name);
137 template <
typename ValueType>
138 bool set_option(
const char* section,
const char* name, ValueType value)
142 auto option{find_option(section, name)};
145 option->set_value(value);
148 catch(
const std::invalid_argument& err)
150 printf(
"Set Failed: %s\n", err.what());
155 void make_internal(
const char* section,
const char* name);
162 GncOption* find_option(
const std::string& section,
const char* name)
164 return const_cast<GncOption*
>(
static_cast<const GncOptionDB&
>(*this).find_option(section, name));
166 const GncOption* find_option(
const std::string& section,
const char* name)
const;
167 std::ostream& save_to_key_value(std::ostream& oss)
const noexcept;
168 std::istream& load_from_key_value(std::istream& iss);
169 void save_to_kvp(QofBook* book,
bool clear_book)
const noexcept;
170 void load_from_kvp(QofBook* book) noexcept;
171 std::ostream& save_option_key_value(std::ostream& oss,
172 const std::string& section,
173 const std::string& name)
const noexcept;
174 std::istream& load_option_key_value(std::istream& iss);
175 size_t register_callback(GncOptionDBChangeCallback,
void*);
176 void unregister_callback(
size_t);
177 void run_callbacks();
180 std::vector<GncOptionSectionPtr> m_sections;
181 bool m_dirty =
false;
182 GncCallbackVec m_callbacks{};
184 std::function<GncOptionUIItem*()> m_get_ui_value;
185 std::function<void(GncOptionUIItem*)> m_set_ui_value;
189 #endif // GNC_OPTIONDB_P_HPP_ Holds all of the options for a book, report, or stylesheet, organized by GncOptionSections.
Represents the public interface for an option.
C++ Public interface for individual options.
class GncOptionSection The upper-level classification implmentation.
Tax Table programming interface.
Implementation templates and specializtions for GncOption values.
Business Invoice Interface.