Как да реагирам на промените във фокуса на 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   -  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

В отговор на предложението на Stephan Eggermont промених следния метод

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 ]

Това работи, но drilldown w widget widget textMorph е малко неудобно.

В моя DateInputFieldModel се абонирах за съобщенията

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