Как реагировать на изменения фокуса в ComposableModel? (Спецификация)

Я пытаюсь создать DateInputFieldModel (подкласс ComposableModel).

Он использует TextInputFieldModel как inputField.
Я установил inputField autoAccept: true..

Я не хочу использовать return/enter для принятия.

Во время ввода я проверяю с помощью acceptBlock, интерпретируется ли введенный текст как дата.
В моем случае, например, одна цифра уже интерпретируется как дата.
Когда вы вводите 5, это будет означать 5-й текущего месяца текущего года.

Когда поле ввода теряет фокус (вкладка или мышь), я хотел бы отобразить окончательное представление даты в inputField и обновить значение даты моего DateInputFieldModel.

Любые указатели на то, как этого добиться?


person Ivo Roefs    schedule 19.07.2015    source источник
comment
Для обсуждения дизайна вам лучше обратиться в список рассылки pharo-users.   -  person Stephan Eggermont    schedule 27.07.2015


Ответы (2)


Базовый Morph получает отправку #keyboardFocusChange:

Вероятно, вам нужно добавить #whenFocusChanged: где-нибудь в иерархии ComposableModel и убедиться, что он вызывается из правильных подклассов AbstractMorphicAdapter.

person Stephan Eggermont    schedule 22.07.2015
comment
Я обновил свой вопрос, используя ваше предложение, более или менее. Не могли бы вы проверить это? - person Ivo Roefs; 25.07.2015

В ответ на предложение Стефана Эггермонта я изменил следующий метод

MorphicTextInputFieldAdapter>>adapt: aModel
  super adapt: aModel.
  aModel
    whenBuiltDo: [ :w | 
      w widget color: Smalltalk ui theme backgroundColor.
      w widget widget textMorph 
         onAnnouncement: MorphGotFocus, MorphLostFocus  
         send: #announce: to: aModel ]

Это работает, но развертка виджета виджета textMorph немного неудобна.

В моем DateInputFieldModel я подписался на объявления

inputField on: MorphLostFocus send: #lostFocus to: self.
person Ivo Roefs    schedule 28.07.2015