33 #ifndef GNC_OPTION_HPP_ 34 #define GNC_OPTION_HPP_ 41 #include <type_traits> 45 #include "gnc-option-ui.hpp" 51 using GncOptionUIItemPtr = std::unique_ptr<GncOptionUIItem>;
52 #ifndef SWIG //SWIG pulls in GncOwner from swig-engine. 69 using GncOptionDateFormat = std::tuple<QofDateFormat, GNCDateMonthFormat, bool, std::string>;
70 using GncOptionReportPlacement = std::tuple<uint32_t, uint32_t, uint32_t>;
71 using GncOptionReportPlacementVec = std::vector<GncOptionReportPlacement>;
75 static constexpr
bool value =
76 std::is_base_of_v<OptionClassifier, std::decay_t<T>>;
79 template <
typename T>
inline constexpr
bool 82 template <
typename T,
typename U>
85 static constexpr
bool value = std::is_same_v<std::decay_t<T>,
89 template <
typename T,
typename U>
inline constexpr
bool 95 static constexpr
bool value =
96 (is_same_decayed_v<T, GncOptionRangeValue<int>> ||
97 is_same_decayed_v<T, GncOptionRangeValue<double>>);
100 template <
typename T>
inline constexpr
bool 104 using GncOptionVariant = std::variant<GncOptionValue<std::string>,
120 using GncOptionVariantPtr = std::unique_ptr<GncOptionVariant>;
122 enum class GncOptionMultichoiceKeyType
138 template <
typename OptionType,
139 typename std::enable_if_t<is_OptionClassifier_v<OptionType>,
143 m_option{std::make_unique<GncOptionVariant>(option)} {}
144 template <
typename ValueType,
145 typename std::enable_if_t<!is_OptionClassifier_v<ValueType>,
147 GncOption(
const char* section,
const char* name,
148 const char* key,
const char* doc_string,
151 template <
typename ValueType>
void set_value(ValueType value);
152 template <
typename ValueType>
void set_default_value(ValueType value);
153 template <
typename ValueType> ValueType get_default_value()
const;
154 template <
typename ValueType> ValueType get_value()
const;
155 void reset_default_value();
157 const std::string& get_section()
const;
158 const std::string& get_name()
const;
159 const std::string& get_key()
const;
160 const std::string& get_docstring()
const;
161 void set_ui_item(GncOptionUIItemPtr&& ui_elem);
163 void set_ui_item_selectable(
bool)
const noexcept;
165 void set_ui_item_from_option();
166 void set_option_from_ui_item();
167 void make_internal();
180 template <
typename ValueType>
void get_limits(ValueType&, ValueType&,
181 ValueType&)
const noexcept;
183 template <
typename ValueType>
bool validate(ValueType value)
const;
194 bool is_alternate()
const noexcept;
195 void set_alternate(
bool) noexcept;
209 std::istream&
in_stream(std::istream& iss);
210 friend GncOptionVariant& swig_get_option(
GncOption*);
211 void set_widget_changed (std::any cb) { m_widget_changed = cb; }
212 std::any& get_widget_changed () {
return m_widget_changed; }
214 inline static const std::string c_empty_string{
""};
215 GncOptionVariantPtr m_option;
216 GncOptionUIItemPtr m_ui_item{
nullptr};
217 std::any m_widget_changed{};
223 return right.get_key() < left.get_key();
227 operator<<(std::ostream& oss,
const GncOption& opt)
234 operator>>(std::istream& iss,
GncOption& opt)
240 output_color_value(std::ostream& oss,
const std::string& value)
243 oss << std::fixed << std::showpoint << std::setprecision(1);
244 auto len{value.length() > 8 ? 8 : value.length()};
245 for (
size_t i{}; i < len; i += 2)
247 oss << static_cast<float>(stoi(value.substr(i, 2),
nullptr, 16));
264 const char* key,
const char* doc_string,
267 return new GncOption(section, name, key, doc_string, value, ui_type);
270 #endif //GNC_OPTION_HPP_
bool is_multiselect() const noexcept
The generic option-value class.
void mark_saved() noexcept
Mark the option as needing to be saved.
bool deserialize(const std::string &str)
Set the option's value from a character sequence.
uint16_t permissible_value_index(const char *value) const
Implemented only for GncOptionMultiselectValue.
A legal date value is a pair of either a RelativeDatePeriod, the absolute flag and a time64...
bool is_changed() const noexcept
Represents the public interface for an option.
Set one or more accounts on which to report, optionally restricted to certain account types...
This class is the parent of all option implementations.
bool validate(ValueType value) const
Not implemented for GncOptionValue.
Multichoice options have a vector of valid options (GncMultichoiceOptionChoices) and validate the sel...
uint16_t num_permissible_values() const
Implemented only for GncOptionMultiselectValue.
std::string serialize() const
Get a string suitable for storage representing the option's value.
class GncOptionCommodityValue Commodities are stored with their namespace and mnemonic instead of the...
Used for numeric ranges and plot sizes.
bool is_dirty() const noexcept
Holds a pointer to the UI item which will control the option and an enum representing the type of the...
const char * permissible_value(uint16_t index) const
Implemented only for GncOptionMultiselectValue.
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.
void get_limits(ValueType &, ValueType &, ValueType &) const noexcept
Implemented only for GncOptionNumericRange.
const char * permissible_value_name(uint16_t index) const
Implemented only for GncOptionMultiselectValue.
GncOptionUIType
Used by GncOptionClassifier to indicate to dialog-options what control should be displayed for the op...
std::istream & in_stream(std::istream &iss)
Set the option's value from an input stream.
GList * account_type_list() const noexcept
Implemented only for GncOptionAccountListValue.
Relative date enumeration and manipulation functions.