OberonCore
https://forum.oberoncore.ru/

Нерасширяемый FormControllers.Focus
https://forum.oberoncore.ru/viewtopic.php?f=127&t=6194
Страница 1 из 1

Автор:  Илья Ермаков [ Понедельник, 04 Декабрь, 2017 14:56 ]
Заголовок сообщения:  Нерасширяемый FormControllers.Focus

Ср.:

TextControllers
Код:
   PROCEDURE Focus* (): Controller;
      VAR v: Views.View; c: Containers.Controller;
   BEGIN
      v := Controllers.FocusView();
      IF (v # NIL) & (v IS TextViews.View) THEN
         c := v(TextViews.View).ThisController();
         IF (c # NIL) & (c IS Controller) THEN RETURN c(Controller)
         ELSE RETURN NIL
         END
      ELSE RETURN NIL
      END
   END Focus;


Всё ОК.

В формах же, видимо, застрял какой-то более древний вариант (там есть древности в формах):

FormControllers
Код:
      PollFocusMsg = RECORD (Controllers.PollFocusMsg)
         c: Controller
      END;

   PROCEDURE Focus* (): Controller;
      VAR msg: PollFocusMsg;
   BEGIN
      msg.c := NIL;
      Controllers.Forward(msg);
      RETURN msg.c
   END Focus;


Т.е. Focus() признаёт только стандартную реализацию контроллера форм.

Нужно бы в сборках переделать.

Пока придётся в своей реализации реагировать на PollFocusMsg по модулю тега типа и выставлять поле c через SYSTEM.

Автор:  Trurl [ Понедельник, 04 Декабрь, 2017 15:27 ]
Заголовок сообщения:  Re: Нерасширяемый FormControllers.Focus

"Ничего не понимаю". Что переделать и зачем?

Автор:  Илья Ермаков [ Вторник, 05 Декабрь, 2017 14:43 ]
Заголовок сообщения:  Re: Нерасширяемый FormControllers.Focus

У меня другие формы (и View, и Model, и Controller). Все наследники базовых типов.

FormControllers.Focus даёт на них NIL (и некоторые стандартные тулзы для форм "не признают").

Варианты изменения:
1) Экспортировать это внутреннее сообщение из FormControllers, чтоб другие реализации тоже могли его обрабатывать.
2) Переделать Focus() так, как он обычно и делается (пример - из TextControllers).

Автор:  Trurl [ Вторник, 05 Декабрь, 2017 16:07 ]
Заголовок сообщения:  Re: Нерасширяемый FormControllers.Focus

Ага, теперь понятно. Возможно, предполагалось, что FormControllers.Focus должно возвращать только стандартные формы.
Nогда есть еще вариант: перенести HandleCtrlMsg из StdController в Controller.
А вот насчет "обычно и делается" не согласен, так только в TextControllers.

Автор:  Trurl [ Вторник, 05 Декабрь, 2017 16:12 ]
Заголовок сообщения:  Re: Нерасширяемый FormControllers.Focus

Кстати, у нас же есть Containers.Focus. А поскольку формы и тексты суть контейнеры, вот такая процедура подойдет для обоих
Код:
PROCEDURE Focus* (): Controller;
  VAR c: Containers.Controller;
BEGIN
   c := Containers.Focus();
   IF (c # NIL) & (c IS Controller) THEN RETURN c(Controller) ELSE RETURN NIL END
END Focus;

Автор:  Илья Ермаков [ Среда, 06 Декабрь, 2017 20:03 ]
Заголовок сообщения:  Re: Нерасширяемый FormControllers.Focus

Ну да.
Но суть предложения - внести какие-то изменения в FotmControllers.
Пока пришлось использовать SYSTEM в своём контроллере для совместимости

Я думаю, что это у них какой-то древний хвост. Формы у них содержат какие-то рудименты в разных местах.

Автор:  Trurl [ Суббота, 09 Декабрь, 2017 13:15 ]
Заголовок сообщения:  Re: Нерасширяемый FormControllers.Focus

Рудиментов там везде полно, но вот насчет данного случая сомневаюсь. Ведь если внести изменения, то эта фунция становится и ненужной. Проверить, что контролер нужного типа любой модуль может и сам.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/