OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 17 Декабрь, 2017 16:53

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 21 Март, 2012 11:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4476
Откуда: Россия, Орёл
Выделено: viewtopic.php?p=71626#p71626

Ещё для отчёту: если открутиться назад на несколько undo, то операция, хоть и notRecorded, но redo-хвост затирает...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 21 Март, 2012 11:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
Евгений Темиргалеев писал(а):
Ещё для отчёту: если открутиться назад на несколько undo, то операция, хоть и notRecorded, но redo-хвост затирает...
Интересное замечание! Я думаю, это следует поправить в ББ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 21 Март, 2012 13:11 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4476
Откуда: Россия, Орёл
Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
Ещё для отчёту: если открутиться назад на несколько undo, то операция, хоть и notRecorded, но redo-хвост затирает...
Интересное замечание! Я думаю, это следует поправить в ББ.
Думаю, это хороший пример копания в кишках. Когда оттуда что-то тянешь, оно может показаться одним, а по сути будет совсем другим... И именно это не повод править ББ "глобально" (кто и как правит локально, для себя, дело личное).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 21 Март, 2012 14:29 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2284
Откуда: Россия, Санкт-Петербург
Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
Ещё для отчёту: если открутиться назад на несколько undo, то операция, хоть и notRecorded, но redo-хвост затирает...
Интересное замечание! Я думаю, это следует поправить в ББ.
Вот исправленная реализация Windows.StdSequencer.Do:
Код:
   PROCEDURE (s: StdSequencer) Do (st: Stores.Store; IN name: Stores.OpName; op: Stores.Operation);
      VAR e: OpElem;
   BEGIN
      ASSERT(st # NIL, 20); ASSERT(op # NIL, 21);
      IF s.trapEra # Kernel.trapCount THEN Reset(s) END;
      Do(s, st, op);
      IF s.noUndo THEN   (* cannot undo: unbalanced BeginModification pending *)
         s.lastSt := NIL; s.lastOp := NIL
      ELSIF (s.entryLevel = 0)   (* don't record when called from within op.Do *)
      & AffectsDoc(s, st) THEN   (* don't record when Do affected child window only *)
         s.lastSt := st; s.lastOp := op;
         IF s.notRecordedLevel = 0 THEN
            s.redo := NIL   (* clear redo stack *)
         END;
         IF s.script # NIL THEN
            Prepend(s.script, st, name, op)
         ELSE
            IF (s.invisibleLevel = 0) & (s.transparentLevel = 0) & (s.notRecordedLevel = 0) THEN INC(s.modLevel) END;
            IF s.notRecordedLevel = 0 THEN
               NEW(e); e.st := st; e.op := op; e.name := name;
               e.invisible := s.invisibleLevel > 0; e.transparent := s.transparentLevel > 0;
               Push(s.undo, e)
            END
         END
      END
   END Do;
Что изменилось:
1. добавлен IF s.notRecordedLevel = 0 перед строкой с комментарием "clear redo stack". Это, собственно, исправляет очистку стека redo действиями типа notRecorded;
2. действие последнего IF s.notRecordedLevel = 0 раньше распространялось только на Push(s.undo, e), но если не делать Push, то нет смысла и во всём блоке кода, начиная с NEW(e), поэтому область действия условия расширена, чтобы лишний объект не создавался и не инициализировался.
Евгений Темиргалеев писал(а):
Думаю, это хороший пример копания в кишках. Когда оттуда что-то тянешь, оно может показаться одним, а по сути будет совсем другим... И именно это не повод править ББ "глобально" (кто и как правит локально, для себя, дело личное).
Наверное, всё же не очень хороший, так как "по сути совсем другим" ничего не оказалось. Просто нашлась мелкая недоработка.
Напомню, что константа Windows.notRecorded и переменная Windows.StdSequencer.notRecordedLevel - не мои нововведения, а существующий и работающий механизм стандартного ББ 1.5.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 21 Март, 2012 17:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4476
Откуда: Россия, Орёл
Александр Ильин писал(а):
Наверное, всё же не очень хороший, так как "по сути совсем другим" ничего не оказалось. Просто нашлась мелкая недоработка.
Ага... с выводами опять поспешил.

(из разряда общего замечания) Есть гарантии, что мелкое исправление не повредит остальным кишкам? Вы в этой части, по ходу дела, неплохо разбираетесь... Или поживём --- увидим?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 21 Март, 2012 17:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4476
Откуда: Россия, Орёл
Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
Ещё для отчёту: если открутиться назад на несколько undo, то операция, хоть и notRecorded, но redo-хвост затирает...
Вот исправленная реализация Windows.StdSequencer.Do...
Опробовал исправление: означенный "эффект" пропал.


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

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


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

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


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

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