DataSetBuilder.st
author Claus Gittinger <cg@exept.de>
Wed, 29 Jul 2009 20:02:02 +0200
changeset 2570 4e663bc64364
parent 2558 1acb2765094d
child 2625 79538500354a
permissions -rw-r--r--
changed #requestPackage
     1 "
     2  COPYRIGHT (c) 1997 by eXept Software AG
     3               All Rights Reserved
     4 
     5  This software is furnished under a license and may be used
     6  only in accordance with the terms of that license and with the
     7  inclusion of the above copyright notice.   This software may not
     8  be provided or otherwise made available to, or used by, any
     9  other person.  No title to or ownership of the software is
    10  hereby transferred.
    11 "
    12 "{ Package: 'stx:libtool2' }"
    13 
    14 ResourceSpecEditor subclass:#DataSetBuilder
    15 	instanceVariableNames:'rowClass rowSuperClass columnView columns selectedColumnIndex
    16 		modalOpened listOfSpecViews listOfItemsView editingSpecOnly
    17 		acceptedColumns'
    18 	classVariableNames:''
    19 	poolDictionaries:''
    20 	category:'Interface-UIPainter'
    21 !
    22 
    23 Array variableSubclass:#Row
    24 	instanceVariableNames:''
    25 	classVariableNames:''
    26 	poolDictionaries:''
    27 	privateIn:DataSetBuilder
    28 !
    29 
    30 !DataSetBuilder class methodsFor:'documentation'!
    31 
    32 copyright
    33 "
    34  COPYRIGHT (c) 1997 by eXept Software AG
    35               All Rights Reserved
    36 
    37  This software is furnished under a license and may be used
    38  only in accordance with the terms of that license and with the
    39  inclusion of the above copyright notice.   This software may not
    40  be provided or otherwise made available to, or used by, any
    41  other person.  No title to or ownership of the software is
    42  hereby transferred.
    43 "
    44 
    45 
    46 
    47 
    48 !
    49 
    50 documentation
    51 "
    52     create and modify or inspect dataset columns; used by UIPainter (DataSetColumnSpec)
    53 
    54     [see also:]
    55         DataSetColumnSpec
    56         DataSetSpec
    57         DataSetView
    58         DataSetColumn
    59 
    60     [author:]
    61         Claus Atzkern, eXept Software AG
    62 "
    63 
    64 ! !
    65 
    66 !DataSetBuilder class methodsFor:'accessing'!
    67 
    68 resourceType
    69     "get the type of resource of the method generated by the MenuEditor"
    70 
    71     ^#tableColumns
    72 
    73 
    74 ! !
    75 
    76 !DataSetBuilder class methodsFor:'aspects'!
    77 
    78 aspects
    79     "get the aspects for the attributes of the table columns"
    80 
    81     ^#(
    82         id
    83         activeHelpKey
    84         activeHelpKeyForLabel
    85         label
    86         canSelect
    87         choices
    88         translatedChoices
    89         editorType
    90         formatString
    91         formatSelector
    92         labelIsImage
    93         labelButtonType
    94         translateLabel
    95         longStringCompression
    96         size
    97         type
    98         width
    99         minWidth
   100         usePreferredWidth
   101         isResizeable
   102         height
   103         menu
   104         foregroundSelector
   105         backgroundSelector
   106         selectedForegroundSelector
   107         selectedBackgroundSelector
   108         doubleClickedSelector
   109         rowSeparatorSelector
   110         selectSelector
   111         converterSelector
   112         showComboFieldSelector
   113         printSelector
   114         readSelector
   115         writeSelector
   116         visibilitySelector
   117         rendererType
   118         showColSeparator
   119         showSelectionHighLighted
   120         showRowSeparator
   121         backgroundColor
   122         foregroundColor
   123         selectedBackgroundColor
   124         selectedForegroundColor
   125         labelForegroundColor
   126         labelBackgroundColor
   127         labelFont
   128         labelActionSelector
   129         labelActionArgument
   130         labelAlignment
   131         columnAlignment
   132         minValue
   133         maxValue
   134         isSortable
   135      )
   136 
   137     "Modified: / 26-03-2007 / 14:05:10 / cg"
   138 ! !
   139 
   140 !DataSetBuilder class methodsFor:'help specs'!
   141 
   142 flyByHelpSpec
   143     "This resource specification was automatically generated
   144      by the UIHelpTool of ST/X."
   145 
   146     "Do not manually edit this!! If it is corrupted,
   147      the UIHelpTool may not be able to read the specification."
   148 
   149     "
   150      UIHelpTool openOnClass:DataSetBuilder    
   151     "
   152 
   153     <resource: #help>
   154 
   155     ^ super flyByHelpSpec addPairsFrom:#(
   156 
   157 #addColumn
   158 'Add a Column'
   159 
   160 #addNonSelectableColumn
   161 'Add a Non-Selectable Column'
   162 
   163 #fileLoad
   164 'Load Column Description from Method'
   165 
   166 #fileNew
   167 'New Column Description'
   168 
   169 #fileSave
   170 'Save the Column Description'
   171 
   172 #fileSaveMethod
   173 'Save Column Description as Method'
   174 
   175 #fileSaveAsMethod
   176 'Save Column Description as Method (ask for Class/Selector)'
   177 
   178 #editCut
   179 'Cut Column'
   180 
   181 #editCopy
   182 'Copy Column'
   183 
   184 #editPaste
   185 'Paste Column'
   186 
   187 )
   188 !
   189 
   190 helpSpec
   191     "This resource specification was automatically generated
   192      by the UIHelpTool of ST/X."
   193 
   194     "Do not manually edit this!! If it is corrupted,
   195      the UIHelpTool may not be able to read the specification."
   196 
   197     "
   198      UIHelpTool openOnClass:DataSetBuilder    
   199     "
   200 
   201     <resource: #help>
   202 
   203     ^ super helpSpec addPairsFrom:#(
   204 
   205 #addColumn
   206 'Adds a new column.'
   207 
   208 #addNonSelectableColumn
   209 'Adds a new non-selectable column.'
   210 
   211 #basicsEditor
   212 'Default widget type or a selector returning an instance of a user defined widget opened in the cell.'
   213 
   214 #basicsFont
   215 'Sets the font of the labeled text.'
   216 
   217 #isSortable
   218 'Adds indicator to allow user to sort rows based on this column.'
   219 
   220 #sortSelector
   221 'Sent to the row to extract the column-value used for sorting'
   222 
   223 #basicsJustification
   224 'Aligns the label to the left, right, or center in the cell.'
   225 
   226 #basicsJustificationEditor
   227 'Aligns the column editor to the left, right, or center in the cell.'
   228 
   229 #basicsLabel
   230 'The label of the column, a String or an array of Strings.'
   231 
   232 #basicsLabelId
   233 'Unique identifier of the column (optional).'
   234 
   235 #basicsLabelIsImage
   236 'Label is actually the selector of a message providing an image-label.'
   237 
   238 #basicsLabelTranslate
   239 'Translate the label via the resource mechanism to a national language string.'
   240 
   241 #basicsRenderer
   242 'Specifies displaying cell as Text, CheckToggle, ComboBox, ComboList or as a RowSelector.'
   243 
   244 #browseRowClass
   245 'Open a browser on the row class'
   246 
   247 #colorsBackgroundCellColor
   248 'The background color of the cell.'
   249 
   250 #colorsBackgroundLabelColor
   251 'The background color of the label.'
   252 
   253 #colorsBackgroundSelector
   254 'Optional selector returning the background color for the cell.'
   255 
   256 #colorsForegroundCellColor
   257 'The foreground color of the cell.'
   258 
   259 #colorsForegroundLabelColor
   260 'The foreground color of the label.'
   261 
   262 #colorsForegroundSelector
   263 'Optional selector returning the foreground color for a cell.'
   264 
   265 #converterSelector
   266 'Selector returning a TypeConverter on the model the argument or nil.'
   267 
   268 #fileLoad
   269 'Specify class/selector and edit that column description'
   270 
   271 #fileNew
   272 'Discard changes and continue with a new, empty column description'
   273 
   274 #fileSave
   275 'Install the column description'
   276 
   277 #fileSaveAs
   278 'Specify class/selector and install the column description'
   279 
   280 #formatFormatSelector
   281 'Selector sent to the row to get the format string.'
   282 
   283 #formatInputType
   284 'A type converter symbol used by the input field.'
   285 
   286 #formatMaxSize
   287 'Maximum size of the string which can be typed in. 0 or nil means unlimited.'
   288 
   289 #formatTextFormat
   290 'Format string specifying the output format of the cell text. (printf-format - for example: %5.4f gives 0.0000).'
   291 
   292 #frameColumnWidth
   293 'Width (fixed or relative) of a column (optional).'
   294 
   295 #frameMinWidth
   296 'Minimum width of the column (optional).'
   297 
   298 #frameRowHeight
   299 'Height of the row (optional).'
   300 
   301 #frameShowColumnSeparator
   302 'Turns on/off displaying column separators.'
   303 
   304 #frameShowRowSeparator
   305 'Turns on/off displaying row separators.'
   306 
   307 #frameShowRowSeparatorSelector
   308 'Message selector to test if the bottom separator is shown.'
   309 
   310 #generateCode
   311 'Generate code and install in the selected class/selector.'
   312 
   313 #isResizable
   314 'Column can be resized by user.'
   315 
   316 #pickColumns
   317 'Select an open view and readOut the column specification from it.'
   318 
   319 #selectedBackgroundCellColor
   320 'Optional background color of a selected cell.'
   321 
   322 #selectedBackgroundCellColorSelector
   323 'Optional selector returning the background color for a selected cell.'
   324 
   325 #selectedForegroundCellColor
   326 'Optional foreground color of a selected cell.'
   327 
   328 #selectedForegroundCellColorSelector
   329 'Optional selector returning the foreground color for a selected cell.'
   330 
   331 #selectionCellClickSelector
   332 'Message sent if cell is about to be selected - return boolean to en/disable editing'
   333 
   334 #selectionCellDoubleClickSelector
   335 'Message sent if cell is double clicked'
   336 
   337 #selectionCellSelector
   338 'Name of the message sent to the row to validate a selection.'
   339 
   340 #selectionIsSelectable
   341 'Turns on/off selection behavior of a column.'
   342 
   343 #selectionLabelClickSelector
   344 'Message sent if a columns label was clicked on'
   345 
   346 #selectionLabelSelectorArgument
   347 'An optional argument passed with the message above.'
   348 
   349 #showComboFieldSelector
   350 'Selector which returns true if the editor on the ComboBox/List has an input field.'
   351 
   352 #showSelectionHighLighted
   353 'Show selected cell highligthened (change fg/bg color).'
   354 
   355 #usePreferredWidth
   356 'Compute width from first 10 row items.'
   357 
   358 #valuesChoicesSelector
   359 'Selector to get a collection of choices for a cell having a ComboBox or a ComboList widget.'
   360 
   361 #valuesMenuSelector
   362 'Selector to retrive the middle button menu.'
   363 
   364 #valuesPrintSelector
   365 'Selector used to register images on a DSVColumnView (the arg). For more detailed info see #register... methods in DSVColumnView.'
   366 
   367 #valuesReadSelector
   368 'Selector returning the label to be displayed (string, bitmap or a collection).'
   369 
   370 #valuesVisibilitySelector
   371 'Boolean message selector controlling the columns visibility.'
   372 
   373 #valuesWriteSelector
   374 'Selector used to set the value derived from the editor.'
   375 
   376 #valuesXChoicesSelector
   377 'Selector to get a collection of translated choices for a cell having a ComboBox or a ComboList widget.'
   378 
   379 )
   380 ! !
   381 
   382 !DataSetBuilder class methodsFor:'image specs'!
   383 
   384 newColumnIcon
   385     "This resource specification was automatically generated
   386      by the ImageEditor of ST/X."
   387 
   388     "Do not manually edit this!! If it is corrupted,
   389      the ImageEditor may not be able to read the specification."
   390 
   391     "
   392      self newColumnIcon inspect
   393      ImageEditor openOnClass:self andSelector:#newColumnIcon
   394      Icon flushCachedIcons
   395     "
   396 
   397     <resource: #image>
   398 
   399     ^Icon
   400         constantNamed:#'DataSetBuilder class newColumnIcon'
   401         ifAbsentPut:[(Depth2Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   402 U@@@@EQTUUUXUEQ***1TUF (+EQTX*H,UEQ"("1TUF (+EQTZ**,UEQ"("1TUFJ"KEQTX*H,UEQ HB1TUF**+EQTZ**,UEQ"H"1TUF@ KEQTX"@,UEQ"H"1T
   403 UF**+EQTZ**,UER???1TU@@@@EPb') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127]; mask:((Depth1Image new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@') ; yourself); yourself]
   404 !
   405 
   406 newColumnNonSelectableIcon
   407     "This resource specification was automatically generated
   408      by the ImageEditor of ST/X."
   409 
   410     "Do not manually edit this!! If it is corrupted,
   411      the ImageEditor may not be able to read the specification."
   412 
   413     "
   414      self newColumnNonSelectableIcon inspect
   415      ImageEditor openOnClass:self andSelector:#newColumnNonSelectableIcon
   416      Icon flushCachedIcons
   417     "
   418 
   419     <resource: #image>
   420 
   421     ^Icon
   422         constantNamed:#'DataSetBuilder class newColumnNonSelectableIcon'
   423         ifAbsentPut:[(Depth2Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   424 U@@@@EQTUUUXUEQ***1TUF**+EQTX*(,UEQ"*"1TUFB(KEQTZJ",UEQ(HJ1TUF("+EQTZ J,UEQ*@*1TUF("+EQTZBB,UEQ(*J1TUFB(KEQTX*(,UEQ"*"1T
   425 UF**+EQTZ**,UER???1TU@@@@EPb') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127]; mask:((Depth1Image new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@') ; yourself); yourself]
   426 ! !
   427 
   428 !DataSetBuilder class methodsFor:'interface specs'!
   429 
   430 basicsEditSpec
   431     "This resource specification was automatically generated
   432      by the UIPainter of ST/X."
   433 
   434     "Do not manually edit this!! If it is corrupted,
   435      the UIPainter may not be able to read the specification."
   436 
   437     "
   438      UIPainter new openOnClass:DataSetBuilder andSelector:#basicsEditSpec
   439      DataSetBuilder new openInterface:#basicsEditSpec
   440     "
   441 
   442     <resource: #canvas>
   443 
   444     ^ 
   445      #(FullSpec
   446         name: basicsEditSpec
   447         window: 
   448        (WindowSpec
   449           label: 'DataSet Basic'
   450           name: 'DataSet Basic'
   451           min: (Point 10 10)
   452           bounds: (Rectangle 0 0 389 473)
   453         )
   454         component: 
   455        (SpecCollection
   456           collection: (
   457            (VerticalPanelViewSpec
   458               name: 'VerticalPanel1'
   459               layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
   460               horizontalLayout: fit
   461               verticalLayout: top
   462               horizontalSpace: 3
   463               verticalSpace: 3
   464               component: 
   465              (SpecCollection
   466                 collection: (
   467                  (FramedBoxSpec
   468                     label: 'Header:'
   469                     name: 'headerFrame'
   470                     labelPosition: topLeft
   471                     translateLabel: true
   472                     component: 
   473                    (SpecCollection
   474                       collection: (
   475                        (LabelSpec
   476                           label: 'ID:'
   477                           name: 'idLabel'
   478                           layout: (AlignmentOrigin 94 0 14 0 1 0.5)
   479                           translateLabel: true
   480                           resizeForLabel: true
   481                         )
   482                        (InputFieldSpec
   483                           name: 'idField'
   484                           layout: (LayoutFrame 97 0 0 0 2 1.0 22 0)
   485                           activeHelpKey: basicsLabelId
   486                           tabable: true
   487                           model: id
   488                           group: inputGroup
   489                           acceptOnLostFocus: false
   490                           acceptChannel: acceptChannel
   491                           modifiedChannel: modifiedChannel
   492                           acceptOnPointerLeave: false
   493                         )
   494                        (LabelSpec
   495                           label: 'Label:'
   496                           name: 'label1'
   497                           layout: (AlignmentOrigin 94 0 39 0 1 0.5)
   498                           translateLabel: true
   499                           resizeForLabel: true
   500                         )
   501                        (InputFieldSpec
   502                           name: 'labelField'
   503                           layout: (LayoutFrame 97 0 28 0 2 1.0 50 0)
   504                           activeHelpKey: basicsLabel
   505                           tabable: true
   506                           model: label
   507                           group: inputGroup
   508                           type: smalltalkObject
   509                           immediateAccept: false
   510                           acceptOnLeave: false
   511                           acceptOnLostFocus: false
   512                           acceptChannel: acceptChannel
   513                           modifiedChannel: modifiedChannel
   514                           acceptOnPointerLeave: false
   515                         )
   516                        (LabelSpec
   517                           label: 'Font:'
   518                           name: 'LabelFont'
   519                           layout: (AlignmentOrigin 94 0 68 0 1 0.5)
   520                           translateLabel: true
   521                           resizeForLabel: true
   522                           adjust: left
   523                         )
   524                        (FontMenuSpec
   525                           name: 'fontMenu'
   526                           layout: (LayoutFrame 97 0 56 0 0 1.0 78 0)
   527                           activeHelpKey: labelFont
   528                           model: style
   529                           allowSymbolicFonts: true
   530                         )
   531                        (LabelSpec
   532                           label: 'Type:'
   533                           name: 'Type'
   534                           layout: (AlignmentOrigin 52 0 100 0 1 0.5)
   535                           translateLabel: true
   536                           resizeForLabel: true
   537                           adjust: right
   538                         )
   539                        (ComboListSpec
   540                           name: 'labelButtonType'
   541                           layout: (LayoutFrame 57 0 91 0 158 0 111 0)
   542                           tabable: true
   543                           model: labelButtonType
   544                           comboList: 
   545                          (Array
   546                             None Button
   547                             Group
   548                           )
   549                           useIndex: false
   550                           hidePullDownMenuButton: false
   551                         )
   552                        (LabelSpec
   553                           label: 'Align:'
   554                           name: 'JustificationLabel'
   555                           layout: (AlignmentOrigin 243 0 100 0 1 0.5)
   556                           translateLabel: true
   557                           resizeForLabel: true
   558                           adjust: right
   559                         )
   560                        (PopUpListSpec
   561                           label: 'Alignment'
   562                           name: 'Alignment'
   563                           layout: (LayoutFrame 248 0 91 0 2 1.0 113 0)
   564                           activeHelpKey: basicsJustification
   565                           tabable: true
   566                           model: labelAlignment
   567                           menu: 
   568                          (Array
   569                             left right
   570                             center
   571                           )
   572                         )
   573                        (CheckBoxSpec
   574                           label: 'Label Is Image'
   575                           name: 'labelIsImage'
   576                           layout: (LayoutOrigin -3 0 120 0)
   577                           activeHelpKey: basicsLabelIsImage
   578                           tabable: true
   579                           model: labelIsImage
   580                           translateLabel: true
   581                         )
   582                        (CheckBoxSpec
   583                           label: 'Translate Label'
   584                           name: 'CheckBox2'
   585                           layout: (LayoutOrigin 200 0 120 0)
   586                           activeHelpKey: basicsLabelTranslate
   587                           tabable: true
   588                           model: translateLabel
   589                           translateLabel: true
   590                         )
   591                        )
   592                      
   593                     )
   594                     extent: (Point 389 176)
   595                   )
   596                  (FramedBoxSpec
   597                     label: 'Cell Type:'
   598                     name: 'typesFrame'
   599                     labelPosition: topLeft
   600                     translateLabel: true
   601                     component: 
   602                    (SpecCollection
   603                       collection: (
   604                        (LabelSpec
   605                           label: 'Renderer:'
   606                           name: 'rendererLabel'
   607                           layout: (AlignmentOrigin 94 0 16 0 1 0.5)
   608                           translateLabel: true
   609                           resizeForLabel: true
   610                         )
   611                        (ComboListSpec
   612                           name: 'rendererField'
   613                           layout: (LayoutFrame 97 0 5 0 2 1.0 27 0)
   614                           activeHelpKey: basicsRenderer
   615                           tabable: true
   616                           model: rendererType
   617                           comboList: rendererTypeList
   618                           useIndex: false
   619                           hidePullDownMenuButton: false
   620                         )
   621                        (LabelSpec
   622                           label: 'Editor:'
   623                           name: 'editorLabel'
   624                           layout: (AlignmentOrigin 94 0 42 0 1 0.5)
   625                           translateLabel: true
   626                           resizeForLabel: true
   627                         )
   628                        (ComboBoxSpec
   629                           name: 'editorField'
   630                           layout: (LayoutFrame 97 0 31 0 2 1.0 53 0)
   631                           activeHelpKey: basicsEditor
   632                           tabable: true
   633                           model: editorType
   634                           type: symbolOrNil
   635                           acceptOnLostFocus: false
   636                           acceptChannel: acceptChannel
   637                           modifiedChannel: modifiedChannel
   638                           acceptOnPointerLeave: false
   639                           comboList: editorTypeList
   640                           useIndex: false
   641                           isFilenameBox: false
   642                         )
   643                        (LabelSpec
   644                           label: 'Align:'
   645                           name: 'JustificationC'
   646                           layout: (LayoutFrame -194 1 58 0 -114 1 79 0)
   647                           translateLabel: true
   648                           resizeForLabel: true
   649                           adjust: right
   650                         )
   651                        (PopUpListSpec
   652                           label: 'Alignment'
   653                           name: 'AlignmentC'
   654                           layout: (LayoutFrame -115 1 58 0 2 1.0 80 0)
   655                           activeHelpKey: basicsJustificationEditor
   656                           tabable: true
   657                           model: columnAlignment
   658                           menu: 
   659                          (Array
   660                             left right
   661                             center decimal decimalRight
   662                           )
   663                         )
   664                        (CheckBoxSpec
   665                           label: 'Compress Long Strings'
   666                           name: 'LongStringCompressionCheckBox'
   667                           layout: (LayoutFrame -3 0 58 0 188 0 79 0)
   668                           activeHelpKey: basicsLabelTranslate
   669                           tabable: true
   670                           model: longStringCompression
   671                           translateLabel: true
   672                         )
   673                        )
   674                      
   675                     )
   676                     extent: (Point 389 114)
   677                   )
   678                  (FramedBoxSpec
   679                     label: 'Active Help:'
   680                     name: 'activeHelpFrame'
   681                     labelPosition: topLeft
   682                     translateLabel: true
   683                     component: 
   684                    (SpecCollection
   685                       collection: (
   686                        (LabelSpec
   687                           label: 'Key:'
   688                           name: 'Label1'
   689                           layout: (AlignmentOrigin 94 0 14 0 1 0.5)
   690                           translateLabel: true
   691                           resizeForLabel: true
   692                         )
   693                        (InputFieldSpec
   694                           name: 'EntryField1'
   695                           layout: (LayoutFrame 97 0 0 0 2 1.0 22 0)
   696                           activeHelpKey: basicsLabelId
   697                           tabable: true
   698                           model: activeHelpKey
   699                           group: inputGroup
   700                           acceptOnLostFocus: false
   701                           acceptChannel: acceptChannel
   702                           modifiedChannel: modifiedChannel
   703                           acceptOnPointerLeave: false
   704                         )
   705                        (LabelSpec
   706                           label: 'Key for Label:'
   707                           name: 'Label2'
   708                           layout: (AlignmentOrigin 94 0 42 0 1 0.5)
   709                           translateLabel: true
   710                           resizeForLabel: true
   711                         )
   712                        (InputFieldSpec
   713                           name: 'EntryField2'
   714                           layout: (LayoutFrame 97 0 28 0 2 1.0 50 0)
   715                           activeHelpKey: basicsLabelId
   716                           tabable: true
   717                           model: activeHelpKeyForLabel
   718                           group: inputGroup
   719                           acceptOnLostFocus: false
   720                           acceptChannel: acceptChannel
   721                           modifiedChannel: modifiedChannel
   722                           acceptOnPointerLeave: false
   723                         )
   724                        )
   725                      
   726                     )
   727                     extent: (Point 389 81)
   728                   )
   729                  )
   730                
   731               )
   732             )
   733            )
   734          
   735         )
   736       )
   737 !
   738 
   739 colorsEditSpec
   740     "This resource specification was automatically generated
   741      by the UIPainter of ST/X."
   742 
   743     "Do not manually edit this!! If it is corrupted,
   744      the UIPainter may not be able to read the specification."
   745 
   746     "
   747      UIPainter new openOnClass:DataSetBuilder andSelector:#colorsEditSpec
   748      DataSetBuilder new openInterface:#colorsEditSpec
   749     "
   750 
   751     <resource: #canvas>
   752 
   753     ^ 
   754      #(FullSpec
   755         name: colorsEditSpec
   756         window: 
   757        (WindowSpec
   758           label: 'DataSet Misc'
   759           name: 'DataSet Misc'
   760           min: (Point 10 10)
   761           bounds: (Rectangle 0 0 369 451)
   762         )
   763         component: 
   764        (SpecCollection
   765           collection: (
   766            (FramedBoxSpec
   767               label: 'Label Colors:'
   768               name: 'ColorsBox'
   769               layout: (LayoutFrame 0 0.0 3 0 0 1.0 86 0)
   770               labelPosition: topLeft
   771               translateLabel: true
   772               component: 
   773              (SpecCollection
   774                 collection: (
   775                  (LabelSpec
   776                     label: 'Foreground:'
   777                     name: 'label1'
   778                     layout: (AlignmentOrigin 112 0 14 0 1 0.5)
   779                     translateLabel: true
   780                     resizeForLabel: true
   781                     adjust: right
   782                   )
   783                  (ColorMenuSpec
   784                     name: 'colorMenu1'
   785                     layout: (LayoutFrame 115 0 2 0 -3 1.0 24 0)
   786                     activeHelpKey: colorsForegroundLabelColor
   787                     model: labelForegroundColor
   788                     labelsAreColored: true
   789                   )
   790                  (LabelSpec
   791                     label: 'Background:'
   792                     name: 'label2'
   793                     layout: (AlignmentOrigin 112 0 42 0 1 0.5)
   794                     translateLabel: true
   795                     resizeForLabel: true
   796                     adjust: right
   797                   )
   798                  (ColorMenuSpec
   799                     name: 'colorMenu2'
   800                     layout: (LayoutFrame 115 0 30 0 -3 1.0 52 0)
   801                     activeHelpKey: colorsBackgroundLabelColor
   802                     model: labelBackgroundColor
   803                     labelsAreColored: false
   804                   )
   805                  )
   806                
   807               )
   808             )
   809            (FramedBoxSpec
   810               label: 'Cell Colors:'
   811               name: 'defaultColorsBox'
   812               layout: (LayoutFrame 0 0.0 91 0 0 1.0 232 0)
   813               labelPosition: topLeft
   814               translateLabel: true
   815               component: 
   816              (SpecCollection
   817                 collection: (
   818                  (LabelSpec
   819                     label: 'Foreground:'
   820                     name: 'fgLabel'
   821                     layout: (AlignmentOrigin 112 0 11 0 1 0.5)
   822                     translateLabel: true
   823                     resizeForLabel: true
   824                     adjust: right
   825                   )
   826                  (ColorMenuSpec
   827                     name: 'fgMenu'
   828                     layout: (LayoutFrame 115 0 -1 0 -3 1.0 21 0)
   829                     activeHelpKey: colorsForegroundCellColor
   830                     model: foregroundColor
   831                     labelsAreColored: true
   832                   )
   833                  (LabelSpec
   834                     label: 'Background:'
   835                     name: 'bgLabel'
   836                     layout: (AlignmentOrigin 112 0 39 0 1 0.5)
   837                     translateLabel: true
   838                     resizeForLabel: true
   839                     adjust: right
   840                   )
   841                  (ColorMenuSpec
   842                     name: 'bgMenu'
   843                     layout: (LayoutFrame 115 0 27 0 -3 1.0 49 0)
   844                     activeHelpKey: colorsBackgroundCellColor
   845                     model: backgroundColor
   846                     labelsAreColored: false
   847                   )
   848                  (LabelSpec
   849                     label: 'FG-Selector:'
   850                     name: 'fgSelLabel'
   851                     layout: (AlignmentOrigin 112 0 73 0 1 0.5)
   852                     translateLabel: true
   853                     resizeForLabel: true
   854                     adjust: right
   855                   )
   856                  (InputFieldSpec
   857                     name: 'fgSelField'
   858                     layout: (LayoutFrame 115 0 62 0 0 1.0 84 0)
   859                     activeHelpKey: colorsForegroundSelector
   860                     tabable: true
   861                     model: foregroundSelector
   862                     group: inputGroup
   863                     type: symbolOrNil
   864                     acceptOnLostFocus: false
   865                     acceptChannel: acceptChannel
   866                     modifiedChannel: modifiedChannel
   867                     acceptOnPointerLeave: false
   868                   )
   869                  (LabelSpec
   870                     label: 'BG-Selector:'
   871                     name: 'bgSelLabel'
   872                     layout: (AlignmentOrigin 112 0 98 0 1 0.5)
   873                     translateLabel: true
   874                     resizeForLabel: true
   875                     adjust: right
   876                   )
   877                  (InputFieldSpec
   878                     name: 'bgSelField'
   879                     layout: (LayoutFrame 115 0 87 0 0 1.0 109 0)
   880                     activeHelpKey: colorsBackgroundSelector
   881                     tabable: true
   882                     model: backgroundSelector
   883                     group: inputGroup
   884                     type: symbolOrNil
   885                     acceptOnLostFocus: false
   886                     acceptChannel: acceptChannel
   887                     modifiedChannel: modifiedChannel
   888                     acceptOnPointerLeave: false
   889                   )
   890                  )
   891                
   892               )
   893             )
   894            (FramedBoxSpec
   895               label: 'Selected Cell Colors:'
   896               name: 'selectedCellColorsBox'
   897               layout: (LayoutFrame 0 0.0 236 0 0 1.0 377 0)
   898               labelPosition: topLeft
   899               translateLabel: true
   900               component: 
   901              (SpecCollection
   902                 collection: (
   903                  (LabelSpec
   904                     label: 'Foreground:'
   905                     name: 'selFgLabel'
   906                     layout: (AlignmentOrigin 112 0 11 0 1 0.5)
   907                     translateLabel: true
   908                     resizeForLabel: true
   909                     adjust: right
   910                   )
   911                  (ColorMenuSpec
   912                     name: 'selFgMenu'
   913                     layout: (LayoutFrame 115 0 -1 0 -3 1.0 21 0)
   914                     activeHelpKey: selectedForegroundCellColorSelector
   915                     model: selectedForegroundColor
   916                     labelsAreColored: true
   917                   )
   918                  (LabelSpec
   919                     label: 'Background:'
   920                     name: 'selBgLabel'
   921                     layout: (AlignmentOrigin 112 0 39 0 1 0.5)
   922                     translateLabel: true
   923                     resizeForLabel: true
   924                     adjust: right
   925                   )
   926                  (ColorMenuSpec
   927                     name: 'selBgMenu'
   928                     layout: (LayoutFrame 115 0 27 0 -3 1.0 49 0)
   929                     activeHelpKey: colorsBackgroundCellColor
   930                     model: selectedBackgroundColor
   931                     labelsAreColored: false
   932                   )
   933                  (LabelSpec
   934                     label: 'FG-Selector:'
   935                     name: 'Label3'
   936                     layout: (AlignmentOrigin 112 0 73 0 1 0.5)
   937                     translateLabel: true
   938                     resizeForLabel: true
   939                     adjust: right
   940                   )
   941                  (InputFieldSpec
   942                     name: 'EntryField1'
   943                     layout: (LayoutFrame 115 0 62 0 0 1.0 84 0)
   944                     activeHelpKey: colorsForegroundSelector
   945                     tabable: true
   946                     model: selectedForegroundSelector
   947                     group: inputGroup
   948                     type: symbolOrNil
   949                     acceptOnLostFocus: false
   950                     acceptChannel: acceptChannel
   951                     modifiedChannel: modifiedChannel
   952                     acceptOnPointerLeave: false
   953                   )
   954                  (LabelSpec
   955                     label: 'BG-Selector:'
   956                     name: 'Label4'
   957                     layout: (AlignmentOrigin 112 0 98 0 1 0.5)
   958                     translateLabel: true
   959                     resizeForLabel: true
   960                     adjust: right
   961                   )
   962                  (InputFieldSpec
   963                     name: 'EntryField2'
   964                     layout: (LayoutFrame 115 0 87 0 0 1.0 109 0)
   965                     activeHelpKey: colorsBackgroundSelector
   966                     tabable: true
   967                     model: selectedBackgroundSelector
   968                     group: inputGroup
   969                     type: symbolOrNil
   970                     acceptOnLostFocus: false
   971                     acceptChannel: acceptChannel
   972                     modifiedChannel: modifiedChannel
   973                     acceptOnPointerLeave: false
   974                   )
   975                  )
   976                
   977               )
   978             )
   979            )
   980          
   981         )
   982       )
   983 !
   984 
   985 defineClassNameSpec
   986     "This resource specification was automatically generated
   987      by the UIPainter of ST/X."
   988 
   989     "Do not manually edit this!! If it is corrupted,
   990      the UIPainter may not be able to read the specification."
   991 
   992     "
   993      UIPainter new openOnClass:DataSetBuilder andSelector:#defineClassNameSpec
   994      DataSetBuilder new openInterface:#defineClassNameSpec
   995     "
   996 
   997     <resource: #canvas>
   998 
   999     ^ 
  1000      #(FullSpec
  1001         name: defineClassNameSpec
  1002         window: 
  1003        (WindowSpec
  1004           label: 'Data Set Builder'
  1005           name: 'Data Set Builder'
  1006           min: (Point 10 10)
  1007           bounds: (Rectangle 14 46 341 182)
  1008         )
  1009         component: 
  1010        (SpecCollection
  1011           collection: (
  1012            (FramedBoxSpec
  1013               label: 'Class for code'
  1014               name: 'framedBox1'
  1015               layout: (LayoutFrame 0 0.0 3 0.0 0 1.0 -34 1.0)
  1016               labelPosition: topLeft
  1017               translateLabel: true
  1018             )
  1019            (LabelSpec
  1020               label: 'Class:'
  1021               name: 'classLabel'
  1022               layout: (AlignmentOrigin 73 0.11 38 0 1 0.5)
  1023               translateLabel: true
  1024               resizeForLabel: true
  1025               adjust: right
  1026             )
  1027            (InputFieldSpec
  1028               name: 'classNameInputField'
  1029               layout: (LayoutFrame 77 0.11 27 0 -16 1.0 49 0)
  1030               tabable: true
  1031               model: classNameChannel
  1032               acceptOnPointerLeave: false
  1033             )
  1034            (LabelSpec
  1035               label: 'Superclass:'
  1036               name: 'superClassLabel'
  1037               layout: (AlignmentOrigin 73 0.11 65 0 1 0.5)
  1038               translateLabel: true
  1039               resizeForLabel: true
  1040               adjust: right
  1041             )
  1042            (InputFieldSpec
  1043               name: 'superclassNameInputField'
  1044               layout: (LayoutFrame 76 0.11 55 0 -16 1.0 77 0)
  1045               tabable: true
  1046               model: superclassNameChannel
  1047               acceptOnPointerLeave: false
  1048             )
  1049            (UISubSpecification
  1050               name: 'SubSpecification'
  1051               layout: (LayoutFrame 0 0.0 -29 1 0 1.0 -5 1.0)
  1052               majorKey: ToolApplicationModel
  1053               minorKey: windowSpecForCommitWithoutChannels
  1054             )
  1055            )
  1056          
  1057         )
  1058       )
  1059 !
  1060 
  1061 formatEditSpec
  1062     "This resource specification was automatically generated
  1063      by the UIPainter of ST/X."
  1064 
  1065     "Do not manually edit this!! If it is corrupted,
  1066      the UIPainter may not be able to read the specification."
  1067 
  1068     "
  1069      UIPainter new openOnClass:DataSetBuilder andSelector:#formatEditSpec
  1070      DataSetBuilder new openInterface:#formatEditSpec
  1071     "
  1072 
  1073     <resource: #canvas>
  1074 
  1075     ^ 
  1076      #(FullSpec
  1077         name: formatEditSpec
  1078         window: 
  1079        (WindowSpec
  1080           label: 'DataSet Details'
  1081           name: 'DataSet Details'
  1082           min: (Point 10 10)
  1083           bounds: (Rectangle 0 0 388 149)
  1084         )
  1085         component: 
  1086        (SpecCollection
  1087           collection: (
  1088            (FramedBoxSpec
  1089               label: 'Column Format'
  1090               name: 'framedBox1'
  1091               layout: (LayoutFrame 0 0.0 3 0 0 1.0 149 0)
  1092               labelPosition: topLeft
  1093               translateLabel: true
  1094               component: 
  1095              (SpecCollection
  1096                 collection: (
  1097                  (LabelSpec
  1098                     label: 'Type:'
  1099                     name: 'typeLabel'
  1100                     layout: (AlignmentOrigin 115 0 26 0 1 0.5)
  1101                     translateLabel: true
  1102                     resizeForLabel: true
  1103                     activeHelpKey: formatInputType
  1104                   )
  1105                  (ComboListSpec
  1106                     name: 'typeCombo'
  1107                     layout: (LayoutFrame 118 0 15 0 3 1.0 37 0)
  1108                     activeHelpKey: formatInputType
  1109                     tabable: true
  1110                     model: type
  1111                     comboList: possiblePrintConverterTypes
  1112                     useIndex: false
  1113                     hidePullDownMenuButton: false
  1114                   )
  1115                  (LabelSpec
  1116                     label: 'Max Size:'
  1117                     name: 'sizeLabel'
  1118                     layout: (AlignmentOrigin 115 0 52 0 1 0.5)
  1119                     translateLabel: true
  1120                     resizeForLabel: true
  1121                     activeHelpKey: formatMaxSize
  1122                   )
  1123                  (InputFieldSpec
  1124                     name: 'sizeField'
  1125                     layout: (LayoutFrame 118 0 41 0 3 1.0 63 0)
  1126                     activeHelpKey: formatMaxSize
  1127                     tabable: true
  1128                     model: size
  1129                     group: inputGroup
  1130                     type: numberOrNil
  1131                     acceptOnLostFocus: false
  1132                     acceptChannel: acceptChannel
  1133                     modifiedChannel: modifiedChannel
  1134                     acceptOnPointerLeave: false
  1135                   )
  1136                  (LabelSpec
  1137                     label: 'Text Format:'
  1138                     name: 'formatLabel'
  1139                     layout: (AlignmentOrigin 115 0 77 0 1 0.5)
  1140                     translateLabel: true
  1141                     resizeForLabel: true
  1142                     activeHelpKey: formatTextFormat
  1143                   )
  1144                  (InputFieldSpec
  1145                     name: 'formatField'
  1146                     layout: (LayoutFrame 118 0 66 0 3 1.0 88 0)
  1147                     activeHelpKey: formatTextFormat
  1148                     tabable: true
  1149                     model: formatString
  1150                     group: inputGroup
  1151                     acceptOnLostFocus: false
  1152                     acceptChannel: acceptChannel
  1153                     modifiedChannel: modifiedChannel
  1154                     acceptOnPointerLeave: false
  1155                   )
  1156                  (LabelSpec
  1157                     label: 'Format Selector:'
  1158                     name: 'formatSelectorLabel'
  1159                     layout: (AlignmentOrigin 115 0 103 0 1 0.5)
  1160                     translateLabel: true
  1161                     resizeForLabel: true
  1162                     activeHelpKey: formatFormatSelector
  1163                   )
  1164                  (InputFieldSpec
  1165                     name: 'formatSelector'
  1166                     layout: (LayoutFrame 118 0 92 0 3 1.0 114 0)
  1167                     activeHelpKey: formatFormatSelector
  1168                     tabable: true
  1169                     model: formatSelector
  1170                     group: inputGroup
  1171                     acceptOnLostFocus: false
  1172                     acceptChannel: acceptChannel
  1173                     modifiedChannel: modifiedChannel
  1174                     acceptOnPointerLeave: false
  1175                   )
  1176                  )
  1177                
  1178               )
  1179             )
  1180            )
  1181          
  1182         )
  1183       )
  1184 !
  1185 
  1186 frameEditSpec
  1187     "This resource specification was automatically generated
  1188      by the UIPainter of ST/X."
  1189 
  1190     "Do not manually edit this!! If it is corrupted,
  1191      the UIPainter may not be able to read the specification."
  1192 
  1193     "
  1194      UIPainter new openOnClass:DataSetBuilder andSelector:#frameEditSpec
  1195      DataSetBuilder new openInterface:#frameEditSpec
  1196     "
  1197 
  1198     <resource: #canvas>
  1199 
  1200     ^ 
  1201      #(FullSpec
  1202         name: frameEditSpec
  1203         window: 
  1204        (WindowSpec
  1205           label: 'DataSet Dimension'
  1206           name: 'DataSet Dimension'
  1207           min: (Point 10 10)
  1208           bounds: (Rectangle 0 0 396 313)
  1209         )
  1210         component: 
  1211        (SpecCollection
  1212           collection: (
  1213            (FramedBoxSpec
  1214               label: 'Separators'
  1215               name: 'separatorBox'
  1216               layout: (LayoutFrame 0 0.0 3 0 0 1.0 132 0)
  1217               labelPosition: topLeft
  1218                     translateLabel: true
  1219               component: 
  1220              (SpecCollection
  1221                 collection: (
  1222                  (CheckBoxSpec
  1223                     label: 'Show Row-Separator'
  1224                     name: 'showRowSeparator'
  1225                     layout: (LayoutFrame 5 0 15 0 293 0 38 0)
  1226                     activeHelpKey: frameShowRowSeparator
  1227                     tabable: true
  1228                     model: showRowSeparator
  1229                     translateLabel: true
  1230                   )
  1231                  (InputFieldSpec
  1232                     name: 'rowSeparatorSelector'
  1233                     layout: (LayoutFrame 142 0 41 0 2 1.0 63 0)
  1234                     activeHelpKey: frameShowRowSeparatorSelector
  1235                     tabable: true
  1236                     model: rowSeparatorSelector
  1237                     group: inputGroup
  1238                     type: symbolOrNil
  1239                     acceptOnLostFocus: false
  1240                     acceptChannel: acceptChannel
  1241                     modifiedChannel: modifiedChannel
  1242                     acceptOnPointerLeave: false
  1243                   )
  1244                  (CheckBoxSpec
  1245                     label: 'Show Column-Separator'
  1246                     name: 'showColSeparator'
  1247                     layout: (LayoutFrame 5 0 70 0 294 0 93 0)
  1248                     activeHelpKey: frameShowColumnSeparator
  1249                     tabable: true
  1250                     model: showColSeparator
  1251                     translateLabel: true
  1252                   )
  1253                  (LabelSpec
  1254                     label: 'Selector:'
  1255                     name: 'Label1'
  1256                     layout: (LayoutFrame 80 0.0 44 0 140 0.0 61 0)
  1257                     resizeForLabel: true
  1258                     adjust: right
  1259                     translateLabel: true
  1260                   )
  1261                  )
  1262                
  1263               )
  1264             )
  1265            (FramedBoxSpec
  1266               label: 'Dimensions:'
  1267               name: 'framedBox1'
  1268               layout: (LayoutFrame 0 0.0 133 0 0 1.0 305 0)
  1269               labelPosition: topLeft
  1270                     translateLabel: true
  1271               component: 
  1272              (SpecCollection
  1273                 collection: (
  1274                  (LabelSpec
  1275                     label: 'Column Width:'
  1276                     name: 'widthLabel'
  1277                     layout: (AlignmentOrigin 140 0.0 23 0 1 0.5)
  1278                     resizeForLabel: true
  1279                     adjust: right
  1280                     translateLabel: true
  1281                   )
  1282                  (InputFieldSpec
  1283                     name: 'widthField'
  1284                     layout: (LayoutFrame 142 0 12 0 2 1.0 34 0)
  1285                     activeHelpKey: frameColumnWidth
  1286                     tabable: true
  1287                     model: width
  1288                     group: inputGroup
  1289                     type: numberOrNil
  1290                     acceptOnLostFocus: false
  1291                     acceptChannel: acceptChannel
  1292                     modifiedChannel: modifiedChannel
  1293                     acceptOnPointerLeave: false
  1294                   )
  1295                  (LabelSpec
  1296                     label: 'Min. Width:'
  1297                     name: 'minWidthLabel'
  1298                     layout: (AlignmentOrigin 140 0.0 51 0 1 0.5)
  1299                     resizeForLabel: true
  1300                     adjust: right
  1301                     translateLabel: true
  1302                   )
  1303                  (InputFieldSpec
  1304                     name: 'minWidthField'
  1305                     layout: (LayoutFrame 142 0 40 0 2 1.0 62 0)
  1306                     activeHelpKey: frameMinWidth
  1307                     tabable: true
  1308                     model: minWidth
  1309                     group: inputGroup
  1310                     type: numberOrNil
  1311                     acceptOnLostFocus: false
  1312                     acceptChannel: acceptChannel
  1313                     modifiedChannel: modifiedChannel
  1314                     acceptOnPointerLeave: false
  1315                   )
  1316                  (LabelSpec
  1317                     label: 'Row Height:'
  1318                     name: 'heightLabel'
  1319                     layout: (AlignmentOrigin 140 0.0 79 0 1 0.5)
  1320                     resizeForLabel: true
  1321                     adjust: right
  1322                     translateLabel: true
  1323                   )
  1324                  (InputFieldSpec
  1325                     name: 'heightField'
  1326                     layout: (LayoutFrame 142 0 68 0 2 1.0 90 0)
  1327                     activeHelpKey: frameRowHeight
  1328                     tabable: true
  1329                     model: height
  1330                     group: inputGroup
  1331                     type: numberOrNil
  1332                     acceptOnLostFocus: false
  1333                     acceptChannel: acceptChannel
  1334                     modifiedChannel: modifiedChannel
  1335                     acceptOnPointerLeave: false
  1336                   )
  1337                  (CheckBoxSpec
  1338                     label: 'Compute Width from Items'
  1339                     name: 'usePreferredWidth'
  1340                     layout: (LayoutFrame 5 0 96 0 -5 1 118 0)
  1341                     activeHelpKey: usePreferredWidth
  1342                     tabable: true
  1343                     model: usePreferredWidth
  1344                     translateLabel: true
  1345                   )
  1346                  (CheckBoxSpec
  1347                     label: 'Is Resizeable'
  1348                     name: 'isResizeable'
  1349                     layout: (LayoutFrame 5 0 121 0 -5 1.0 144 0)
  1350                     activeHelpKey: isResizeable
  1351                     tabable: true
  1352                     model: isResizeable
  1353                     translateLabel: true
  1354                   )
  1355                  )
  1356                
  1357               )
  1358             )
  1359            )
  1360          
  1361         )
  1362       )
  1363 !
  1364 
  1365 selectionEditSpec
  1366     "This resource specification was automatically generated
  1367      by the UIPainter of ST/X."
  1368 
  1369     "Do not manually edit this!! If it is corrupted,
  1370      the UIPainter may not be able to read the specification."
  1371 
  1372     "
  1373      UIPainter new openOnClass:DataSetBuilder andSelector:#selectionEditSpec
  1374      DataSetBuilder new openInterface:#selectionEditSpec
  1375     "
  1376 
  1377     <resource: #canvas>
  1378 
  1379     ^ 
  1380      #(FullSpec
  1381         name: selectionEditSpec
  1382         window: 
  1383        (WindowSpec
  1384           label: 'DataSet Basic'
  1385           name: 'DataSet Basic'
  1386           min: (Point 10 10)
  1387           bounds: (Rectangle 0 0 331 328)
  1388         )
  1389         component: 
  1390        (SpecCollection
  1391           collection: (
  1392            (FramedBoxSpec
  1393               label: 'Label Select Action:'
  1394               name: 'LabelSelectAction'
  1395               layout: (LayoutFrame 0 0.0 3 0 0 1.0 97 0)
  1396               labelPosition: topLeft
  1397                     translateLabel: true
  1398               component: 
  1399              (SpecCollection
  1400                 collection: (
  1401                  (LabelSpec
  1402                     label: 'Selector:'
  1403                     name: 'ActionLabel'
  1404                     layout: (AlignmentOrigin 95 0 20 0 1 0.5)
  1405                     resizeForLabel: true
  1406                     adjust: left
  1407                     translateLabel: true
  1408                   )
  1409                  (InputFieldSpec
  1410                     name: 'ActionSelector'
  1411                     layout: (LayoutFrame 98 0 9 0 3 1.0 31 0)
  1412                     activeHelpKey: selectionLabelClickSelector
  1413                     tabable: true
  1414                     model: labelActionSelector
  1415                     group: inputGroup
  1416                     type: symbolOrNil
  1417                     acceptOnLostFocus: false
  1418                     acceptChannel: acceptChannel
  1419                     modifiedChannel: modifiedChannel
  1420                     acceptOnPointerLeave: false
  1421                   )
  1422                  (LabelSpec
  1423                     label: 'Argument:'
  1424                     name: 'ArgumentLabel'
  1425                     layout: (AlignmentOrigin 95 0 48 0 1 0.5)
  1426                     resizeForLabel: true
  1427                     adjust: left
  1428                     translateLabel: true
  1429                   )
  1430                  (InputFieldSpec
  1431                     name: 'ArgumentValue'
  1432                     layout: (LayoutFrame 98 0 37 0 3 1.0 59 0)
  1433                     activeHelpKey: selectionLabelSelectorArgument
  1434                     tabable: true
  1435                     model: labelActionArgument
  1436                     group: inputGroup
  1437                     type: string
  1438                     acceptOnLostFocus: false
  1439                     acceptChannel: acceptChannel
  1440                     modifiedChannel: modifiedChannel
  1441                     acceptOnPointerLeave: false
  1442                   )
  1443                  )
  1444                
  1445               )
  1446             )
  1447            (FramedBoxSpec
  1448               label: 'Cell Selection:'
  1449               name: 'CellSelection'
  1450               layout: (LayoutFrame 0 0.0 105 0 0 1.0 215 0)
  1451               labelPosition: topLeft
  1452                     translateLabel: true
  1453               component: 
  1454              (SpecCollection
  1455                 collection: (
  1456                  (CheckBoxSpec
  1457                     label: 'Is Selectable'
  1458                     name: 'canSelect'
  1459                     layout: (Point 95 -4)
  1460                     activeHelpKey: selectionIsSelectable
  1461                     tabable: true
  1462                     model: canSelect
  1463                     translateLabel: true
  1464                   )
  1465                  (LabelSpec
  1466                     label: 'Selector:'
  1467                     name: 'selectorLabel'
  1468                     layout: (AlignmentOrigin 95 0 37 0 1 0.5)
  1469                     resizeForLabel: true
  1470                     adjust: right
  1471                     translateLabel: true
  1472                   )
  1473                  (InputFieldSpec
  1474                     name: 'selectSelector'
  1475                     layout: (LayoutFrame 98 0 26 0 3 1.0 48 0)
  1476                     activeHelpKey: selectionCellClickSelector
  1477                     tabable: true
  1478                     model: selectSelector
  1479                     group: inputGroup
  1480                     type: symbolOrNil
  1481                     acceptOnLostFocus: false
  1482                     acceptChannel: acceptChannel
  1483                     modifiedChannel: modifiedChannel
  1484                     acceptOnPointerLeave: false
  1485                   )
  1486                  (CheckBoxSpec
  1487                     label: 'Show Selection HighLightened'
  1488                     name: 'showSelectionHighLightened'
  1489                     layout: (LayoutFrame 95 0 53 0 3 1.0 77 0)
  1490                     activeHelpKey: showSelectionHighLighted
  1491                     tabable: true
  1492                     model: showSelectionHighLighted
  1493                     translateLabel: true
  1494                   )
  1495                  )
  1496                
  1497               )
  1498             )
  1499            (FramedBoxSpec
  1500               label: 'Cell Double Click:'
  1501               name: 'CellDoubleClick'
  1502               layout: (LayoutFrame 0 0.0 227 0 0 1.0 293 0)
  1503               labelPosition: topLeft
  1504                     translateLabel: true
  1505               component: 
  1506              (SpecCollection
  1507                 collection: (
  1508                  (LabelSpec
  1509                     label: 'Selector:'
  1510                     name: 'doubleLabel'
  1511                     layout: (AlignmentOrigin 95 0 19 0 1 0.5)
  1512                     resizeForLabel: true
  1513                     adjust: right
  1514                     translateLabel: true
  1515                   )
  1516                  (InputFieldSpec
  1517                     name: 'doubleClicked'
  1518                     layout: (LayoutFrame 98 0 8 0 3 1.0 30 0)
  1519                     activeHelpKey: selectionCellDoubleClickSelector
  1520                     tabable: true
  1521                     model: doubleClickedSelector
  1522                     group: inputGroup
  1523                     type: symbolOrNil
  1524                     acceptOnLostFocus: false
  1525                     acceptChannel: acceptChannel
  1526                     modifiedChannel: modifiedChannel
  1527                     acceptOnPointerLeave: false
  1528                   )
  1529                  )
  1530                
  1531               )
  1532             )
  1533            )
  1534          
  1535         )
  1536       )
  1537 !
  1538 
  1539 slices
  1540     ^#(
  1541         (Basics         basicsEditSpec)
  1542         (Values         valuesEditSpec)
  1543         (Format         formatEditSpec)
  1544         (Sort           sortEditSpec)
  1545         (Selection      selectionEditSpec)
  1546         (Frame          frameEditSpec)
  1547         (Colors         colorsEditSpec)
  1548     )
  1549 !
  1550 
  1551 sortEditSpec
  1552     "This resource specification was automatically generated
  1553      by the UIPainter of ST/X."
  1554 
  1555     "Do not manually edit this!! If it is corrupted,
  1556      the UIPainter may not be able to read the specification."
  1557 
  1558     "
  1559      UIPainter new openOnClass:DataSetBuilder andSelector:#sortEditSpec
  1560      DataSetBuilder new openInterface:#sortEditSpec
  1561     "
  1562 
  1563     <resource: #canvas>
  1564 
  1565     ^ 
  1566      #(FullSpec
  1567         name: sortEditSpec
  1568         window: 
  1569        (WindowSpec
  1570           label: 'DataSet Basic'
  1571           name: 'DataSet Basic'
  1572           min: (Point 10 10)
  1573           bounds: (Rectangle 0 0 389 473)
  1574         )
  1575         component: 
  1576        (SpecCollection
  1577           collection: (
  1578            (VerticalPanelViewSpec
  1579               name: 'VerticalPanel1'
  1580               layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
  1581               horizontalLayout: fit
  1582               verticalLayout: top
  1583               horizontalSpace: 3
  1584               verticalSpace: 3
  1585               component: 
  1586              (SpecCollection
  1587                 collection: (
  1588                  (FramedBoxSpec
  1589                     label: 'Sorting:'
  1590                     name: 'sortFrame'
  1591                     labelPosition: topLeft
  1592                     translateLabel: true
  1593                     component: 
  1594                    (SpecCollection
  1595                       collection: (
  1596                        (CheckBoxSpec
  1597                           label: 'Sortable'
  1598                           name: 'isSortable'
  1599                           layout: (LayoutOrigin -3 0 0 0)
  1600                           activeHelpKey: isSortable
  1601                           tabable: true
  1602                           model: isSortable
  1603                           translateLabel: true
  1604                         )
  1605                        (LabelSpec
  1606                           label: 'Sort Selector:'
  1607                           name: 'sortSelector'
  1608                           layout: (AlignmentOrigin 90 0 42 0 1 0.5)
  1609                           activeHelpKey: sortSelector
  1610                           translateLabel: true
  1611                           resizeForLabel: true
  1612                           adjust: right
  1613                         )
  1614                        (InputFieldSpec
  1615                           name: 'EntryField3'
  1616                           layout: (LayoutFrame 93 0 30 0 2 1 56 0)
  1617                           activeHelpKey: sortSelector
  1618                           enableChannel: isSortable
  1619                           tabable: true
  1620                           model: sortSelector
  1621                           group: inputGroup
  1622                           type: symbolOrNil
  1623                           immediateAccept: false
  1624                           acceptOnLeave: false
  1625                           acceptOnLostFocus: false
  1626                           acceptChannel: acceptChannel
  1627                           modifiedChannel: modifiedChannel
  1628                           acceptOnPointerLeave: false
  1629                         )
  1630                        )
  1631                      
  1632                     )
  1633                     extent: (Point 389 94)
  1634                   )
  1635                  )
  1636                
  1637               )
  1638             )
  1639            )
  1640          
  1641         )
  1642       )
  1643 !
  1644 
  1645 valuesEditSpec
  1646     "This resource specification was automatically generated
  1647      by the UIPainter of ST/X."
  1648 
  1649     "Do not manually edit this!! If it is corrupted,
  1650      the UIPainter may not be able to read the specification."
  1651 
  1652     "
  1653      UIPainter new openOnClass:DataSetBuilder andSelector:#valuesEditSpec
  1654      DataSetBuilder new openInterface:#valuesEditSpec
  1655     "
  1656 
  1657     <resource: #canvas>
  1658 
  1659     ^ 
  1660      #(FullSpec
  1661         name: valuesEditSpec
  1662         window: 
  1663        (WindowSpec
  1664           label: 'DataSet Basic'
  1665           name: 'DataSet Basic'
  1666           min: (Point 10 10)
  1667           bounds: (Rectangle 0 0 436 387)
  1668         )
  1669         component: 
  1670        (SpecCollection
  1671           collection: (
  1672            (FramedBoxSpec
  1673               label: 'Value Selectors:'
  1674               name: 'valuesBox'
  1675               layout: (LayoutFrame 0 0.0 3 0 0 1.0 163 0)
  1676               labelPosition: topLeft
  1677               translateLabel: true
  1678               component: 
  1679              (SpecCollection
  1680                 collection: (
  1681                  (LabelSpec
  1682                     label: 'Read:'
  1683                     name: 'readLabel'
  1684                     layout: (AlignmentOrigin 94 0 15 0 1 0.5)
  1685                     translateLabel: true
  1686                     resizeForLabel: true
  1687                     adjust: right
  1688                   )
  1689                  (InputFieldSpec
  1690                     name: 'readSelector'
  1691                     layout: (LayoutFrame 97 0 4 0 2 1.0 26 0)
  1692                     activeHelpKey: valuesReadSelector
  1693                     tabable: true
  1694                     model: readSelector
  1695                     group: inputGroup
  1696                     type: symbolOrNil
  1697                     acceptOnLostFocus: false
  1698                     acceptChannel: acceptChannel
  1699                     modifiedChannel: modifiedChannel
  1700                     acceptOnPointerLeave: false
  1701                   )
  1702                  (LabelSpec
  1703                     label: 'Write:'
  1704                     name: 'writeLabel'
  1705                     layout: (AlignmentOrigin 94 0 40 0 1 0.5)
  1706                     translateLabel: true
  1707                     resizeForLabel: true
  1708                     adjust: right
  1709                   )
  1710                  (InputFieldSpec
  1711                     name: 'writeSelector'
  1712                     layout: (LayoutFrame 97 0 29 0 2 1.0 51 0)
  1713                     activeHelpKey: valuesWriteSelector
  1714                     tabable: true
  1715                     model: writeSelector
  1716                     group: inputGroup
  1717                     type: symbolOrNil
  1718                     acceptOnLostFocus: false
  1719                     acceptChannel: acceptChannel
  1720                     modifiedChannel: modifiedChannel
  1721                     acceptOnPointerLeave: false
  1722                   )
  1723                  (LabelSpec
  1724                     label: 'Converter:'
  1725                     name: 'converterLabel'
  1726                     layout: (AlignmentOrigin 94 0 65 0 1 0.5)
  1727                     translateLabel: true
  1728                     resizeForLabel: true
  1729                     adjust: right
  1730                   )
  1731                  (InputFieldSpec
  1732                     name: 'converterField'
  1733                     layout: (LayoutFrame 97 0 54 0 2 1.0 76 0)
  1734                     activeHelpKey: converterSelector
  1735                     tabable: true
  1736                     model: converterSelector
  1737                     group: inputGroup
  1738                     type: symbolOrNil
  1739                     acceptOnLostFocus: false
  1740                     acceptChannel: acceptChannel
  1741                     modifiedChannel: modifiedChannel
  1742                     acceptOnPointerLeave: false
  1743                   )
  1744                  (LabelSpec
  1745                     label: 'Print:'
  1746                     name: 'printLabel'
  1747                     layout: (AlignmentOrigin 94 0 90 0 1 0.5)
  1748                     translateLabel: true
  1749                     resizeForLabel: true
  1750                     adjust: right
  1751                   )
  1752                  (InputFieldSpec
  1753                     name: 'printSelector'
  1754                     layout: (LayoutFrame 97 0 79 0 2 1.0 101 0)
  1755                     activeHelpKey: valuesPrintSelector
  1756                     tabable: true
  1757                     model: printSelector
  1758                     group: inputGroup
  1759                     type: symbolOrNil
  1760                     acceptOnLostFocus: false
  1761                     acceptChannel: acceptChannel
  1762                     modifiedChannel: modifiedChannel
  1763                     acceptOnPointerLeave: false
  1764                   )
  1765                  (LabelSpec
  1766                     label: 'Visibility:'
  1767                     name: 'visibilityLabel'
  1768                     layout: (AlignmentOrigin 94 0 115 0 1 0.5)
  1769                     translateLabel: true
  1770                     resizeForLabel: true
  1771                     adjust: right
  1772                   )
  1773                  (InputFieldSpec
  1774                     name: 'visibilitySelector'
  1775                     layout: (LayoutFrame 97 0 104 0 2 1.0 126 0)
  1776                     activeHelpKey: valuesVisibilitySelector
  1777                     tabable: true
  1778                     model: visibilitySelector
  1779                     group: inputGroup
  1780                     type: symbolOrNil
  1781                     acceptOnLostFocus: false
  1782                     acceptChannel: acceptChannel
  1783                     modifiedChannel: modifiedChannel
  1784                     acceptOnPointerLeave: false
  1785                   )
  1786                  )
  1787                
  1788               )
  1789             )
  1790            (FramedBoxSpec
  1791               label: 'Range:'
  1792               name: 'rangeBox'
  1793               layout: (LayoutFrame 0 0.0 162 0 0 1.0 218 0)
  1794               labelPosition: topLeft
  1795               translateLabel: true
  1796               component: 
  1797              (SpecCollection
  1798                 collection: (
  1799                  (LabelSpec
  1800                     label: 'Min:'
  1801                     name: 'Label1'
  1802                     layout: (LayoutFrame 11 0 3 0 94 0 20 0)
  1803                     translateLabel: true
  1804                     resizeForLabel: true
  1805                     adjust: right
  1806                   )
  1807                  (InputFieldSpec
  1808                     name: 'EntryField1'
  1809                     layout: (LayoutFrame 97 0 1 0 20 0.5 23 0)
  1810                     activeHelpKey: valuesMenuSelector
  1811                     tabable: true
  1812                     model: minValue
  1813                     group: inputGroup
  1814                     type: numberOrNil
  1815                     acceptOnLeave: true
  1816                     acceptOnLostFocus: true
  1817                     acceptChannel: acceptChannel
  1818                     modifiedChannel: modifiedChannel
  1819                     acceptOnPointerLeave: true
  1820                   )
  1821                  (LabelSpec
  1822                     label: 'Max:'
  1823                     name: 'Label2'
  1824                     layout: (LayoutFrame 21 0.5 3 0 70 0.5 20 0)
  1825                     translateLabel: true
  1826                     resizeForLabel: true
  1827                     adjust: right
  1828                   )
  1829                  (InputFieldSpec
  1830                     name: 'EntryField2'
  1831                     layout: (LayoutFrame 70 0.5 1 0 -2 1.0 23 0)
  1832                     activeHelpKey: valuesMenuSelector
  1833                     tabable: true
  1834                     model: maxValue
  1835                     group: inputGroup
  1836                     type: numberOrNil
  1837                     acceptOnLeave: true
  1838                     acceptOnLostFocus: true
  1839                     acceptChannel: acceptChannel
  1840                     modifiedChannel: modifiedChannel
  1841                     acceptOnPointerLeave: true
  1842                   )
  1843                  )
  1844                
  1845               )
  1846             )
  1847            (FramedBoxSpec
  1848               label: 'Menu Selector:'
  1849               name: 'menusBox'
  1850               layout: (LayoutFrame 0 0.0 216 0 0 1.0 272 0)
  1851               labelPosition: topLeft
  1852               translateLabel: true
  1853               component: 
  1854              (SpecCollection
  1855                 collection: (
  1856                  (LabelSpec
  1857                     label: 'Selector:'
  1858                     name: 'menuLabel'
  1859                     layout: (AlignmentOrigin 94 0 12 0 1 0.5)
  1860                     translateLabel: true
  1861                     resizeForLabel: true
  1862                     adjust: right
  1863                   )
  1864                  (InputFieldSpec
  1865                     name: 'menuSelector'
  1866                     layout: (LayoutFrame 97 0 1 0 2 1.0 23 0)
  1867                     activeHelpKey: valuesMenuSelector
  1868                     tabable: true
  1869                     model: menu
  1870                     group: inputGroup
  1871                     type: symbolOrNil
  1872                     acceptOnLostFocus: false
  1873                     acceptChannel: acceptChannel
  1874                     modifiedChannel: modifiedChannel
  1875                     acceptOnPointerLeave: false
  1876                   )
  1877                  )
  1878                
  1879               )
  1880             )
  1881            (FramedBoxSpec
  1882               label: 'Combo List/Box Selectors:'
  1883               name: 'comboSelectorsBox'
  1884               layout: (LayoutFrame 1 0.0 271 0 1 1.0 378 0)
  1885               labelPosition: topLeft
  1886               translateLabel: true
  1887               component: 
  1888              (SpecCollection
  1889                 collection: (
  1890                  (LabelSpec
  1891                     label: 'Choices:'
  1892                     name: 'ChoicesLabel'
  1893                     layout: (AlignmentOrigin 94 0 15 0 1 0.5)
  1894                     activeHelpKey: valuesChoicesSelector
  1895                     translateLabel: true
  1896                     resizeForLabel: true
  1897                     adjust: right
  1898                   )
  1899                  (InputFieldSpec
  1900                     name: 'ChoicesField'
  1901                     layout: (LayoutFrame 97 0 4 0 2 1.0 26 0)
  1902                     activeHelpKey: valuesChoicesSelector
  1903                     tabable: true
  1904                     model: choices
  1905                     group: inputGroup
  1906                     type: symbolOrNil
  1907                     acceptOnLeave: false
  1908                     acceptOnLostFocus: false
  1909                     acceptChannel: acceptChannel
  1910                     modifiedChannel: modifiedChannel
  1911                     acceptOnPointerLeave: false
  1912                   )
  1913                  (LabelSpec
  1914                     label: 'Translated Choices:'
  1915                     name: 'XChoicesLabel'
  1916                     layout: (AlignmentOrigin 94 0 40 0 1 0.5)
  1917                     activeHelpKey: valuesXChoicesSelector
  1918                     translateLabel: true
  1919                     resizeForLabel: true
  1920                     adjust: right
  1921                   )
  1922                  (InputFieldSpec
  1923                     name: 'XChoicesField'
  1924                     layout: (LayoutFrame 97 0 29 0 2 1.0 51 0)
  1925                     activeHelpKey: valuesXChoicesSelector
  1926                     tabable: true
  1927                     model: translatedChoices
  1928                     group: inputGroup
  1929                     type: symbolOrNil
  1930                     acceptOnLeave: false
  1931                     acceptOnLostFocus: false
  1932                     acceptChannel: acceptChannel
  1933                     modifiedChannel: modifiedChannel
  1934                     acceptOnPointerLeave: false
  1935                   )
  1936                  (LabelSpec
  1937                     label: 'Editable:'
  1938                     name: 'EditableLabel'
  1939                     layout: (AlignmentOrigin 94 0 65 0 1 0.5)
  1940                     activeHelpKey: showComboFieldSelector
  1941                     translateLabel: true
  1942                     resizeForLabel: true
  1943                     adjust: right
  1944                   )
  1945                  (InputFieldSpec
  1946                     name: 'EditableField'
  1947                     layout: (LayoutFrame 97 0 54 0 2 1.0 76 0)
  1948                     activeHelpKey: showComboFieldSelector
  1949                     tabable: true
  1950                     model: showComboFieldSelector
  1951                     group: inputGroup
  1952                     type: symbolOrNil
  1953                     acceptOnLeave: false
  1954                     acceptOnLostFocus: false
  1955                     acceptChannel: acceptChannel
  1956                     modifiedChannel: modifiedChannel
  1957                     acceptOnPointerLeave: false
  1958                   )
  1959                  )
  1960                
  1961               )
  1962             )
  1963            )
  1964          
  1965         )
  1966       )
  1967 !
  1968 
  1969 windowSpec
  1970     "This resource specification was automatically generated
  1971      by the UIPainter of ST/X."
  1972 
  1973     "Do not manually edit this!! If it is corrupted,
  1974      the UIPainter may not be able to read the specification."
  1975 
  1976     "
  1977      UIPainter new openOnClass:DataSetBuilder andSelector:#windowSpec
  1978      DataSetBuilder new openInterface:#windowSpec
  1979      DataSetBuilder open
  1980     "
  1981 
  1982     <resource: #canvas>
  1983 
  1984     ^ 
  1985      #(FullSpec
  1986         name: windowSpec
  1987         window: 
  1988        (WindowSpec
  1989           label: 'Data Set Builder'
  1990           name: 'Data Set Builder'
  1991           min: (Point 10 10)
  1992           bounds: (Rectangle 0 0 633 658)
  1993           menu: menu
  1994         )
  1995         component: 
  1996        (SpecCollection
  1997           collection: (
  1998            (MenuPanelSpec
  1999               name: 'menuToolbarView'
  2000               layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 32 0)
  2001               tabable: true
  2002               menu: menuToolbar
  2003             )
  2004            (VariableVerticalPanelSpec
  2005               name: 'mainPanel'
  2006               layout: (LayoutFrame 0 0.0 38 0.0 0 1.0 -26 1.0)
  2007               component: 
  2008              (SpecCollection
  2009                 collection: (
  2010                  (FramedBoxSpec
  2011                     label: 'Table Columns'
  2012                     name: 'FramedBox'
  2013                     labelPosition: topLeft
  2014                     translateLabel: true
  2015                     component: 
  2016                    (SpecCollection
  2017                       collection: (
  2018                        (DataSetSpec
  2019                           name: 'columnView'
  2020                           layout: (LayoutFrame 0 0.0 6 0.0 0 1.0 2 1.0)
  2021                           hasHorizontalScrollBar: true
  2022                           hasVerticalScrollBar: false
  2023                           miniScrollerHorizontal: true
  2024                           useIndex: false
  2025                           has3Dseparators: true
  2026                         )
  2027                        )
  2028                      
  2029                     )
  2030                   )
  2031                  (VariableHorizontalPanelSpec
  2032                     name: 'VariablePanel'
  2033                     level: -1
  2034                     component: 
  2035                    (SpecCollection
  2036                       collection: (
  2037                        (ViewSpec
  2038                           name: 'labelsView'
  2039                           component: 
  2040                          (SpecCollection
  2041                             collection: (
  2042                              (SequenceViewSpec
  2043                                 name: 'labelAndColumns'
  2044                                 layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
  2045                                 tabable: true
  2046                                 model: selectedColumnModel
  2047                                 menu: menuEdit
  2048                                 hasHorizontalScrollBar: true
  2049                                 hasVerticalScrollBar: true
  2050                                 miniScrollerHorizontal: true
  2051                                 isMultiSelect: true
  2052                                 useIndex: true
  2053                                 sequenceList: seqList
  2054                               )
  2055                              )
  2056                            
  2057                           )
  2058                           postBuildCallback: postBuildListOfItemsView:
  2059                         )
  2060                        (ViewSpec
  2061                           name: 'specView'
  2062                           level: -1
  2063                           component: 
  2064                          (SpecCollection
  2065                             collection: (
  2066                              (NoteBookViewSpec
  2067                                 name: 'NoteBook'
  2068                                 layout: (LayoutFrame 1 0.0 0 0.0 0 1.0 -30 1.0)
  2069                                 tabable: true
  2070                                 model: tabModel
  2071                                 menu: tabList
  2072                                 useIndex: true
  2073                                 canvas: canvasHolder
  2074                                 keepCanvasAlive: true
  2075                               )
  2076                              (UISubSpecification
  2077                                 name: 'SubSpecification'
  2078                                 layout: (LayoutFrame 2 0.0 -26 1 -2 1.0 -2 1.0)
  2079                                 majorKey: ToolApplicationModel
  2080                                 minorKey: windowSpecForCommit
  2081                               )
  2082                              )
  2083                            
  2084                           )
  2085                           postBuildCallback: postBuildSpecView:
  2086                         )
  2087                        )
  2088                      
  2089                     )
  2090                     handles: (Any 0.235387 1.0)
  2091                   )
  2092                  )
  2093                
  2094               )
  2095               handles: (Any 0.208748 1.0)
  2096             )
  2097            (UISubSpecification
  2098               name: 'infoBarSubSpec'
  2099               layout: (LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0)
  2100               majorKey: ToolApplicationModel
  2101               minorKey: windowSpecForInfoBar
  2102             )
  2103            )
  2104          
  2105         )
  2106       )
  2107 ! !
  2108 
  2109 !DataSetBuilder class methodsFor:'menu specs'!
  2110 
  2111 fileMenu
  2112     "This resource specification was automatically generated
  2113      by the MenuEditor of ST/X."
  2114 
  2115     "Do not manually edit this!! If it is corrupted,
  2116      the MenuEditor may not be able to read the specification."
  2117 
  2118     "
  2119      MenuEditor new openOnClass:DataSetBuilder andSelector:#fileMenu
  2120      (Menu new fromLiteralArrayEncoding:(DataSetBuilder fileMenu)) startUp
  2121     "
  2122 
  2123     <resource: #menu>
  2124 
  2125     ^ 
  2126      #(Menu
  2127         (
  2128          (MenuItem
  2129             activeHelpKey: fileNew
  2130             label: 'New'
  2131             itemValue: doNew
  2132             translateLabel: true
  2133           )
  2134          (MenuItem
  2135             label: '-'
  2136             isVisible: notEditingSpecOnly
  2137           )
  2138          (MenuItem
  2139             activeHelpKey: fileLoad
  2140             label: 'Load...'
  2141             itemValue: doLoad
  2142             translateLabel: true
  2143             isVisible: notEditingSpecOnly
  2144           )
  2145          (MenuItem
  2146             label: '-'
  2147           )
  2148          (MenuItem
  2149             activeHelpKey: fileSave
  2150             label: 'Save'
  2151             itemValue: doSave
  2152             translateLabel: true
  2153             isVisible: editingSpecOnly
  2154           )
  2155          (MenuItem
  2156             activeHelpKey: fileSaveMethod
  2157             label: 'Save'
  2158             itemValue: doSave
  2159             translateLabel: true
  2160             isVisible: notEditingSpecOnly
  2161           )
  2162          (MenuItem
  2163             activeHelpKey: fileSaveAsMethod
  2164             label: 'Save As...'
  2165             itemValue: doSaveAs
  2166             translateLabel: true
  2167             isVisible: notEditingSpecOnly
  2168           )
  2169          (MenuItem
  2170             label: '-'
  2171           )
  2172          (MenuItem
  2173             activeHelpKey: pickColumns
  2174             label: 'Pick Columns...'
  2175             itemValue: doPickColumns
  2176             translateLabel: true
  2177           )
  2178          (MenuItem
  2179             label: '-'
  2180             isVisible: isStandAlone
  2181           )
  2182          (MenuItem
  2183             activeHelpKey: fileBrowseClass
  2184             label: 'Browse Class'
  2185             itemValue: doBrowseClass
  2186             translateLabel: true
  2187             isVisible: isStandAlone
  2188           )
  2189          (MenuItem
  2190             label: '-'
  2191             isVisible: isStandAlone
  2192           )
  2193          (MenuItem
  2194             activeHelpKey: fileExit
  2195             label: 'Exit'
  2196             itemValue: closeRequest
  2197             translateLabel: true
  2198             isVisible: isStandAlone
  2199           )
  2200          )
  2201         nil
  2202         nil
  2203       )
  2204 !
  2205 
  2206 menu
  2207     "This resource specification was automatically generated
  2208      by the MenuEditor of ST/X."
  2209 
  2210     "Do not manually edit this!! If it is corrupted,
  2211      the MenuEditor may not be able to read the specification."
  2212 
  2213     "
  2214      MenuEditor new openOnClass:DataSetBuilder andSelector:#menu
  2215      (Menu new fromLiteralArrayEncoding:(DataSetBuilder menu)) startUp
  2216     "
  2217 
  2218     <resource: #menu>
  2219 
  2220     ^ 
  2221      #(Menu
  2222         (
  2223          (MenuItem
  2224             label: 'File'
  2225             translateLabel: true
  2226             submenuChannel: fileMenu
  2227           )
  2228          (MenuItem
  2229             label: 'Edit'
  2230             translateLabel: true
  2231             submenuChannel: menuEditWithoutAccelerators
  2232           )
  2233          (MenuItem
  2234             label: 'Add'
  2235             translateLabel: true
  2236             submenu: 
  2237            (Menu
  2238               (
  2239                (MenuItem
  2240                   activeHelpKey: addColumn
  2241                   enabled: columnIsNotEditing
  2242                   label: 'Column'
  2243                   itemValue: doCreateColumn
  2244                   translateLabel: true
  2245                   labelImage: (ResourceRetriever nil newColumnIcon 'Column')
  2246                 )
  2247                (MenuItem
  2248                   activeHelpKey: addNonSelectableColumn
  2249                   enabled: columnIsNotEditing
  2250                   label: 'Column (Non-Selectable)'
  2251                   itemValue: doCreateNonSelectableColumn
  2252                   translateLabel: true
  2253                   labelImage: (ResourceRetriever DataSetBuilder newColumnNonSelectableIcon 'Column (Non-Selectable)')
  2254                 )
  2255                )
  2256               nil
  2257               nil
  2258             )
  2259           )
  2260          (MenuItem
  2261             label: 'Generate'
  2262             translateLabel: true
  2263             isVisible: notEditingSpecOnly
  2264             submenu: 
  2265            (Menu
  2266               (
  2267                (MenuItem
  2268                   activeHelpKey: fileDefineClass
  2269                   label: 'Define Row Class...'
  2270                   itemValue: doDefineRowClass
  2271                   translateLabel: true
  2272                 )
  2273                (MenuItem
  2274                   activeHelpKey: browseRowClass
  2275                   label: 'Browse Row Class'
  2276                   itemValue: doBrowseRowClass
  2277                   translateLabel: true
  2278                 )
  2279                (MenuItem
  2280                   label: '-'
  2281                 )
  2282                (MenuItem
  2283                   activeHelpKey: generateCode
  2284                   label: 'Generate Code'
  2285                   itemValue: doGenerateCode
  2286                   translateLabel: true
  2287                 )
  2288                )
  2289               nil
  2290               nil
  2291             )
  2292           )
  2293          (MenuItem
  2294             label: 'History'
  2295             translateLabel: true
  2296             isVisible: isStandAlone
  2297             submenuChannel: menuHistory
  2298           )
  2299          (MenuItem
  2300             label: 'MENU_Help'
  2301             translateLabel: true
  2302             startGroup: conditionalRight
  2303             submenuChannel: menuHelp
  2304           )
  2305          )
  2306         nil
  2307         nil
  2308       )
  2309 !
  2310 
  2311 menuEdit
  2312     "This resource specification was automatically generated
  2313      by the MenuEditor of ST/X."
  2314 
  2315     "Do not manually edit this!! If it is corrupted,
  2316      the MenuEditor may not be able to read the specification."
  2317 
  2318     "
  2319      MenuEditor new openOnClass:DataSetBuilder andSelector:#menuEdit
  2320      (Menu new fromLiteralArrayEncoding:(DataSetBuilder menuEdit)) startUp
  2321     "
  2322 
  2323     <resource: #menu>
  2324 
  2325     ^ 
  2326      #(Menu
  2327         (
  2328          (MenuItem
  2329             activeHelpKey: editCut
  2330             enabled: isColumnSelected
  2331             label: 'Cut'
  2332             itemValue: doCut
  2333             translateLabel: true
  2334             shortcutKey: Cut
  2335           )
  2336          (MenuItem
  2337             activeHelpKey: editCopy
  2338             enabled: isColumnSelected
  2339             label: 'Copy'
  2340             itemValue: doCopy
  2341             translateLabel: true
  2342             shortcutKey: Copy
  2343           )
  2344          (MenuItem
  2345             activeHelpKey: editPaste
  2346             enabled: valueOfHavingClipboard
  2347             label: 'Paste'
  2348             itemValue: doPaste
  2349             translateLabel: true
  2350             shortcutKey: Paste
  2351           )
  2352          (MenuItem
  2353             label: '-'
  2354           )
  2355          (MenuItem
  2356             activeHelpKey: editMoveUp
  2357             enabled: isColumnSelected
  2358             label: 'Move Up'
  2359             itemValue: doMoveColumn:
  2360             translateLabel: true
  2361             shortcutKey: CtrlCursorUp
  2362             labelImage: (ResourceRetriever Icon upIcon 'Move Up')
  2363             argument: up
  2364           )
  2365          (MenuItem
  2366             activeHelpKey: editMoveDown
  2367             enabled: isColumnSelected
  2368             label: 'Move Down'
  2369             itemValue: doMoveColumn:
  2370             translateLabel: true
  2371             shortcutKey: CtrlCursorDown
  2372             labelImage: (ResourceRetriever Icon downIcon 'Move Down')
  2373             argument: down
  2374           )
  2375          (MenuItem
  2376             label: '-'
  2377           )
  2378          (MenuItem
  2379             label: 'Separators'
  2380             translateLabel: true
  2381             submenu: 
  2382            (Menu
  2383               (
  2384                (MenuItem
  2385                   label: 'Label Columns'
  2386                   translateLabel: true
  2387                   submenu: 
  2388                  (Menu
  2389                     (
  2390                      (MenuItem
  2391                         enabled: hasSelection
  2392                         label: 'Add Separators'
  2393                         itemValue: addLabelColumnSeparators
  2394                         translateLabel: true
  2395                       )
  2396                      (MenuItem
  2397                         enabled: hasSelection
  2398                         label: 'Remove Separators'
  2399                         itemValue: removeLabelColumnSeparators
  2400                         translateLabel: true
  2401                       )
  2402                      )
  2403                     nil
  2404                     nil
  2405                   )
  2406                 )
  2407                (MenuItem
  2408                   label: 'Label Row && Columns'
  2409                   translateLabel: true
  2410                   submenu: 
  2411                  (Menu
  2412                     (
  2413                      (MenuItem
  2414                         enabled: hasSelection
  2415                         label: 'Add Separators'
  2416                         itemValue: addLabelSeparators
  2417                         translateLabel: true
  2418                       )
  2419                      (MenuItem
  2420                         enabled: hasSelection
  2421                         label: 'Remove Separators'
  2422                         itemValue: removeLabelSeparators
  2423                         translateLabel: true
  2424                       )
  2425                      )
  2426                     nil
  2427                     nil
  2428                   )
  2429                 )
  2430                (MenuItem
  2431                   label: '-'
  2432                 )
  2433                (MenuItem
  2434                   label: 'Cell Rows'
  2435                   translateLabel: true
  2436                   submenu: 
  2437                  (Menu
  2438                     (
  2439                      (MenuItem
  2440                         enabled: hasSelection
  2441                         label: 'Add Separators'
  2442                         itemValue: addRowSeparators
  2443                         translateLabel: true
  2444                       )
  2445                      (MenuItem
  2446                         enabled: hasSelection
  2447                         label: 'Remove Separators'
  2448                         itemValue: removeRowSeparators
  2449                         translateLabel: true
  2450                       )
  2451                      )
  2452                     nil
  2453                     nil
  2454                   )
  2455                 )
  2456                (MenuItem
  2457                   label: 'Cell Columns'
  2458                   translateLabel: true
  2459                   submenu: 
  2460                  (Menu
  2461                     (
  2462                      (MenuItem
  2463                         enabled: hasSelection
  2464                         label: 'Add Separators'
  2465                         itemValue: addLabelColumnSeparators
  2466                         translateLabel: true
  2467                       )
  2468                      (MenuItem
  2469                         enabled: hasSelection
  2470                         label: 'Remove'
  2471                         itemValue: removeLabelColumnSeparators
  2472                         translateLabel: true
  2473                       )
  2474                      )
  2475                     nil
  2476                     nil
  2477                   )
  2478                 )
  2479                (MenuItem
  2480                   label: 'Cell Rows && Columns'
  2481                   translateLabel: true
  2482                   submenu: 
  2483                  (Menu
  2484                     (
  2485                      (MenuItem
  2486                         enabled: hasSelection
  2487                         label: 'Add Separators'
  2488                         itemValue: addCellSeparators
  2489                         translateLabel: true
  2490                       )
  2491                      (MenuItem
  2492                         enabled: hasSelection
  2493                         label: 'Remove Separators'
  2494                         itemValue: removeCellSeparators
  2495                         translateLabel: true
  2496                       )
  2497                      )
  2498                     nil
  2499                     nil
  2500                   )
  2501                 )
  2502                )
  2503               nil
  2504               nil
  2505             )
  2506           )
  2507          (MenuItem
  2508             label: 'Alignment'
  2509             translateLabel: true
  2510             submenu: 
  2511            (Menu
  2512               (
  2513                (MenuItem
  2514                   enabled: hasSelection
  2515                   label: 'Make Labels Left Aligned'
  2516                   itemValue: alignLabelsLeft
  2517                   translateLabel: true
  2518                 )
  2519                (MenuItem
  2520                   enabled: hasSelection
  2521                   label: 'Make Labels Centered'
  2522                   itemValue: alignLabelsCentered
  2523                   translateLabel: true
  2524                 )
  2525                (MenuItem
  2526                   enabled: hasSelection
  2527                   label: 'Make Labels Right Aligned'
  2528                   itemValue: alignLabelsRight
  2529                   translateLabel: true
  2530                 )
  2531                (MenuItem
  2532                   label: '-'
  2533                 )
  2534                (MenuItem
  2535                   enabled: hasSelection
  2536                   label: 'Make Cell Left Aligned'
  2537                   itemValue: alignColumnsLeft
  2538                   translateLabel: true
  2539                 )
  2540                (MenuItem
  2541                   enabled: hasSelection
  2542                   label: 'Make Cell Centered'
  2543                   itemValue: alignColumnsCentered
  2544                   translateLabel: true
  2545                 )
  2546                (MenuItem
  2547                   enabled: hasSelection
  2548                   label: 'Make Cell Right Aligned'
  2549                   itemValue: alignColumnsRight
  2550                   translateLabel: true
  2551                 )
  2552                )
  2553               nil
  2554               nil
  2555             )
  2556           )
  2557          (MenuItem
  2558             label: 'Colors'
  2559             translateLabel: true
  2560             submenu: 
  2561            (Menu
  2562               (
  2563                (MenuItem
  2564                   enabled: hasSelection
  2565                   label: 'Set Cell Color Selectors'
  2566                   itemValue: setCellColorSelectors
  2567                   translateLabel: true
  2568                 )
  2569                (MenuItem
  2570                   enabled: hasSelection
  2571                   label: 'Set Selected Cell Color Selectors'
  2572                   itemValue: setSelectedCellColorSelectors
  2573                   translateLabel: true
  2574                 )
  2575                )
  2576               nil
  2577               nil
  2578             )
  2579           )
  2580          (MenuItem
  2581             label: 'Behavior'
  2582             translateLabel: true
  2583             submenu: 
  2584            (Menu
  2585               (
  2586                (MenuItem
  2587                   enabled: hasSelection
  2588                   label: 'Make Selected Cells Unselectable'
  2589                   itemValue: makeSelectedCellsUnselectable
  2590                   translateLabel: true
  2591                 )
  2592                (MenuItem
  2593                   enabled: hasSelection
  2594                   label: 'Make Selected Cells Selectable'
  2595                   itemValue: makeSelectedCellsSelectable
  2596                   translateLabel: true
  2597                 )
  2598                )
  2599               nil
  2600               nil
  2601             )
  2602           )
  2603          (MenuItem
  2604             label: '-'
  2605           )
  2606          (MenuItem
  2607             enabled: hasSelection
  2608             label: 'Make Selectable'
  2609             itemValue: makeColumnsSelectable
  2610             translateLabel: true
  2611           )
  2612          (MenuItem
  2613             enabled: hasSelection
  2614             label: 'Make Unselectable'
  2615             itemValue: makeColumnsUnselectable
  2616             translateLabel: true
  2617           )
  2618          )
  2619         nil
  2620         nil
  2621       )
  2622 !
  2623 
  2624 menuEditWithoutAccelerators
  2625     ^ self menuEdit decodeAsLiteralArray removeAllAccelerators
  2626 !
  2627 
  2628 menuToolbar
  2629     "This resource specification was automatically generated
  2630      by the MenuEditor of ST/X."
  2631 
  2632     "Do not manually edit this!! If it is corrupted,
  2633      the MenuEditor may not be able to read the specification."
  2634 
  2635     "
  2636      MenuEditor new openOnClass:DataSetBuilder andSelector:#menuToolbar
  2637      (Menu new fromLiteralArrayEncoding:(DataSetBuilder menuToolbar)) startUp
  2638     "
  2639 
  2640     <resource: #menu>
  2641 
  2642     ^ 
  2643      #(Menu
  2644         (
  2645          (MenuItem
  2646             activeHelpKey: fileNew
  2647             label: 'New'
  2648             itemValue: doNew
  2649             translateLabel: true
  2650             isButton: true
  2651             labelImage: (ResourceRetriever ToolbarIconLibrary newDataSetIcon)
  2652           )
  2653          (MenuItem
  2654             label: '-'
  2655           )
  2656          (MenuItem
  2657             activeHelpKey: fileLoad
  2658             label: 'Load'
  2659             itemValue: doLoad
  2660             translateLabel: true
  2661             isButton: true
  2662             submenuChannel: menuHistory
  2663             labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon)
  2664           )
  2665          (MenuItem
  2666             activeHelpKey: fileSaveMethod
  2667             label: 'Save'
  2668             itemValue: doSave
  2669             translateLabel: true
  2670             isButton: true
  2671             isVisible: notEditingSpecOnly
  2672             labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon)
  2673           )
  2674          (MenuItem
  2675             activeHelpKey: fileSave
  2676             label: 'Save'
  2677             itemValue: doSave
  2678             translateLabel: true
  2679             isButton: true
  2680             isVisible: editingSpecOnly
  2681             labelImage: (ResourceRetriever ToolbarIconLibrary saveToFileIcon)
  2682           )
  2683          (MenuItem
  2684             label: '-'
  2685           )
  2686          (MenuItem
  2687             activeHelpKey: editCut
  2688             enabled: isColumnSelected
  2689             label: 'Cut'
  2690             itemValue: doCut
  2691             translateLabel: true
  2692             isButton: true
  2693             labelImage: (ResourceRetriever ToolbarIconLibrary cutWidgetIcon)
  2694           )
  2695          (MenuItem
  2696             activeHelpKey: editCopy
  2697             enabled: isColumnSelected
  2698             label: 'Copy'
  2699             itemValue: doCopy
  2700             translateLabel: true
  2701             isButton: true
  2702             labelImage: (ResourceRetriever ToolbarIconLibrary copyWidgetIcon)
  2703           )
  2704          (MenuItem
  2705             activeHelpKey: editPaste
  2706             enabled: canPasteHolder
  2707             label: 'Paste'
  2708             itemValue: doPaste
  2709             translateLabel: true
  2710             isButton: true
  2711             labelImage: (ResourceRetriever ToolbarIconLibrary pasteWidgetIcon)
  2712           )
  2713          (MenuItem
  2714             activeHelpKey: editDelete
  2715             enabled: isColumnSelected
  2716             label: 'Delete'
  2717             itemValue: doDelete
  2718             translateLabel: true
  2719             isButton: true
  2720             isVisible: false
  2721             labelImage: (ResourceRetriever ToolbarIconLibrary deleteWidgetIcon)
  2722           )
  2723          (MenuItem
  2724             label: '-'
  2725           )
  2726          (MenuItem
  2727             activeHelpKey: addColumn
  2728             enabled: columnIsNotEditing
  2729             label: 'Add Column'
  2730             itemValue: doCreateColumn
  2731             translateLabel: true
  2732             isButton: true
  2733             labelImage: (ResourceRetriever nil newColumnIcon)
  2734           )
  2735          (MenuItem
  2736             activeHelpKey: addNonSelectableColumn
  2737             enabled: columnIsNotEditing
  2738             label: 'Add Column (Non Selectable)'
  2739             itemValue: doCreateNonSelectableColumn
  2740             translateLabel: true
  2741             isButton: true
  2742             labelImage: (ResourceRetriever DataSetBuilder newColumnNonSelectableIcon)
  2743           )
  2744          (MenuItem
  2745             label: ''
  2746           )
  2747          (MenuItem
  2748             activeHelpKey: editMoveUp
  2749             enabled: isColumnSelected
  2750             label: 'Move Up'
  2751             itemValue: doMoveColumn:
  2752             translateLabel: true
  2753             isButton: true
  2754             startGroup: right
  2755             labelImage: (ResourceRetriever Icon upIcon)
  2756             argument: up
  2757           )
  2758          (MenuItem
  2759             activeHelpKey: editMoveDown
  2760             enabled: isColumnSelected
  2761             label: 'Move Down'
  2762             itemValue: doMoveColumn:
  2763             translateLabel: true
  2764             isButton: true
  2765             startGroup: right
  2766             labelImage: (ResourceRetriever Icon downIcon)
  2767             argument: down
  2768           )
  2769          )
  2770         nil
  2771         nil
  2772       )
  2773 ! !
  2774 
  2775 !DataSetBuilder methodsFor:'accessing'!
  2776 
  2777 acceptedColumns
  2778     "returns the last saved columns (internal, for specOnly edit mode)"
  2779 
  2780     ^ acceptedColumns
  2781 !
  2782 
  2783 columns
  2784     "returns list of columns"
  2785 
  2786     ^ columns
  2787 !
  2788 
  2789 columns:aListOfColumns
  2790     "setup columns from a column view"
  2791 
  2792     |list newColumns|
  2793 
  2794     newColumns := OrderedCollection new.
  2795     list := self seqList.
  2796     list removeAll.
  2797 
  2798     aListOfColumns size ~~ 0 ifTrue:[
  2799         aListOfColumns do:[:aColumn||column|
  2800             (column := aColumn) isSequenceable ifTrue:[
  2801                 column := DataSetColumnSpec decodeFromLiteralArray:aColumn
  2802             ] ifFalse:[
  2803                 column := aColumn copy
  2804             ].
  2805             newColumns add:column.
  2806             list add:(self labelFromColumn:column).  
  2807         ]
  2808     ].
  2809     columns := newColumns.
  2810     self updateColumnView.
  2811 
  2812     "Modified: / 27-03-2007 / 08:46:39 / cg"
  2813 !
  2814 
  2815 editingSpecOnly
  2816     ^ editingSpecOnly ? false
  2817 !
  2818 
  2819 editingSpecOnly:something
  2820     editingSpecOnly := something.
  2821 !
  2822 
  2823 notEditingSpecOnly
  2824     ^ self editingSpecOnly not
  2825 !
  2826 
  2827 resolveRowClass
  2828     "returns the resolved row class
  2829     "
  2830     ^ Smalltalk resolveName:rowClass inClass:self class
  2831 !
  2832 
  2833 rowClassName
  2834 
  2835     ^ self resolveRowClass notNil ifTrue:[rowClass] ifFalse:[nil]
  2836 !
  2837 
  2838 rowClassName:aClassName
  2839 
  2840     |cls|
  2841 
  2842     rowSuperClass := nil.
  2843 
  2844     (rowClass := aClassName) notNil ifTrue:[
  2845         (cls := self resolveRowClass) notNil 
  2846             ifTrue: [rowSuperClass := cls superclass name asString] 
  2847             ifFalse:[rowSuperClass := 'Object']
  2848     ]
  2849 
  2850 ! !
  2851 
  2852 !DataSetBuilder methodsFor:'aspects'!
  2853 
  2854 canvasHolder
  2855     "returns a value holder which keeps selected column"
  2856 
  2857     |holder|
  2858 
  2859     (holder := builder bindingAt:#canvasHolder) isNil ifTrue:[
  2860         builder aspectAt:#canvasHolder put:(holder := ValueHolder new).
  2861     ].
  2862     ^ holder
  2863 !
  2864 
  2865 columnIsNotEditing
  2866     "returns a boolean value holder which returns true if a columns attributes have not
  2867      been modified (notebook fields)"
  2868 
  2869     |holder|
  2870 
  2871     (holder := builder bindingAt:#columnIsNotEditing) isNil ifTrue:[
  2872         holder := BlockValue forLogicalNot:(self modifiedChannel).
  2873         builder aspectAt:#columnIsNotEditing put:holder.
  2874     ].
  2875     ^ holder
  2876 !
  2877 
  2878 editorTypeList
  2879     "generate list of supported editor types"
  2880 
  2881     |list|
  2882 
  2883     (list := builder bindingAt:#editorTypeList) isNil ifTrue:[
  2884         list := (DataSetColumnSpec slices collect:[:eachSlice | eachSlice at:1]) asSet.
  2885         list := list asOrderedCollection sort.
  2886         builder aspectAt:#editorTypeList put:list
  2887     ].
  2888     ^list
  2889 !
  2890 
  2891 hasColumns
  2892     "returns a boolean value holder which is set to true if there are any columns"
  2893 
  2894     ^ BlockValue
  2895         with:[:m | m notEmptyOrNil]
  2896         argument:(self seqList)
  2897 !
  2898 
  2899 hasSelection
  2900     ^ (selectedColumnIndex isCollection not and:[ selectedColumnIndex ~~ 0 ])
  2901     or:[ selectedColumnIndex size > 0 ]
  2902 !
  2903 
  2904 isColumnSelected
  2905     "returns a boolean value holder which is set to true if some col is selected"
  2906 
  2907     ^builder valueAspectFor:#isColumnSelected initialValue: false
  2908 !
  2909 
  2910 menuEdit
  2911     "redefined to access my menu and not the one of the UIPainter"
  2912 
  2913     ^ [self class menuEdit]
  2914 !
  2915 
  2916 possiblePrintConverterTypes
  2917     ^ UISpecification possiblePrintConverterTypes
  2918 !
  2919 
  2920 rendererTypeList
  2921     "generate list of supported renderer types"
  2922 
  2923     |list|
  2924 
  2925     (list := builder bindingAt:#rendererTypeList) isNil ifTrue:[
  2926         list := (DataSetColumnSpec slices collect:[:eachSlice | eachSlice at:2]) asSet.
  2927         list := list asOrderedCollection sort.
  2928         builder aspectAt:#rendererTypeList put:list
  2929     ].
  2930     ^list
  2931 !
  2932 
  2933 selectedColumnModel
  2934     "returns a value holder which keeps selected column"
  2935 
  2936     |holder|
  2937 
  2938     (holder := builder bindingAt:#selectedColumnModel) isNil ifTrue:[
  2939         holder := AspectAdaptor new subject:self; forAspect:#selectedColumnIndex.
  2940         builder aspectAt:#selectedColumnModel put:holder.
  2941     ].
  2942     ^ holder
  2943 !
  2944 
  2945 seqList
  2946     ^ builder listAspectFor:#seqList
  2947 !
  2948 
  2949 style
  2950 
  2951     ^self aspectFor:#labelFont
  2952 !
  2953 
  2954 tabList
  2955 
  2956     ^self class slices collect:[:aSlice|aSlice first]
  2957 
  2958 ! !
  2959 
  2960 !DataSetBuilder methodsFor:'building'!
  2961 
  2962 buildFromResourceSpec:aResourceSpec
  2963 
  2964     self columns:aResourceSpec.
  2965 
  2966 "/    columns notEmpty ifTrue: [
  2967 "/        self tabModel value: 1. 
  2968 "/        self selectedColumnModel value:nil; value:1.    "/ toggle to force change
  2969 "/        self updateInputFields.
  2970 "/        self updateInfoLabel.
  2971 "/        self updateHistory
  2972 "/    ].
  2973 
  2974 !
  2975 
  2976 loadFromClass:aClass andSelector:aSelector
  2977     |cls list|
  2978 
  2979     self assert:(aClass isNil or:[aClass isClass]).
  2980 
  2981     selectedColumnIndex := 0.
  2982 
  2983     "if opened on table columns"  
  2984 
  2985     aClass isNil ifTrue: [ 
  2986         self tabModel value: 0. 
  2987     "/    self columns removeAll.
  2988     "/    self seqList removeAll.
  2989         self updateColumnView.
  2990         self updateInfoLabel.
  2991         self isColumnSelected value: false.
  2992         ^ self.
  2993     ].
  2994 
  2995     specSelector isNil ifTrue: [
  2996         self updateAfterColumnChange. 
  2997         ^ self
  2998     ].
  2999 
  3000     list := nil.
  3001 
  3002     (aClass notNil or:[self isStandAlone or:[self window shown]]) ifTrue:[
  3003         (aClass notNil and:[aSelector notNil]) ifTrue:[
  3004             cls := aClass isBehavior ifTrue:[ aClass ] ifFalse:[ self resolveName:aClass].
  3005 
  3006             (cls respondsTo: aSelector) ifTrue:[ 
  3007                 list := cls perform: aSelector.
  3008             ].
  3009         ]
  3010     ] ifFalse:[
  3011         list := columns
  3012     ].
  3013     self columns:list.
  3014     self updateAfterColumnChange.
  3015 !
  3016 
  3017 updateAfterColumnChange
  3018     self tabModel changed "value:0; value:1".                 "/ toggle to force change
  3019     self selectedColumnModel changed "value:nil; value:1".    "/ toggle to force change
  3020     self updateColumnView.
  3021     self updateInputFields.
  3022     self updateInfoLabel.
  3023     self updateHistory.
  3024     self clearModifiedFlag.
  3025     self enablingCommitButtonsHolder value:false.
  3026 ! !
  3027 
  3028 !DataSetBuilder methodsFor:'code generation'!
  3029 
  3030 compile:aCode forClass:aClass inCategory:aCategory
  3031     "compile method for class in a category"
  3032 
  3033     aClass 
  3034         compile:(aCode withCRs) 
  3035         classified:aCategory
  3036 !
  3037 
  3038 generateBackgroundSelectorIn:aClass
  3039     "generate code for #backgroundSelector"
  3040 
  3041     |sel catg code bCode|
  3042 
  3043     catg := #'accessing look'.
  3044     code :=   '\'
  3045             , '    "automatically generated by DataSetBuilder ..."\'
  3046             , '\'
  3047             , '    "specific background color for a cell"\'
  3048             , '\'
  3049             .
  3050 
  3051     columns do:
  3052     [:aColumn|
  3053         ((sel := aColumn backgroundSelector) notNil and:[(aClass includesSelector:sel) not]) 
  3054         ifTrue:
  3055         [
  3056             bCode := sel asString, code, '    ^nil'.
  3057             self compile:bCode forClass:aClass inCategory:catg
  3058         ]
  3059     ]
  3060 !
  3061 
  3062 generateChoicesIn:aClass
  3063     "generate code for #choices"
  3064 
  3065     |sel catg code edt|
  3066 
  3067     catg := #'accessing menu'.
  3068     code :=   '\'
  3069             , '    "automatically generated by DataSetBuilder ..."\'
  3070             , '\'
  3071             , '    "get choices for visual editor; (a list of labels)..."\'
  3072             , '\'
  3073             , '    ^ #( foo bar baz )'
  3074             .
  3075 
  3076     columns do:[:aColumn|
  3077         edt := aColumn editorType.
  3078 
  3079         (      aColumn canSelect
  3080           and:[(sel := aColumn choices) notNil
  3081           and:[(edt == #ComboBox or:[edt == #ComboList])
  3082           and:[(aClass includesSelector:sel) not]]]
  3083         ) ifTrue:[
  3084             self compile:(sel asString, code) forClass:aClass inCategory:catg
  3085         ]
  3086     ]
  3087 !
  3088 
  3089 generateDoubleClickSelectorIn:aClass
  3090     "generate code for #foregroundSelector"
  3091 
  3092     |sel catg code bCode|
  3093 
  3094     catg := #'accessing-action'.
  3095     code :=   '\'
  3096             , '    "automatically generated by DataSetBuilder ..."\'
  3097             , '\'
  3098             , '    "specific selector to be called on double click"\'
  3099             , '\'
  3100             .
  3101 
  3102     columns do:
  3103     [:aColumn|
  3104         ((sel := aColumn doubleClickedSelector) notNil 
  3105         and:[(aClass includesSelector:sel) not]) 
  3106         ifTrue:
  3107         [
  3108             bCode := sel asString, code.
  3109             self compile:bCode forClass:aClass inCategory:catg
  3110         ]
  3111     ]
  3112 !
  3113 
  3114 generateForegroundSelectorIn:aClass
  3115     "generate code for #foregroundSelector
  3116     "
  3117     |sel catg code bCode|
  3118 
  3119     catg := #'accessing-look'.
  3120     code :=   '\'
  3121             , '    "automatically generated by DataSetBuilder ..."\'
  3122             , '\'
  3123             , '    "specific foreground color for a cell"\'
  3124             , '\'
  3125             .
  3126 
  3127     columns do:
  3128     [:aColumn|
  3129         ((sel := aColumn foregroundSelector) notNil 
  3130         and:[(aClass includesSelector:sel) not]) 
  3131         ifTrue:
  3132         [
  3133             bCode := sel asString, code, '    ^ nil'.
  3134             self compile:bCode forClass:aClass inCategory:catg
  3135         ]
  3136     ]
  3137 !
  3138 
  3139 generateMenuIn:aClass
  3140     "generate code for #menu"
  3141 
  3142     |sel catg code|
  3143 
  3144     catg := #'accessing menu'.
  3145     code :=   '\'
  3146             , '    "automatically generated by DataSetBuilder ..."\'
  3147             , '\'
  3148             , '    "get middleButton menu for selected cell in column"\'
  3149             , '\'
  3150             , '    ^nil'
  3151             .
  3152 
  3153     columns do:
  3154     [:aColumn|
  3155         (aColumn canSelect
  3156         and:[(sel := aColumn menu) notNil
  3157         and:[(aClass includesSelector:sel) not]]) 
  3158         ifTrue:
  3159         [
  3160             self compile:(sel asString, code) forClass:aClass inCategory:catg
  3161         ]
  3162     ]
  3163 !
  3164 
  3165 generatePrintSelectorIn:aClass
  3166     "generate code for #printSelector"
  3167 
  3168     |sel catg code|
  3169 
  3170     catg := #'accessing'.
  3171     code :=   '\'
  3172             , '    "automatically generated by DataSetBuilder ..."\'
  3173             , '\'
  3174             , '    "get drawable image or text on a gc"\'
  3175             , '\'
  3176             , '    ^ '
  3177             .
  3178 
  3179     columns do:[:aColumn|
  3180         (     aColumn rendererType ~~ #rowSelector
  3181          and:[(sel := aColumn printSelector) notNil
  3182          and:[(aClass includesSelector:sel) not]]
  3183         ) ifTrue:[
  3184             |numArgs bcode keys|
  3185             bcode   := sel asString.
  3186             numArgs    := sel numArgs.
  3187 
  3188             numArgs ~~ 0 ifTrue:[
  3189                 numArgs == 1 ifTrue:[
  3190                     bcode := bcode, 'aGC'
  3191                 ] ifFalse:[
  3192                     keys := sel keywords.
  3193                     bcode := (keys at:1), 'aGC ', (keys at:2), 'aColNr'.
  3194                 ]
  3195             ].
  3196             self compile:(bcode, code, '''', bcode, '''') forClass:aClass inCategory:catg
  3197         ]
  3198     ]
  3199 !
  3200 
  3201 generateReadSelectorIn:aClass
  3202     "generate code for #readSelector"
  3203 
  3204     |sel catg code bCode|
  3205 
  3206     catg := #'accessing'.
  3207     code :=   '\'
  3208             , '    "automatically generated by DataSetBuilder ..."\'
  3209             , '\'
  3210             , '    "get value"\'
  3211             , '\'
  3212             .
  3213 
  3214     columns do:
  3215     [:aColumn|
  3216         (aColumn rendererType ~~ #rowSelector 
  3217         and:[(sel := aColumn readSelector) notNil
  3218         and:[(aClass includesSelector:sel) not]]) 
  3219         ifTrue:
  3220         [
  3221             (aColumn printSelector isNil or:[aColumn canSelect]) 
  3222             ifTrue:
  3223             [
  3224                 |selName|
  3225                 selName := sel asString.
  3226 
  3227                 sel numArgs == 0 
  3228                     ifTrue: [bCode := selName, code] 
  3229                     ifFalse:[bCode := selName, 'anIndex\', code].
  3230                 aColumn rendererType == #CheckToggle 
  3231                     ifFalse:[bCode := bCode, '    ^ ''', selName, ''''] 
  3232                     ifTrue: [bCode := bCode, '    ^true']. 
  3233                 self compile:bCode forClass:aClass inCategory:catg
  3234             ]
  3235         ]
  3236     ]
  3237 !
  3238 
  3239 generateRowSeparatorSelectorIn:aClass
  3240     "generate code for #rowSeparatorSelector"
  3241 
  3242     |sel catg code bCode|
  3243 
  3244     catg := #'accessing look'.
  3245     code :=   '\'
  3246             , '    "automatically generated by DataSetBuilder ..."\'
  3247             , '\'
  3248             , '    "specific row separator visibility for a cell"\'
  3249             , '\'
  3250             .
  3251 
  3252     columns do:
  3253     [:aColumn|
  3254         ((sel := aColumn rowSeparatorSelector) notNil and:[(aClass includesSelector:sel) not]) 
  3255         ifTrue:
  3256         [
  3257             bCode := sel asString, code, '    ^true'.
  3258             self compile:bCode forClass:aClass inCategory:catg
  3259         ]
  3260     ]
  3261 !
  3262 
  3263 generateSelectSelectorIn:aClass
  3264     "generate code for #selectSelector
  3265     "
  3266     |sel catg code bCode|
  3267 
  3268     catg := #'accessing selection'.
  3269     code :=   '\'
  3270             , '    "automatically generated by DataSetBuilder ..."\'
  3271             , '\'
  3272             , '    "can select cell in column"\'
  3273             , '\'
  3274             .
  3275 
  3276     columns do:
  3277     [:aColumn|
  3278         (aColumn rendererType ~~ #rowSelector 
  3279          and:[(sel := aColumn selectSelector) notNil
  3280          and:[(aClass includesSelector:sel) not]]) 
  3281          ifTrue:
  3282          [
  3283             aColumn canSelect 
  3284             ifTrue:
  3285             [
  3286                 bCode := sel asString, code, '    ^true'.
  3287                 self compile:bCode forClass:aClass inCategory:catg
  3288             ]
  3289         ]
  3290     ]
  3291 !
  3292 
  3293 generateShowComboFieldSelectorIn:aClass
  3294     "generate code for #showComboFieldSelector
  3295     "
  3296     |sel catg code bCode edt state|
  3297 
  3298     catg := #'accessing menu'.
  3299     code :=   '\'
  3300             , '    "automatically generated by DataSetBuilder ..."\'
  3301             , '\'
  3302             , '    "open an editField on a combo list or box"\'
  3303             , '\'
  3304             .
  3305 
  3306     columns do:[:aColumn|
  3307         edt := aColumn editorType.
  3308 
  3309         (      aColumn canSelect
  3310           and:[(sel := aColumn showComboFieldSelector) notNil
  3311           and:[(edt == #ComboBox or:[edt == #ComboList])
  3312           and:[(aClass includesSelector:sel) not]]]
  3313         ) ifTrue:[
  3314             state := edt == #ComboBoxView.
  3315 
  3316             bCode := sel asString, code, '    ^ ', state printString.
  3317             self compile:bCode forClass:aClass inCategory:catg
  3318         ]
  3319     ]
  3320 !
  3321 
  3322 generateWriteSelectorIn:aClass
  3323     "generate code for #writeSelector"
  3324 
  3325     |sel catg code bCode sz|
  3326 
  3327     catg := #'accessing'.
  3328     code :=   'aValue\'
  3329             , '    "automatically generated by DataSetBuilder ..."\'
  3330             , '\'
  3331             , '    "set value"\'
  3332             .
  3333 
  3334     columns do:
  3335     [:aColumn|
  3336         ((sel := aColumn writeSelector) notNil
  3337          and:[aColumn editorType ~~ #None
  3338          and:[aColumn canSelect
  3339          and:[(aClass includesSelector:sel) not]]]) 
  3340         ifTrue:
  3341         [
  3342             sel numArgs == 1 
  3343             ifTrue:
  3344             [
  3345                 bCode := sel asString
  3346             ] 
  3347             ifFalse:
  3348             [
  3349                 sz := sel indexOf:$:.
  3350                 bCode := sel copyTo:sz.
  3351                 bCode := bCode, 'anIndex ', (sel copyFrom:sz + 1)
  3352             ].
  3353             self compile:(bCode, code) forClass:aClass inCategory:catg
  3354         ]
  3355     ]
  3356 ! !
  3357 
  3358 !DataSetBuilder methodsFor:'event handling'!
  3359 
  3360 processEvent:anEvent
  3361     "filter keyboard edit-events typed into the listOfItemsView.
  3362      Return true, if I have eaten the event"
  3363 
  3364     |evView inView rawKey key|
  3365 
  3366     anEvent isKeyPressEvent ifFalse:[^ false].
  3367 
  3368     evView := anEvent targetView.
  3369     evView isNil ifTrue:[ ^ false ].
  3370 
  3371     inView := evView isSameOrComponentOf:listOfItemsView.
  3372     inView ifTrue:[^ false].
  3373 
  3374     key    := anEvent key.
  3375     rawKey := anEvent rawKey.
  3376 
  3377     (    key == #Delete
  3378      or:[key == #BackSpace
  3379      or:[key == #Cut]]
  3380     ) ifTrue:[
  3381         self doCut.
  3382         ^ true.
  3383     ].
  3384 
  3385     key == #Copy  ifTrue:[ self doCopy.  ^ true ].
  3386     key == #Paste ifTrue:[ self doPaste. ^ true ].
  3387 
  3388     (rawKey == #CtrlCursorUp) ifTrue:[
  3389         self doMoveUp.
  3390         ^ true.
  3391     ].
  3392     (rawKey == #CtrlCursorDown) ifTrue:[
  3393         self doMoveDown.
  3394         ^ true.
  3395     ].
  3396 
  3397     ^ false.
  3398 ! !
  3399 
  3400 !DataSetBuilder methodsFor:'initialization'!
  3401 
  3402 initialize
  3403     "initializes"
  3404 
  3405     super initialize.
  3406 
  3407     selectedColumnIndex := 0.
  3408     columns     := OrderedCollection new.
  3409     modalOpened := false.
  3410     listOfSpecViews := Array new:(self class slices size).
  3411     editingSpecOnly := false.
  3412 !
  3413 
  3414 loadFromResourceSpec: aResourceSpec
  3415     self columns:aResourceSpec copy.
  3416     modified := false.
  3417     hasSaved := false.
  3418     self updateAfterColumnChange.
  3419 !
  3420 
  3421 setDefaultValuesInNewColumn:aDataSetColumnSpec
  3422 "/    aDataSetColumnSpec readSelector: #'valueAtColumnIndex:'.
  3423 "/    aDataSetColumnSpec writeSelector: #'valueAtColumnIndex:put:'.
  3424 "/    aDataSetColumnSpec backgroundSelector: #'bgAtRowIndex:columnIndex:'.
  3425 "/    aDataSetColumnSpec foregroundSelector: #'fgAtRowIndex:columnIndex:'.
  3426 "/    aDataSetColumnSpec selectSelector: #'selectAtColumnIndex:'.
  3427 "/    aDataSetColumnSpec editorType: #InputField.
  3428 ! !
  3429 
  3430 !DataSetBuilder methodsFor:'operations'!
  3431 
  3432 addCellSeparators
  3433     self addRowSeparators.
  3434     self addColumnSeparators.
  3435 !
  3436 
  3437 addColumnSeparators
  3438     self selectedColumnsDo:[:eachColDescr |
  3439         eachColDescr showColSeparator:true
  3440     ].
  3441     self updateAfterOperation.
  3442 !
  3443 
  3444 addLabelColumnSeparators
  3445     self selectedColumnsDo:[:eachColDescr |
  3446         eachColDescr labelButtonType:#Button
  3447     ].
  3448     self updateAfterOperation.
  3449 !
  3450 
  3451 addLabelSeparators
  3452     self selectedColumnsDo:[:eachColDescr |
  3453         eachColDescr labelButtonType:#Button
  3454     ].
  3455     self updateAfterOperation.
  3456 !
  3457 
  3458 addRowSeparators
  3459     self selectedColumnsDo:[:eachColDescr |
  3460         eachColDescr showRowSeparator:true
  3461     ].
  3462     self updateAfterOperation.
  3463 !
  3464 
  3465 alignColumns:how
  3466     self selectedColumnsDo:[:eachColDescr |
  3467         eachColDescr columnAlignment:how
  3468     ].
  3469     self updateAfterOperation.
  3470 !
  3471 
  3472 alignColumnsCentered
  3473     self alignColumns:#centered
  3474 !
  3475 
  3476 alignColumnsLeft
  3477     self alignColumns:#left
  3478 !
  3479 
  3480 alignColumnsRight
  3481     self alignColumns:#right
  3482 !
  3483 
  3484 alignLabels:how
  3485     self selectedColumnsDo:[:eachColDescr |
  3486         eachColDescr labelAlignment:how
  3487     ].
  3488     self updateAfterOperation.
  3489 !
  3490 
  3491 alignLabelsCentered
  3492     self alignLabels:#centered
  3493 !
  3494 
  3495 alignLabelsLeft
  3496     self alignLabels:#left
  3497 !
  3498 
  3499 alignLabelsRight
  3500     self alignLabels:#right
  3501 !
  3502 
  3503 makeColumnsSelectable
  3504     self makeColumnsSelectable:true
  3505 !
  3506 
  3507 makeColumnsSelectable:aBoolean
  3508     self selectedColumnsDo:[:eachColDescr |
  3509         eachColDescr canSelect:aBoolean
  3510     ].
  3511     self updateAfterOperation.
  3512 !
  3513 
  3514 makeColumnsUnselectable
  3515     self makeColumnsSelectable:false
  3516 !
  3517 
  3518 makeSelectedCellsSelectable
  3519     self selectedColumnsDo:[:eachColDescr |
  3520         eachColDescr canSelect:true
  3521     ].
  3522     self updateAfterOperation.
  3523 !
  3524 
  3525 makeSelectedCellsUnselectable
  3526     self selectedColumnsDo:[:eachColDescr |
  3527         eachColDescr canSelect:false
  3528     ].
  3529     self updateAfterOperation.
  3530 !
  3531 
  3532 removeCellSeparators
  3533     self removeRowSeparators.
  3534     self removeColumnSeparators.
  3535 !
  3536 
  3537 removeColumnSeparators
  3538     self selectedColumnsDo:[:eachColDescr |
  3539         eachColDescr showColSeparator:false
  3540     ].
  3541     self updateAfterOperation.
  3542 !
  3543 
  3544 removeLabelColumnSeparators
  3545     self selectedColumnsDo:[:eachColDescr |
  3546         eachColDescr labelButtonType:#Group
  3547     ].
  3548     self updateAfterOperation.
  3549 !
  3550 
  3551 removeLabelSeparators
  3552     self selectedColumnsDo:[:eachColDescr |
  3553         eachColDescr labelButtonType:#None
  3554     ].
  3555     self updateAfterOperation.
  3556 !
  3557 
  3558 removeRowSeparators
  3559     self selectedColumnsDo:[:eachColDescr |
  3560         eachColDescr showRowSeparator:false
  3561     ].
  3562     self updateAfterOperation.
  3563 !
  3564 
  3565 selectedColumnsDo:aBlock
  3566     selectedColumnIndex isCollection ifTrue:[
  3567         selectedColumnIndex do:[:idx | aBlock value:(columns at:idx)].
  3568     ] ifFalse:[
  3569         selectedColumnIndex ~~ 0 ifTrue:[
  3570             selectedColumnIndex notNil ifTrue:[
  3571                 aBlock value:(columns at:selectedColumnIndex)
  3572             ]
  3573         ].  
  3574     ].
  3575 !
  3576 
  3577 setCellColorSelectors
  3578     |fgSelector bgSelector|
  3579 
  3580     fgSelector := Dialog request:'FG-Selector for all selected Columns (accept empty for none):'.
  3581     fgSelector isNil ifTrue:[^ self].
  3582 
  3583     bgSelector := Dialog request:'BG-Selector for all selected Columns (accept empty for none):'.
  3584     bgSelector isNil ifTrue:[^ self].
  3585 
  3586     self selectedColumnsDo:[:eachColDescr |
  3587         bgSelector notEmpty ifTrue:[
  3588             eachColDescr backgroundSelector:bgSelector
  3589         ].
  3590         fgSelector notEmpty ifTrue:[
  3591             eachColDescr foregroundSelector:fgSelector
  3592         ].
  3593     ].
  3594     self updateAfterOperation.
  3595 !
  3596 
  3597 setSelectedCellColorSelectors
  3598     |fgSelector bgSelector|
  3599 
  3600     fgSelector := Dialog request:'Selected FG-Selector for all selected Columns (accept empty for none):'.
  3601     fgSelector isNil ifTrue:[^ self].
  3602 
  3603     bgSelector := Dialog request:'Selected BG-Selector for all selected Columns (accept empty for none):'.
  3604     bgSelector isNil ifTrue:[^ self].
  3605 
  3606     self selectedColumnsDo:[:eachColDescr |
  3607         bgSelector notEmpty ifTrue:[
  3608             eachColDescr selectedBackgroundSelector:bgSelector
  3609         ].
  3610         fgSelector notEmpty ifTrue:[
  3611             eachColDescr selectedForegroundSelector:fgSelector
  3612         ].
  3613     ].
  3614     self updateAfterOperation.
  3615 !
  3616 
  3617 updateAfterOperation
  3618     self updateColumnView.
  3619     self updateInputFields.
  3620     self setModified.
  3621 ! !
  3622 
  3623 !DataSetBuilder methodsFor:'private'!
  3624 
  3625 labelFromColumn:aColumn
  3626     |label|
  3627 
  3628     aColumn rendererType == #rowSelector ifTrue:[
  3629         ^ 'Row Selector'
  3630     ].
  3631     label := aColumn label.
  3632     label isNil ifTrue:[^ nil].
  3633 
  3634     label isString ifTrue:[^ label].
  3635 
  3636     label size > 0 ifTrue:[
  3637          label := label at:1.
  3638     ].
  3639     ^ label printString
  3640 !
  3641 
  3642 labelInPreviewPressed:anIndex
  3643    (self componentAt:#labelAndColumns) selection:anIndex
  3644 !
  3645 
  3646 updateColumnView
  3647     "updates the column view from column descriptions"
  3648 
  3649     |size previewColumns columnList|
  3650 
  3651     columnView notNil ifTrue:[
  3652         columnList     := List new.
  3653         previewColumns := OrderedCollection new.
  3654 
  3655         (size := columns size) ~~ 0 ifTrue:[
  3656             columns do:[:aCol|
  3657                 previewColumns add:(aCol copy)
  3658             ].
  3659             previewColumns keysAndValuesDo:[:anIndex :column| 
  3660                 column 
  3661                     readSelector:  #at:;
  3662                     writeSelector: #at:put:;
  3663                     backgroundSelector:nil;
  3664                     foregroundSelector:nil;
  3665                     rowSeparatorSelector:nil;
  3666                     selectSelector: nil;
  3667                     showComboFieldSelector: nil;
  3668                     selectSelector: nil;
  3669                     doubleClickedSelector: nil;
  3670                     printSelector: nil;
  3671                     visibilitySelector: nil;
  3672                     menu: nil;
  3673                     labelActionSelector:#labelInPreviewPressed:;
  3674                     labelActionArgument:anIndex;
  3675                     choices:#choices
  3676             ].
  3677             #(' 1' ' 2' ' x') do:[:suffix|
  3678                 |oneRow|
  3679 
  3680                 oneRow := Row new:size.
  3681                 1 to:size do:[:i | oneRow at: i put: ('Cell%1-%2' bindWith:suffix with:i)].
  3682                 columnList add: oneRow.
  3683             ]
  3684         ].
  3685 
  3686         columnView list: #().
  3687         columnView columnDescriptors: previewColumns.
  3688         columnView list: columnList.
  3689     ].
  3690 
  3691     "Modified: / 27.10.1998 / 14:41:16 / cg"
  3692 !
  3693 
  3694 updateInputFields
  3695     "reloads item value into input fields"
  3696 
  3697     |column notifyValue|
  3698 
  3699     (column := self selectedColumn) isNil ifTrue:[
  3700         self tabModel value:0.
  3701     ] ifFalse:[
  3702         notifyValue := nil.     "/ old: '' -> problems with Toggles (asBoolean)
  3703 
  3704         aspects do:[:anAspect| anAspect value:notifyValue ].
  3705         aspects keysAndValuesDo:[:aKey :aModel |
  3706             aModel value:(column perform:aKey) withoutNotifying: self
  3707         ].
  3708 
  3709 "/ REPALCE nil by empty string for specific inputFields without an adapter
  3710         #( #labelActionArgument #formatString #id ) do:[:aKey| |model|
  3711             model := aspects at:aKey.
  3712             model value isNil ifTrue:[model value:notifyValue withoutNotifying: self]
  3713         ].
  3714 
  3715         tabSelection == 0 ifTrue:[self tabModel value:1].
  3716     ].
  3717 ! !
  3718 
  3719 !DataSetBuilder methodsFor:'selection'!
  3720 
  3721 selectedColumn
  3722     "returns selected column or nil"
  3723 
  3724     selectedColumnIndex isCollection ifTrue:[
  3725         ^ selectedColumnIndex size == 1 
  3726             ifTrue:[ columns at:selectedColumnIndex first ]
  3727             ifFalse:[ nil ] 
  3728     ].
  3729 
  3730     ^selectedColumnIndex == 0 
  3731         ifFalse:[columns at:selectedColumnIndex ifAbsent: nil]
  3732         ifTrue: [nil]
  3733 !
  3734 
  3735 selectedColumnIndex
  3736     "returns selected column index or 0"
  3737 
  3738     ^selectedColumnIndex
  3739 !
  3740 
  3741 selectedColumnIndex:something
  3742     "changes selected column and updates specifications"
  3743 
  3744     something == selectedColumnIndex ifFalse:[
  3745         selectedColumnIndex := something ? 0.
  3746         "/ self assert:( selectedColumnIndex <= columns size ).
  3747         "/ self assert:( selectedColumnIndex <= self seqList size ).
  3748         self isColumnSelected value: true
  3749     ].
  3750 !
  3751 
  3752 selectedColumnIndices
  3753     "returns selected column indices or #()"
  3754 
  3755     selectedColumnIndex == 0 ifTrue:[ ^ #() ].
  3756     selectedColumnIndex isNumber ifTrue:[ ^ Array with:selectedColumnIndex ].
  3757     ^selectedColumnIndex
  3758 !
  3759 
  3760 selectedColumns
  3761     selectedColumnIndex isCollection ifTrue:[
  3762         ^ selectedColumnIndex collect:[:idx | columns at:idx] 
  3763     ].
  3764 
  3765     ^ selectedColumnIndex == 0 
  3766         ifFalse:[ Array with:(columns at:selectedColumnIndex) ]
  3767         ifTrue: [ #() ]
  3768 !
  3769 
  3770 singleSelectedColumnIndex
  3771     selectedColumnIndex isCollection ifTrue:[
  3772         ^ selectedColumnIndex size == 1 
  3773             ifTrue:[ selectedColumnIndex first ]
  3774             ifFalse:[ 0 ] 
  3775     ].
  3776 
  3777     ^ selectedColumnIndex
  3778 !
  3779 
  3780 tabSelection:something
  3781     "changes selected tab and set corresponding specification"
  3782 
  3783     |view spec|
  3784 
  3785     something == tabSelection ifTrue:[^self].
  3786 
  3787     (tabSelection := something) isNil ifTrue:[
  3788         tabSelection == 0 ifTrue:[^ self].
  3789         tabSelection := 0.
  3790     ].
  3791 
  3792     self selectedColumn isNil ifTrue:[
  3793         tabSelection ~~ 0 ifTrue:[
  3794             self tabModel value:0
  3795         ] ifFalse:[
  3796             self canvasHolder value:nil
  3797         ].
  3798         ^ self
  3799     ].
  3800 
  3801     tabSelection == 0 ifTrue:[
  3802         ^ self tabModel value:1.
  3803     ].
  3804 
  3805     (view := listOfSpecViews at:tabSelection) isNil ifTrue:[
  3806         view := SimpleView new.
  3807         spec := (self class slices at:tabSelection) last.
  3808 
  3809 "/        view client:nil spec:(self class interfaceSpecFor:spec) builder:(self builder).
  3810         view client:self spec:spec builder:(self builder).
  3811         listOfSpecViews at:tabSelection put:view.
  3812     ].
  3813     self canvasHolder value:view
  3814 ! !
  3815 
  3816 !DataSetBuilder methodsFor:'startup & release'!
  3817 
  3818 commonPostBuild
  3819     columnView := self componentAt:#columnView.
  3820 
  3821     columns notEmpty ifTrue: [
  3822         self tabModel value: 1. 
  3823         self selectedColumnModel value:nil; value:1.    "/ toggle to force change
  3824         self updateInputFields.
  3825         self updateInfoLabel.
  3826         self updateHistory
  3827     ].
  3828 
  3829     (self componentAt: #labelAndColumns) 
  3830         selectConditionBlock: [:i|self askForItemModification];
  3831         action: [:i|self cancel];
  3832         selection: 1.
  3833 
  3834     "/ using masters infoHolder ?
  3835     (builder aspectAt:#useAlienInfoLabelHolder) == true ifTrue:[
  3836         (builder componentAt:#mainPanel) layout bottomOffset:0.
  3837         (builder componentAt:#infoBarSubSpec) beInvisible
  3838     ]                         
  3839 !
  3840 
  3841 openModal
  3842     "sets the modalOpened flag, so later, 
  3843      there is no need to ask for saving into a class"
  3844 
  3845     modalOpened := true.
  3846     super openModal
  3847 !
  3848 
  3849 openModalOnResourceSpec: aListSpec
  3850     "sets the modalOpened flag, so later, 
  3851      there is no need to ask for saving into a class"
  3852 
  3853     modalOpened := true.
  3854     super openModalOnResourceSpec: aListSpec
  3855 
  3856 
  3857 !
  3858 
  3859 postBuildListOfItemsView:aView
  3860     listOfItemsView := aView
  3861 !
  3862 
  3863 postBuildSpecView:aView
  3864     listOfItemsView := aView
  3865 !
  3866 
  3867 postOpenWith:aBuilder
  3868     "reset keyboardProcessor for menuBar"
  3869 
  3870     super postOpenWith:aBuilder.
  3871     aBuilder keyboardProcessor menuBar:nil.
  3872     self windowGroup addPreEventHook:self.
  3873 ! !
  3874 
  3875 !DataSetBuilder methodsFor:'user actions'!
  3876 
  3877 accept
  3878     "accept changes made"
  3879 
  3880     |column type|
  3881 
  3882     super accept.
  3883 
  3884     (column := self selectedColumn) isNil ifTrue: [^self cancel].
  3885 
  3886     type := (aspects at:#rendererType) value.
  3887 
  3888     type == #rowSelector ifTrue:[
  3889         #(label 
  3890           width minWidth usePreferredWidth editorType choices translatedChoices
  3891           readSelector writeSelector printSelector visibilitySelector
  3892           formatString formatSelector type converterSelector size height canSelect selectSelector showComboFieldSelector
  3893           minValue maxValue
  3894          ) do:[:aKey|
  3895             (aspects at:aKey) value:nil
  3896         ]
  3897     ].
  3898     aspects keysAndValuesDo:[:aKey :aModel| 
  3899         column perform:(aKey , ':') asSymbol with: aModel value
  3900     ].
  3901     self seqList at:self singleSelectedColumnIndex put:(self labelFromColumn:column).
  3902     self updateColumnView.
  3903     self cancel.
  3904     self clearModified.
  3905 !
  3906 
  3907 cancel
  3908     "remove all changes and reload selected column values"
  3909 
  3910     self updateInputFields.
  3911     self enablingCommitButtonsHolder value:false.
  3912     self clearModifiedFlag.
  3913     self enablingCommitButtonsHolder value:false.
  3914 
  3915     "Modified: / 27.10.1998 / 14:41:41 / cg"
  3916 !
  3917 
  3918 cutOrDelete:isCut
  3919     "remove selected column and optionally put it to the clipboard"
  3920 
  3921     |indices selectionModel|
  3922 
  3923     ((indices := self selectedColumnIndices) notEmpty and:[self askForItemModification]) ifFalse:[
  3924         ^ self
  3925     ].
  3926     isCut ifTrue:[
  3927         self clipboard: (self selectedColumns)
  3928     ].
  3929 
  3930     selectionModel := self selectedColumnModel.
  3931     selectionModel value:0.
  3932 
  3933     indices sort reverseDo:[:idx |
  3934         columns removeIndex:idx.
  3935         self seqList removeIndex:idx.
  3936     ].
  3937 
  3938     selectionModel value:((indices max) min:(columns size)).
  3939     self updateColumnView.
  3940     self updateInputFields.
  3941 
  3942     columns isEmpty ifTrue:[
  3943         self isColumnSelected value: false
  3944     ].
  3945     self cancel.
  3946     self setModified.
  3947 !
  3948 
  3949 doAddColumn:descr
  3950     "adds a new column after the selected column or at the left (if nothing is selected)"
  3951 
  3952     columns add:descr afterIndex:(self singleSelectedColumnIndex min:columns size).
  3953     self setDefaultValuesInNewColumn:descr.
  3954     self seqList add:(descr label) afterIndex:self singleSelectedColumnIndex.
  3955     self enablingCommitButtonsHolder value ifFalse:[
  3956         self selectedColumnModel value:self singleSelectedColumnIndex + 1
  3957     ].
  3958     self cancel.
  3959     self updateColumnView.
  3960     self setModified.
  3961 !
  3962 
  3963 doBrowseRowClass
  3964     "browse class of columns spec"
  3965 
  3966     |cls|
  3967 
  3968     (cls := self resolveRowClass) notNil 
  3969         ifTrue: [Smalltalk browseInClass:cls] 
  3970         ifFalse:[self information:'No class defined !!']
  3971 
  3972     "Modified: / 20.5.1998 / 03:48:04 / cg"
  3973 !
  3974 
  3975 doCopy
  3976     "copy selected columns to the clipboard"
  3977 
  3978     |cols|
  3979 
  3980     cols := self selectedColumns.
  3981     cols notEmptyOrNil ifTrue:[
  3982         self clipboard:(cols deepCopy)
  3983     ]
  3984 !
  3985 
  3986 doCreateColumn
  3987     "create a new column after selected column or at left (nothing selected)"
  3988 
  3989     |label list dscs descr|
  3990 
  3991 "/    list := self seqList.
  3992 "/    label := 'Column ', (list size + 1) printString.
  3993 "/    columns add:(dscs := DataSetColumnSpec label:label selector:nil) afterIndex:selectedColumnIndex.
  3994 "/    self setDefaultValuesInNewColumn:dscs.
  3995 "/    self seqList add:label afterIndex:selectedColumnIndex.
  3996 "/    self enablingCommitButtonsHolder value ifFalse:[
  3997 "/        self selectedColumnModel value:selectedColumnIndex + 1
  3998 "/    ].
  3999 "/    self cancel.
  4000 "/    self updateColumnView.
  4001 "/    self setModified.
  4002 "/
  4003 
  4004     label := 'Column ', (self seqList size + 1) printString.
  4005     descr := DataSetColumnSpec label:label selector:nil.
  4006     self doAddColumn:descr
  4007 !
  4008 
  4009 doCreateNonSelectableColumn
  4010     "create a new column after selected column or at left (nothing selected)"
  4011 
  4012     |label list dscs descr|
  4013 
  4014 "/    list := self seqList.
  4015 "/    label := 'Column ', (list size + 1) printString.
  4016 "/    columns add:(dscs := DataSetColumnSpec label:label selector:nil) afterIndex:selectedColumnIndex.
  4017 "/    self setDefaultValuesInNewColumn:dscs.
  4018 "/    self seqList add:label afterIndex:selectedColumnIndex.
  4019 "/    self enablingCommitButtonsHolder value ifFalse:[
  4020 "/        self selectedColumnModel value:selectedColumnIndex + 1
  4021 "/    ].
  4022 "/    self cancel.
  4023 "/    self updateColumnView.
  4024 "/    self setModified.
  4025 "/
  4026 
  4027     label := 'Column ', (self seqList size + 1) printString.
  4028     descr := DataSetColumnSpec label:label selector:nil.
  4029     descr canSelect:false.
  4030     self doAddColumn:descr
  4031 !
  4032 
  4033 doCut
  4034     "remove selected column and put it to the clipboard"
  4035 
  4036     self cutOrDelete:true
  4037 !
  4038 
  4039 doDefineRowClass
  4040     "launch a dialog to define class and superclass"
  4041 
  4042     |aspects cls oldClass oldSuper val classNameChannel superclassNameChannel|
  4043 
  4044     aspects  := IdentityDictionary new.
  4045     oldClass := rowClass.
  4046     oldSuper := rowSuperClass.
  4047 
  4048     [true] 
  4049     whileTrue:
  4050     [
  4051         rowClass notNil ifTrue:[
  4052             (cls := self resolveRowClass) notNil ifTrue:[
  4053                 rowSuperClass := cls superclass name asString
  4054             ].
  4055             val := rowClass
  4056         ] ifFalse:[
  4057             val := 'DSVRow'
  4058         ].
  4059         aspects at:#classNameChannel put:(classNameChannel := ValueHolder with:val).
  4060 
  4061         rowSuperClass notNil 
  4062             ifTrue: [val := rowSuperClass] 
  4063             ifFalse:[val := 'Object'].
  4064         aspects at:#superclassNameChannel put:(superclassNameChannel := ValueHolder with:val).
  4065 
  4066         (self openDialogInterface:#defineClassNameSpec withBindings:aspects) 
  4067         ifFalse:
  4068         [
  4069             rowClass := oldClass.
  4070             rowSuperClass := oldSuper.
  4071             ^self
  4072         ].
  4073         rowClass      := (classNameChannel value)      withoutSeparators.
  4074         rowSuperClass := (superclassNameChannel value) withoutSeparators.
  4075 
  4076         rowClass size == 0 
  4077         ifTrue:
  4078         [
  4079             rowClass := nil.
  4080             self information:'no valid className'
  4081         ] 
  4082         ifFalse: 
  4083         [
  4084             cls := self resolveRowClass.
  4085 
  4086             cls notNil ifTrue:[cls := cls superclass name asString].
  4087 
  4088             rowSuperClass size == 0 
  4089             ifTrue:
  4090             [        
  4091                 cls notNil ifTrue:[
  4092                     rowSuperClass := cls
  4093                 ] ifFalse:[
  4094                     rowSuperClass := 'Object'
  4095                 ].
  4096                 self information: 'set superclassName'
  4097             ] 
  4098             ifFalse:
  4099             [
  4100                 (cls isNil or:[rowSuperClass = cls]) ifTrue:[^self].
  4101                 self information:('A global named ' , rowClass , ' exists,\' ,
  4102                                   'but is not a subclass of ' , rowSuperClass, '.\\' ,
  4103                                   'Check and try again if that is not what you want.') withCRs.
  4104 
  4105                 rowSuperClass := cls
  4106             ]
  4107         ]
  4108     ]
  4109 
  4110     "Modified: / 21.5.1998 / 03:08:42 / cg"
  4111 !
  4112 
  4113 doDelete
  4114     "remove selected column and put it to the clipboard"
  4115 
  4116     self cutOrDelete:false
  4117 
  4118 !
  4119 
  4120 doGenerateCode
  4121     "generate code for column values"
  4122 
  4123     |cls superclass|
  4124 
  4125     rowClass isNil ifTrue:[^self information:'No class defined!!'].
  4126     cls := self resolveRowClass.
  4127 
  4128     cls isNil 
  4129     ifTrue:
  4130     [
  4131         superclass := Smalltalk resolveName:rowSuperClass inClass:self class.
  4132 
  4133         superclass isNil ifTrue:[^self information:'No superclass defined!!'].
  4134         (self confirm:'create ' , rowClass , ' ?') ifFalse:[^self].
  4135         cls := superclass subclass:rowClass asSymbol
  4136                      instanceVariableNames:''
  4137                      classVariableNames:''
  4138                      poolDictionaries:''
  4139                      category:'Applications'.
  4140     ].
  4141 
  4142     self generateChoicesIn:cls.
  4143     self generateMenuIn:cls.
  4144     self generatePrintSelectorIn:cls.
  4145     self generateReadSelectorIn:cls.
  4146     self generateBackgroundSelectorIn:cls.
  4147     self generateForegroundSelectorIn:cls.
  4148     self generateSelectSelectorIn:cls.
  4149     self generateWriteSelectorIn:cls.
  4150     self generateDoubleClickSelectorIn:cls.
  4151     self generateRowSeparatorSelectorIn:cls.
  4152     self generateShowComboFieldSelectorIn:cls.
  4153 
  4154 !
  4155 
  4156 doMoveColumn:upOrDown
  4157     "move selected column up or down"
  4158 
  4159     |idx list label col size tabIndex|
  4160 
  4161     (idx := self singleSelectedColumnIndex) == 0 ifTrue:[^self].
  4162     list := self seqList.
  4163     size := list size.
  4164 
  4165     size > 1 ifFalse:[ ^ self ].
  4166 
  4167     selectedColumnIndex := 0.
  4168     tabIndex := self tabModel value.
  4169 
  4170     label := list at:idx.
  4171     col   := columns at:idx.
  4172     list    removeIndex:idx.
  4173     columns removeIndex:idx.
  4174 
  4175     upOrDown == #up ifTrue:[
  4176         idx == 1 ifTrue:[idx := size]
  4177                 ifFalse:[idx := idx - 1]
  4178     ] ifFalse:[
  4179         idx == size ifTrue:[idx := 1]
  4180                    ifFalse:[idx := idx + 1]
  4181     ].
  4182     columns add:col   beforeIndex:idx.
  4183     list    add:label beforeIndex:idx.
  4184 
  4185     self selectedColumnModel value:idx.
  4186     self updateColumnView.
  4187     self tabModel value:tabIndex.
  4188 
  4189     self setModified.
  4190 !
  4191 
  4192 doMoveDown
  4193     self doMoveColumn:#down
  4194 !
  4195 
  4196 doMoveUp
  4197     self doMoveColumn:#up
  4198 !
  4199 
  4200 doPaste
  4201     "paste clipboard copy column after selected column or at left (nothing selected)"
  4202 
  4203     |cols idx newSel|
  4204 
  4205     self askForItemModification ifFalse: [^ self].
  4206 
  4207     cols := self class clipboard.
  4208     cols isEmptyOrNil ifTrue:[^ self].
  4209 
  4210     idx := (self selectedColumnIndices) isEmpty 
  4211                 ifTrue:[ columns size ]
  4212                 ifFalse:[ self selectedColumnIndices max ].
  4213 
  4214     newSel := OrderedCollection new.
  4215     cols do:[:col |
  4216         | lbl|
  4217 
  4218         lbl := self labelFromColumn:col.
  4219 
  4220         columns add:(col deepCopy) afterIndex:idx.
  4221         self seqList add:lbl afterIndex:idx.
  4222         idx := idx + 1.
  4223         newSel add:idx.
  4224     ].
  4225 
  4226     self enablingCommitButtonsHolder value ifFalse:[
  4227         self selectedColumnModel value:newSel "/idx
  4228     ].
  4229     self updateColumnView.
  4230     self updateInputFields.
  4231     self setModified.
  4232 !
  4233 
  4234 doPickColumns
  4235 
  4236     |view cls|
  4237 
  4238     view := Screen current viewFromUser.
  4239     cls  := view class.
  4240 
  4241     (cls == DSVColumnView or:[cls == DataSetView or:[cls == DSVLabelView]]) ifTrue:[
  4242         self columns:(view columnView columnDescriptors)
  4243     ]
  4244 !
  4245 
  4246 doSave
  4247     |cls dst spc category mthd excla code resourceType|
  4248 
  4249     editingSpecOnly == true ifTrue:[
  4250         acceptedColumns := columns.
  4251         hasSaved := true.
  4252         self clearModified.
  4253         ^ self.
  4254     ].
  4255 
  4256     (columns size ~~ 0 and:[super doSave]) ifFalse:[
  4257         ^ nil
  4258     ].
  4259 
  4260     cls := self resolveName:specClass.
  4261     dst := columns collect:[:aCol| aCol literalArrayEncoding ].
  4262     spc := WriteStream on:String new.
  4263     spc nextPutAll:'    ^'.
  4264     UISpecification prettyPrintSpecArray:dst asArray on:spc indent:4.
  4265     spc := spc contents.
  4266 
  4267     "/ if that method already exists, do not overwrite the category
  4268 
  4269     resourceType := self class resourceType.
  4270     category     := resourceType, ' specs'.
  4271 
  4272     (mthd := cls class compiledMethodAt:specSelector) notNil ifTrue:[
  4273         category := mthd category.
  4274     ].
  4275 
  4276     excla := Character excla asString.
  4277 
  4278     code := excla
  4279             , (cls name , ' class methodsFor:' , category storeString)
  4280             , excla , '\\'
  4281 
  4282             , specSelector , '\'
  4283             , (self class codeGenerationComment replChar:$!! withString:'!!!!')
  4284             , '\\    "\'
  4285             , ('     DataSetBuilder new openOnClass:' , cls name , ' andSelector:#' , specSelector , '\')
  4286             , '    "\'.
  4287 
  4288     code := code 
  4289             , '\'
  4290             , '    <resource: #', resourceType, '>\\'
  4291             , spc
  4292             , '\'
  4293             , (excla , ' ' , excla)
  4294             , '\\'.
  4295 
  4296     code := code withCRs.
  4297     (ReadStream on:code) fileIn.
  4298 
  4299 "/    self isStandAlone ifTrue: [self helpTool installHelpSpecsOnClass:self specClass].
  4300 
  4301     self updateHistory.
  4302     self updateInfoLabel.
  4303 
  4304     hasSaved := true.
  4305     self clearModified.
  4306 !
  4307 
  4308 openDocumentation
  4309    self openHTMLDocument:'tools/uipainter/DataSetBuilder.html'.
  4310 ! !
  4311 
  4312 !DataSetBuilder::Row methodsFor:'accessing'!
  4313 
  4314 choices
  4315     ^ #( 'foo' 'bar' 'baz' )
  4316 
  4317 
  4318 ! !
  4319 
  4320 !DataSetBuilder::Row methodsFor:'message handling'!
  4321 
  4322 doesNotUnderstand:aMessage
  4323     "does not understand message; delegate to column view
  4324     "
  4325     ^ nil
  4326 
  4327 ! !
  4328 
  4329 !DataSetBuilder class methodsFor:'documentation'!
  4330 
  4331 version
  4332     ^ '$Header$'
  4333 ! !