OberonCore https://forum.oberoncore.ru/ |
|
Views.Omnicast https://forum.oberoncore.ru/viewtopic.php?f=23&t=862 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Пятница, 08 Февраль, 2008 12:23 ] |
Заголовок сообщения: | Views.Omnicast |
Код: 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 - недокументированная (специально) возможность или не задокументированная? |
Автор: | Евгений Темиргалеев [ Пятница, 08 Февраль, 2008 13:33 ] |
Заголовок сообщения: | Re: Views.Omnicast |
Насущный вопрос: можно ли сделать обёртку, которая будет получать сообщения через 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; |
Автор: | Info21 [ Пятница, 08 Февраль, 2008 14:14 ] |
Заголовок сообщения: | Re: Views.Omnicast |
Евгений Темиргалеев писал(а): Код: PROCEDURE Omnicast* (VAR msg: ANYREC); BEGIN msgHook.Omnicast(msg) END Omnicast; PROCEDURE Omnicast (VAR msg: Message) Такая запись в документации означает говорит, что каркас через Omnicast разошлёт только Views.Message.? Omnicast разошлет ANYREC. Но -- только видимым вьюшкам по разу. |
Автор: | Trurl [ Пятница, 08 Февраль, 2008 14:48 ] |
Заголовок сообщения: | Re: Views.Omnicast |
Евгений Темиргалеев писал(а): PROCEDURE Omnicast (VAR msg: Message) Такая запись в документации означает говорит, что каркас через Omnicast разошлёт только Views.Message.? В той же документации PROCEDURE Omnicast (VAR msg: ANYREC); |
Автор: | Trurl [ Пятница, 08 Февраль, 2008 15:04 ] |
Заголовок сообщения: | Re: Views.Omnicast |
Евгений Темиргалеев писал(а): Если в обёртке сделать обработчик - все сообщения будут в нём блокироваться, или каркас будет слать по отдельности и обёртке и обёрнутому отображению? Откуда же он узнает, что это обёртка? Всем слать будет. |
Автор: | Евгений Темиргалеев [ Пятница, 08 Февраль, 2008 16:02 ] |
Заголовок сообщения: | Re: Views.Omnicast |
Trurl писал(а): Евгений Темиргалеев писал(а): PROCEDURE Omnicast (VAR msg: Message) Такая запись в документации означает говорит, что каркас через Omnicast разошлёт только Views.Message.? В той же документации PROCEDURE Omnicast (VAR msg: ANYREC); |
Автор: | Евгений Темиргалеев [ Пятница, 08 Февраль, 2008 16:05 ] |
Заголовок сообщения: | Re: Views.Omnicast |
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; |
Автор: | Trurl [ Пятница, 08 Февраль, 2008 16:19 ] |
Заголовок сообщения: | Re: Views.Omnicast |
Евгений Темиргалеев писал(а): Вот, пробовал. Controllers.Message не приходит. А что должны? Цитата: In contrast to model and view messages, a controller message is never broadcast.
|
Автор: | Евгений Темиргалеев [ Пятница, 08 Февраль, 2008 16:27 ] |
Заголовок сообщения: | Re: Views.Omnicast |
Если я не ошибаюсь, этот код из 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 игнорирует. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |