DataSetView.st
author Claus Gittinger <cg@exept.de>
Sun, 29 Aug 1999 18:56:13 +0200
changeset 1495 edd56c071260
parent 1487 fd003e2156cc
child 2090 af478f964ac0
permissions -rw-r--r--
update examples

"
 COPYRIGHT (c) 1997 by Claus Gittinger / eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"




ScrollableView subclass:#DataSetView
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Views-DataSet'
!

!DataSetView class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1997 by Claus Gittinger / eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"



!

documentation
"
    This class implements a selection list view based on rows and columns.
    It allows for the dynamic editing of this information.

    [author:]
        Claus Atzkern

    [see also:]
        DataSetColumnSpec
        DataSetColumn
        DSVColumnView
"
!

examples
"
    example 1: list with valid rows of type Array
                                                                                [exBegin]
    |top scr columns rows bool rdWtSel|

    top  := StandardSystemView new label:'Simple Test'; extent:700@440.
    scr  := DataSetView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.

    columns := OrderedCollection new.
    rows    := OrderedCollection new.
    bool    := true.
    rdWtSel := #( #at: #at:put: ).

    1 to:1000 do:[:i||n|
        n := i printString.
        rows add:(Array with:('text: ', n) with:('input: ', n) with:bool).
        bool := bool not.
    ].

    columns add:(DataSetColumnSpec label:'Text'   editorType:#None        selector:rdWtSel).
    columns add:(DataSetColumnSpec label:'Input'  editorType:#InputField  selector:rdWtSel).
    columns add:(DataSetColumnSpec label:'Toggle' editorType:#CheckToggle selector:rdWtSel).

    scr columnDescriptors:columns.
    scr list:rows.
    top open.
                                                                                [exEnd]



    example 2: list with none valid rows; defining #rowIfAbsent: block
                                                                                [exBegin]
    |top scr columns bool rdWtSel|

    top  := StandardSystemView new label:'Row Is Absent'; extent:700@440.
    scr  := DataSetView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.

    columns := OrderedCollection new.
    bool    := true.
    rdWtSel := #( #at: #at:put: ).

    columns add:(DataSetColumnSpec label:'Text'   editorType:#None        selector:rdWtSel).
    columns add:(DataSetColumnSpec label:'Input'  editorType:#InputField  selector:rdWtSel).
    columns add:(DataSetColumnSpec label:'Toggle' editorType:#CheckToggle selector:rdWtSel).

    scr rowIfAbsent:[:i|
        bool := bool not.
        Array with:('text: ', i printString) with:('input: ') with:bool
    ].

    scr columnDescriptors:columns.
    scr list:(Array new:1000).
    top open.
                                                                                [exEnd]



    example 3: list with valid rows of type Structure
                                                                                [exBegin]
    |top scr clDc rows slct list idx bool|

    top  := StandardSystemView new label:'Editors'; extent:700@440.
    scr  := DataSetView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.

    clDc := OrderedCollection new.
    rows := OrderedCollection new.
    list := #( 'Text ' 'Field ' 'C-Box ' 'C-List ' true    #( 'foo' 'bar' 'baz' ) ).
    slct := #( #text   #field   #cbox    #clist    #toggle #choices               ).
    idx  := 11.
    bool := true.

    20 timesRepeat:[ |values|
        values := list collect:[:n|
            n isString ifTrue:[n, idx printString]
                      ifFalse:[n == true ifTrue:[bool] ifFalse:[n]]
        ].
        rows add:(Structure newWith:slct values:values).
        bool := bool not.
        idx  := idx + 1.
    ].
    clDc add:( DataSetColumnSpec label:'Text'   editorType:#None        selector:#text ).
    clDc add:( DataSetColumnSpec label:'Text'   editorType:#None        selector:#text ).
    clDc add:( DataSetColumnSpec label:'Field'  editorType:#InputField  selector:#field ).
    clDc add:( DataSetColumnSpec label:'C-Box'  editorType:#ComboBox    selector:#cbox ).
    clDc last choices:#choices.
    clDc add:( DataSetColumnSpec label:'C-List' editorType:#ComboList   selector:#clist ).
    clDc last choices:#choices.
    clDc add:( DataSetColumnSpec label:'Toggle' editorType:#CheckToggle selector:#toggle ).

    scr has3Dseparators:true.
    scr columnDescriptors:clDc.
    scr list:rows.
    top open.
                                                                                [exEnd]




    example 4: table includes a row selector and multiple select is enabled
                                                                                [exBegin]
    |top scr clDc rows slct list idx bool|

    top  := StandardSystemView new label:'Multiple Select'; extent:700@440.
    scr  := DataSetView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.

    clDc := OrderedCollection new.
    rows := OrderedCollection new.
    list := #( 'Text ' 'Field ' 'C-Box ' 'C-List ' true    #( 'foo' 'bar' 'baz' ) ).
    slct := #( #text   #field   #cbox    #clist    #toggle #choices               ).
    idx  := 11.
    bool := true.

    20 timesRepeat:[ |values|
        values := list collect:[:n|
            n isString ifTrue:[n, idx printString]
                      ifFalse:[n == true ifTrue:[bool] ifFalse:[n]]
        ].
        rows add:(Structure newWith:slct values:values).
        bool := bool not.
        idx  := idx + 1.
    ].
    clDc add:( DataSetColumnSpec rowSelector ).
    clDc add:( DataSetColumnSpec label:'Text'   editorType:#None        selector:#text ).
    clDc add:( DataSetColumnSpec label:'Text'   editorType:#None        selector:#text ).
    clDc add:( DataSetColumnSpec label:'Field'  editorType:#InputField  selector:#field ).
    clDc add:( DataSetColumnSpec label:'C-Box'  editorType:#ComboBox    selector:#cbox ).
    clDc last choices:#choices.
    clDc add:( DataSetColumnSpec label:'C-List' editorType:#ComboList   selector:#clist ).
    clDc last choices:#choices.
    clDc add:( DataSetColumnSpec label:'Toggle' editorType:#CheckToggle selector:#toggle ).

    scr has3Dseparators:true.
    scr columnDescriptors:clDc.
    scr multipleSelectOk:true.
    scr list:rows.
    top open.
                                                                                [exEnd]


    example 5: Images and Layout
                                                                                [exBegin]
    |top scr columns rows colDesc image text|

    text := 'Text'.
    rows := Array new:1000.

    1 to:(rows size) do:[:i|
        rows at:i put:(Array with:('Id: ', i printString) with:text with:text)
    ].

    columns := OrderedCollection new.
    image   := Image fromFile:('xpmBitmaps/misc_tools/box_full.xpm' ).

    colDesc := DataSetColumnSpec label:(LabelAndIcon icon:image string:'Left') selector:#at:.
    colDesc labelAlignment:#left.
    colDesc columnAlignment:#left.
    columns add:colDesc.

    colDesc := DataSetColumnSpec label:(LabelAndIcon icon:image string:'Right') selector:#at:.
    colDesc labelAlignment:#right.
    colDesc columnAlignment:#right.
    columns add:colDesc.

    colDesc := DataSetColumnSpec label:(LabelAndIcon icon:image string:'Center') selector:#at:.
    colDesc labelAlignment:#center.
    colDesc columnAlignment:#center.
    columns add:colDesc.

    columns do:[:el|el labelActionSelector:#dummy].

    top := StandardSystemView new label:'Layout'; extent:500@500.
    scr := DataSetView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
    scr has3Dseparators:true.
    scr columnDescriptors:columns.
    scr list:rows.

    top open
                                                                                [exEnd]



    example 6: adding and removing
                                                                                [exBegin]
    |top scr list|

    top  := StandardSystemView new label:'Adding & Removing'; extent:600@440.
    scr  := DataSetView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.

    scr columnDescriptors:( Array with:(DataSetColumnSpec label:'FOO' selector:#at:)
                                  with:(DataSetColumnSpec label:'BAR' selector:#at:)
                                  with:(DataSetColumnSpec label:'BAZ' selector:#at:)
                          ).

    scr has3Dseparators:true.
    scr listHolder:(list := List new).
    top openAndWait.

    1 to:32 do:[:i| |pid|
        pid := i printString.
        list add:(Array with:('foo: ', pid) with:('bar: ', pid) with:('baz: ', pid)).
        i even ifTrue:[
            list removeFirst
        ].       
        Delay waitForSeconds:0.1.
    ].
                                                                                [exEnd]


"
! !

!DataSetView methodsFor:'initialize / release'!

initialize
    "set column area
    "
    super initialize.

    self setupVertical:true mini:false horizontal:true mini:true.
    self scrolledView:(DSVColumnView new labelView:(DSVLabelView in:self)).
! !

!DataSetView methodsFor:'queries'!

specClass
    "returns my spec class
    "
    ^ DataSetSpec
! !

!DataSetView class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libwidg2/DataSetView.st,v 1.31 1999-08-29 16:56:13 cg Exp $'
! !