OptionBox.st
author claus
Wed, 13 Oct 1993 02:04:14 +0100
changeset 3 9d7eefb5e69f
parent 0 e6a541c1c0eb
child 5 7b4fb1b170e5
permissions -rw-r--r--
(none)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
3
claus
parents: 0
diff changeset
     2
 COPYRIGHT (c) 1991-93 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
ModalBox subclass:#OptionBox
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:'formLabel textLabel buttons actions'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
         classVariableNames:'warnBitmap'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
         poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
         category:'Views-Interactors'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
OptionBox comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
3
claus
parents: 0
diff changeset
    22
COPYRIGHT (c) 1991-93 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
             All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
like a YesNoBox but with as many as you like buttons in it;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
will finally be a superclass of WarnBox and YesNoBox.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
3
claus
parents: 0
diff changeset
    28
$Header: /cvs/stx/stx/libwidg/OptionBox.st,v 1.2 1993-10-13 01:03:03 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
written Nov 91 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
!OptionBox class methodsFor:'instance creation'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
title:titleString numberOfOptions:nOptions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
    "create a new optionBox with title, aTitleString and nOptions options"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
    |box|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
    box := (self basicNew) numberOfOptions:nOptions.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
    box device:ModalDisplay.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
    box initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
    box title:titleString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
    ^ box
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
!OptionBox methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
title:aString numberOfOptions:nOptions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
    "set the title and number of options"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
    textLabel label:aString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
    textLabel resize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
    buttons grow:nOptions.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
    actions grow:nOptions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
title:aString
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
    "set the title"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
    textLabel label:aString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
    textLabel resize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
    self resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
numberOfOptions:nOptions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
    "set the number of options"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
    buttons := Array new:nOptions.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
    actions := Array new:nOptions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
buttonTitles:titles
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
    index := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
    titles do:[:aString |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
        (buttons at:index) label:aString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
        index := index + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
    self resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
actions:actionBlocks
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
    actions := actionBlocks
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
buttonTitles:titles actions:actionBlocks
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
    |index|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
    index := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
    titles do:[:aString |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
        (buttons at:index) label:aString.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
        index := index + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
    actions := actionBlocks.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
    self resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
numberOfOptions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
    "return the number of options"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
    ^ buttons size
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
!OptionBox methodsFor:'initializing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
    |nButt|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
    warnBitmap isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
        warnBitmap := Form fromFile:'Warning.xbm' resolution:100 on:device
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
    formLabel := Label form:warnBitmap in:self.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
    formLabel borderWidth:0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
    formLabel origin:(ViewSpacing @ ViewSpacing).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
    textLabel := Label label:'Warning' in:self.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
    textLabel borderWidth:0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
    textLabel origin:((ViewSpacing + formLabel width + ViewSpacing) @ ViewSpacing).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
    nButt := buttons size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    1 to:nButt do:[:b |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
        buttons at:b put:(Button label:'press'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
                                action:[(buttons at:b) turnOff.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
                                        self hide.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
                                        (actions at:b) notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
                                            (actions at:b) value
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
                                        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
                                       ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
                                    in:self).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
        (buttons at:b) origin:[( (b - 1) * ((width - ViewSpacing) // nButt) + (ViewSpacing // 2) )
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
                               @
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
                               (height - ViewSpacing - (buttons at:b) height)].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
        (buttons at:b) extent:[(width // nButt - ViewSpacing) @ (buttons at:b) height]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
!OptionBox methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
resize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
    "resize myself to make everything fit into myself"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
    |w w1 w2 h extra|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   149
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
    w1 := ViewSpacing + formLabel width + ViewSpacing + textLabel width + ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
    w2 := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
    buttons do:[:butt |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
        w2 := w2 + butt width "labelWidth".
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
        w2 := w2 + ViewSpacing
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
    w2 := w2 + (4 * ViewSpacing).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
    w := w1 max:w2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
    h := ViewSpacing
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
         + ((formLabel height) max:(textLabel height))
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
         + ViewSpacing + ViewSpacing
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
         + (buttons at:1) height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
         + ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
    extra := margin * 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
    super extent:(w + extra) @ (h + extra)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169