sort stuff (UBS)
authorClaus Gittinger <cg@exept.de>
Mon, 02 Mar 2009 19:17:48 +0100
changeset 2475 5b9b2f78c24d
parent 2474 675a80b62692
child 2476 a8dbbb7aa571
sort stuff (UBS)
DataSetBuilder.st
--- a/DataSetBuilder.st	Mon Feb 16 14:20:53 2009 +0100
+++ b/DataSetBuilder.st	Mon Mar 02 19:17:48 2009 +0100
@@ -87,6 +87,7 @@
         translatedChoices
         editorType
         formatString
+        formatSelector
         labelIsImage
         labelButtonType
         translateLabel
@@ -129,6 +130,7 @@
         columnAlignment
         minValue
         maxValue
+        isSortable
      )
 
     "Modified: / 26-03-2007 / 14:05:10 / cg"
@@ -208,6 +210,12 @@
 #basicsFont
 'Sets the font of the labeled text.'
 
+#isSortable
+'Adds indicator to allow user to sort rows based on this column.'
+
+#sortSelector
+'Sent to the row to extract the column-value used for sorting'
+
 #basicsJustification
 'Aligns the label to the left, right, or center in the cell.'
 
@@ -266,7 +274,7 @@
 'Specify class/selector and install the column description'
 
 #formatFormatSelector
-'Selector sent to the row to get the Format string.'
+'Selector sent to the row to get the format string.'
 
 #formatInputType
 'A type converter symbol used by the input field.'
@@ -275,7 +283,7 @@
 'Maximum size of the string which can be typed in. 0 or nil means unlimited.'
 
 #formatTextFormat
-'Format string specifying the output format of the cell text. (for example: %5.4f gives 0.0000).'
+'Format string specifying the output format of the cell text. (printf-format - for example: %5.4f gives 0.0000).'
 
 #frameColumnWidth
 'Width (fixed or relative) of a column (optional).'
@@ -437,268 +445,282 @@
           label: 'DataSet Basic'
           name: 'DataSet Basic'
           min: (Point 10 10)
