added:8 methods
authorClaus Gittinger <cg@exept.de>
Thu, 21 Oct 2010 15:01:32 +0200
changeset 2812 371a8522bbd5
parent 2811 91c9047e3e87
child 2813 0192e44405fc
added:8 methods comment/format in: #tileModeHolder changed:9 methods category of: #nextImageInSequence #updateAfterImageChange
ImageEditor.st
--- a/ImageEditor.st	Thu Oct 21 14:43:14 2010 +0200
+++ b/ImageEditor.st	Thu Oct 21 15:01:32 2010 +0200
@@ -304,7 +304,14 @@
 #fileSaveMethodAs
 'Save as Method...'
 
+#nextImageInSequence
+'Go to the next image in the animated gif image sequence.'
+
+#previousImageInSequence
+'Go to the previous image in the animated gif image sequence.'
 )
+
+    "Modified: / 21-10-2010 / 14:58:32 / cg"
 !
 
 helpSpec
@@ -2169,36 +2176,45 @@
             label: '-'
           )
          (MenuItem
+            enabled: imageIsLoadedHolder
+            label: 'Copy to Clipboard'
+            itemValue: doCopyImageToClipboard
+            translateLabel: true
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            activeHelpKey: editResize
             enabled: imageIsLoadedAndAllowedToChangeImageDimensionAndDepth
-            activeHelpKey: editResize
             label: 'Resize...'
             itemValue: doResizeImage
             translateLabel: true
           )
          (MenuItem
+            activeHelpKey: editMagnifyImage
             enabled: imageIsLoadedAndAllowedToChangeImageDimensionAndDepth
-            activeHelpKey: editMagnifyImage
             label: 'Magnify...'
             itemValue: doMagnifyImage
             translateLabel: true
           )
          (MenuItem
+            activeHelpKey: editMagnifyImage
             enabled: imageIsLoadedAndAllowedToChangeImageDimensionAndDepth
-            activeHelpKey: editMagnifyImage
             label: 'Magnify By...'
             itemValue: doMagnifyImageBy
             translateLabel: true
           )
          (MenuItem
+            activeHelpKey: editRotate
             enabled: imageIsLoadedAndAllowedToChangeImageDimensionAndDepth
-            activeHelpKey: editRotate
             label: 'Rotate...'
             itemValue: doRotateImage
             translateLabel: true
           )
          (MenuItem
+            activeHelpKey: edit3DProjection
             enabled: imageIsLoadedAndAllowedToChangeImageDimensionAndDepth
-            activeHelpKey: edit3DProjection
             label: '3D Projection...'
             itemValue: do3DProjection
             translateLabel: true
@@ -2212,17 +2228,17 @@
               (
                (MenuItem
                   activeHelpKey: editFlipVertical
+                  enabled: imageIsLoadedHolder
                   label: 'Flip - Vertical'
                   itemValue: doFlipVertical
                   translateLabel: true
-                  enabled: imageIsLoadedHolder
                 )
                (MenuItem
                   activeHelpKey: editFlipHorizontal
+                  enabled: imageIsLoadedHolder
                   label: 'Flip - Horizontal'
                   itemValue: doFlipHorizontal
                   translateLabel: true
-                  enabled: imageIsLoadedHolder
                 )
                )
               nil
@@ -2287,15 +2303,15 @@
             )
           )
          (MenuItem
+            activeHelpKey: uncropManual
             enabled: imageIsLoadedAndAllowedToChangeImageDimensionAndDepth
-            activeHelpKey: uncropManual
             label: 'Uncrop (Add Border)...'
             itemValue: doUnCropManual
             translateLabel: true
           )
          (MenuItem
+            activeHelpKey: shiftManual
             enabled: imageIsLoadedHolder
-            activeHelpKey: shiftManual
             label: 'Shift...'
             itemValue: doShiftManual
             translateLabel: true
@@ -2316,13 +2332,47 @@
             itemValue: doInsertTextFromUser
             translateLabel: true
           )
