#ifndef TERMINOLOGY_TERMINOLOGY_OPTIONS_H_
#define TERMINOLOGY_TERMINOLOGY_OPTIONS_H_ 1

void options_show(Evas_Object *win, Evas_Object *base, Evas_Object *bg,
                  Evas_Object *term,
                  void (*donecb) (void *data), void *donedata);


/* helpers to generate callbacks and checkbox to change config parameters */
#define OPTIONS_CB(_ctx, _cfg_name, _inv)                       \
static void                                                     \
_cb_op_##_cfg_name(void *data, Evas_Object *obj,                \
                   void *_event EINA_UNUSED)                    \
{                                                               \
   _ctx *ctx = data;                                            \
   Config *config = ctx->config;                                \
   if (_inv)                                                    \
     config->_cfg_name = !elm_check_state_get(obj);             \
   else                                                         \
     config->_cfg_name = elm_check_state_get(obj);              \
   termio_config_update(ctx->term);                             \
   windows_update();                                            \
   config_save(config);                                         \
}

#define OPTIONS_CX(_lbl, _cfg_name, _inv)                                 \
   do {                                                                   \
   o = elm_check_add(bx);                                                 \
   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);            \
   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);               \
   elm_object_text_set(o, _lbl);                                          \
   elm_check_state_set(o, _inv ? !config->_cfg_name : config->_cfg_name); \
   elm_box_pack_end(bx, o);                                               \
   evas_object_show(o);                                                   \
   evas_object_smart_callback_add(o, "changed",                           \
                                  _cb_op_##_cfg_name, ctx);               \
   } while (0)

#define OPTIONS_SEPARATOR                                      \
   do {                                                        \
   o = elm_separator_add(bx);                                  \
   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); \
   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);    \
   elm_separator_horizontal_set(o, EINA_TRUE);                 \
   elm_box_pack_end(bx, o);                                    \
   evas_object_show(o);                                        \
   } while (0)

#endif
