# HG changeset patch # User Claus Gittinger # Date 1287666092 -7200 # Node ID 371a8522bbd54c41f93e46b00ae859746e47fbee # Parent 91c9047e3e878dc2445b7bac26160f70194f8591 added:8 methods comment/format in: #tileModeHolder changed:9 methods category of: #nextImageInSequence #updateAfterImageChange diff -r 91c9047e3e87 -r 371a8522bbd5 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'!