OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 11:48

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 12:23 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Код:
   PROCEDURE Omnicast* (VAR msg: ANYREC);
   BEGIN
      msgHook.Omnicast(msg)
   END Omnicast;

PROCEDURE Omnicast (VAR msg: Message)
Такая запись в документации означает говорит, что каркас через Omnicast разошлёт только Views.Message.?
StdClocks, однако отсылается Model.Message. msgHook.Omnicast приводит к Windows.StdSequencer.Omnicast, который как раз разбирает Views.Message и Models.Message.

Рассылка Models.Message - недокументированная (специально) возможность или не задокументированная?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 13:33 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Насущный вопрос: можно ли сделать обёртку, которая будет получать сообщения через Omnicast или надо делать контейнер.
Код:
   (* RestoreMarks: wrapper has no intrinsic marks, wrapped view's RestoreMarks is called by framework *)
   (* HandleModelMsg: framework performs message propagation *)
   (* HandleViewMsg: framework performs message propagation *)

   PROCEDURE (v: View) HandleModelMsg (VAR msg: Models.Message);
   BEGIN
      WITH msg: Msg2 DO
         Log.String("Пришло сообщение2:"); Log.Int(msg.x); Log.Ln
      ELSE
      END
   END HandleModelMsg;
Если в обёртке сделать обработчик - все сообщения будут в нём блокироваться, или каркас будет слать по отдельности и обёртке и обёрнутому отображению?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 14:14 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Евгений Темиргалеев писал(а):
Код:
   PROCEDURE Omnicast* (VAR msg: ANYREC);
   BEGIN
      msgHook.Omnicast(msg)
   END Omnicast;

PROCEDURE Omnicast (VAR msg: Message)
Такая запись в документации означает говорит, что каркас через Omnicast разошлёт только Views.Message.?


Omnicast разошлет ANYREC.
Но -- только видимым вьюшкам по разу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 14:48 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Евгений Темиргалеев писал(а):
PROCEDURE Omnicast (VAR msg: Message)
Такая запись в документации означает говорит, что каркас через Omnicast разошлёт только Views.Message.?

В той же документации
PROCEDURE Omnicast (VAR msg: ANYREC);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 15:04 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Евгений Темиргалеев писал(а):
Если в обёртке сделать обработчик - все сообщения будут в нём блокироваться, или каркас будет слать по отдельности и обёртке и обёрнутому отображению?

Откуда же он узнает, что это обёртка? Всем слать будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 16:02 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Trurl писал(а):
Евгений Темиргалеев писал(а):
PROCEDURE Omnicast (VAR msg: Message)
Такая запись в документации означает говорит, что каркас через Omnicast разошлёт только Views.Message.?

В той же документации
PROCEDURE Omnicast (VAR msg: ANYREC);
Посмотрел, в документации 1.6 - так. Но не в 1.5.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 16:05 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Info21 писал(а):
Omnicast разошлет ANYREC.
Но -- только видимым вьюшкам по разу.

Вот, пробовал (в 1.5). Controllers.Message не приходит.
Код:
   PROCEDURE (v: View) HandleModelMsg (VAR msg: Models.Message);
   BEGIN
      WITH msg: Msg2 DO
         Log.String("Пришло сообщение2:"); Log.Int(msg.x); Log.Ln
      ELSE
      END
   END HandleModelMsg;
   
   PROCEDURE (v: View) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View);
   BEGIN
      (* here comes the behavior which is specific to this wrapper -
         it modifies the wrapped view's behavior *)
      WITH msg: Msg1 DO
         Log.String("Пришло сообщение1:"); Log.Int(msg.x); Log.Ln
      ELSE
      END;
      focus := v.inner   (* forward all controller messages to wrapped view *)
   END HandleCtrlMsg;

   PROCEDURE Send* (x: INTEGER);
      VAR   msg1: Msg1; msg2: Msg2;
   BEGIN
      msg1.x := x; Views.Omnicast(msg1);
      msg2.x := x; Views.Omnicast(msg2)
   END Send;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 16:19 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Евгений Темиргалеев писал(а):
Вот, пробовал. Controllers.Message не приходит.

А что должны?
Цитата:
In contrast to model and view messages, a controller message is never broadcast.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Views.Omnicast
СообщениеДобавлено: Пятница, 08 Февраль, 2008 16:27 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Если я не ошибаюсь, этот код из Windows рассылает сообщение:
Код:
PROCEDURE (h: Hook) Omnicast (VAR msg: ANYREC);
      VAR w: Window;
   BEGIN
      w := dir.First();
      WHILE w # NIL DO
         IF ~w.sub THEN w.seq.Handle(msg) END;
         w := dir.Next(w)
      END
   END Omnicast;

   PROCEDURE (s: StdSequencer) Handle (VAR msg: ANYREC);
   (* send message to all windows attached to s *)
      VAR w: Window;
   BEGIN
      IF s.trapEra # Kernel.trapCount THEN Reset(s) END;
      WITH msg: Models.Message DO
         IF msg IS Models.UpdateMsg THEN
            Properties.IncEra;
            IF s.entryLevel = 0 THEN
               (* updates in dominated model bypassed the sequencer *)
               Reset(s);   (* panic reset: clear sequencer *)
               INC(s.modLevel)   (* but leave dirty *)
            END
         END;
         w := dir.First();
         WHILE w # NIL DO
            IF w.seq = s THEN w.BroadcastModelMsg(msg) END;
            w := dir.Next(w)
         END
      | msg: Views.Message DO
         w := dir.First();
         WHILE w # NIL DO
            IF w.seq = s THEN w.BroadcastViewMsg(msg) END;
            w := dir.Next(w)
         END
      ELSE
      END
   END Handle;

А он ANYREC кроме Models.Message и Views.Message игнорирует.


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

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


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

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


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

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