-          bounds: (Rectangle 0 0 389 418)
+          bounds: (Rectangle 0 0 389 473)
         )
         component: 
        (SpecCollection
           collection: (
-           (FramedBoxSpec
-              label: 'Header:'
-              name: 'framedBox1'
-              layout: (LayoutFrame 0 0.0 3 0 0 1.0 180 0)
-              labelPosition: topLeft
-              translateLabel: true
+           (VerticalPanelViewSpec
+              name: 'VerticalPanel1'
+              layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              horizontalLayout: fit
+              verticalLayout: top
+              horizontalSpace: 3
+              verticalSpace: 3
               component: 
              (SpecCollection
                 collection: (
-                 (LabelSpec
-                    label: 'ID:'
-                    name: 'idLabel'
-                    layout: (AlignmentOrigin 94 0 14 0 1 0.5)
-                    translateLabel: true
-                    resizeForLabel: true
-                  )
-                 (InputFieldSpec
-                    name: 'idField'
-                    layout: (LayoutFrame 97 0 0 0 2 1.0 22 0)
-                    activeHelpKey: basicsLabelId
-                    tabable: true
-                    model: id
-                    group: inputGroup
-                    acceptOnLostFocus: false
-                    acceptChannel: acceptChannel
-                    modifiedChannel: modifiedChannel
-                    acceptOnPointerLeave: false
-                  )
-                 (LabelSpec
-                    label: 'Label:'
-                    name: 'label1'
-                    layout: (AlignmentOrigin 94 0 39 0 1 0.5)
-                    translateLabel: true
-                    resizeForLabel: true
-                  )
-                 (InputFieldSpec
-                    name: 'labelField'
-                    layout: (LayoutFrame 97 0 28 0 2 1.0 50 0)
-                    activeHelpKey: basicsLabel
-                    tabable: true
-                    model: label
-                    group: inputGroup
-                    type: smalltalkObject
-                    immediateAccept: false
-                    acceptOnLeave: false
-                    acceptOnLostFocus: false
-                    acceptChannel: acceptChannel
-                    modifiedChannel: modifiedChannel
-                    acceptOnPointerLeave: false
-                  )
-                 (LabelSpec
-                    label: 'Font:'
-                    name: 'LabelFont'
-                    layout: (AlignmentOrigin 94 0 68 0 1 0.5)
+                 (FramedBoxSpec
+                    label: 'Header:'
+                    name: 'headerFrame'
+                    labelPosition: topLeft
                     translateLabel: true
-                    resizeForLabel: true
-                    adjust: left
-                  )
-                 (FontMenuSpec
-                    name: 'fontMenu'
-                    layout: (LayoutFrame 97 0 56 0 0 1.0 78 0)
-                    activeHelpKey: labelFont
-                    model: style
-                    allowSymbolicFonts: true
-                  )
-                 (LabelSpec
-                    label: 'Type:'
-                    name: 'Type'
-                    layout: (AlignmentOrigin 52 0 105 0 1 0.5)
-                    translateLabel: true
-                    resizeForLabel: true
-                    adjust: right
-                  )
-                 (ComboListSpec
-                    name: 'labelButtonType'
-                    layout: (LayoutFrame 57 0 96 0 182 0 116 0)
-                    tabable: true
-                    model: labelButtonType
-                    comboList: 
-                   (Array
-                      None Button
-                      Group
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (LabelSpec
+                          label: 'ID:'
+                          name: 'idLabel'
+                          layout: (AlignmentOrigin 94 0 14 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                        )
+                       (InputFieldSpec
+                          name: 'idField'
+                          layout: (LayoutFrame 97 0 0 0 2 1.0 22 0)
+                          activeHelpKey: basicsLabelId
+                          tabable: true
+                          model: id
+                          group: inputGroup
+                          acceptOnLostFocus: false
+                          acceptChannel: acceptChannel
+                          modifiedChannel: modifiedChannel
+                          acceptOnPointerLeave: false
+                        )
+                       (LabelSpec
+                          label: 'Label:'
+                          name: 'label1'
+                          layout: (AlignmentOrigin 94 0 39 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                        )
+                       (InputFieldSpec
+                          name: 'labelField'
+                          layout: (LayoutFrame 97 0 28 0 2 1.0 50 0)
+                          activeHelpKey: basicsLabel
+                          tabable: true
+                          model: label
+                          group: inputGroup
+                          type: smalltalkObject
+                          immediateAccept: false
+                          acceptOnLeave: false
+                          acceptOnLostFocus: false
+                          acceptChannel: acceptChannel
+                          modifiedChannel: modifiedChannel
+                          acceptOnPointerLeave: false
+                        )
+                       (LabelSpec
+                          label: 'Font:'
+                          name: 'LabelFont'
+                          layout: (AlignmentOrigin 94 0 68 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                          adjust: left
+                        )
+                       (FontMenuSpec
+                          name: 'fontMenu'
+                          layout: (LayoutFrame 97 0 56 0 0 1.0 78 0)
+                          activeHelpKey: labelFont
+                          model: style
+                          allowSymbolicFonts: true
+                        )
+                       (LabelSpec
+                          label: 'Type:'
+                          name: 'Type'
+                          layout: (AlignmentOrigin 52 0 100 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                          adjust: right
+                        )
+                       (ComboListSpec
+                          name: 'labelButtonType'
+                          layout: (LayoutFrame 57 0 91 0 158 0 111 0)
+                          tabable: true
+                          model: labelButtonType
+                          comboList: 
+                         (Array
+                            None Button
+                            Group
+                          )
+                          useIndex: false
+                          hidePullDownMenuButton: false
+                        )
+                       (LabelSpec
+                          label: 'Align:'
+                          name: 'JustificationLabel'
+                          layout: (AlignmentOrigin 243 0 100 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                          adjust: right
+                        )
+                       (PopUpListSpec
+                          label: 'Alignment'
+                          name: 'Alignment'
+                          layout: (LayoutFrame 248 0 91 0 2 1.0 113 0)
+                          activeHelpKey: basicsJustification
+                          tabable: true
+                          model: labelAlignment
+                          menu: 
+                         (Array
+                            left right
+                            center
+                          )
+                        )
+                       (CheckBoxSpec
+                          label: 'Label Is Image'
+                          name: 'labelIsImage'
+                          layout: (LayoutOrigin -3 0 120 0)
+                          activeHelpKey: basicsLabelIsImage
+                          tabable: true
+                          model: labelIsImage
+                          translateLabel: true
+                        )
+                       (CheckBoxSpec
+                          label: 'Translate Label'
+                          name: 'CheckBox2'
+                          layout: (LayoutOrigin 200 0 120 0)
+                          activeHelpKey: basicsLabelTranslate
+                          tabable: true
+                          model: translateLabel
+                          translateLabel: true
+                        )
+                       )
+                     
                     )
-                    useIndex: false
-                    hidePullDownMenuButton: false
-                  )
-                 (LabelSpec
-                    label: 'Align:'
-                    name: 'JustificationLabel'
-                    layout: (LayoutFrame 186 0 97 0 243 0 118 0)
-                    translateLabel: true
-                    resizeForLabel: true
-                    adjust: right
-                  )
-                 (PopUpListSpec
-                    label: 'Alignment'
-                    name: 'Alignment'
-                    layout: (LayoutFrame 248 0 97 0 2 1.0 119 0)
-                    activeHelpKey: basicsJustification
-                    tabable: true
-                    model: labelAlignment
-                    menu: 
-                   (Array
-                      left right
-                      center
-                    )
-                  )
-                 (CheckBoxSpec
-                    label: 'Label Is Image'
-                    name: 'labelIsImage'
-                    layout: (LayoutOrigin -3 0 126 0)
-                    activeHelpKey: basicsLabelIsImage
-                    tabable: true
-                    model: labelIsImage
-                    translateLabel: true
-                  )
-                 (CheckBoxSpec
-                    label: 'Translate Label'
-                    name: 'CheckBox2'
-                    layout: (LayoutOrigin 200 0 126 0)
-                    activeHelpKey: basicsLabelTranslate
-                    tabable: true
-                    model: translateLabel
-                    translateLabel: true
+                    extent: (Point 389 176)
                   )
-                 )
-               
-              )
-            )
-           (FramedBoxSpec
-              label: 'Cell Type:'
-              name: 'typesFrame'
-              layout: (LayoutFrame 0 0.0 188 0 0 1.0 302 0)
-              labelPosition: topLeft
-              translateLabel: true
-              component: 
-             (SpecCollection
-                collection: (
-                 (LabelSpec
-                    label: 'Renderer:'
-                    name: 'rendererLabel'
-                    layout: (AlignmentOrigin 94 0 16 0 1 0.5)
+                 (FramedBoxSpec
+                    label: 'Cell Type:'
+                    name: 'typesFrame'
+                    labelPosition: topLeft
                     translateLabel: true
-                    resizeForLabel: true
-                  )
-                 (ComboListSpec
-                    name: 'rendererField'
-                    layout: (LayoutFrame 97 0 5 0 2 1.0 27 0)
-                    activeHelpKey: basicsRenderer
-                    tabable: true
-                    model: rendererType
-                    comboList: rendererTypeList
-                    useIndex: false
-                    hidePullDownMenuButton: false
-                  )
-                 (LabelSpec
-                    label: 'Editor:'
-                    name: 'editorLabel'
-                    layout: (AlignmentOrigin 94 0 42 0 1 0.5)
-                    translateLabel: true
-                    resizeForLabel: true
-                  )
-                 (ComboBoxSpec
-                    name: 'editorField'
-                    layout: (LayoutFrame 97 0 31 0 2 1.0 53 0)
-                    activeHelpKey: basicsEditor
-                    tabable: true
-                    model: editorType
-                    type: symbolOrNil
-                    acceptOnLostFocus: false
-                    acceptChannel: acceptChannel
-                    modifiedChannel: modifiedChannel
-                    acceptOnPointerLeave: false
-                    comboList: editorTypeList
-                    useIndex: false
-                    isFilenameBox: false
-                  )
-                 (LabelSpec
-                    label: 'Align:'
-                    name: 'JustificationC'
-                    layout: (LayoutFrame -194 1 58 0 -114 1 79 0)
-                    translateLabel: true
-                    resizeForLabel: true
-                    adjust: right
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (LabelSpec
+                          label: 'Renderer:'
+                          name: 'rendererLabel'
+                          layout: (AlignmentOrigin 94 0 16 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                        )
+                       (ComboListSpec
+                          name: 'rendererField'
+                          layout: (LayoutFrame 97 0 5 0 2 1.0 27 0)
+                          activeHelpKey: basicsRenderer
+                          tabable: true
+                          model: rendererType
+                          comboList: rendererTypeList
+                          useIndex: false
+                          hidePullDownMenuButton: false
+                        )
+                       (LabelSpec
+                          label: 'Editor:'
+                          name: 'editorLabel'
+                          layout: (AlignmentOrigin 94 0 42 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                        )
+                       (ComboBoxSpec
+                          name: 'editorField'
+                          layout: (LayoutFrame 97 0 31 0 2 1.0 53 0)
+                          activeHelpKey: basicsEditor
+                          tabable: true
+                          model: editorType
+                          type: symbolOrNil
+                          acceptOnLostFocus: false
+                          acceptChannel: acceptChannel
+                          modifiedChannel: modifiedChannel
+                          acceptOnPointerLeave: false
+                          comboList: editorTypeList
+                          useIndex: false
+                          isFilenameBox: false
+                        )
+                       (LabelSpec
+                          label: 'Align:'
+                          name: 'JustificationC'
+                          layout: (LayoutFrame -194 1 58 0 -114 1 79 0)
+                          translateLabel: true
+                          resizeForLabel: true
+                          adjust: right
+                        )
+                       (PopUpListSpec
+                          label: 'Alignment'
+                          name: 'AlignmentC'
+                          layout: (LayoutFrame -115 1 58 0 2 1.0 80 0)
+                          activeHelpKey: basicsJustificationEditor
+                          tabable: true
+                          model: columnAlignment
+                          menu: 
+                         (Array
+                            left right
+                            center decimal
+                          )
+                        )
+                       (CheckBoxSpec
+                          label: 'Compress Long Strings'
+                          name: 'LongStringCompressionCheckBox'
+                          layout: (LayoutFrame -3 0 58 0 188 0 79 0)
+                          activeHelpKey: basicsLabelTranslate
+                          tabable: true
+                          model: longStringCompression
+                          translateLabel: true
+                        )
+                       )
+                     
+                    )
+                    extent: (Point 389 114)
                   )
-                 (PopUpListSpec
-                    label: 'Alignment'
-                    name: 'AlignmentC'
-                    layout: (LayoutFrame -115 1 58 0 2 1.0 80 0)
-                    activeHelpKey: basicsJustificationEditor
-                    tabable: true
-                    model: columnAlignment
-                    menu: 
-                   (Array
-                      left right
-                      center decimal
-                    )
-                  )
-                 (CheckBoxSpec
-                    label: 'Compress Long Strings'
-                    name: 'LongStringCompressionCheckBox'
-                    layout: (LayoutFrame -3 0 58 0 188 0 79 0)
-                    activeHelpKey: basicsLabelTranslate
-                    tabable: true
-                    model: longStringCompression
+                 (FramedBoxSpec
+                    label: 'Active Help:'
+                    name: 'activeHelpFrame'
+                    labelPosition: topLeft
                     translateLabel: true
-                  )
-                 )
-               
-              )
-            )
-           (FramedBoxSpec
-              label: 'Active Help:'
-              name: 'FramedBox1'
-              layout: (LayoutFrame 0 0.0 303 0 0 1.0 383 0)
-              labelPosition: topLeft
-              translateLabel: true
-              component: 
-             (SpecCollection
-                collection: (
-                 (LabelSpec
-                    label: 'Key:'
-                    name: 'Label1'
-                    layout: (AlignmentOrigin 94 0 14 0 1 0.5)
-                    translateLabel: true
-                    resizeForLabel: true
-                  )
-                 (InputFieldSpec
-                    name: 'EntryField1'
-                    layout: (LayoutFrame 97 0 0 0 2 1.0 22 0)
-                    activeHelpKey: basicsLabelId
-                    tabable: true
-                    model: activeHelpKey
-                    group: inputGroup
-                    acceptOnLostFocus: false
-                    acceptChannel: acceptChannel
-                    modifiedChannel: modifiedChannel
-                    acceptOnPointerLeave: false
-                  )
-                 (LabelSpec
-                    label: 'Key for Label:'
-                    name: 'Label2'
-                    layout: (AlignmentOrigin 94 0 42 0 1 0.5)
-                    translateLabel: true
-                    resizeForLabel: true
-                  )
-                 (InputFieldSpec
-                    name: 'EntryField2'
-                    layout: (LayoutFrame 97 0 28 0 2 1.0 50 0)
-                    activeHelpKey: basicsLabelId
-                    tabable: true
-                    model: activeHelpKeyForLabel
-                    group: inputGroup
-                    acceptOnLostFocus: false
-                    acceptChannel: acceptChannel
-                    modifiedChannel: modifiedChannel
-                    acceptOnPointerLeave: false
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (LabelSpec
+                          label: 'Key:'
+                          name: 'Label1'
+                          layout: (AlignmentOrigin 94 0 14 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                        )
+                       (InputFieldSpec
+                          name: 'EntryField1'
+                          layout: (LayoutFrame 97 0 0 0 2 1.0 22 0)
+                          activeHelpKey: basicsLabelId
+                          tabable: true
+                          model: activeHelpKey
+                          group: inputGroup
+                          acceptOnLostFocus: false
+                          acceptChannel: acceptChannel
+                          modifiedChannel: modifiedChannel
+                          acceptOnPointerLeave: false
+                        )
+                       (LabelSpec
+                          label: 'Key for Label:'
+                          name: 'Label2'
+                          layout: (AlignmentOrigin 94 0 42 0 1 0.5)
+                          translateLabel: true
+                          resizeForLabel: true
+                        )
+                       (InputFieldSpec
+                          name: 'EntryField2'
+                          layout: (LayoutFrame 97 0 28 0 2 1.0 50 0)
+                          activeHelpKey: basicsLabelId
+                          tabable: true
+                          model: activeHelpKeyForLabel
+                          group: inputGroup
+                          acceptOnLostFocus: false
+                          acceptChannel: acceptChannel
+                          modifiedChannel: modifiedChannel
+                          acceptOnPointerLeave: false
+                        )
+                       )
+                     
+                    )
+                    extent: (Point 389 81)
                   )
                  )
                
@@ -1074,6 +1096,7 @@
                     layout: (AlignmentOrigin 115 0 26 0 1 0.5)
                     translateLabel: true
                     resizeForLabel: true
+                    activeHelpKey: formatInputType
                   )
                  (ComboListSpec
                     name: 'typeCombo'
@@ -1091,6 +1114,7 @@
                     layout: (AlignmentOrigin 115 0 52 0 1 0.5)
                     translateLabel: true
                     resizeForLabel: true
+                    activeHelpKey: formatMaxSize
                   )
                  (InputFieldSpec
                     name: 'sizeField'
@@ -1111,6 +1135,7 @@
                     layout: (AlignmentOrigin 115 0 77 0 1 0.5)
                     translateLabel: true
                     resizeForLabel: true
+                    activeHelpKey: formatTextFormat
                   )
                  (InputFieldSpec
                     name: 'formatField'
@@ -1130,11 +1155,12 @@
                     layout: (AlignmentOrigin 115 0 103 0 1 0.5)
                     translateLabel: true
                     resizeForLabel: true
+                    activeHelpKey: formatFormatSelector
                   )
                  (InputFieldSpec
                     name: 'formatSelector'
                     layout: (LayoutFrame 118 0 92 0 3 1.0 114 0)
-                    activeHelpKey: formatTextFormat
+                    activeHelpKey: formatFormatSelector
                     tabable: true
                     model: formatSelector
                     group: inputGroup
@@ -1511,12 +1537,107 @@
         (Basics         basicsEditSpec)
         (Values         valuesEditSpec)
         (Format         formatEditSpec)
+        (Sort           sortEditSpec)
         (Selection      selectionEditSpec)
         (Frame          frameEditSpec)
         (Colors         colorsEditSpec)
     )
 !
 
+sortEditSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:DataSetBuilder andSelector:#sortEditSpec
+     DataSetBuilder new openInterface:#sortEditSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: sortEditSpec
+        window: 
+       (WindowSpec
+          label: 'DataSet Basic'
+          name: 'DataSet Basic'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 389 473)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (VerticalPanelViewSpec
+              name: 'VerticalPanel1'
+              layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              horizontalLayout: fit
+              verticalLayout: top
+              horizontalSpace: 3
+              verticalSpace: 3
+              component: 
+             (SpecCollection
+                collection: (
+                 (FramedBoxSpec
+                    label: 'Sorting:'
+                    name: 'sortFrame'
+                    labelPosition: topLeft
+                    translateLabel: true
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (CheckBoxSpec
+                          label: 'Sortable'
+                          name: 'isSortable'
+                          layout: (LayoutOrigin -3 0 0 0)
+                          activeHelpKey: isSortable
+                          tabable: true
+                          model: isSortable
+                          translateLabel: true
+                        )
+                       (LabelSpec
+                          label: 'Sort Selector:'
+                          name: 'sortSelector'
+                          layout: (AlignmentOrigin 90 0 42 0 1 0.5)
+                          activeHelpKey: sortSelector
+                          translateLabel: true
+                          resizeForLabel: true
+                          adjust: right
+                        )
+                       (InputFieldSpec
+                          name: 'EntryField3'
+                          layout: (LayoutFrame 93 0 30 0 2 1 56 0)
+                          activeHelpKey: sortSelector
+                          enableChannel: isSortable
+                          tabable: true
+                          model: sortSelector
+                          group: inputGroup
+                          type: symbolOrNil
+                          immediateAccept: false
+                          acceptOnLeave: false
+                          acceptOnLostFocus: false
+                          acceptChannel: acceptChannel
+                          modifiedChannel: modifiedChannel
+                          acceptOnPointerLeave: false
+                        )
+                       )
+                     
+                    )
+                    extent: (Point 389 94)
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+!
+
 valuesEditSpec
     "This resource specification was automatically generated
      by the UIPainter of ST/X."
@@ -3695,7 +3816,7 @@
         #(label 
           width minWidth usePreferredWidth editorType choices translatedChoices
           readSelector writeSelector printSelector visibilitySelector
-          formatString type converterSelector size height canSelect selectSelector showComboFieldSelector
+          formatString formatSelector type converterSelector size height canSelect selectSelector showComboFieldSelector
           minValue maxValue
          ) do:[:aKey|
             (aspects at:aKey) value:nil