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/