DataSetBuilder.st
changeset 2549 55c5ca5f8689
parent 2484 b6f8d141282f
child 2557 befc1c216287
equal deleted inserted replaced
2548:c3ee3b652ef7 2549:55c5ca5f8689
    11 "
    11 "
    12 "{ Package: 'stx:libtool2' }"
    12 "{ Package: 'stx:libtool2' }"
    13 
    13 
    14 ResourceSpecEditor subclass:#DataSetBuilder
    14 ResourceSpecEditor subclass:#DataSetBuilder
    15 	instanceVariableNames:'rowClass rowSuperClass columnView columns selectedColumnIndex
    15 	instanceVariableNames:'rowClass rowSuperClass columnView columns selectedColumnIndex
    16 		modalOpened listOfSpecViews listOfItemsView'
    16 		modalOpened listOfSpecViews listOfItemsView editingSpecOnly
       
    17 		acceptedColumns'
    17 	classVariableNames:''
    18 	classVariableNames:''
    18 	poolDictionaries:''
    19 	poolDictionaries:''
    19 	category:'Interface-UIPainter'
    20 	category:'Interface-UIPainter'
    20 !
    21 !
    21 
    22 
   164 
   165 
   165 #fileNew
   166 #fileNew
   166 'New Column Description'
   167 'New Column Description'
   167 
   168 
   168 #fileSave
   169 #fileSave
       
   170 'Save the Column Description'
       
   171 
       
   172 #fileSaveMethod
   169 'Save Column Description as Method'
   173 'Save Column Description as Method'
   170 
   174 
   171 #fileSaveAs
   175 #fileSaveAsMethod
   172 'Save Column Description as Method'
   176 'Save Column Description as Method (ask for Class/Selector)'
   173 
   177 
   174 #editCut
   178 #editCut
   175 'Cut Column'
   179 'Cut Column'
   176 
   180 
   177 #editCopy
   181 #editCopy
  2102       )
  2106       )
  2103 ! !
  2107 ! !
  2104 
  2108 
  2105 !DataSetBuilder class methodsFor:'menu specs'!
  2109 !DataSetBuilder class methodsFor:'menu specs'!
  2106 
  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 
  2107 menu
  2206 menu
  2108     "This resource specification was automatically generated
  2207     "This resource specification was automatically generated
  2109      by the MenuEditor of ST/X."
  2208      by the MenuEditor of ST/X."
  2110 
  2209 
  2111     "Do not manually edit this!! If it is corrupted,
  2210     "Do not manually edit this!! If it is corrupted,
  2122      #(Menu
  2221      #(Menu
  2123         (
  2222         (
  2124          (MenuItem
  2223          (MenuItem
  2125             label: 'File'
  2224             label: 'File'
  2126             translateLabel: true
  2225             translateLabel: true
  2127             submenu: 
  2226             submenuChannel: fileMenu
  2128            (Menu
       
  2129               (
       
  2130                (MenuItem
       
  2131                   activeHelpKey: fileNew
       
  2132                   label: 'New'
       
  2133                   itemValue: doNew
       
  2134                   translateLabel: true
       
  2135                 )
       
  2136                (MenuItem
       
  2137                   label: '-'
       
  2138                 )
       
  2139                (MenuItem
       
  2140                   activeHelpKey: fileLoad
       
  2141                   label: 'Load...'
       
  2142                   itemValue: doLoad
       
  2143                   translateLabel: true
       
  2144                 )
       
  2145                (MenuItem
       
  2146                   label: '-'
       
  2147                 )
       
  2148                (MenuItem
       
  2149                   activeHelpKey: fileSave
       
  2150                   label: 'Save'
       
  2151                   itemValue: doSave
       
  2152                   translateLabel: true
       
  2153                 )
       
  2154                (MenuItem
       
  2155                   activeHelpKey: fileSaveAs
       
  2156                   label: 'Save As...'
       
  2157                   itemValue: doSaveAs
       
  2158                   translateLabel: true
       
  2159                 )
       
  2160                (MenuItem
       
  2161                   label: '-'
       
  2162                 )
       
  2163                (MenuItem
       
  2164                   activeHelpKey: pickColumns
       
  2165                   label: 'Pick Columns...'
       
  2166                   itemValue: doPickColumns
       
  2167                   translateLabel: true
       
  2168                 )
       
  2169                (MenuItem
       
  2170                   label: '-'
       
  2171                   isVisible: isStandAlone
       
  2172                 )
       
  2173                (MenuItem
       
  2174                   activeHelpKey: fileBrowseClass
       
  2175                   label: 'Browse Class'
       
  2176                   itemValue: doBrowseClass
       
  2177                   translateLabel: true
       
  2178                   isVisible: isStandAlone
       
  2179                 )
       
  2180                (MenuItem
       
  2181                   label: '-'
       
  2182                   isVisible: isStandAlone
       
  2183                 )
       
  2184                (MenuItem
       
  2185                   activeHelpKey: fileExit
       
  2186                   label: 'Exit'
       
  2187                   itemValue: closeRequest
       
  2188                   translateLabel: true
       
  2189                   isVisible: isStandAlone
       
  2190                 )
       
  2191                )
       
  2192               nil
       
  2193               nil
       
  2194             )
       
  2195           )
  2227           )
  2196          (MenuItem
  2228          (MenuItem
  2197             label: 'Edit'
  2229             label: 'Edit'
  2198             translateLabel: true
  2230             translateLabel: true
  2199             submenuChannel: menuEditWithoutAccelerators
  2231             submenuChannel: menuEditWithoutAccelerators
  2226             )
  2258             )
  2227           )
  2259           )
  2228          (MenuItem
  2260          (MenuItem
  2229             label: 'Generate'
  2261             label: 'Generate'
  2230             translateLabel: true
  2262             translateLabel: true
       
  2263             isVisible: notEditingSpecOnly
  2231             submenu: 
  2264             submenu: 
  2232            (Menu
  2265            (Menu
  2233               (
  2266               (
  2234                (MenuItem
  2267                (MenuItem
  2235                   activeHelpKey: fileDefineClass
  2268                   activeHelpKey: fileDefineClass
  2628             isButton: true
  2661             isButton: true
  2629             submenuChannel: menuHistory
  2662             submenuChannel: menuHistory
  2630             labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon)
  2663             labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon)
  2631           )
  2664           )
  2632          (MenuItem
  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
  2633             activeHelpKey: fileSave
  2675             activeHelpKey: fileSave
  2634             label: 'Save'
  2676             label: 'Save'
  2635             itemValue: doSave
  2677             itemValue: doSave
  2636             translateLabel: true
  2678             translateLabel: true
  2637             isButton: true
  2679             isButton: true
  2638             labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon)
  2680             isVisible: editingSpecOnly
       
  2681             labelImage: (ResourceRetriever ToolbarIconLibrary saveToFileIcon)
  2639           )
  2682           )
  2640          (MenuItem
  2683          (MenuItem
  2641             label: '-'
  2684             label: '-'
  2642           )
  2685           )
  2643          (MenuItem
  2686          (MenuItem
  2729       )
  2772       )
  2730 ! !
  2773 ! !
  2731 
  2774 
  2732 !DataSetBuilder methodsFor:'accessing'!
  2775 !DataSetBuilder methodsFor:'accessing'!
  2733 
  2776 
       
  2777 acceptedColumns
       
  2778     "returns the last saved columns (internal, for specOnly edit mode)"
       
  2779 
       
  2780     ^ acceptedColumns
       
  2781 !
       
  2782 
  2734 columns
  2783 columns
  2735     "returns list of columns"
  2784     "returns list of columns"
  2736 
  2785 
  2737     ^ columns
  2786     ^ columns
  2738 !
  2787 !
  2739 
  2788 
  2740 columns:aListOfColumns
  2789 columns:aListOfColumns
  2741     "setup columns from a column view"
  2790     "setup columns from a column view"
  2742 
  2791 
  2743     |list|
  2792     |list newColumns|
  2744 
  2793 
  2745     columns    := OrderedCollection new.
  2794     newColumns := OrderedCollection new.
  2746     list       := self seqList.
  2795     list := self seqList.
  2747 
       
  2748     list removeAll.
  2796     list removeAll.
  2749 
  2797 
  2750     aListOfColumns size ~~ 0 ifTrue:[
  2798     aListOfColumns size ~~ 0 ifTrue:[
  2751         aListOfColumns do:[:aColumn||column|
  2799         aListOfColumns do:[:aColumn||column|
  2752             (column := aColumn) isSequenceable ifTrue:[
  2800             (column := aColumn) isSequenceable ifTrue:[
  2753                 column := DataSetColumnSpec decodeFromLiteralArray:aColumn
  2801                 column := DataSetColumnSpec decodeFromLiteralArray:aColumn
  2754             ] ifFalse:[
  2802             ] ifFalse:[
  2755                 column := aColumn copy
  2803                 column := aColumn copy
  2756             ].
  2804             ].
  2757             columns add:column.
  2805             newColumns add:column.
  2758             list add:(self labelFromColumn:column).  
  2806             list add:(self labelFromColumn:column).  
  2759         ]
  2807         ]
  2760     ].
  2808     ].
       
  2809     columns := newColumns.
  2761     self updateColumnView.
  2810     self updateColumnView.
  2762 
  2811 
  2763     "Modified: / 27-03-2007 / 08:46:39 / cg"
  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
  2764 !
  2825 !
  2765 
  2826 
  2766 resolveRowClass
  2827 resolveRowClass
  2767     "returns the resolved row class
  2828     "returns the resolved row class
  2768     "
  2829     "
  2911 "/    ].
  2972 "/    ].
  2912 
  2973 
  2913 !
  2974 !
  2914 
  2975 
  2915 loadFromClass:aClass andSelector:aSelector
  2976 loadFromClass:aClass andSelector:aSelector
  2916     |updateBlock cls list|
  2977     |cls list|
  2917 
  2978 
  2918     self assert:(aClass isNil or:[aClass isClass]).
  2979     self assert:(aClass isNil or:[aClass isClass]).
  2919 
  2980 
  2920     selectedColumnIndex := 0.
  2981     selectedColumnIndex := 0.
  2921 
       
  2922     updateBlock := [
       
  2923         columns notEmpty ifTrue: [
       
  2924             self tabModel value:0; value:1.                 "/ toggle to force change
       
  2925             self selectedColumnModel value:nil; value:1.    "/ toggle to force change
       
  2926             self updateColumnView.
       
  2927             self updateInputFields.
       
  2928             self updateInfoLabel.
       
  2929             self updateHistory.
       
  2930             self clearModifiedFlag.
       
  2931             self enablingCommitButtonsHolder value:false.
       
  2932         ]
       
  2933     ].
       
  2934 
  2982 
  2935     "if opened on table columns"  
  2983     "if opened on table columns"  
  2936 
  2984 
  2937     aClass isNil ifTrue: [ 
  2985     aClass isNil ifTrue: [ 
  2938         self tabModel value: 0. 
  2986         self tabModel value: 0. 
  2939         self columns removeAll.
  2987     "/    self columns removeAll.
  2940         self seqList removeAll.
  2988     "/    self seqList removeAll.
  2941         self updateColumnView.
  2989         self updateColumnView.
  2942         self updateInfoLabel.
  2990         self updateInfoLabel.
  2943         self isColumnSelected value: false.
  2991         self isColumnSelected value: false.
  2944         ^ self.
  2992         ^ self.
  2945     ].
  2993     ].
  2946 
  2994 
  2947     specSelector isNil ifTrue: [updateBlock value. ^self].
  2995     specSelector isNil ifTrue: [
       
  2996         self updateAfterColumnChange. 
       
  2997         ^ self
       
  2998     ].
  2948 
  2999 
  2949     list := nil.
  3000     list := nil.
  2950 
  3001 
  2951     (aClass notNil or:[self isStandAlone or:[self window shown]]) ifTrue:[
  3002     (aClass notNil or:[self isStandAlone or:[self window shown]]) ifTrue:[
  2952         (aClass notNil and:[aSelector notNil]) ifTrue:[
  3003         (aClass notNil and:[aSelector notNil]) ifTrue:[
  2958         ]
  3009         ]
  2959     ] ifFalse:[
  3010     ] ifFalse:[
  2960         list := columns
  3011         list := columns
  2961     ].
  3012     ].
  2962     self columns:list.
  3013     self columns:list.
  2963     updateBlock value.
  3014     self updateAfterColumnChange.
       
  3015 !
       
  3016 
       
  3017 updateAfterColumnChange
       
  3018     self tabModel value:0; value:1.                 "/ toggle to force change
       
  3019     self selectedColumnModel 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.
  2964 ! !
  3026 ! !
  2965 
  3027 
  2966 !DataSetBuilder methodsFor:'code generation'!
  3028 !DataSetBuilder methodsFor:'code generation'!
  2967 
  3029 
  2968 compile:aCode forClass:aClass inCategory:aCategory
  3030 compile:aCode forClass:aClass inCategory:aCategory
  3347     modalOpened := false.
  3409     modalOpened := false.
  3348     listOfSpecViews := Array new:(self class slices size).
  3410     listOfSpecViews := Array new:(self class slices size).
  3349 
  3411 
  3350 !
  3412 !
  3351 
  3413 
       
  3414 loadFromResourceSpec: aResourceSpec
       
  3415     self columns:aResourceSpec copy.
       
  3416     modified := false.
       
  3417     hasSaved := false.
       
  3418     self updateAfterColumnChange.
       
  3419 !
       
  3420 
  3352 setDefaultValuesInNewColumn:aDataSetColumnSpec
  3421 setDefaultValuesInNewColumn:aDataSetColumnSpec
  3353 "/    aDataSetColumnSpec readSelector: #'valueAtColumnIndex:'.
  3422 "/    aDataSetColumnSpec readSelector: #'valueAtColumnIndex:'.
  3354 "/    aDataSetColumnSpec writeSelector: #'valueAtColumnIndex:put:'.
  3423 "/    aDataSetColumnSpec writeSelector: #'valueAtColumnIndex:put:'.
  3355 "/    aDataSetColumnSpec backgroundSelector: #'bgAtRowIndex:columnIndex:'.
  3424 "/    aDataSetColumnSpec backgroundSelector: #'bgAtRowIndex:columnIndex:'.
  3356 "/    aDataSetColumnSpec foregroundSelector: #'fgAtRowIndex:columnIndex:'.
  3425 "/    aDataSetColumnSpec foregroundSelector: #'fgAtRowIndex:columnIndex:'.
  3551     self setModified.
  3620     self setModified.
  3552 ! !
  3621 ! !
  3553 
  3622 
  3554 !DataSetBuilder methodsFor:'private'!
  3623 !DataSetBuilder methodsFor:'private'!
  3555 
  3624 
       
  3625 askForModification
       
  3626     "asks first for item and then for resource modification"
       
  3627 
       
  3628     editingSpecOnly ifTrue:[
       
  3629         self accept.
       
  3630         ^ true.
       
  3631     ].
       
  3632     ^ self askForItemModification and: [self askForListModification]
       
  3633 !
       
  3634 
  3556 labelFromColumn:aColumn
  3635 labelFromColumn:aColumn
  3557     |label|
  3636     |label|
  3558 
  3637 
  3559     aColumn rendererType == #rowSelector ifTrue:[
  3638     aColumn rendererType == #rowSelector ifTrue:[
  3560         ^ 'Row Selector'
  3639         ^ 'Row Selector'
  3573 labelInPreviewPressed:anIndex
  3652 labelInPreviewPressed:anIndex
  3574    (self componentAt:#labelAndColumns) selection:anIndex
  3653    (self componentAt:#labelAndColumns) selection:anIndex
  3575 !
  3654 !
  3576 
  3655 
  3577 updateColumnView
  3656 updateColumnView
  3578     "updates column view from column descriptions
  3657     "updates the column view from column descriptions"
  3579     "   
  3658 
  3580     |size|
  3659     |size previewColumns columnList|
  3581 
  3660 
  3582     columnView notNil ifTrue:[
  3661     columnView notNil ifTrue:[
  3583         |previewColumns columnItems columnList|
       
  3584         columnList     := List new.
  3662         columnList     := List new.
  3585         previewColumns := OrderedCollection new.
  3663         previewColumns := OrderedCollection new.
  3586 
  3664 
  3587         (size := columns size) ~~ 0 ifTrue:[
  3665         (size := columns size) ~~ 0 ifTrue:[
  3588             columns do:[:aCol|
  3666             columns do:[:aCol|
  3605                     labelActionSelector:#labelInPreviewPressed:;
  3683                     labelActionSelector:#labelInPreviewPressed:;
  3606                     labelActionArgument:anIndex;
  3684                     labelActionArgument:anIndex;
  3607                     choices:#choices
  3685                     choices:#choices
  3608             ].
  3686             ].
  3609             #(' 1' ' 2' ' x') do:[:suffix|
  3687             #(' 1' ' 2' ' x') do:[:suffix|
  3610                 columnItems := Row new:size.
  3688                 |oneRow|
  3611                 1 to:size do:[:i| columnItems at: i put: ('Cell', suffix)].
  3689 
  3612                 columnList add: columnItems.
  3690                 oneRow := Row new:size.
       
  3691                 1 to:size do:[:i | oneRow at: i put: ('Cell%1-%2' bindWith:suffix with:i)].
       
  3692                 columnList add: oneRow.
  3613             ]
  3693             ]
  3614         ].
  3694         ].
       
  3695 
  3615         columnView list: #().
  3696         columnView list: #().
  3616         columnView columnDescriptors: previewColumns.
  3697         columnView columnDescriptors: previewColumns.
  3617         columnView list: columnList.
  3698         columnView list: columnList.
  3618     ].
  3699     ].
  3619 
  3700 
  4165 !
  4246 !
  4166 
  4247 
  4167 doSave
  4248 doSave
  4168     |cls dst spc category mthd excla code resourceType|
  4249     |cls dst spc category mthd excla code resourceType|
  4169 
  4250 
       
  4251     editingSpecOnly == true ifTrue:[
       
  4252         acceptedColumns := columns.
       
  4253         hasSaved := true.
       
  4254         self clearModified.
       
  4255         ^ self.
       
  4256     ].
       
  4257 
  4170     (columns size ~~ 0 and:[super doSave]) ifFalse:[
  4258     (columns size ~~ 0 and:[super doSave]) ifFalse:[
  4171         ^ nil
  4259         ^ nil
  4172     ].
  4260     ].
  4173 
  4261 
  4174     cls := self resolveName:specClass.
  4262     cls := self resolveName:specClass.