refine selection on row base:
authorca
Fri, 07 Nov 1997 14:29:58 +0100
changeset 377 5cbb117efc19
parent 376 3023fc08ee35
child 378 9057ea063eca
refine selection on row base: add a selector
DataSetBuilder.st
--- a/DataSetBuilder.st	Sun Nov 02 19:40:38 1997 +0100
+++ b/DataSetBuilder.st	Fri Nov 07 14:29:58 1997 +0100
@@ -79,11 +79,11 @@
           #'window:' 
            #(#WindowSpec
               #'name:' 'DataSet Basic'
-              #'layout:' #(#LayoutFrame 350 0 22 0 638 0 277 0)
+              #'layout:' #(#LayoutFrame 219 0 193 0 507 0 448 0)
               #'label:' 'DataSet Basic'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1280 1024)
-              #'bounds:' #(#Rectangle 350 22 639 278)
+              #'bounds:' #(#Rectangle 219 193 508 449)
               #'usePreferredExtent:' false
           )
           #'component:' 
@@ -105,7 +105,7 @@
                 )
                  #(#FramedBoxSpec
                     #'name:' 'typesFrame'
-                    #'layout:' #(#LayoutFrame 8 0.0 51 0 0 1.0 131 0)
+                    #'layout:' #(#LayoutFrame 8 0.0 69 0 0 1.0 149 0)
                     #'component:' 
                      #(#SpecCollection
                         #'collection:' 
@@ -145,15 +145,8 @@
                     #'labelPosition:' #topLeft
                 )
                  #(#CheckBoxSpec
-                    #'name:' 'canSelect'
-                    #'layout:' #(#LayoutOrigin 9 0 145 0)
-                    #'activeHelpKey:' #canSelect
-                    #'model:' #canSelect
-                    #'label:' 'Is Selectable'
-                )
-                 #(#CheckBoxSpec
                     #'name:' 'labelIsImage'
-                    #'layout:' #(#LayoutOrigin 9 0 169 0)
+                    #'layout:' #(#LayoutOrigin 9 0 189 0)
                     #'activeHelpKey:' #labelIsImage
                     #'model:' #labelIsImage
                     #'label:' 'Label Is Image'
@@ -231,6 +224,74 @@
                     #'label:' 'Colors:'
                     #'labelPosition:' #topLeft
                 )
+              )
+          )
+      )
+!
+
+detailsEditSpec
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     UIPainter new openOnClass:DataSetBuilder andSelector:#detailsEditSpec
+     DataSetBuilder new openInterface:#detailsEditSpec
+    "
+
+    <resource: #canvas>
+
+    ^
+     
+       #(#FullSpec
+          #'window:' 
+           #(#WindowSpec
+              #'name:' 'DataSet Basic'
+              #'layout:' #(#LayoutFrame 219 0 193 0 507 0 448 0)
+              #'label:' 'DataSet Basic'
+              #'min:' #(#Point 10 10)
+              #'max:' #(#Point 1280 1024)
+              #'bounds:' #(#Rectangle 219 193 508 449)
+              #'usePreferredExtent:' false
+          )
+          #'component:' 
+           #(#SpecCollection
+              #'collection:' 
+               #(
+                 #(#FramedBoxSpec
+                    #'name:' 'selectionBox'
+                    #'layout:' #(#LayoutFrame 0 0.0 20 0 0 1.0 101 0)
+                    #'component:' 
+                     #(#SpecCollection
+                        #'collection:' 
+                         #(
+                           #(#CheckBoxSpec
+                              #'name:' 'canSelect'
+                              #'layout:' #(#Point 83 15)
+                              #'activeHelpKey:' #canSelect
+                              #'model:' #canSelect
+                              #'label:' 'Is Selectable'
+                          )
+                           #(#LabelSpec
+                              #'name:' 'selectorLabel'
+                              #'layout:' #(#AlignmentOrigin 84 0 51 0 1 0.5)
+                              #'label:' 'Selector:'
+                              #'adjust:' #right
+                              #'resizeForLabel:' true
+                          )
+                           #(#InputFieldSpec
+                              #'name:' 'selectSelector'
+                              #'layout:' #(#LayoutFrame 86 0 42 0 17 1.0 62 0)
+                              #'activeHelpKey:' #selectSelector
+                              #'model:' #selectSelector
+                              #'type:' #symbolOrNil
+                          )
+                        )
+                    )
+                    #'label:' 'Selection:'
+                    #'labelPosition:' #topLeft
+                )
                  #(#FramedBoxSpec
                     #'name:' 'separatorBox'
                     #'layout:' #(#LayoutFrame 0 0.0 131 0 0 1.0 217 0)
@@ -378,11 +439,12 @@
           #'window:' 
            #(#WindowSpec
               #'name:' 'DataSet Details'
-              #'layout:' #(#LayoutFrame 327 0 282 0 617 0 495 0)
+              #'layout:' #(#LayoutFrame 219 0 193 0 509 0 406 0)
               #'label:' 'DataSet Details'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1280 1024)
-              #'bounds:' #(#Rectangle 327 282 618 496)
+              #'bounds:' #(#Rectangle 219 193 510 407)
+              #'usePreferredExtent:' false
           )
           #'component:' 
            #(#SpecCollection
@@ -402,7 +464,7 @@
                 )
                  #(#InputFieldSpec
                     #'name:' 'formatField'
-                    #'layout:' #(#LayoutFrame 87 0 37 0 -19 1.0 59 0)
+                    #'layout:' #(#LayoutFrame 87 0 37 0 -2 1.0 59 0)
                     #'activeHelpKey:' #formatString
                     #'model:' #formatString
                 )
