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

Модератор: Модераторы

zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

Кстати кроме UndoStack.Undo и UndoStack.Redo мне еще понадобились

Код: Выделить всё

UndoStack.StartCommand(CommandName:string);//для "обрамления" группы "операций" (с возможностью вложенности) которые должны отменяться\применяться единовременно. С комментарием видя который пользователь понимает что конкретно отменилось\приминилось
UndoStack.EndCommand;//конец обрамления
UndoStack.PushStone;//Пихнуть в стек "маячек" что дальше ундо делать нельзя, пока не закроется "обрамление". после закрытия обрамления эти "маячки" ненужны и из стека выкидываются
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

Даже в названии UndoStack фигурирует интерфейс коллекции. :)
А флажки далеко не для всех операций нужны.

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