forked from enlightenment/efl
Ui text: use 'wrap' and 'multiline' properties
This commit is contained in:
parent
9289e082d8
commit
e55b91aa91
|
@ -115,22 +115,31 @@ my_efl_ui_text_bt_4(void *data, Evas_Object *obj EINA_UNUSED, void *event_info E
|
||||||
"size=32x32 href=emoticon");
|
"size=32x32 href=emoticon");
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *_wrap_modes[4] = { "none", "char", "word", "mixed" };
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
my_efl_ui_text_bt_6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
my_efl_ui_text_bt_6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
char style[128];
|
Eo *text_obj = data;
|
||||||
Evas_Object *en = data;
|
|
||||||
size_t idx = (size_t) efl_key_data_get(en, "wrap_idx");
|
|
||||||
idx = (idx + 1) % 4;
|
|
||||||
efl_key_data_set(en, "wrap_idx", (void *)idx);
|
|
||||||
|
|
||||||
sprintf(style, "DEFAULT='font=Sans font_size=12 color=#fff wrap=%s'",
|
Efl_Text_Format_Wrap wrap = efl_text_format_wrap_get(text_obj);
|
||||||
_wrap_modes[idx]);
|
|
||||||
efl_canvas_text_style_set(en, NULL, style);
|
|
||||||
printf("wrap mode changed to '%s'\n", _wrap_modes[idx]);
|
|
||||||
|
|
||||||
|
switch(wrap)
|
||||||
|
{
|
||||||
|
case EFL_TEXT_FORMAT_WRAP_NONE:
|
||||||
|
wrap = EFL_TEXT_FORMAT_WRAP_CHAR;
|
||||||
|
break;
|
||||||
|
case EFL_TEXT_FORMAT_WRAP_CHAR:
|
||||||
|
wrap = EFL_TEXT_FORMAT_WRAP_WORD;
|
||||||
|
break;
|
||||||
|
case EFL_TEXT_FORMAT_WRAP_WORD:
|
||||||
|
wrap = EFL_TEXT_FORMAT_WRAP_MIXED;
|
||||||
|
break;
|
||||||
|
case EFL_TEXT_FORMAT_WRAP_MIXED:
|
||||||
|
wrap = EFL_TEXT_FORMAT_WRAP_NONE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
efl_text_format_wrap_set(text_obj, wrap);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -154,7 +163,8 @@ test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
|
||||||
elm_win_resize_object_add(win, bx);
|
elm_win_resize_object_add(win, bx);
|
||||||
evas_object_show(bx);
|
evas_object_show(bx);
|
||||||
|
|
||||||
en = efl_add(EFL_UI_TEXT_CLASS, win);
|
en = efl_add(EFL_UI_TEXT_CLASS, win,
|
||||||
|
efl_text_format_multiline_set(efl_added, EINA_TRUE));
|
||||||
|
|
||||||
printf("Added Efl.Ui.Text object\n");
|
printf("Added Efl.Ui.Text object\n");
|
||||||
efl_key_data_set(en, "wrap_idx", 0);
|
efl_key_data_set(en, "wrap_idx", 0);
|
||||||
|
|
|
@ -16,7 +16,6 @@ typedef struct _Efl_Ui_Internal_Text_Interactive_Data
|
||||||
Evas_Textblock_Cursor *preedit_start, *preedit_end;
|
Evas_Textblock_Cursor *preedit_start, *preedit_end;
|
||||||
Eina_List *seq;
|
Eina_List *seq;
|
||||||
char *selection;
|
char *selection;
|
||||||
Eina_Bool multiline : 1;
|
|
||||||
Eina_Bool composing : 1;
|
Eina_Bool composing : 1;
|
||||||
Eina_Bool selecting : 1;
|
Eina_Bool selecting : 1;
|
||||||
Eina_Bool have_selection : 1;
|
Eina_Bool have_selection : 1;
|
||||||
|
@ -730,7 +729,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
|
||||||
super = evas_key_modifier_is_set(ev->modifiers, "Super");
|
super = evas_key_modifier_is_set(ev->modifiers, "Super");
|
||||||
altgr = evas_key_modifier_is_set(ev->modifiers, "AltGr");
|
altgr = evas_key_modifier_is_set(ev->modifiers, "AltGr");
|
||||||
#endif
|
#endif
|
||||||
multiline = en->multiline;
|
multiline = efl_text_format_multiline_get(obj);
|
||||||
|
|
||||||
/* Translate some keys to strings. */
|
/* Translate some keys to strings. */
|
||||||
if (!strcmp(ev->key, "Tab"))
|
if (!strcmp(ev->key, "Tab"))
|
||||||
|
@ -1253,6 +1252,9 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
|
||||||
Evas_Event_Mouse_Move *ev = event_info;
|
Evas_Event_Mouse_Move *ev = event_info;
|
||||||
Evas_Coord x, y, w, h;
|
Evas_Coord x, y, w, h;
|
||||||
Evas_Textblock_Cursor *tc;
|
Evas_Textblock_Cursor *tc;
|
||||||
|
Eina_Bool multiline;
|
||||||
|
|
||||||
|
multiline = efl_text_format_multiline_get(obj);
|
||||||
|
|
||||||
#ifdef HAVE_ECORE_IMF
|
#ifdef HAVE_ECORE_IMF
|
||||||
if (en->imf_context)
|
if (en->imf_context)
|
||||||
|
@ -1274,7 +1276,7 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
|
||||||
cx = ev->cur.canvas.x - x;
|
cx = ev->cur.canvas.x - x;
|
||||||
cy = ev->cur.canvas.y - y;
|
cy = ev->cur.canvas.y - y;
|
||||||
|
|
||||||
if (en->multiline)
|
if (multiline)
|
||||||
{
|
{
|
||||||
efl_canvas_text_cursor_coord_set(cur, cx, cy);
|
efl_canvas_text_cursor_coord_set(cur, cx, cy);
|
||||||
}
|
}
|
||||||
|
@ -1301,7 +1303,6 @@ EOLIAN static Efl_Object *
|
||||||
_efl_ui_internal_text_interactive_efl_object_constructor(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
|
_efl_ui_internal_text_interactive_efl_object_constructor(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en)
|
||||||
{
|
{
|
||||||
en->select_allow = EINA_TRUE;
|
en->select_allow = EINA_TRUE;
|
||||||
en->multiline = EINA_TRUE;
|
|
||||||
en->editable = EINA_TRUE;
|
en->editable = EINA_TRUE;
|
||||||
return efl_constructor(efl_super(obj, MY_CLASS));
|
return efl_constructor(efl_super(obj, MY_CLASS));
|
||||||
}
|
}
|
||||||
|
@ -1381,7 +1382,7 @@ _efl_ui_internal_text_interactive_efl_object_finalize(Eo *obj, Efl_Ui_Internal_T
|
||||||
ecore_imf_context_input_panel_language_set(en->imf_context, ECORE_IMF_INPUT_PANEL_LANG_ALPHABET);
|
ecore_imf_context_input_panel_language_set(en->imf_context, ECORE_IMF_INPUT_PANEL_LANG_ALPHABET);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (en->multiline)
|
if (efl_text_format_multiline_get(obj))
|
||||||
ecore_imf_context_input_hint_set(en->imf_context,
|
ecore_imf_context_input_hint_set(en->imf_context,
|
||||||
ecore_imf_context_input_hint_get(en->imf_context) | ECORE_IMF_INPUT_HINT_MULTILINE);
|
ecore_imf_context_input_hint_get(en->imf_context) | ECORE_IMF_INPUT_HINT_MULTILINE);
|
||||||
}
|
}
|
||||||
|
@ -1410,18 +1411,6 @@ _efl_ui_internal_text_interactive_efl_ui_text_interactive_selection_cursors_get(
|
||||||
if (end) *end = pd->sel_end;
|
if (end) *end = pd->sel_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_ui_internal_text_interactive_efl_ui_text_interactive_multiline_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *pd, Eina_Bool enabled)
|
|
||||||
{
|
|
||||||
pd->multiline = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static Eina_Bool
|
|
||||||
_efl_ui_internal_text_interactive_efl_ui_text_interactive_multiline_get(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *pd)
|
|
||||||
{
|
|
||||||
return pd->multiline;
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
_efl_ui_internal_text_interactive_efl_ui_text_interactive_editable_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, Eina_Bool editable)
|
_efl_ui_internal_text_interactive_efl_ui_text_interactive_editable_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, Eina_Bool editable)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,6 @@ class Efl.Ui.Internal.Text.Interactive (Efl.Canvas.Text, Efl.Ui.Text.Interactive
|
||||||
Efl.Object.finalize;
|
Efl.Object.finalize;
|
||||||
Efl.Ui.Text.Interactive.selection_allowed { get; set; }
|
Efl.Ui.Text.Interactive.selection_allowed { get; set; }
|
||||||
Efl.Ui.Text.Interactive.selection_cursors { get; }
|
Efl.Ui.Text.Interactive.selection_cursors { get; }
|
||||||
Efl.Ui.Text.Interactive.multiline { get; set; }
|
|
||||||
Efl.Ui.Text.Interactive.editable { get; set; }
|
Efl.Ui.Text.Interactive.editable { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ struct _Efl_Ui_Text_Data
|
||||||
const char *text;
|
const char *text;
|
||||||
const char *file;
|
const char *file;
|
||||||
Elm_Text_Format format;
|
Elm_Text_Format format;
|
||||||
Evas_Coord last_w, ent_mw, ent_mh;
|
Evas_Coord ent_w, ent_h;
|
||||||
Evas_Coord downx, downy;
|
Evas_Coord downx, downy;
|
||||||
Evas_Coord ox, oy;
|
Evas_Coord ox, oy;
|
||||||
Eina_List *anchors;
|
Eina_List *anchors;
|
||||||
|
@ -1070,91 +1070,60 @@ EOLIAN static void
|
||||||
_efl_ui_text_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Text_Data *sd)
|
_efl_ui_text_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Text_Data *sd)
|
||||||
{
|
{
|
||||||
Evas_Coord minw, minh, resw, resh;
|
Evas_Coord minw, minh, resw, resh;
|
||||||
|
Evas_Coord fw, fh;
|
||||||
|
Eo *sw;
|
||||||
|
Eina_Bool wrap;
|
||||||
|
|
||||||
evas_object_geometry_get(obj, NULL, NULL, &resw, &resh);
|
evas_object_geometry_get(obj, NULL, NULL, &resw, &resh);
|
||||||
|
|
||||||
if (!sd->changed && (sd->last_w == resw))
|
sw = edje_object_part_swallow_get(sd->entry_edje, "elm.text");
|
||||||
{
|
if (!sw) return;
|
||||||
if (sd->scroll)
|
|
||||||
{
|
|
||||||
if (sd->text_obj)
|
|
||||||
{
|
|
||||||
Evas_Coord vw = 0, vh = 0, h = 0;
|
|
||||||
|
|
||||||
// Called for line wrapping + scrolling; use the viewport
|
wrap = efl_text_format_wrap_get(sw);
|
||||||
// width and the formatted height as proper constraints.
|
|
||||||
elm_interface_scrollable_content_viewport_geometry_get
|
|
||||||
(obj, NULL, NULL, &vw, &vh);
|
|
||||||
|
|
||||||
efl_canvas_text_size_formatted_get(sd->text_obj, NULL, &h);
|
if (!sd->changed && (resw == sd->ent_w) && (resh == sd->ent_h)) return;
|
||||||
if (vh > h) h = vh;
|
|
||||||
|
sd->changed = EINA_FALSE;
|
||||||
|
sd->ent_w = resw;
|
||||||
|
sd->ent_h = resh;
|
||||||
|
|
||||||
evas_object_resize(sd->entry_edje, vw, h);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
evas_event_freeze(evas_object_evas_get(obj));
|
evas_event_freeze(evas_object_evas_get(obj));
|
||||||
sd->changed = EINA_FALSE;
|
|
||||||
sd->last_w = resw;
|
|
||||||
if (sd->scroll)
|
if (sd->scroll)
|
||||||
{
|
{
|
||||||
Evas_Coord vw = 0, vh = 0, vmw = 0, vmh = 0, w = -1, h = -1;
|
Evas_Coord vw, vh;
|
||||||
|
Evas_Coord tw, th;
|
||||||
|
elm_interface_scrollable_content_viewport_geometry_get(obj, NULL, NULL, &vw, &vh);
|
||||||
|
efl_gfx_size_set(sd->entry_edje, vw, vh);
|
||||||
|
efl_gfx_size_get(sw, &tw, &th);
|
||||||
|
efl_canvas_text_size_formatted_get(sw, &fw, &fh);
|
||||||
|
evas_object_size_hint_min_set(sw, fw, fh);
|
||||||
|
edje_object_size_min_calc(sd->entry_edje, &minw, &minh);
|
||||||
|
evas_object_size_hint_min_set(sw, -1, -1);
|
||||||
|
|
||||||
// XXX: no need for the following line. It's been commented out.
|
if (vw > minw) minw = vw;
|
||||||
// sd->scr_edje is the resize_object of this widget. It's already
|
efl_gfx_size_set(sd->entry_edje, minw, minh);
|
||||||
// resized when gfx_size_set was called on this widget.
|
|
||||||
//evas_object_resize(sd->scr_edje, resw, resh);
|
|
||||||
|
|
||||||
edje_object_size_min_calc(sd->scr_edje, &vmw, &vmh);
|
if (!efl_text_format_multiline_get(sw))
|
||||||
elm_interface_scrollable_content_viewport_geometry_get
|
|
||||||
(obj, NULL, NULL, &vw, &vh);
|
|
||||||
edje_object_size_min_restricted_calc
|
|
||||||
(sd->entry_edje, &minw, &minh, vw, 0);
|
|
||||||
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
|
|
||||||
|
|
||||||
/* This is a hack to workaround the way min size hints
|
|
||||||
* are treated. If the minimum width is smaller than the
|
|
||||||
* restricted width, it means the minimum doesn't
|
|
||||||
* matter. */
|
|
||||||
if (minw <= vw)
|
|
||||||
{
|
{
|
||||||
Evas_Coord ominw = -1;
|
evas_object_size_hint_min_set(obj, -1, minh);
|
||||||
|
|
||||||
efl_gfx_size_hint_combined_min_get(sd->entry_edje, &ominw, NULL);
|
|
||||||
minw = ominw;
|
|
||||||
}
|
}
|
||||||
sd->ent_mw = minw;
|
|
||||||
sd->ent_mh = minh;
|
|
||||||
|
|
||||||
if ((minw > 0) && (vw < minw)) vw = minw;
|
|
||||||
if (minh > vh) vh = minh;
|
|
||||||
|
|
||||||
if (sd->single_line) h = vmh + minh;
|
|
||||||
else h = vmh;
|
|
||||||
|
|
||||||
evas_object_resize(sd->entry_edje, vw, vh);
|
|
||||||
evas_object_size_hint_min_set(obj, w, h);
|
|
||||||
|
|
||||||
if (sd->single_line)
|
|
||||||
evas_object_size_hint_max_set(obj, -1, h);
|
|
||||||
else
|
|
||||||
evas_object_size_hint_max_set(obj, -1, -1);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Evas_Coord ominw, ominh;
|
efl_canvas_text_size_formatted_get(sw, &fw, &fh);
|
||||||
Eo *sw = edje_object_part_swallow_get(sd->entry_edje, "elm.text");
|
evas_object_size_hint_min_set(sw, fw, fh);
|
||||||
efl_canvas_text_size_native_get(sw, &resw, &resh);
|
edje_object_size_min_calc(sd->entry_edje, &minw, &minh);
|
||||||
evas_object_size_hint_min_set(sw, resw, resh);
|
evas_object_size_hint_min_set(sw, -1, -1);
|
||||||
edje_object_size_min_calc(sd->entry_edje, &ominw, &ominh);
|
if (wrap == EFL_TEXT_FORMAT_WRAP_NONE)
|
||||||
evas_object_size_hint_min_set(obj, ominw, ominh);
|
{
|
||||||
|
evas_object_size_hint_min_set(obj, minw, minh);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_cursor_geometry_recalc(obj);
|
|
||||||
evas_event_thaw(evas_object_evas_get(obj));
|
evas_event_thaw(evas_object_evas_get(obj));
|
||||||
evas_event_thaw_eval(evas_object_evas_get(obj));
|
evas_event_thaw_eval(evas_object_evas_get(obj));
|
||||||
|
|
||||||
|
_cursor_geometry_recalc(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2105,9 +2074,13 @@ _entry_changed_handle(void *data,
|
||||||
{
|
{
|
||||||
Evas_Coord minh;
|
Evas_Coord minh;
|
||||||
const char *text;
|
const char *text;
|
||||||
|
Eina_Bool single_line;
|
||||||
|
Eo *obj = data;
|
||||||
|
|
||||||
EFL_UI_TEXT_DATA_GET(data, sd);
|
EFL_UI_TEXT_DATA_GET(data, sd);
|
||||||
|
|
||||||
|
single_line = !efl_text_format_multiline_get(obj);
|
||||||
|
|
||||||
evas_event_freeze(evas_object_evas_get(data));
|
evas_event_freeze(evas_object_evas_get(data));
|
||||||
sd->changed = EINA_TRUE;
|
sd->changed = EINA_TRUE;
|
||||||
/* Reset the size hints which are no more relevant. Keep the
|
/* Reset the size hints which are no more relevant. Keep the
|
||||||
|
@ -2116,6 +2089,12 @@ _entry_changed_handle(void *data,
|
||||||
evas_object_size_hint_min_get(data, NULL, &minh);
|
evas_object_size_hint_min_get(data, NULL, &minh);
|
||||||
evas_object_size_hint_min_set(data, -1, minh);
|
evas_object_size_hint_min_set(data, -1, minh);
|
||||||
|
|
||||||
|
if (sd->single_line != single_line)
|
||||||
|
{
|
||||||
|
sd->single_line = single_line;
|
||||||
|
elm_obj_widget_theme_apply(data);
|
||||||
|
}
|
||||||
|
|
||||||
elm_layout_sizing_eval(data);
|
elm_layout_sizing_eval(data);
|
||||||
ELM_SAFE_FREE(sd->text, eina_stringshare_del);
|
ELM_SAFE_FREE(sd->text, eina_stringshare_del);
|
||||||
ELM_SAFE_FREE(sd->delay_write, ecore_timer_del);
|
ELM_SAFE_FREE(sd->delay_write, ecore_timer_del);
|
||||||
|
@ -3023,8 +3002,6 @@ _efl_ui_text_resize_internal(Evas_Object *obj)
|
||||||
|
|
||||||
elm_interface_scrollable_content_viewport_geometry_get
|
elm_interface_scrollable_content_viewport_geometry_get
|
||||||
(obj, NULL, NULL, &vw, &vh);
|
(obj, NULL, NULL, &vw, &vh);
|
||||||
if (vw < sd->ent_mw) vw = sd->ent_mw;
|
|
||||||
if (vh < sd->ent_mh) vh = sd->ent_mh;
|
|
||||||
evas_object_resize(sd->entry_edje, vw, vh);
|
evas_object_resize(sd->entry_edje, vw, vh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3272,6 +3249,8 @@ _efl_ui_text_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Text_Data *priv)
|
||||||
priv->editable = EINA_TRUE;
|
priv->editable = EINA_TRUE;
|
||||||
priv->sel_allow = EINA_TRUE;
|
priv->sel_allow = EINA_TRUE;
|
||||||
|
|
||||||
|
priv->single_line = !efl_text_format_multiline_get(text_obj);
|
||||||
|
|
||||||
priv->drop_format = ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_IMAGE;
|
priv->drop_format = ELM_SEL_FORMAT_MARKUP | ELM_SEL_FORMAT_IMAGE;
|
||||||
elm_drop_target_add(obj, priv->drop_format,
|
elm_drop_target_add(obj, priv->drop_format,
|
||||||
_dnd_enter_cb, NULL,
|
_dnd_enter_cb, NULL,
|
||||||
|
@ -4050,7 +4029,6 @@ _efl_ui_text_scrollable_set(Eo *obj, Efl_Ui_Text_Data *sd, Eina_Bool scroll)
|
||||||
|
|
||||||
elm_widget_on_show_region_hook_set(obj, NULL, NULL);
|
elm_widget_on_show_region_hook_set(obj, NULL, NULL);
|
||||||
}
|
}
|
||||||
sd->last_w = -1;
|
|
||||||
_update_decorations(obj);
|
_update_decorations(obj);
|
||||||
elm_obj_widget_theme_apply(obj);
|
elm_obj_widget_theme_apply(obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,8 @@ struct Efl.Ui.Text.Interactive.Change_Info {
|
||||||
merge: bool; [[$true if can be merged with the previous one. Used for example with insertion when something is already selected]]
|
merge: bool; [[$true if can be merged with the previous one. Used for example with insertion when something is already selected]]
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Efl.Ui.Text.Interactive ()
|
interface Efl.Ui.Text.Interactive (Efl.Text, Efl.Text.Font,
|
||||||
|
Efl.Text.Format, Efl.Text.Style)
|
||||||
{
|
{
|
||||||
[[This is an interface interactive text inputs should implement]]
|
[[This is an interface interactive text inputs should implement]]
|
||||||
methods {
|
methods {
|
||||||
|
@ -37,14 +38,6 @@ interface Efl.Ui.Text.Interactive ()
|
||||||
end: Efl.Canvas.Text.Cursor; [[The end of the selection]]
|
end: Efl.Canvas.Text.Cursor; [[The end of the selection]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property multiline {
|
|
||||||
[[Whether or not this textblock is allowed to be multiline]]
|
|
||||||
set {}
|
|
||||||
get {}
|
|
||||||
values {
|
|
||||||
enabled: bool; [[$true if enabled, $false otherwise]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@property editable {
|
@property editable {
|
||||||
[[Whether the entry is editable.
|
[[Whether the entry is editable.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue