class EL_UNDOABLE_TEXT_COMPONENT_I
Undoable text component i
note
description: "Undoable text component i"
author: "Finnian Reilly"
copyright: "Copyright (c) 2001-2022 Finnian Reilly"
contact: "finnian at eiffel hyphen loop dot com"
license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
date: "2023-08-17 21:05:55 GMT (Thursday 17th August 2023)"
revision: "11"
deferred class
EL_UNDOABLE_TEXT_COMPONENT_I
inherit
EV_TEXT_COMPONENT_I
EL_STRING_GENERAL_ROUTINES
feature {NONE} -- Initialization
make
do
create edit_history.make (100)
end
feature {EL_UNDOABLE_TEXT_COMPONENT, EL_UNDOABLE_TEXT_COMPONENT_I} -- Access
edit_history: EL_ZSTRING_EDITION_HISTORY
text: STRING_32
deferred
end
caret_position: INTEGER
deferred
end
feature {EL_UNDOABLE_TEXT_COMPONENT} -- Element change
set_initial_text (a_text: READABLE_STRING_GENERAL)
do
is_restoring := True
edit_history.set_string_from_general (a_text)
set_text (to_unicode_general (a_text))
is_restoring := False
end
set_edit_history_from_other (other: EL_UNDOABLE_TEXT_COMPONENT_I)
do
edit_history := other.edit_history
end
set_caret_position (a_caret_position: INTEGER)
deferred
end
feature {EL_UNDOABLE_TEXT_COMPONENT} -- Status query
has_undo_items: BOOLEAN
do
Result := not edit_history.is_empty
end
has_redo_items: BOOLEAN
do
Result := edit_history.has_redo_items
end
is_undo_enabled: BOOLEAN
feature {EL_UNDOABLE_TEXT_COMPONENT} -- Status setting
set_undo (enabled: BOOLEAN)
do
is_undo_enabled := enabled
if not enabled then
edit_history.wipe_out
end
end
feature {EL_UNDOABLE_TEXT_COMPONENT} -- Basic operations
undo
do
if is_undo_enabled and then has_undo_items then
edit_history.undo; restore
end
end
redo
do
if is_undo_enabled and then has_redo_items then
edit_history.redo; restore
end
end
feature {EL_UNDOABLE_TEXT_COMPONENT} -- Event handling
on_change_actions
do
if is_undo_enabled and then not is_restoring then
if edit_history.is_in_default_state then
edit_history.set_string_from_general (text)
elseif not edit_history.string.same_string (text) then
edit_history.extend_from_general (text)
end
end
end
feature {EL_UNDOABLE_TEXT_COMPONENT_I} -- Implementation
restore
-- restore result of redo or undo
do
is_restoring := True
set_text (edit_history.string.to_unicode)
set_caret_position (edit_history.caret_position)
is_restoring := False
end
set_text (a_text: READABLE_STRING_GENERAL)
deferred
end
is_restoring: BOOLEAN
end