OlegN
|
опубликован 03-07-2001 16:56 MSK
Задача непростая, но ориентировочно можно реализовать вот так : Класс документа содержит как минимум два списка (динамиских массива). Первый - массив граф объектов, пронаследованных от базового граф объекта с набором виртуальных методов. Как минимум каждый граф объект должен уметь себя обрисовать, а также сохранить/считать данные из потока/ в поток (поддержка сериализации), также каждый объект должен иметь уникальный идентификатор DWORD, по которому можна также определить тип (имя) граф. обекта (можно использовать старший BYTE или WORD)Второй массив сожержит объекты, которые содержат данные, определяющие действие пользователя над граф. объектом создание/удаление/модификация(имя модификации). Кроме типа действия эти объекты содержат идентификатор граф. объекта и его данные до модификации, полученные вызовом метода serialize или операциями << >>. Каждое изменение граф. объектов заносится во второй массив. Если нужно сделать откат, ты выполняешь обратное действие, если объект создавался, то удаляешь, если удалялся, то создаешь и инициализируешь сохраненными данными, если модифицировался, то инициализируешь данными до модификации. |