UserConfirmation.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 27 Mar 2013 12:24:15 +0000
branchjv
changeset 18040 a11a12546f23
parent 17911 a99f15c5efa5
parent 14951 c0fd00efb042
child 18120 e3a375d5f6a8
permissions -rw-r--r--
Merged 09806667c605 and 0e1b93ce9851 (branch default - CVS HEAD)

"
 COPYRIGHT (c) 2007 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
"{ Package: 'stx:libbasic' }"

Notification subclass:#UserConfirmation
	instanceVariableNames:'canCancel defaultAnswerInDialog defaultAnswer'
	classVariableNames:''
	poolDictionaries:''
	category:'Kernel-Exceptions-Notifications'
!

!UserConfirmation class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 2007 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
!

documentation
"
    This confirmation query is used when a user confirmation is required
    somewhere within a model's operation (i.e. in non-GUI code).
    Instead of directly asking via Dialog confirm... messages,
    this should be raised. 
    Its default behavior is the same as the above dialog.
    However, the query can be cought and answered by an exceoptn (a query-) handler,
    to suppress these GUI interactions in situations, where they are not wanted.

    This is a much better approach to the alternatives:
        passing additional 'doConfirm' arguments down from the high level caller
        keeping the doConfirm settings in a passed down flag object
        keeping the flag in a global (very bad)
        keeping it in a class var (almost as bad)

    Notice: that's one of the nice consequences of proceedable exceptions.

    [authors:]
        Stefan Vogel
        Claus Gittinger

    [see also:]
        Query Notification Exception    
"
! !


!UserConfirmation methodsFor:'accessing'!

aspect
    "the aspect the user is asked. Set this to a symbol. 
     It can be used by a exception handler"

    ^ parameter
!

aspect:aSymbol
    "the aspect the user is asked. Set this to a symbol. 
     It can be used by a exception handler"

    parameter := aSymbol
!

canCancel
    "answer true, if the user is allowed to press the cancel button
     in a confirmation dialog"

    ^ canCancel ? false
!

canCancel:something
    canCancel := something.
!

defaultAnswer
    "used to pass information from the raiser to the GUI dialog.
     Specifies, which answer of the three (yes/no/cancel) should be the return-key-default.
     If not specified, the cancel-key will be the default"

    ^ defaultAnswer
!

defaultAnswer:aBooleanOrNil
    "used to pass information from the raiser to the GUI dialog.
     Specifies, which answer of the three (yes/no/cancel) should be the return-key-default.
     If not specified, the cancel-key will be the default"

    defaultAnswer := aBooleanOrNil
! !


!UserConfirmation methodsFor:'default actions'!

defaultAction
    "Default action for confirmations: open a info box with description.
     If no GUI present, assume that the user pressed 'yes'"

    |text retVal retValText|

    text := self description.

    self hasDialog ifTrue:[
        self canCancel ifTrue:[
            ^ Dialog confirmWithCancel:text default:defaultAnswer
        ] ifFalse:[
            ^ Dialog confirm:text default:defaultAnswer
        ].
    ].

    "
     on systems without GUI, simply show
     the message on the Transcript and assume, that he would have typed 'yes' (or the defaultAnswer).
    "
    retVal := defaultAnswer notNil 
                ifTrue:[ defaultAnswer ]
                ifFalse:[ 
                    self canCancel 
                        ifTrue:[ nil ]
                        ifFalse:[ true ]].

    retValText := retVal isNil
                ifTrue:[ 'cancel' ]
                ifFalse:[
                    retVal 
                        ifTrue:[ 'yes' ] 
                        ifFalse:[ 'no' ]].

    Transcript 
        show:('User confirmation requested (assuming %1): ' bindWith:retValText); 
        showCR:text.
    ^ retVal

    "
      UserConfirmation raiseRequestErrorString:'Please click yes or no!!'
    "
! !


!UserConfirmation class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libbasic/UserConfirmation.st,v 1.7 2013-03-25 14:00:49 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/libbasic/UserConfirmation.st,v 1.7 2013-03-25 14:00:49 cg Exp $'
!

version_SVN
    ^ '$Id: UserConfirmation.st 10761 2012-01-19 11:46:00Z vranyj1 $'
! !