Thanks sven for your spirit and attittude.
I should say that if people would have more your attitude I would fell much better. Yes indeed I'm down because of people wanting always more and not putting a drop of energy on the table.

PS: I turned your mail into a spec future book chapter :)

Le 13/2/15 00:53, Sven Van Caekenberghe a écrit :
t turns out it only takes 3 methods and some boilerplate code that is mostly 
auto generated.

0. Make a subclass of ComposableModel with instance variables for the UI 
elements that we need

ComposableModel subclass: #LoginModel
   instanceVariableNames: 'usernameLabel usernameField passwordLabel 
passwordField'
   classVariableNames: ''
   category: '_UnpackagedPackage'

1. Specify the layout of the UI

LoginModel class>>#defaultSpec
   <spec: #default>

   ^ SpecLayout composed
       newColumn: [ :col |
         col
           newRow: [ :row |
             row
               add: #usernameLabel width: 80;
               add: #usernameField ]
           height: self inputTextHeight;
           newRow: [ :row |
             row
               add: #passwordLabel width: 80;
               add: #passwordField ]
           height: self inputTextHeight ];
        yourself

2. Build the UI elements

LoginModel>>#initializeWidgets
   usernameLabel := self newLabel.
   usernameLabel text: 'Username'.
   usernameField := self newTextInput.
   usernameField autoAccept: true; ghostText: '[email protected]'.
   passwordLabel := self newLabel.
   passwordLabel text: 'Password'; yourself.
   passwordField := self newTextInput.
   passwordField beEncrypted; autoAccept: true; ghostText: '******'.
   self focusOrder add: usernameField; add: passwordField

3. Open the UI as modal dialog

LoginModel class>>#getCredentials
   "self getCredentials"
        
   | login dialog |
   login := self new.
   dialog := login openDialogWithSpec.
   dialog modalRelativeTo: self currentWorld.
   dialog cancelled ifTrue: [ ^ nil ].
   ^ login credentials

X. Some boilerplate code

Auto-generate read accessors for the 4 instance variables.

LoginModel>>#title
   ^ 'Login'

LoginModel>>#initialExtent
   ^ 350 @ 150

LoginModel>>#credentials
   ^ usernameField text -> passwordField text


I think this is pretty cool. I really can't imagine how much easier, how much 
less code this should take.


Reply via email to