Pull to refresh

Comments 8

В своем редакторе я тоже решал подобную задачу.
Но сделал чуть по другому — любое действие которое приводит к редактированию было сделано через объект
EditAction

соответственно у него были процедуры Do и UnDo
+ процедура bool JoinWith (EditAction) которая по возможности объединялась с предыдущим действием.
Однако, как оказалось, кроме общих принципов и слов найти что-то типа библиотеки сложно.

А почему не подошел Qt Undo Framework?

1. В нем не решена проблема зависимых объектов, то что я попытался автоматизировать в «ссылочной целостности»
2. для меня было критично, что в дереве проектов я не мог использовать Qt на том уровне, он появлялся только на GUI-уровне

при этом соглашусь, что утверждение «найти что-то типа библиотеки сложно» слишком субъективно

Не очень понятно все-таки, что за проблема со ссылочной целостностью. Или у вас откатить можно любое действие, не откатывая действия, которые были сделаны позже него?

Нет, откат линеен, проблема в другом. Например если рассмотрим цепочку Create -> Move для одного объекта, то в qt-шном варианте предлагается делать new для объекта в создании самой команды Create. У меня создание будет идти непосредственно в apply, а в undo будет сделан delete. При возврате действия, надо будет для Move-а соответственно восстановить указатель на новый созданный объект. В этом и заключается сложность.
Я тоже в своем редакторе тоже решал подобную задачу на javascript. Если я правильно помню основную идею, то на каждое действие создавалась команда с undo / redo.

Написать подробнее в рамках комментария затруднительно, но если кого-то заинтересовало, что в итоге получилось, можно попробовать тут: http://30pxart.com/Edit. Минификация сломалась, исходники доступны в консоли.
Для сценариев в какой сфере ваш софт? В геймдеве использую articy:draft, так создалось впечатление, что это что-то похожее (хотя сценариями функционал articy:draft не ограничивается).
Изначально для кино-сценариев. Но как показала практика — хорошо подходит для любых художественных историй, даже для поэм.
Из articity:draft я хочу слизать частично дизайн для новой версии (пока не релизнута). А сам софт мне очень не понравился с точки зрения отзывчивости — они похоже написали свою gui-подсистему на openGL, не решили мноого классических проблем (с тем же антиалиасингом на зуме), не обеспечили отзывчивость. Но функциональность там конечно богатая, там на мой взгляд даже сценарии вторичны.
Sign up to leave a comment.

Articles