Есть программа, которая предоставляет пользователю возможность редактировать довольно сложные объекты. Данные об объектах хранятся в XML файле. Хотелось бы предоставить пользователю возможность делать Undo/Redo во время редактирования. Пока что приходит в голову только держать на винте несколькол временных файлов в одном из которых ведется редактирование, а в других сохраняются промежуточные версии. По Undo/Redo, соответственно, менять их местами. Идея не фонтан, так что, если кто-то может поделится более элегантным решением - буду признателен.
Нужна идея как реализовать Undo/Redo в редакторе.14.11.03 12:26 Автор: dl <Dmitry Leonov>
> Есть программа, которая предоставляет пользователю > возможность редактировать довольно сложные объекты. Данные > об объектах хранятся в XML файле. Хотелось бы предоставить > пользователю возможность делать Undo/Redo во время > редактирования. Пока что приходит в голову только держать > на винте несколькол временных файлов в одном из которых > ведется редактирование, а в других сохраняются > промежуточные версии. По Undo/Redo, соответственно, менять > их местами. Идея не фонтан, так что, если кто-то может > поделится более элегантным решением - буду признателен.
Достаточно традиционный подход, но для уже существующей программы требующий большой перетряски - создается класс "действие" с функциями Do и Undo. Объекты этого класса/его потомков выполняют основную функциональность программы, требующую отката (либо в состоянии корректно вызвать функции, эту функциональность обеспечивающую), и накапливаются в стеке. При откате вызывается Undo последнего объекта, и он перекидывается в другой список для Redo.
Рекомендуемая литература: Гамма и др. Паттерны проектирования (в английском издании - Design Patterns). Там, кстати, в самом начале приводится пример проектирования простенького как-бы-визивиг-редактора.
Спасибо, мысль ясна.14.11.03 15:19 Автор: tatar_0x4e Статус: Member