DataSetBuilder.st
changeset 2549 55c5ca5f8689
parent 2484 b6f8d141282f
child 2557 befc1c216287
--- a/DataSetBuilder.st	Sun May 31 13:13:11 2009 +0200
+++ b/DataSetBuilder.st	Sun May 31 20:24:00 2009 +0200
@@ -13,7 +13,8 @@
 
 ResourceSpecEditor subclass:#DataSetBuilder
 	instanceVariableNames:'rowClass rowSuperClass columnView columns selectedColumnIndex
-		modalOpened listOfSpecViews listOfItemsView'
+		modalOpened listOfSpecViews listOfItemsView editingSpecOnly
+		acceptedColumns'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-UIPainter'
@@ -166,10 +167,13 @@
 'New Column Description'
 
 #fileSave
+'Save the Column Description'
+
+#fileSaveMethod
 'Save Column Description as Method'
 
-#fileSaveAs
-'Save Column Description as Method'
+#fileSaveAsMethod
+'Save Column Description as Method (ask for Class/Selector)'
 
 #editCut
 'Cut Column'
@@ -2104,6 +2108,101 @@
 
 !DataSetBuilder class methodsFor:'menu specs'!
 
+fileMenu
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+    "
+     MenuEditor new openOnClass:DataSetBuilder andSelector:#fileMenu
+     (Menu new fromLiteralArrayEncoding:(DataSetBuilder fileMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            activeHelpKey: fileNew
+            label: 'New'
+            itemValue: doNew
+            translateLabel: true
+          )
+         (MenuItem
+            label: '-'
+            isVisible: notEditingSpecOnly
+          )
+         (MenuItem
+            activeHelpKey: fileLoad
+            label: 'Load...'
+            itemValue: doLoad
+            translateLabel: true
+            isVisible: notEditingSpecOnly
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            activeHelpKey: fileSave
+            label: 'Save'
+            itemValue: doSave
+            translateLabel: true
+            isVisible: editingSpecOnly
+          )
+         (MenuItem
+            activeHelpKey: fileSaveMethod
+            label: 'Save'
+            itemValue: doSave
+            translateLabel: true
+            isVisible: notEditingSpecOnly
+          )
+         (MenuItem
+            activeHelpKey: fileSaveAsMethod
+            label: 'Save As...'
+            itemValue: doSaveAs
+            translateLabel: true
+            isVisible: notEditingSpecOnly
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            activeHelpKey: pickColumns
+            label: 'Pick Columns...'
+            itemValue: doPickColumns
+            translateLabel: true
+          )
+         (MenuItem
+            label: '-'
+            isVisible: isStandAlone
+          )
+         (MenuItem
+            activeHelpKey: fileBrowseClass
+            label: 'Browse Class'
+            itemValue: doBrowseClass
+            translateLabel: true
+            isVisible: isStandAlone
+          )
+         (MenuItem
+            label: '-'
+            isVisible: isStandAlone
+          )
+         (MenuItem
+            activeHelpKey: fileExit
+            label: 'Exit'
+            itemValue: closeRequest
+            translateLabel: true
+            isVisible: isStandAlone
+          )
+         )
+        nil
+        nil
+      )
+!
+
 menu
     "This resource specification was automatically generated
      by the MenuEditor of ST/X."
@@ -2124,74 +2223,7 @@
          (MenuItem
             label: 'File'
             translateLabel: true
-            submenu: 
-           (Menu
-              (
-               (MenuItem
-                  activeHelpKey: fileNew
-                  label: 'New'
-                  itemValue: doNew
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  activeHelpKey: fileLoad
-                  label: 'Load...'
-                  itemValue: doLoad
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  activeHelpKey: fileSave
-                  label: 'Save'
-                  itemValue: doSave
-                  translateLabel: true
-                )
-               (MenuItem
-                  activeHelpKey: fileSaveAs
-                  label: 'Save As...'
-                  itemValue: doSaveAs
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: '-'
-                )
-               (MenuItem
-                  activeHelpKey: pickColumns
-                  label: 'Pick Columns...'
-                  itemValue: doPickColumns
-                  translateLabel: true
-                )
-               (MenuItem
-                  label: '-'
-                  isVisible: isStandAlone
-                )
-               (MenuItem
-                  activeHelpKey: fileBrowseClass
-                  label: 'Browse Class'
-                  itemValue: doBrowseClass
-                  translateLabel: true
-                  isVisible: isStandAlone
-                )
-               (MenuItem
-                  label: '-'
-                  isVisible: isStandAlone
-                )
-               (MenuItem
-                  activeHelpKey: fileExit
-                  label: 'Exit'
-                  itemValue: closeRequest
-                  translateLabel: true
-                  isVisible: isStandAlone
-                )
-               )
-              nil
-              nil
-            )
+            submenuChannel: fileMenu
           )
          (MenuItem
             label: 'Edit'
@@ -2228,6 +2260,7 @@
          (MenuItem
             label: 'Generate'
             translateLabel: true
+            isVisible: notEditingSpecOnly
             submenu: 
            (Menu
               (
@@ -2630,12 +2663,22 @@
             labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon)
           )
          (MenuItem
+            activeHelpKey: fileSaveMethod
+            label: 'Save'
+            itemValue: doSave
+            translateLabel: true
+            isButton: true
+            isVisible: notEditingSpecOnly
+            labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon)
+          )
+         (MenuItem
             activeHelpKey: fileSave
             label: 'Save'
             itemValue: doSave
             translateLabel: true
             isButton: true
-            labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon)
+            isVisible: editingSpecOnly
+            labelImage: (ResourceRetriever ToolbarIconLibrary saveToFileIcon)
           )
          (MenuItem
             label: '-'
@@ -2731,6 +2774,12 @@
 
 !DataSetBuilder methodsFor:'accessing'!
 
+acceptedColumns
+    "returns the last saved columns (internal, for specOnly edit mode)"
+
+    ^ acceptedColumns
+!
+
 columns
     "returns list of columns"
 
@@ -2740,11 +2789,10 @@
 columns:aListOfColumns
     "setup columns from a column view"
 
-    |list|
-
-    columns    := OrderedCollection new.
-    list       := self seqList.
-
+    |list newColumns|
+
+    newColumns := OrderedCollection new.
+    list := self seqList.
     list removeAll.
 
     aListOfColumns size ~~ 0 ifTrue:[
@@ -2754,15 +2802,28 @@
             ] ifFalse:[
                 column := aColumn copy
             ].
-            columns add:column.
+            newColumns add:column.
             list add:(self labelFromColumn:column).  
         ]
     ].
