OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 10:31

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 28 Декабрь, 2022 08:44 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3777
adimetrius писал(а):
За очистку памяти операций для отмены отвечает вот этот фрагмент в StdCmds, если я не ошибаюсь:

Изображение

Я попробовал, но проблема в том, что там в процессе сохранения Блэкбокс добавляет какие-то операции нейтрализации или что-то такое, и поэтому их вероятно надо как-то очищать из очереди на отмену. Не до конца понимаю пока, как правильно сделать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 16:57 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
это `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 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3777
Большое спасибо, вроде удалось. Я сделал константу 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;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Декабрь, 2022 23:59 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1167
Иван Денисов писал(а):
Пришлось добавить ещё w.seq.SetDirty(TRUE) в Undo и Redo

оба-на! а вот это я проглядел, спасибо!

вообще, по уму надо бы в ундо-список класть операцию смены dirty-флага тоже, чтобы её обычным механизмом откатывало. тогда redo её будет тем же механизмом накатывать обратно. в смысле save-undo-redo приведёт к корректному состоянию «чистенький» тогда, например.

я попробую на днях посмотреть, насколько это больно будет. no promises, но…


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB