#ifndef RCFILE_H
#define RCFILE_H
+struct LayoutWindow;
void write_indent(GString *str, gint indent);
void write_char_option(GString *str, gint indent, const gchar *label, const gchar *text);
gboolean read_dummy_option(const gchar *option, const gchar *label, const gchar *message);
gboolean read_char_option(const gchar *option, const gchar *label, const gchar *value, gchar **text);
-void write_color_option(GString *str, gint indent, gchar *label, GdkColor *color);
-gboolean read_color_option(const gchar *option, const gchar *label, const gchar *value, GdkColor *color);
+void write_color_option(GString *str, gint indent, const gchar *label, GdkRGBA *color);
+gboolean read_color_option(const gchar *option, const gchar *label, const gchar *value, GdkRGBA *color);
void write_int_option(GString *str, gint indent, const gchar *label, gint n);
gboolean read_int_option(const gchar *option, const gchar *label, const gchar *value, gint *n);
-void write_ushort_option(GString *str, gint indent, const gchar *label, guint16 n);
gboolean read_ushort_option(const gchar *option, const gchar *label, const gchar *value, guint16 *n);
void write_uint_option(GString *str, gint indent, const gchar *label, guint n);
gboolean read_uint_option(const gchar *option, const gchar *label, const gchar *value, guint *n);
gboolean read_uint_option_clamp(const gchar *option, const gchar *label, const gchar *value, guint *n, guint min, guint max);
gboolean read_int_option_clamp(const gchar *option, const gchar *label, const gchar *value, gint *n, gint min, gint max);
-void write_int_unit_option(GString *str, gint indent, gchar *label, gint n, gint subunits);
+void write_int_unit_option(GString *str, gint indent, const gchar *label, gint n, gint subunits);
gboolean read_int_unit_option(const gchar *option, const gchar *label, const gchar *value, gint *n, gint subunits);
-void write_bool_option(GString *str, gint indent, gchar *label, gint n);
+void write_bool_option(GString *str, gint indent, const gchar *label, gint n);
gboolean read_bool_option(const gchar *option, const gchar *label, const gchar *value, gint *n);
#define WRITE_BOOL(_source_, _name_) write_bool_option(outstr, indent, #_name_, (_source_)._name_)
#define READ_BOOL(_target_, _name_) read_bool_option(option, #_name_, value, &(_target_)._name_)
#define READ_INT(_target_, _name_) read_int_option(option, #_name_, value, &(_target_)._name_)
#define READ_UINT(_target_, _name_) read_uint_option(option, #_name_, value, &(_target_)._name_)
+#define READ_UINT_ENUM(_target_, _name_) read_uint_option(option, #_name_, value, (guint*)&(_target_)._name_)
#define READ_USHORT(_target_, _name_) read_ushort_option(option, #_name_, value, &(_target_)._name_)
#define READ_INT_CLAMP(_target_, _name_, _min_, _max_) read_int_option_clamp(option, #_name_, value, &(_target_)._name_, _min_, _max_)
#define READ_UINT_CLAMP(_target_, _name_, _min_, _max_) read_uint_option_clamp(option, #_name_, value, &(_target_)._name_, _min_, _max_)
+#define READ_UINT_ENUM_CLAMP(_target_, _name_, _min_, _max_) read_uint_option_clamp(option, #_name_, value, (guint*)&(_target_)._name_, _min_, _max_)
#define READ_INT_UNIT(_target_, _name_, _unit_) read_int_unit_option(option, #_name_, value, &(_target_)._name_, _unit_)
#define READ_CHAR(_target_, _name_) read_char_option(option, #_name_, value, &(_target_)._name_)
#define READ_COLOR(_target_, _name_) read_color_option(option, #_name_, value, &(_target_)._name_)
#define READ_DUMMY(_target_, _name_, _msg_) read_dummy_option(option, #_name_, _msg_)
-typedef struct _GQParserFuncData GQParserFuncData;
-typedef struct _GQParserData GQParserData;
-typedef void (* GQParserStartFunc)(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error);
-typedef void (* GQParserEndFunc)(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, gpointer data, GError **error);
+struct GQParserFuncData;
+struct GQParserData;
+using GQParserStartFunc = void (*)(GQParserData *, GMarkupParseContext *, const gchar *, const gchar **, const gchar **, gpointer, GError **);
+using GQParserEndFunc = void (*)(GQParserData *, GMarkupParseContext *, const gchar *, gpointer, GError **);
void options_parse_func_push(GQParserData *parser_data, GQParserStartFunc start_func, GQParserEndFunc end_func, gpointer data);
void options_parse_func_pop(GQParserData *parser_data);
gboolean save_config_to_file(const gchar *utf8_path, ConfOptions *options, LayoutWindow *lw);
+gboolean save_default_layout_options_to_file(const gchar *utf8_path, ConfOptions *options, LayoutWindow *lw);
gboolean load_config_from_buf(const gchar *buf, gsize size, gboolean startup);
gboolean load_config_from_file(const gchar *utf8_path, gboolean startup);
-
#endif
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */