Сообщение от bes
|
опиши логику переходов по истории
|
Обычно логика такая (если по уму делать):
есть массив (очередь), и есть указатель на текущий пункт в нем. Всё что перед указателем - "область повторов", прочее - "область отмен" (обе области могут быть пустые).
Функция undo - если есть команды в "области отмен", отменяем команду, на которой стоит указатель, перемещаем оный на шаг назад.
Функция redo - если есть команды в "области повторов", перемещаем указатель на шаг вперед и выполняем команду под ним.
Функция action (юзер хочет что-то сделать) - удаляем всё из "области повторов", формируем команду, ставим перед указателем, делаем redo. Если в очереди стало больше 10 элементов, удаляем самый старый.
Каждый элемент в очереди - команда, которую можно выполнить или отменить.