ComboBoxView.st
author Claus Gittinger <cg@exept.de>
Wed, 26 Feb 1997 19:47:01 +0100
changeset 305 7dd100869f7b
parent 301 edddd206a2e5
child 311 d790d0524822
permissions -rw-r--r--
cleaned up model interface

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

!ComboBoxView class methodsFor:'documentation'!

documentation
"
    A ComboBoxView combines an inputField with a drop down list of default inputs;
    choosing any from the pulled list presets the string in the field.

    In contrast to a PopUpList or ComboListView, the string can still be edited -
    the list is actually only a set of values for the convenience of the user.

    Not yet finished - it may need more protocol.

    [author:]
        Claus Gittinger

    [see also:]
        ComboView
        PopUpList SelectionInListView
        ComboListView
        PullDownMenu Label EntryField
"
!

examples
"
  non MVC operation:
                                                                        [exBegin]
     |top b|

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

     b := ComboBoxView 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]



  with action:
                                                                        [exBegin]
     |top b|

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

     b := ComboBoxView 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 action:[:entry | Transcript showCR:entry].
     top open.
                                                                        [exEnd]



  model operation:
                                                                        [exBegin]
     |model top b|

     model := 'foo' asValue.

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

     b := ComboBoxView 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:'ComboBox example:') adjust:#left.
     dialog addVerticalSpace.

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

     (b := dialog addComboBoxOn: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]
"
! !

!ComboBoxView methodsFor:'accessing-components'!

editor
    "return the inputField component"

    ^ field

    "Created: 9.2.1996 / 20:18:03 / cg"
    "Modified: 28.2.1996 / 15:10:50 / cg"
! !

!ComboBoxView methodsFor:'accessing-mvc'!

accept
    field accept

    "Created: 4.3.1996 / 12:15:18 / cg"
!

model
    ^ field model

    "Created: 9.2.1996 / 00:50:18 / cg"
    "Modified: 28.2.1996 / 15:10:59 / cg"
!

model:aModel
    field model:aModel.

    "Created: 9.2.1996 / 00:50:12 / cg"
    "Modified: 28.2.1996 / 15:11:03 / cg"
! !

!ComboBoxView methodsFor:'initialization'!

initializeField
    field := EditField in:self.
    field model:(ValueHolder newString).
    field acceptOnLostFocus:true.
    field acceptOnLeave:true.
    field leaveAction:[:key | self fieldLeft].

    "
     all of my input goes to the enterfield
    "
    self delegate:(KeyboardForwarder toView:field).

    "
     |b|

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

    "Created: 28.2.1996 / 15:07:51 / cg"
    "Modified: 26.2.1997 / 19:44:13 / cg"
! !

!ComboBoxView methodsFor:'queries'!

specClass
    self class == ComboBoxView ifTrue:[
        ^ ComboBoxSpec
    ].
    ^ super specClass

! !

!ComboBoxView methodsFor:'user interaction'!

entryChanged:index
    |what|

    what := list at:index.
    field contents:what.
    field accept.
    pullDownButton turnOff.

    action notNil ifTrue:[
        action value:what
    ].

    "Created: 9.2.1996 / 01:06:01 / cg"
    "Modified: 26.2.1997 / 19:38:24 / cg"
!

fieldLeft
    field accept.

    action notNil ifTrue:[
        action value:(field contents)
    ].

    "Modified: 26.2.1997 / 19:38:24 / cg"
    "Created: 26.2.1997 / 19:42:30 / cg"
! !

!ComboBoxView class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libwidg2/ComboBoxView.st,v 1.14 1997-02-26 18:47:01 cg Exp $'
! !