+    columns := newColumns.
     self updateColumnView.
 
     "Modified: / 27-03-2007 / 08:46:39 / cg"
 !
 
+editingSpecOnly
+    ^ editingSpecOnly ? false
+!
+
+editingSpecOnly:something
+    editingSpecOnly := something.
+!
+
+notEditingSpecOnly
+    ^ self editingSpecOnly not
+!
+
 resolveRowClass
     "returns the resolved row class
     "
@@ -2913,38 +2974,28 @@
 !
 
 loadFromClass:aClass andSelector:aSelector
-    |updateBlock cls list|
+    |cls list|
 
     self assert:(aClass isNil or:[aClass isClass]).
 
     selectedColumnIndex := 0.
 
-    updateBlock := [
-        columns notEmpty ifTrue: [
-            self tabModel value:0; value:1.                 "/ toggle to force change
-            self selectedColumnModel value:nil; value:1.    "/ toggle to force change
-            self updateColumnView.
-            self updateInputFields.
-            self updateInfoLabel.
-            self updateHistory.
-            self clearModifiedFlag.
-            self enablingCommitButtonsHolder value:false.
-        ]
-    ].
-
     "if opened on table columns"  
 
     aClass isNil ifTrue: [ 
         self tabModel value: 0. 
-        self columns removeAll.
-        self seqList removeAll.
+    "/    self columns removeAll.
+    "/    self seqList removeAll.
         self updateColumnView.
         self updateInfoLabel.
         self isColumnSelected value: false.
         ^ self.
     ].
 
-    specSelector isNil ifTrue: [updateBlock value. ^self].
+    specSelector isNil ifTrue: [
+        self updateAfterColumnChange. 
+        ^ self
+    ].
 
     list := nil.
 
@@ -2960,7 +3011,18 @@
         list := columns
     ].
     self columns:list.
-    updateBlock value.
+    self updateAfterColumnChange.
+!
+
+updateAfterColumnChange
+    self tabModel value:0; value:1.                 "/ toggle to force change
+    self selectedColumnModel value:nil; value:1.    "/ toggle to force change
+    self updateColumnView.
+    self updateInputFields.
+    self updateInfoLabel.
+    self updateHistory.
+    self clearModifiedFlag.
+    self enablingCommitButtonsHolder value:false.
 ! !
 
 !DataSetBuilder methodsFor:'code generation'!
@@ -3349,6 +3411,13 @@
 
 !
 
+loadFromResourceSpec: aResourceSpec
+    self columns:aResourceSpec copy.
+    modified := false.
+    hasSaved := false.
+    self updateAfterColumnChange.
+!
+
 setDefaultValuesInNewColumn:aDataSetColumnSpec
 "/    aDataSetColumnSpec readSelector: #'valueAtColumnIndex:'.
 "/    aDataSetColumnSpec writeSelector: #'valueAtColumnIndex:put:'.
@@ -3553,6 +3622,16 @@
 
 !DataSetBuilder methodsFor:'private'!
 
+askForModification
+    "asks first for item and then for resource modification"
+
+    editingSpecOnly ifTrue:[
+        self accept.
+        ^ true.
+    ].
+    ^ self askForItemModification and: [self askForListModification]
+!
+
 labelFromColumn:aColumn
     |label|
 
@@ -3575,12 +3654,11 @@
 !
 
 updateColumnView
-    "updates column view from column descriptions
-    "   
-    |size|
+    "updates the column view from column descriptions"
+
+    |size previewColumns columnList|
 
     columnView notNil ifTrue:[
-        |previewColumns columnItems columnList|
         columnList     := List new.
         previewColumns := OrderedCollection new.
 
@@ -3607,11 +3685,14 @@
                     choices:#choices
             ].
             #(' 1' ' 2' ' x') do:[:suffix|
-                columnItems := Row new:size.
-                1 to:size do:[:i| columnItems at: i put: ('Cell', suffix)].
-                columnList add: columnItems.
+                |oneRow|
+
+                oneRow := Row new:size.
+                1 to:size do:[:i | oneRow at: i put: ('Cell%1-%2' bindWith:suffix with:i)].
+                columnList add: oneRow.
             ]
         ].
+
         columnView list: #().
         columnView columnDescriptors: previewColumns.
         columnView list: columnList.
@@ -4167,6 +4248,13 @@
 doSave
     |cls dst spc category mthd excla code resourceType|
 
+    editingSpecOnly == true ifTrue:[
+        acceptedColumns := columns.
+        hasSaved := true.
+        self clearModified.
+        ^ self.
+    ].
+
     (columns size ~~ 0 and:[super doSave]) ifFalse:[
         ^ nil
     ].