-
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            label: 'Sequence'
+            translateLabel: true
+            submenu: 
+           (Menu
+              (
+               (MenuItem
+                  enabled: imageHasNextImageHolder
+                  label: 'Next in Sequence'
+                  itemValue: nextImageInSequence
+                  translateLabel: true
+                )
+               (MenuItem
+                  enabled: imageHasPreviousImageHolder
+                  label: 'Prev in Sequence'
+                  itemValue: previousImageInSequence
+                  translateLabel: true
+                )
+               (MenuItem
+                  label: '-'
+                )
+               (MenuItem
+                  enabled: imageHasImageSequenceHolder
+                  label: 'Edit each from Sequence'
+                  itemValue: editEachImageFromSequence
+                  translateLabel: true
+                )
+               )
+              nil
+              nil
+            )
+          )
          )
         nil
         nil
       )
 
-    "Modified: / 04-07-2010 / 10:16:48 / cg"
+    "Modified: / 21-10-2010 / 14:30:24 / cg"
 !
 
 menuFile
@@ -2415,13 +2465,6 @@
             )
           )
          (MenuItem
-            enabled: imageHasNextImageHolder
-            label: 'Next in Sequence'
-            itemValue: nextImageInSequence
-            translateLabel: true
-            isVisible: isStandAlone
-          )
-         (MenuItem
             label: '-'
           )
          (MenuItem
@@ -2460,27 +2503,9 @@
             translateLabel: true
           )
          (MenuItem
-            enabled: imageIsLoadedHolder
-            label: 'Copy to Clipboard'
-            itemValue: doCopyImageToClipboard
-            translateLabel: true
-          )
-         (MenuItem
             label: '-'
           )
          (MenuItem
-            activeHelpKey: fileEditMask
-            enabled: imageIsLoadedHolder
-            label: 'Edit Mask'
-            itemValue: doEditMask
-            translateLabel: true
-            isVisible: false
-          )
-         (MenuItem
-            label: '-'
-            isVisible: false
-          )
-         (MenuItem
             activeHelpKey: filePrint
             enabled: imageIsLoadedHolder
             label: 'Print'
@@ -2528,6 +2553,8 @@
         nil
         nil
       )
+
+    "Modified: / 21-10-2010 / 14:30:06 / cg"
 !
 
 menuMouseButtonColors
@@ -2758,12 +2785,34 @@
             isButton: true
             labelImage: (ResourceRetriever ToolbarIconLibrary undoIcon)
           )
+         (MenuItem
+            label: '-'
+            isVisible: imageHasImageSequenceHolder
+          )
+         (MenuItem
+            activeHelpKey: previousImageInSequence
+            enabled: imageHasPreviousImageHolder
+            label: 'Previous Image'
+            itemValue: previousImageInSequence
+            translateLabel: true
+            isVisible: imageHasImageSequenceHolder
+            labelImage: (ResourceRetriever ToolbarIconLibrary leftArrow24x24Icon)
+          )
+         (MenuItem
+            activeHelpKey: nextImageInSequence
+            enabled: imageHasNextImageHolder
+            label: 'Next Image'
+            itemValue: nextImageInSequence
+            translateLabel: true
+            isVisible: imageHasImageSequenceHolder
+            labelImage: (ResourceRetriever ToolbarIconLibrary rightArrow24x24Icon)
+          )
          )
         nil
         nil
       )
 
-    "Modified: / 04-07-2010 / 10:17:49 / cg"
+    "Modified: / 21-10-2010 / 14:57:32 / cg"
 !
 
 modeMenu
@@ -3303,13 +3352,58 @@
     "Created: / 04-07-2010 / 10:13:05 / cg"
 !
 
+imageHasImageSequence
+    ^ self image notNil and:[self image imageSequence notNil]
+
+    "Created: / 21-10-2010 / 14:35:45 / cg"
+!
+
+imageHasImageSequenceHolder
+    |holder|
+
+    (holder := builder bindingAt:#imageHasImageSequenceHolder) isNil ifTrue:[
+        builder aspectAt:#imageHasImageSequenceHolder put:(holder := false asValue).
+        holder value:(self imageHasImageSequence).    
+    ].
+    ^ holder
+
+    "Modified: / 21-10-2010 / 14:36:57 / cg"
+!
+
+imageHasNextImage
+    ^ self imageHasImageSequence and:[ (imageSeqNr ? 1) < self image imageSequence size ]
+
+    "Created: / 21-10-2010 / 14:37:10 / cg"
+!
+
 imageHasNextImageHolder