@@ -420,7 +482,7 @@
                 )
                  #(#ComboListSpec
                     #'name:' 'typeCombo'
-                    #'layout:' #(#LayoutFrame 87 0 102 0 289 0 122 0)
+                    #'layout:' #(#LayoutFrame 87 0 102 0 -2 1.0 122 0)
                     #'activeHelpKey:' #type
                     #'model:' #type
                     #'comboList:' #typeList
@@ -434,7 +496,7 @@
                 )
                  #(#InputFieldSpec
                     #'name:' 'sizeField'
-                    #'layout:' #(#LayoutFrame 87 0 126 0 -19 1.0 148 0)
+                    #'layout:' #(#LayoutFrame 87 0 126 0 -2 1.0 148 0)
                     #'activeHelpKey:' #size
                     #'model:' #size
                     #'type:' #numberOrNil
@@ -474,19 +536,6 @@
            #(#SpecCollection
               #'collection:' 
                #(
-                 #(#LabelSpec
-                    #'name:' 'labelLabel'
-                    #'layout:' #(#AlignmentOrigin 84 0 29 0 1 0.5)
-                    #'label:' 'Label:'
-                    #'adjust:' #right
-                    #'resizeForLabel:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'labelField'
-                    #'layout:' #(#LayoutFrame 86 0 20 0 -12 1.0 40 0)
-                    #'activeHelpKey:' #label
-                    #'model:' #label
-                )
                  #(#FramedBoxSpec
                     #'name:' 'valuesBox'
                     #'layout:' #(#LayoutFrame 0 0.0 20 0 0 1.0 101 0)
@@ -626,6 +675,9 @@
 #rendererType
 'This type specifies, how the text of an unselected cell should be shown. As Text, CheckToggle, ComboBox, ComboList or as a RowSelector.'
 
+#selectSelector
+'an optional selector, which is used to test whether the cell in the column is selectable; the ''Is Selectable'' flag must be enabled.'
+
 #showColumnSeparator
 'show or hide the column separator (right vertical separator).'
 
@@ -752,6 +804,7 @@
 
 slices
     ^  #(       (Basics         basicsEditSpec)
+                (Details        detailsEditSpec)
                 (Selectors      selectorsEditSpec)
                 (Format         formatEditSpec)
                 (Colors         colorEditSpec)
@@ -779,11 +832,11 @@
           #'window:' 
            #(#WindowSpec
               #'name:' 'unnamed canvas'
-              #'layout:' #(#LayoutFrame 219 0 193 0 690 0 533 0)
+              #'layout:' #(#LayoutFrame 262 0 460 0 774 0 802 0)
               #'label:' 'unnamed canvas'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1152 900)
-              #'bounds:' #(#Rectangle 219 193 691 534)
+              #'bounds:' #(#Rectangle 262 460 775 803)
               #'usePreferredExtent:' false
           )
           #'component:' 
@@ -858,14 +911,14 @@
                                                   #'label:' 'cancel'
                                                   #'model:' #cancel
                                                   #'enableChannel:' #modifiedChannel
-                                                  #'extent:' #(#Point 150 24)
+                                                  #'extent:' #(#Point 171 24)
                                               )
                                                #(#ActionButtonSpec
                                                   #'name:' 'acceptButton'
                                                   #'label:' 'ok'
                                                   #'model:' #accept
                                                   #'enableChannel:' #modifiedChannel
-                                                  #'extent:' #(#Point 151 24)
+                                                  #'extent:' #(#Point 172 24)
                                               )
                                             )
                                         )
@@ -880,7 +933,7 @@
                           )
                         )
                     )
-                    #'handles:' #(#Any 0.334746 1.0)
+                    #'handles:' #(#Any 0.307992 1.0)
                 )
               )
           )
@@ -1231,6 +1284,7 @@
     self generateMenuIn:cls.
     self generatePrintSelectorIn:cls.
     self generateReadSelectorIn:cls.
+    self generateSelectSelectorIn:cls.
     self generateWriteSelectorIn:cls.
 !
 
@@ -1304,7 +1358,7 @@
 
     type == #rowSelector ifTrue:[
         #( label width minWidth editorType choices readSelector printSelector
-           formatString type size height canSelect
+           formatString type size height canSelect selectSelector
          ) do:[:aKey| (aspects at:aKey) value:nil ].
     ].
         
@@ -1582,6 +1636,32 @@
     ]
 !
 
+generateSelectSelectorIn:aClass
+    "generate code for #selectSelector
+    "
+    |sel catg code bCode|
+
+    catg := 'accessing selectSelector' asSymbol.
+    code :=   '\'
+            , '    "automatically generated by DataSetBuilder ..."\'
+            , '\'
+            , '    "can select cell in column"\'
+            , '\'
+            .
+
+    columns do:[:aColumn|
+        (     aColumn rendererType ~~ #rowSelector 
+         and:[(sel := aColumn selectSelector) notNil
+         and:[(aClass implements:sel) not]]
+        ) ifTrue:[
+            aColumn canSelect ifTrue:[
+                bCode := sel asString, code, '    ^ true'.
+                self compile:bCode forClass:aClass inCategory:catg
+            ]
+        ]
+    ]
+!
+
 generateWriteSelectorIn:aClass
     "generate code for #writeSelector
     "
@@ -1631,6 +1711,7 @@
         minWidth
         height
         menu
+        selectSelector
         printSelector
         readSelector
         rendererType