Workspace.st
author claus
Sat, 08 Jan 1994 18:31:31 +0100
changeset 23 69f1ba57f67a
parent 15 0dbce35d3c69
child 32 b6c23dfd5663
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
TextCollector subclass:#Workspace
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'doItAction 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
                              errorBox correctErrorBox
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
                              abortBlock codeStartPosition 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
                              errorFgColor errorBgColor'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
       classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
       category:'Interface-Workspace'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
Workspace comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
5
claus
parents: 3
diff changeset
    25
COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
             All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
a view for editable text which can evaluate expressions.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
instance variables:
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
doItAction      <Block>         block to evaluate for doIt
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
errorBox        <Box>           queryBox used in case of errors,
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
                                kept for fast pop-up
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
correctErrorBox <Box>           same for correctable errors
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
abortBlock      <Block>         internal use: to jump out of doIt
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
                                in case of abort from box
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
codeStartPosition               temporary
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
errorFgColor    <Color>         fg-color used when highlighting error 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
errorBgColor    <Color>         bg-Color used when highlighting error
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    43
$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.6 1994-01-08 17:31:31 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
written winter-89 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
!Workspace class methodsFor:'getting a System Workspace'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
start
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
    "launch a new workspace"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    52
    |scrollable scr topView workspace f|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
    topView := StandardSystemView label:'Workspace' minExtent:(100 @ 100).
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    55
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    56
    scrollable := true.
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    57
    scrollable ifTrue:[
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    58
        scr := ScrollableView for:self in:topView.
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    59
        scr origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    60
        workspace := scr scrolledView.
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    61
    ] ifFalse:[
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    62
        workspace := super origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:topView.
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    63
        workspace level:0.
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
    64
    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
    "adjust topViews extent"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
    f := workspace font.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
    topView extent:((f widthOf:'x') * 40) @ (f height * 10).
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    69
    topView open.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
    ^ topView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
    "Workspace start"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
!Workspace methodsFor:'initialize / release'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
    super initialize.
3
claus
parents: 0
diff changeset
    79
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
    doItAction := [:theCode |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
        Compiler evaluate:theCode notifying:self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
    errorFgColor := selectionFgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
    device hasColors ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
        errorBgColor := Color name:'Red' 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
        errorBgColor := selectionBgColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
initializeMiddleButtonMenu
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
    |labels|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
    labels := resources array:#(
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
    95
"
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
    96
                               'undo'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
    97
"
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
    98
                               'again'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
    99
                               '-'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   100
                               'copy'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   101
                               'cut'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   102
                               'paste'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   103
                               '-'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   104
                               'doIt'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   105
                               'printIt'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   106
                               'inspectIt'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   107
                               '-'
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
   108
                               'others'
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   109
                                ).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
    self middleButtonMenu:(PopUpMenu 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
                                labels:labels
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   113
                             selectors:#(
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   114
"
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   115
                                         undo
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   116
"
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   117
                                         again
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   118
                                         nil
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   119
                                         copySelection
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
                                         cut
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
                                         paste 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
                                         nil 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
                                         doIt 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
                                         printIt
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   125
                                         inspectIt
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   126
                                         nil
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   127
                                         others
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   128
                                        )
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
                                receiver:self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
                                     for:self).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   132
    middleButtonMenu subMenuAt:#others put:(PopUpMenu
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
   133
                                labels:(resources array:#(
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   134
                                         'search'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   135
                                         'goto'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   136
                                         '-'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   137
                                         'font'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   138
                                         '-'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   139
                                         'indent'
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   140
                                         '-'
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
   141
                                         'save as ...'
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   142
                                         'print'
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
   143
                                        ))
15
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   144
                              selectors:#(
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   145
                                          search
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   146
                                          gotoLine
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   147
                                          nil
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   148
                                          changeFont
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   149
                                          nil
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   150
                                          indent
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   151
                                          nil
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   152
                                          save
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   153
                                          print
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   154
                                         )
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   155
                                receiver:self
0dbce35d3c69 *** empty log message ***
claus
parents: 7
diff changeset
   156
                                     for:self).
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
destroy
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   160
    errorBox notNil ifTrue:[errorBox destroy. errorBox := nil].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   161
    correctErrorBox notNil ifTrue:[correctErrorBox destroy. correctErrorBox := nil].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
    super destroy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
!Workspace methodsFor:'selections'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
disableSelectionMenuEntries
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
    "disable relevant menu entries for a selection"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
    super disableSelectionMenuEntries.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
    middleButtonMenu disable:#doIt.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
    middleButtonMenu disable:#printIt.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   173
    middleButtonMenu disable:#inspectIt
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   174
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   175
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   176
enableSelectionMenuEntries
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   177
    "enable relevant menu entries for a selection"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   179
    super enableSelectionMenuEntries.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
    middleButtonMenu enable:#doIt.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   181
    middleButtonMenu enable:#printIt.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   182
    middleButtonMenu enable:#inspectIt
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   183
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
!Workspace methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   186
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
doItAction:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
    "define the action to be performed when 'doIt' is selected"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
    doItAction := aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   193
