QuerySignal.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18091 abbcac10730e
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     1
"
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     3
	      All Rights Reserved
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     4
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    11
"
5871
cf03b06e442e Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5227
diff changeset
    12
"{ Package: 'stx:libbasic' }"
cf03b06e442e Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5227
diff changeset
    13
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    14
Signal subclass:#QuerySignal
2900
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    15
	instanceVariableNames:'defaultAnswer hasDefault'
1248
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    16
	classVariableNames:''
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    17
	poolDictionaries:''
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    18
	category:'Kernel-Exceptions'
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    19
!
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    20
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    21
!QuerySignal class methodsFor:'documentation'!
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    22
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    23
copyright
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    24
"
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    25
 COPYRIGHT (c) 1995 by Claus Gittinger
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    26
	      All Rights Reserved
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    27
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    28
 This software is furnished under a license and may be used
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    33
 hereby transferred.
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    34
"
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    35
!
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    36
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    37
documentation
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    38
"
11202
Claus Gittinger <cg@exept.de>
parents: 8702
diff changeset
    39
    Notice: 
Claus Gittinger <cg@exept.de>
parents: 8702
diff changeset
    40
        Signals have been replaced by class based Exceptions.
Claus Gittinger <cg@exept.de>
parents: 8702
diff changeset
    41
        They are provided for compatibility, but new code should use Exceptions
Claus Gittinger <cg@exept.de>
parents: 8702
diff changeset
    42
        (in this case: Query)
Claus Gittinger <cg@exept.de>
parents: 8702
diff changeset
    43
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    44
    QuerySignals are like signals, except that they are not accepted
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    45
    by handlers for ordinary signals.
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
    46
    I.e. a signal handler for a normal signal will not handle a query
580
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    47
    signal. Thus, these bypass anySignal handlers.
2900
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    48
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    49
    However, if unhandled, no error is raised, instead they are simply ignored
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    50
    and nil is returned from the raise
1248
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    51
    (as opposed to normal signals, which raise an unhandled signal exception).
1363
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
    52
    QuerySignals are also ignored, if a handler exists, but rejects.
1248
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    53
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    54
    Their main use is to implement upQueries via signals, that work even 
1363
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
    55
    if intermediate errorSignal handlers are present 
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
    56
    (which is not possible with ordinary signals, since errorSignal handlers 
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
    57
     would catch those signals).
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
    58
1248
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    59
    Code deep down in the calling hierarchy can post such an up-Query to ask
2900
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    60
    for some information or to pass some information upward. 
580
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
    61
1248
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    62
    For example, the activityNotification mechanism is built on top of this:
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    63
    everyone can send such a notification which is either handled by someone
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    64
    up in the hierarchy (to show it in the windows info area) or simply
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    65
    ignored.
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    66
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    67
    Using QuerySignals for this (instead of regular Signals) helps in documenting
04639edf1064 commentary
Claus Gittinger <cg@exept.de>
parents: 691
diff changeset
    68
    the intended usage of those signals.
1275
2079f4776628 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1249
diff changeset
    69
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    70
    Another use of querySignals is to provide additional information to
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    71
    deeply nested methods, which is only required in the uncommon case;
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    72
    or if another parameter is required by some method, which was not planned
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    73
    for in the beginning, and you do not want to hand this value (via an
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    74
    additional argument) through all intermediate levels.
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    75
    A highly elegant solution to this problem is to provide a handler somewhere
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    76
    at the top of the calling hierarchy, and raise an upQuery from whereever
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    77
    that value is required.
2900
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    78
    A concrete application can be found in the windowGroup-lastEvent
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    79
    queries. If anyone is interested in the windowEvent which was responible for 
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    80
    being invoked, all he needs to do is to raise the lastEventQuerySignal, 
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    81
    which returns that event.
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    82
    No intermediate methods are required to know anything about that.