-    "returns whether an image is loaded as value holder"
-
-    ^ [self image notNil
-       and:[self image imageSequence notNil]]
-
-    "Created: / 04-07-2010 / 10:15:03 / cg"
+    |holder|
+
+    (holder := builder bindingAt:#imageHasNextImageHolder) isNil ifTrue:[
+        builder aspectAt:#imageHasNextImageHolder put:(holder := false asValue).
+        holder value:(self imageHasNextImage).    
+    ].
+    ^ holder
+
+    "Modified: / 21-10-2010 / 14:37:40 / cg"
+!
+
+imageHasPreviousImage
+    ^ self imageHasImageSequence and:[ (imageSeqNr ? 1) > 1 ]
+
+    "Created: / 21-10-2010 / 14:37:21 / cg"
+!
+
+imageHasPreviousImageHolder
+    |holder|
+
+    (holder := builder bindingAt:#imageHasPreviousImageHolder) isNil ifTrue:[
+        builder aspectAt:#imageHasPreviousImageHolder put:(holder := false asValue).
+        holder value:(self imageHasPreviousImage).    
+    ].
+    ^ holder
+
+    "Modified: / 21-10-2010 / 14:37:48 / cg"
 !
 
 imageInfoHolder
@@ -3407,11 +3501,14 @@
 
 tileModeHolder
     |holder|
+
     (holder := builder bindingAt:#tileModeHolder) isNil ifTrue:[
         builder aspectAt:#tileModeHolder put:(holder := false asValue).
         holder addDependent:self.
     ].
     ^ holder
+
+    "Modified: / 21-10-2010 / 14:35:24 / cg"
 !
 
 valueOfMagnification
@@ -3541,6 +3638,7 @@
             ^ self.
         ].
         something == #image ifTrue:[
