OberonCore https://forum.oberoncore.ru/ |
|
Отмена очистки памяти операций для отмены https://forum.oberoncore.ru/viewtopic.php?f=23&t=6877 |
Страница 1 из 1 |
Автор: | Иван Денисов [ Среда, 28 Декабрь, 2022 08:44 ] |
Заголовок сообщения: | Отмена очистки памяти операций для отмены |
adimetrius писал(а): За очистку памяти операций для отмены отвечает вот этот фрагмент в StdCmds, если я не ошибаюсь: ![]() Я попробовал, но проблема в том, что там в процессе сохранения Блэкбокс добавляет какие-то операции нейтрализации или что-то такое, и поэтому их вероятно надо как-то очищать из очереди на отмену. Не до конца понимаю пока, как правильно сделать. |
Автор: | arisu [ Среда, 28 Декабрь, 2022 16:57 ] |
Заголовок сообщения: | Re: Отмена очистки памяти операций для отмены |
это `Converters.Export()` туда гадит. надо так: Код: w.seq.BeginModification(Sequencers.invisible, NIL); Converters.Export(loc, name, conv, v); w.seq.EndModification(Sequencers.invisible, NIL); и будет телемаркет. там, кстати, сверху ещё есть `PROCEDURE Do`, которая применяется для "save as", там надо ту же самую хирургическую операцию сделать. и флажок бы добавить в настройки редактора неплохо. я себе так и запилил, с настройкой. и вообще, там в `Do` и `SaveWindow` дупликация кода. неплохо бы отрефакторить. p.s.: и командер для "clear undo" надо бы тоже. иногда удобно. |
Автор: | Иван Денисов [ Среда, 28 Декабрь, 2022 23:00 ] |
Заголовок сообщения: | Re: Отмена очистки памяти операций для отмены |
Большое спасибо, вроде удалось. Я сделал константу clearSeqOnSave = FALSE; если кому-то нравилось старое поведение, то можно тут установить TRUE Пришлось добавить ещё w.seq.SetDirty(TRUE) в Undo и Redo Код: PROCEDURE Undo*;
VAR w: Windows.Window; BEGIN w := Windows.dir.Focus(Controllers.frontPath); IF w # NIL THEN w.seq.Undo; w.seq.SetDirty(TRUE) END END Undo; PROCEDURE Redo*; VAR w: Windows.Window; BEGIN w := Windows.dir.Focus(Controllers.frontPath); IF w # NIL THEN w.seq.Redo; w.seq.SetDirty(TRUE) END END Redo; |
Автор: | arisu [ Среда, 28 Декабрь, 2022 23:59 ] |
Заголовок сообщения: | Re: Отмена очистки памяти операций для отмены |
Иван Денисов писал(а): Пришлось добавить ещё w.seq.SetDirty(TRUE) в Undo и Redo оба-на! а вот это я проглядел, спасибо! вообще, по уму надо бы в ундо-список класть операцию смены dirty-флага тоже, чтобы её обычным механизмом откатывало. тогда redo её будет тем же механизмом накатывать обратно. в смысле save-undo-redo приведёт к корректному состоянию «чистенький» тогда, например. я попробую на днях посмотреть, насколько это больно будет. no promises, но… |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |