I had already  defined & accepted defaultSpec , as per page 6.

Attached is my CustomerSatisfaction.st file : I assume Pharo will suck it back in !



On 21/03/18 17:55, Alistair Grant wrote:
On 21 March 2018 at 03:12, dragoncity <dragoncitybr...@gmail.com> wrote:
Hello, I'm just getting into Pharo, and am trying to
do the example 'tutorial' UI programs in chapter 2 of The Spec UI Framework
book. I have  a special interest in end user GUI interfaces for programs. I
enter the first example code as written and the methods are all accepted
without errors. And yes, I did generate the accessors.

However , on attempting to execute the code at the bottom of page 6 from the
latest Spec UI Framework book,


| ui |

ui := CustomerSatisfaction newopenWithSpec.

ui close.



this error message appears, no UI image appears of course.

"SubclassResponsibility:CustomerSatisfaction class had the subclass
responsibility to implement #defaultSpec"

======

Not only don't I understand the message, but it implies I have to write
something called #defaultSpec !, which is not mentioned in the tutorial.
CustomerSatisfaction is a subclass of ComposableModel
(ComposablePresenter in Pharo 7).  If you have a look at the
implementation of #defaultSpec in ComposableModel or
ComposablePresenter (depending on which version of Pharo you are
using) it says that it is up to subclasses to implement the method
(#subclassResponsibility).  Since  you haven't defined it (yet), the
call to #defaultSpec uses the inherited definition from
ComposableModel, which raises the error you are seeing.

CustomerSatisfaction class>>defaultSpec is on page 6 of my version of
the booklet, dated Feb 6, 2107.


Cheers,
Alistair



--
Cheers,
Brett

'From Pharo6.0 of 13 May 2016 [Latest update: #60513] on 21 March 2018 at 
6:28:13.790017 pm'!
ComposableModel subclass: #CustomerSatisfaction
        instanceVariableNames: 'buttonHappy buttonNeutral buttonBad screen'
        classVariableNames: ''
        poolDictionaries: ''
        category: 'Spec-BuildUIWithSpec'!

!CustomerSatisfaction methodsFor: 'initialization' stamp: 'BrettHallett 
3/19/2018 15:40'!
title
        ^ 'Customer Satisfaction Survey'.
        ! !

!CustomerSatisfaction methodsFor: 'initialization' stamp: 'BrettHallett 
3/21/2018 18:26'!
defaultSpec
^ SpecLayout composed
        newRow: [ :row |
                row add: #buttonHappy; add: #buttonNeutral; add: #buttonBad  ]
        origin: 0 @ 0 corner: 1 @ 0.7;
        newRow: [ :row | row add: #screen ]
        origin: 0 @ 0.7 corner: 1 @ 1;
        yourself 
        ! !

!CustomerSatisfaction methodsFor: 'initialization' stamp: 'BrettHallett 
3/21/2018 17:18'!
initializePresenter

        buttonHappy action: [ screen label: buttonHappy label ].
        buttonNeutral action: [ screen label: buttonNeutral label  ].
        buttonBad action: [ screen label: buttonBad label  ].! !

!CustomerSatisfaction methodsFor: 'initialization' stamp: 'BrettHallett 
3/19/2018 16:14'!
initializeWidgets
        " set up Widgets"
        screen := self newLabel.
        buttonHappy := self newButton.
        buttonNeutral := self newButton.
        buttonBad := self newButton.
        
        " widget config "
        screen label: 'Please give us your feedback.'.
        buttonHappy
                label: 'Happy';
                icon: ( self iconNamed: #thumbsUp).
        buttonNeutral
                label: 'Neutral'        ;
                icon: ( self iconNamed: #user).
        buttonBad
                label: 'Bad'    ;
                icon: ( self iconNamed: #thumbsDown)    .
                        
        " specification of order of focus "             
                        
        self focusOrder 
         add: buttonHappy;
         add: buttonNeutral;
         add: buttonBad
                        
        ! !

!CustomerSatisfaction methodsFor: 'initialization' stamp: 'BrettHallett 
3/19/2018 15:40'!
extent
 ^ 400@100
        ! !


!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
buttonBad
        ^ buttonBad! !

!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
buttonNeutral
        ^ buttonNeutral! !

!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
buttonHappy: anObject
        buttonHappy := anObject! !

!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
screen
        ^ screen! !

!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
screen: anObject
        screen := anObject! !

!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
buttonNeutral: anObject
        buttonNeutral := anObject! !

!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
buttonBad: anObject
        buttonBad := anObject! !

!CustomerSatisfaction methodsFor: 'accessing' stamp: 'BrettHallett 3/19/2018 
16:04'!
buttonHappy
        ^ buttonHappy! !

Reply via email to