Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Sergey Voloshchuk                    2:5020/400     16 May 2003  14:33:26
 To : Danila Willsky
 Subject : Re: Undo
 -------------------------------------------------------------------------------- 
 
 > Интересно, а как обычно реализовывают поддержку функций Undo/Redo в
 > программах? Что-то вроде массива с именами и значениями измененных элементов?
 >
 
 Я у себя сделал базовый класс CUndoItem в котором есть чисто виртуальная функция
 virtual CUndoItem* Undo(CMyCoolData& md) = 0;
 Потом наследуешь от него множество конкретных классов, каждый из которых
 отвечает за конкретную операцию редактирования и содержит данные, необходимые
 для отмены этой операции.
 
 Перед выполнением каждой операции редактирования создается соответствующий
 объект производный от CUndoItem и добавляется в список (list). Обработка кнопки
 Undo сводится к извлечению последнего объекта из этого списка и вызове его
 функции Undo. В нее передается ссылка на твои данные CMyCoolData&, а как
 выполнить отмену каждый объект знает сам.
 
 Кроме того, поскольку класс знает как выполняется отмена, он может создать
 другой объект CUndoItem который содержит данные, отменяющие эту отмену, и
 возвращает этот объект в функцию обработки кнопки Undo. Она добавляет его в
 другой список, который используется обработчиком кнопки Redo. Этот обработчик
 работает абсолютно симметрично: вызывают функцию Undo для объекта "своего"
 списка и добавляют возвращенное значение в "анти"-список.
 
 Остается добавить, что при добавлении объектов в список Undo при редактировании
 (не из обработчика Redo) необходимо очищать список Redo.
 
 --- ifmail v.2.15dev5
  * Origin: RTComm.RU (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Undo   Danila Willsky   16 May 2003 13:52:02 
 Re: Undo   Sergey Voloshchuk   16 May 2003 14:33:26 
 Re: Undo   Viktor Karev   19 May 2003 12:27:55 
 Re: Undo   Danila Willsky   23 May 2003 16:09:24 
 Re: Undo   Viktor Karev   26 May 2003 11:31:31 
Архивное /ru.algorithms/879300bec695.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional