|
Class: TabulatorSpecification
Object
|
+--Model
|
+--TabulatorSpecification
- Package:
- stx:libwidg2
- Category:
- Views-Support
- Version:
- rev:
1.17
date: 2016/04/02 14:29:33
- user: cg
- file: TabulatorSpecification.st directory: libwidg2
- module: stx stc-classLibrary: libwidg2
- Author:
- Claus Gittinger
This is a helper class for table widgets and tabular data in
lists.
A tabulatorSpecification keeps track of where the tabs are,
and how they align. They are to be used in conjunction with
MultiColumnListEntry or the upcoming TableWidget.
However, they may also be useful to represent tabs in a
paragraph of text.
Ruler
TabSpecRuler
ListView
instance creation
-
unit: unit positions: positions
-
TabulatorSpecification unit:#inch positions:#(0 3)
accessing
-
align
-
return the align-vector
-
align: types
-
an array of tab-types; each one is
#left
#right
#center
#decimal
or a symbol which gives align of all tabs
-
moveTabAtIndex: index to: unitPosition
-
set an individual position
-
positions
-
return the position-vector
-
positions: tabs
-
set the position-vector
-
size
-
return the number of tabs in this spec
-
unit
-
return the unit
-
unit: aSymbol
-
set the unit.
allowed are: #inch, #mm, #cm, #pixel and #col
-
unitRelativeTo: someObject
-
set for a relative unit. someObject should return its width
and the tabs are set fraction-relative to this number (in pixel).
-
widths
-
return a width-vector
-
widths: fieldWidths
-
set the position-vector from a vector of field widths
queries
-
pixelsPerUnitOn: aGC
-
return the number of device pixels one unit of my tabs
takes on aGC
-
positionOfTab: index forString: aString on: aGC
-
return the position (in device units) of the string to be drawn
at position index.
-
positionOfTab: index on: aGC
-
return the position (in device units) of the tab at index
-
typeOfTab: index
-
return the type of the tab at position index.
-
unitsPerPixelOn: aGC
-
return the number of units that one device pixels
takes on aGC
Example use (in a ListView):
|listView tabSpec entry|
listView := ListView new.
tabSpec := TabulatorSpecification new.
tabSpec unit:#inch.
tabSpec positions:#(0 1 2.5 3.5 4 5 ).
tabSpec align: #(#left #left #right #right #center #decimal ).
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'left';
colAt:2 put:'left';
colAt:3 put:'right';
colAt:4 put:'right';
colAt:5 put:'center';
colAt:6 put:'.decimal'.
listView at:1 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'col1';
colAt:2 put:'col2';
colAt:3 put:'col3';
colAt:4 put:'col4';
colAt:5 put:'col5';
colAt:6 put:'col6.decimal'.
listView at:2 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'foo';
colAt:2 put:'fooBar';
colAt:3 put:'bar';
colAt:4 put:'barFoo';
colAt:5 put:'baz';
colAt:6 put:'1234.56'.
listView at:3 put:entry.
(ScrollableView forView:listView) open
|
defining field positions in millimeter :
|listView tabSpec entry|
listView := ListView new.
tabSpec := TabulatorSpecification new.
tabSpec unit:#mm.
tabSpec positions:#(0 10 20 40).
tabSpec align: #left.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'1';
colAt:2 put:'2';
colAt:3 put:'3';
colAt:4 put:'4'.
listView at:1 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'aa';
colAt:2 put:'bb';
colAt:3 put:'cc';
colAt:4 put:'dd'.
listView at:2 put:entry.
listView open
|
defining field widths in millimeter :
|listView tabSpec entry|
listView := ListView new.
tabSpec := TabulatorSpecification new.
tabSpec unit:#mm.
tabSpec widths:#(10 10 20 10).
tabSpec align: #left.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'1';
colAt:2 put:'2';
colAt:3 put:'3';
colAt:4 put:'4'.
listView at:1 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'aa';
colAt:2 put:'bb';
colAt:3 put:'cc';
colAt:4 put:'dd'.
listView at:2 put:entry.
listView open
|
defining field widths in pixels :
|listView tabSpec entry|
listView := ListView new.
tabSpec := TabulatorSpecification new.
tabSpec unit:#pixel.
tabSpec widths:#(50 30 30 50).
tabSpec align: #left.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'1';
colAt:2 put:'2';
colAt:3 put:'3';
colAt:4 put:'4'.
listView at:1 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'aa';
colAt:2 put:'bb';
colAt:3 put:'cc';
colAt:4 put:'dd'.
listView at:2 put:entry.
listView open
|
same as first example, but adding a TabSpecRuler to show where
the tabs are:
|top ruler listView tabSpec entry|
top := StandardSystemView extent:300@300.
ruler := TabSpecRuler origin:0.0@0.0 corner:1.0@20 in:top.
ruler level:0.
ruler tabsAreVariable:false.
listView := ListView in:top.
listView origin:0.0@0.0 corner:1.0@1.0.
listView topInset:20.
tabSpec := TabulatorSpecification new.
tabSpec unit:#inch.
tabSpec positions:#(0 1 2.5 3.5 4 5 ).
tabSpec align: #(#left #left #right #right #center #decimal ).
ruler tabulatorSpecification:tabSpec.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'left';
colAt:2 put:'left';
colAt:3 put:'right';
colAt:4 put:'right';
colAt:5 put:'center';
colAt:6 put:'.decimal'.
listView at:1 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'col1';
colAt:2 put:'col2';
colAt:3 put:'col3';
colAt:4 put:'col4';
colAt:5 put:'col5';
colAt:6 put:'col6.decimal'.
listView at:2 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'foo';
colAt:2 put:'fooBar';
colAt:3 put:'bar';
colAt:4 put:'barFoo';
colAt:5 put:'baz';
colAt:6 put:'1234.56'.
listView at:3 put:entry.
top open
|
much like previous example, but allow some tab positions to be
changed (with synchronousOperation):
|top ruler listView tabSpec entry|
top := StandardSystemView extent:300@300.
ruler := TabSpecRuler origin:0.0@0.0 corner:1.0@20 in:top.
ruler level:0.
ruler fixedTabs:#(1).
ruler synchronousOperation:true.
listView := ListView in:top.
listView origin:0.0@0.0 corner:1.0@1.0.
listView topInset:20.
tabSpec := TabulatorSpecification new.
tabSpec unit:#inch.
tabSpec positions:#(0 1 2.5 3.5 4 5 ).
tabSpec align: #(#left #left #left #left #left #decimal ).
ruler tabulatorSpecification:tabSpec.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'left';
colAt:2 put:'left';
colAt:3 put:'left';
colAt:4 put:'left';
colAt:5 put:'left';
colAt:6 put:'.decimal'.
listView at:1 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'col1';
colAt:2 put:'col2';
colAt:3 put:'col3';
colAt:4 put:'col4';
colAt:5 put:'col5';
colAt:6 put:'col6'.
listView at:2 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'foo';
colAt:2 put:'fooBar';
colAt:3 put:'bar';
colAt:4 put:'barFoo';
colAt:5 put:'baz';
colAt:6 put:'1234.56'.
listView at:3 put:entry.
entry := MultiColListEntry new.
entry tabulatorSpecification:tabSpec.
entry colAt:1 put:'hello';
colAt:2 put:'world';
colAt:3 put:'how';
colAt:4 put:'about';
colAt:5 put:'this';
colAt:6 put:'0.2345'.
listView at:4 put:entry.
tabSpec onChangeSend:#redraw to:listView.
top open
|
|