|
Class: DataSetView
Object
|
+--GraphicsMedium
|
+--DisplaySurface
|
+--SimpleView
|
+--ScrollableView
|
+--DataSetView
- Package:
- stx:libwidg2
- Category:
- Views-DataSet
- Version:
- rev:
1.51
date: 2018/11/09 23:05:35
- user: cg
- file: DataSetView.st directory: libwidg2
- module: stx stc-classLibrary: libwidg2
- Author:
- Claus Atzkern
This class implements a selection list view based on rows and columns.
Instances are wrapping a DSVLabelView and a DSVColumnView.
It allows for the dynamic editing of this information.
This is a replacement for the obsolete TableView.
DataSetColumnSpec
DataSetColumn
DSVColumnView
accessing
-
columnView
-
-
ignoreReselect: aBoolean
-
controls if clicking on an already selected item should
be ignored or should perform the select action again.
By default, these are ignored
-
labelView
-
change & update
-
update: something with: aParameter from: changedObject
-
initialization & release
-
initialize
-
set column area
layout computation
-
recomputeLayouts
-
columnView realized ifTrue:[
-
scrolledViewLayout: aLayout
-
invoked by superclasses setLayout method, whenever the scrolled views
layout changes (due to added/removed scrollbars).
-
verticalScrollBarLayout: aLayout
-
redefined to care for the label view,
which is at the top and NOT scrolled.
It covers the top areay of myself, so we have to make the vertical
scrollbar a little smaller.
queries
-
canTab
-
-
computePreferredExtent
-
return my preferredExtent from the scrolledViews prefExtent
plus the size of the scrollBar
-
specClass
-
returns my spec class
example 1: list with valid rows of type Array
|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 with:(i==20)).
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).
columns add:(DataSetColumnSpec label:'Radio' editorType:#RadioButton selector:rdWtSel).
scr columnDescriptors:columns.
scr list:rows.
top open.
|
example 2: list with none valid rows; defining #rowIfAbsent: block
|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.
|
example 3: list with valid rows of type Structure
|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.
|
example 4: table includes a row selector and multiple select is enabled
|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.
|
example 5: Images and Layout
|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
|
example 6: adding and removing
|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.
].
|
|