abortAction:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   194
    "define the action to be performed when an error occurs during
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   195
     evaluation and user selects 'abort' in ErrorBox;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   196
     (this will usually be a block long-returning back)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   197
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
    abortBlock := aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   199
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   200
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
!Workspace methodsFor:'error handling'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
error:aString position:relPos to:relEndPos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
    "compiler notifys us of an error; hilight the error (relPos to relEndPos) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
     and show a Box asking for continue/abort"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
    |absPosition fg bg|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
    "change color of selection"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
    fg := selectionFgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
    bg := selectionBgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
    selectionBgColor := errorBgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
    selectionFgColor := errorFgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
    "select the text - relEndPos may be nil in which case the whole line is selected"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
    codeStartPosition isNil ifTrue:[codeStartPosition := 1].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
    absPosition := codeStartPosition + relPos - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
    relEndPos isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
        self selectLineWhereCharacterPosition:absPosition
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   222
        self selectFromCharacterPosition:absPosition to:(codeStartPosition + relEndPos - 1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
    self makeSelectionVisible.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
    self hideCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
    "start Dialog - make certain, that dialog-actions clean up correctly"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
    device synchronizeOutput.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
    errorBox isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
        errorBox := OptionBox title:aString numberOfOptions:2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
        errorBox buttonTitles:#('abort' 'continue')
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
    errorBox actions:(Array with:[selectionFgColor := fg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
                                  selectionBgColor := bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
                                  self showCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   236
                                  abortBlock value.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
                                  ^ false]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
                            with:[selectionFgColor := fg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
                                  selectionBgColor := bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
                                  self showCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
                                  self unselect.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
                                  ^ false]).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
    (errorBox title:aString) showAtPointer
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
warning:aString position:relPos to:relEndPos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
    "compiler notifys us of a  warning - same behavior as error"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
    self error:aString position:relPos to:relEndPos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
correctableError:aString position:relPos to:relEndPos
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
    "compiler notifys us of a correctable error;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
     hilight the error (relPos to relEndPos) and show a Box asking for continue/correct/abort;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
     this method should return true to the compiler if user wants the error
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
     to be corrected; false otherwise"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
    |absPosition fg bg|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
    "change selection color"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
    fg := selectionFgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
    bg := selectionBgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
    selectionBgColor := errorBgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
    selectionFgColor := errorFgColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
    "select the error"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
    codeStartPosition isNil ifTrue:[codeStartPosition := 1].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
    absPosition := codeStartPosition + relPos - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
    relEndPos isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
        self selectLineWhereCharacterPosition:absPosition
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
        self selectFromCharacterPosition:absPosition to:(codeStartPosition + relEndPos - 1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
    self makeSelectionVisible.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
    self hideCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
    "start dialog - make certain cleanup is done"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
    device synchronizeOutput.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
    correctErrorBox isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
        correctErrorBox := OptionBox title:aString numberOfOptions:3.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
        correctErrorBox buttonTitles:#('abort' 'correct' 'continue')
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
    correctErrorBox actions:(Array with:[selectionFgColor := fg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
                                         selectionBgColor := bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
                                         self showCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
                                         abortBlock value.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
                                         ^ false]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
                                   with:[selectionFgColor := fg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
                                         selectionBgColor := bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
                                         self showCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
                                         ^ true]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
                                   with:[selectionFgColor := fg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
                                         selectionBgColor := bg.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
                                         self showCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
                                         self unselect. 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
                                         ^ false]).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
    (correctErrorBox title:aString) showAtPointer
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
!Workspace methodsFor:'execution'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
doItWithValueDo:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
    "helper for doIt, printIt and inspectIt. Evaluate the selection and,
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
     if all went well, evaluate the argument, aBlock with the value."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
    |code value selLine selCol endLine endCol|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
    code := self selection.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
    code notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
        codeStartPosition := self characterPositionOfSelection.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
        selLine := selectionStartLine.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
        selCol := selectionStartCol.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
        endLine := selectionEndLine.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
        endCol := selectionEndCol.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
        self cursor:Cursor execute.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
        abortBlock := [self cursor:Cursor normal.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
                       self selectFromLine:selLine col:selCol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
                                    toLine:endLine col:endCol.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
                       abortBlock := nil.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
                       ^ nil].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
        [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
            value := doItAction value:(code asString)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
        ] valueNowOrOnUnwindDo:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
            self cursor:Cursor normal.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
            self selectFromLine:selLine col:selCol toLine:endLine col:endCol.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
            abortBlock := nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
        aBlock value:value
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
doIt
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   335
    "user selected 'doIt' from menu; show a wait-cursor, evaluate the code
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
     and finally restore cursor; return result of evaluation"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
    self doItWithValueDo:[:result | ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
inspectIt
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
    "user selected 'inspectIt' from menu; use doIt to evaluate the code
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
     and start an inspector on the result"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
    self doItWithValueDo:[:result | result inspect]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
printIt
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
    "user selected 'printIt' from menu; use doIt to evaluate the code
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   350
     and insert result of evaluation into my text"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   351
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
    self doItWithValueDo:[:result | 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   353
        self cursorLine:selectionEndLine col:(selectionEndCol + 1).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
        self insertSelectedStringAtCursor:(result printString)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   358
!Workspace methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   359
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   360
keyPress:key x:x y:y
23
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
   361
    (key == #DoIt) ifTrue:[^ self doIt].
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
   362
    (key == #InspectIt) ifTrue:[^ self inspectIt].
69f1ba57f67a *** empty log message ***
claus
parents: 15
diff changeset
   363
    (key == #PrintIt) ifTrue:[^ self printIt].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
    super keyPress:key x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
! !