elm_code: Expose whether or not undo and redo can operate

A quick peek at the stack will allow us to inform users
of the widget if operations will apply.
This commit is contained in:
Andy Williams 2017-04-07 18:14:31 +01:00
parent e5dd8327ba
commit c5dce45a95
2 changed files with 23 additions and 0 deletions

View File

@ -278,9 +278,17 @@ class Elm.Code_Widget (Elm.Layout, Elm.Interface.Atspi.Text)
undo {
[[Undo last action]]
}
can_undo_get {
[[Determine if there are any available undo operations]]
return: bool; [[$true if there are undo operations]]
}
redo {
[[Redo last action]]
}
can_redo_get {
[[Determine if there are any available redo operations]]
return: bool; [[$true if there are redo operations]]
}
}
implements {
class.constructor;

View File

@ -109,6 +109,12 @@ _elm_code_widget_undo_change(Evas_Object *widget,
}
}
static Eina_Bool
_elm_code_widget_can_undo_get(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
{
return !!pd->undo_stack_ptr;
}
static void
_elm_code_widget_undo(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
{
@ -123,6 +129,15 @@ _elm_code_widget_undo(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
pd->undo_stack_ptr = eina_list_next(pd->undo_stack_ptr);
}
static Eina_Bool
_elm_code_widget_can_redo_get(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
{
if (pd->undo_stack_ptr)
return !!eina_list_prev(pd->undo_stack_ptr);
return !!eina_list_last(pd->undo_stack);
}
static void
_elm_code_widget_redo(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
{