+            self updateAfterImageChange.
             imagePreView image:img scroll:false.
             self updateListOfColorsAndColormapMode.
             self tileModeHolder value ifTrue:[
@@ -3580,12 +3678,35 @@
 
     changedObject == imageEditView image ifTrue:[
         "/ self halt:'to be implemented'.
+        self updateAfterImageChange.
         ^ self.
     ].
 
     super update:something with:aParameter from:changedObject
 
-    "Modified: / 04-07-2010 / 10:19:51 / cg"
+    "Modified: / 21-10-2010 / 14:34:31 / cg"
+!
+
+updateAfterImageChange
+    |img|
+
+    (img := self image) notNil ifTrue:[
+        img := img onDevice:device.
+        self updateColorsFromImage:img.
+        self findColorMapMode.
+        self updateLabelsAndHistory.
+
+        imageSeqNr isNil ifTrue:[
+            imageSeqNr := 1
+        ].
+        self imageHasImageSequenceHolder value:(self imageHasImageSequence).
+        self imageHasNextImageHolder value:(self imageHasNextImage).
+        self imageHasPreviousImageHolder value:(self imageHasPreviousImage).
+    ] ifFalse:[
+        self updateForNoImage
+    ]
+
+    "Modified: / 21-10-2010 / 14:40:45 / cg"
 !
 
 updateColorsFromImage:image
@@ -3607,9 +3728,10 @@
 
     self imageIsLoadedHolder value: false.
     self listOfColors removeAll.
-    self imagePreView image: nil
-
-    "Modified: / 04-07-2010 / 10:15:55 / cg"
+    self imagePreView image: nil.
+    self imageHasImageSequenceHolder value:false.
+
+    "Modified: / 21-10-2010 / 14:39:13 / cg"
 !
 
 updateLabelsAndHistory
@@ -3964,19 +4086,6 @@
     self updateLabelsAndHistory.
 
     "Modified: / 16.3.1999 / 21:45:07 / cg"
-!
-
-updateAfterImageChange
-    |img|
-
-    (img := self image) notNil ifTrue:[
-        img := img onDevice:device.
-        self updateColorsFromImage:img.
-        self findColorMapMode.
-        self updateLabelsAndHistory.
-    ] ifFalse:[
-        self updateForNoImage
-    ]
 ! !
 
 !ImageEditor methodsFor:'menu modes'!
@@ -5916,6 +6025,97 @@
     imageEditView undo.
 ! !
 
+!ImageEditor methodsFor:'user actions-image sequences'!
+
+editEachImageFromSequence
+    |seq|
+
+    self checkModified ifFalse:[ ^ self ].
+
+    imageEditView releaseUndos.
+
+    seq := self image imageSequence.
+    seq size > 10 ifTrue:[
+        (Dialog confirm:(resources string:'Ok to open %1 image editor windows?' with:seq size)) 
+            ifFalse:[^ self].
+    ].
+
+    seq do:[:eachFrame |
+        ImageEditor openOnImage:eachFrame image
+    ].
+
+    "Modified: / 21-10-2010 / 15:01:25 / cg"
+!
+
+gotoImageInSequence:index
+    "display the next image in the image sequence"
+
+    |img seq frame listOfColors|
+
+    imageEditView releaseUndos.
+
+    seq := self image imageSequence.
+
+    imageSeqNr := index.
+    frame := seq at:imageSeqNr.
+    imageEditView image:(frame image).
+
+    (img := self image) notNil ifTrue:[          
+        listOfColors := self listOfColors.
+        img colorMap notNil ifTrue:[
+            listOfColors contents:(img usedColors asSet asOrderedCollection).
+        ] ifFalse:[
+            listOfColors removeAll.
+        ].
+        self findColorMapMode.     
+        self updateLabelsAndHistory.
+        img := img onDevice:device.
+        imageEditView image:img.
+    ] ifFalse:[
+        self updateForNoImage
+    ].
+
+    "Created: / 21-10-2010 / 14:22:11 / cg"
+!
+
+nextImageInSequence
+    "display the next image in the image sequence"
+
+    |seq index|
+
+    seq := self image imageSequence.
+    (index := imageSeqNr) isNil ifTrue:[
+        index := 1.
+    ].
+    index := index + 1.
+    index > seq size ifTrue:[
+        self information:'Back to first image in sequence'.
+        index := 1.
+    ].
+    self gotoImageInSequence:index.
+
+    "Modified: / 21-10-2010 / 14:24:11 / cg"
+!
+
+previousImageInSequence
+    "display the previous image in the image sequence"
+
+    |seq index|
+
+    seq := self image imageSequence.
+    (index := imageSeqNr) isNil ifTrue:[
+        index := 1.
+    ].
+    index := index - 1.
+    index < 1 ifTrue:[
+        self information:'Wrap to last image in sequence'.
+        index := seq size.
+    ].
+    self gotoImageInSequence:index.
+
+    "Created: / 21-10-2010 / 14:25:03 / cg"
+! !
+
 !ImageEditor methodsFor:'user actions-loading'!
 
 doLoadFromClass
@@ -6146,41 +6346,6 @@
             Image fromView:(v topView)
         ].
     ].
-!
-
-nextImageInSequence
-    "display the next image in the image sequence"
-    |img seq frame listOfColors|
-
-    imageEditView releaseUndos.
-
-    seq := self image imageSequence.
-    imageSeqNr isNil ifTrue:[
-        imageSeqNr := 1.
-    ].
-    imageSeqNr := imageSeqNr + 1.
-    imageSeqNr > seq size ifTrue:[
-        self information:'Back to first image in sequence'.
-        imageSeqNr := 1.
-    ].
-    frame := seq at:imageSeqNr.
-    imageEditView image:(frame image).
-
-    (img := self image) notNil ifTrue:[          
-        listOfColors := self listOfColors.
-        img colorMap notNil ifTrue:[
-            listOfColors contents:(img usedColors asSet asOrderedCollection).
-        ] ifFalse:[
-            listOfColors removeAll.
-        ].
-        self findColorMapMode.     
-        self updateLabelsAndHistory.
-        img := img onDevice:device.
-        imageEditView image:img.
-    ] ifFalse:[
-        self updateForNoImage
-    ].
-
 ! !
 
 !ImageEditor methodsFor:'user actions-saving'!