Страница 2 из 2

Re: Есть какие то типовые варианты создания функции отмена?

СообщениеДобавлено: 05.05.2015 00:18:20
zub
>>Может хранить флажок, что делаем в следующий раз: добавляем или удаляем.
Ну это чето уж совсем. UndoStack.Undo или UndoStack.Redo - там внутри и флажки и движение по стеку...
>>Можно, конечно, коллекцию (стек) нагрузить знаниями о том, что там хранятся операции и что их нельзя отдавать,
Это реализация логики undo\redo, а не "нагруженная" коллекция. Коллекция гдето отдельно или внутри - по вкусу. Не знаю что тут напряжного)) имхо гораздо напряжней возиться с операциями и вызывая perform думать что же там на этот раз бог пошлет - унду или реду))

Кстати кроме UndoStack.Undo и UndoStack.Redo мне еще понадобились
Код: Выделить всё
UndoStack.StartCommand(CommandName:string);//для "обрамления" группы "операций" (с возможностью вложенности) которые должны отменяться\применяться единовременно. С комментарием видя который пользователь понимает что конкретно отменилось\приминилось
UndoStack.EndCommand;//конец обрамления
UndoStack.PushStone;//Пихнуть в стек "маячек" что дальше ундо делать нельзя, пока не закроется "обрамление". после закрытия обрамления эти "маячки" ненужны и из стека выкидываются

Re: Есть какие то типовые варианты создания функции отмена?

СообщениеДобавлено: 06.05.2015 00:11:36
Mirage
Даже в названии UndoStack фигурирует интерфейс коллекции. :)
А флажки далеко не для всех операций нужны.

Насчет группировки - я бы сделал просто TOperation.Merge(TOperation): Boolean.
Если объединяются - остается одна, если нет - новая пушится в стек.