2900
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    83
    Another example is found in the way Metaclass asks for the nameSpace
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    84
    when new classes are to be installed. A Browser may simply answer such
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    85
    a query and provide a namespace (no need to pass that information down
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
    86
    the calling chain).
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    87
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    88
    A final note (to C++ and Java fans):
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    89
        such upQueries are only possible, if the exception handling mechanism
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    90
        does not automatically unwind the stack for the handler invokation.
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    91
        Since the handler must be able to proceed the execution and return
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    92
        a value to the raiser ....
11202
Claus Gittinger <cg@exept.de>
parents: 8702
diff changeset
    93
        ... another demonstration of why ST's exception mechanisms are superior.
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
    94
1275
2079f4776628 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1249
diff changeset
    95
    [see also:]
2079f4776628 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1249
diff changeset
    96
        Signal SignalSet Exception
2079f4776628 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1249
diff changeset
    97
        Object
1363
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
    98
        (``Exception handling and signals'': programming/exceptions.html)
1292
89497fff7f87 documentation
Claus Gittinger <cg@exept.de>
parents: 1275
diff changeset
    99
89497fff7f87 documentation
Claus Gittinger <cg@exept.de>
parents: 1275
diff changeset
   100
    [author:]
89497fff7f87 documentation
Claus Gittinger <cg@exept.de>
parents: 1275
diff changeset
   101
        Claus Gittinger
580
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   102
"
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   103
!
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   104
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   105
examples 
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   106
"
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   107
  an up-query from a deeply nested operation to a higher level:
1316
248a8cb2ae3b examples
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
   108
                                                                        [exBegin]
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   109
    |querySignal zero|
