diff -r 85ab98a850c8 -r 2b0f24d74f8e ImageEditor.st --- a/ImageEditor.st Tue Oct 29 10:42:40 2002 +0100 +++ b/ImageEditor.st Tue Oct 29 10:43:02 2002 +0100 @@ -15,7 +15,7 @@ ToolApplicationModel subclass:#ImageEditor instanceVariableNames:'imageEditView colorMapMode editMode mouseKeyColorMode selectedColorIndex postOpenAction imageSeqNr' - classVariableNames:'LastDirectory MaskClipboard' + classVariableNames:'LastDirectory LastSizeString MaskClipboard LastColormapMode' poolDictionaries:'' category:'Interface-UIPainter' ! @@ -207,22 +207,25 @@ 'Copy' #drawModeFill -'Flood-fill' +'Flood-Fill' #drawModeFilledBox -'Fill Rectangle' +'Filled Rectangle' #drawModePaste 'Paste' #drawModePasteUnder -'Paste under' +'Paste Under' + +#drawModePasteWithMask +'Paste With Mask' #drawModePoint 'Point' #fileGrabImage -'Pick from screen.' +'Pick from Screen.' #fileLoadFromClass 'Load from Method' @@ -231,22 +234,22 @@ 'Load from File.' #fileNewImage -'New image' +'New Image' #filePrint 'Print' #fileSaveAs -'Save to file.' +'Save to File.' #fileSaveMaskAs -'Save to file.' +'Save to File.' #fileSaveMethod -'Save as method' +'Save as Method' #fileSaveMethodAs -'Save as method' +'Save as Method' ) ! @@ -318,31 +321,34 @@ 'Find and remove top border.' #drawModeBox -'Switches to box-drawing mode.' +'Rectangle Drawing Mode.' #drawModeCopy -'Switches to area-copy mode.' +'Area Copy Mode.' #drawModeFill -'Switches to flood-fill mode.' +'Flood Fill Mode.' #drawModeFilledBox -'Switches to filled-box drawing mode.' +'Filled Rectangle Drawing Mode.' #drawModePaste -'Switches to paste mode.' +'Paste Mode.' #drawModePasteUnder -'Switches to paste under mode.' +'Paste-Under Mode.' + +#drawModePasteWithMask +'Paste-with-Mask Mode.' #drawModePoint -'Switches to point-drawing mode.' +'Point Drawing Mode.' #editFlipHorizontal -'Flips the image horizontally.' +'Flip the image horizontally.' #editFlipVertical -'Flips the image vertically.' +'Flip the image vertically.' #editMagnifyImage 'Magnify the image.' @@ -396,7 +402,7 @@ 'Increase magnification.' #mouseKeyColorMode -'Toggles between left and right mouse button color.' +'Toggle between left and right mouse button color.' #previewView 'Shows a preview of the image.' @@ -411,6 +417,66 @@ !ImageEditor class methodsFor:'image specs'! +copyIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self copyIcon inspect + ImageEditor openOnClass:self andSelector:#copyIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class copyIcon' + ifAbsentPut:[(Depth2Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@** @@J)UUTB*Z*)@*&**PJ)**$B*Z*)@*&**PJ)**$@@Z*)@@F**P@AUUT@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 128 255 255 255]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C? O>@??3??O? + + ^Icon + constantNamed:#'ImageEditor class fillIcon' + ifAbsentPut:[(Depth2Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@ @@@@*H@@D*(@@DUUP@EAUU@AAEU@@@@U@@DDA@@@@@@@@PP@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C @Q@BN@I<@?8C?0[?!!G<@O P\@@ D@@@@@@@@@a') ; yourself); yourself] +! + +fillRectIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self fillRectIcon inspect + ImageEditor openOnClass:self andSelector:#fillRectIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class fillRectIcon' + ifAbsentPut:[(Depth1Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@A@@@@@@@@@@@@@@@@@@@@@@@@@@D@@@@a') ; colorMapFromArray:#[0 0 0 255 0 0]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C?0O?@?A?8G? _>A?8G? _>A?8G? O<@_ @@@b') ; yourself); yourself] ! +pasteIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self pasteIcon inspect + ImageEditor openOnClass:self andSelector:#pasteIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class pasteIcon' + ifAbsentPut:[(Depth4Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@AU@@@@@CHE@E@2@@@ QDQD@0@@L@@@@@H@@BL#H2L#@@@QDQDQL @@D3L@@@@@@AL3@3M&X@@SL0L0A&@@D3LC@@A @AL3@3@FX@@QDPY&Y& +@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 128 128 128 0 128 128 128 212 208 200 255 255 0 255 255 255]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0A?8O?0??C?O?8??#?>O?8_? G>@@a') ; yourself); yourself] +! + +pasteUnderIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self pasteUnderIcon inspect + ImageEditor openOnClass:self andSelector:#pasteUnderIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class pasteUnderIcon' + ifAbsentPut:[(Depth4Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@AU@@@@@CHE@E@2@@@ QDQD@0@@L@@@@@H@@BL#H2L#@@@QDQDQL @@D3L@@@@@@AL3@3M&X@@SL0L0A&@@D3LC@@A @AL3@3@FX@@QDPY&Y& +@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 128 128 128 0 128 128 128 212 208 200 255 255 0 255 255 255]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0A?8O?0??C?O?8??#?>O?8_? G>@@a') ; yourself); yourself] +! + +pasteWithMaskIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self pasteWithMaskIcon inspect + ImageEditor openOnClass:self andSelector:#pasteWithMaskIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class pasteWithMaskIcon' + ifAbsentPut:[(Depth4Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@AU@@@@@CHE@E@2@@@ QDQD@0@@L@@@@@H@@BL#H2L#@@@QDQDQL @@D3L@@@@@@AL3@3M&X@@SL0L3A&@@D3LCL0A @AL3@3LFX@@QDPY&Y& +@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 128 128 128 0 128 128 128 212 208 200 255 255 0 255 255 255]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0A?8O?0??C?O?8??#?>O?8_? G>@@a') ; yourself); yourself] +! + +pointIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self pointIcon inspect + ImageEditor openOnClass:self andSelector:#pointIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class pointIcon' + ifAbsentPut:[(Depth1Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@A@@@@@@@@@@@@@@@C@@@@@B@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@0@G@@8@G@@8@G@@8@G@@X@B@@@@@@@@@a') ; yourself); yourself] +! + +rectIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self rectIcon inspect + ImageEditor openOnClass:self andSelector:#rectIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class rectIcon' + ifAbsentPut:[(Depth1Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@A@@@@@@@@@@@@@@@C@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 0 0]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C?0HA@ DB@PHA@ DB@PHA@ DC?0@@@@@@@a') ; yourself); yourself] +! + rightMouseKeyIcon "This resource specification was automatically generated by the ImageEditor of ST/X." @@ -447,6 +616,26 @@ ^Icon constantNamed:#'ImageEditor rightMouseKeyIcon' ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@JJE@@B"!!P@@((T@@@@@@@B** @@**(@@J**@@B** @@**(@@J**@@@**@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?0G? _>A?8G? _>A?8G? _>A?8G? O<@_ @@@b') ; yourself); yourself] +! + +specialIcon + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the ImageEditor may not be able to read the specification." + + " + self specialIcon inspect + ImageEditor openOnClass:self andSelector:#specialIcon + Icon flushCachedIcons + " + + + + ^Icon + constantNamed:#'ImageEditor class specialIcon' + ifAbsentPut:[(Depth1Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@L@@@@B@@@@@0@@@@@@@@@@@@@@@P@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 0 0]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@L@@0@G @^@A8@G @L@@0@@@@L@@0@@@@@a') ; yourself); yourself] ! ! !ImageEditor class methodsFor:'interface specs'! @@ -967,7 +1156,7 @@ #label: 'Image Editor' #name: 'Image Editor' #min: #(#Point 400 320) - #bounds: #(#Rectangle 16 42 514 386) + #bounds: #(#Rectangle 105 601 555 951) #menu: #menu ) #component: @@ -983,17 +1172,22 @@ #(#VariableHorizontalPanelSpec #name: 'variableHorizontalPanel1' #layout: #(#LayoutFrame 0 0.0 34 0.0 0 1.0 -26 1.0) + #snapMode: #both + #barLevel: 1 #component: #(#SpecCollection #collection: #( #(#ViewSpec - #name: 'view1' + #name: 'leftView' + #level: 1 #component: #(#SpecCollection #collection: #( #(#VariableVerticalPanelSpec #name: 'VariableVerticalPanel1' #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) + #level: 0 + #snapMode: #both #component: #(#SpecCollection #collection: #( @@ -1005,6 +1199,7 @@ #(#MenuPanelSpec #name: 'MouseButtonColorToolBar' #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 24 0) + #level: 0 #menu: #menuMouseButtonColors ) #(#DataSetSpec @@ -1085,65 +1280,84 @@ ) ) - #handles: #(#Any 0.723776 1.0) + #handles: #(#Any 0.5 1.0) ) ) ) ) #(#ViewSpec - #name: 'view2' - #level: -1 + #name: 'rightView' #component: #(#SpecCollection #collection: #( - #(#ArbitraryComponentSpec - #name: 'imageEditView' - #layout: #(#LayoutFrame 2 0.0 2 0.0 -2 1.0 -24 1.0) - #hasHorizontalScrollBar: true - #hasVerticalScrollBar: true - #hasBorder: false - #component: #ImageEditView - ) - #(#LabelSpec - #name: 'coordLabel' - #layout: #(#LayoutFrame 2 0.0 -22 1 -83 1.0 0 1.0) - #level: -1 - #labelChannel: #imageInfoHolder - #resizeForLabel: false - #adjust: #left + #(#MenuPanelSpec + #name: 'ToolBar1' + #layout: #(#LayoutFrame 0 0 0 0.0 28 0 0 1.0) + #level: 1 + #menu: #toolsMenuToolbar + #verticalLayout: true + #centerItems: true + #textDefault: true ) - #(#ArrowButtonSpec - #name: 'magnifyDownButton' - #layout: #(#LayoutFrame -80 1 -22 1 -58 1 0 1) - #activeHelpKey: #magnifyImageDown - #model: #doMagnifyDown - #enableChannel: #imageIsLoaded - #isTriggerOnDown: true - #direction: #left - ) - #(#ArrowButtonSpec - #name: 'magnifyUpButton' - #layout: #(#LayoutFrame -24 1 -22 1 -2 1 0 1) - #activeHelpKey: #magnifyImageUp - #model: #doMagnifyUp - #enableChannel: #imageIsLoaded - #isTriggerOnDown: true - #direction: #right - ) - #(#InputFieldSpec - #name: 'magnificationInputField' - #layout: #(#LayoutFrame -57 1 -22 1 -26 1 0 1) - #activeHelpKey: #magnificationNumber - #enableChannel: #imageIsLoaded - #model: #valueOfMagnification - #type: #numberInRange - #acceptOnReturn: false - #acceptOnTab: false - #numChars: 2 - #minValue: 1 - #maxValue: 99 - #acceptOnPointerLeave: false + #(#ViewSpec + #name: 'editingView' + #layout: #(#LayoutFrame 28 0.0 0 0.0 0 1.0 0 1.0) + #level: 1 + #component: + #(#SpecCollection + #collection: #( + #(#ArbitraryComponentSpec + #name: 'imageEditView' + #layout: #(#LayoutFrame 2 0.0 2 0.0 -2 1.0 -24 1.0) + #hasHorizontalScrollBar: true + #hasVerticalScrollBar: true + #hasBorder: false + #component: #ImageEditView + ) + #(#LabelSpec + #name: 'coordLabel' + #layout: #(#LayoutFrame 2 0.0 -22 1 -83 1.0 0 1.0) + #level: -1 + #labelChannel: #imageInfoHolder + #resizeForLabel: false + #adjust: #left + ) + #(#ArrowButtonSpec + #name: 'magnifyDownButton' + #layout: #(#LayoutFrame -80 1 -22 1 -58 1 0 1) + #activeHelpKey: #magnifyImageDown + #model: #doMagnifyDown + #enableChannel: #imageIsLoaded + #isTriggerOnDown: true + #direction: #left + ) + #(#ArrowButtonSpec + #name: 'magnifyUpButton' + #layout: #(#LayoutFrame -24 1 -22 1 -2 1 0 1) + #activeHelpKey: #magnifyImageUp + #model: #doMagnifyUp + #enableChannel: #imageIsLoaded + #isTriggerOnDown: true + #direction: #right + ) + #(#InputFieldSpec + #name: 'magnificationInputField' + #layout: #(#LayoutFrame -57 1 -22 1 -26 1 0 1) + #activeHelpKey: #magnificationNumber + #enableChannel: #imageIsLoaded + #model: #valueOfMagnification + #type: #numberInRange + #acceptOnReturn: false + #acceptOnTab: false + #numChars: 2 + #minValue: 1 + #maxValue: 99 + #acceptOnPointerLeave: false + ) + ) + + ) ) ) @@ -1152,7 +1366,7 @@ ) ) - #handles: #(#Any 0.276 1.0) + #handles: #(#Any 0.3 1.0) ) #(#UISubSpecification #name: 'infoBarSubSpec' @@ -1235,132 +1449,131 @@ #(#Menu #( #(#MenuItem + #activeHelpKey: #file #label: '&File' #translateLabel: true - #activeHelpKey: #file - #shortcutKeyCharacter: #Cmdf #submenu: #(#Menu #( #(#MenuItem + #activeHelpKey: #fileNewImage #label: 'New...' + #itemValue: #doNewImage #translateLabel: true - #value: #doNewImage - #activeHelpKey: #fileNewImage ) #(#MenuItem #label: '-' ) #(#MenuItem + #activeHelpKey: #fileLoadFromClass #label: 'Load...' + #itemValue: #doLoadFromClass #translateLabel: true - #value: #doLoadFromClass - #activeHelpKey: #fileLoadFromClass ) #(#MenuItem + #activeHelpKey: #fileLoadFromFile #label: 'Load from File...' + #itemValue: #doLoadFromFile #translateLabel: true - #value: #doLoadFromFile - #activeHelpKey: #fileLoadFromFile ) #(#MenuItem + #activeHelpKey: #fileGrabImage #label: 'Grab from Screen' + #itemValue: #grabScreenImage #translateLabel: true - #value: #grabScreenImage - #activeHelpKey: #fileGrabImage ) #(#MenuItem + #enabled: #imageHasNextImage #label: 'Next in Sequence' + #itemValue: #nextImageInSequence #translateLabel: true - #value: #nextImageInSequence - #enabled: #imageHasNextImage ) #(#MenuItem #label: '-' ) #(#MenuItem - #label: 'Save' - #translateLabel: true - #value: #doSaveMethod #activeHelpKey: #fileSaveMethod #enabled: #imageIsLoadedAndClassDefined + #label: 'Save' + #itemValue: #doSaveMethod + #translateLabel: true ) #(#MenuItem - #label: 'Save As...' - #translateLabel: true - #value: #doSaveMethodAs #activeHelpKey: #fileSaveMethodAs #enabled: #imageIsLoaded + #label: 'Save As...' + #itemValue: #doSaveMethodAs + #translateLabel: true ) #(#MenuItem #label: '-' ) #(#MenuItem - #label: 'Save to File...' - #translateLabel: true - #value: #doSaveImageFileAs #activeHelpKey: #fileSaveAs #enabled: #imageIsLoaded + #label: 'Save to File...' + #itemValue: #doSaveImageFileAs + #translateLabel: true ) #(#MenuItem - #label: 'Save Mask to File...' - #translateLabel: true - #value: #doSaveImageMaskFileAs #activeHelpKey: #fileSaveMaskAs #enabled: #imageIsLoaded + #label: 'Save Mask to File...' + #itemValue: #doSaveImageMaskFileAs + #translateLabel: true ) #(#MenuItem - #label: 'Save As Button to File...' - #translateLabel: true - #value: #doSaveButtonImageToFileAs #activeHelpKey: #fileSaveButtonImageAs #enabled: #imageIsLoaded + #label: 'Save As Button to File...' + #itemValue: #doSaveButtonImageToFileAs + #translateLabel: true ) #(#MenuItem #label: '-' ) #(#MenuItem - #label: 'Show storeString' - #translateLabel: true - #value: #doShowStoreString #activeHelpKey: #fileShowStoreString #enabled: #imageIsLoaded + #label: 'Show storeString' + #itemValue: #doShowStoreString + #translateLabel: true ) #(#MenuItem - #label: 'Edit Mask' - #translateLabel: true - #value: #doEditMask #activeHelpKey: #fileEditMask #enabled: #imageIsLoaded + #label: 'Edit Mask' + #itemValue: #doEditMask + #translateLabel: true ) #(#MenuItem #label: '-' ) #(#MenuItem - #label: 'Print' - #translateLabel: true - #value: #doPrint #activeHelpKey: #filePrint #enabled: #imageIsLoaded + #label: 'Print' + #itemValue: #doPrint + #translateLabel: true ) #(#MenuItem #label: '-' ) #(#MenuItem - #label: 'Browse Class' - #translateLabel: true - #value: #doBrowseClass #activeHelpKey: #fileBrowseClass #enabled: #hasClassDefined + #label: 'Browse Class' + #itemValue: #doBrowseClass + #translateLabel: true ) #(#MenuItem #label: '-' ) #(#MenuItem + #activeHelpKey: #fileExit #label: 'Exit' + #itemValue: #closeRequest #translateLabel: true - #value: #closeRequest - #activeHelpKey: #fileExit ) ) nil @@ -1368,69 +1581,69 @@ ) ) #(#MenuItem + #activeHelpKey: #edit + #enabled: #imageIsLoaded #label: 'Edit' #translateLabel: true - #activeHelpKey: #edit - #enabled: #imageIsLoaded #submenu: #(#Menu #( #(#MenuItem - #label: 'Undo' - #translateLabel: true - #value: #doUndo #activeHelpKey: #editUndo #enabled: #valueOfCanUndo + #label: 'Undo' + #itemValue: #doUndo + #translateLabel: true ) #(#MenuItem #label: '-' ) #(#MenuItem + #activeHelpKey: #editFlipVertical #label: 'Flip - Vertical' + #itemValue: #doFlipVertical #translateLabel: true - #value: #doFlipVertical - #activeHelpKey: #editFlipVertical ) #(#MenuItem + #activeHelpKey: #editFlipHorizontal #label: 'Flip - Horizontal' + #itemValue: #doFlipHorizontal #translateLabel: true - #value: #doFlipHorizontal - #activeHelpKey: #editFlipHorizontal ) #(#MenuItem #label: '-' ) #(#MenuItem + #activeHelpKey: #editResize #label: 'Resize...' + #itemValue: #doResizeImage #translateLabel: true - #value: #doResizeImage - #activeHelpKey: #editResize ) #(#MenuItem + #activeHelpKey: #editMagnifyImage #label: 'Magnify...' + #itemValue: #doMagnifyImage #translateLabel: true - #value: #doMagnifyImage - #activeHelpKey: #editMagnifyImage ) #(#MenuItem + #activeHelpKey: #editMagnifyImage #label: 'Magnify By...' + #itemValue: #doMagnifyImageBy #translateLabel: true - #value: #doMagnifyImageBy - #activeHelpKey: #editMagnifyImage ) #(#MenuItem + #activeHelpKey: #editRotate #label: 'Rotate...' + #itemValue: #doRotateImage #translateLabel: true - #value: #doRotateImage - #activeHelpKey: #editRotate ) #(#MenuItem #label: '-' ) #(#MenuItem #label: 'Invert' + #itemValue: #doNegativeImage #translateLabel: true - #value: #doNegativeImage ) #(#MenuItem #label: '-' @@ -1442,46 +1655,46 @@ #(#Menu #( #(#MenuItem + #activeHelpKey: #cropAll #label: 'All' + #itemValue: #doCropAll #translateLabel: true - #value: #doCropAll - #activeHelpKey: #cropAll ) #(#MenuItem #label: '-' ) #(#MenuItem + #activeHelpKey: #cropLeft #label: 'Left' + #itemValue: #doCropLeft #translateLabel: true - #value: #doCropLeft - #activeHelpKey: #cropLeft ) #(#MenuItem + #activeHelpKey: #cropRight #label: 'Right' + #itemValue: #doCropRight #translateLabel: true - #value: #doCropRight - #activeHelpKey: #cropRight ) #(#MenuItem + #activeHelpKey: #cropTop #label: 'Top' + #itemValue: #doCropTop #translateLabel: true - #value: #doCropTop - #activeHelpKey: #cropTop ) #(#MenuItem + #activeHelpKey: #cropBottom #label: 'Bottom' + #itemValue: #doCropBottom #translateLabel: true - #value: #doCropBottom - #activeHelpKey: #cropBottom ) #(#MenuItem #label: '-' ) #(#MenuItem + #activeHelpKey: #cropManual #label: 'Manual...' + #itemValue: #doCropManual #translateLabel: true - #value: #doCropManual - #activeHelpKey: #cropManual ) ) nil @@ -1489,16 +1702,16 @@ ) ) #(#MenuItem + #activeHelpKey: #shiftManual #label: 'Shift...' + #itemValue: #doShiftManual #translateLabel: true - #value: #doShiftManual - #activeHelpKey: #shiftManual ) #(#MenuItem + #activeHelpKey: #uncropManual #label: 'Ungrop (Add Border)...' + #itemValue: #doUnCropManual #translateLabel: true - #value: #doUnCropManual - #activeHelpKey: #uncropManual ) ) nil @@ -1506,45 +1719,51 @@ ) ) #(#MenuItem + #enabled: #imageIsLoaded + #label: 'Mode' + #translateLabel: true + #submenuChannel: #modeMenu + ) + #(#MenuItem + #activeHelpKey: #colorMap + #enabled: #imageIsLoaded #label: 'ColorMap' #translateLabel: true - #activeHelpKey: #colorMap - #enabled: #imageIsLoaded #submenu: #(#Menu #( #(#MenuItem + #activeHelpKey: #colorMap8 #label: '8-Plane' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap8 #argument: '8-plane' #choice: #colorMapMode #choiceValue: '8-plane' ) #(#MenuItem + #activeHelpKey: #colorMap4 #label: '4-Plane' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap4 #argument: '4-plane' #choice: #colorMapMode #choiceValue: '4-plane' ) #(#MenuItem + #activeHelpKey: #colorMap2 #label: '2-Plane' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap2 #argument: '2-plane' #choice: #colorMapMode #choiceValue: '2-plane' ) #(#MenuItem + #activeHelpKey: #colorMap1 #label: '1-Plane' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap1 #argument: '1-plane' #choice: #colorMapMode #choiceValue: '1-plane' @@ -1553,37 +1772,37 @@ #label: '-' ) #(#MenuItem + #activeHelpKey: #colorMap8M #label: '8-Plane + Mask' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap8M #argument: '8-plane + mask' #choice: #colorMapMode #choiceValue: '8-plane + mask' ) #(#MenuItem + #activeHelpKey: #colorMap4M #label: '4-Plane + Mask' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap4M #argument: '4-plane + mask' #choice: #colorMapMode #choiceValue: '4-plane + mask' ) #(#MenuItem + #activeHelpKey: #colorMap2M #label: '2-Plane + Mask' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap2M #argument: '2-plane + mask' #choice: #colorMapMode #choiceValue: '2-plane + mask' ) #(#MenuItem + #activeHelpKey: #colorMap1M #label: '1-Plane + Mask' + #itemValue: #colorMapMode: #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap1M #argument: '1-plane + mask' #choice: #colorMapMode #choiceValue: '1-plane + mask' @@ -1592,67 +1811,67 @@ #label: '-' ) #(#MenuItem - #label: 'Compress Colormap' - #translateLabel: true - #value: #compressColorMap #activeHelpKey: #compressColormap #enabled: #hasColormap + #label: 'Compress Colormap' + #itemValue: #compressColorMap + #translateLabel: true ) #(#MenuItem + #enabled: #hasColormap #label: 'Sort Colormap' + #itemValue: #sortColorMap #translateLabel: true - #value: #sortColorMap - #enabled: #hasColormap ) #(#MenuItem #label: 'Reduce Number of Colors...' + #itemValue: #reduceNumberOfColors #translateLabel: true - #value: #reduceNumberOfColors ) #(#MenuItem #label: '-' ) #(#MenuItem #label: 'Make GrayScale' + #itemValue: #makeGrayScale #translateLabel: true - #value: #makeGrayScale ) #(#MenuItem #label: 'Make Brighter' + #itemValue: #makeBrighter #translateLabel: true - #value: #makeBrighter ) #(#MenuItem #label: 'Make Darker' + #itemValue: #makeDarker #translateLabel: true - #value: #makeDarker ) #(#MenuItem #label: 'Make Inverse' + #itemValue: #makeInverse #translateLabel: true - #value: #makeInverse ) #(#MenuItem #label: '-' ) #(#MenuItem - #label: 'Copy Mask' - #translateLabel: true - #value: #copyMask #activeHelpKey: #copyMask #enabled: #hasMask + #label: 'Copy Mask' + #itemValue: #copyMask + #translateLabel: true ) #(#MenuItem - #label: 'Paste Mask' - #translateLabel: true - #value: #pasteMask #activeHelpKey: #pasteMask #enabled: #hasMask + #label: 'Paste Mask' + #itemValue: #pasteMask + #translateLabel: true ) #(#MenuItem #label: 'Clear Masked Pixels' + #itemValue: #clearMaskedPixels #translateLabel: true - #value: #clearMaskedPixels ) ) nil @@ -1666,10 +1885,10 @@ #(#Menu #( #(#MenuItem + #activeHelpKey: #settingsGridMagnification #label: 'Grid Magnification Limit...' + #itemValue: #doChangeGridMagnification #translateLabel: true - #value: #doChangeGridMagnification - #activeHelpKey: #settingsGridMagnification ) ) nil @@ -1677,16 +1896,16 @@ ) ) #(#MenuItem + #activeHelpKey: #history #label: 'History' #translateLabel: true - #activeHelpKey: #history #submenuChannel: #menuHistory ) #(#MenuItem + #activeHelpKey: #help #label: 'Help' #translateLabel: true #startGroup: #right - #activeHelpKey: #help #submenuChannel: #menuHelp ) ) @@ -1755,25 +1974,28 @@ #(#Menu #( #(#MenuItem + #activeHelpKey: #fileNewImage #label: 'newImage' + #itemValue: #doNewImage + #translateLabel: true #isButton: true - #value: #doNewImage - #activeHelpKey: #fileNewImage #labelImage: #(#ResourceRetriever #Icon #newIcon) ) #(#MenuItem + #activeHelpKey: #fileLoadFromClass #label: 'loadFromClass' + #itemValue: #doLoadFromClass + #translateLabel: true #isButton: true - #value: #doLoadFromClass - #activeHelpKey: #fileLoadFromClass #labelImage: #(#ResourceRetriever #Icon #loadIcon) ) #(#MenuItem - #label: 'saveMethod' - #isButton: true - #value: #doSaveMethod #activeHelpKey: #fileSaveMethod #enabled: #imageIsLoaded + #label: 'saveMethod' + #itemValue: #doSaveMethod + #translateLabel: true + #isButton: true #labelImage: #(#ResourceRetriever #Icon #saveIcon) ) #(#MenuItem @@ -1783,71 +2005,106 @@ #label: '' ) #(#MenuItem - #label: '' + #activeHelpKey: #editUndo + #enabled: #valueOfCanUndo + #label: 'Undo' + #itemValue: #doUndo + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #undo16x16Icon2) ) + ) + nil + nil + ) +! + +modeMenu + "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:ImageEditor andSelector:#modeMenu + (Menu new fromLiteralArrayEncoding:(ImageEditor modeMenu)) startUp + " + + + + ^ + #(#Menu + #( #(#MenuItem - #label: '' - ) - #(#MenuItem - #label: 'Point' #activeHelpKey: #drawModePoint #enabled: #imageIsLoaded + #label: 'Point' + #translateLabel: true #choice: #editMode #choiceValue: #point ) #(#MenuItem - #label: 'Rect' #activeHelpKey: #drawModeBox #enabled: #imageIsLoaded + #label: 'Rect' + #translateLabel: true #choice: #editMode #choiceValue: #box ) #(#MenuItem - #label: 'FillRect' #activeHelpKey: #drawModeFilledBox #enabled: #imageIsLoaded + #label: 'FillRect' + #translateLabel: true #choice: #editMode #choiceValue: #filledBox ) #(#MenuItem - #label: 'Fill' #activeHelpKey: #drawModeFill #enabled: #imageIsLoaded + #label: 'Fill' + #translateLabel: true #choice: #editMode #choiceValue: #fill ) #(#MenuItem - #label: 'Copy' #activeHelpKey: #drawModeCopy #enabled: #imageIsLoaded + #label: 'Copy' + #translateLabel: true #choice: #editMode #choiceValue: #copy ) #(#MenuItem - #label: 'Paste' #activeHelpKey: #drawModePaste #enabled: #imageIsLoaded + #label: 'Paste' + #translateLabel: true #choice: #editMode #choiceValue: #paste ) #(#MenuItem - #label: 'Paste Under' #activeHelpKey: #drawModePasteUnder #enabled: #imageIsLoaded + #label: 'Paste Under' + #translateLabel: true #choice: #editMode #choiceValue: #pasteUnder ) #(#MenuItem - #label: 'Paste With Mask' #activeHelpKey: #drawModePasteWithMask #enabled: #imageIsLoaded + #label: 'Paste With Mask' + #translateLabel: true #choice: #editMode #choiceValue: #pasteWithMask ) #(#MenuItem - #label: 'Special' #activeHelpKey: #drawModeSpecial #enabled: #imageIsLoaded + #label: 'Special' + #translateLabel: true #choice: #editMode #choiceValue: #specialOperation ) @@ -1883,6 +2140,119 @@ nil nil ) +! + +toolsMenuToolbar + "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:ImageEditor andSelector:#toolsMenuToolbar + (Menu new fromLiteralArrayEncoding:(ImageEditor toolsMenuToolbar)) startUp + " + + + + ^ + #(#Menu + #( + #(#MenuItem + #activeHelpKey: #drawModePoint + #enabled: #imageIsLoaded + #label: 'Point' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #pointIcon) + #choice: #editMode + #choiceValue: #point + ) + #(#MenuItem + #activeHelpKey: #drawModeBox + #enabled: #imageIsLoaded + #label: 'Rect' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #rectIcon) + #choice: #editMode + #choiceValue: #box + ) + #(#MenuItem + #activeHelpKey: #drawModeFilledBox + #enabled: #imageIsLoaded + #label: 'FillRect' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #fillRectIcon) + #choice: #editMode + #choiceValue: #filledBox + ) + #(#MenuItem + #activeHelpKey: #drawModeFill + #enabled: #imageIsLoaded + #label: 'Fill' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #fillIcon) + #choice: #editMode + #choiceValue: #fill + ) + #(#MenuItem + #activeHelpKey: #drawModeCopy + #enabled: #imageIsLoaded + #label: 'Copy' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #copyIcon) + #choice: #editMode + #choiceValue: #copy + ) + #(#MenuItem + #activeHelpKey: #drawModePaste + #enabled: #imageIsLoaded + #label: 'Paste' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #pasteIcon) + #choice: #editMode + #choiceValue: #paste + ) + #(#MenuItem + #activeHelpKey: #drawModePasteUnder + #enabled: #imageIsLoaded + #label: 'Paste Under' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #pasteUnderIcon) + #choice: #editMode + #choiceValue: #pasteUnder + ) + #(#MenuItem + #activeHelpKey: #drawModePasteWithMask + #enabled: #imageIsLoaded + #label: 'Paste With Mask' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #pasteWithMaskIcon) + #choice: #editMode + #choiceValue: #pasteWithMask + ) + #(#MenuItem + #activeHelpKey: #drawModeSpecial + #enabled: #imageIsLoaded + #label: 'Special' + #translateLabel: true + #isButton: true + #labelImage: #(#ResourceRetriever #ImageEditor #specialIcon) + #choice: #editMode + #choiceValue: #specialOperation + ) + ) + nil + nil + ) ! ! !ImageEditor methodsFor:'accessing'! @@ -3714,14 +4084,13 @@ doNewImage "opens a dialog with choices of size and color map for creating a new image" - |aspects width height cMap imageClass image szString| - + |aspects width height cMapString cMap imageClass image szString| aspects := IdentityDictionary new at:#listOfSizes put: self class listOfDefaultSizes asValue; at:#listOfColorMaps put: self class listOfColorMaps keys asSortedCollection asValue; - at:#selectionOfSize put: self class listOfDefaultSizes first copy asValue; - at:#selectionOfColorMap put: self class listOfColorMaps keys asSortedCollection first asValue; + at:#selectionOfSize put: (LastSizeString ? self class listOfDefaultSizes first copy) asValue; + at:#selectionOfColorMap put: (LastColormapMode ? self class listOfColorMaps keys asSortedCollection first) asValue; yourself. (self openDialogInterface:#dialogSpecForNewImage withBindings:aspects) @@ -3730,10 +4099,14 @@ width := 128 min: (Integer readFromString: (szString upTo: $x) onError:[24]). height := 128 min: (Integer readFromString: (szString copy reverse upTo: $x) reverse onError:[24]). + cMapString := (aspects at:#selectionOfColorMap) value. cMap := (self class listOfColorMaps at: (colorMapMode value: (aspects at:#selectionOfColorMap) value) value). imageClass := Image implementorForDepth: ((cMap size log: 2) asInteger). image := imageClass width: width height: height fromArray: (ByteArray new: width*height). + LastSizeString := szString. + LastColormapMode := cMapString. + (colorMapMode value endsWith: 'mask') ifTrue: [