class: DataSetBuilder
authorClaus Gittinger <cg@exept.de>
Thu, 22 Aug 2013 09:59:07 +0200
changeset 3045 c1c9bfd7ad18
parent 3044 482172c551b3
child 3046 7d93b17e2c03
class: DataSetBuilder added: #makeAllCellsSelectable #makeAllCellsUnselectable changed: #menuEdit category of:46 methods
DataSetBuilder.st
--- a/DataSetBuilder.st	Sun Aug 11 11:59:20 2013 +0200
+++ b/DataSetBuilder.st	Thu Aug 22 09:59:07 2013 +0200
@@ -2668,6 +2668,20 @@
                   itemValue: makeSelectedCellsSelectable
                   translateLabel: true
                 )
+         (MenuItem
+            label: '-'
+          )
+
+               (MenuItem
+                  label: 'Make All Cells Unselectable'
+                  itemValue: makeAllCellsUnselectable
+                  translateLabel: true
+                )
+               (MenuItem
+                  label: 'Make All Cells Selectable'
+                  itemValue: makeAllCellsSelectable
+                  translateLabel: true
+                )
                )
               nil
               nil
@@ -3502,454 +3516,7 @@
 "/    aDataSetColumnSpec editorType: #InputField.
 ! !
 
-!DataSetBuilder methodsFor:'operations'!
-
-addCellSeparators
-    self addRowSeparators.
-    self addColumnSeparators.
-!
-
-addColumnSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr showColSeparator:true
-    ].
-    self updateAfterOperation.
-!
-
-addLabelColumnSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr labelButtonType:#Button
-    ].
-    self updateAfterOperation.
-!
-
-addLabelSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr labelButtonType:#Button
-    ].
-    self updateAfterOperation.
-!
-
-addRowSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr showRowSeparator:true
-    ].
-    self updateAfterOperation.
-!
-
-alignColumns:how
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr columnAlignment:how
-    ].
-    self updateAfterOperation.
-!
-
-alignColumnsCentered
-    self alignColumns:#centered
-!
-
-alignColumnsLeft
-    self alignColumns:#left
-!
-
-alignColumnsRight
-    self alignColumns:#right
-!
-
-alignLabels:how
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr labelAlignment:how
-    ].
-    self updateAfterOperation.
-!
-
-alignLabelsCentered
-    self alignLabels:#centered
-!
-
-alignLabelsLeft
-    self alignLabels:#left
-!
-
-alignLabelsRight
-    self alignLabels:#right
-!
-
-makeColumnsSelectable
-    self makeColumnsSelectable:true
-!
-
-makeColumnsSelectable:aBoolean
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr canSelect:aBoolean
-    ].
-    self updateAfterOperation.
-!
-
-makeColumnsUnselectable
-    self makeColumnsSelectable:false
-!
-
-makeSelectedCellsSelectable
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr canSelect:true
-    ].
-    self updateAfterOperation.
-!
-
-makeSelectedCellsUnselectable
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr canSelect:false
-    ].
-    self updateAfterOperation.
-!
-
-removeCellSeparators
-    self removeRowSeparators.
-    self removeColumnSeparators.
-!
-
-removeColumnSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr showColSeparator:false
-    ].
-    self updateAfterOperation.
-!
-
-removeLabelColumnSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr labelButtonType:#Group
-    ].
-    self updateAfterOperation.
-!
-
-removeLabelSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr labelButtonType:#None
-    ].
-    self updateAfterOperation.
-!
-
-removeRowSeparators
-    self selectedColumnsDo:[:eachColDescr |
-        eachColDescr showRowSeparator:false
-    ].
-    self updateAfterOperation.
-!
-
-selectedColumnsDo:aBlock
-    selectedColumnIndex isCollection ifTrue:[
-        selectedColumnIndex do:[:idx | aBlock value:(columns at:idx)].
-    ] ifFalse:[
-        selectedColumnIndex ~~ 0 ifTrue:[
-            selectedColumnIndex notNil ifTrue:[
-                aBlock value:(columns at:selectedColumnIndex)
-            ]
-        ].  
-    ].
-!
-
-setCellColorSelectors
-    |fgSelector bgSelector|
-
-    fgSelector := Dialog request:'FG-Selector for all selected Columns (accept empty for none):'.
-    fgSelector isNil ifTrue:[^ self].
-
-    bgSelector := Dialog request:'BG-Selector for all selected Columns (accept empty for none):'.
-    bgSelector isNil ifTrue:[^ self].
-
-    self selectedColumnsDo:[:eachColDescr |
-        bgSelector notEmpty ifTrue:[
-            eachColDescr backgroundSelector:bgSelector
-        ].
-        fgSelector notEmpty ifTrue:[
-            eachColDescr foregroundSelector:fgSelector
-        ].
-    ].
-    self updateAfterOperation.
-!
-
-setSelectedCellColorSelectors
-    |fgSelector bgSelector|
-
-    fgSelector := Dialog request:'Selected FG-Selector for all selected Columns (accept empty for none):'.
-    fgSelector isNil ifTrue:[^ self].
-
-    bgSelector := Dialog request:'Selected BG-Selector for all selected Columns (accept empty for none):'.
-    bgSelector isNil ifTrue:[^ self].
-
-    self selectedColumnsDo:[:eachColDescr |
-        bgSelector notEmpty ifTrue:[
-            eachColDescr selectedBackgroundSelector:bgSelector
-        ].
-        fgSelector notEmpty ifTrue:[
-            eachColDescr selectedForegroundSelector:fgSelector
-        ].
-    ].
-    self updateAfterOperation.
-!
-
-updateAfterOperation
-    self updateColumnView.
-    self updateInputFields.
-    self setModified.
-! !
-
-!DataSetBuilder methodsFor:'private'!
-
-labelFromColumn:aColumn
-    |label|
-
-    aColumn rendererType == #rowSelector ifTrue:[
-        ^ 'Row Selector'
-    ].
-    label := aColumn label.
-    label isNil ifTrue:[^ nil].
-
-    label isString ifTrue:[^ label].
-
-    label size > 0 ifTrue:[
-         label := label at:1.
-    ].
-    ^ label printString
-!
-
-labelInPreviewPressed:anIndex
-   (self componentAt:#labelAndColumns) selection:anIndex
-!
-
-updateColumnView
-    "updates the column view from column descriptions"
-
-    |size previewColumns columnList|
-
-    columnView notNil ifTrue:[
-        columnList     := List new.
-        previewColumns := OrderedCollection new.
-
-        (size := columns size) ~~ 0 ifTrue:[
-            columns do:[:aCol|
-                previewColumns add:(aCol copy)
-            ].
-            previewColumns keysAndValuesDo:[:anIndex :column| 
-                column 
-                    readSelector:  #at:;
-                    writeSelector: #at:put:;
-                    backgroundSelector:nil;
-                    foregroundSelector:nil;
-                    rowSeparatorSelector:nil;
-                    selectSelector: nil;
-                    showComboFieldSelector: nil;
-                    selectSelector: nil;
-                    doubleClickedSelector: nil;
-                    printSelector: nil;
-                    visibilitySelector: nil;
-                    menu: nil;
-                    labelActionSelector:#labelInPreviewPressed:;
-                    labelActionArgument:anIndex;
-                    choices:#choices;
-                    sortSelector: nil;
-                    isSortable: false
-            ].
-            #(' 1' ' 2' ' x') do:[:suffix|
-                |oneRow|
-
-                oneRow := Row new:size.
-                1 to:size do:[:i | oneRow at: i put: ('Cell%1-%2' bindWith:suffix with:i)].
-                columnList add: oneRow.
-            ]
-        ].
-
-        columnView list: #().
-        columnView columnDescriptors: previewColumns.
-        columnView list: columnList.
-    ].
-
-    "Modified: / 27.10.1998 / 14:41:16 / cg"
-!
-
-updateInputFields
-    "reloads item value into input fields"
-
-    |column notifyValue|
-
-    (column := self selectedColumn) isNil ifTrue:[
-        self tabModel value:0.
-    ] ifFalse:[
-        notifyValue := nil.     "/ old: '' -> problems with Toggles (asBoolean)
-
-        aspects do:[:anAspect| anAspect value:notifyValue ].
-        aspects keysAndValuesDo:[:aKey :aModel |
-            aModel value:(column perform:aKey) withoutNotifying: self
-        ].
-
-"/ REPALCE nil by empty string for specific inputFields without an adapter
-        #( #labelActionArgument #formatString #id ) do:[:aKey| |model|
-            model := aspects at:aKey.
-            model value isNil ifTrue:[model value:notifyValue withoutNotifying: self]
-        ].
-
-        tabSelection == 0 ifTrue:[self tabModel value:1].
-    ].
-! !
-
-!DataSetBuilder methodsFor:'selection'!
-
-selectedColumn
-    "returns selected column or nil"
-
-    selectedColumnIndex isCollection ifTrue:[
-        ^ selectedColumnIndex size == 1 
-            ifTrue:[ columns at:selectedColumnIndex first ]
-            ifFalse:[ nil ] 
-    ].
-
-    ^selectedColumnIndex == 0 
-        ifFalse:[columns at:selectedColumnIndex ifAbsent: nil]
-        ifTrue: [nil]
-!
-
-selectedColumnIndex
-    "returns selected column index or 0"
-
-    ^selectedColumnIndex
-!
-
-selectedColumnIndex:something
-    "changes selected column and updates specifications"
-
-    something == selectedColumnIndex ifFalse:[
-        selectedColumnIndex := something ? 0.
-        "/ self assert:( selectedColumnIndex <= columns size ).
-        "/ self assert:( selectedColumnIndex <= self seqList size ).
-        self isColumnSelected value: true
-    ].
-!
-
-selectedColumnIndices
-    "returns selected column indices or #()"
-
-    selectedColumnIndex == 0 ifTrue:[ ^ #() ].
-    selectedColumnIndex isNumber ifTrue:[ ^ Array with:selectedColumnIndex ].
-    ^selectedColumnIndex
-!
-
-selectedColumns
-    selectedColumnIndex isCollection ifTrue:[
-        ^ selectedColumnIndex collect:[:idx | columns at:idx] 
-    ].
-
-    ^ selectedColumnIndex == 0 
-        ifFalse:[ Array with:(columns at:selectedColumnIndex) ]
-        ifTrue: [ #() ]
-!
-
-singleSelectedColumnIndex
-    selectedColumnIndex isCollection ifTrue:[
-        ^ selectedColumnIndex size == 1 
-            ifTrue:[ selectedColumnIndex first ]
-            ifFalse:[ 0 ] 
-    ].
-
-    ^ selectedColumnIndex
-!
-
-tabSelection:something
-    "changes selected tab and set corresponding specification"
-
-    |view spec|
-
-    something == tabSelection ifTrue:[^self].
-
-    (tabSelection := something) isNil ifTrue:[
-        tabSelection == 0 ifTrue:[^ self].
-        tabSelection := 0.
-    ].
-
-    self selectedColumn isNil ifTrue:[
-        tabSelection ~~ 0 ifTrue:[
-            self tabModel value:0
-        ] ifFalse:[
-            self canvasHolder value:nil
-        ].
-        ^ self
-    ].
-
-    tabSelection == 0 ifTrue:[
-        ^ self tabModel value:1.
-    ].
-
-    (view := listOfSpecViews at:tabSelection) isNil ifTrue:[
-        view := SimpleView new.
-        spec := (self class slices at:tabSelection) last.
-
-"/        view client:nil spec:(self class interfaceSpecFor:spec) builder:(self builder).
-        view client:self spec:spec builder:(self builder).
-        listOfSpecViews at:tabSelection put:view.
-    ].
-    self canvasHolder value:view
-! !
-
-!DataSetBuilder methodsFor:'startup & release'!
-
-commonPostBuild
-    columnView := self componentAt:#columnView.
-
-    columns notEmpty ifTrue: [
-        self tabModel value: 1. 
-        self selectedColumnModel value:nil; value:1.    "/ toggle to force change
-        self updateInputFields.
-        self updateInfoLabel.
-        self updateHistory
-    ].
-
-    (self componentAt: #labelAndColumns) 
-        selectConditionBlock: [:i|self askForItemModification];
-        action: [:i|self cancel];
-        selection: 1.
-
-    "/ using masters infoHolder ?
-    (builder aspectAt:#useAlienInfoLabelHolder) == true ifTrue:[
-        (builder componentAt:#mainPanel) layout bottomOffset:0.
-        (builder componentAt:#infoBarSubSpec) beInvisible
-    ]                         
-!
-
-openModal
-    "sets the modalOpened flag, so later, 
-     there is no need to ask for saving into a class"
-
-    modalOpened := true.
-    super openModal
-!
-
-openModalOnResourceSpec: aListSpec
-    "sets the modalOpened flag, so later, 
-     there is no need to ask for saving into a class"
-
-    modalOpened := true.
-    super openModalOnResourceSpec: aListSpec
-
-
-!
-
-postBuildListOfItemsView:aView
-    listOfItemsView := aView
-!
-
-postBuildSpecView:aView
-    listOfItemsView := aView
-!
-
-postOpenWith:aBuilder
-    "reset keyboardProcessor for menuBar"
-
-    super postOpenWith:aBuilder.
-    aBuilder keyboardProcessor menuBar:nil.
-    self windowGroup addPreEventHook:self.
-! !
-
-!DataSetBuilder methodsFor:'user actions'!
+!DataSetBuilder methodsFor:'menu & user actions'!
 
 accept
     "accept changes made"
@@ -4389,6 +3956,467 @@
    self openHTMLDocument:'tools/uipainter/DataSetBuilder.html'.
 ! !
 
+!DataSetBuilder methodsFor:'menu operations'!
+
+addCellSeparators
+    self addRowSeparators.
+    self addColumnSeparators.
+!
+
+addColumnSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr showColSeparator:true
+    ].
+    self updateAfterOperation.
+!
+
+addLabelColumnSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr labelButtonType:#Button
+    ].
+    self updateAfterOperation.
+!
+
+addLabelSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr labelButtonType:#Button
+    ].
+    self updateAfterOperation.
+!
+
+addRowSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr showRowSeparator:true
+    ].
+    self updateAfterOperation.
+!
+
+alignColumns:how
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr columnAlignment:how
+    ].
+    self updateAfterOperation.
+!
+
+alignColumnsCentered
+    self alignColumns:#centered
+!
+
+alignColumnsLeft
+    self alignColumns:#left
+!
+
+alignColumnsRight
+    self alignColumns:#right
+!
+
+alignLabels:how
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr labelAlignment:how
+    ].
+    self updateAfterOperation.
+!
+
+alignLabelsCentered
+    self alignLabels:#centered
+!
+
+alignLabelsLeft
+    self alignLabels:#left
+!
+
+alignLabelsRight
+    self alignLabels:#right
+!
+
+makeAllCellsSelectable
+    columns do:[:eachColDescr |
+        eachColDescr canSelect:true
+    ].
+    self updateAfterOperation.
+!
+
+makeAllCellsUnselectable
+    columns do:[:eachColDescr |
+        eachColDescr canSelect:false
+    ].
+    self updateAfterOperation.
+!
+
+makeColumnsSelectable
+    self makeColumnsSelectable:true
+!
+
+makeColumnsSelectable:aBoolean
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr canSelect:aBoolean
+    ].
+    self updateAfterOperation.
+!
+
+makeColumnsUnselectable
+    self makeColumnsSelectable:false
+!
+
+makeSelectedCellsSelectable
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr canSelect:true
+    ].
+    self updateAfterOperation.
+!
+
+makeSelectedCellsUnselectable
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr canSelect:false
+    ].
+    self updateAfterOperation.
+!
+
+removeCellSeparators
+    self removeRowSeparators.
+    self removeColumnSeparators.
+!
+
+removeColumnSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr showColSeparator:false
+    ].
+    self updateAfterOperation.
+!
+
+removeLabelColumnSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr labelButtonType:#Group
+    ].
+    self updateAfterOperation.
+!
+
+removeLabelSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr labelButtonType:#None
+    ].
+    self updateAfterOperation.
+!
+
+removeRowSeparators
+    self selectedColumnsDo:[:eachColDescr |
+        eachColDescr showRowSeparator:false
+    ].
+    self updateAfterOperation.
+!
+
+selectedColumnsDo:aBlock
+    selectedColumnIndex isCollection ifTrue:[
+        selectedColumnIndex do:[:idx | aBlock value:(columns at:idx)].
+    ] ifFalse:[
+        selectedColumnIndex ~~ 0 ifTrue:[
+            selectedColumnIndex notNil ifTrue:[
+                aBlock value:(columns at:selectedColumnIndex)
+            ]
+        ].  
+    ].
+!
+
+setCellColorSelectors
+    |fgSelector bgSelector|
+
+    fgSelector := Dialog request:'FG-Selector for all selected Columns (accept empty for none):'.
+    fgSelector isNil ifTrue:[^ self].
+
+    bgSelector := Dialog request:'BG-Selector for all selected Columns (accept empty for none):'.
+    bgSelector isNil ifTrue:[^ self].
+
+    self selectedColumnsDo:[:eachColDescr |
+        bgSelector notEmpty ifTrue:[
+            eachColDescr backgroundSelector:bgSelector
+        ].
+        fgSelector notEmpty ifTrue:[
+            eachColDescr foregroundSelector:fgSelector
+        ].
+    ].
+    self updateAfterOperation.
+!
+
+setSelectedCellColorSelectors
+    |fgSelector bgSelector|
+
+    fgSelector := Dialog request:'Selected FG-Selector for all selected Columns (accept empty for none):'.
+    fgSelector isNil ifTrue:[^ self].
+
+    bgSelector := Dialog request:'Selected BG-Selector for all selected Columns (accept empty for none):'.
+    bgSelector isNil ifTrue:[^ self].
+
+    self selectedColumnsDo:[:eachColDescr |
+        bgSelector notEmpty ifTrue:[
+            eachColDescr selectedBackgroundSelector:bgSelector
+        ].
+        fgSelector notEmpty ifTrue:[
+            eachColDescr selectedForegroundSelector:fgSelector
+        ].
+    ].
+    self updateAfterOperation.
+!
+
+updateAfterOperation
+    self updateColumnView.
+    self updateInputFields.
+    self setModified.
+! !
+
+!DataSetBuilder methodsFor:'private'!
+
+labelFromColumn:aColumn
+    |label|
+
+    aColumn rendererType == #rowSelector ifTrue:[
+        ^ 'Row Selector'
+    ].
+    label := aColumn label.
+    label isNil ifTrue:[^ nil].
+
+    label isString ifTrue:[^ label].
+
+    label size > 0 ifTrue:[
+         label := label at:1.
+    ].
+    ^ label printString
+!
+
+labelInPreviewPressed:anIndex
+   (self componentAt:#labelAndColumns) selection:anIndex
+!
+
+updateColumnView
+    "updates the column view from column descriptions"
+
+    |size previewColumns columnList|
+
+    columnView notNil ifTrue:[
+        columnList     := List new.
+        previewColumns := OrderedCollection new.
+
+        (size := columns size) ~~ 0 ifTrue:[
+            columns do:[:aCol|
+                previewColumns add:(aCol copy)
+            ].
+            previewColumns keysAndValuesDo:[:anIndex :column| 
+                column 
+                    readSelector:  #at:;
+                    writeSelector: #at:put:;
+                    backgroundSelector:nil;
+                    foregroundSelector:nil;
+                    rowSeparatorSelector:nil;
+                    selectSelector: nil;
+                    showComboFieldSelector: nil;
+                    selectSelector: nil;
+                    doubleClickedSelector: nil;
+                    printSelector: nil;
+                    visibilitySelector: nil;
+                    menu: nil;
+                    labelActionSelector:#labelInPreviewPressed:;
+                    labelActionArgument:anIndex;
+                    choices:#choices;
+                    sortSelector: nil;
+                    isSortable: false
+            ].
+            #(' 1' ' 2' ' x') do:[:suffix|
+                |oneRow|
+
+                oneRow := Row new:size.
+                1 to:size do:[:i | oneRow at: i put: ('Cell%1-%2' bindWith:suffix with:i)].
+                columnList add: oneRow.
+            ]
+        ].
+
+        columnView list: #().
+        columnView columnDescriptors: previewColumns.
+        columnView list: columnList.
+    ].
+
+    "Modified: / 27.10.1998 / 14:41:16 / cg"
+!
+
+updateInputFields
+    "reloads item value into input fields"
+
+    |column notifyValue|
+
+    (column := self selectedColumn) isNil ifTrue:[
+        self tabModel value:0.
+    ] ifFalse:[
+        notifyValue := nil.     "/ old: '' -> problems with Toggles (asBoolean)
+
+        aspects do:[:anAspect| anAspect value:notifyValue ].
+        aspects keysAndValuesDo:[:aKey :aModel |
+            aModel value:(column perform:aKey) withoutNotifying: self
+        ].
+
+"/ REPALCE nil by empty string for specific inputFields without an adapter
+        #( #labelActionArgument #formatString #id ) do:[:aKey| |model|
+            model := aspects at:aKey.
+            model value isNil ifTrue:[model value:notifyValue withoutNotifying: self]
+        ].
+
+        tabSelection == 0 ifTrue:[self tabModel value:1].
+    ].
+! !
+
+!DataSetBuilder methodsFor:'selection'!
+
+selectedColumn
+    "returns selected column or nil"
+
+    selectedColumnIndex isCollection ifTrue:[
+        ^ selectedColumnIndex size == 1 
+            ifTrue:[ columns at:selectedColumnIndex first ]
+            ifFalse:[ nil ] 
+    ].
+
+    ^selectedColumnIndex == 0 
+        ifFalse:[columns at:selectedColumnIndex ifAbsent: nil]
+        ifTrue: [nil]
+!
+
+selectedColumnIndex
+    "returns selected column index or 0"
+
+    ^selectedColumnIndex
+!
+
+selectedColumnIndex:something
+    "changes selected column and updates specifications"
+
+    something == selectedColumnIndex ifFalse:[
+        selectedColumnIndex := something ? 0.
+        "/ self assert:( selectedColumnIndex <= columns size ).
+        "/ self assert:( selectedColumnIndex <= self seqList size ).
+        self isColumnSelected value: true
+    ].
+!
+
+selectedColumnIndices
+    "returns selected column indices or #()"
+
+    selectedColumnIndex == 0 ifTrue:[ ^ #() ].
+    selectedColumnIndex isNumber ifTrue:[ ^ Array with:selectedColumnIndex ].
+    ^selectedColumnIndex
+!
+
+selectedColumns
+    selectedColumnIndex isCollection ifTrue:[
+        ^ selectedColumnIndex collect:[:idx | columns at:idx] 
+    ].
+
+    ^ selectedColumnIndex == 0 
+        ifFalse:[ Array with:(columns at:selectedColumnIndex) ]
+        ifTrue: [ #() ]
+!
+
+singleSelectedColumnIndex
+    selectedColumnIndex isCollection ifTrue:[
+        ^ selectedColumnIndex size == 1 
+            ifTrue:[ selectedColumnIndex first ]
+            ifFalse:[ 0 ] 
+    ].
+
+    ^ selectedColumnIndex
+!
+
+tabSelection:something
+    "changes selected tab and set corresponding specification"
+
+    |view spec|
+
+    something == tabSelection ifTrue:[^self].
+
+    (tabSelection := something) isNil ifTrue:[
+        tabSelection == 0 ifTrue:[^ self].
+        tabSelection := 0.
+    ].
+
+    self selectedColumn isNil ifTrue:[
+        tabSelection ~~ 0 ifTrue:[
+            self tabModel value:0
+        ] ifFalse:[
+            self canvasHolder value:nil
+        ].
+        ^ self
+    ].
+
+    tabSelection == 0 ifTrue:[
+        ^ self tabModel value:1.
+    ].
+
+    (view := listOfSpecViews at:tabSelection) isNil ifTrue:[
+        view := SimpleView new.
+        spec := (self class slices at:tabSelection) last.
+
+"/        view client:nil spec:(self class interfaceSpecFor:spec) builder:(self builder).
+        view client:self spec:spec builder:(self builder).
+        listOfSpecViews at:tabSelection put:view.
+    ].
+    self canvasHolder value:view
+! !
+
+!DataSetBuilder methodsFor:'startup & release'!
+
+commonPostBuild
+    columnView := self componentAt:#columnView.
+
+    columns notEmpty ifTrue: [
+        self tabModel value: 1. 
+        self selectedColumnModel value:nil; value:1.    "/ toggle to force change
+        self updateInputFields.
+        self updateInfoLabel.
+        self updateHistory
+    ].
+
+    (self componentAt: #labelAndColumns) 
+        selectConditionBlock: [:i|self askForItemModification];
+        action: [:i|self cancel];
+        selection: 1.
+
+    "/ using masters infoHolder ?
+    (builder aspectAt:#useAlienInfoLabelHolder) == true ifTrue:[
+        (builder componentAt:#mainPanel) layout bottomOffset:0.
+        (builder componentAt:#infoBarSubSpec) beInvisible
+    ]                         
+!
+
+openModal
+    "sets the modalOpened flag, so later, 
+     there is no need to ask for saving into a class"
+
+    modalOpened := true.
+    super openModal
+!
+
+openModalOnResourceSpec: aListSpec
+    "sets the modalOpened flag, so later, 
+     there is no need to ask for saving into a class"
+
+    modalOpened := true.
+    super openModalOnResourceSpec: aListSpec
+
+
+!
+
+postBuildListOfItemsView:aView
+    listOfItemsView := aView
+!
+
+postBuildSpecView:aView
+    listOfItemsView := aView
+!
+
+postOpenWith:aBuilder
+    "reset keyboardProcessor for menuBar"
+
+    super postOpenWith:aBuilder.
+    aBuilder keyboardProcessor menuBar:nil.
+    self windowGroup addPreEventHook:self.
+! !
+
 !DataSetBuilder::Row methodsFor:'accessing'!
 
 choices