580
03852d320a48 commentary
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   110
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   111
    zero := 0.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   112
    querySignal := QuerySignal new.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   113
    querySignal handle:[:ex |
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   114
        Transcript showCR:'query'.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   115
        ex proceedWith:true
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   116
    ] do:[
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   117
        'nesting'.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   118
        [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   119
            [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   120
                Object errorSignal handle:[:ex |
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   121
                    Transcript showCR:'some error: ' , ex errorString.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   122
                    ex proceed
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   123
                ] do:[
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   124
                    [
2689
ada9b102abcf typo fix
Claus Gittinger <cg@exept.de>
parents: 2037
diff changeset
   125
                        1 // zero.  'an error which is caught in the handler'.
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   126
                        (querySignal query) == true ifTrue:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   127
                            Transcript showCR:'query says: ok'.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   128
                        ] ifFalse:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   129
                            Transcript showCR:'query says: no'
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   130
                        ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   131
                    ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   132
                ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   133
            ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   134
        ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   135
    ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   136
                                                                        [exEnd]
1534
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   137
  for lazy typists, a more compact interface is also provided
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   138
  (which is also easier to read):
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   139
                                                                        [exBegin]
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   140
    |querySignal|
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   141
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   142
    querySignal := QuerySignal new.
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   143
    querySignal answer:true do:[
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   144
        'nesting'.
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   145
        [
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   146
            [
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   147
                (querySignal query) == true ifTrue:[
1534
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   148
                    Transcript showCR:'query says: ok'.
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   149
                ] ifFalse:[
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   150
                    Transcript showCR:'query says: no'
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   151
                ]
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   152
            ] value
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   153
        ] value
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   154
    ]
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   155
                                                                        [exEnd]
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   156
  an up-query from a deeply nested operation, for which there
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   157
  is no handler:
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   158
  (notice, this would not work with normal signals, which would raise
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   159
   another unhandled exception-exception;
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   160
   also notice the == check #raise's return value being true,
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   161
   instead of a simple ifTrue; this handles a nil-value from
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   162
   the unhandled query)
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   163
                                                                        [exBegin]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   164
    |querySignal zero|
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   165
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   166
    zero := 0.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   167
    querySignal := QuerySignal new.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   168
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   169
    [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   170
        'nesting'.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   171
        [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   172
            [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   173
                Object errorSignal handle:[:ex |
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   174
                    Transcript showCR:'some error: ' , ex errorString.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   175
                    ex proceed
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   176
                ] do:[
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   177
                    [
2689
ada9b102abcf typo fix
Claus Gittinger <cg@exept.de>
parents: 2037
diff changeset
   178
                        1 // zero.  'an error which is caught in the handler'.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   179
                        (querySignal raise) == true ifTrue:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   180
                            Transcript showCR:'query says: ok'.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   181
                        ] ifFalse:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   182
                            Transcript showCR:'query says: no'
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   183
                        ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   184
                    ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   185
                ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   186
            ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   187
        ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   188
    ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   189
                                                                         [exEnd]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   190
  counter-example, just to show that things would not work this way
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   191
  with regular signals:
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   192
                                                                        [exBegin]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   193
    |signal|
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   194
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   195
    signal := Signal new.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   196
    'nesting deeply'.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   197
    [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   198
        [
1316
248a8cb2ae3b examples
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
   199
            [
248a8cb2ae3b examples
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
   200
                [
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   201
                    [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   202
                        (signal raise) == true ifTrue:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   203
                            Transcript showCR:'query says: ok'.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   204
                        ] ifFalse:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   205
                            Transcript showCR:'query says: no'
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   206
                        ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   207
                    ] value
1316
248a8cb2ae3b examples
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
   208
                ] value
248a8cb2ae3b examples
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
   209
            ] value
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   210
        ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   211
    ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   212
                                                                         [exEnd]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   213
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   214
   except, by handling the unhandled exception
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   215
   (but we think, that querySignals are easier to use and
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   216
    better document the intent):
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   217
                                                                        [exBegin]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   218
    |signal|
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   219
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   220
    signal := Signal new.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   221
    'nesting deeply'.
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   222
    [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   223
        [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   224
            [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   225
                [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   226
                    [
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   227
                        Signal noHandlerSignal handle:[:ex |
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   228
                            ex proceedWith:nil
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   229
                        ] do:[
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   230
                            (signal raise) == true ifTrue:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   231
                                Transcript showCR:'query says: ok'.
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   232
                            ] ifFalse:[
1422
9a0b792f2953 showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   233
                                Transcript showCR:'query says: no'
1379
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   234
                            ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   235
                        ]
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   236
                    ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   237
                ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   238
            ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   239
        ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   240
    ] value
bde210aaccc2 examples
Claus Gittinger <cg@exept.de>
parents: 1363
diff changeset
   241
                                                                         [exEnd]
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   242
"
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   243
! !
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   244
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   245
!QuerySignal methodsFor:'answering queries'!
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   246
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   247
answer:someAnswer do:aBlock
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   248
    "evaluate the argument, aBlock.
12061
3fbbdc149c45 changed: #answer:do:
Claus Gittinger <cg@exept.de>
parents: 11202
diff changeset
   249
     If the receiver is queried during evaluation, answer and proceed with someAnswer.
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   250
     This is a wrapper for #handle:do: for lazy typists; no new functionality."
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   251
8697
05013adab7bb Make #handle - contexts also #return-able
Stefan Vogel <sv@exept.de>
parents: 8693
diff changeset
   252
    <context: #return>
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   253
    <exception: #handle>
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   254
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   255
    "/ thisContext markForHandle. -- same as above pragma
5227
73a2dc34cb42 #answer:do: now returns the evaluated blocks value
Claus Gittinger <cg@exept.de>
parents: 4908
diff changeset
   256
    ^ aBlock value.  "the real logic is in Exception>>doRaise"
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   257
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   258
    "
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   259
     |q|
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   260
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   261
     q := QuerySignal new.
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   262
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   263
     q answer:true do:[
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   264
        Transcript showCR:'query answers: ' , (q query printString).
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   265
     ]
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   266
    "
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   267
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   268
    "
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   269
     |q|
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   270
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   271
     q := QuerySignal new.
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   272
4491
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   273
     q answer:false do:[
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   274
        Transcript showCR:'first query answers: ' , (q query printString).
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   275
        q answer:true do:[
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   276
            Transcript showCR:'second query answers: ' , (q query printString).
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   277
        ]
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   278
     ]
5041cae5651c use new pragma to flag exception frames.
Claus Gittinger <cg@exept.de>
parents: 4466
diff changeset
   279
    "
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   280
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   281
    "Created: / 10.7.1996 / 15:08:20 / cg"
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   282
    "Modified: / 14.10.1996 / 16:59:18 / cg"
4464
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   283
    "Modified: / 25.7.1999 / 23:34:02 / stefan"
2893
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   284
! !
8ba406da6b22 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2729
diff changeset
   285
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   286
!QuerySignal methodsFor:'exception creation'!
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   287
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   288
newException
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   289
    "{ Pragma: +inlineNew }"
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   290
    "answer a new exception object for this signal"
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   291
15238
5aa8f2cdad24 class: QuerySignal
Stefan Vogel <sv@exept.de>
parents: 15115
diff changeset
   292
    ^ Query basicNew creator:self.
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   293
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   294
    "
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   295
      |querySignal|
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   296
      querySignal := QuerySignal new.
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   297
      querySignal handle:[:ex| self halt] do:[querySignal raiseRequest].
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   298
    "
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   299
! !
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   300
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   301
!QuerySignal methodsFor:'initialization'!
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   302
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   303
defaultAnswer:someValue
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   304
    "define the queries defaultAnswer to be someValue.
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   305
     This is the same as defining an appropriate handlerBlock."
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   306
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   307
    |handler|
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   308
2900
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
   309
    defaultAnswer := someValue.
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
   310
    hasDefault := true.
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
   311
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   312
    "/ avoid creating a fullBlock, in the most common cases
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   313
    "/ therefore, do not replace the code below by
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   314
    "/     handler := [:ex | ex proceedWith:someValue]
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   315
    "/ although it is semantically equivalent.
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   316
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   317
    someValue == true ifTrue:[
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   318
        handler := [:ex | ex proceedWith:true]
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   319
    ] ifFalse:[
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   320
        someValue == false ifTrue:[
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   321
            handler := [:ex | ex proceedWith:false]
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   322
        ] ifFalse:[
2900
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
   323
            someValue isNil ifTrue:[
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
   324
                handler := [:ex | ex proceedWith:nil]
2153bcddc299 faster return of defaultValue
Claus Gittinger <cg@exept.de>
parents: 2893
diff changeset
   325
            ] ifFalse:[
6790
34f661b45d13 allow for a block to be used as defaultValue
penk
parents: 6265
diff changeset
   326
                handler := [:ex | ex proceedWith:someValue value].
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   327
            ]
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   328
        ]
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   329
    ].
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   330
    self handlerBlock:handler.
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   331
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   332
    "
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   333
     QuerySignal new query
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   334
     (QuerySignal new defaultAnswer:true) query 
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   335
     (QuerySignal new defaultAnswer:false) query
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   336
    "
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   337
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   338
    "
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   339
     |sig rslt|
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   340
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   341
     sig := QuerySignal new.
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   342
     sig defaultAnswer:false.
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   343
     rslt := sig query.
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   344
     Transcript showCR:rslt.
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   345
    "
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   346
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   347
    "
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   348
     |sig rslt|
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   349
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   350
     sig := QuerySignal new.
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   351
     sig defaultAnswer:false.
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   352
     sig answer:true 
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   353
     do:[
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   354
         rslt := sig query
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   355
     ].
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   356
     Transcript showCR:rslt.
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   357
    "
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   358
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   359
    "Modified: / 3.1.1997 / 15:14:40 / cg"
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   360
    "Modified: / 2.3.1998 / 10:42:14 / stefan"
2037
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   361
! !
d5644b390755 added #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 1954
diff changeset
   362
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   363
!QuerySignal methodsFor:'queries'!
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   364
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   365
accepts:aSignal
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   366
    "return true, if the receiver accepts the argument, aSignal.
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   367
     (i.e. the receiver is aSignal or a parent of it). False otherwise."
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   368
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   369
    |s|
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   370
4527
2ddbe34bab87 Make error classes public.
Stefan Vogel <sv@exept.de>
parents: 4514
diff changeset
   371
    self == aSignal ifTrue:[^ true].
421
claus
parents: 420
diff changeset
   372
    aSignal isQuerySignal ifFalse:[^ false].
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   373
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   374
    s := aSignal parent.
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   375
    [s notNil] whileTrue:[
4061
ef62e88fd0ac Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3581
diff changeset
   376
        self == s ifTrue:[^ true].
ef62e88fd0ac Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3581
diff changeset
   377
        s := s parent
420
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   378
    ].
081f7b2bb3b3 Initial revision
claus
parents:
diff changeset
   379
    ^ false
4061
ef62e88fd0ac Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3581
diff changeset
   380
4438
0b01443d07c1 Add proceedability stuff.
Stefan Vogel <sv@exept.de>
parents: 4061
diff changeset
   381
    "Modified: / 22.3.1999 / 12:45:32 / stefan"
691
55730898da50 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 580
diff changeset
   382
!
55730898da50 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 580
diff changeset
   383
13530
3d78beae46f2 added: #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 12061
diff changeset
   384
defaultAnswer
3d78beae46f2 added: #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 12061
diff changeset
   385
    ^ defaultAnswer
3d78beae46f2 added: #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 12061
diff changeset
   386
3d78beae46f2 added: #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 12061
diff changeset
   387
    "Created: / 29-07-2011 / 19:58:58 / cg"
3d78beae46f2 added: #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 12061
diff changeset
   388
!
3d78beae46f2 added: #defaultAnswer
Claus Gittinger <cg@exept.de>
parents: 12061
diff changeset
   389
4464
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   390
handlerForSignal:signal context:theContext originator:originator
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   391
    "answer the handler block for the signal from originator.
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   392
     The block is retrieved from aContext.
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   393
     Answer nil if the signal is not handled"
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   394
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   395
    |arg|
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   396
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   397
    theContext selector == #answer:do: ifTrue:[
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   398
        (self == signal or:[self accepts:signal]) ifTrue:[
4464
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   399
            arg := theContext argAt:1.
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   400
            ^ [:ex| ex proceedWith:arg].
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   401
        ]
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   402
    ] ifFalse:[
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   403
        ^ super handlerForSignal:signal context:theContext originator:originator.
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   404
    ].
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   405
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   406
    ^ nil
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   407
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   408
    "Created: / 25.7.1999 / 23:33:05 / stefan"
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   409
!
cec93c942c14 Use context flag for exception handling instead of searching for
Stefan Vogel <sv@exept.de>
parents: 4442
diff changeset
   410
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   411
handles:anException
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   412
    "return true, if the receiver handles the argument, anException.
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   413
     (i.e. the receiver is anExceptions signal or a parent of it)"
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   414
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   415
    |signal|
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   416
15115
1d2e57f44876 use #creator instead of #signal
Claus Gittinger <cg@exept.de>
parents: 13530
diff changeset
   417
    signal := anException creator.
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   418
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   419
    self == signal ifTrue:[^ true].               "quick check"
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   420
    anException isNotification ifFalse:[^ false]. "speed up non-queries by not traversing the parent chain"
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   421
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   422
    [(signal := signal parent) notNil] whileTrue:[
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   423
        self == signal ifTrue:[^ true].
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   424
    ].
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   425
    ^ false
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   426
!
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   427
691
55730898da50 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 580
diff changeset
   428
isQuerySignal
1249
2d5d0edd3359 commentary
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
   429
    "return true, if this is a querySignal - always return true here"
2d5d0edd3359 commentary
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
   430
691
55730898da50 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 580
diff changeset
   431
    ^ true
1249
2d5d0edd3359 commentary
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
   432
2d5d0edd3359 commentary
Claus Gittinger <cg@exept.de>
parents: 1248
diff changeset
   433
    "Modified: 22.4.1996 / 13:45:10 / cg"
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   434
! !
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   435
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   436
!QuerySignal methodsFor:'raising'!
1534
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   437
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   438
query
15679
1b07a85590a2 class: QuerySignal
Claus Gittinger <cg@exept.de>
parents: 15238
diff changeset
   439
    "raise the query - return the handler's value, or the default
4908
da25af8cd02a added #queryWith:
Claus Gittinger <cg@exept.de>
parents: 4527
diff changeset
   440
     value, if there is no handler."
1534
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   441
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   442
    ^ self raiseRequest
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   443
!
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   444
4908
da25af8cd02a added #queryWith:
Claus Gittinger <cg@exept.de>
parents: 4527
diff changeset
   445
queryWith:aParameter
da25af8cd02a added #queryWith:
Claus Gittinger <cg@exept.de>
parents: 4527
diff changeset
   446
    "raise the query passing a parameter 
15679
1b07a85590a2 class: QuerySignal
Claus Gittinger <cg@exept.de>
parents: 15238
diff changeset
   447
     - return the handler's value, or the default value, if there is no handler."
4908
da25af8cd02a added #queryWith:
Claus Gittinger <cg@exept.de>
parents: 4527
diff changeset
   448
da25af8cd02a added #queryWith:
Claus Gittinger <cg@exept.de>
parents: 4527
diff changeset
   449
    ^ self raiseRequestWith:aParameter
da25af8cd02a added #queryWith:
Claus Gittinger <cg@exept.de>
parents: 4527
diff changeset
   450
!
da25af8cd02a added #queryWith:
Claus Gittinger <cg@exept.de>
parents: 4527
diff changeset
   451
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   452
raise
4061
ef62e88fd0ac Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3581
diff changeset
   453
    "QuerySignals are proceedable by definition,
ef62e88fd0ac Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3581
diff changeset
   454
     so they should be raised with #query or #raiseRequest"
1534
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   455
5871
cf03b06e442e Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5227
diff changeset
   456
    <resource:#obsolete>
cf03b06e442e Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5227
diff changeset
   457
4061
ef62e88fd0ac Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3581
diff changeset
   458
    self obsoleteMethodWarning:'use #query or #raiseRequest'.    
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   459
    ^ self raiseRequest
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   460
4061
ef62e88fd0ac Use #query instead of #raise when invoking QuerySignals
Stefan Vogel <sv@exept.de>
parents: 3581
diff changeset
   461
    "Modified: / 18.3.1999 / 18:33:57 / stefan"
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   462
!
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   463
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   464
raiseRequest
15679
1b07a85590a2 class: QuerySignal
Claus Gittinger <cg@exept.de>
parents: 15238
diff changeset
   465
    "raise the query - return the handler's value, or the default
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   466
     value, if there is no handler.
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   467
     Invoking the handler is exactly the functionality of Signal>>raiseRequest,
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   468
     but we can do it faster here, by avoiding the creation of a full-blown
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   469
     exception object."
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   470
5935
f7e334a3fdbb chech exception/signal against nil, to avoid recursive
Claus Gittinger <cg@exept.de>
parents: 5871
diff changeset
   471
    |con sel sig|
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   472
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   473
    con := Context findFirstSpecialHandle:true raise:false.
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   474
    [con notNil] whileTrue:[
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   475
        sel := con selector.
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   476
        sel == #answer:do: ifTrue:[
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   477
            sig := con receiver.
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   478
            sig == self ifTrue:[
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   479
                ^ con argAt:1
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   480
            ].
5935
f7e334a3fdbb chech exception/signal against nil, to avoid recursive
Claus Gittinger <cg@exept.de>
parents: 5871
diff changeset
   481
            sig isNil ifTrue:[
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   482
                self error:'nil receiver in #answer:do: - send'.
5935
f7e334a3fdbb chech exception/signal against nil, to avoid recursive
Claus Gittinger <cg@exept.de>
parents: 5871
diff changeset
   483
            ].
f7e334a3fdbb chech exception/signal against nil, to avoid recursive
Claus Gittinger <cg@exept.de>
parents: 5871
diff changeset
   484
            (sig accepts:self) ifTrue:[
8693
e9543a43bb71 When sending #query do a shortcut for #answer:do: - contexts if the
Stefan Vogel <sv@exept.de>
parents: 8686
diff changeset
   485
                ^ con argAt:1
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   486
            ].
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   487
        ] ifFalse:[
8686
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   488
            (sel ~~ #handle:do:
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   489
             or:[(sig := con receiver) == self
708fa53592f6 QuerySignal generates Notifications instead of Exceptions.
Stefan Vogel <sv@exept.de>
parents: 6790
diff changeset
   490
             or:[sig accepts:self]]) ifTrue:[
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   491
                ^ super raiseRequest
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   492
            ].
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   493
        ].
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   494
        con := con findSpecialHandle:true raise:false.
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   495
    ].
3307
08ad28464911 Use #raiseRequest to invoke the (inherently) proceedable QuerySignal.
Stefan Vogel <sv@exept.de>
parents: 2900
diff changeset
   496
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   497
    "/ no handler found - return the default value
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   498
    hasDefault == true ifTrue:[
6790
34f661b45d13 allow for a block to be used as defaultValue
penk
parents: 6265
diff changeset
   499
        ^ defaultAnswer value
4514
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   500
    ].
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   501
    handlerBlock isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   502
        ^ nil
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   503
    ].
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   504
    ^ super raiseRequest
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   505
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   506
    "Modified: / 15.6.1998 / 21:27:37 / cg"
Claus Gittinger <cg@exept.de>
parents: 4494
diff changeset
   507
    "Modified: / 25.7.1999 / 23:35:11 / stefan"
1534
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   508
! !
3aac2f9ef96c added #answer:do: - easier to read
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
   509
1954
05b137a75c75 commentary
Claus Gittinger <cg@exept.de>
parents: 1734
diff changeset
   510
!QuerySignal class methodsFor:'documentation'!
691
55730898da50 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 580
diff changeset
   511
55730898da50 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 580
diff changeset
   512
version
15679
1b07a85590a2 class: QuerySignal
Claus Gittinger <cg@exept.de>
parents: 15238
diff changeset
   513
    ^ '$Header: /cvs/stx/stx/libbasic/QuerySignal.st,v 1.48 2013-08-22 13:01:24 cg Exp $'
12061
3fbbdc149c45 changed: #answer:do:
Claus Gittinger <cg@exept.de>
parents: 11202
diff changeset
   514
!
3fbbdc149c45 changed: #answer:do:
Claus Gittinger <cg@exept.de>
parents: 11202
diff changeset
   515
3fbbdc149c45 changed: #answer:do:
Claus Gittinger <cg@exept.de>
parents: 11202
diff changeset
   516
version_CVS
15679
1b07a85590a2 class: QuerySignal
Claus Gittinger <cg@exept.de>
parents: 15238
diff changeset
   517
    ^ '$Header: /cvs/stx/stx/libbasic/QuerySignal.st,v 1.48 2013-08-22 13:01:24 cg Exp $'
691
55730898da50 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 580
diff changeset
   518
! !
15115
1d2e57f44876 use #creator instead of #signal
Claus Gittinger <cg@exept.de>
parents: 13530
diff changeset
   519