ComboListView.st
author Claus Gittinger <cg@exept.de>
Sun, 05 Jan 1997 01:22:04 +0100
changeset 272 6c6466cd4ea1
parent 270 35558a88d500
child 275 da88b7732dff
permissions -rw-r--r--
commentary

ComboView subclass:#ComboListView
	instanceVariableNames:'useIndex'
	classVariableNames:''
	poolDictionaries:''
	category:'Views-Interactors'
!

!ComboListView class methodsFor:'documentation'!

documentation
"
    A ComboListView combines an label with a drop down list of default inputs;
    choosing any from the pulled list sets the string in the label.

    This is the same as a PopUpList or SelectionInListView, bit looks different.

    Not yet finished.
"
!

examples
"
                                                                [exBegin]
     |top b|

     top := StandardSystemView new.
     top extent:(300 @ 200).

     b := ComboListView in:top.
     b origin:(0.0 @ 0.0) corner:(1.0 @ 0.0).
     b bottomInset:(b preferredExtent y negated).

     b list:#('hello' 'world' 'this' 'is' 'st/x').
     top open.
                                                                [exEnd]



  model operation:
                                                                [exBegin]
     |model top b|

     model := 'foo' asValue.

     top := StandardSystemView new.
     top extent:(300 @ 200).

     b := ComboListView in:top.
     b origin:(0.0 @ 0.0) corner:(1.0 @ 0.0).
     b bottomInset:(b preferredExtent y negated).

     b list:#('hello' 'world' 'this' 'is' 'st/x').
     b model:model.

     top openModal.
     Transcript showCR:('comboBox''s value: ' , model value).
                                                                [exEnd]


  in a dialog:
                                                                [exBegin]
     |model1 model2 dialog b|

     model1 := 'foo' asValue.
     model2 := 'bar' asValue.

     dialog := Dialog new.
     (dialog addTextLabel:'ComboList example:') adjust:#left.
     dialog addVerticalSpace.

     (b := dialog addComboListOn:model1 tabable:true).
     b list:#('fee' 'foe' 'foo').
     dialog addVerticalSpace.

     (b := dialog addComboListOn:model2 tabable:true).
     b list:#('bar' 'baz' 'baloo').
     dialog addVerticalSpace.

     dialog addOkButton.

     dialog open.

     Transcript showCR:('1st comboBox''s value: ' , model1 value).
     Transcript showCR:('2nd comboBox''s value: ' , model2 value).
                                                                [exEnd]
"
! !

!ComboListView methodsFor:'accessing-behavior'!

useIndex:aBoolean
    "specify, if the selected components value or its index in the
     list should be sent to the model. The default is its value."

    useIndex := aBoolean.

    "Created: 26.7.1996 / 17:44:18 / cg"
! !

!ComboListView methodsFor:'accessing-components'!

label 
    "return the label component"

    ^ field

    "Modified: 28.2.1996 / 15:10:50 / cg"
    "Created: 28.2.1996 / 15:13:51 / cg"
! !

!ComboListView methodsFor:'accessing-contents'!

contents:something
    "set the current value - either in the fields model
     or directly"

    |m|

    (m := field model) notNil ifTrue:[
        m value:something
    ] ifFalse:[
        field label:something
    ]

    "Created: 15.7.1996 / 13:16:49 / cg"
    "Modified: 5.1.1997 / 00:05:04 / cg"
! !

!ComboListView methodsFor:'initialization'!

initialize
    useIndex isNil ifTrue:[useIndex := false].
    super initialize.

    "Created: 26.7.1996 / 17:44:57 / cg"
!

initializeField
    field := Label in:self.
    field level:-1.
    field adjust:#left.

    "
     |b|

     b := ComboListView new.
     b list:#('hello' 'world' 'this' 'is' 'st/x').
     b open
    "

    "Created: 28.2.1996 / 15:13:46 / cg"
    "Modified: 28.2.1996 / 15:18:40 / cg"
! !

!ComboListView methodsFor:'private'!

getValueFromModel
    |val|

    model notNil ifTrue:[
        (model respondsTo:#selection) ifTrue:[
            "/ mhmh - looks like a selectionInList model
            useIndex ifTrue:[
                val := list at:(model selectionIndex)
            ] ifFalse:[
                val := (model selection)
            ]
        ] ifFalse:[
            "/ mhmh - looks like a valueHolder
            useIndex ifTrue:[
                val := list at:(model value)
            ] ifFalse:[
                val := model value
            ].
        ].
        self contents:val
    ].

    "Created: 15.7.1996 / 12:28:53 / cg"
    "Modified: 26.7.1996 / 18:07:04 / cg"
! !

!ComboListView methodsFor:'user interaction'!

entryChanged:index
    |what changeArg|

    what := list at:index.
    field label:what.

    model notNil ifTrue:[
        useIndex ifTrue:[
            changeArg := index
        ] ifFalse:[
            changeArg := what
        ].
        self sendChangeMessage:changeMsg with:changeArg
    ].
    pullDownButton turnOff.

    "Created: 28.2.1996 / 15:13:46 / cg"
    "Modified: 4.9.1996 / 22:38:57 / cg"
! !

!ComboListView class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libwidg2/ComboListView.st,v 1.9 1997-01-05 00:22:04 cg Exp $'
! !