Merge delegated_gc_hg
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sun, 18 May 2014 09:45:08 +0100
branchdelegated_gc_hg
changeset 5085 52e9f87d45c8
parent 5084 2abb3106db37 (current diff)
parent 5024 d000eac18ce2 (diff)
child 5128 787b617a99e5
Merge
EditTextView.st
ListView.st
TextCollector.st
TextView.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.cvsignore	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,26 @@
+notes
+makefile
+libwidg.*
+libwidgInit.c
+.listOfSTfiles
+.dependencies
+*.H
+*.STH
+*.exp
+*.obj
+*.dll
+*.lib
+*.ilk
+*.pdb
+*.sbr
+*.c
+*.sc
+*.xc
+*.vcw
+*.wsp
+so_locations
+classList.stc
+objbc
+objvc
+objmingw
+*.@@@
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.dir.info	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,40 @@
+This directory contains the high level view (widget) stuff. 
+They are compiled by stc into the library 'libwidg' to be
+linked to your application and to smalltalk itself.
+
+All user interface elements (Scrollbar, TextViews, Button etc.)
+are found here. 
+Use of these classes requires that 'libview' is also loaded into 
+the system.
+
+Depending on the configuration and capabilities of your Operating-
+System, the resulting classlibrary is either:
+
+        libwidg.a      - an archive
+
+        libwidg.obj    - a prelinked object library
+
+        libwidg.so     - a shared object
+
+the library includes init code (libwidg_Init) for all of its components.
+
+
+Things you can do here:
+
+    make                compile all classes, producing libwidg
+
+    make objs           compile all required object files
+
+    make install        compile all and install in DESTLIBDIR
+
+    make qinstall       only install - assumes binaries are up-to-date 
+
+    make check          syntax check only over all .st files
+
+    make <file>.o       compile <file>.st to object-file
+
+    make <file>.c       compile <file>.st to c intermediate
+
+    make clean
+
+    make clobber
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,63 @@
+05f7f6bafbe48af8296af4ab50bb88e6609d3623 expecco_1_6_0
+05f7f6bafbe48af8296af4ab50bb88e6609d3623 expecco_1_6_0rc5
+113dd960ba11c7726fefc25854b72b4fefb9fee2 expeccoNET_1_4_0rc1
+113dd960ba11c7726fefc25854b72b4fefb9fee2 expecco_1_7_0rc3
+188f2e0613bccfb990c7d753de68eba3ed0f72c8 expecco_2_6_0
+19af20c4f04f49e24c5a4af916cc04a5225f8fc8 rel5_2_1
+27c8f14cfd04540bb85529e8381b49ff118bafe7 accessability
+2d10ecc7efb00e010206a0f1e435845c12d46c5d expecco_2_1_0
+2df69a526f068f2603fe4edb7ad6300fb9080c65 stable_expecco_sel
+31726ebce2a4e533336ff29706a6528e4366508e rel5_2_2
+39a735c9a1c76a989358873bda3074aa7bcab462 rel2_10_8_6_last2
+3adf62fcc7602956c83d86c63b6c2de609792318 expeccoNET_1_6_8_0
+4330a66d0b46d3fd6cba013901790053feab460e rel4_1_3_1
+44daffb1b034ef25af4198a43aaa9159c400f41a expeccoNET_1_6_0_0
+4b259f24542127d08f5f2211ead7b9f469173da4 expecco_1_8_0rc1
+4f515003b90ab06aba71507242615df77fd57bd8 expecco_2_0_0
+4f515003b90ab06aba71507242615df77fd57bd8 expecco_2_0_0_0
+52bbc9fb566ae44f550dd92da4a647fb53ebf779 rel5_4_6
+53a2a6433f59465923c58d0caf1f9a9a4cdd06a3 expecco_1_9_1_iX
+5c09bb2dadef8ef37ea0699e5bd70a1377097fa9 rel3_4_3_1
+5efbe0080492f5951a3fc691445a496ace653e47 rel5_1_4
+609e20a4a234af6aacb4fc5453bec37b83b36a11 rel3_4_1_1
+609e20a4a234af6aacb4fc5453bec37b83b36a11 rel3_4_1_2
+6bf83a2af71f7bf69764789b24a7922ae0f4c543 expeccoNET_1_5_0rc1
+6bf83a2af71f7bf69764789b24a7922ae0f4c543 expecco_1_8_2rc1
+6bf93f2065875a09cd4c757a01c5c2aed123c3db expecco_1_0_3
+747bf54f6fc92d630ad6871e7770f965e2b36911 rel3_6_1
+753b5270dc2ab32a79be79a4e86c8a336813c58c expecco_1_3_4
+76de19bec54bfa87495522090f7c89f854136bba rel4_1_7
+76de19bec54bfa87495522090f7c89f854136bba release
+7800380ae0dcefa3e4aad5e68d5b19f3e9701063 expecco_1_5_0
+898390ffc60246027be514e931aaa1f684dec8a3 balla
+966270358179746c40739275e562ec92e93112cb expecco_1_7_0b1
+966270358179746c40739275e562ec92e93112cb expecco_1_7_0b2
+966270358179746c40739275e562ec92e93112cb expecco_1_7_0b3
+966270358179746c40739275e562ec92e93112cb expecco_1_7_0rc1
+9f306f7859b9c09782888c7a3515f57b88253e55 expecco_2_4_0
+9f306f7859b9c09782888c7a3515f57b88253e55 expecco_2_4_1
+a75287739271620704d5452641fb06c9bce5b563 rel3-1-2
+af086dc8b816fd77e2b90e7855dbb9e7a884757e expeccoNET_1_5_1rc1
+b3920857d44806f4b7678a43e3842fe40563eec3 rel2_10_8_6_last_before_vmData_change
+b96bee8dc658f8bfdc3777841445595d744cc24e expeccoNET_1_8_0_0
+bab08fbc4cef9ffc5b008baac9c82138c5dbd7a9 expeccoNET_1_7_0_0
+bd0991615b0468aca194ec20b8f3c52def830e1c rel5_2_8
+c029273f7660c154afde2ff90fcf6be31fe458b1 expecco_2_5_1
+cf1c977cab9dbedc39ddf7c286acf503d08a4aac rel5_1_3
+cf1c977cab9dbedc39ddf7c286acf503d08a4aac stx_513
+d0125b7808bdd51c84b6eafcbfa0221b5bc7cc5b expecco_2_7_0
+d3a015f9d5ddf94a37982030fe98a23928ca92e7 expecco_1_7_2rc1
+d8b26708a2ba1c60042231312ec672b0ae8495de stx_6_2_2
+d9c981028573ecaf81d8dd7f9efe14471713cd7b stable
+dd4c2dace4f5f7e23959ba725936f5e459aeed4f expecco_1_7_1rc1
+dd4c2dace4f5f7e23959ba725936f5e459aeed4f expecco_1_7_1rc2
+dd4c2dace4f5f7e23959ba725936f5e459aeed4f expecco_1_7_1rc3
+dd4c2dace4f5f7e23959ba725936f5e459aeed4f expecco_1_7_1rc4
+e2520b170fbb5c41cfe44c2724a7aa7a2bb5fcc3 rel2_10_8_5
+e6f058434ea1899ef7e0a99f1a38c1aef6556875 rel3_6_4
+ea4d356f3f96359e6a17e0f60cea8e1b1f5a7732 expecco_2_5_0
+eb4576429ff066a0e588b449ea653e12c987bcdf expecco_1_7_0rc5
+eb4576429ff066a0e588b449ea653e12c987bcdf expecco_1_7_0rc8
+fd5ed2731571e921c7109a1e515cd228e615da36 expecco_2_6_1
+fe4542d78ad8c0c17412e515e0fe8772531c9132 expecco_2_2_0
+fe4542d78ad8c0c17412e515e0fe8772531c9132 expecco_2_2_5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ArrowButton.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1068 @@
+"
+ COPYRIGHT (c) 1993 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Button subclass:#ArrowButton
+	instanceVariableNames:'arrowStyle direction'
+	classVariableNames:'DownArrowForm UpArrowForm LeftArrowForm RightArrowForm
+		DisabledDownArrowForm DisabledUpArrowForm DisabledLeftArrowForm
+		DisabledRightArrowForm ActiveDownArrowForm ActiveUpArrowForm
+		ActiveLeftArrowForm ActiveRightArrowForm EnteredDownArrowForm
+		EnteredUpArrowForm EnteredLeftArrowForm EnteredRightArrowForm
+		CachedStyle DefaultArrowStyle DefaultBackgroundColor
+		DefaultForegroundColor DefaultActiveBackgroundColor
+		DefaultActiveForegroundColor DefaultEnteredBackgroundColor
+		DefaultEnteredForegroundColor DefaultDisabledForegroundColor
+		DefaultArrowButtonActiveLevel DefaultArrowButtonPassiveLevel'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!ArrowButton class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1993 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    ArrowButtons display an arrow as their label; they are mainly
+    used for scrollbars, but can be useful on their own in some applications.
+    Beside the contents, their default behavior is to perform their action
+    when pressed - not (as is the default for normal buttons) when released.
+
+    Indivdual ArrowButtons can be created by sending one of:
+            ArrowButton upIn:aView /downIn: / leftIn: or rightIn:
+    passing the parent view as argument.
+
+    See examples.
+
+
+    [styleSheet parameters:]
+
+        arrowButtonStyle            <Symbol>        the style of the button;
+                                                    #motif, #st80 or nil (default)
+        arrowButtonForegroundColor  <nil | Color>   foregroundColor 
+        arrowButtonBackgroundColor  <nil | Color>   backgroundColor 
+
+        arrowButtonActiveForegroundColor            foregroundColor when pressed
+        arrowButtonActiveBackgroundColor            backgroundColor when pressed
+
+        arrowButtonEnteredForegroundColor           foregroundColor when mouse pointer entered
+        arrowButtonEnteredBackgroundColor           backgroundColor when mouse pointer entered
+
+    [author:]
+        Claus Gittinger
+
+    [See also:]
+         Button  Toggle CheckToggle CheckBox
+         ScrollBar
+
+"
+!
+
+examples 
+"
+    example1:
+                                                                        [exBegin]
+        |v p b1 b2 b3 b4|
+
+        v := StandardSystemView extent:200@200.
+        p := HorizontalPanelView origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:v.
+        b1 := ArrowButton upIn:p.
+        b2 := ArrowButton downIn:p.
+        b3 := ArrowButton leftIn:p.
+        b4 := ArrowButton rightIn:p.
+
+        b1 action:['whatEver you like here ...'].
+        b2 action:['whatEver you like here ...'].
+        b3 action:['whatEver you like here ...'].
+        b4 action:['whatEver you like here ...'].
+
+        v open
+                                                                        [exEnd]
+
+
+    example2:
+                                                                        [exBegin]
+        |v p b1 b2 b3 b4|
+
+        v := StandardSystemView extent:200@200.
+        p := HorizontalPanelView origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:v.
+        b1 := (ArrowButton upIn:p) extent:30@30.
+        b2 := (ArrowButton downIn:p) extent:30@30.
+        b3 := (ArrowButton leftIn:p) extent:30@30.
+        b4 := (ArrowButton rightIn:p) extent:30@30.
+
+        b1 action:['whatEver you like here ...'].
+        b2 action:['whatEver you like here ...'].
+        b3 action:['whatEver you like here ...'].
+        b4 action:['whatEver you like here ...'].
+
+        v open
+                                                                        [exEnd]
+
+
+    example3:
+                                                                        [exBegin]
+        |v p b1 b2 b3 b4|
+
+        v := StandardSystemView extent:200@200.
+        p := View origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:v.
+        b1 := (ArrowButton upIn:p) origin:(0.33 @ 0.0) corner:(0.67 @ 0.33).
+        b3 := (ArrowButton leftIn:p) origin:(0.0 @ 0.33) corner:(0.33 @ 0.67).
+        b4 := (ArrowButton rightIn:p) origin:(0.67 @ 0.33) corner:(1.0 @ 0.67).
+        b2 := (ArrowButton downIn:p) origin:(0.33 @ 0.67) corner:(0.67 @ 1.0).
+
+        b1 action:['whatEver you like here ...'].
+        b2 action:['whatEver you like here ...'].
+        b3 action:['whatEver you like here ...'].
+        b4 action:['whatEver you like here ...'].
+
+        v open
+                                                                        [exEnd]
+
+
+    example4 (not good coding style, to explicitely use a particular style,
+              just a demonstration how it looks ..):
+                                                                        [exBegin]
+        |v p b1 b2 b3 b4 oldStyle|
+
+        oldStyle := View defaultStyle.
+        View defaultStyle:#motif.
+
+        v := StandardSystemView extent:100@100.
+        p := View origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:v.
+
+        b1 := (ArrowButton upIn:p) origin:(0.33 @ 0.0) corner:(0.67 @ 0.33).
+        b3 := (ArrowButton leftIn:p) origin:(0.0 @ 0.33) corner:(0.33 @ 0.67).
+        b4 := (ArrowButton rightIn:p) origin:(0.67 @ 0.33) corner:(1.0 @ 0.67).
+        b2 := (ArrowButton downIn:p) origin:(0.33 @ 0.67) corner:(0.67 @ 1.0).
+
+        b1 action:['whatEver you like here ...'].
+        b2 action:['whatEver you like here ...'].
+        b3 action:['whatEver you like here ...'].
+        b4 action:['whatEver you like here ...'].
+
+        View defaultStyle:oldStyle.
+        v open
+                                                                        [exEnd]
+"
+! !
+
+!ArrowButton class methodsFor:'instance creation'!
+
+downIn:aView
+    "create and return a new down-button in aView"
+
+    ^ (super in:aView) direction:#down
+
+    "Modified: 22.1.1997 / 11:59:08 / cg"
+!
+
+leftIn:aView
+    "create and return a new left-button in aView"
+
+    ^ (super in:aView) direction:#left
+
+    "Modified: 22.1.1997 / 11:59:14 / cg"
+!
+
+new
+    "return a new arrowButton - direction defaults to #up"
+
+    ^ super new direction:#up
+!
+
+rightIn:aView
+    "create and return a new right-button in aView"
+
+    ^ (super in:aView) direction:#right
+
+    "Modified: 22.1.1997 / 11:59:21 / cg"
+!
+
+upIn:aView
+    "create and return a new up-button in aView"
+
+    ^ (super in:aView) direction:#up
+
+    "Modified: 22.1.1997 / 11:59:27 / cg"
+! !
+
+!ArrowButton class methodsFor:'defaults'!
+
+DownArrowForm
+
+    ^DownArrowForm
+!
+
+LeftArrowForm
+
+    ^LeftArrowForm
+!
+
+RightArrowForm
+
+    ^RightArrowForm
+!
+
+UpArrowForm
+
+    ^UpArrowForm
+!
+
+downArrowButtonForm:styleSymbol on:aDevice
+    "return the form used for the scrollDown Button"
+
+    ^ self arrowButtonFormForStyle:styleSymbol direction:#down on:aDevice
+!
+
+leftArrowButtonForm:styleSymbol on:aDevice
+    "return the form used for the scrollLeft Button"
+
+    ^ self arrowButtonFormForStyle:styleSymbol direction:#left on:aDevice
+!
+
+rightArrowButtonForm:styleSymbol on:aDevice
+    "return the form used for the scrollRight Button"
+
+    ^ self arrowButtonFormForStyle:styleSymbol direction:#right on:aDevice
+!
+
+upArrowButtonForm:styleSymbol on:aDevice
+    "return the form used for the scrollUp Button"
+
+    ^ self arrowButtonFormForStyle:styleSymbol direction:#up on:aDevice
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'arrowButton.style' 
+                       #'arrowButton.activeLevel' #'arrowButton.passiveLevel'
+                       #'arrowButton.backgroundColor' #'arrowButton.foregroundColor'
+                       #'arrowButton.activeBackgroundColor' #'arrowButton.activeForegroundColor'
+                       #'arrowButton.enteredBackgroundColor' #'arrowButton.enteredForegroundColor'
+                       #'arrowButton.disabledForegroundColor' 
+
+                       #'arrowButton.downForm'     #'arrowButton.upForm'
+                       #'arrowButton.leftForm'     #'arrowButton.rightForm'
+
+                       #'arrowButton.disabledDownForm'     #'arrowButton.disabledUpForm'
+                       #'arrowButton.disabledLeftForm'     #'arrowButton.disabledRightForm'
+
+                       #'arrowButton.activeDownForm'     #'arrowButton.activeUpForm'
+                       #'arrowButton.activeLeftForm'     #'arrowButton.activeRightForm'
+
+                       #'arrowButton.enteredDownForm'     #'arrowButton.enteredUpForm'
+                       #'arrowButton.enteredLeftForm'     #'arrowButton.enteredRightForm'
+                )>
+
+    |styleSheet defaultScreen|
+
+    styleSheet := StyleSheet.
+
+    DefaultArrowStyle := styleSheet at:#'arrowButton.style' default:styleSheet name.
+    DefaultArrowStyle := DefaultArrowStyle asSymbol.
+
+    DefaultArrowButtonActiveLevel := styleSheet at:#'arrowButton.activeLevel'.
+    DefaultArrowButtonPassiveLevel := styleSheet at:#'arrowButton.passiveLevel'.
+
+    DefaultBackgroundColor := styleSheet colorAt:#'arrowButton.backgroundColor'.
+    DefaultForegroundColor := styleSheet colorAt:#'arrowButton.foregroundColor'.
+    DefaultActiveBackgroundColor := styleSheet colorAt:#'arrowButton.activeBackgroundColor'.
+    DefaultActiveForegroundColor := styleSheet colorAt:#'arrowButton.activeForegroundColor'.
+    DefaultEnteredBackgroundColor := styleSheet colorAt:#'arrowButton.enteredBackgroundColor'.
+    DefaultEnteredForegroundColor := styleSheet colorAt:#'arrowButton.enteredForegroundColor'.
+    DefaultDisabledForegroundColor := styleSheet colorAt:#'arrowButton.disabledForegroundColor'.
+
+    DownArrowForm  := styleSheet at:#'arrowButton.downForm'.
+    UpArrowForm    := styleSheet at:#'arrowButton.upForm'.
+    LeftArrowForm  := styleSheet at:#'arrowButton.leftForm'.
+    RightArrowForm := styleSheet at:#'arrowButton.rightForm'.
+
+    ActiveDownArrowForm := styleSheet at:#'arrowButton.activeDownForm'.
+    ActiveUpArrowForm := styleSheet at:#'arrowButton.activeUpForm'.
+    ActiveLeftArrowForm := styleSheet at:#'arrowButton.activeLeftForm'.
+    ActiveRightArrowForm := styleSheet at:#'arrowButton.activeRightForm'.
+
+    EnteredDownArrowForm := styleSheet at:#'arrowButton.enteredDownForm'.
+    EnteredUpArrowForm := styleSheet at:#'arrowButton.enteredUpForm'.
+    EnteredLeftArrowForm := styleSheet at:#'arrowButton.enteredLeftForm'.
+    EnteredRightArrowForm := styleSheet at:#'arrowButton.enteredRightForm'.
+
+    defaultScreen := Screen default.
+    DownArrowForm := UpArrowForm := LeftArrowForm := RightArrowForm := nil.
+    DownArrowForm := self arrowButtonFormForStyle:DefaultArrowStyle direction:#down on:defaultScreen.
+    UpArrowForm := self arrowButtonFormForStyle:DefaultArrowStyle direction:#up on:defaultScreen.
+    LeftArrowForm := self arrowButtonFormForStyle:DefaultArrowStyle direction:#left on:defaultScreen.
+    RightArrowForm := self arrowButtonFormForStyle:DefaultArrowStyle direction:#right on:defaultScreen.
+
+    DisabledDownArrowForm := DisabledUpArrowForm := DisabledLeftArrowForm := DisabledRightArrowForm := nil.
+    DisabledDownArrowForm := self disabledArrowButtonFormForStyle:DefaultArrowStyle direction:#down on:defaultScreen.
+    DisabledUpArrowForm := self disabledArrowButtonFormForStyle:DefaultArrowStyle direction:#up on:defaultScreen.
+    DisabledLeftArrowForm := self disabledArrowButtonFormForStyle:DefaultArrowStyle direction:#left on:defaultScreen.
+    DisabledRightArrowForm := self disabledArrowButtonFormForStyle:DefaultArrowStyle direction:#right on:defaultScreen.
+
+    ActiveDownArrowForm := ActiveUpArrowForm := ActiveLeftArrowForm := ActiveRightArrowForm := nil.
+    ActiveDownArrowForm := self activeArrowButtonFormForStyle:DefaultArrowStyle direction:#down on:defaultScreen.
+    ActiveUpArrowForm := self activeArrowButtonFormForStyle:DefaultArrowStyle direction:#up on:defaultScreen.
+    ActiveLeftArrowForm := self activeArrowButtonFormForStyle:DefaultArrowStyle direction:#left on:defaultScreen.
+    ActiveRightArrowForm := self activeArrowButtonFormForStyle:DefaultArrowStyle direction:#right on:defaultScreen.
+
+    EnteredDownArrowForm := EnteredUpArrowForm := EnteredLeftArrowForm := EnteredRightArrowForm := nil.
+    EnteredDownArrowForm := self enteredArrowButtonFormForStyle:DefaultArrowStyle direction:#down on:defaultScreen.
+    EnteredUpArrowForm := self enteredArrowButtonFormForStyle:DefaultArrowStyle direction:#up on:defaultScreen.
+    EnteredLeftArrowForm := self enteredArrowButtonFormForStyle:DefaultArrowStyle direction:#left on:defaultScreen.
+    EnteredRightArrowForm := self enteredArrowButtonFormForStyle:DefaultArrowStyle direction:#right on:defaultScreen.
+
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: 31.8.1995 / 03:01:14 / claus"
+    "Modified: 20.10.1997 / 13:50:57 / cg"
+! !
+
+!ArrowButton class methodsFor:'defaults-helpers'!
+
+activeArrowButtonFormForStyle:styleSymbol direction:direction on:aDevice
+    <resource: #style (
+                       #'arrowButton.activeDownForm'
+                       #'arrowButton.activeUpForm'
+                       #'arrowButton.activeLeftForm'
+                       #'arrowButton.activeRightForm'   
+
+                       #'arrowButton.activeDownFormFile'
+                       #'arrowButton.activeUpFormFile'
+                       #'arrowButton.activeLeftFormFile'
+                       #'arrowButton.activeRightFormFile'   
+                      )>
+
+    |formVariableName styleSheetName styleSheetFileName|
+
+    direction = #left ifTrue:[
+        formVariableName := #ActiveLeftArrowForm.
+        styleSheetName := #'arrowButton.activeLeftForm'.
+        styleSheetFileName := #'arrowButton.activeLeftFormFile'.
+    ].
+    direction = #right ifTrue:[
+        formVariableName := #ActiveRightArrowForm.
+        styleSheetName := #'arrowButton.activeRightForm'.
+        styleSheetFileName := #'arrowButton.activeRightFormFile'.
+    ].
+    direction = #up ifTrue:[
+        formVariableName := #ActiveUpArrowForm.
+        styleSheetName := #'arrowButton.activeUpForm'.
+        styleSheetFileName := #'arrowButton.activeUpFormFile'.
+    ].
+    direction = #down ifTrue:[
+        formVariableName := #ActiveDownArrowForm.
+        styleSheetName := #'arrowButton.activeDownForm'.
+        styleSheetFileName := #'arrowButton.activeDownFormFile'.
+    ].
+    formVariableName isNil ifTrue:[
+        self error:'invalid direction' mayProceed:true.
+        ^ nil
+    ].
+
+    ^ self
+        arrowButtonFormForStyle:styleSymbol 
+        nameKey:styleSheetName fileNameKey:styleSheetFileName variableName:formVariableName 
+        direction:direction useDefault:false on:aDevice
+!
+
+arrowButtonFormForStyle:styleSymbol direction:direction on:aDevice
+    "return the form used for the scrollDown Button"
+
+    <resource: #style (
+                       #'arrowButton.downForm'
+                       #'arrowButton.upForm'
+                       #'arrowButton.leftForm'
+                       #'arrowButton.rightForm'   
+
+                       #'arrowButton.downFormFile'
+                       #'arrowButton.upFormFile'
+                       #'arrowButton.leftFormFile'
+                       #'arrowButton.rightFormFile'   
+                      )>
+
+    |formVariableName styleSheetName styleSheetFileName|
+
+    direction = #left ifTrue:[
+        formVariableName := #LeftArrowForm.
+        styleSheetName := #'arrowButton.leftForm'.
+        styleSheetFileName := #'arrowButton.leftFormFile'.
+    ].
+    direction = #right ifTrue:[
+        formVariableName := #RightArrowForm.
+        styleSheetName := #'arrowButton.rightForm'.
+        styleSheetFileName := #'arrowButton.rightFormFile'.
+    ].
+    direction = #up ifTrue:[
+        formVariableName := #UpArrowForm.
+        styleSheetName := #'arrowButton.upForm'.
+        styleSheetFileName := #'arrowButton.upFormFile'.
+    ].
+    direction = #down ifTrue:[
+        formVariableName := #DownArrowForm.
+        styleSheetName := #'arrowButton.downForm'.
+        styleSheetFileName := #'arrowButton.downFormFile'.
+    ].
+    formVariableName isNil ifTrue:[
+        self error:'invalid direction' mayProceed:true.
+        ^ nil
+    ].
+
+    ^ self
+        arrowButtonFormForStyle:styleSymbol 
+        nameKey:styleSheetName fileNameKey:styleSheetFileName variableName:formVariableName 
+        direction:direction useDefault:true on:aDevice
+!
+
+arrowButtonFormForStyle:styleSymbol nameKey:styleSheetName fileNameKey:styleSheetFileName variableName:formVariableName direction:direction useDefault:useDefault on:aDevice
+    "return the form used for the scrollDown Button"
+
+    |form formFile|
+
+    "
+     use cached form, if device is appropriate
+    "
+    CachedStyle ~~ styleSymbol ifTrue:[
+        self classVarAt:formVariableName put:nil
+    ].
+
+    form := self classVarAt:formVariableName.
+    form notNil ifTrue:[
+        form == #nil ifTrue:[
+            ^ nil
+        ].
+        form device == aDevice ifTrue:[
+            ^ form
+        ].
+    ].
+
+    form := self styleSheet at:styleSheetName default:nil.
+    form isNil ifTrue:[
+        formFile := StyleSheet at:styleSheetFileName default:nil.
+        formFile notNil ifTrue:[
+            form := Smalltalk imageFromFileNamed:formFile forClass:self.
+            form isNil ifTrue:[
+                'ArrowButton [info]: no bitmapFile: ' infoPrint. formFile infoPrintCR.
+            ] ifFalse:[
+                form := form onDevice:aDevice.
+            ]
+        ].
+
+        "
+         form to use as a fallback, if no bitmap file is present
+         (actually not really needed - just to show something useful, in case of a bad installation)
+        "
+        (form isNil and:[useDefault]) ifTrue:[
+            form := self defaultArrowButtonFormForStyle:styleSymbol direction:direction onDevice:aDevice.
+            form isNil ifTrue:[^ nil].
+        ].
+    ].
+
+    "
+     remember form for next use
+    "
+    CachedStyle := styleSymbol.
+    self classVarAt:formVariableName put:(form ? #nil).
+
+    ^ form
+
+    "Modified: / 26.10.1997 / 17:01:54 / cg"
+!
+
+defaultArrowButtonFormForStyle:styleSymbol direction:direction onDevice:aDevice
+    "return the default form used for the scrollUp Button 
+     (if no styleSheet value is defined, and no form can be constructed)"
+
+    styleSymbol = #st80 ifTrue:[
+        ^ self defaultST80ArrowButtonFormForDirection:direction onDevice:aDevice.
+    ].
+
+    self styleSheet isWindowsStyle ifTrue:[
+        ^ self defaultWIN32ArrowButtonFormForDirection:direction onDevice:aDevice
+    ].
+
+    ^ self defaultMACArrowButtonFormForDirection:direction onDevice:aDevice
+
+    "
+     self defaultUpArrowButtonForm
+    "
+
+    "Modified: / 26.3.1999 / 15:19:11 / cg"
+!
+
+defaultMACArrowButtonFormForDirection:direction onDevice:aDevice
+    <resource: #programImage>
+
+    |w h bits|
+
+    w := h := 16.
+    direction == #left ifTrue:[
+        bits := #[
+                 2r00000000 2r00000000
+                 2r00000001 2r10000000
+                 2r00000010 2r10000000
+                 2r00000100 2r10000000
+                 2r00001000 2r11111110
+                 2r00010000 2r00000010
+                 2r00100000 2r00000010
+                 2r01000000 2r00000010
+                 2r01000000 2r00000010
+                 2r00100000 2r00000010
+                 2r00010000 2r00000010
+                 2r00001000 2r11111110
+                 2r00000100 2r10000000
+                 2r00000010 2r10000000
+                 2r00000001 2r10000000
+                 2r00000000 2r00000000
+                ]
+    ].
+    direction == #right ifTrue:[
+        bits := #[
+                 2r00000000 2r00000000
+                 2r00000001 2r10000000
+                 2r00000001 2r01000000
+                 2r00000001 2r00100000
+                 2r01111111 2r00010000
+                 2r01000000 2r00001000
+                 2r01000000 2r00000100
+                 2r01000000 2r00000010
+                 2r01000000 2r00000010
+                 2r01000000 2r00000100
+                 2r01000000 2r00001000
+                 2r01111111 2r00010000
+                 2r00000001 2r00100000
+                 2r00000001 2r01000000
+                 2r00000001 2r10000000
+                 2r00000000 2r00000000
+                ]
+    ].
+    direction == #up ifTrue:[
+        bits := #[
+                 2r00000000 2r00000000
+                 2r00000001 2r10000000
+                 2r00000010 2r01000000
+                 2r00000100 2r00100000
+                 2r00001000 2r00010000
+                 2r00010000 2r00001000
+                 2r00100000 2r00000100
+                 2r01000000 2r00000010
+                 2r01111000 2r00011110
+                 2r00001000 2r00010000
+                 2r00001000 2r00010000
+                 2r00001000 2r00010000
+                 2r00001000 2r00010000
+                 2r00001000 2r00010000
+                 2r00001111 2r11110000
+                 2r00000000 2r00000000
+                ].
+    ].
+    direction == #down ifTrue:[
+        bits := #[
+                  2r00000000 2r00000000
+                  2r00001111 2r11110000
+                  2r00001000 2r00010000
+                  2r00001000 2r00010000
+                  2r00001000 2r00010000
+                  2r00001000 2r00010000
+                  2r00001000 2r00010000
+                  2r01111000 2r00011110
+                  2r01000000 2r00000010
+                  2r00100000 2r00000100
+                  2r00010000 2r00001000
+                  2r00001000 2r00010000
+                  2r00000100 2r00100000
+                  2r00000010 2r01000000
+                  2r00000001 2r10000000
+                  2r00000000 2r00000000
+                ]
+    ].
+    ^ Form 
+        width:w height:h 
+        fromArray:bits onDevice:aDevice
+!
+
+defaultST80ArrowButtonFormForDirection:direction onDevice:aDevice
+    <resource: #programImage>
+
+    |form|
+
+    form := Form width:9 height:9 depth:1 onDevice:aDevice.
+    form isNil ifTrue:[^ nil].
+    form clear.
+    form lineWidth:2.
+    form capStyle:#round.
+    form paint:(Color colorId:1).
+    direction == #left ifTrue:[
+        form displayLineFromX:6 y:0 toX:2 y:4.
+        form displayLineFromX:2 y:4 toX:6 y:8.
+    ] ifFalse:[
+        direction == #down ifTrue:[
+            form displayLineFromX:0 y:2 toX:4 y:6.
+            form displayLineFromX:4 y:6 toX:8 y:2.
+        ] ifFalse:[
+            direction == #right ifTrue:[
+                form displayLineFromX:2 y:0 toX:6 y:4.
+                form displayLineFromX:6 y:4 toX:2 y:8.
+            ] ifFalse:[
+                form displayLineFromX:0 y:6 toX:4 y:2.
+                form displayLineFromX:4 y:2 toX:8 y:6.
+            ]
+        ]
+    ].
+    form beImmediateForm.
+    ^ form
+!
+
+defaultWIN32ArrowButtonFormForDirection:direction onDevice:aDevice
+    <resource: #programImage>
+
+    |w h bits|
+
+    w := h := 11.
+    direction == #left ifTrue:[
+        bits := #[
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000010 2r00000000
+                 2r00000110 2r00000000
+                 2r00001110 2r00000000
+                 2r00011110 2r00000000
+                 2r00001110 2r00000000
+                 2r00000110 2r00000000
+                 2r00000010 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                ]
+    ].
+    direction == #right ifTrue:[
+        bits := #[
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00001000 2r00000000
+                 2r00001100 2r00000000
+                 2r00001110 2r00000000
+                 2r00001111 2r00000000
+                 2r00001110 2r00000000
+                 2r00001100 2r00000000
+                 2r00001000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                ]
+    ].
+    direction == #up ifTrue:[
+        bits := #[
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000100 2r00000000
+                 2r00001110 2r00000000
+                 2r00011111 2r00000000
+                 2r00111111 2r10000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                ]
+    ].
+    direction == #down ifTrue:[
+        bits := #[
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00111111 2r10000000
+                 2r00011111 2r00000000
+                 2r00001110 2r00000000
+                 2r00000100 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                 2r00000000 2r00000000
+                ]
+    ].
+    ^ Form 
+        width:w height:h 
+        fromArray:bits onDevice:aDevice
+
+    "
+     self defaultWIN32ArrowButtonFormForDirection:#down onDevice:Screen current
+    "
+!
+
+disabledArrowButtonFormForStyle:styleSymbol direction:direction on:aDevice
+    <resource: #style (
+                       #'arrowButton.disabledDownForm'
+                       #'arrowButton.disabledUpForm'
+                       #'arrowButton.disabledLeftForm'
+                       #'arrowButton.disabledRightForm'   
+
+                       #'arrowButton.disabledDownFormFile'
+                       #'arrowButton.disabledUpFormFile'
+                       #'arrowButton.disabledLeftFormFile'
+                       #'arrowButton.disabledRightFormFile'   
+                      )>
+
+    |formVariableName styleSheetName styleSheetFileName|
+
+    direction = #left ifTrue:[
+        formVariableName := #DisabledLeftArrowForm.
+        styleSheetName := #'arrowButton.disabledLeftForm'.
+        styleSheetFileName := #'arrowButton.disabledLeftFormFile'.
+    ].
+    direction = #right ifTrue:[
+        formVariableName := #DisabledRightArrowForm.
+        styleSheetName := #'arrowButton.disabledRightForm'.
+        styleSheetFileName := #'arrowButton.disabledRightFormFile'.
+    ].
+    direction = #up ifTrue:[
+        formVariableName := #DisabledUpArrowForm.
+        styleSheetName := #'arrowButton.disabledUpForm'.
+        styleSheetFileName := #'arrowButton.disabledUpFormFile'.
+    ].
+    direction = #down ifTrue:[
+        formVariableName := #DisabledDownArrowForm.
+        styleSheetName := #'arrowButton.disabledDownForm'.
+        styleSheetFileName := #'arrowButton.disabledDownFormFile'.
+    ].
+    formVariableName isNil ifTrue:[
+        self error:'invalid direction' mayProceed:true.
+        ^ nil
+    ].
+
+    ^ self
+        arrowButtonFormForStyle:styleSymbol 
+        nameKey:styleSheetName fileNameKey:styleSheetFileName variableName:formVariableName 
+        direction:direction useDefault:false on:aDevice
+!
+
+enteredArrowButtonFormForStyle:styleSymbol direction:direction on:aDevice
+    <resource: #style (
+                       #'arrowButton.enteredDownForm'
+                       #'arrowButton.enteredUpForm'
+                       #'arrowButton.enteredLeftForm'
+                       #'arrowButton.enteredRightForm'   
+
+                       #'arrowButton.enteredDownFormFile'
+                       #'arrowButton.enteredUpFormFile'
+                       #'arrowButton.enteredLeftFormFile'
+                       #'arrowButton.enteredRightFormFile'   
+                      )>
+
+    |formVariableName styleSheetName styleSheetFileName|
+
+    direction = #left ifTrue:[
+        formVariableName := #EnteredLeftArrowForm.
+        styleSheetName := #'arrowButton.enteredLeftForm'.
+        styleSheetFileName := #'arrowButton.enteredLeftFormFile'.
+    ].
+    direction = #right ifTrue:[
+        formVariableName := #EnteredRightArrowForm.
+        styleSheetName := #'arrowButton.enteredRightForm'.
+        styleSheetFileName := #'arrowButton.enteredRightFormFile'.
+    ].
+    direction = #up ifTrue:[
+        formVariableName := #EnteredUpArrowForm.
+        styleSheetName := #'arrowButton.enteredUpForm'.
+        styleSheetFileName := #'arrowButton.enteredUpFormFile'.
+    ].
+    direction = #down ifTrue:[
+        formVariableName := #EnteredDownArrowForm.
+        styleSheetName := #'arrowButton.enteredDownForm'.
+        styleSheetFileName := #'arrowButton.enteredDownFormFile'.
+    ].
+    formVariableName isNil ifTrue:[
+        self error:'invalid direction' mayProceed:true.
+        ^ nil
+    ].
+
+    ^ self
+        arrowButtonFormForStyle:styleSymbol 
+        nameKey:styleSheetName fileNameKey:styleSheetFileName variableName:formVariableName 
+        direction:direction useDefault:false on:aDevice
+! !
+
+!ArrowButton methodsFor:'accessing'!
+
+direction
+    "return the buttons direction - a symbol"
+
+    ^ direction
+!
+
+direction:aDirectionSymbol
+    "create and return a new arrow button in aView"
+
+    |logo activeLogo enteredLogo disabledLogo graphicsDevice|
+
+    graphicsDevice := self graphicsDevice.
+
+    logo := self class 
+                arrowButtonFormForStyle:arrowStyle 
+                direction:aDirectionSymbol 
+                on:graphicsDevice.
+
+    activeLogo := self class
+                activeArrowButtonFormForStyle:arrowStyle 
+                direction:aDirectionSymbol 
+                on:graphicsDevice.
+
+    disabledLogo := self class
+                disabledArrowButtonFormForStyle:arrowStyle 
+                direction:aDirectionSymbol 
+                on:graphicsDevice.
+
+    enteredLogo := self class
+                enteredArrowButtonFormForStyle:arrowStyle 
+                direction:aDirectionSymbol 
+                on:graphicsDevice.
+
+    direction := aDirectionSymbol.
+    enteredLogo notNil ifTrue:[
+        self enteredLogo:enteredLogo.
+        self activeLogo:activeLogo.
+    ].
+    disabledLogo notNil ifTrue:[
+        self disabledLogo:disabledLogo.
+    ].
+    activeLogo notNil ifTrue:[
+        self activeLogo:activeLogo.
+        self passiveLogo:logo.
+    ].
+    self label:logo.
+
+
+    "Modified: 24.2.1997 / 21:19:59 / cg"
+! !
+
+!ArrowButton methodsFor:'accessing-look'!
+
+allViewBackground:something if:condition
+    (condition value:self) ifTrue:[
+        super viewBackground:something.
+        bgColor := activeBgColor := enteredBgColor := something
+    ]
+!
+
+viewBackground:something
+    super viewBackground:something.
+    bgColor := activeBgColor := enteredBgColor := something
+! !
+
+!ArrowButton methodsFor:'focus handling'!
+
+wantsFocusWithButtonPress
+    "no, do not catch the keyboard focus on button click"
+
+    ^ false
+
+
+
+
+! !
+
+!ArrowButton methodsFor:'initialization'!
+
+initStyle
+    "setup viewStyle specifics"
+
+    |graphicsDevice|
+
+    super initStyle.
+    graphicsDevice := self graphicsDevice.
+
+    DefaultBackgroundColor notNil ifTrue:[
+        bgColor := DefaultBackgroundColor onDevice:graphicsDevice
+    ].
+    DefaultForegroundColor notNil ifTrue:[
+        fgColor := DefaultForegroundColor onDevice:graphicsDevice
+    ].
+    DefaultActiveForegroundColor notNil ifTrue:[
+        activeFgColor := DefaultActiveForegroundColor onDevice:graphicsDevice
+    ].
+    DefaultActiveBackgroundColor notNil ifTrue:[
+        activeBgColor := DefaultActiveBackgroundColor onDevice:graphicsDevice
+    ].
+    DefaultEnteredForegroundColor notNil ifTrue:[
+        enteredFgColor := DefaultEnteredForegroundColor onDevice:graphicsDevice
+    ].
+    DefaultEnteredBackgroundColor notNil ifTrue:[
+        enteredBgColor := DefaultEnteredBackgroundColor onDevice:graphicsDevice
+    ].
+    DefaultDisabledForegroundColor notNil ifTrue:[
+        disabledFgColor := DefaultDisabledForegroundColor onDevice:graphicsDevice
+    ].
+
+    arrowStyle := DefaultArrowStyle.
+
+    DefaultArrowButtonActiveLevel notNil ifTrue:[onLevel := DefaultArrowButtonActiveLevel].
+    DefaultArrowButtonPassiveLevel notNil ifTrue:[offLevel := DefaultArrowButtonPassiveLevel].
+    offLevel ~~ level ifTrue:[self level:offLevel].
+
+"/    "
+"/     special treatment for motif arrows 
+"/     - they do not really fit into the general (bitmap) scheme ...
+"/    "
+"/    arrowStyle == #motif ifTrue:[
+"/        onLevel := 0.
+"/        offLevel := 0.
+"/        self level:0.
+"/    ]
+
+    "Modified: 22.1.1997 / 11:57:00 / cg"
+!
+
+initialize
+
+    super initialize.
+    hSpace := vSpace := 0.
+    controller beTriggerOnDown.
+
+    "Modified: 6.3.1997 / 20:58:49 / cg"
+! !
+
+!ArrowButton methodsFor:'redrawing'!
+
+drawWith:fg and:bg
+    "this is a q&d hack for motif ..."
+
+    |topLeft botRight isString orgX orgY r colors|
+
+    arrowStyle ~~ #motif ifTrue:[
+        ^ super drawWith:fg and:bg.
+    ].
+
+    "
+     the code below does a lot of bitmap drawing, but allows
+     to 3D-ify any logo (it draws it displaced by some pixels
+     to the upper left in one-color and displaced to the 
+     lower right in the other color). It should be rewritten to
+     cache the result for later drawing operations.
+    "
+    logo notNil ifTrue:[
+        self paint:bg.
+        self fillRectangleX:0 y:0 width:width height:height.
+
+        shadowColor := shadowColor onDevice:self graphicsDevice.
+        lightColor := lightColor onDevice:self graphicsDevice.
+
+        controller pressed ifTrue:[
+            topLeft := shadowColor.
+            botRight := lightColor
+        ] ifFalse:[
+            topLeft := lightColor.
+            botRight := shadowColor
+        ].
+
+        isString := logo isString.
+
+        isString ifFalse:[
+            logo depth ~~ 1 ifTrue:[
+                "/ allow for deep logos (for motif)
+                "/ one catch: if the view background is a complex pixmap
+                "/ we cannot use this as colorMap entry.
+                "/ therefore, compute the average colors and take these
+                "/ (this looks ok for buttons ...)
+
+                r := (0@0 corner:10@10).
+
+                colors := (Array with:(bg averageColorIn:r)
+                                       with:(topLeft averageColorIn:r)
+                                       with:(botRight averageColorIn:r)
+                                       with:(fg averageColorIn:r)).
+                colors ~= logo colorMap ifTrue:[
+                    logo release.
+                    logo colorMap:colors.
+                ].
+                logo photometric:#palette.
+                logo := logo onDevice:self graphicsDevice.
+
+                self displayForm:logo x:labelOriginX  y:labelOriginY.
+                ^ self
+            ].
+            logo := logo onDevice:self graphicsDevice.
+            orgX := labelOriginX.
+            orgY := labelOriginY.
+        ] ifTrue:[
+            orgY := height - gc font height // 2 + gc font ascent.
+            orgX := width - labelOriginX // 4 - 1.
+        ].
+
+        self paint:topLeft.
+        #(-1 0 -1) with:#(-1 -1 0) do:[:dX :dY |
+            |x y|
+
+            x := orgX + dX.
+            y := orgY + dY.
+
+            isString ifTrue:[
+                self displayString:logo x:x y:y.
+            ] ifFalse:[
+                self displayForm:logo x:x y:y.
+            ]    
+        ].
+
+        self paint:botRight.
+        #(1 1 0) with:#(0 1 1) do:[:dX :dY |
+            |x y|
+
+            x := orgX + dX.                   
+            y := orgY + dY.
+
+            isString ifTrue:[
+                self displayString:logo x:x y:y.
+            ] ifFalse:[
+                self displayForm:logo x:x y:y.
+            ]    
+        ].
+
+        "
+         finally, the form itself
+        "
+        self paint:fg.
+        isString ifTrue:[
+            self displayString:logo x:orgX y:orgY.
+        ] ifFalse:[
+            self displayForm:logo x:orgX y:orgY.
+        ]    
+    ]
+
+    "Modified: 31.8.1995 / 03:03:12 / claus"
+    "Modified: 19.3.1997 / 17:11:22 / cg"
+! !
+
+!ArrowButton class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ArrowButton.st,v 1.76 2014-03-19 10:04:37 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/ArrowButton.st,v 1.76 2014-03-19 10:04:37 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Button.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,2332 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Label subclass:#Button
+	instanceVariableNames:'activeLogo passiveLogo disabledLogo focusLogo onLevel offLevel
+		disabledFgColor disabledEtchedFgColor activeFgColor activeBgColor
+		enteredFgColor enteredBgColor isReturnButton shadowForm lightForm
+		formColor formShadowColor formLightColor edgeStyle
+		halfShadowColor halfLightColor defaultable enterLevel leaveLevel
+		enteredLogo'
+	classVariableNames:'ReturnForm ReturnLightForm ReturnShadowForm DefaultActiveLevel
+		DefaultPassiveLevel DefaultEdgeStyle DefaultBorderWidth
+		DefaultForegroundColor DefaultBackgroundColor
+		DefaultDisabledForegroundColor DefaultDisabledBackgroundColor
+		DefaultDisabledEtchedForegroundColor
+		DefaultEnteredForegroundColor DefaultEnteredBackgroundColor
+		DefaultActiveForegroundColor DefaultActiveBackgroundColor
+		DefaultReturnButtonHasImage DefaultReturnButtonHasBorder
+		DefaultShadowColor DefaultLightColor DefaultHalfShadowColor
+		DefaultHalfLightColor DefaultFocusHighlightStyle'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!Button class methodsFor:'documentation'!
+
+actionBlocksVersusModelChanges 
+"
+    You may ask yourself, why ST/X supports two different ways
+    to trigger a buttons action (also true for sliders, selectionInListViews,
+    toggles etc.) and when to use which mechanism.
+
+    There are two reasons:
+	1) history - historically, ST/X used only actionBlocks
+	   Basically, these provide the most general functionality
+	   (you can of course send change-messages from those blocks)
+
+	   Change-message notification was added later, to make porting
+	   of existing applications easier.
+
+	2) for many (simple) applications, it is often easier, to simply
+	   define an action block. This is especially true, if the button
+	   triggers some action (such as ok-/abort-buttons) and does NOT
+	   change some models internal value.
+	   (other smalltalks provide extra adapter-models for this,
+	    in which you can set actionBlocks in much the same way).
+
+    In general:
+	use model-change-messages, iff multiple views are possibly open
+	on the same domain model, and changes can occur from multiple
+	places. Or if a change has to be forwarded to multiple other objects
+	(possible not foreseen).
+
+	For simplicity, better use actionBlocks for trigger-like actions
+	(such as closing a view, ok/abort etc.) iff there is only a single
+	entity which is interested in that button press.
+"
+!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Buttons are Labels which do something when pressed/released.
+    Since they inherit from Label, read the documentation on Labels to 
+    see how color, layout, font, image or labelString are changed.
+
+    Buttons (and also instances of subclasses, such as toggles, checkToggles
+    and radioButtons) perform some action when pressed, and optionally when
+    released. Due to historic reasons, ST/X buttons support two mechanisms:
+
+    Actionblock operation:
+      the button has an actionBlock (actually, it has two: a pressAction and
+      a releaseAction) which is evaluated, when the button is pressed.
+      The user of a button can set these action blocks via the #action:,
+      #pressAction: or #releaseAction: messages.
+
+    Model-View interaction:
+      buttons with a model will send change-messages to the model and also react 
+      to changes in the model.
+      You have to define the buttons labelMessage and an aspectSymbol.
+      When changed, the model should send 'self changed:<aspect>' if it wants the
+      label to change and return a string from the labelSymbol-message.
+      By default, the labelMsg is nil, therefore no update of the label is done.
+      (this behavior is inherited from label, see documentation there)
+
+      When pressed, the button sends a changeMessage to the model.
+      If the changeMsg is for a one-argument message, the current
+      press-state is passed as argument (i.e. true if pressed, false if released).
+      By default, the change-Message is #value: (for ST-80 compatibility).
+
+        button model:aModel.
+        button aspect:aspectSymbol.
+        button change:changeSymbol.
+        button labelMessage:labelSymbol.
+
+        model sends #changed:aspectSymbol
+        ---> button will redraw its label from value returned by model>>labelSymbol
+
+        button changes state:
+        ---> button sends changeSymbol / changeSymbol:state to the model
+
+      By default (as inherited), the labelMsg is nil; therefore, buttons
+      do not try to aquire a new labelString from the model.
+      If you want this behavior, you must set labelMsg and aspectMsg
+      as appropriate.
+
+    labels
+      Originally, labels only had a label- and disabledLabel attributes (both
+      had to be explicitly set via setter methods).
+      Later the model- and labelChannel interfaces were added; model interface
+      for compatbility with other smalltalks, where a single multi-aspect model
+      might be used, the channels were added to support visualWorks style of multiple
+      single-aspect holders. This final version is also what the UIBuilder is working
+      against. The other mechanisms are still present, but disabled if a newer mechanism
+      is used (i.e. if a labelChannel has been given, the label and disabledLabel instvars
+      are ignored).
+      All of this is here to provide backward compatibility for existing customers
+      and st/x programs (which is a good thing to have, b.t.w).
+
+
+    See examples.
+
+
+    [Instance variables:]
+
+      activeLogo              <StringOrImage> logo to show when active (pressed)
+      passiveLogo             <StringOrImage> logo to show when passive (released)
+                                              default is nil for both, so the normal logo is used
+                                              (see superclass: Label)
+      onLevel                 <Integer>       level when pressed (3D only) (default: depends on style)
+      offLevel                <Integer>       level when released (3D only) (default: depends on style)
+      disabledFgColor         <Color>         color used to draw logo when disabled (default: depends on style)
+      activeFgColor           <Color>         color to draw logo when pressed (default: depends on style)
+      activeBgColor           <Color>         bg color when pressed (default: depends on style)
+      enteredFgColor          <Color>         fg color to draw logo when cursor entered (default: depends on style)
+      enteredBgColor          <Color>         bg color when cursor entered (default: depends on style)
+
+      isReturnButton          <Boolean>       true if this button is also activated by the
+                                              return key - if true, it will draw a return-bitmap 
+                                              in addition to the logo (default: false)
+
+      defaultable             <Boolean>       true, if this button can become a returnButton.
+                                              (computes its default extent differently)
+
+      shadowForm              <Form>          form to display in addition to buttons label (returnbutton only)
+      lightForm               <Form>          light part of shadowForm (returnbutton only)
+
+      formColor               <Color>         color to draw form with (returnbutton only)
+      formShadowColor         <Color>         color for shadowing the form (3D only & return)
+      formLightColor          <Color>         color for lighting the form (3D only)
+
+
+    [styleSheet parameters:]
+
+      buttonActiveLevel       <Integer>       level when on (ignored in 2D styles)
+      buttonPassiveLevel      <Integer>       level when off (ignored in 2D styles)
+      buttonBorderWidth       <Integer>       default borderwidth
+      buttonEdgeStyle         <Symbol>        style of edges (currently #soft or nil)
+      buttonFont              <Font>          font to use for textual labels
+      buttonForegroundColor   <Color>         color to draw foreground pixels (i.e. the string)
+      buttonBackgroundColor   <Color>         color to draw background pixels
+      buttonDisabledForegroundColor <Color>   same when disabled
+      buttonDisabledBackgroundColor <Color>   same when disabled
+      buttonEnteredForegroundColor  <Color>   same when mouse pointer is in
+      buttonEnteredBackgroundColor  <Color>   same when mouse pointer is in
+      buttonActiveForegroundColor   <Color>   same when button is active
+      buttonActiveBackgroundColor   <Color>   same when button is active
+      buttonShadowColor             <Color>   shadow color for edgaes (ignored in 2D styles)
+      buttonLightColor              <Color>   light color for edgaes (ignored in 2D styles)
+      buttonHalfShadowColor         <Color>   half shadow color; for soft edges only
+      buttonHalfLightColor          <Color>   half light color; for soft edges only
+
+      buttonReturnButtonHasImage    <Boolean> if true, return-buttons draw a return-key image
+      buttonReturnButtonHasBorder   <Boolean> if true, return-buttons show a border
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        Toggle CheckToggle CheckBox
+        Dialog
+        ValueHolder TriggerValue
+        Block
+"
+!
+
+examples 
+"
+    You dont have to normally care for all the internals 
+    (they allow many variations though). 
+    For buttons with a stringLabel, the typical use is:
+
+        b := Button label:'some logo' in:aView.
+        b action:[ .. things to do, when pressed ... ]
+
+    and for bitmap/image buttons its:
+
+        b := Button label:someImage in:aView.
+        b action:[ .. things to do, when pressed ... ]
+
+
+
+    Of course, you can also setup things the ST-80 way, in first
+    creating the button and later add it to some superview:
+
+        b := Button new.
+        b label:someImage.
+        b action:[ .. things to do, when pressed ... ]
+        ...
+        aSuperView add:b in:<frameRectangle>.
+
+
+    Although you can specify most of the look of a button,
+    you should use the defaults in most applications.
+    As you specify more things in your program, 
+    the styleSheet settings are more and more ignored.
+    Also, even though it might look fancy, colorful
+    button panels are usually not a good GUI design;
+    they will attract the users attention - possibly to things
+    which are not worth it.
+    Finally, if you use fancy colors, always think of those poor users
+    without color displays - the styleSheet allows those people to adjust things,
+    while hard-coded colors cannot be fixed without changing the code.
+
+    a simple button with default settings and no action:
+    (you may want to try it with different viewStyle settings in effect):
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button in:top.
+          b label:'hello'.
+
+          top open.
+                                                                        [exEnd]
+
+
+    give it some action (watch the transcript):
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button in:top.
+          b label:'hello'.
+          b action:[Transcript flash].
+
+          top open.
+                                                                        [exEnd]
+
+
+    there is also a combined instance creation message:
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button label:'hello' action:[Transcript flash] in:top.
+
+          top open.
+                                                                        [exEnd]
+
+
+    a return button
+    (in dialogs, you should setup things to have the return-key perform
+     the ok action, and mark the corresponding button as being a returnButton):
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button label:'hello' action:[Transcript flash] in:top.
+          b beReturnButton.
+          top open.
+                                                                        [exEnd]
+
+
+
+    multiple buttons in a panel:
+                                                                        [exBegin]
+          |top panel b1 b2 b3|
+
+          top := StandardSystemView new.
+          top extent:300@100.
+
+          panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+          b1 := Button label:'one'   in:panel.
+          b2 := Button label:'two'   in:panel.
+          b3 := Button label:'three' action:[Transcript flash] in:panel.
+
+          top open.
+                                                                        [exEnd]
+
+
+
+    enabling/disabling buttons via explicit messages:
+                                                                        [exBegin]
+          |top panel b1 b2 b3|
+
+          top := StandardSystemView new.
+          top extent:300@100.
+          panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+          b1 := Button label:'enable'  action:[b3 enable] in:panel.
+          b2 := Button label:'disable' action:[b3 disable] in:panel.
+          b3 := Button label:'flash'   action:[Transcript flash] in:panel.
+          top open.
+                                                                        [exEnd]
+
+
+
+    enabling/disabling buttons via implicit value change of a valueHolder:
+    The two views are only indirectly coupled (via the valueHolder);
+    not knowing about each other.
+                                                                        [exBegin]
+          |top panel ena t b1 b2 b3 check|
+
+          top := StandardSystemView new.
+          top extent:300@100.
+
+          panel := HorizontalPanelView origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:top.
+
+          ena := false asValue.
+
+          t := Toggle label:'enable' in:panel.
+          t model:ena.
+
+          b1 := Button label:'button1' in:panel.
+          b1 controller enableChannel:ena.
+
+          b2 := Button label:'button2' in:panel.
+          b2 controller enableChannel:ena.
+
+          b3 := Button label:'button3' in:panel.
+          b3 controller enableChannel:ena.
+
+          top open.
+
+          check := CheckBox model:ena.
+          check label:'also enable'.
+          check extent:(check preferredExtent + (5@5)).
+          check open
+                                                                        [exEnd]
+
+
+
+    changing colors:
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button label:'hello' in:top.
+          b action:[Transcript flash].
+          b activeForegroundColor:(Color white).
+          b activeBackgroundColor:(Color red).
+
+          top open.
+                                                                        [exEnd]
+
+
+    changing more colors:
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button label:'hello' in:top.
+          b action:[Transcript flash].
+          b enteredForegroundColor:(Color red).
+          b enteredBackgroundColor:(b backgroundColor).
+          b activeForegroundColor:(Color white).
+          b activeBackgroundColor:(Color red).
+
+          top open.
+                                                                        [exEnd]
+
+
+    button with an image and different colors:
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button in:top.
+          b label:(Image fromFile:'bitmaps/SBrowser.xbm').
+          b action:[Transcript flash].
+          b enteredForegroundColor:(Color green darkened).
+          b enteredBackgroundColor:(b backgroundColor).
+          b activeForegroundColor:(Color white).
+          b activeBackgroundColor:(Color red).
+
+          top open.
+                                                                        [exEnd]
+
+
+    changing the image when pressed:
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button in:top.
+          b passiveLogo:(Image fromFile:'bitmaps/SBrowser.xbm').
+          b activeLogo:(Image fromFile:'bitmaps/CBrowser.xbm').
+          b action:[Transcript flash].
+          b enteredForegroundColor:(Color red).
+          b enteredBackgroundColor:(b backgroundColor).
+          b activeForegroundColor:(Color white).
+          b activeBackgroundColor:(Color red).
+
+          top open.
+                                                                        [exEnd]
+
+
+    well, even that is possible (but you should NEVER do it):
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button in:top.
+          b passiveLogo:(Image fromFile:'../../goodies/bitmaps/xpmBitmaps/misc_tools/email.xpm').
+          b activeLogo:'start'.
+          b action:[Transcript flash].
+          b enteredForegroundColor:(Color red).
+          b enteredBackgroundColor:(b backgroundColor).
+          b activeForegroundColor:(Color white).
+          b activeBackgroundColor:(Color red).
+          top open.
+                                                                        [exEnd]
+
+
+    more playing with colors:
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button in:top.
+          b logo:(Image fromFile:'../../goodies/bitmaps/xbmBitmaps/TicTacToe.xbm').
+          b action:[Transcript flash].
+          b foregroundColor:(Color red:0 green:80 blue:20) darkened.
+          b backgroundColor:(Color grey:10).
+          b enteredForegroundColor:(Color red).
+          b activeForegroundColor:(Color red).
+          b activeBackgroundColor:(Color grey:50).
+          top open.
+                                                                        [exEnd]
+
+
+    fire on press (buttons in scrollbars do this, while normal buttons
+    fire on release).
+    To give the user a chance to change her mind
+    and leave the button without action, you should not change the default 
+    behavior and NOT use triggerOnDown-buttons in most applications:
+                                                                        [exBegin]
+          |top b|
+
+          top := StandardSystemView new.
+          top extent:100@100.
+
+          b := Button label:'hello' in:top.
+          b controller beTriggerOnDown.
+          b action:[Transcript flash].
+          top open.
+                                                                        [exEnd]
+
+
+    To implement fun buttons (for games, show-demos etc.), you can
+    access all internal parameters (and not take the viewStyle defaults)
+    as in:
+                                                                        [exBegin]
+          |b granite light shadow|
+
+          b := Button label:'a nice one ?'.
+          granite := Image fromFile:'bitmaps/granite_small.tiff'.
+          light := granite lightened.
+          shadow := granite darkened darkened.
+          b backgroundColor:granite.
+          b foregroundColor:Color white.
+          b shadowColor:shadow.
+          b lightColor:light.
+          b enteredBackgroundColor:light.
+          b enteredForegroundColor:Color black.
+          b activeLevel:-3; passiveLevel:5.
+          b extent:(200 @ 50).
+          b open
+                                                                         [exEnd]
+
+    However, in your application, you may want to read those bitmaps only once
+    during startup and cache them for later reuse in some class variable
+    (reading, lightning & darkening of images is a bit slow)
+
+
+    ST/X Buttons allow simulation of the ST-80 MVC way of interacting.
+    To do so, instead (or in addition) to defining actionBlocks, set the
+    buttons model to have this be informed (in addition):
+
+    Model-View interaction (ST-80 style):
+    (have a look at the models values in the inspector, as the toggles change)
+                                                                        [exBegin]
+        |bool1 bool2 b1 b2 panel top|
+
+        bool1 := ValueHolder newBoolean.
+        bool2 := ValueHolder newBoolean value:true.
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        panel := HorizontalPanelView 
+                  origin:0.0 @ 0.0 corner:1.0 @ 50 in:top.
+
+        b1 := Toggle label:'eat me' in:panel.
+        b1 model:bool1.
+
+        b2 := Toggle label:'drink me' in:panel.
+        b2 model:bool2.
+
+        top open.
+        bool1 inspect.
+        bool2 inspect.
+                                                                        [exEnd]
+
+
+    Using a PluggableAdaptor (ST-80 style):
+    (notice, that this is almost what ST/X buttons did originally,
+     therefore, you may want use actionBlocks right away ...)
+                                                                        [exBegin]
+          |adaptor1 adaptor2 b1 b2 panel top|
+
+          adaptor1 := PluggableAdaptor new 
+                            getBlock:[:m | false] 
+                            putBlock:[:m :v | Transcript showCR:'eat']
+                            updateBlock:nil.
+          adaptor2 := PluggableAdaptor new 
+                            getBlock:[:m | false] 
+                            putBlock:[:m :v | Transcript showCR:'drink']
+                            updateBlock:nil.
+
+          top := StandardSystemView new.
+          top extent:200@100.
+
+          panel := HorizontalPanelView 
+                    origin:0.0 @ 0.0 corner:1.0 @ 50 in:top.
+
+          b1 := Button label:'eat me' in:panel.
+          b1 model:adaptor1.
+
+          b2 := Button label:'drink me' in:panel.
+          b2 model:adaptor2.
+
+          top open.
+                                                                        [exEnd]
+
+
+    as a reminder, the corresponding ST/X setup is:
+                                                                        [exBegin]
+          |b1 b2 panel top|
+
+          top := StandardSystemView new.
+          top extent:200@100.
+
+          panel := HorizontalPanelView 
+                    origin:0.0 @ 0.0 corner:1.0 @ 50 in:top.
+
+          b1 := Button label:'eat me' in:panel.
+          b1 action:[Transcript showCR:'eat'].
+
+          b2 := Button label:'drink me' in:panel.
+          b2 action:[Transcript showCR:'drink'].
+
+          top open.
+                                                                        [exEnd]
+
+
+    accessing multiple aspects of a complex model
+    (using a plug here to simulate that model ...)
+    (Notice, the next example shall demonstrate multiple aspects;
+     for this kind of functionality, you'd better use actionBlocks in
+     real applications)
+                                                                        [exBegin]
+          |myModel b1 b2 panel top|
+
+          myModel := Plug new.
+          myModel respondTo:#grow with:[top extent:200@300].
+          myModel respondTo:#shrink with:[top extent:200@100].
+
+          top := StandardSystemView new.
+          top extent:200@100.
+
+          panel := HorizontalPanelView 
+                    origin:0.0 @ 0.0  
+                    corner:1.0 @ 50
+                    in:top.
+
+          b1 := Button label:'eat me' in:panel.
+          b1 model:myModel; change:#grow.
+
+          b2 := Button label:'drink me' in:panel.
+          b2 model:myModel; change:#shrink.
+
+          top open.
+                                                                        [exEnd]
+
+
+    aquiring the label from the model
+    (this functionality is inherited from Label)
+                                                                        [exBegin]
+          |myModel b1 b2 b3 panel top currentLabel|
+
+          currentLabel := 'foo'.
+
+          myModel := Plug new.
+          myModel respondTo:#getLabel with:[currentLabel].
+          myModel respondTo:#b0Pressed with:[].
+          myModel respondTo:#b1Pressed with:[currentLabel := 'bar'.
+                                             myModel changed:#labelAspect].
+          myModel respondTo:#b2Pressed with:[currentLabel := 'foo'.
+                                             myModel changed:#labelAspect].
+
+          top := StandardSystemView new.
+          top extent:300@100.
+
+          panel := HorizontalPanelView 
+                    origin:0.0 @ 0.0  
+                    corner:1.0 @ 50
+                    in:top.
+
+          b1 := Button label:'press me' in:panel.
+          b1 model:myModel; change:#b0Pressed; 
+             labelMessage:#getLabel; aspect:#labelAspect.
+
+          b2 := Button label:'press for bar' in:panel.
+          b2 model:myModel; change:#b1Pressed.
+
+          b3 := Button label:'press for foo' in:panel.
+          b3 model:myModel; change:#b2Pressed.
+
+          top open.
+                                                                        [exEnd]
+
+
+    the same, using actionBlocks:
+    (notice, that we must disable changeMessages from the first button).
+                                                                        [exBegin]
+          |myModel b1 b2 b3 panel top currentLabel|
+
+          currentLabel := 'foo'.
+
+          myModel := Plug new.
+          myModel respondTo:#getLabel with:[currentLabel].
+
+          top := StandardSystemView new.
+          top extent:300@100.
+
+          panel := HorizontalPanelView origin:0.0 @ 0.0 corner:1.0 @ 50 in:top.
+
+          b1 := Button label:'press me' in:panel.
+          b1 model:myModel; action:[Transcript showCR:'pressed']; 
+             labelMessage:#getLabel; aspect:#labelAspect; change:nil.
+
+          b2 := Button label:'press for bar' in:panel.
+          b2 action:[currentLabel := 'bar'. myModel changed:#labelAspect].
+
+          b3 := Button label:'press for foo' in:panel.
+          b3 action:[currentLabel := 'foo'. myModel changed:#labelAspect].
+
+          top open.
+                                                                        [exEnd]
+
+
+    the same, using a labelChannel:
+                                                                        [exBegin]
+          |b1 b2 b3 panel top labelHolder|
+
+          labelHolder := 'press me' asValue.
+
+          top := StandardSystemView new.
+          top extent:350@100.
+
+          panel := HorizontalPanelView origin:0.0 @ 0.0 corner:1.0 @ 50 in:top.
+
+          b1 := Button label:'none yet ' in:panel.
+          b1 labelChannel:labelHolder.
+          b1 action:[Transcript showCR:'pressed'].
+          b1 sizeFixed:true.
+
+          b2 := Button label:'press for bar' in:panel.
+          b2 action:[ labelHolder value:'bar' ].
+
+          b3 := Button label:'press for foo' in:panel.
+          b3 action:[ labelHolder value:'foo' ].
+
+          top open.
+                                                                        [exEnd]
+
+    the same, using a labelChannel:
+                                                                        [exBegin]
+          |b|
+          b := Button new.
+          b label:'hello'.
+          b renderer:(ButtonRenderer new).
+          b open.
+                                                                        [exEnd]
+
+
+    see 'doc/coding-examples' and 'doc/misc/quick_view_intro.doc' 
+    for more variations on this theme.
+"
+! !
+
+!Button class methodsFor:'instance creation'!
+
+abortButton
+    "since abort-buttons are very common, here is a convenient
+     method to create one ..."
+
+    |aButton|
+
+    aButton := Button label:(self classResources string:'Cancel').
+    aButton name: 'abortButton'.
+    aButton cursor:(Cursor thumbsDown).
+    ^ aButton
+
+    "Modified: 20.2.1996 / 20:20:16 / cg"
+!
+
+abortButtonIn:aView
+    "since abort-buttons are very common, here is a convenient
+     method to create one ..."
+
+    |b|
+
+    aView addSubView:(b := self abortButton). 
+    ^ b
+!
+
+form:aForm action:aBlock in:aView
+    "create and return a new Button with icon-label, aForm
+     and pressAction, aBlock.  Button is placed into aView.
+     OBSOLETE: this is for backward compatibility; 
+     you can now pass an image or form in the #label:action:in: message."
+
+    <resource:#obsolete>
+
+    ^ ((self in:aView) form:aForm) action:aBlock
+!
+
+label:aLabel action:aBlock
+    "create and return a new Button with text-label, aString
+     and pressAction, aBlock."
+
+    ^ (self label:aLabel) action:aBlock
+!
+
+label:aLabel action:aBlock in:aView
+    "create and return a new Button with text-label, aString
+     and pressAction, aBlock.  Button is placed into aView."
+
+    ^ ((self in:aView) label:aLabel) action:aBlock
+!
+
+okButton
+    "since ok-buttons are very common, here is a convenient
+     method to create one ..."
+
+    |aButton|
+
+    aButton := Button label:(self classResources string:'OK').
+    aButton name: 'okButton'.
+    aButton cursor:(Cursor thumbsUp).
+    aButton beReturnButton.
+    ^ aButton
+!
+
+okButtonIn:aView
+    "since ok-buttons are very common, here is a convenient
+     method to create one ..."
+
+    |b|
+
+    aView addSubView:(b := self okButton).
+    ^ b
+! !
+
+!Button class methodsFor:'ST-80 instance creation'!
+
+switch
+    "ST-80 compatibility: create & return a new radioButton"
+
+    ^ RadioButton new.
+
+    "Created: 18.4.1997 / 20:19:09 / cg"
+    "Modified: 18.4.1997 / 20:28:10 / cg"
+!
+
+toggle
+    "ST-80 compatibility: create & return a new toggle."
+
+    ^ Toggle new
+
+    "
+     Button toggle label:'press me';
+		   model:((PluggableAdaptor on:(Point new))
+			    getSelector:#x putSelector:#x:)
+    "
+    "this is the same as"
+    "
+     Toggle new label:'press me';
+		model:((PluggableAdaptor on:(Point new))
+			    getSelector:#x putSelector:#x:)
+    "
+!
+
+trigger
+    "ST-80 compatibility: create & return a new button, which
+     triggers on press."
+
+    |b|
+
+    b := Button new.
+    b controller beTriggerOnDown.
+    ^ b
+
+    "Created: 18.4.1997 / 19:55:57 / cg"
+    "Modified: 18.4.1997 / 19:56:52 / cg"
+! !
+
+!Button class methodsFor:'defaults'!
+
+defaultDisabledForegroundColor
+    ^  DefaultDisabledForegroundColor
+
+    "Created: / 20.6.1998 / 15:18:28 / cg"
+!
+
+returnFormOn:aDevice
+    "return the form used for the return arrow in non-3D;
+     cache the one for Display for the next round."
+
+    |f|
+
+    (ReturnForm notNil and:[aDevice == ReturnForm graphicsDevice]) ifTrue:[
+        ^ ReturnForm
+    ].
+    f := Smalltalk imageFromFileNamed:'Return.xbm' inPackage:#'stx:libwidg'.
+    f notNil ifTrue:[
+        f := f onDevice:aDevice
+    ] ifFalse:[
+        f := Form width:24 height:14 fromArray:#[2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000011 2r11100000
+                                                 2r00000001 2r10000011 2r11100000
+                                                 2r00000011 2r10000011 2r11100000
+                                                 2r00000111 2r11111111 2r11100000
+                                                 2r00001111 2r11111111 2r11100000
+                                                 2r00011111 2r11111111 2r11100000
+                                                 2r00001111 2r11111111 2r11100000
+                                                 2r00000111 2r11111111 2r11100000
+                                                 2r00000011 2r10000000 2r00000000
+                                                 2r00000001 2r10000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000]
+                                              onDevice:aDevice
+    ].
+    ReturnForm := f.
+    ^ f
+
+    "Modified: / 3.11.1997 / 09:12:37 / cg"
+!
+
+returnLightFormOn:aDevice
+    "return the form used for the return arrow light pixels (3D only);
+     cache the one for Display for the next round"
+
+    |f|
+
+    (ReturnLightForm notNil and:[aDevice == ReturnLightForm graphicsDevice]) ifTrue:[
+        ^ ReturnLightForm
+    ].
+    f := Smalltalk imageFromFileNamed:'ReturnLight.xbm' inPackage:#'stx:libwidg'.
+    f notNil ifTrue:[
+        f := f onDevice:aDevice
+    ] ifFalse:[
+        f := Form width:24 height:14 fromArray:#[2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00100000
+                                                 2r00000000 2r00000000 2r00100000
+                                                 2r00000000 2r00000000 2r00100000
+                                                 2r00000000 2r00000000 2r00100000
+                                                 2r00000000 2r00000000 2r00100000
+                                                 2r00000000 2r00000000 2r00100000
+                                                 2r00000000 2r11111111 2r11100000
+                                                 2r00000000 2r10000000 2r00000000
+                                                 2r00000000 2r10000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000]
+                                              onDevice:aDevice
+    ].
+    ReturnLightForm := f.
+    ^ f
+
+    "Modified: / 3.11.1997 / 09:12:23 / cg"
+!
+
+returnShadowFormOn:aDevice
+    "return the form used for the return arrow shadow pixels (3D only);
+     cache the one for Display for the next round."
+
+    |f|
+
+    (ReturnShadowForm notNil and:[aDevice == ReturnShadowForm graphicsDevice]) ifTrue:[
+        ^ ReturnShadowForm
+    ].
+    f := Smalltalk imageFromFileNamed:'ReturnShadow.xbm' inPackage:#'stx:libwidg'.
+    f notNil ifTrue:[
+        f := f onDevice:aDevice
+    ] ifFalse:[
+        f := Form width:24 height:14 fromArray:#[2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000011 2r11100000
+                                                 2r00000001 2r10000010 2r00000000
+                                                 2r00000010 2r10000010 2r00000000
+                                                 2r00000100 2r11111110 2r00000000
+                                                 2r00001000 2r00000000 2r00000000
+                                                 2r00010000 2r00000000 2r00000000
+                                                 2r00001000 2r00000000 2r00000000
+                                                 2r00000100 2r00000000 2r00000000
+                                                 2r00000010 2r00000000 2r00000000
+                                                 2r00000001 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000
+                                                 2r00000000 2r00000000 2r00000000]
+                                              onDevice:aDevice
+    ].
+    ReturnShadowForm := f.
+    ^ f
+
+    "Modified: / 3.11.1997 / 09:12:11 / cg"
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'button.edgeStyle' #'button.font' #'button.borderWidth'
+                       #'button.activeLevel' #'button.passiveLevel'
+                       #'button.backgroundColor' #'button.foregroundColor'
+                       #'button.activeBackgroundColor' #'button.activeForegroundColor'
+                       #'button.enteredBackgroundColor' #'button.enteredForegroundColor'
+                       #'button.disabledForegroundColor' #'button.disabledBackgroundColor'
+                       #'button.disabledEtchedForegroundColor' 
+                       #'button.returnButtonHasImage'
+                       #'button.returnButtonHasBorder' 
+                       #'button.shadowColor' #'button.lightColor'
+                       #'button.halfShadowColor' #'button.halfLightColor'
+                       #'focusHighlightStyle')>
+
+    |defaultLevel|
+
+    StyleSheet is3D ifTrue:[
+        defaultLevel := 1.
+    ] ifFalse:[
+        defaultLevel := 0
+    ].
+    DefaultActiveLevel := StyleSheet at:#'button.activeLevel' default:(defaultLevel negated).
+    DefaultPassiveLevel := StyleSheet at:#'button.passiveLevel' default:defaultLevel.
+
+    DefaultEdgeStyle := StyleSheet at:#'button.edgeStyle'.
+    DefaultFont := StyleSheet fontAt:#'button.font'.
+    DefaultBorderWidth := StyleSheet at:#'button.borderWidth'.
+    DefaultForegroundColor := StyleSheet colorAt:#'button.foregroundColor'.
+    DefaultBackgroundColor := StyleSheet colorAt:#'button.backgroundColor'.
+    DefaultDisabledForegroundColor := StyleSheet colorAt:#'button.disabledForegroundColor' default:Color gray.
+    DefaultDisabledBackgroundColor := StyleSheet colorAt:#'button.disabledBackgroundColor'.
+    DefaultDisabledEtchedForegroundColor := StyleSheet colorAt:#'button.disabledEtchedForegroundColor'.
+    DefaultEnteredForegroundColor := StyleSheet colorAt:#'button.enteredForegroundColor'.
+    DefaultEnteredBackgroundColor := StyleSheet colorAt:#'button.enteredBackgroundColor'.
+    DefaultActiveForegroundColor := StyleSheet colorAt:#'button.activeForegroundColor'.
+    DefaultActiveBackgroundColor := StyleSheet colorAt:#'button.activeBackgroundColor'.
+    DefaultReturnButtonHasImage := StyleSheet at:#'button.returnButtonHasImage' default:true.
+    DefaultReturnButtonHasBorder := StyleSheet at:#'button.returnButtonHasBorder' default:false.
+    DefaultShadowColor := StyleSheet colorAt:#'button.shadowColor'.
+    DefaultLightColor := StyleSheet colorAt:#'button.lightColor'.
+    DefaultHalfShadowColor := StyleSheet colorAt:#'button.halfShadowColor'.
+    DefaultHalfLightColor := StyleSheet colorAt:#'button.halfLightColor'.
+    DefaultFocusHighlightStyle := StyleSheet at:#'focusHighlightStyle'.
+
+    "Modified: 20.10.1997 / 13:49:41 / cg"
+! !
+
+!Button methodsFor:'accessing-behavior'!
+
+action:aBlock
+    "convenient method: depending on the setting of controllers triggerOnDown flag,
+     either set the press-action and clear any release-action or
+     vice versa, set the release-action and clear the press-action."
+
+    controller isNil ifTrue:[
+        'Button [error]: no controller in #action' errorPrintCR.
+    ] ifFalse:[
+        controller action:aBlock
+    ].
+!
+
+autoRepeat
+    "turn on autorepeat OBSOLETE; use #autoRepeat:"
+
+    <resource:#obsolete>
+
+    controller autoRepeat
+
+    "Modified: 9.2.1996 / 22:42:37 / cg"
+!
+
+autoRepeat:aBoolean
+    "turn on/off autorepeat"
+
+    controller autoRepeat:aBoolean
+
+    "Modified: 5.9.1995 / 22:06:13 / claus"
+!
+
+enabled
+    "return true if the button is enabled"
+
+    ^ controller notNil and:[controller enabled]
+
+    "Created: 17.12.1995 / 16:12:26 / cg"
+!
+
+enabled:aBoolean
+    "enable/disable the button"
+
+    controller notNil ifTrue:[
+        controller enabled:aBoolean
+    ]
+
+    "Created: / 30.3.1999 / 14:50:58 / stefan"
+!
+
+pressAction
+    "return the pressAction; thats the block which gets evaluated
+     when the button is pressed (if non-nil)"
+
+    ^ controller pressAction
+!
+
+pressAction:aBlock
+    "define the action to be performed on press"
+
+    controller notNil ifTrue:[
+        controller pressAction:aBlock
+    ]
+!
+
+releaseAction
+    "return the releaseAction; thats the block which gets evaluated
+     when the button is relreased (if non-nil)"
+
+    ^ controller releaseAction
+!
+
+releaseAction:aBlock
+    "define the action to be performed on release"
+
+    controller notNil ifTrue:[
+        controller releaseAction:aBlock
+    ]
+! !
+
+!Button methodsFor:'accessing-channels'!
+
+enableChannel
+    "return a valueHolder for enable/disable"
+
+    controller isNil ifTrue:[^ nil].
+    ^ controller enableChannel
+
+    "Modified: / 13.8.1998 / 12:04:46 / cg"
+!
+
+enableChannel:aValueHolderForBoolean
+    "set the valueHolder used for enable/disable"
+
+    controller enableChannel:aValueHolderForBoolean
+!
+
+pressChannel
+    "return the pressChannel"
+
+    controller isNil ifTrue:[^ nil].
+    ^ controller pressChannel
+
+    "Modified: / 7.9.1995 / 18:16:20 / claus"
+    "Modified: / 13.8.1998 / 12:04:51 / cg"
+!
+
+pressChannel:aBlock
+    "set the pressChannel"
+
+    controller pressChannel:aBlock
+
+    "Modified: 7.9.1995 / 18:05:14 / claus"
+!
+
+releaseChannel
+    "return the releaseChannel"
+
+    controller isNil ifTrue:[^ nil].
+    ^ controller releaseChannel
+
+    "Modified: / 7.9.1995 / 18:15:24 / claus"
+    "Modified: / 13.8.1998 / 12:04:55 / cg"
+!
+
+releaseChannel:aBlock
+    "set the releaseChannel"
+
+    controller releaseChannel:aBlock
+
+    "Modified: 7.9.1995 / 18:05:21 / claus"
+! !
+
+!Button methodsFor:'accessing-look'!
+
+activeBackgroundColor
+    "return the background color to be used when pressed"
+
+    ^ activeBgColor
+!
+
+activeBackgroundColor:aColor
+    "set the background color to be used when pressed"
+
+    activeBgColor := aColor.
+    self redrawIfPressed
+!
+
+activeForegroundColor
+    "return the foreground color to be used when pressed"
+
+    ^ activeFgColor
+!
+
+activeForegroundColor:aColor
+    "set the foreground color to be used when pressed"
+
+    activeFgColor := aColor.
+    self redrawIfPressed
+!
+
+activeForegroundColor:fgColor backgroundColor:bgColor
+    "set both fg and bg colors to be used when pressed"
+
+    activeFgColor := fgColor.
+    activeBgColor := bgColor.
+    self redrawIfPressed
+!
+
+activeLevel
+    "return the level of the button when pressed"
+
+    ^ onLevel
+!
+
+activeLevel:aNumber
+    "set the level of the button when pressed (i.e. how deep)"
+
+    onLevel ~~ aNumber ifTrue:[
+        onLevel := aNumber.
+        (controller notNil
+        and:[controller pressed]) ifTrue:[
+            self level:onLevel.
+            margin := onLevel abs max:offLevel abs.
+            self invalidate. 
+        ]
+    ].
+
+    "Modified: / 30.7.1998 / 22:29:01 / cg"
+!
+
+activeLogo:anImageOrString
+    "define the logo to be displayed while active -
+     this is optional; the default is to display the same
+     (logo) in both pressed and released states."
+
+    activeLogo := anImageOrString.
+    controller pressed ifTrue:[
+        self label:anImageOrString
+    ]
+!
+
+allViewBackground:something if:condition
+    "ignore here"
+!
+
+beImageButton
+    "make mySelf an image button - that is turn off all levelChanges
+     and logo spacing. This should be sent for buttons which use both
+     passive and active logos, and the 3D effect comes from the bitmaps
+     (i.e. windows buttons)."
+
+    self 
+        extent:(labelWidth @ labelHeight);
+        sizeFixed:true; 
+        borderWidth:0;
+        activeLevel:0; 
+        passiveLevel:0; 
+        horizontalSpace:0; 
+        verticalSpace:0;
+        newLayout.
+
+    "Created: 17.9.1995 / 20:41:47 / claus"
+    "Modified: 19.9.1995 / 16:34:08 / claus"
+    "Modified: 28.5.1996 / 22:04:14 / cg"
+!
+
+beReturnButton
+    "show show a return-key image after the label.
+     Same as 'isReturnButton:true' for ST-80 compatibility."
+
+    self isReturnButton:true
+!
+
+beRoundRadioButton
+    "setup myself for a round radioButton look.
+     this is a private method; do not use it. It is going to move into the
+     RadioButton class."
+
+    self activeLogo:(Icon constantNamed:'RadioOn').
+    self passiveLogo:(Icon constantNamed:'RadioOff').
+    self activeLevel:0; 
+	 passiveLevel:0; 
+	 activeBackgroundColor:bgColor;
+	 activeForegroundColor:fgColor;
+	 borderWidth:0;
+	 enteredBackgroundColor:bgColor.
+    self computeLabelSize.
+    self beImageButton.
+
+    "Created: 22.9.1995 / 15:48:05 / claus"
+    "Modified: 22.9.1995 / 17:07:46 / claus"
+!
+
+defaultable
+    "return true, if the receiver is defaultable"
+
+    ^ defaultable
+!
+
+defaultable:aBoolean
+    "set/clear the defaultable attribute. If defaultable,
+     the preferredExtent is computed to include any additional
+     space required when the receiver is a returnButton."
+
+    defaultable ~~ aBoolean ifTrue:[
+	defaultable := aBoolean.
+	self newLayout
+    ]
+!
+
+disabledForegroundColor
+    "return the foreground color used when the button is disabled"
+
+    ^ disabledFgColor
+!
+
+disabledForegroundColor:aColor
+    "set the foreground color used when the button is disabled"
+
+    disabledFgColor := aColor
+!
+
+disabledLogo:anImageOrString
+    "define the logo to be displayed while disabled -
+     this is optional; the default is to display the same
+     (logo) in both pressed and released states.
+     However, the disabled logo is ignored if a labelChannel has
+     been set - then that value has priority."
+
+    disabledLogo := anImageOrString.
+    labelChannel isNil ifTrue:[
+        self enabled ifFalse:[
+            self label:anImageOrString
+        ]
+    ]
+
+    "Created: 17.9.1995 / 19:50:17 / claus"
+    "Modified: 17.9.1995 / 19:50:34 / claus"
+!
+
+edgeStyle:aSymbol
+    "set the edgestyle - currently only #soft or nil"
+
+    edgeStyle := aSymbol
+!
+
+enterLevel
+    "return the level to be used when the mouse
+     pointer enters the button area"
+
+    ^ enterLevel
+
+    "Created: 26.4.1997 / 20:48:53 / cg"
+    "Modified: 26.4.1997 / 20:49:29 / cg"
+!
+
+enterLevel:aNumber
+    "set the level to be used when the mouse
+     pointer enters the button area"
+
+    enterLevel := aNumber
+
+    "Created: 26.4.1997 / 20:49:10 / cg"
+    "Modified: 26.4.1997 / 20:49:35 / cg"
+!
+
+enteredBackgroundColor
+    "return the background color to be used when the mouse
+     pointer enters the button area"
+
+    ^ enteredBgColor
+!
+
+enteredBackgroundColor:aColor
+    "set the background color to be used when the mouse
+     pointer enters the button area"
+
+    enteredBgColor := aColor
+!
+
+enteredForegroundColor
+    "return the foreground color to be used when the mouse
+     pointer enters the button area"
+
+    ^ enteredFgColor
+!
+
+enteredForegroundColor:aColor
+    "set the foreground color to be used when the mouse
+     pointer enters the button area"
+
+    enteredFgColor := aColor
+!
+
+enteredLogo:anImageOrString
+    "define the logo to be displayed while the mousePointer is in the button -
+     this is optional; the default is to display the same
+     (logo) in both entered and normal states.
+     However, the entered logo is ignored if a labelChannel has
+     been set - then that value has priority."
+
+    enteredLogo := anImageOrString.
+    labelChannel isNil ifTrue:[
+        controller entered ifTrue:[
+            self label:anImageOrString
+        ]
+    ]
+!
+
+focusLogo:anImageOrString
+    "define the logo to be displayed while active -
+     this is optional; the default is to display the same
+     (logo) in both pressed and released states.
+     However, the focus logo is ignored if a labelChannel has
+     been set - then that value has priority."
+
+    focusLogo := anImageOrString.
+
+    "Created: 17.9.1995 / 19:50:17 / claus"
+    "Modified: 17.9.1995 / 20:00:43 / claus"
+!
+
+isReturnButton:aBoolean
+    "show/dont show a return-key image after the label"
+
+    isReturnButton ~~ aBoolean ifTrue:[
+	DefaultReturnButtonHasBorder ifTrue:[
+	    self borderWidth:(aBoolean ifTrue:[1] ifFalse:[0])
+	].
+	isReturnButton := aBoolean.
+	self newLayout
+    ]
+!
+
+label:aStringOrImageOrForm
+    |xlatedLabel|
+
+    xlatedLabel := self defineShortcutAndTranslateLabelStringFrom:aStringOrImageOrForm.
+    super label:xlatedLabel.
+!
+
+leaveLevel
+    "return the level to be used when the mouse
+     pointer leaves the button area"
+
+    ^ leaveLevel
+
+    "Created: 26.4.1997 / 20:48:26 / cg"
+    "Modified: 26.4.1997 / 20:49:47 / cg"
+!
+
+leaveLevel:aNumber
+    "set the level to be used when the mouse
+     pointer leaves the button area"
+
+    leaveLevel := aNumber
+
+    "Created: 26.4.1997 / 20:49:22 / cg"
+    "Modified: 26.4.1997 / 20:49:53 / cg"
+!
+
+loseDefault
+    "ST-80 compatibility - clear isReturnButton attribute"
+
+    self isReturnButton:false
+
+    "Created: 3.3.1997 / 16:20:47 / cg"
+    "Modified: 3.3.1997 / 18:12:06 / cg"
+!
+
+offLevel
+    <resource: #obsolete>
+    "return the level of the button when released.
+     Historic leftover; use #passiveLevel."
+
+    ^ offLevel
+!
+
+offLevel:aNumber
+    <resource: #obsolete>
+    "set the level of the button when released (i.e. how deep).
+     Historic leftover; use #passiveLevel:."
+
+    ^ self passiveLevel:aNumber
+!
+
+onLevel
+    <resource: #obsolete>
+    "return the level of the button when pressed.
+     Historic leftover; use #activeLevel."
+
+    ^ onLevel
+!
+
+onLevel:aNumber
+    <resource: #obsolete>
+    "set the level of the button when pressed (i.e. how deep).
+     Historic leftover; use #activeLevel:."
+
+    ^ self activeLevel:aNumber
+!
+
+passiveLevel
+    "return the level of the button when released"
+
+    ^ offLevel
+!
+
+passiveLevel:aNumber
+    "set the level of the button when not pressed (i.e. how high)"
+
+    offLevel ~~ aNumber ifTrue:[
+        offLevel := aNumber.
+        (controller notNil
+        and:[controller pressed not]) ifTrue:[
+            self level:offLevel.
+            margin := onLevel abs max:offLevel abs.
+            self invalidate.
+        ]
+    ]
+
+    "Modified: / 30.7.1998 / 22:29:17 / cg"
+!
+
+passiveLogo:anImageOrString
+    "define the logo to be displayed while inactive -
+     this is optional; the default is to display the same
+     (logo) in both pressed and released states.
+     However, the inactive logo is ignored if a labelChannel has
+     been set - then that value has priority."
+
+    passiveLogo := anImageOrString.
+    labelChannel isNil ifTrue:[
+        controller pressed ifFalse:[
+            self label:anImageOrString
+        ]
+    ]
+!
+
+takeDefault
+    "ST-80 compatibility - set isReturnButton attribute"
+
+    self isReturnButton:true
+
+    "Created: 3.3.1997 / 16:20:52 / cg"
+    "Modified: 3.3.1997 / 18:11:58 / cg"
+!
+
+viewBackground:something
+    super viewBackground:something.
+    something isColor ifTrue:[
+        self graphicsDevice hasGrayscales ifTrue:[
+            halfLightColor notNil ifTrue:[
+                halfLightColor := (something averageColorIn:(0@0 corner:7@7)) lightened "on:device".
+            ].
+            halfShadowColor notNil ifTrue:[
+                halfShadowColor := (something averageColorIn:(0@0 corner:7@7)) darkened "on:device".
+            ]
+        ]
+    ].
+
+    "Modified: 3.5.1997 / 10:37:24 / cg"
+! !
+
+!Button methodsFor:'changing state'!
+
+toggle
+    "toggle and perform the action"
+
+    controller toggle
+!
+
+toggleNoAction
+    "toggle, but do NOT perform any action - can be used to change a toggle
+     under program control (i.e. turn one toggle off from another one)"
+
+    controller toggleNoAction
+!
+
+turnOff
+    "turn the button off (if not already off) do NOT perform actions/change notifications"
+
+    (controller notNil and:[controller pressed]) ifTrue:[
+        offLevel ~~ level ifTrue:[
+            self level:offLevel.
+        ].
+        (passiveLogo notNil and:[passiveLogo ~~ logo]) ifTrue:[
+            self label:passiveLogo
+        ].
+        controller setPressed:false.
+        controller active:false.
+        level := offLevel.
+        margin := level abs.
+        self invalidate
+    ]
+
+    "Modified: 8.2.1997 / 15:21:44 / cg"
+!
+
+turnOffWithAction
+    "turn the button off (if not already off) and perform any action/change notification"
+
+    (controller notNil and:[controller pressed]) ifTrue:[
+        offLevel ~~ level ifTrue:[
+            self level:offLevel.
+        ].
+        (passiveLogo notNil and:[passiveLogo ~~ logo]) ifTrue:[
+            self label:passiveLogo
+        ].
+        self turnOffWithoutRedraw.
+        self invalidate
+    ]
+
+    "Created: 15.11.1995 / 16:55:37 / cg"
+    "Modified: 8.2.1997 / 15:21:53 / cg"
+!
+
+turnOffWithoutRedraw
+    "turn the button off - no redraw but perform any action/change notification"
+
+    controller notNil ifTrue:[
+        controller pressed:false.
+        controller active:false.
+    ].
+
+    "do not use super level:offLevel
+     - because that one does redraw the edges.
+     Sure, this is no good coding style"
+
+    level := offLevel.
+    margin := level abs
+
+    "Modified: 8.2.1996 / 15:28:53 / cg"
+!
+
+turnOn
+    "turn the button on (if not already on) - do NOT perform any action/notification"
+
+    (controller notNil and:[controller pressed not]) ifTrue:[
+        onLevel ~~ level ifTrue:[
+            self level:onLevel.
+        ].
+        (activeLogo notNil and:[activeLogo ~~ logo]) ifTrue:[
+            self label:activeLogo
+        ].
+        controller setPressed:true.
+        level := onLevel.
+        margin := level abs.
+
+        self invalidate
+    ]
+
+    "Created: 14.11.1995 / 22:00:45 / cg"
+    "Modified: 8.2.1997 / 15:22:01 / cg"
+!
+
+turnOnWithAction
+    "turn the button on (if not already on) and perform any change actions/notifications"
+
+    (controller notNil and:[controller pressed not]) ifTrue:[
+        onLevel ~~ level ifTrue:[
+            self level:onLevel.
+        ].
+        (activeLogo notNil and:[activeLogo ~~ logo]) ifTrue:[
+            self label:activeLogo
+        ].
+        self turnOnWithoutRedraw.
+        self invalidate
+    ]
+
+    "Created: 15.11.1995 / 16:55:56 / cg"
+    "Modified: 8.2.1997 / 15:22:09 / cg"
+!
+
+turnOnWithoutRedraw
+    "turn the button on - no redraw but perform any change actions/notifications"
+
+    controller notNil ifTrue:[
+        controller pressed:true.
+    ].
+
+    "do not use super level:offLevel
+     - because that one does redraw the edges.
+     Sure, this is no good coding style"
+
+    level := onLevel.
+    margin := level abs
+
+    "Modified: 8.2.1996 / 15:29:23 / cg"
+! !
+
+!Button methodsFor:'focus handling'!
+
+showFocus:explicit
+    "the button got the keyboard focus 
+     (either explicit, via tabbing; or implicit, by pointer movement)
+      - change any display attributes as req'd."
+
+    focusLogo notNil ifTrue:[
+        self enabled ifTrue:[
+            logo := focusLogo.  
+            self invalidate.
+            ^ self.
+        ]
+    ].
+    (styleSheet at:#'focus.showBorder' default:true) ifFalse:[
+        self invalidate.
+        ^ self.
+    ].
+    super showFocus:explicit
+
+    "Created: / 17.9.1995 / 19:58:50 / claus"
+    "Modified: / 19.11.1998 / 13:02:48 / cg"
+!
+
+showNoFocus:explicit
+    "the button lost the keyboard focus 
+     (either explicit, via tabbing; or implicit, by pointer movement)
+      - change any display attributes as req'd."
+
+    focusLogo notNil ifTrue:[
+        disabledLogo notNil ifTrue:[
+            self enabled ifTrue:[
+                logo := passiveLogo.  
+            ] ifFalse:[
+                logo := disabledLogo.  
+            ].
+        ] ifFalse:[
+            logo := passiveLogo
+        ].
+        self invalidate.
+        ^ self
+    ].
+    (styleSheet at:#'focus.showBorder' default:true) ifFalse:[
+        self invalidate.
+        ^ self
+    ].
+    super showNoFocus:explicit
+
+    "Created: / 17.9.1995 / 20:00:06 / claus"
+    "Modified: / 17.9.1995 / 20:26:32 / claus"
+    "Modified: / 19.11.1998 / 13:02:44 / cg"
+!
+
+wantsFocusWithButtonPress
+    "no, do not catch the keyboard focus on button click"
+
+    ^ false
+
+    "Created: / 28-03-2012 / 09:45:59 / cg"
+! !
+
+!Button methodsFor:'initialization'!
+
+defaultControllerClass
+    ^ ButtonController
+!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    |graphicsDevice|
+
+    super fetchDeviceResources.
+    graphicsDevice := self graphicsDevice.
+
+    disabledFgColor notNil ifTrue:[disabledFgColor := disabledFgColor onDevice:graphicsDevice].
+    disabledEtchedFgColor notNil ifTrue:[disabledEtchedFgColor := disabledEtchedFgColor onDevice:graphicsDevice].
+    activeFgColor notNil ifTrue:[activeFgColor := activeFgColor onDevice:graphicsDevice].
+    activeBgColor notNil ifTrue:[activeBgColor := activeBgColor onDevice:graphicsDevice].
+    enteredFgColor notNil ifTrue:[enteredFgColor := enteredFgColor onDevice:graphicsDevice].
+    enteredBgColor notNil ifTrue:[enteredBgColor := enteredBgColor onDevice:graphicsDevice].
+
+    formColor notNil ifTrue:[formColor := formColor onDevice:graphicsDevice].
+    formLightColor notNil ifTrue:[formLightColor := formLightColor onDevice:graphicsDevice].
+    formShadowColor notNil ifTrue:[formShadowColor := formShadowColor onDevice:graphicsDevice].
+    halfShadowColor notNil ifTrue:[halfShadowColor := halfShadowColor onDevice:graphicsDevice].
+    halfLightColor notNil ifTrue:[halfLightColor := halfLightColor onDevice:graphicsDevice].
+
+    "Modified: 15.2.1997 / 17:14:16 / cg"
+!
+
+initCursor
+    "set up a hand cursor"
+
+    cursor := Cursor hand
+!
+
+initEvents
+    super initEvents.
+    self enableEnterLeaveEvents
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    <resource: #style (#name)>
+
+    |hasGreyscales nm graphicsDevice|
+
+    super initStyle.
+    graphicsDevice := self graphicsDevice.
+
+    DefaultBorderWidth notNil ifTrue:[self borderWidth: DefaultBorderWidth].
+    DefaultForegroundColor notNil ifTrue:[fgColor := DefaultForegroundColor].
+    DefaultBackgroundColor notNil ifTrue:[bgColor := DefaultBackgroundColor].
+
+    edgeStyle := DefaultEdgeStyle.
+    onLevel := DefaultActiveLevel.
+    offLevel := DefaultPassiveLevel.
+
+    DefaultDisabledForegroundColor notNil ifTrue:[
+        disabledFgColor := DefaultDisabledForegroundColor
+    ] ifFalse:[
+        disabledFgColor := fgColor
+    ].
+    disabledEtchedFgColor := DefaultDisabledEtchedForegroundColor.
+
+    DefaultEnteredForegroundColor notNil ifTrue:[enteredFgColor := DefaultEnteredForegroundColor].
+    DefaultEnteredBackgroundColor notNil ifTrue:[enteredBgColor := DefaultEnteredBackgroundColor].
+    DefaultActiveForegroundColor notNil ifTrue:[activeFgColor := DefaultActiveForegroundColor].
+    DefaultActiveBackgroundColor notNil ifTrue:[activeBgColor := DefaultActiveBackgroundColor].
+
+    DefaultShadowColor notNil ifTrue:[shadowColor := DefaultShadowColor].
+    DefaultLightColor notNil ifTrue:[lightColor := DefaultLightColor].
+
+    shadowColor isNil ifTrue:[
+        shadowColor := self blackColor.
+    ].
+    lightColor isNil ifTrue:[
+        lightColor := self whiteColor.
+    ].
+
+    hasGreyscales := graphicsDevice hasGrayscales.
+    (edgeStyle == #soft or:[edgeStyle == #softWin95]) ifTrue:[
+        DefaultHalfShadowColor notNil ifTrue:[halfShadowColor := DefaultHalfShadowColor].
+        DefaultHalfLightColor notNil ifTrue:[halfLightColor := DefaultHalfLightColor].
+
+        halfShadowColor isNil ifTrue:[
+"/            hasGreyscales ifTrue:[
+"/                halfShadowColor := Color darkGrey
+"/            ] ifFalse:[
+"/                halfShadowColor := shadowColor
+"/            ]
+            halfShadowColor := shadowColor lightened
+        ]
+    ].
+
+    "
+     actually, the stuf below should not be needed
+     - the styleSheet should provide values for nonGreyscale displays too
+    "
+    nm := styleSheet name.
+    (nm == #iris) ifTrue:[
+        hasGreyscales ifTrue:[
+            DefaultEnteredBackgroundColor isNil ifTrue:[
+                enteredBgColor := bgColor lightened "Color lightGray".
+            ].
+            DefaultActiveBackgroundColor isNil ifTrue:[
+                activeBgColor := enteredBgColor.
+            ].
+            DefaultActiveForegroundColor isNil ifTrue:[
+                activeFgColor := enteredFgColor.
+            ].
+        ] ifFalse:[
+            DefaultEnteredBackgroundColor isNil ifTrue:[
+                enteredBgColor := Color veryLightGray.
+            ].
+            DefaultActiveBackgroundColor isNil ifTrue:[
+                activeBgColor := self blackColor.
+            ].
+            DefaultActiveForegroundColor isNil ifTrue:[
+                activeFgColor := self whiteColor.
+            ].
+        ].
+    ] ifFalse:[
+        nm == #motif ifTrue:[
+            lightColor isNil ifTrue:[
+                lightColor := bgColor lightened
+            ].
+"/            hasGreyscales ifTrue:[
+"/                lightColor := Color lightGrey
+"/            ]
+        ] ifFalse:[
+            nm == #st80 ifTrue:[
+                hasGreyscales ifTrue:[
+                    DefaultActiveForegroundColor isNil ifTrue:[
+                        activeFgColor := fgColor.
+                    ].
+                    DefaultActiveBackgroundColor isNil ifTrue:[
+                        activeBgColor := bgColor darkened.
+                    ].
+                ] ifFalse:[
+                    DefaultActiveForegroundColor isNil ifTrue:[
+                        activeFgColor := self whiteColor.
+                    ].
+                    DefaultActiveBackgroundColor isNil ifTrue:[
+                        activeBgColor := self blackColor
+                    ]
+                ]
+            ]
+        ]
+    ].
+
+    offLevel ~~ level ifTrue:[
+        self level:offLevel.
+        margin := (onLevel abs) max:(offLevel abs).
+    ].
+
+    DefaultReturnButtonHasImage ifTrue:[
+        (hasGreyscales and:[styleSheet is3D]) ifTrue:[
+            shadowForm := self class returnShadowFormOn:graphicsDevice.
+            lightForm := self class returnLightFormOn:graphicsDevice.
+            formColor := viewBackground.
+            formShadowColor := shadowColor.
+            formLightColor := lightColor
+        ] ifFalse:[
+            shadowForm := self class returnFormOn:graphicsDevice.
+            formColor := self blackColor
+        ].
+    ].
+
+"/ unfinished...
+"/    nm = #winVista ifTrue:[
+"/        self border:(RoundButtonBorder width:2 color:Color grey).
+"/    ].
+
+    "Modified: / 20-08-1998 / 12:07:37 / cg"
+    "Modified (comment): / 05-10-2011 / 15:51:19 / az"
+!
+
+initialize
+    super initialize.
+
+    isReturnButton := defaultable := false.
+!
+
+reinitialize
+    super reinitialize.
+    controller notNil ifTrue:[
+        controller reinitialize.
+    ]
+! !
+
+!Button methodsFor:'native widget support'!
+
+nativeWindowType
+    "return a symbol describing my native window type 
+     (may be used internally by the device as a native window creation hint)"
+
+"/    self class == Button ifTrue:[
+"/        ^ #Button
+"/    ].
+    ^ nil
+!
+
+win32nativeWMCommand:commandID
+    self controller performAction
+! !
+
+!Button methodsFor:'private'!
+
+computeLabelOrigin
+    "compute the origin of the text - if  I am a returnButton,
+     shift it somwehat to the right (we have already allocated the
+     real estate, since computeLabelSize returned some extra space
+     before)."
+
+    super computeLabelOrigin.
+    shadowForm notNil ifTrue:[
+        isReturnButton ifTrue:[
+            labelOriginX := labelOriginX + hSpace + hSpace.
+        ].
+
+        defaultable ifTrue:[
+            labelOriginX < margin ifTrue:[
+                labelOriginX := margin
+            ]
+        ]
+    ].
+"/    self class == Button ifTrue:[
+"/        labelOriginY := labelOriginY + 1.
+"/        labelOriginX := labelOriginX + 1.
+"/    ]
+
+    "Modified: / 9.9.1998 / 20:22:01 / cg"
+!
+
+getLabelFromLabelChannel
+    passiveLogo := labelChannel value.
+    super getLabelFromLabelChannel.
+!
+
+rawLabelSizeOf:aLogo
+    "compute the extent needed to hold the label (plus the return form)"
+
+    |ext|
+
+    ext := super rawLabelSizeOf:aLogo.
+
+    (activeLogo notNil and:[activeLogo ~~ logo]) ifTrue:[
+        ext := ext max:(super rawLabelSizeOf:activeLogo).
+    ].
+    (passiveLogo notNil and:[passiveLogo ~~ logo]) ifTrue:[
+        ext := ext max:(super rawLabelSizeOf:passiveLogo).
+    ].
+
+    ((isReturnButton or:[defaultable]) and:[shadowForm notNil]) ifTrue:[
+        ^ (ext x + (hSpace * 2) + shadowForm width)
+          @
+          (ext y max: (shadowForm height "+ vSpace"))
+    ].
+    ^ ext
+
+    "Modified: / 3.11.1997 / 09:15:52 / cg"
+!
+
+shiftLabelWhenPressed
+    ^ self class == Button
+! !
+
+!Button methodsFor:'queries'!
+
+is3D
+    "return true, if the receiver is a 3D style view"
+
+    <resource: #style (#name)>
+
+    styleSheet name == #mswindows ifTrue:[^ true].
+    styleSheet name == #win8 ifTrue:[^ false].
+    ^ super is3D
+
+    "Modified: 22.10.1996 / 18:26:41 / cg"
+!
+
+isDefault
+    "return true, if this is a default OK button"
+
+    ^ isReturnButton
+!
+
+isOn
+    "return true, if this button is currently pressed"
+
+    ^ controller pressed
+!
+
+isReturnButton
+    "return true, if this is a return button"
+
+    ^ isReturnButton
+!
+
+isTriggerOnDown
+    "return true, if I fire on press (instead of fire-on-release)"
+
+    ^ controller isTriggerOnDown
+
+    "Created: / 31.10.1997 / 19:33:56 / cg"
+    "Modified: / 31.10.1997 / 19:34:34 / cg"
+!
+
+specClass
+    "redefined, since the name of my specClass is nonStandard (i.e. not ButtonSpec)"
+
+    self class == Button ifTrue:[^ ActionButtonSpec].
+    ^ super specClass
+
+    "Modified: / 31.10.1997 / 19:49:07 / cg"
+! !
+
+!Button methodsFor:'redrawing'!
+
+drawBottomEdge
+    "draw bottom 3D edge into window frame"
+
+    self drawBottomEdgeLevel:level
+		      shadow:shadowColor 
+		      light:lightColor
+		      halfShadow:halfShadowColor 
+		      halfLight:halfLightColor
+		      style:edgeStyle.
+!
+
+drawEdges
+    "draw all of my 3D edges"
+
+    self drawEdgesForX:0 y:0 width:width height:height level:level 
+		shadow:shadowColor 
+		light:lightColor
+		halfShadow:halfShadowColor 
+		halfLight:halfLightColor
+		style:edgeStyle 
+!
+
+drawLeftEdge
+    "draw left 3D edge into window frame"
+
+    self drawLeftEdgeLevel:level
+		    shadow:shadowColor 
+		     light:lightColor
+		     halfShadow:halfShadowColor 
+		     halfLight:halfLightColor
+		     style:edgeStyle.
+!
+
+drawRightEdge
+    "draw right 3D edge into window frame"
+
+    self drawRightEdgeLevel:level
+		     shadow:shadowColor 
+		      light:lightColor
+		      halfShadow:halfShadowColor 
+		      halfLight:halfLightColor
+		      style:edgeStyle.
+!
+
+drawTopEdge
+    "draw top 3D edge into window frame"
+
+    self drawTopEdgeLevel:level
+		   shadow:shadowColor 
+		   light:lightColor
+		   halfShadow:halfShadowColor 
+		   halfLight:halfLightColor
+		   style:edgeStyle.
+!
+
+drawWith:fg and:bg
+    "redraw myself with fg/bg. Use super to draw the label, add
+     the return-arrow here."
+
+    |x y sColor lColor etchFg shownLogo isEnabled|
+
+    shown ifFalse:[^ self].
+
+    isEnabled := self enabled.
+    isEnabled ifFalse:[
+        etchFg := disabledEtchedFgColor.
+    ].
+
+    (controller active or:[controller pressed]) ifTrue:[
+        shownLogo := activeLogo ? enteredLogo ? passiveLogo ? logo. 
+    ] ifFalse:[
+        shownLogo := passiveLogo ? logo.
+        (enteredLogo notNil and:[controller entered]) ifTrue:[
+            shownLogo := enteredLogo.
+        ].
+    ].
+    (disabledLogo notNil and:[isEnabled not]) ifTrue:[
+        shownLogo := disabledLogo.
+    ].
+    shownLogo ~= logo ifTrue:[
+        self label:shownLogo redraw:false.
+        logo := shownLogo.
+    ].
+
+    self drawWith:fg and:bg clearInside:true etchedFg:etchFg.   "this draws the text/image"
+
+    (isReturnButton and:[shadowForm notNil]) ifTrue:[
+        y := (height - shadowForm height) // 2.
+        x := width - shadowForm width - (hSpace // 2).
+
+        (self shiftLabelWhenPressed and:[level < 0]) ifTrue:[
+            x := x + 1.
+            y := y + 1
+        ].
+
+        formShadowColor isNil ifTrue:[
+            self paint:fg on:bg.
+            self displayOpaqueForm:shadowForm x:x y:y.
+            ^ self
+        ].
+
+        "
+         drawing form in 3d-style (i.e. with shadow and light)
+        "
+        (formShadowColor isColor and:[formShadowColor isDithered not
+         and:[formLightColor isColor and:[formLightColor isDithered not
+         and:[formColor isColor and:[formColor isDithered not]]]]])
+        ifTrue:[
+            sColor := formShadowColor.
+            lColor := formLightColor.
+        ] ifFalse:[
+            sColor := self graphicsDevice blackColor.
+            lColor := self graphicsDevice whiteColor.
+        ].
+        self foreground:sColor.
+        self displayForm:shadowForm x:x y:y.
+
+        lightForm notNil ifTrue:[
+            self foreground:lColor.
+            self displayForm:lightForm x:x y:y.
+        ].
+        self paint:fg.
+    ].
+
+    "/ DefaultFocusHighlightStyle == #win95 ifTrue:[
+    (styleSheet at:#focusHighlightStyle) == #win95 ifTrue:[
+        self hasFocus ifTrue:[
+            self windowGroup focusCameByTab ifTrue:[
+                self drawWin95FocusFrame
+            ]
+        ].
+    ]
+
+    "Modified: / 22-10-2010 / 15:55:03 / cg"
+!
+
+redraw
+    "redraw the button. 
+     Thats like redrawing a label, but use different colors when pressed
+     or entered."
+
+    |fg bg entered noFrame lvl isEnabled|
+
+    shown ifFalse:[^ self].
+    isEnabled := self enabled.
+
+"/    disabledLogo notNil ifTrue:[
+"/        isEnabled ifFalse:[
+"/            logo := disabledLogo.
+"/        ] ifTrue:[
+"/            controller active ifTrue:[
+"/                logo := activeLogo
+"/            ] ifFalse:[
+"/                logo := passiveLogo
+"/            ].
+"/        ].
+"/    ].
+
+    noFrame := true.
+    fg := fgColor.
+    bg := bgColor.
+    isEnabled ifFalse:[
+        fg := disabledFgColor.
+    ] ifTrue:[
+        entered := controller entered.
+        entered ifTrue:[
+            enteredFgColor notNil ifTrue:[fg := enteredFgColor].
+            enteredBgColor notNil ifTrue:[bg := enteredBgColor].
+            lvl := enterLevel.
+        ] ifFalse:[
+            lvl := leaveLevel
+        ].
+        (enterLevel notNil and:[leaveLevel notNil]) ifTrue:[
+            offLevel ~~ lvl ifTrue:[
+                offLevel := lvl.
+                offLevel ~~ level ifTrue:[
+                    self level:offLevel
+                ]
+            ]
+        ].
+        (controller pressed and:[entered or:[controller isTriggerOnDown]]) ifTrue:[
+            noFrame := self is3D "false".
+            activeFgColor isNil ifTrue:[
+                onLevel == offLevel ifTrue:[
+                    fg := bgColor
+                ]
+            ] ifFalse:[
+                fg := activeFgColor.
+            ].
+            activeBgColor isNil ifTrue:[
+                onLevel == offLevel ifTrue:[
+                    bg := fgColor
+                ]
+            ] ifFalse:[
+                bg := activeBgColor
+            ].
+
+            self is3D ifFalse:[
+                noFrame := (fgColor = fg) and:[bgColor = bg].
+            ].
+        ].
+    ].
+
+    self drawWith:fg and:bg.
+    noFrame ifFalse:[
+        "
+         draw a rectangle around (2D styles only)
+        "
+        self paint:fg.
+        self displayRectangleX:0 y:0 width:width height:height.
+        ^ self
+    ].
+
+    "Modified: / 3.11.1997 / 11:56:02 / cg"
+!
+
+redrawIfPressed
+    "redraw the button, but only if visible and currently being pressed"
+
+    shown ifTrue:[
+        controller pressed ifTrue:[
+            self redraw
+        ]
+    ]
+
+    "Modified: 1.4.1997 / 13:26:27 / cg"
+!
+
+redrawX:x y:y width:w height:h 
+    self renderOrRedraw.
+
+    "Modified: 1.4.1997 / 13:26:31 / cg"
+!
+
+showActive
+    "redraw myself as active (i.e. busy)"
+
+    onLevel ~~ level ifTrue:[
+        self level:onLevel.
+    ].
+"/    (activeLogo notNil and:[activeLogo ~~ logo]) ifTrue:[
+"/        self logo:activeLogo
+"/    ].
+    self invalidate
+
+    "Modified: 26.5.1996 / 18:08:52 / cg"
+!
+
+showPassive
+    "redraw myself as passive"
+
+    offLevel ~~ level ifTrue:[
+        self level:offLevel.
+    ].
+    (passiveLogo notNil and:[passiveLogo ~~ logo]) ifTrue:[
+        self label:passiveLogo
+    ].
+    self invalidate.
+
+    "Modified: 26.5.1996 / 18:08:56 / cg"
+! !
+
+!Button class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/Button.st,v 1.157 2014-02-18 16:05:42 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/Button.st,v 1.157 2014-02-18 16:05:42 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ButtonController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,793 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Controller subclass:#ButtonController
+	instanceVariableNames:'enableChannel pressChannel releaseChannel pressed active entered
+		isTriggerOnDown autoRepeat repeatBlock initialDelay repeatDelay
+		pressActionBlock releaseActionBlock isToggle isRadio buttonDown'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Controllers'
+!
+
+!ButtonController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    ButtonControllers are used with buttons and handle all user interaction.
+    These are automatically created when a Button is created, therefore no manual
+    action is required for creation.
+    In normal applications, you dont have to care for the controller; 
+    access to the controllers behavior is possible via messages to the button.
+    (setting actions, controlling autorepeat etc.)
+
+    A ButtonController supports 3 types of notifications:
+        MVC change notification - as usual
+        channel notifications   - through the pressChannel/releaseChannels
+        action callBack         - through pressAction / releaseAction blocks.
+
+    Notifications are made in the above order (i.e. an actionBlock sees the model
+    already changed, if there is a model).
+
+    Having multiple mechanisms here is both historic and to make the life
+    of simple applications easier - most buttons dont need a model or notification
+    channels and simply perform some action.
+    In general: actionBlocks are useful, if there is a single subject which
+    needs to be told about the press (i.e. actionButtons); 
+    models should be used when the button represents some value in some other
+    object.
+    Channels are much like the MVC approach, however, these are useful if
+    press/release/label etc. may come from different objects, and a single 
+    (synthetic) model does not make sense or is not appropriate.
+
+    Actually, the channels are the most general - and the other mechanism could
+    (and will, maybe) based upon them; after all, an actionBlock is a channel,
+    whcih sends #value to its block ....
+
+
+
+    See examples in the Button class.
+
+    [Instance variables:]
+
+      enableChannel           <ValueHolder    pressing is allowed (default: true)
+                               on Boolean>    
+
+      pressed                 <Boolean>       true if currently pressed (read-only)
+
+      entered                 <Boolean>       true if the cursor is currently in this view
+
+      isTriggerOnDown         <Boolean>       controls if the action should be executed on
+                                              press or on release (default: on release).
+
+      isToggle                <Boolean>       controls if the button should show toggle
+                                              behavior (as opposed to one-shot behavior)
+
+      pressActionBlock        <Block>         block to evaluate when pressed (default: noop)
+
+      releaseActionBlock      <Block>         block to evaluate when released (default: noop)
+
+      autoRepeat              <Boolean>       auto-repeats when pressed long enough (default: false)
+
+      initialDelay            <Number>        seconds till first auto-repeat (default: 0.2)
+
+      repeatDelay             <Number>        seconds of repeat intervall (default: 0.025)
+
+      repeatBlock             <Block>         block evaluated for auto-repeat (internal)
+
+      active                  <Boolean>       true during action evaluation (internal)
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!ButtonController class methodsFor:'defaults'!
+
+defaultInitialDelay
+    "when autorepeat is enabled, and button is not released,
+     start repeating after initialDelay seconds"
+
+    ^ 0.2
+!
+
+defaultRepeatDelay
+    "when autorepeat is enabled, and button is not released,
+     repeat every repeatDelay seconds"
+
+    ^ 0.025
+! !
+
+!ButtonController methodsFor:'accessing-behavior'!
+
+action:aBlock
+    "convenient method: depending on the setting the triggerOnDown flag,
+     either set the press-action & clear any release-action or
+     vice versa, set the release-action and clear the press-action."
+
+    isTriggerOnDown ifTrue:[
+        releaseActionBlock := nil.
+        pressActionBlock := aBlock
+    ] ifFalse:[
+        releaseActionBlock := aBlock.
+        pressActionBlock := nil
+    ].
+
+    "Modified: 9.2.1996 / 22:41:22 / cg"
+!
+
+autoRepeat
+    "turn on autorepeat. OBSOLETE; use #autoRepeat:"
+
+    self autoRepeat:true.
+
+    "Modified: 9.2.1996 / 22:42:46 / cg"
+!
+
+autoRepeat:aBoolean
+    "turn on/off autorepeat"
+
+    autoRepeat := aBoolean.
+    repeatBlock := MessageSend receiver:self selector:#repeat. "/ [self repeat]
+
+    "Modified: 5.9.1995 / 22:06:00 / claus"
+    "Modified: 20.3.1997 / 21:56:13 / cg"
+!
+
+beButton
+    "make the receiver act like a button; thats the default, anyway"
+
+    "/ because I will be a trigger-on-up button
+    (isTriggerOnDown 
+    and:[pressActionBlock notNil 
+    and:[releaseActionBlock isNil]]) ifTrue:[
+        pressActionBlock := releaseActionBlock.
+        releaseActionBlock := nil.
+    ].
+
+    isTriggerOnDown := false.
+    isToggle := false.
+    isRadio := false.
+
+    "Modified: 15.7.1996 / 13:42:15 / cg"
+    "Created: 27.1.1997 / 13:30:11 / cg"
+!
+
+beRadioButton
+    "make the receiver act like a radioButton;
+     That is like a toggle, but do not allow turning myself off
+     by buttonPress (instead, must be turned off by another button or programmatically)"
+
+    "/ because I will be a trigger-on-down button
+    (isTriggerOnDown not 
+    and:[releaseActionBlock notNil 
+    and:[pressActionBlock isNil]]) ifTrue:[
+        pressActionBlock := releaseActionBlock.
+        releaseActionBlock := nil.
+    ].
+
+    isTriggerOnDown := true.
+    isToggle := false.
+    isRadio := true.
+!
+
+beToggle
+    "make the receiver act like a toggle"
+
+    "/ because I will be a trigger-on-down button
+    (isTriggerOnDown not 
+    and:[releaseActionBlock notNil 
+    and:[pressActionBlock isNil]]) ifTrue:[
+        pressActionBlock := releaseActionBlock.
+        releaseActionBlock := nil.
+    ].
+
+    isTriggerOnDown := true.
+    isToggle := true.
+    isRadio := false.
+
+    "Modified: 15.7.1996 / 13:42:15 / cg"
+!
+
+beTriggerOnDown
+    "make the receiver act on button press"
+
+    isTriggerOnDown := true
+!
+
+beTriggerOnUp
+    "make the receiver act on button release"
+
+    isTriggerOnDown := false
+!
+
+disable
+    "alternative invokation; redirected to basic mechanism"
+
+    self enabled:false
+
+    "Modified: / 30.3.1999 / 14:50:12 / stefan"
+!
+
+enable
+    "alternative invokation; redirected to basic mechanism"
+
+    self enabled:true
+
+    "Modified: / 30.3.1999 / 14:50:01 / stefan"
+!
+
+enabled:aBoolean
+    "disable the button"
+
+    enableChannel value ~~ aBoolean ifTrue:[
+        enableChannel value:aBoolean.
+        "/ view redraw    - not needed; I listen to enableChannel
+    ]
+
+    "Created: / 30.3.1999 / 14:49:05 / stefan"
+!
+
+isTriggerOnDown
+    "return true, if I trigger on press
+     (in contrast to triggering on up, which is the default)"
+
+    ^ isTriggerOnDown
+!
+
+pressAction
+    "return the pressAction; thats the block which gets evaluated
+     when the button is pressed (if non-nil)"
+
+    ^ pressActionBlock
+!
+
+pressAction:aBlock
+    "define the action to be performed on press"
+
+    pressActionBlock := aBlock.
+!
+
+releaseAction
+    "return the releaseAction; thats the block which gets evaluated
+     when the button is relreased (if non-nil)"
+
+    ^ releaseActionBlock
+!
+
+releaseAction:aBlock
+    "define the action to be performed on release"
+
+    releaseActionBlock := aBlock.
+!
+
+triggerOnDown:aBoolean
+    "set/clear the flag which controls if the action block is to be evaluated
+     on press or on release. 
+     (see also ST-80 compatibility methods beTriggerOn*)"
+
+    isTriggerOnDown := aBoolean
+! !
+
+!ButtonController methodsFor:'accessing-channels'!
+
+enableChannel
+    "return the valueHolder holding the enable boolean value"
+
+    ^ enableChannel
+
+    "Modified: 30.4.1996 / 15:09:30 / cg"
+!
+
+enableChannel:aValueHolder
+    "set the valueHolder, which holds the enable boolean value"
+
+    |wasEnabled|
+
+    enableChannel notNil ifTrue:[
+        wasEnabled := enableChannel value.
+        enableChannel retractInterestsFor:self. 
+    ] ifFalse:[
+        wasEnabled := true
+    ].
+    enableChannel := aValueHolder.
+    aValueHolder onChangeSend:#enableStateChanged to:self.
+
+    enableChannel value ~~ wasEnabled ifTrue:[
+        self enableStateChanged
+
+    ]
+
+    "Modified: 17.9.1995 / 19:41:18 / claus"
+!
+
+pressChannel
+
+    ^ pressChannel
+!
+
+pressChannel:aChannel
+    pressChannel := aChannel
+!
+
+releaseChannel
+
+    ^ releaseChannel
+!
+
+releaseChannel:aChannel
+    releaseChannel := aChannel
+! !
+
+!ButtonController methodsFor:'accessing-state'!
+
+active
+    "return true, if I am active; 
+     that is: currently performing my action.
+     This query can be used to avoid multiple redraws."
+
+    ^ active
+!
+
+active:aBoolean
+    active := aBoolean
+!
+
+enabled
+    "return true, if I am enabled"
+
+    ^ enableChannel value
+!
+
+entered
+    "return true, if the mouse pointer is currently in my view"
+
+    ^ entered
+!
+
+entered:aBoolean
+    entered := aBoolean
+!
+
+pressed
+    "return true, if I am pressed"
+
+    ^ pressed
+!
+
+pressed:aBoolean
+    pressed ~~ aBoolean ifTrue:[
+	pressed := aBoolean.
+	self performAction.
+    ].
+!
+
+setPressed:aBoolean
+    pressed := aBoolean.
+
+    "Created: 14.11.1995 / 21:37:08 / cg"
+!
+
+toggle
+    "toggle and perform the action"
+
+    enableChannel value ifTrue:[
+        self toggleNoAction.
+        self performAction.
+        view changed:#toggle with:pressed
+    ]
+!
+
+toggleNoAction
+    "toggle, but do NOT perform any action"
+
+    pressed ifTrue:[
+        view turnOff.
+        pressed := false.
+    ] ifFalse:[
+        view turnOn.
+        pressed := true.
+    ].
+    view repairDamage
+
+    "Modified: / 4.3.1998 / 13:35:12 / cg"
+! !
+
+!ButtonController methodsFor:'event handling'!
+
+buttonMotion:buttonState x:x y:y
+    (x >= 0 and:[x < view width
+    and:[y >= 0 and:[y < view height]]]) ifTrue:[
+        entered ifFalse:[
+            self pointerEnter:buttonState x:x y:y
+        ]
+    ] ifFalse:[
+        entered ifTrue:[
+            self pointerLeave:buttonState
+        ]
+    ]
+!
+
+buttonMultiPress:button x:x y:y
+    ^ self buttonPress:button x:x y:y
+!
+
+buttonPress:button x:x y:y
+    |wg|
+
+    (button == 1) ifFalse:[
+        ^ super buttonPress:button x:x y:y
+    ].
+
+    (view styleSheet at:#'button.takeFocusOnClick' default:false) ifTrue:[
+        "/ mhmh - how can this ever be nil ?
+        (wg := view windowGroup) notNil ifTrue:[
+            wg focusToView:view
+        ]
+    ].
+
+    buttonDown := true.
+
+    enableChannel value ifTrue:[
+        isToggle ifTrue:[
+            self toggle.
+            ^ self
+        ].
+        isRadio ifTrue:[
+            pressed ifFalse:[
+                self toggle
+            ].
+            ^ self
+        ].
+
+        pressed ifFalse:[
+            pressed := true.
+            view showActive.
+
+            (pressActionBlock notNil or:[model notNil]) ifTrue:[
+                "
+                 force output - so that button is drawn correctly in case
+                 of any long-computation (at high priority)
+                "
+                view flush.
+            ].
+
+            self performAction.
+            view notNil ifTrue:[
+                view flush.
+            ].
+
+            autoRepeat ifTrue:[
+                Processor addTimedBlock:repeatBlock afterSeconds:initialDelay
+            ]
+        ]
+    ]
+
+    "Modified: / 28-03-2012 / 13:08:38 / cg"
+!
+
+buttonRelease:button x:x y:y
+    "button was released - if enabled, perform releaseaction"
+
+    (button == 1) ifFalse:[
+        ^ super buttonRelease:button x:x y:y
+    ].
+
+    buttonDown := false.
+
+    (isToggle or:[isRadio]) ifTrue:[
+        ^ self
+    ].
+
+    pressed ifTrue:[
+        autoRepeat ifTrue:[
+            Processor removeTimedBlock:repeatBlock
+        ].
+        pressed := false.
+        view showPassive.
+
+        enableChannel value ifTrue:[
+            "
+             only perform action if released within myself
+            "
+            ((x >= 0) 
+            and:[x <= view width
+            and:[y >= 0
+            and:[y <= view height]]]) ifTrue:[
+                (releaseActionBlock notNil or:[model notNil]) ifTrue:[
+                    "
+                     force output - so that button is drawn correctly in case
+                     of any long-computation (at high priority)
+                    "
+                    view flush.
+                ].
+
+                self performAction.
+            ]
+        ]
+    ]
+
+    "Modified: 8.3.1997 / 00:04:19 / cg"
+!
+
+enableStateChanged
+    "this is sent, whenever the enable value has changed"
+
+    view notNil ifTrue:[
+        view invalidate "redraw".
+        view 
+            cursor:(
+                enableChannel value 
+                    ifTrue:[ Cursor hand ]
+                    ifFalse:[ Cursor normal ])
+    ]
+
+    "Modified: 17.9.1995 / 19:55:52 / claus"
+    "Modified: 17.4.1997 / 01:53:14 / cg"
+!
+
+keyPress:key x:x y:y
+    "trigger on Return and space, if I am the focusView of my group
+     (i.e. if I got an explicit focus)"
+
+"/    <resource: #keyboard (#Return)>
+
+    view hasExplicitFocus ifTrue:[
+        ((key == Character space) "or:[key == #Return]") ifTrue:[
+            "just simulate a buttonPress/release here."
+            self buttonPress:1 x:0 y:0.
+            self buttonRelease:1 x:0 y:0.
+            ^ self.
+        ]
+    ].
+    view keyPress:key x:x y:y
+
+    "Modified: / 07-03-2012 / 11:47:40 / cg"
+!
+
+performAction
+    |action value|
+
+    (isToggle or:[isRadio]) ifTrue:[
+        value := pressed
+    ] ifFalse:[
+        value := true
+    ].
+
+    "
+     ST-80 style model notification ...
+     this updates the model (typically, a ValueHolder)
+    "
+    (isToggle
+    or:[(isTriggerOnDown and:[pressed])
+    or:[isTriggerOnDown not and:[pressed not]]]) ifTrue:[
+        "the ST-80 way of doing things"
+        view notNil ifTrue:[
+            active := true.
+            view sendChangeMessageWith:value.
+            active := false.
+        ].
+    ].
+
+    "
+     ST/X style actionBlock evaluation & channel notification ...
+    "
+    pressChannel notNil ifTrue:[
+        pressed ifTrue:[
+            pressChannel value:true 
+        ]
+    ].
+    releaseChannel notNil ifTrue:[
+        pressed ifFalse:[
+            releaseChannel value:true
+        ]
+    ].
+
+    pressed ifTrue:[
+        action := pressActionBlock.
+    ] ifFalse:[
+        action := releaseActionBlock.
+    ].
+
+    action notNil ifTrue:[
+        active := true.
+        action valueWithOptionalArgument:value.
+        active := false.
+    ].
+
+    "Modified: 24.1.1997 / 11:38:20 / cg"
+!
+
+performShortcutAction
+    enableChannel value ifTrue:[
+        isToggle ifTrue:[
+            self toggle.
+            ^ self
+        ].
+        isRadio ifTrue:[
+            pressed ifFalse:[
+                self toggle
+            ].
+            ^ self
+        ].
+
+        self performAction.
+    ]
+!
+
+pointerEnter:state x:x y:y
+    "mouse pointer entered my view.
+     Redraw with enteredColors if they differ from the normal colors"
+
+    entered := true.
+    enableChannel value ifTrue:[
+        pressed ifTrue:[
+            isTriggerOnDown ifFalse:[
+                view showActive.
+            ].
+
+            "
+             reentered after a leave with mouse-button down;
+             restart autorepeating and/or if I am a button with
+             triggerOnDown, show active again.
+            "
+            autoRepeat ifTrue:[
+                Processor addTimedBlock:repeatBlock afterSeconds:initialDelay
+            ].
+        ].
+        view invalidate
+    ]
+
+    "Modified: 26.5.1996 / 18:09:06 / cg"
+!
+
+pointerLeave:state
+    "mouse pointer left my view.
+     Redraw with normal colors if they differ from enteredColors"
+
+    entered := false.
+    "/ sometimes could happen that the view becomes nil
+    view isNil ifTrue:[^ self].
+
+    pressed ifTrue:[
+        isTriggerOnDown ifFalse:[
+            view showPassive.
+        ] ifTrue:[
+            view invalidate
+        ].
+
+        "
+         leave with mouse-button down;
+         stop autorepeating and/or if I am a button with
+         action on release, show passive
+        "
+        autoRepeat ifTrue:[
+            Processor removeTimedBlock:repeatBlock
+        ].
+    ].
+    enableChannel value ifTrue:[
+        view invalidate
+    ]
+
+    "Modified: 1.4.1997 / 13:27:32 / cg"
+!
+
+repeat
+    "this is sent from the autorepeat-block, when the button has been pressed long
+     enough; it simulates a release-press, by evaluating both release
+     and press actions."
+
+    |dly|
+
+    (pressed and:[entered]) ifTrue:[
+        enableChannel value ifTrue:[
+            active ifFalse:[
+                "/ dont repeat, if a release is pending ...
+                "/ (must check this, because the release event could
+                "/  stick in the queue, since exposes are handled first,
+                "/  which could lead to event processing to never happen)
+                (view sensor hasButtonReleaseEventFor:view) ifFalse:[
+                    self performAction.
+
+                    autoRepeat ifTrue:[
+                        view graphicsDevice shiftDown ifTrue:[
+                            dly := repeatDelay / 4.
+                        ] ifFalse:[
+                            dly := repeatDelay
+                        ].
+                        Processor addTimedBlock:repeatBlock afterSeconds:dly
+                    ]
+                ]
+            ].
+        ]
+    ]
+
+    "Modified: 28.5.1996 / 20:21:24 / cg"
+!
+
+requestAutoAccept
+    "request autoAccept from a keyboardProcessor.
+     AutoAccept is allowed, if I am enabled and a default buttons controller"
+
+    ^ true.
+"/    ^ self enabled and:[view isDefault]
+! !
+
+!ButtonController methodsFor:'initialization'!
+
+controlInitialize
+    active := false.
+    entered := false.
+
+    "Created: 24.7.1997 / 14:58:28 / cg"
+    "Modified: 24.7.1997 / 14:59:06 / cg"
+!
+
+initialize
+    super initialize.
+
+    enableChannel := ValueHolder with:true.
+    enableChannel onChangeSend:#enableStateChanged to:self.
+
+    active := false.
+    pressed := false.
+    entered := false.
+    autoRepeat := false.
+    initialDelay := self class defaultInitialDelay.
+    repeatDelay := self class defaultRepeatDelay.
+    isTriggerOnDown := false.
+    isToggle := isRadio := false.
+
+    "Modified: / 21.5.1998 / 03:07:02 / cg"
+!
+
+reinitialize
+    active := false.
+    (isToggle or:[isRadio]) ifFalse:[
+        pressed := false.
+    ].
+    entered := false.
+
+    "Modified: / 1.3.2000 / 15:17:10 / cg"
+!
+
+release
+    "release all dependencies"
+
+    enableChannel notNil ifTrue:[
+        enableChannel retractInterestsFor:self.
+        enableChannel := nil.
+    ].
+    super release
+! !
+
+!ButtonController class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ButtonController.st,v 1.77 2013-01-17 10:42:02 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CheckLabel.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,87 @@
+"
+ COPYRIGHT (c) 1998 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Label subclass:#CheckLabel
+	instanceVariableNames:'hasFocus'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!CheckLabel class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1998 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+!
+
+documentation
+"
+    used for labels in checkBoxes;
+    the only added functionality is the focus-frame
+    drawn around.
+    This is used with win95 styles only.
+"
+! !
+
+!CheckLabel methodsFor:'accessing'!
+
+hasFocus:something
+    "set the value of the instance variable 'hasFocus' (automatically generated)"
+
+    hasFocus := something.
+
+    "Created: / 17.9.1998 / 14:17:51 / cg"
+! !
+
+!CheckLabel methodsFor:'queries'!
+
+hasFocus
+    "return the value of the instance variable 'hasFocus' (automatically generated)"
+
+    ^ hasFocus
+
+    "Created: / 17.9.1998 / 14:17:51 / cg"
+! !
+
+!CheckLabel methodsFor:'redrawing'!
+
+drawWith:fg and:bg
+    super drawWith:fg and:bg.
+    hasFocus == true ifTrue:[
+        (styleSheet at:#focusHighlightStyle) == #win95 ifTrue:[
+            self windowGroup focusCameByTab ifTrue:[
+                self drawWin95FocusFrame
+            ]
+        ]
+    ].
+
+    "Created: / 17.9.1998 / 14:16:07 / cg"
+    "Modified: / 17.9.1998 / 14:17:40 / cg"
+! !
+
+!CheckLabel class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/CheckLabel.st,v 1.4 2008-07-22 20:50:05 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CheckToggle.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,843 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Toggle subclass:#CheckToggle
+	instanceVariableNames:'isFlat'
+	classVariableNames:'DefaultCheckForm DefaultCheckColor DefaultActiveFGColor
+		DefaultActiveBGColor DefaultFGColor DefaultBGColor
+		DefaultActiveLevel DefaultPassiveLevel DefaultBorderWidth
+		LabelOverMargin DefaultActiveImage DefaultPassiveImage
+		DefaultDisabledImage DefaultDisabledActiveImage
+		DefaultDisabledPassiveImage DefaultEnteredActiveImage
+		DefaultEnteredPassiveImage'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!CheckToggle class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    CheckButtons are like Toggles in toggling their state when pressed.
+    However, they show an ok-marker if on; nothing if off.
+    CheckButtons are mostly used as part of a checkBox (since normally,
+    you want to have some label along the check) and often grouped for
+    many-in-many or one-in-many setups.
+
+    [StyleSheet values:]
+
+        checkToggleCheckColor   <Color>         color to draw check-image with.
+                                                defaults to value of #buttonActiveForegroundColor.
+
+        checkToggleActiveBackgroundColor        background color to draw active checki-image with
+        checkToggleForegroundColor              foreground color to use if off
+        checkToggleBackgroundColor              background color to use if off
+
+        checkToggleBitmapFile   <String>        name of bitmap file for check-image
+
+        checkToggleStyle        <Symbol>        default checkForm style.
+                                                used if above is nil or file not readable
+                                                can be #cross or #check; defaults to #check 
+
+        checkToggleAvtiveLevel  <Number>        active level - defaults to value of #buttonPassiveLevel
+        checkTogglePassiveLevel <Number>        active level - defaults to value of #buttonPassiveLevel
+        checkToggleBorderWidth  <Number>        borderWidth - defaults buttons default
+
+        checkToggleActiveImage  <Image>         image to draw when active; if non-nil,
+                                                this overwrites activeColor & bitmapFile above.
+
+        checkTogglePassiveImage <Image>         image to draw when passive; if non-nil,
+                                                this overwrites passiveColor & bitmapFile above.
+
+    (if not set in the styleSheet, Toggle values are taken)
+
+    See examples.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        CheckBox RadioButton RadioButtonGroup Toggle Button
+        Dialog
+        ValueHolder TriggerValue
+        Block
+"
+!
+
+examples 
+"
+    checkToggle alone:
+                                                                        [exBegin]
+        |top check|
+
+        top := StandardSystemView new.
+        top extent:100@100.
+
+        check := CheckToggle in:top.
+        check origin:10@10.
+
+        top open
+                                                                        [exEnd]
+
+
+    give it an action:
+                                                                        [exBegin]
+        |top check|
+
+        top := StandardSystemView new.
+        top extent:100@100.
+
+        check := CheckToggle in:top.
+        check origin:10@10.
+        check action:[:value | Transcript showCR:'changed to: ' , value printString].
+
+        top open
+                                                                        [exEnd]
+
+
+    give it a model:
+                                                                        [exBegin]
+        |top check model|
+
+        model := false asValue.
+
+        top := StandardSystemView new.
+        top extent:100@100.
+
+        check := CheckToggle in:top.
+        check origin:10@10.
+        check model:model.
+
+        top openModal.
+
+        Transcript showCR:'value after closing box: ' , model value printString
+                                                                        [exEnd]
+
+
+    enableChannel & model:
+                                                                        [exBegin]
+        |top check1 check2 enableHolder model|
+
+        enableHolder := false asValue.
+        model := false asValue.
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        check1 := CheckToggle in:top.
+        check1 origin:10@10.
+        check1 model:enableHolder.
+        (Label label:'Enable' in:top) origin:30@10.
+
+        check2 := CheckToggle in:top.
+        check2 origin:10@30.
+        check2 model:model.
+        check2 enableChannel:enableHolder.
+        (Label label:'Model' in:top) origin:30@30.
+
+        top open.
+                                                                        [exEnd]
+
+
+    multiple checks on a single model (with different change selectors):
+    (using a checkBox here, for the demonstration ...)
+    (this is a typical many-in-many setup)
+                                                                        [exBegin]
+        |top model panel ext1 ext2
+         readFlag writeFlag executeFlag|
+
+        readFlag := writeFlag := true.
+        executeFlag := false.
+
+        model := Plug new.
+        model respondTo:#read with:[readFlag].
+        model respondTo:#write with:[writeFlag].
+        model respondTo:#execute with:[executeFlag].
+        model respondTo:#read: with:[:val | readFlag := val].
+        model respondTo:#write: with:[:val | writeFlag := val].
+        model respondTo:#execute: with:[:val | executeFlag := val].
+
+        top := StandardSystemView new.
+        top extent:200@200.
+        top label:'File permissions:'.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        panel horizontalLayout:#leftSpace.
+
+        #(read write execute) do:[:sym |
+            |check|
+
+            check := CheckBox in:panel.
+            check label:sym.
+            check model:model; aspect:sym; changeMessage:(sym , ':') asSymbol.
+        ].
+
+        top openModal.
+
+        Transcript showCR:'settings after closing box:'.
+        Transcript showCR:'  read -> ' , readFlag printString.
+        Transcript showCR:'  write -> ' , writeFlag printString.
+        Transcript showCR:'  execute -> ' , executeFlag printString.
+                                                                        [exEnd]
+
+
+    checkToggles in a group - now, they have RadioButton behavior.
+    (this is a typical one-in-many setup)
+                                                                        [exBegin]
+        |top panel check1 check2 check3 grp|
+
+        top := StandardSystemView new.
+        top extent:200@300.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        check1 := CheckToggle in:panel.
+        check2 := CheckToggle in:panel.
+        check3 := CheckToggle in:panel.
+
+        grp := RadioButtonGroup new.
+        grp add:check1.
+        grp add:check2.
+        grp add:check3.
+
+        top open
+                                                                        [exEnd]
+
+
+     Channel operation 
+     -----------------
+
+       enabling other toggles via a toggle
+                                                                        [exBegin]
+        |top panel t enableChannel|
+
+        top := StandardSystemView new.
+        top extent:(400 @ 200).
+
+        panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        enableChannel := false asValue.
+
+        1 to:10 do:[:i |
+            t := CheckToggle in:panel.
+            t enableChannel:enableChannel.
+        ].
+
+        t := Toggle in:panel.
+        t activeLogo:'enabled'; passiveLogo:'disabled'.
+        t pressChannel:enableChannel.
+
+        top open
+                                                                        [exEnd]
+"
+! !
+
+!CheckToggle class methodsFor:'defaults'!
+
+checkBitsForStyle:aStyleSymbol
+    "helper & public access to useful checkToggle images"
+
+    aStyleSymbol == #cross ifTrue:[
+        ^ #[2r10000000 2r00000001
+            2r01000000 2r00000010
+            2r00100000 2r00000100
+            2r00010000 2r00001000
+            2r00001000 2r00010000
+            2r00000100 2r00100000
+            2r00000010 2r01000000
+            2r00000001 2r10000000
+            2r00000001 2r10000000
+            2r00000010 2r01000000
+            2r00000100 2r00100000
+            2r00001000 2r00010000
+            2r00010000 2r00001000
+            2r00100000 2r00000100
+            2r01000000 2r00000010
+            2r10000000 2r00000001]
+    ].
+    aStyleSymbol == #borderedCross ifTrue:[
+        ^ #[2r11111111 2r11111111
+            2r11000000 2r00000011
+            2r10100000 2r00000101
+            2r10010000 2r00001001
+            2r10001000 2r00010001
+            2r10000100 2r00100001
+            2r10000010 2r01000001
+            2r10000001 2r10000001
+            2r10000001 2r10000001
+            2r10000010 2r01000001
+            2r10000100 2r00100001
+            2r10001000 2r00010001
+            2r10010000 2r00001001
+            2r10100000 2r00000101
+            2r11000000 2r00000011
+            2r11111111 2r11111111]
+    ].
+    aStyleSymbol == #fatcross ifTrue:[
+        ^ #[2r11000000 2r00000011
+            2r11100000 2r00000111
+            2r01110000 2r00001110
+            2r00111000 2r00011100
+            2r00011100 2r00111000
+            2r00001110 2r01110000
+            2r00000111 2r11100000
+            2r00000011 2r11000000
+            2r00000011 2r11000000
+            2r00000111 2r11100000
+            2r00001110 2r01110000
+            2r00011100 2r00111000
+            2r00111000 2r00011100
+            2r01110000 2r00001110
+            2r11100000 2r00000111
+            2r11000000 2r00000011]
+    ].
+    aStyleSymbol == #borderedFatcross ifTrue:[
+        ^ #[2r11111111 2r11111111
+            2r11100000 2r00000111
+            2r11110000 2r00001111
+            2r10111000 2r00011101
+            2r10011100 2r00111001
+            2r10001110 2r01110001
+            2r10000111 2r11100001
+            2r10000011 2r11000001
+            2r10000011 2r11000001
+            2r10000111 2r11100001
+            2r10001110 2r01110001
+            2r10011100 2r00111001
+            2r10111000 2r00011101
+            2r11110000 2r00001111
+            2r11100000 2r00000111
+            2r11111111 2r11111111]
+    ].
+    aStyleSymbol == #border ifTrue:[
+        ^ #[2r11111111 2r11111111
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r10000000 2r00000001
+            2r11111111 2r11111111]
+    ].
+    ^ #[2r00000000 2r00000000
+        2r00000000 2r00000010
+        2r00000000 2r00000010
+        2r00000000 2r00000100
+        2r00000000 2r00000100
+        2r00000000 2r00001000
+        2r00000000 2r00001000
+        2r00000000 2r00010000
+        2r01000000 2r00110000
+        2r00100000 2r01100000
+        2r00011000 2r01100000
+        2r00001110 2r11000000
+        2r00000111 2r11000000
+        2r00000011 2r10000000
+        2r00000001 2r10000000
+        2r00000000 2r00000000]
+
+    "
+     self checkBitsForStyle:#cross
+     self checkBitsForStyle:#fatcross
+     self checkBitsForStyle:#borderedCross
+     self checkBitsForStyle:#borderedFatcross
+    "
+
+    "Modified: 7.3.1997 / 21:15:13 / cg"
+!
+
+checkFormOn:aDevice
+    "return the form used when checkToggle is turned on.
+     Provided as public entry, to allow other views
+     to share the same check-image."
+
+    ^ DefaultCheckForm onDevice:aDevice.
+
+    "
+     CheckToggle checkFormOn:Display
+    "
+!
+
+checkImageForStyle:aStyleSymbol
+    "helper & public access to useful checkToggle images"
+
+    |bits|
+
+    bits := self checkBitsForStyle:aStyleSymbol.
+    ^ Form width:16 height:16 fromArray:bits onDevice:Display                                           
+
+    "
+     self checkImageForStyle:#cross
+     self checkImageForStyle:#fatcross
+     self checkImageForStyle:#borderedCross
+     self checkImageForStyle:#borderedFatcross
+    "
+!
+
+smallCheckBitsForStyle:aStyleSymbol
+    "helper & public access to useful checkToggle images"
+
+    aStyleSymbol == #cross ifTrue:[
+        ^ #[
+            2r10000000 2r00010000
+            2r01000000 2r00100000
+            2r00100000 2r01000000
+            2r00010000 2r10000000
+            2r00001001 2r00000000
+            2r00000110 2r00000000
+            2r00000110 2r00000000
+            2r00001001 2r00000000
+            2r00010000 2r10000000
+            2r00100000 2r01000000
+            2r01000000 2r00100000
+            2r10000000 2r00010000
+           ]
+    ].
+    aStyleSymbol == #fatcross ifTrue:[
+        ^ #[
+            2r11000000 2r00110000
+            2r01100000 2r01100000
+            2r00110000 2r11000000
+            2r00011001 2r10000000
+            2r00001111 2r00000000
+            2r00000110 2r00000000
+            2r00000110 2r00000000
+            2r00001111 2r00000000
+            2r00011001 2r10000000
+            2r00110000 2r11000000
+            2r01100000 2r01100000
+            2r11000000 2r00110000
+           ]
+    ].
+    aStyleSymbol == #borderedCross ifTrue:[
+        ^ #[
+            2r11111111 2r11110000
+            2r11000000 2r00110000
+            2r10100000 2r01010000
+            2r10010000 2r10010000
+            2r10001001 2r00010000
+            2r10000110 2r00010000
+            2r10000110 2r00010000
+            2r10001001 2r00010000
+            2r10010000 2r10010000
+            2r10100000 2r01010000
+            2r11000000 2r00110000
+            2r11111111 2r11110000
+           ]
+    ].
+    aStyleSymbol == #borderedFatcross ifTrue:[
+        ^ #[
+            2r11111111 2r11110000
+            2r11100000 2r01110000
+            2r10110000 2r11010000
+            2r10011001 2r10010000
+            2r10001111 2r00010000
+            2r10000110 2r00010000
+            2r10000110 2r00010000
+            2r10001111 2r00010000
+            2r10011001 2r10010000
+            2r10110000 2r11010000
+            2r11100000 2r01110000
+            2r11111111 2r11110000
+           ]
+    ].
+    aStyleSymbol == #border ifTrue:[
+        ^ #[
+            2r11111111 2r11110000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r10000000 2r00010000
+            2r11111111 2r11110000
+           ]
+    ].
+    ^ #[
+        2r00000000 2r00000000
+        2r00000000 2r00001000
+        2r00000000 2r00001000
+        2r00000000 2r00010000
+        2r01000000 2r00110000
+        2r00100000 2r01100000
+        2r00011000 2r01100000
+        2r00001110 2r11000000
+        2r00000111 2r11000000
+        2r00000011 2r10000000
+        2r00000001 2r10000000
+        2r00000000 2r00000000
+       ]
+
+    "
+     self smallCheckBitsForStyle:#cross
+     self smallCheckBitsForStyle:#fatcross
+     self smallCheckBitsForStyle:#borderedCross
+     self smallCheckBitsForStyle:#borderedFatcross
+    "
+
+    "Modified: 7.3.1997 / 21:15:13 / cg"
+!
+
+smallCheckImageForStyle:aStyleSymbol
+    "helper & public access to useful checkToggle images"
+
+    |bits|
+
+    bits := self smallCheckBitsForStyle:aStyleSymbol.
+    ^ Form width:12 height:12 fromArray:bits onDevice:Display                                           
+
+    "
+     self smallCheckImageForStyle:#cross
+     self smallCheckImageForStyle:#fatcross
+     self smallCheckImageForStyle:#borderedCross
+     self smallCheckImageForStyle:#borderedFatcross
+    "
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'checkToggle.checkColor'
+                       #'checkToggle.backgroundColor' #'checkToggle.foregroundColor'
+                       #'checkToggle.activeBackgroundColor' #'checkToggle.activeForegroundColor'
+                       #'checkToggle.activeLevel' #'checkToggle.passiveLevel'
+                       #'checkToggle.activeImage' 
+                       #'checkToggle.passiveImage'
+                       #'checkToggle.disabledImage'
+                       #'checkToggle.borderWidth' 
+                       #'checkToggle.bitmapFile'
+                       #'checkToggle.labelOverMargin' 
+                       #'checkToggle.style')>
+
+    |checkFileName checkStyle|
+
+    DefaultCheckColor    := StyleSheet colorAt:#'checkToggle.checkColor'.
+    DefaultFGColor       := StyleSheet colorAt:#'checkToggle.foregroundColor'.
+    DefaultBGColor       := StyleSheet colorAt:#'checkToggle.backgroundColor'.
+    DefaultActiveFGColor := StyleSheet colorAt:#'checkToggle.activeForegroundColor'.
+    DefaultActiveBGColor := StyleSheet colorAt:#'checkToggle.activeBackgroundColor'.
+    DefaultActiveLevel   := StyleSheet at:#'checkToggle.activeLevel'.
+    DefaultPassiveLevel  := StyleSheet at:#'checkToggle.passiveLevel'.
+    DefaultBorderWidth   := StyleSheet at:#'checkToggle.borderWidth'.
+    LabelOverMargin      := StyleSheet at:#'checkToggle.labelOverMargin' default:false.
+
+    DefaultCheckForm := nil.
+    checkFileName := StyleSheet at:#'checkToggle.bitmapFile' default:'CheckOn.xbm'.
+    checkFileName notNil ifTrue:[
+        DefaultCheckForm := Smalltalk imageFromFileNamed:checkFileName forClass:self.
+    ].
+    DefaultCheckForm isNil ifTrue:[
+        checkStyle := StyleSheet at:#'checkToggle.style' default:#check.
+        DefaultCheckForm := self checkImageForStyle:checkStyle
+    ].
+    StyleSheet name == #os2 ifTrue: [
+        DefaultCheckForm := DefaultCheckForm subImageIn: (0@0 extent: 15@15)
+    ].
+    DefaultCheckForm := DefaultCheckForm onDevice:Display.
+
+    DefaultActiveImage := StyleSheet at:#'checkToggle.activeImage'.
+    DefaultPassiveImage := StyleSheet at:#'checkToggle.passiveImage'.
+    DefaultDisabledActiveImage := StyleSheet at:#'checkToggle.disabledActiveImage'.
+    DefaultDisabledPassiveImage := StyleSheet at:#'checkToggle.disabledPassiveImage'.
+    DefaultEnteredActiveImage := StyleSheet at:#'checkToggle.enteredActiveImage'.
+    DefaultEnteredPassiveImage := StyleSheet at:#'checkToggle.enteredPassiveImage'.
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: / 6.9.1998 / 21:24:48 / cg"
+! !
+
+!CheckToggle methodsFor:'accessing'!
+
+isFlat
+    isFlat isNil ifTrue:[
+        isFlat := false
+    ].
+    ^ isFlat
+!
+
+isFlat:something
+    isFlat := something.
+! !
+
+!CheckToggle methodsFor:'accessing-look'!
+
+allViewBackground:something if:condition
+    (condition value:self) ifTrue:[
+        (activeLogo notNil 
+        and:[activeLogo depth > 1
+        and:[styleSheet name ~~ #iris
+        and:[styleSheet name ~~ #winXP]]]) ifTrue:[
+            self viewBackground:something.
+            self backgroundColor:something.
+            enteredBgColor := activeBgColor := something.
+        ]
+    ]
+! !
+
+!CheckToggle methodsFor:'initialization'!
+
+initStyle
+    "setup viewStyle specifics"
+
+    <resource: #style (#'checkToggle.disabledForegroundColor'
+                       #'checkToggle.enabledBackgroundColor' 
+                       )>
+
+    |enabledBgColor graphicsDevice|
+
+    super initStyle.
+    graphicsDevice := self graphicsDevice.
+
+    onLevel := offLevel.
+    DefaultActiveLevel notNil ifTrue:[onLevel := DefaultActiveLevel].
+    DefaultPassiveLevel notNil ifTrue:[offLevel := DefaultPassiveLevel].
+
+    activeLogo := DefaultCheckForm onDevice:graphicsDevice.
+    passiveLogo := nil.
+
+    DefaultActiveImage notNil ifTrue:[
+        activeLogo := DefaultActiveImage onDevice:graphicsDevice.
+    ].
+    DefaultPassiveImage notNil ifTrue:[
+        passiveLogo := DefaultPassiveImage onDevice:graphicsDevice.
+    ].
+
+    disabledFgColor := styleSheet at:#'checkToggle.disabledForegroundColor' default:disabledFgColor.
+
+    DefaultActiveFGColor notNil ifTrue:[
+        self activeForegroundColor:DefaultActiveFGColor
+    ].
+    DefaultCheckColor notNil ifTrue:[
+        self activeForegroundColor:DefaultCheckColor
+    ].
+    DefaultActiveBGColor notNil ifTrue:[
+        self activeBackgroundColor:DefaultActiveBGColor
+    ].
+    DefaultFGColor notNil ifTrue:[
+        self foregroundColor:DefaultFGColor
+    ].
+    DefaultBGColor notNil ifTrue:[
+        self backgroundColor:DefaultBGColor.
+        self viewBackground:DefaultBGColor.
+    ].
+
+    showLamp := false.
+
+    DefaultBorderWidth notNil ifTrue:[self borderWidth:DefaultBorderWidth].
+
+    offLevel ~~ level ifTrue:[self level:offLevel].
+
+"/    enabledBgColor := styleSheet at:#'checkToggle.enabledBackgroundColor' default:nil.
+"/    enabledBgColor notNil ifTrue:[
+"/        bgColor := enabledBgColor.
+"/    ].
+
+    "Modified: / 19.5.1998 / 15:50:29 / cg"
+!
+
+initialize
+    super initialize.
+    passiveLogo := DefaultPassiveImage.
+    self label:activeLogo. "/ to let me compute some defaultExtent
+
+    "Modified: / 19.5.1998 / 15:51:49 / cg"
+! !
+
+!CheckToggle methodsFor:'queries'!
+
+label: something
+
+    something isString ifFalse: [super label: something]
+!
+
+preferredExtent
+    |pref|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+    "/ If I have a frozen extent value...
+    fixSize ifTrue:[
+        ^ self extent
+    ].
+
+    pref := super preferredExtent.
+    LabelOverMargin ifTrue:[
+        pref := pref - (margin*2)
+    ].
+
+    ^ pref
+
+    "Modified: 7.3.1997 / 17:52:53 / cg"
+! !
+
+!CheckToggle methodsFor:'redrawing'!
+
+drawEdges
+
+    self isFlat ifTrue:[
+        self paint: Color black.
+        self displayRectangleX:0 y:0 width:width height:height.
+        ^self.
+    ].
+    LabelOverMargin ifTrue:[
+        (logo isNil or:[logo isImageOrForm not]) ifTrue:[
+            self deviceClippingRectangle:nil.
+            self clearRectangleX:0 y:0 width:width height:height.
+        ].
+    ].
+    super drawEdges.
+!
+
+drawWith:fg and:bg
+    |bgColorUsed|
+
+    bgColorUsed := bg.
+    logo := self logoToDisplay.
+
+    self enabled ifFalse:[
+        bgColorUsed := View defaultViewBackgroundColor. "/ viewBackground.
+    ] ifTrue:[
+        controller pressed ifTrue:[
+            self isFlat ifTrue:[
+                bgColorUsed := bgColor.
+            ] ifFalse:[
+                bgColorUsed := activeBgColor
+            ].
+        ] ifFalse:[
+            bgColorUsed := bgColor.
+        ].
+
+        (controller entered 
+        and:[enteredBgColor notNil]) ifTrue:[
+            bgColorUsed := enteredBgColor
+        ] ifFalse:[
+    "/        bgColorUsed := bgColor 
+        ].
+    ].
+
+    super drawWith:fg and:bgColorUsed 
+
+    "Modified: 22.9.1995 / 15:45:02 / claus"
+    "Modified: 1.4.1997 / 13:35:48 / cg"
+!
+
+edgeDrawn:which
+    "redraw my logo if it overlaps the edge"
+
+    LabelOverMargin ifTrue:[
+        (logo notNil and:[logo isImageOrForm]) ifTrue:[
+            self paint:fgColor on:bgColor.
+            self clippingRectangle:nil.
+            self displayForm:logo x:labelOriginX y:labelOriginY.
+            self deviceClippingRectangle:innerClipRect
+       ]
+    ].
+
+    "Modified: / 25.5.1999 / 16:10:10 / cg"
+!
+
+logoToDisplay                        
+    |graphicsDevice|
+
+    graphicsDevice := self graphicsDevice.
+    controller enabled ifFalse:[       
+        (controller pressed) ifTrue:[
+            DefaultDisabledActiveImage notNil ifTrue:[
+                activeLogo := enteredLogo := DefaultDisabledActiveImage onDevice:graphicsDevice.
+                ^ activeLogo.
+            ].
+        ] ifFalse:[
+            DefaultDisabledPassiveImage notNil ifTrue:[
+                passiveLogo := enteredLogo := DefaultDisabledPassiveImage onDevice:graphicsDevice.
+                ^ passiveLogo.
+            ].
+        ].
+    ] ifTrue:[
+        controller entered ifTrue:[
+            (controller pressed) ifTrue:[
+                DefaultEnteredActiveImage notNil ifTrue:[
+                    activeLogo := enteredLogo := DefaultEnteredActiveImage onDevice:graphicsDevice.
+                    ^ activeLogo.
+                ].
+            ] ifFalse:[
+                DefaultEnteredPassiveImage notNil ifTrue:[
+                    passiveLogo := enteredLogo := DefaultEnteredPassiveImage onDevice:graphicsDevice.
+                    ^ passiveLogo.
+                ].
+            ].
+        ] ifFalse:[
+            (controller pressed) ifTrue:[
+                DefaultActiveImage notNil ifTrue:[
+                    activeLogo := enteredLogo := DefaultActiveImage onDevice:graphicsDevice.
+                    ^ activeLogo.
+                ].
+            ] ifFalse:[
+                DefaultPassiveImage notNil ifTrue:[
+                    passiveLogo := enteredLogo := DefaultPassiveImage onDevice:graphicsDevice.
+                    ^ passiveLogo.
+                ].
+            ].
+        ].
+    ].
+
+    controller pressed ifTrue:[
+        ^ activeLogo.
+    ].
+    ^ passiveLogo.
+! !
+
+!CheckToggle class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/CheckToggle.st,v 1.72 2014-02-18 14:27:08 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/CheckToggle.st,v 1.72 2014-02-18 14:27:08 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ClickMenuView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,135 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+MenuView subclass:#ClickMenuView
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Menus'
+!
+
+!ClickMenuView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    ClickMenuViews are like menuViews, but deselects automatically
+    after clicked on an entry.
+
+    ClickMenuViews can be used as persistent menus (i.e. non-popping); 
+    for example, the old launcher uses an instance of ClickMenuView.
+
+    CAVEAT:
+        to support a better NextStep look, some popUpMenus should 
+        become automatically a clickMenu ... (really ?)
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        PopUpMenu PullDownMenu
+        MenuView
+"
+!
+
+examples 
+"
+    stupid example:
+                                                                        [exBegin]
+        |top menu1 menu2 application|
+
+        application := Plug new.
+        application respondTo:#foo
+                         with:[Transcript showCR:'foo'].
+        application respondTo:#bar 
+                         with:[Transcript showCR:'bar'].
+        application respondTo:#baz 
+                         with:[Transcript showCR:'baz'].
+        application respondTo:#more1 
+                         with:[Transcript showCR:'more1'].
+        application respondTo:#more2 
+                         with:[Transcript showCR:'more2'].
+        application respondTo:#more3 
+                         with:[Transcript showCR:'more3'].
+        application respondTo:#quit 
+                         with:[top destroy].
+
+        top := StandardSystemView new.
+        menu1 := ClickMenuView 
+                    labels:#(
+                             'foo'
+                             'bar'
+                             'baz '
+                             '-'
+                             'more foo'
+                             '='
+                             'quit'
+                            )
+                    selectors:#(
+                            foo
+                            bar
+                            baz
+                            nil
+                            moreFoo
+                            nil
+                            quit
+                           )
+                    receiver:application.
+
+        menu1 subMenuAt:#moreFoo put:(
+            PopUpMenu labels:#(
+                                'more1 '
+                                'more2 '
+                                'more3'
+                               )
+                   selectors:#(
+                                more1
+                                more2
+                                more3
+                               )
+        ).
+        menu1 resize; open.
+        top add:menu1.
+        top openWithExtent:(menu1 extent).
+                                                                        [exEnd]
+"
+! !
+
+!ClickMenuView methodsFor:'event handling'!
+
+buttonRelease:button x:x y:y
+    "redefined to automatically deselect on release"
+
+    super buttonRelease:button x:x y:y.
+    self setSelection:nil
+
+    "Modified: 25.5.1996 / 12:26:49 / cg"
+! !
+
+!ClickMenuView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ClickMenuView.st,v 1.13 1996-05-25 12:22:42 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CodeView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,339 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Workspace subclass:#CodeView
+	instanceVariableNames:'explainAction formatAction pointerOverWordAction'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Text'
+!
+
+!CodeView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a view for text which is known to be smalltalk code. 
+    It adds 'explain' to the menu, and defines another action: 
+      explainAction to be performed for explain.
+
+    This action is to be defined by the user of this view 
+    (i.e. usually the owning browser)
+
+    In addition, uncomment/comment are added to the controlMenu.
+    These are smalltalk specific - if you plan to edit other language code,
+    you need a different kind of CodeView for that.
+
+    If used with a model, accept sends the changeMsg to it (as defined in EditTextView).
+    (however, it is possible to define both changeMsg and acceptAction)
+
+    See how doIt/printIt/inspectIt are handled in the superclass: Workspace.
+
+    Caveat:
+        in this version, CodeView does not yet support MVC setups for doIt
+        and explain.
+        If required, simulate this by setting the doItAction and
+        explainAction, to notify the model manually about whats going on.
+
+    [instance variables:]
+        commentStrings          <Array>         an array with 2 entries;
+                                                the first defining the EOL-comment string,
+                                                the 2nd (another array) defining opening
+                                                and closing comment strings.
+                                                Default to ST/X comments,
+                                                can be changed in an instance for other
+                                                programming languages.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        Workspace EditTextView TextView
+"
+! !
+
+!CodeView class methodsFor:'others'!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/CodeView.st,v 1.66 2014-01-23 16:11:20 stefan Exp $'
+! !
+
+!CodeView methodsFor:'accessing'!
+
+explainAction:aBlock
+    "set the action to be performed on explain"
+
+    explainAction := aBlock
+!
+
+formatAction:aBlock
+    "set the action to be performed on format"
+
+    formatAction := aBlock
+
+    "Created: / 17.2.1998 / 17:05:13 / cg"
+!
+
+pointerOverWordAction:aBlock
+    pointerOverWordAction := aBlock.
+    pointerOverWordAction notNil ifTrue:[
+        self enableMotionEvents.
+    ] ifFalse:[
+        self disableMotionEvents
+    ]
+
+
+! !
+
+!CodeView methodsFor:'cursor handling'!
+
+cursorReturn
+    |wasOn line newCol |
+
+    "/ make Jan's enhancement dependent on
+    "/ the autoIndent-flag setting - to avoid confusing
+    "/ those who are used to the old behavior.
+    "/ for Jan: 
+    "/     autoIndent is configured in the settings-Editor dialog (for all new editors)
+    "/     or in the per-editor popup menu (misc)
+    "/ 
+    "/ and saved/restored with the userPreferences.
+
+    (autoIndent "self st80EditMode" not
+    or:[ cursorLine == 1
+    or:[ self sensor shiftDown]]) ifTrue:[
+        super cursorReturn.
+        ^ self.
+    ].
+    "/ autoIndent
+
+    wasOn := self hideCursor.
+"/
+"/    line := self listAt:cursorLine.
+"/    newCol := line size == 0
+"/                    ifTrue:[1]
+"/                    ifFalse:[line indexOfNonSeparator].
+"/    super cursorReturn.
+"/    line := self listAt:cursorLine.
+"/
+"/    newCol := line size == 0
+"/                    ifTrue:[newCol]
+"/                    ifFalse:[line indexOfNonSeparator].
+
+    super cursorReturn.
+    newCol := (self leftIndentForLine:cursorLine)+1.
+
+    self setCursorCol:newCol.
+    self makeCursorVisibleAndShowCursor:wasOn
+
+    "Created: / 8.8.2004 / 18:59:55 / janfrog"
+    "Modified: / 8.8.2004 / 20:32:48 / janfrog"
+! !
+
+!CodeView methodsFor:'event handling'!
+
+buttonMotion:buttonState x:x y:y
+    |col line word|
+
+    pointerOverWordAction notNil ifTrue:[
+        buttonState == 0 ifTrue:[
+            line := self visibleLineOfY:y.
+            col := self colOfX:x inVisibleLine:line.
+            line := self visibleLineToAbsoluteLine:line.
+
+            self wordAtLine:line col:col do:[
+                :selectLine :beginCol :endLine :endCol :flag |
+
+                word := self listAt:selectLine from:beginCol to:endCol.
+                word notNil ifTrue:[
+                    pointerOverWordAction value:word value:line value:col
+                ]
+            ].
+            ^ self
+        ].
+    ].
+    super buttonMotion:buttonState x:x y:y
+!
+
+keyPress:key x:x y:y
+    "catch keyboard shortcuts"
+
+    <resource: #keyboard (#Format #Explain #Help)>
+
+    (key == #Format)  ifTrue:[self format. ^ self].
+    (key == #Explain) ifTrue:[self explain. ^ self].
+    (key == #Help)    ifTrue:[self explain. ^ self].
+
+    super keyPress:key x:x y:y
+
+    "Modified: / 17.2.1998 / 17:05:23 / cg"
+! !
+
+!CodeView methodsFor:'menu & menu actions'!
+
+accept
+    "redefined accept action;
+     save cursor and selection to allow restore in case of an error
+     (we are typically compiling here ... and the compiler may show
+     errors by highlighting them)"
+
+    acceptEnabled == false ifTrue:[
+        self beep.
+        ^ self
+    ].
+
+    codeStartPosition := 1.
+    [
+        AbortOperationRequest handle:[:ex |
+            self cursor:Cursor normal.
+            "redraw selection in normal color"
+            self selectFromLine:selectionStartLine col:selectionStartCol 
+                         toLine:selectionEndLine col:selectionEndCol.
+            self invalidate.
+            ex return
+        ] do:[
+            super accept.
+        ]
+    ] ensure:[
+        self cursor:Cursor normal.
+        "/ self unselect.
+    ]
+
+    "Modified: / 30-06-2011 / 19:41:39 / cg"
+!
+
+editMenu
+    "return the popUpMenu;
+     to make this independent from what is defined in superclasses,
+     get the superclass menu and add my functions."
+
+    <resource: #keyboard ( 
+                          #Accept #Explain #Format)>
+    <resource: #programMenu>
+
+    |m sub subsub sensor|
+
+    m := super editMenu.
+    ((sensor := self sensor) notNil and:[sensor ctrlDown and:[sensor shiftDown not]]) ifTrue:[
+        sub := m.
+        m := nil.
+    ] ifFalse:[
+        sub := m subMenuAt:#others.
+    ].
+
+    m notNil ifTrue:[
+        "
+         codeViews do support #accept
+         ... add it after #inspectIt
+        "
+        m 
+          addItemList:#(
+                ('-')
+                ('Accept'       accept          Accept)       
+            )
+          resources:resources  
+          after:#inspectIt.
+
+        (acceptEnabled == false 
+        or:[acceptAction isNil]) ifTrue:[
+            m disable:#accept
+        ].
+    ].
+
+    sub notNil ifTrue:[
+        "
+         and add #explain after $gotoLine in the extra menu
+        "
+        sub 
+          addItemList:#(
+                ('-')
+                ('Explain'       explain          Explain)       
+            )
+          resources:resources  
+          after:#gotoLine.
+
+        formatAction notNil ifTrue:[
+            subsub := sub subMenuAt:#tools.
+
+            subsub notNil ifTrue:[
+                subsub
+                  addItemList:#(
+                        ('Format'       format          Format)       
+                    )
+                  resources:resources  
+                  after:#indent.
+            ].
+        ].
+        (self hasSelection not
+        or:[explainAction isNil]) ifTrue:[
+            sub disable:#explain 
+        ].
+    ].
+    ^ m ? sub.
+
+    "Modified: / 12.11.2001 / 16:04:46 / cg"
+!
+
+explain
+    "explain action;
+     evaluate the explainBlock passing whole contents and 
+     selection as arguments."
+
+    |text|
+
+    explainAction notNil ifTrue:[
+	text := self selection.
+	text notNil ifTrue:[
+	    explainAction value:(self contents) value:(text asString)
+	]
+    ]
+!
+
+format
+    "format action;
+     evaluate the formatBlock passing whole contents as argument."
+
+    |text|
+
+    formatAction notNil ifTrue:[
+        text := self contents.
+        text notNil ifTrue:[
+            self 
+                undoableDo:[ formatAction value:(text asString) ]
+                info:'Format'
+        ]
+    ]
+
+    "Created: / 17.2.1998 / 17:06:18 / cg"
+    "Modified: / 17.2.1998 / 18:25:33 / cg"
+! !
+
+!CodeView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/CodeView.st,v 1.66 2014-01-23 16:11:20 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DialogBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,10158 @@
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+ModalBox subclass:#DialogBox
+	instanceVariableNames:'buttonPanel okButton okAction abortButton abortAction
+		acceptReturnAsOK yPosition leftIndent rightIndent addedComponents
+		inputFieldGroup acceptOnLeave acceptValue tabableElements
+		hideOnAccept acceptCheck needResize autoAccept focusToOKOnLeave
+		bindings namedComponents verticalPanel'
+	classVariableNames:'DefaultFocusToOKOnLeave AboutToOpenBoxNotificationSignal'
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!DialogBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this class implements the common behavior of dialogboxes.
+
+    DialogBox is also a superclass of many other boxes - see InfoBox,
+    WarningBox, YesNoBox etc. for concrete examples.
+    Most of them simply add buttons or other elements.
+
+    For programmatically created boxes, instances support adding of components
+    in a top-to-bottom fashion, and also keep track of added text-fields and,
+    since they are most common, automatically create an EnterFieldGroup for
+    them.
+
+    Caveat: 
+        more adding support is required - especially for row-wise construction.
+        The programmatic interface is best suited for row-wise
+        arranged components; laying out elements in columns is a bit
+        complicate - for complicated dialogs, it may be better to not use
+        the automatic arrangement, but instead give explicit layouts to
+        the components (in a subclass) or better use the UIPainter.
+
+    Compatibility note:
+        For ST-80 compatibility, DialogBox is also accessable under
+        the global named 'Dialog' (which is the name of an ST-80 class,
+        providing a very similar protocol).
+        This may lead to confusion, if DialogBox is recompiled - you have
+        to manually assign Dialog again to refer to the new DialogBox class.
+        In future versions of ST/X, DialogBox may be renamed to Dialog.
+
+    Historic note:
+        originally, ST/X had separate classes for the various entry methods;
+        there were YesNoBox, EnterBox, InfoBox and so on.
+        ST-80 has all this defined in the common Dialog.
+        Therefore, for compatibility, many ST/X methods defined here in Dialogs 
+        class protocol simply dispatch to some other boxes class method.
+        In the future, those existing subclasses' functionality is going to
+        be moved full into Dialog, and the subclasses will be replaced by dummy
+        delegators. (They will be kept for backward compatibility, though).
+
+
+    [instance variables:]
+
+        buttonPanel      <PanelView>    contains the button(s)
+
+        okButton         <Button>       the ok-Button
+
+        okAction         <Block>        the action to be performed when ok is pressed,
+                                        or return is pressed.
+
+        acceptReturnAsOK <Boolean>      if true, pressing the return-key counts
+                                        as if ok was pressed. Default is true.
+
+        abortButton      <Button>       the cancel-Button
+
+        abortAction      <Block>        the action to be performed when cancel is
+                                        pressed.
+
+        yPosisition      <Integer>      current y position when adding components
+
+        leftIndent       <Integer>      left inset to use when adding components
+
+        rightIndent      <Integer>      right inset to use when adding components
+
+        addedComponents  <Collection>   programmatically added components
+
+        inputFieldGroup  <EnterFieldGroup>   
+                                        for added input fields
+
+        acceptOnLeave    <Boolean>      if true (the default) and there are 
+                                        tabable inputFields, accept and close when
+                                        the last field is left. If false, the ok
+                                        button must be pressed to close the box.
+
+        acceptedValue    v(<Boolean>)   valueHolder on a boolean
+                                        after close: holds true if box was accepted
+                                        (i.e. ok-Button was pressed), false if box was
+                                        closed via cancel or window manager.
+
+        autoAccept       Boolean        if true, pressing ok (or return)
+                                        sends #accept to all subcomponents.
+                                        I.e. all subfields update their models
+                                        first. The default is true.
+
+        variablePanel   nil|VPanel      an optional additional panel to be filled dynamically
+                                        in an aboutToOpenNotification hook.
+
+    For compatibility with ST-80, this class is also available under
+    the global names DialogView and Dialog (see patches file).
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        Button CheckToggle Toggle
+        EditField SelectionInListView FileSelectionList
+        FramedBox Separator
+        ( introduction to view programming :html: programming/viewintro.html )
+"
+!
+
+examples
+"
+    historically, DialogBox was used as an abstract class as a base for InfoBox, 
+    YesNoBox etc. 
+    However, the programmatic construction protocol (#addComponent:)
+    now allows those classes to be easily replaced and future versions of
+    ST/X may do this and make those subclasses obsolete.
+    However, dummy stubs will remain to exist for backward compatibility
+    (i.e. do not fear using YesNoBox, EnterBox etc.)
+
+    For most simple standard dialogs, there are ready to use
+    methods in the class protocol.
+
+    For example:
+
+      info & warnings:
+                                                                        [exBegin]
+        Dialog information:'hi there'
+                                                                        [exEnd]
+                                                                        [exBegin]
+        Dialog warn:'oops'
+                                                                        [exEnd]
+
+
+      yes/no questions:
+                                                                        [exBegin]
+        (Dialog confirm:'is this simple ?')
+        ifTrue:[
+            Transcript showCR:'thats what I expected'
+        ] ifFalse:[
+            Transcript showCR:'read more examples and documentation'
+        ]
+                                                                        [exEnd]
+
+
+      yes/no question with cancel option:
+                                                                        [exBegin]
+        |answer|
+
+        answer := Dialog confirmWithCancel:'is this simple ?'.
+        answer isNil ifTrue:[
+            Transcript showCR:'no easy decision'
+        ] ifFalse:[
+            answer ifTrue:[
+                Transcript showCR:'thats what I expected'
+            ] ifFalse:[
+                Transcript showCR:'read more examples and documentation'
+            ]
+        ]
+                                                                        [exEnd]
+
+
+      asking for a string:
+                                                                        [exBegin]
+        |s|
+
+        s := Dialog request:'enter your name, please:'.
+        s notEmpty ifTrue:[
+            Transcript showCR:'you entered: ' , s.
+        ]
+                                                                        [exEnd]
+
+
+      asking for a string with given default:
+                                                                        [exBegin]
+        |s|
+
+        s := Dialog 
+                request:'enter your name, please:'
+                initialAnswer:(OperatingSystem getLoginName).
+        s notEmpty ifTrue:[
+            Transcript showCR:'you entered: ' , s.
+        ]
+                                                                        [exEnd]
+
+
+      asking for a filename:
+                                                                        [exBegin]
+        |s|
+
+        s := Dialog 
+                requestFileName:'select a file, please:'
+                default:''.
+        Transcript show:'you entered: '; showCR:s.
+                                                                        [exEnd]
+
+
+      with a namefiler pattern:
+                                                                        [exBegin]
+        |s|
+
+        s := Dialog 
+                requestFileName:'select a file, please:'
+                default:''
+                pattern:'*.rc'.
+        Transcript show:'you entered: '; showCR:s.
+                                                                        [exEnd]
+
+
+      another namefiler pattern:
+                                                                        [exBegin]
+        |s|
+
+        s := Dialog 
+                requestFileName:'select a file, please:'
+                default:''
+                pattern:'*.rc;*.st;*.h'.
+        Transcript show:'you entered: '; showCR:s.
+                                                                        [exEnd]
+
+
+      with changed button label and pattern:
+                                                                        [exBegin]
+        |s|
+
+        s := Dialog 
+                requestFileName:'select a file, please:'
+                default:''
+                ok:'show'
+                abort:'cancel'
+                pattern:'*.rc'.
+        Transcript show:'you entered: '; showCR:s.
+                                                                        [exEnd]
+
+
+      asking for a password:
+                                                                        [exBegin]
+        |s|
+
+        s := Dialog 
+                requestPassword:'enter your secret, please:'.
+        Transcript show:'you entered: '; showCR:s.
+                                                                        [exEnd]
+
+      multiple choice dialogs:
+                                                                        [exBegin]
+        Dialog 
+           choose:'choose any' 
+           fromList:nil
+           values:nil
+           buttons:#('one' 'two' 'three' 'four') 
+           values:#(1 2 3 4) 
+           lines:nil
+           cancel:nil
+                                                                        [exEnd]
+
+      multiple choice dialog, with list & buttons:
+                                                                        [exBegin]
+         Transcript showCR:(
+             Dialog 
+                choose:'choose example' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:#('five' 'six' 'seven')
+                values:#(5 6 7)
+                lines:4
+                cancel:[Transcript flash. #aborted]
+         )
+                                                                        [exEnd]
+
+    You can (and often have to) construct custom dialogs programmatically, 
+    from individual components. As shown in the following examples:
+
+    basic (unusable) example:
+                                                                        [exBegin]
+        DialogBox new open
+                                                                        [exEnd]
+
+    still unusable - only an ok-button:
+                                                                        [exBegin]
+        DialogBox new addOkButton; open
+                                                                        [exEnd]
+
+    both ok- and abortButtons:
+                                                                        [exBegin]
+        DialogBox new addAbortButton; addOkButton; open
+                                                                        [exEnd]
+
+    with different ok-label:
+                                                                        [exBegin]
+        DialogBox new addAbortButton; addOkButtonLabelled:'yeah'; open
+                                                                        [exEnd]
+
+    adding a (centered by default) textlabel gives an infoBox:
+                                                                        [exBegin]
+        DialogBox new
+            addTextLabel:'hello';
+            addOkButton; 
+            open
+                                                                        [exEnd]
+
+    a textlabel with abort- and okButton gives a yesNoBox:
+                                                                        [exBegin]
+        DialogBox new
+            addTextLabel:'hello';
+            addAbortButton; 
+            addOkButton; 
+            open
+                                                                        [exEnd]
+
+    the same, adjusting the labels contents to the left:
+                                                                        [exBegin]
+        |box|
+
+        box := DialogBox new.
+        (box addTextLabel:'hello') adjust:#left.
+        box addAbortButton; 
+            addOkButton; 
+            open
+                                                                        [exEnd]
+
+    with modified buttons:
+                                                                        [exBegin]
+        |box|
+
+        box := DialogBox new.
+        (box addTextLabel:'are you certain ?') adjust:#left.
+        box addAbortButtonLabelled:'not really'. 
+        (box addOkButtonLabelled:'yes, absolutely') 
+                activeBackgroundColor:Color red. 
+        box open
+                                                                        [exEnd]
+
+
+    mswindows style (different up/down bitmaps in buttons):
+    ((try tabbing ...)
+                                                                        [exBegin]
+        |b box|
+
+        box := DialogBox new.
+        (box addTextLabel:'are you certain ?') adjust:#left.
+        b := Button new.
+        b activeLogo:(Image fromFile:'cancel_down.bmp' inPackage:'stx:goodies/bitmaps/winImages').
+        b passiveLogo:(Image fromFile:'cancel_up.bmp' inPackage:'stx:goodies/bitmaps/winImages').
+        b focusLogo:(Image fromFile:'cancel_focus.bmp' inPackage:'stx:goodies/bitmaps/winImages').
+        b beImageButton.
+        box addAbortButton:b.
+
+        b := Button new.
+        b activeLogo:(Image fromFile:'ok_down.bmp' inPackage:'stx:goodies/bitmaps/winImages').
+        b passiveLogo:(Image fromFile:'ok_up.bmp' inPackage:'stx:goodies/bitmaps/winImages').
+        b focusLogo:(Image fromFile:'ok_focus.bmp' inPackage:'stx:goodies/bitmaps/winImages').
+        b beImageButton.
+        box addOkButton:b.
+        box open
+                                                                        [exEnd]
+
+
+    two textlabels:
+                                                                        [exBegin]
+        DialogBox new
+            addTextLabel:'hello';
+            addTextLabel:'world';
+            addAbortButton; 
+            addOkButton; 
+            open
+                                                                        [exEnd]
+
+    fixing the dialogs size (suppres it calculating its size from the
+    preferredExtents of its components):
+                                                                        [exBegin]
+        DialogBox new
+            label:'a simple dialog';
+            addTextLabel:'hello';
+            addAbortButton; 
+            addOkButton; 
+            extent:200@200;
+            sizeFixed:true;
+            open
+                                                                        [exEnd]
+
+    asking the box if it was closed via ok:
+                                                                        [exBegin]
+        (DialogBox new
+            label:'a simple dialog';
+            addTextLabel:'hello';
+            addAbortButton; 
+            addOkButton; 
+            extent:200@200;
+            sizeFixed:true;
+            open
+        ) accepted ifTrue:[
+            Transcript showCR:'yes'
+        ] ifFalse:[
+            Transcript showCR:'no'
+        ]
+                                                                        [exEnd]
+
+    textLabels are not limited to strings (although, the name which is
+    used for ST-80 compatibility, suggests it):
+                                                                        [exBegin]
+        DialogBox new
+            addTextLabel:(Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages');
+            addOkButton; 
+            open
+                                                                        [exEnd]
+
+                                                                        [exBegin]
+        DialogBox new
+            addTextLabel:'hello';
+            addTextLabel:((Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages')
+                                magnifiedTo:200@150);
+            addTextLabel:'world';
+            addAbortButton; 
+            addOkButton; 
+            open
+                                                                        [exEnd]
+
+    adding an input field (on a string model):
+                                                                        [exBegin]
+        |stringModel|
+
+        stringModel := '' asValue.
+        (DialogBox new
+            addTextLabel:'Please enter a string:';
+            addInputFieldOn:stringModel; 
+            addAbortButton; 
+            addOkButton; 
+            open
+        ) accepted ifTrue:[
+            Transcript showCR:'entered: ', stringModel value
+        ]
+                                                                        [exEnd]
+
+
+    multiple input fields (notice, that the dialog connects the fields
+    in a group, so stepping is allowed via Cursor and Return keys):
+                                                                        [exBegin]
+        |firstName lastName|
+
+        firstName := '' asValue.
+        lastName := '' asValue.
+        (DialogBox new
+            addTextLabel:'Please enter your name:';
+            addInputFieldOn:firstName; 
+            addVerticalSpace;
+            addInputFieldOn:lastName; 
+            addAbortButton; 
+            addOkButton; 
+            open
+        ) accepted ifTrue:[
+            Transcript showCR:'entered: ', firstName value , ' ' , lastName value
+        ]
+                                                                        [exEnd]
+
+
+    of course, the model may contain a value initially:
+                                                                        [exBegin]
+        |firstName lastName p line i name|
+
+        firstName := '' asValue.
+        lastName := '' asValue.
+        p := PipeStream readingFrom:'finger ' , OperatingSystem getLoginName.
+        p notNil ifTrue:[
+            line := p nextLine.
+            (i := line findString:'Name:') ~~ 0 ifTrue:[
+                name := line copyFrom:(i + 'Name:' size).
+            ] ifFalse:[
+                (i := line findString:'real life:') == 0 ifTrue:[
+                    line := p nextLine.
+                ].
+                (i := line findString:'real life:') ~~ 0 ifTrue:[
+                    name := line copyFrom:(i + 'real life:' size).
+                ]
+            ].
+            name notNil ifTrue:[
+                firstName value: name asCollectionOfWords first.
+                lastName  value: name asCollectionOfWords last.
+                Transcript showCR:'initially ' , firstName value , ' ' , lastName value.
+            ].
+            p close.
+        ].
+
+        (DialogBox new
+            addTextLabel:'Please enter your name:';
+            addInputFieldOn:firstName; 
+            addVerticalSpace;
+            addInputFieldOn:lastName; 
+            addAbortButton; 
+            addOkButton;
+            open
+        ) accepted ifTrue:[
+            Transcript showCR:'entered: ', firstName value , ' ' , lastName value
+        ]
+                                                                        [exEnd]
+
+
+    validated password entry:
+                                                                        [exBegin]
+        |box firstEntry secondEntry|
+
+        firstEntry := '' asValue.
+        secondEntry := '' asValue.
+
+        box := DialogBox new.
+        (box addTextLabel:'Please enter your secret:') adjust:#left.
+        (box addInputFieldOn:firstEntry) passwordCharacter:$*. 
+        box addVerticalSpace.
+        (box addInputFieldOn:secondEntry) passwordCharacter:$*. 
+        box addAbortButton. 
+        box addOkButton. 
+        box open.
+        box accepted ifTrue:[
+            firstEntry value ~= secondEntry value ifTrue:[
+                Transcript showCR:'wrong input - try again'
+            ] ifFalse:[
+                Transcript showCR:'entered: ', firstEntry value
+            ]
+        ]
+                                                                        [exEnd]
+
+     input fields with a label:
+                                                                        [exBegin]
+        |box firstNameHolder middleNameHolder lastNameHolder|
+
+        firstNameHolder := 'John' asValue.
+        middleNameHolder := 'F' asValue.
+        lastNameHolder := 'Peters' asValue.
+
+        box := DialogBox new.
+        box 
+            addLabelledInputField:'first name:'
+            adjust:#right
+            on:firstNameHolder
+            tabable:true
+            separateAtX:0.4.
+
+        box 
+            addLabelledInputField:'middle initial:'
+            adjust:#right
+            on:middleNameHolder
+            tabable:true
+            separateAtX:0.4.
+
+        box 
+            addLabelledInputField:'last name:'
+            adjust:#right
+            on:lastNameHolder
+            tabable:true
+            separateAtX:0.4.
+
+        box addOkButton.
+        box open.
+                                                                        [exEnd]
+
+
+     constructing a dialog from other elements:
+     adding a fileSelectionList:
+     (since the dialog adds the component with its preferred extent,
+      ignoring the 300-height, this looks ugly ... 
+      ... especially when resized vertically)
+                                                                        [exBegin]
+        |top l scr fileName|
+
+        fileName := '' asValue.
+
+        top := DialogBox new.
+
+        l := FileSelectionList new.
+        l useIndex:false.
+        l doubleClickAction:[:name | top okPressed].
+        l action:[:name | fileName value:name].
+        scr := ScrollableView forView:l.
+        scr extent:(1.0 @ 300).
+
+        top addComponent:scr.
+        top addAbortButton; addOkButton.
+        top openModal.
+
+        top accepted ifTrue:[
+            Transcript show:'fileName: '; showCR:fileName value storeString.
+        ]
+                                                                        [exEnd]
+
+    same, looks better, since the height is made larger (not using 
+    fileLists preferredExtent):
+                                                                        [exBegin]
+        |top l scr fileName|
+
+        fileName := '' asValue.
+
+        top := DialogBox new.
+
+        l := FileSelectionList new.
+        l useIndex:false.
+        l doubleClickAction:[:name | top okPressed].
+        l action:[:name | fileName value:name].
+        scr := ScrollableView forView:l.
+
+        top addComponent:scr withExtent:300@300.
+        top addAbortButton; addOkButton.
+        top openModal.
+
+        top accepted ifTrue:[
+            Transcript show:'fileName: '; showCR:fileName value storeString.
+        ]
+                                                                        [exEnd]
+
+
+    again, setting the boxes initial size and fixing it
+    (let it ignore the components' preferredExtent):
+                                                                        [exBegin]
+        |top fixFrame l scr fileName|
+
+        fileName := '' asValue.
+
+        top := DialogBox new.
+        top extent:300@300.
+
+        fixFrame := View new.
+        fixFrame extent:(1.0 @ 300).
+
+        l := FileSelectionList new.
+        l useIndex:false.
+        l doubleClickAction:[:name | top okPressed].
+        l action:[:name | fileName value:name].
+        scr := ScrollableView forView:l.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        fixFrame add:scr.
+
+        top addComponent:fixFrame.
+        top addAbortButton; addOkButton.
+        top openModal.
+
+        top accepted ifTrue:[
+            Transcript show:'fileName: '; showCR:fileName value storeString.
+        ]
+                                                                        [exEnd]
+
+
+   adding a panel with checkBoxes:
+                                                                        [exBegin]
+        |top panel b value1 value2 value3 value4|
+
+        value1 := true asValue.
+        value2 := false asValue.
+        value3 := false asValue.
+        value4 := true asValue.
+
+        top := DialogBox new.
+        top extent:200@300.
+
+        panel := VerticalPanelView new.
+
+        b := CheckBox on:value1. b label:'check1'.
+        panel addSubView:b.
+
+        b := CheckBox on:value2. b label:'check2'.
+        panel addSubView:b.
+
+        b := CheckBox on:value3. b label:'check3'.
+        panel addSubView:b.
+
+        b := CheckBox on:value4. b label:'check4'.
+        panel addSubView:b.
+
+        top addComponent:panel.
+        top addAbortButton; addOkButton.
+        top open.
+
+        top accepted ifTrue:[
+            Transcript show:'value1: '; showCR:value1 value.
+            Transcript show:'value2: '; showCR:value2 value.
+            Transcript show:'value3: '; showCR:value3 value.
+            Transcript show:'value4: '; showCR:value4 value.
+        ]
+                                                                        [exEnd]
+
+   same, using a more convenient interface:
+                                                                        [exBegin]
+        |box value1 value2 value3 value4|
+
+        value1 := true asValue.
+        value2 := false asValue.
+        value3 := false asValue.
+        value4 := true asValue.
+
+        box := DialogBox new.
+        box extent:200@300.
+
+        box addCheckBox:'check1' on:value1.
+        box addVerticalSpace.
+        box addCheckBox:'check2' on:value2.
+        box addVerticalSpace.
+        box addCheckBox:'check3' on:value3.
+        box addVerticalSpace.
+        box addCheckBox:'check4' on:value4.
+
+        box addAbortButton; addOkButton.
+        box open.
+
+        box accepted ifTrue:[
+            Transcript show:'value1: '; showCR:value1 value.
+            Transcript show:'value2: '; showCR:value2 value.
+            Transcript show:'value3: '; showCR:value3 value.
+            Transcript show:'value4: '; showCR:value4 value.
+        ]
+                                                                        [exEnd]
+
+
+    same, using an even better interface:
+                                                                        [exBegin]
+        |box values labels|
+
+        values := #(true false false true) collect:[:val | val asValue].
+        labels := #('check1' 'check2' 'check3' 'check4').
+
+        box := Dialog new.
+
+        box
+           addColumn:(1 to:labels size)
+           fromX:0.0
+           toX:1.0 
+           collect:[:index | CheckBox label:(labels at:index) model:(values at:index)]
+           tabable:true.
+        
+        box addAbortButton; addOkButton.
+        box open.
+
+        box accepted ifTrue:[
+           values with:labels do:[:val :lbl |
+              Transcript show:(lbl , ': '); showCR:val value.
+           ]
+        ]
+                                                                        [exEnd]
+
+
+    adding two panels in a frame:
+                                                                        [exBegin]
+        |box frame vPanel1 vPanel2 m1 m2 m3 m4 chk ef|
+
+        box := Dialog new.
+        box label:'example'.
+
+        frame := FramedBox label:'frame'.
+
+        vPanel1 := VerticalPanelView origin:0.0@0.0 corner:0.5@1.0 in:frame.
+        vPanel1 horizontalLayout:#leftSpace.
+        vPanel1 verticalLayout:#spreadSpace.
+
+        vPanel2 := VerticalPanelView origin:0.5@0.0 corner:1.0@1.0 in:frame.
+        vPanel2 horizontalLayout:#leftSpace.
+        vPanel2 verticalLayout:#spreadSpace.
+
+        m1 := true asValue.
+        m2 := true asValue.
+        m3 := true asValue.
+        m4 := 'hello' asValue.
+
+        vPanel1 add:(Label label:'check1').
+        vPanel1 add:(Label label:'m2').
+        vPanel1 add:(Label label:'m3').
+        vPanel1 add:(Label label:'enter').
+        vPanel1 add:(Label label:'lbl1').
+        vPanel1 add:(Label label:'lbl2').
+
+        vPanel2 add:(chk := CheckToggle on:m1). 
+        box makeTabable:chk.
+
+        vPanel2 add:(chk := CheckToggle on:m2). 
+        box makeTabable:chk.
+
+        vPanel2 add:(chk := CheckToggle on:m3). 
+        box makeTabable:chk.
+
+        vPanel2 add:(chk := CheckToggle on:m3). 
+        box makeTabable:chk.
+
+        vPanel2 add:(chk := CheckToggle on:m3). 
+        box makeTabable:chk.
+
+        vPanel2 add:(ef := EditField on:m4). 
+        ef immediateAccept:true.
+        box makeTabable:ef.
+
+        box addComponent:frame.
+
+        box addAbortButton; addOkButton.
+        box openModal.
+        box accepted ifTrue:[
+            Transcript showCR:'accepted with:'.
+            Transcript showCR:'   m1: ' , m1 value printString.
+            Transcript showCR:'   m2: ' , m2 value printString.
+            Transcript showCR:'   m3: ' , m3 value printString.
+            Transcript showCR:'   m4: ' , m4 value printString.
+        ]
+                                                                        [exEnd]
+
+
+
+    a full example (combined settings dialog - as in launcher):
+                                                                        [exBegin]
+        |box warnSTX allowUnderscore immutableArrays logDoits
+         listOfLanguages listOfStyles styleNames 
+         frame panel c resourceDir dir |
+
+        warnSTX := Compiler warnSTXSpecials asValue.
+        allowUnderscore := Compiler allowUnderscoreInIdentifier asValue.
+        immutableArrays := Compiler arraysAreImmutable asValue.
+
+        logDoits := Smalltalk logDoits asValue.
+
+        listOfLanguages := SelectionInList with:#('english'
+                                                  'french'
+                                                  'german'
+                                                  'italian'
+                                                  'spanish'
+                                                 ).
+        listOfLanguages selection:(Language asString).
+
+
+        resourceDir := Smalltalk getSystemFileName:'resources'.
+        dir := FileDirectory directoryNamed:resourceDir.
+
+        styleNames := dir select:[:aFileName | aFileName endsWith:'.style'].
+        styleNames := styleNames collect:[:aFileName | aFileName copyWithoutLast:6].
+        listOfStyles := SelectionInList with:styleNames sort.
+        listOfStyles selection:(View defaultStyle asString).
+
+        box := Dialog new.
+        box label:'Settings'.
+
+        frame := FramedBox label:'Compiler'.
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        panel horizontalLayout:#leftSpace.
+
+        panel add:((CheckBox on:warnSTX) label:'warn about ST/X language extensions'; resize).
+        panel add:((CheckBox on:allowUnderscore) label:'allow underscore in identifiers'; resize).
+        panel add:((CheckBox on:immutableArrays) label:'literal arrays are immutable'; resize).
+        box addComponent:frame.
+
+        frame := FramedBox label:'Misc'.
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        panel horizontalLayout:#leftSpace.
+
+        panel add:((CheckBox on:logDoits) label:'log doIts in changes file'; resize).
+        box addComponent:frame.
+
+        frame := FramedBox label:'Language'.
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        panel horizontalLayout:#leftSpace.
+
+        panel add:((PopUpList on:listOfLanguages) width:0.5).
+        box addComponent:frame.
+
+        frame := FramedBox label:'Style'.
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        panel horizontalLayout:#leftSpace.
+
+        panel add:((PopUpList on:listOfStyles) width:0.5).
+        box addComponent:frame.
+
+        box addAbortButton; addOkButton.
+        box showAtPointer.
+
+        box accepted ifTrue:[
+            Transcript topView withCursor:Cursor wait do:[
+                Compiler warnSTXSpecials:warnSTX value.
+                Compiler allowUnderscoreInIdentifier:allowUnderscore value.
+                Compiler arraysAreImmutable:immutableArrays value.
+
+                Smalltalk logDoits:logDoits value.
+
+                Transcript showCR:'change language to ' , listOfLanguages selection , ' ...'.
+                Smalltalk at:#Language put:listOfLanguages selection asSymbol.
+                Smalltalk changed:#Language.
+                ResourcePack flushCachedResourcePacks.
+
+                Transcript showCR:'change style to ' , listOfStyles selection , ' ...'.
+                View defaultStyle:listOfStyles selection asSymbol.
+            ]
+        ]
+                                                                        [exEnd]
+      an example from Hopkins/Horan:  
+                                                                        [exBegin]
+        |aText index|
+
+        aText := 'Smalltalk/X: An Introduction to Application Development' asText.
+        index := aText findString:'Smalltalk/X' startingAt:1.
+        aText emphasizeFrom:index 
+                         to:'Smalltalk/X' size + index - 1
+                       with:#bold.
+        index := aText findString:'Introduction' startingAt:index.
+        aText emphasizeFrom:index 
+                         to:'Introduction' size + index - 1
+                       with:#italic.
+        Dialog warn:aText        
+        
+                                                                        [exEnd]
+      the same, with colors:  
+                                                                        [exBegin]
+        |aText index|
+
+        aText := 'Smalltalk/X: An Introduction to Application Development' asText.
+        index := aText findString:'Smalltalk/X' startingAt:1.
+        aText emphasizeFrom:index 
+                         to:'Smalltalk/X' size + index - 1
+                       with:(Array with:#bold with:#underline with:(#color->Color red)).
+        index := aText findString:'Introduction' startingAt:index.
+        aText emphasizeFrom:index 
+                         to:'Introduction' size + index - 1
+                       with:#italic.
+        Dialog warn:aText        
+                                                                        [exEnd]
+"
+!
+
+inputFocus
+"
+    a DialogBox with multiple input fields can be configured on how it
+    shall behave if the RETURN key is pressed. 
+
+    The default is to shift the focus to the ok-button - thus, another return
+    has to be entered (as confirmation) to close & accept the box.
+
+    This can be changed to force an automatic OK with:
+	aBox focusToOKOnLeave:false
+
+    Then, leaving the last field with return, automatically accepts the box,
+    as if ok was pressed. (useful for simple - single entry dialogs).
+    All simple dialogs (like 'enter a searchString') behave this way.
+
+
+    With: 
+	aBox acceptReturnAsOK:false
+
+    any focusShift or automatic OK is turned off, and the input group 
+    switches its focus back to the topMost field. 
+    The default for this is true.
+    (useful, if you want an explicit ok from the user, or need all fields
+     to be handled somehow).
+
+
+    Simply leaving the group with a cursor movement may also be either
+    interpreted as a return (the default), or again wrap back to the top
+    of the group.
+
+    With:
+	aBox acceptOnLeave:false
+    this is turned off, so that with cursor-down, the focus is moved back 
+    to the first entry field. The default is true.
+"
+! !
+
+!DialogBox class methodsFor:'Compatibility-VW'!
+
+choose:aString fromList:list values:listValues lines:maxLines cancel:cancelBlock for:aView
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel.
+     This is a new VW2.5 interface - passing an addtional argument.
+     In ST/X, this is not needed and ignored"
+
+    ^ self
+	choose:aString 
+	fromList:list 
+	values:listValues
+	lines:maxLines
+	cancel:cancelBlock
+
+    "
+     Transcript showCR:(
+	 Dialog 
+	    choose:'choose any' 
+	    fromList:#('one' 'two' 'three' 'four') 
+	    values:#(1 2 3 4) 
+	    lines:4
+	    cancel:nil
+     )
+
+     Transcript showCR:(
+	 Dialog 
+	    choose:'choose example' 
+	    fromList:#('one' 'two' 'three' 'four') 
+	    values:#(1 2 3 4) 
+	    lines:4
+	    cancel:[Transcript flash. #aborted]
+     )
+    "
+
+    "Created: / 1.11.1997 / 13:21:32 / cg"
+    "Modified: / 1.11.1997 / 13:21:54 / cg"
+!
+
+confirm:aMessageString for:ignoredView
+    "VW compatibility - confirm using the same viewStyle as in the view
+     argument; not supported in ST/X (who mixes styles ?)"
+
+    ^ self 
+        confirm:aMessageString 
+        title:nil 
+        yesLabel:nil noLabel:nil 
+        initialAnswer:true.
+
+    "Created: / 06-03-1997 / 15:45:54 / cg"
+    "Modified: / 02-03-2007 / 15:25:15 / cg"
+!
+
+request:aString for:aView
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) 
+     or the empty string (if cancel was pressed),
+     This is a new VW2.5 interface - passing an addtional argument.
+     In ST/X, this is not needed and ignored"
+
+    ^ self 
+	request:aString
+
+    "Created: / 31.10.1997 / 03:26:32 / cg"
+    "Modified: / 31.10.1997 / 11:53:50 / cg"
+!
+
+request:aString initialAnswer:initial for:aView
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) or nil (if cancel was pressed).
+     This is a new VW2.5 interface - passing an addtional argument.
+     In ST/X, this is not needed and ignored"
+
+    ^ self 
+	request:aString 
+	initialAnswer:initial
+
+    "Modified: / 29.5.1996 / 14:30:05 / cg"
+    "Created: / 1.11.1997 / 13:18:29 / cg"
+!
+
+requestFileName:title default:default version:versionSym ifFail:failBlock for:aViewOrNil
+    "new VW2.5 interface - passing an addtional argument.
+     In ST/X, this is not needed and ignored"
+
+    ^ self
+	requestFileName:title default:default version:versionSym ifFail:failBlock
+
+    "Created: / 31.10.1997 / 02:00:42 / cg"
+    "Modified: / 31.10.1997 / 11:52:53 / cg"
+!
+
+warn:aMessageString for:ignoredView
+    "VW compatibility - warn using the same viewStyle as in the view
+     argument; not supported in ST/X (who mixes styles ?)"
+
+    ^ self warn:aMessageString
+
+    "Created: / 6.3.1997 / 15:46:02 / cg"
+    "Modified: / 31.10.1997 / 11:54:35 / cg"
+! !
+
+!DialogBox class methodsFor:'class initialization'!
+
+initialize
+    self == DialogBox ifTrue:[
+        Dialog := self
+    ].
+
+    DefaultFocusToOKOnLeave := false.
+
+    "/ for backward whitebox compatibility (customer subclasses which access the classVar directly)
+    AboutToOpenBoxNotificationSignal := SimpleView aboutToOpenBoxNotificationSignal
+! !
+
+!DialogBox class methodsFor:'common dialogs'!
+
+about:text label:label icon:image
+    "opens an standard about box for an application."
+
+    |box|
+
+    AboutBox isNil ifTrue:[
+        "/ this handles bad installations of ST/X,
+        "/ where the AboutBox is missing.
+        "/ (May vanish in the future)
+        ^ self information:text
+    ].
+
+    box := AboutBox title:text.
+
+    box image:image.
+    box label:label.
+    box autoHideAfter:10 with:[].
+    self showAndThenDestroyBox:box.
+    "/ box open.
+
+    "Created: / 17.11.2001 / 23:04:53 / cg"
+    "Modified: / 17.11.2001 / 23:06:06 / cg"
+!
+
+aboutClass:aClass
+    "opens a standard (simple) aboutBox for aClass."
+
+    |rev clsRev msg resources|
+
+    rev := ''.
+
+    (clsRev := aClass revision) notNil ifTrue: [rev := '  (rev: ', clsRev printString, ')'].
+    resources := aClass classResources.
+
+    msg := '\' withCRs , aClass name asBoldText, rev.
+
+    self
+        about:(resources string:msg)
+        label:(resources string:'About ' , aClass nameWithoutPrefix)
+        icon:aClass defaultIconForAboutBox
+!
+
+informUser:aString during:aBlock
+    "show a message-box while executing aBlock"
+
+    |box|
+
+    [
+        box := InfoBox title:aString.
+        box hideButtons.
+        self showBox:box. "/ box showAtPointer.
+    ] forkAt:(Processor activePriority + 1).
+    aBlock ensure:[box destroy]
+
+    "
+     Dialog informUser:'wait a second...' during:[Delay waitForSeconds:1]
+     Dialog informUser:'wait a few seconds...' during:[10000 factorial]
+    "
+!
+
+informUser:aString during:aBlock cancel:canCancel
+    "show a message-box while executing aBlock"
+
+    |box subProcess|
+
+    box := InfoBox title:aString.
+    canCancel ifTrue:[
+        box okText:(self classResources string:'Abort').
+    ] ifFalse:[
+        box hideButtons.
+    ].
+
+    subProcess := [
+        aBlock ensure:[box destroy]
+    ] forkAt:(Processor activePriority - 1).
+
+    self showBox:box.
+    subProcess terminate.
+    
+
+    "
+     Dialog informUser:'don''t wait ...' during:[true] cancel:true
+     Dialog informUser:'please wait a second...' during:[Delay waitForSeconds:1] cancel:true
+     Dialog informUser:'please wait, while I compute 30000 factorial...' during:[30000 factorial] cancel:true
+    "
+!
+
+information:aString
+    "launch a Dialog to tell user something"
+
+    self information:aString title:aString
+
+    "
+     Dialog information:'help'
+    "
+
+    "Modified: 29.5.1996 / 15:23:03 / cg"
+!
+
+information:aString title:windowTitle
+    "launch a Dialog to tell user something"
+
+    |currentScreen|
+
+    ((currentScreen := Screen current) notNil and:[currentScreen nativeDialogs]) ifTrue:[
+        ^ currentScreen 
+            nativeInformationOK:aString
+            title:windowTitle
+    ].
+    self showAndThenDestroyBox:(InfoBox title:aString label:windowTitle)
+
+    "
+     Dialog information:'help' title:'Attention'
+    "
+
+    "Created: / 22-12-2010 / 19:33:23 / cg"
+!
+
+informationText:aString title:windowTitle
+    "launch a Dialog to tell user something.
+     The argument aString is shown as multiline, scrollable text"
+
+    |dialog textHolder|
+
+    textHolder := ValueHolder new.
+    dialog := Dialog 
+                forRequestText:'' editViewClass:TextView
+                lines:15 columns:60 
+                initialAnswer:aString initialSelection:nil 
+                model:textHolder.
+    dialog window label:windowTitle.
+    dialog open.
+
+    "
+     Dialog 
+        informationText:(DialogBox class compiledMethodAt:#information:title:) source
+        title:'Hello'
+    "
+!
+
+informationText:aString title:title windowTitle:windowTitle
+    "launch a Dialog to tell user something.
+     The argument aString is shown as multiline, scrollable text"
+
+    |dialog textHolder|
+
+    textHolder := ValueHolder new.
+    dialog := Dialog 
+                forRequestText:title editViewClass:TextView
+                lines:15 columns:60 
+                initialAnswer:aString initialSelection:nil 
+                model:textHolder.
+    dialog removeAbortButton.
+    dialog okButton beReturnButton.
+    dialog window label:windowTitle.
+    dialog open.
+
+    "
+     Dialog 
+        informationText:(DialogBox class compiledMethodAt:#information:title:) source
+        title:'Hello - the text is:'
+        windowTitle:'Hello'
+    "
+!
+
+warn:aString
+    "launch a Dialog to warn user"
+
+    |currentScreen|
+
+    ((currentScreen := Screen current) notNil and:[currentScreen nativeDialogs]) ifTrue:[
+        ^ currentScreen 
+            nativeWarnOK:aString
+            title:aString
+    ].
+    self showAndThenDestroyBox:(WarningBox title:aString)
+
+    "
+     Dialog warn:'some warning message'
+
+     Dialog warn:('some text with italic emphasis' asText 
+                        emphasizeFrom:16 to:22 with:#italic)
+
+     Dialog warn:('some warning message' asText 
+                        emphasizeAllWith:(#color->Color red))
+
+     Dialog warn:('some text with color emphasis' asText 
+                        emphasizeFrom:6 to:10 with:(#color->Color blue);
+                        emphasizeFrom:16 to:20 with:(#color->Color red))
+    "
+
+    "Modified: 29.5.1996 / 15:23:14 / cg"
+!
+
+warn:aString title:windowTitle
+    "launch a Dialog to warn user"
+
+    |currentScreen|
+
+    ((currentScreen := Screen current) notNil and:[currentScreen nativeDialogs]) ifTrue:[
+        ^ currentScreen 
+            nativeWarnOK:aString
+            title:windowTitle
+    ].
+    self showAndThenDestroyBox:(WarningBox title:aString label:windowTitle)
+
+    "
+     Dialog warn:'some warning message'
+
+     Dialog warn:('some text with italic emphasis' asText 
+                        emphasizeFrom:16 to:22 with:#italic)
+
+     Dialog warn:('some warning message' asText 
+                        emphasizeAllWith:(#color->Color red))
+
+     Dialog warn:('some text with color emphasis' asText 
+                        emphasizeFrom:6 to:10 with:(#color->Color blue);
+                        emphasizeFrom:16 to:20 with:(#color->Color red))
+    "
+
+    "Modified: / 29-05-1996 / 15:23:14 / cg"
+    "Created: / 20-01-2012 / 15:54:26 / cg"
+!
+
+withOptoutOption:optOutAction labelled:labelString warn:warnString
+    "launch a Dialog to warn user. Add a 'do not show this dialog again'-like checkbox,
+     and call optOutAction after the warning if checked."
+
+    |holder|
+
+    holder := false asValue.
+    Dialog aboutToOpenBoxNotificationSignal handle:[:ex |
+        |box|
+
+        box := ex box.
+        box verticalPanel
+            add:((CheckBox label:labelString) model:holder).
+    ] do:[
+        self warn:warnString
+    ].
+    holder value ifTrue: optOutAction
+
+    "
+     Dialog withOptoutOption:[Transcript flash] labelled:'opt out' warn:'some warning'.
+    "
+! !
+
+!DialogBox class methodsFor:'confirmation dialogs'!
+
+confirm:aString
+    "open a modal yes-no dialog.
+     Return true for yes, false for no"                                   
+
+    ^ self 
+        confirm:aString 
+        title:nil 
+        yesLabel:nil noLabel:nil 
+        initialAnswer:true.
+
+    " 
+     Dialog confirm:'really ?' 
+
+     Transcript showCR:(
+        Dialog confirm:'are you certain ?'
+     )
+    "
+
+    "Modified: / 02-03-2007 / 15:25:34 / cg"
+!
+
+confirm:aString default:what
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     InitialAnswer must be true or false and defines which button is to be
+     the default (i.e. return-) button"
+
+    ^ self 
+        confirm:aString 
+        title:nil 
+        yesLabel:nil noLabel:nil 
+        initialAnswer:what.
+
+    "
+     Dialog confirm:'Are you happy' default:true 
+
+     Dialog confirm:'Are you happy' default:false 
+    "
+
+    "Modified: / 02-03-2007 / 15:25:23 / cg"
+!
+
+confirm:aString initialAnswer:what
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     InitialAnswer must be true or false and defines which button is to be
+     the default (i.e. return-) button"
+
+    ^ self 
+        confirm:aString 
+        title:nil 
+        yesLabel:nil noLabel:nil 
+        initialAnswer:what.
+
+    " 
+     Dialog confirm:'really ?' initialAnswer:false
+
+     Transcript showCR:(
+        Dialog confirm:'are you certain ?' initialAnswer:false
+     )
+
+     Transcript showCR:(
+        Dialog confirm:'are you certain ?' initialAnswer:true 
+     )
+    "
+
+    "Modified: / 02-03-2007 / 15:24:52 / cg"
+!
+
+confirm:aString initialAnswer:what noLabel:noText
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     InitialAnswer must be true or false and defines which button is to be
+     the default (i.e. return-) button"
+
+    ^ self 
+        confirm:aString 
+        title:nil 
+        yesLabel:nil noLabel:noText 
+        initialAnswer:what.
+
+    "Modified: / 02-03-2007 / 15:24:49 / cg"
+!
+
+confirm:aString noLabel:noText
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     The no-button is labeled noText (for example, if you need a 'cancel' there)"
+
+    ^ self 
+        confirm:aString
+        title:nil
+        yesLabel:nil noLabel:noText
+        initialAnswer:true
+
+    " 
+     Dialog confirm:'really ?' 
+
+     Dialog confirm:'really ?' noLabel:'Cancel' 
+    "
+
+    "Modified: / 02-03-2007 / 15:24:43 / cg"
+!
+
+confirm:aString title:title
+    "open a modal yes-no dialog.
+     Return true for yes, false for no"                                   
+
+    ^ self 
+        confirm:aString
+        title:nil
+        yesLabel:nil noLabel:nil
+        initialAnswer:true
+
+    " 
+     Dialog confirm:'really ?' 
+
+     Transcript showCR:(
+        Dialog confirm:'are you certain ?'
+     )
+    "
+
+    "Created: / 02-03-2007 / 15:21:25 / cg"
+!
+
+confirm:aString title:title noLabel:noText
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     The no buttons label is defined by noText (for example, to make it 'cancel')."
+
+    ^ self
+        confirm:aString 
+        title:title 
+        yesLabel:nil noLabel:noText
+        initialAnswer:true
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        title:'fooBar'
+        noLabel:'Nope'      
+    "
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        title:nil
+        noLabel:'Cancel'   
+    "
+
+    "Modified: / 02-03-2007 / 15:23:55 / cg"
+!
+
+confirm:aString title:title yesLabel:yesText noLabel:noText
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     The yes/no buttons labels are defined by yesText/noText."
+
+    ^ self 
+        confirm:aString 
+        title:title 
+        yesLabel:yesText noLabel:noText 
+        initialAnswer:true
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        title:'fooBar'
+        yesLabel:'Oh well' 
+        noLabel:'Nope'
+    "
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        title:nil
+        yesLabel:'Oh well' 
+        noLabel:'Nope'
+    "
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        title:''
+        yesLabel:'Oh well' 
+        noLabel:'Nope'
+    "
+
+    "Created: / 21.2.1996 / 01:10:14 / cg"
+    "Modified: / 18.4.1998 / 19:25:21 / cg"
+!
+
+confirm:aString title:title yesLabel:yesText noLabel:noText initialAnswer:what
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     The yes/no buttons labels are defined by yesText/noText."
+
+    |box answer t currentScreen|
+
+    t := title.
+    t isNil ifTrue:[ t := self classResources string:'Confirm' ].
+
+    ((currentScreen := Screen current) notNil and:[currentScreen nativeDialogs]) ifTrue:[
+        "/ experimental
+        ^ currentScreen 
+            nativeConfirmYesNo:aString
+            title:t
+            initialAnswer:what
+    ].
+
+    box := YesNoBox title:aString.
+    yesText notNil ifTrue:[
+        box yesLabel:yesText.
+    ].
+    noText notNil ifTrue:[
+        box noLabel:noText.
+    ].
+    answer := false.
+    box yesAction:[answer := true].
+
+    box label:t.
+    what == false ifTrue:[
+        box okButton isReturnButton:false.
+        box acceptReturnAsOK:false.
+        box cancelButton beReturnButton.
+    ].
+
+    self showAndThenDestroyBox:box.
+    box yesAction:nil noAction:nil.
+    ^ answer
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        title:'fooBar'
+        yesLabel:'Oh well' 
+        noLabel:'Nope'
+        initialAnswer:true
+    "
+    " 
+     Dialog 
+        confirm:'really ?' 
+        title:'fooBar'
+        yesLabel:'Oh well' 
+        noLabel:'Nope'
+        initialAnswer:false
+    "
+
+    "Created: / 21-02-1996 / 01:10:14 / cg"
+    "Modified: / 02-03-2007 / 15:23:31 / cg"
+!
+
+confirm:msg withCancel:aBoolean
+    "launch a Dialog, which allows user to enter yes, no and optionally: cancel.
+     return true for 'yes', false for 'no', nil for 'cancel'"
+
+    aBoolean ifTrue:[
+        ^ Dialog confirmWithCancel:msg.
+    ] ifFalse:[
+        ^ Dialog confirm:msg.
+    ].
+
+    "
+     Dialog confirm:'really ?' withCancel:false 
+     Dialog confirm:'really ?' withCancel:true 
+    "
+!
+
+confirm:msg withCancel:aBoolean default:default
+    "launch a Dialog, which allows user to enter yes, no and optionally: cancel.
+     return true for 'yes', false for 'no', nil for 'cancel'"
+
+    aBoolean ifTrue:[
+        ^ Dialog confirmWithCancel:msg default:default.
+    ] ifFalse:[
+        ^ Dialog confirm:msg default:default.
+    ].
+
+    "
+     Dialog confirm:'really ?' withCancel:false 
+     Dialog confirm:'really ?' withCancel:true 
+    "
+!
+
+confirm:aString yesLabel:yesText
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     The yes button's label is defined by yesText."
+
+    ^ self confirm:aString title:nil yesLabel:yesText noLabel:nil
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        yesLabel:'Oh well' 
+    "
+
+    "Created: / 04-09-2006 / 11:18:50 / cg"
+!
+
+confirm:aString yesLabel:yesText noLabel:noText
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     The yes/no buttons' labels are defined by yesText/noText."
+
+    ^ self confirm:aString title:nil yesLabel:yesText noLabel:noText
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        yesLabel:'Oh well' 
+        noLabel:'Nope'
+    "
+
+    "Created: / 21-02-1996 / 01:10:14 / cg"
+    "Modified: / 04-09-2006 / 11:19:00 / cg"
+!
+
+confirm:aString yesLabel:yesText noLabel:noText initialAnswer:what
+    "launch a Dialog, which allows user to enter yes or no.
+     return true for yes, false for no.
+     The yes/no buttons labels are defined by yesText/noText."
+
+    ^ self confirm:aString title:nil yesLabel:yesText noLabel:noText initialAnswer:what
+
+    " 
+     Dialog 
+        confirm:'really ?' 
+        yesLabel:'Oh well' 
+        noLabel:'Nope'
+        initialAnswer:false
+    "
+
+    "Created: 21.2.1996 / 01:10:14 / cg"
+    "Modified: 8.3.1996 / 21:15:06 / cg"
+!
+
+confirmOKCancel:aString
+    "launch a Dialog, which allows user to enter OK or Cancel.
+     return true for OK, false for Cancel."
+
+    |resources|
+
+    resources := self classResources.
+    ^ self 
+        confirm:aString 
+        yesLabel:(resources string:'OK') 
+        noLabel:(resources string:'Cancel')
+
+    " 
+     Dialog confirmOKCancel:'really ?' 
+    "
+!
+
+confirmWithCancel:aString
+    "launch a Dialog, which allows user to enter yes, no and cancel.
+     return true for 'yes', false for 'no', nil for 'cancel'"
+
+    ^ self  
+        confirmWithCancel:aString 
+        default:nil 
+        title:nil
+
+    "
+     Dialog confirmWithCancel:'really ?' 
+    "
+
+    "
+     Transcript showCR:(
+        Dialog confirmWithCancel:'really ?'
+     )
+    "
+
+    "Modified: / 02-03-2007 / 15:26:05 / cg"
+!
+
+confirmWithCancel:aString default:default
+    "launch a Dialog, which allows user to enter yes, no and cancel.
+     return true for 'yes', false for 'no', nil for 'cancel'.
+     The default argument marks the return-button; it may be one of nil, false or true"
+
+    ^ self 
+        confirmWithCancel:aString 
+        default:default 
+        title:nil
+
+    "
+     Dialog confirmWithCancel:'really ?' default:false
+     Dialog confirmWithCancel:'really ?' default:true
+    "
+
+    "Modified: / 02-03-2007 / 15:26:13 / cg"
+!
+
+confirmWithCancel:aString default:defaultValue onCancel:cancelValue
+    "launch a Dialog, which allows user to enter yes, no and cancel.
+     return true for 'yes', false for 'no', cancelValues value for 'cancel'"
+
+    |answer|
+
+    answer := self confirmWithCancel:aString default:defaultValue.
+    answer isNil ifTrue:[
+        ^ cancelValue value
+    ].
+    ^ answer
+
+    "
+     Dialog confirmWithCancel:'really ?' onCancel:[AbortSignal raise]
+    "
+!
+
+confirmWithCancel:aString default:default title:titleString
+    "launch a Dialog, which allows user to enter yes, no and cancel.
+     return true for 'yes', false for 'no', nil for 'cancel'.
+     The default argument marks the return-button; it may be one of nil, false or true"
+
+    ^ self
+        confirmWithCancel:aString 
+        labels:(self classResources array:#('Cancel' 'No' 'Yes') )
+        values:#(nil false true)
+        default:(#(nil false true) indexOf:default ifAbsent:nil)
+        title:titleString
+
+    "
+     Dialog confirmWithCancel:'really ?' default:false
+     Dialog confirmWithCancel:'really ?' default:true
+    "
+
+    "Created: / 02-03-2007 / 15:09:56 / cg"
+!
+
+confirmWithCancel:aString labels:labelArray
+    "launch a Dialog, which allows user to enter cancel, no or yes.
+     Return true for 'yes', false for 'no', nil for 'cancel'.
+     The default is yes.
+     The buttons labels are given in labelArray, cancel being first, yes being last
+     (notice that the order may get reversed in some styles)"
+
+    ^ self
+        confirmWithCancel:aString 
+        labels:(self classResources array:labelArray)
+        default:3
+    "
+     Dialog confirmWithCancel:'really ?' labels:#( 'Oops' 'Nope' 'Yea')
+     Dialog confirmWithCancel:'really ?'
+    "
+
+    "Modified: / 02-03-2007 / 15:10:34 / cg"
+!
+
+confirmWithCancel:aString labels:buttonLabels default:default
+    "launch a Dialog, which allows user to enter yes, no and cancel.
+     Return true for 'yes', false for 'no', nil for 'cancel'.
+     The strings for cancel, no and yes are to be passed in
+     buttonLabels; 
+     The default argument (if non-nil) defines the index of the 
+     return button (1 to 3)"
+
+    ^ self
+        confirmWithCancel:aString 
+        labels:buttonLabels 
+        values:#(nil false true)
+        default:default
+
+    "
+     Transcript showCR:(
+         Dialog 
+            confirmWithCancel:'really ?'
+                       labels:#('mhmh' 'Maybe' 'Definitely')
+                      default:3
+     )
+    "
+
+    "Created: / 18.10.1996 / 14:50:51 / cg"
+    "Modified: / 21.10.1998 / 15:49:16 / cg"
+!
+
+confirmWithCancel:aString labels:buttonLabels values:buttonValues default:default
+    "launch a Dialog, which allows user to click on any button.
+     Return the corresponding value from the values array.
+     The labels for for the buttons are to be passed in
+     buttonLabels; 
+     The default argument (if non-nil) defines the index of the 
+     return button (1 to n)"
+
+    ^ self
+        confirmWithCancel:aString 
+        labels:buttonLabels 
+        values:buttonValues 
+        default:default
+        title:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            confirmWithCancel:'really ?'
+                       labels:#('mhmh' 'maybe' 'definitely')
+                       values:#(1 2 3)
+                      default:3
+     )
+    "
+
+    "Created: / 18-10-1996 / 14:50:51 / cg"
+    "Modified: / 02-03-2007 / 15:09:24 / cg"
+!
+
+confirmWithCancel:aString labels:buttonLabels values:buttonValues default:default boxLabel:boxLabelOrNil
+    "obsolete - for backward compatibility"
+
+    ^ self
+        confirmWithCancel:aString 
+        labels:buttonLabels 
+        values:buttonValues 
+        default:default 
+        title:boxLabelOrNil
+
+    "Modified: / 02-03-2007 / 15:09:11 / cg"
+!
+
+confirmWithCancel:aString labels:buttonLabels values:buttonValues default:default check:checkLabelOrNil on:checkHolderOrNil title:boxLabelOrNil
+    "launch a Dialog, which allows user to click on any button.
+     Return the corresponding value from the values array.
+     The labels for for the buttons are to be passed in
+     buttonLabels; 
+     The default argument (if non-nil) defines the index of the return button (1 to n).
+     If checkLabel/checkHolder are not nil, and additional labelled checkBox is added to operate on
+     checkHolder. This can be used for 'do not show this box again' checkItems."
+
+    |box buttons answer i|
+
+    box := OptionBox title:aString numberOfOptions:buttonLabels size. 
+    box buttonTitles:buttonLabels
+             actions:(buttonValues collect:[:v | [answer := v]]).
+    box image:(YesNoBox iconBitmap).
+    default notNil ifTrue:[
+        box defaultButtonIndex:(default isInteger 
+                                    ifTrue:[default]
+                                    ifFalse:[ buttonValues indexOf:default])
+    ].
+    box label:(boxLabelOrNil ? (self classResources string:'Confirm')).
+    buttons := box buttons.
+    (i := buttonValues indexOf:true) ~~ 0 ifTrue:[
+        i <= buttons size ifTrue:[
+            (buttons at:i) cursor:(Cursor thumbsUp).
+        ]
+    ].
+    (i := buttonValues indexOf:false) ~~ 0 ifTrue:[
+        i <= buttons size ifTrue:[
+            (buttons at:i) cursor:(Cursor thumbsDown).
+        ]
+    ].
+    (i := buttonValues indexOf:nil) ~~ 0 ifTrue:[
+        i <= buttons size ifTrue:[
+            (buttons at:i) cursor:(Cursor thumbsDown).
+        ]
+    ].
+    checkLabelOrNil notNil ifTrue:[
+        box addCheckBoxAtBottom:checkLabelOrNil on:checkHolderOrNil.
+    ].
+
+    self showAndThenDestroyBox:box.
+    box actions:nil.
+    ^ answer
+
+    "
+     Transcript showCR:(
+         Dialog 
+            confirmWithCancel:'really ?'
+            labels:#('mhmh' 'maybe' 'definitely')
+            values:#(1 2 3)
+            default:3
+            check:'Again' on:(true asValue)
+            title:'hello there'
+     )
+
+     Transcript showCR:(
+         Dialog 
+            confirmWithCancel:'really ?'
+            labels:#('mhmh' 'maybe' 'definitely')
+            values:#(1 2 3)
+            default:3
+            check:nil on:nil
+            title:'hello there'
+     )
+    "
+
+    "Created: / 02-03-2007 / 15:08:49 / cg"
+!
+
+confirmWithCancel:aString labels:buttonLabels values:buttonValues default:default title:boxLabelOrNil
+    "launch a Dialog, which allows user to click on any button.
+     Return the corresponding value from the values array.
+     The labels for for the buttons are to be passed in
+     buttonLabels; 
+     The default argument (if non-nil) defines the index of the 
+     return button (1 to n)"
+
+    ^ self
+        confirmWithCancel:aString 
+        labels:buttonLabels 
+        values:buttonValues 
+        default:default 
+        check:nil on:nil
+        title:boxLabelOrNil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            confirmWithCancel:'really ?'
+            labels:#('mhmh' 'maybe' 'definitely')
+            values:#(1 2 3)
+            default:3
+            title:'hello there'
+     )
+    "
+
+    "Created: / 02-03-2007 / 15:08:49 / cg"
+!
+
+confirmWithCancel:aString onCancel:cancelValue
+    "launch a Dialog, which allows user to enter yes, no and cancel.
+     return true for 'yes', false for 'no', cancelValues value for 'cancel'"
+
+    |answer|
+
+    answer := self confirmWithCancel:aString.
+    answer isNil ifTrue:[
+        ^ cancelValue value
+    ].
+    ^ answer
+
+    "
+     Dialog confirmWithCancel:'really ?' onCancel:[AbortSignal raise]
+    "
+!
+
+confirmWithCancel:aString title:titleString
+    "launch a Dialog, which allows user to enter yes, no and cancel.
+     return true for 'yes', false for 'no', nil for 'cancel'"
+
+    ^ self 
+        confirmWithCancel:aString 
+        default:nil 
+        title:titleString
+
+    "
+     Dialog confirmWithCancel:'really ?' 
+    "
+
+    "
+     Transcript showCR:(
+        Dialog confirmWithCancel:'really ?'
+     )
+    "
+
+    "Created: / 02-03-2007 / 15:11:14 / cg"
+! !
+
+!DialogBox class methodsFor:'defaults'!
+
+defaultLabel
+    "return the boxes default window title."
+
+    ^ 'Dialog'
+
+    "Created: 23.4.1996 / 17:13:10 / cg"
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'dialogBox.returnShiftsFocusToOK')>
+
+    DefaultFocusToOKOnLeave := StyleSheet at:'dialogBox.returnShiftsFocusToOK' default:false.
+
+! !
+
+!DialogBox class methodsFor:'file name dialogs'!
+
+requestDirectoryName
+    "same as requestFileName, but only show directories."
+
+    ^ self
+        requestDirectoryName:'Select Directory' 
+        default:nil
+        ok:nil abort:nil 
+        ifFail:''
+
+    "
+     Dialog requestDirectoryName
+    "
+
+    "Created: 19.4.1996 / 14:29:48 / cg"
+    "Modified: 19.4.1996 / 14:32:42 / cg"
+!
+
+requestDirectoryName:title
+    "same as requestFileName, but only show directories."
+
+    ^ self
+        requestDirectoryName:title 
+        default:nil
+        ok:nil abort:nil 
+        ifFail:''
+
+    "
+     Dialog
+        requestDirectoryName:'which directory ?' 
+    "
+
+    "Created: 19.4.1996 / 14:29:48 / cg"
+    "Modified: 19.4.1996 / 14:32:02 / cg"
+!
+
+requestDirectoryName:title default:aFileName
+    "same as requestFileName, but only show directories"
+
+    ^ self
+        requestDirectoryName:title 
+        default:aFileName
+        ok:nil abort:nil 
+        ifFail:''
+
+    "
+     Dialog
+        requestDirectoryName:'which directory ?' 
+        default:'/etc'
+    "
+
+    "Created: 19.4.1996 / 14:29:10 / cg"
+    "Modified: 19.4.1996 / 14:31:52 / cg"
+!
+
+requestDirectoryName:title default:aFileName acceptReturnAsOK:aBoolean
+    "same as requestFileName, but only show directories"
+
+    ^ self
+        requestDirectoryName:title 
+        default:aFileName
+        ok:nil abort:nil 
+        ifFail:''
+        acceptReturnAsOK:aBoolean
+
+    "
+     Dialog
+        requestDirectoryName:'which directory ?' 
+        default:'/etc'
+    "
+
+    "Created: 19.4.1996 / 14:29:10 / cg"
+    "Modified: 19.4.1996 / 14:31:52 / cg"
+!
+
+requestDirectoryName:title default:aFileName ifFail:failBlock
+    "same as requestFileName, but only show directories"
+
+    ^ self 
+        requestDirectoryName:title 
+        default:aFileName 
+        ok:nil abort:nil 
+        ifFail:failBlock
+
+    "
+     Dialog
+        requestDirectoryName:'which directory ?' 
+        default:'/etc'
+        ifFail:'none'    'none'
+    "
+
+    "Created: 19.4.1996 / 14:31:04 / cg"
+    "Modified: 23.10.1997 / 19:24:41 / cg"
+!
+
+requestDirectoryName:title default:aFileName ok:okText abort:abortText
+    "same as requestFileName, but only show directories"
+
+    ^ self 
+        requestDirectoryName:title 
+        default:aFileName 
+        ok:okText abort:abortText 
+        ifFail:''
+
+    "
+     Dialog
+        requestDirectoryName:'which directory ?' 
+        default:'/etc'
+        ok:'Yes' abort:'No'    
+    "
+
+    "Created: 19.4.1996 / 14:31:04 / cg"
+    "Modified: 23.10.1997 / 19:24:41 / cg"
+!
+
+requestDirectoryName:title default:aFileName ok:okText abort:abortText ifFail:failBlock 
+    "Same as requestFileName, but only show directories."
+    
+    ^ self 
+        requestDirectoryName:title
+        default:aFileName
+        ok:okText
+        abort:abortText
+        ifFail:failBlock
+        acceptReturnAsOK:false
+
+    "Modified (format): / 23-01-2012 / 11:46:08 / cg"
+!
+
+requestDirectoryName:title default:aFileName ok:okText abort:abortText ifFail:failBlock acceptReturnAsOK:aBoolean
+    "Same as requestFileName, but only show directories.
+     Extended to accept return as ok if wanted."
+
+    |t dir dirF fN fileBox enteredName resources|
+
+    UserPreferences current useNewFileDialog ifTrue:[
+        FileDialog notNil ifTrue:[
+            ^ "FileDialogV2" FileDialog requestDirectoryName:title default:aFileName ok:okText abort:abortText ifFail:failBlock acceptReturnAsOK:aBoolean
+        ]
+    ].
+
+    resources := self classResources.
+    fileBox := FileSelectionBox
+                    title:title
+                    action:[:fileName | enteredName := fileName].
+
+    fileBox acceptReturnAsOK:aBoolean.
+
+    okText notNil 
+        ifTrue:[ t := okText ]
+        ifFalse:[ t := resources string:'OK' ].
+    fileBox okText:t.
+
+    abortText notNil 
+        ifTrue:[ t := abortText ]
+        ifFalse:[ t := resources string:'Cancel' ].
+    fileBox abortText:t.
+
+    fN := aFileName.
+    dirF := (aFileName ? '.') asFilename.
+    dirF name = dirF baseName ifFalse:[
+        dir := dirF directoryName.
+        fN := dirF baseName.
+    ] ifTrue:[
+        dir := FileSelectionBox lastFileSelectionDirectory.
+    ].
+    dir notNil ifTrue:[
+        fileBox directory:dir.
+    ].
+
+    fileBox initialText:fN.
+    fileBox selectingDirectory:true.
+
+    self showAndThenDestroyBox:fileBox.
+
+    (enteredName isEmptyOrNil) ifTrue:[
+        ^ failBlock value
+    ].
+
+    FileSelectionBox lastFileSelectionDirectory:(enteredName asFilename directoryName).
+
+    ^ enteredName
+
+    "
+     Dialog
+        requestDirectoryName:'which directory ?' 
+        default:'/etc'
+        ifFail:'none'
+    "
+
+    "Created: / 19-04-1996 / 14:31:04 / cg"
+    "Modified: / 23-01-2012 / 11:43:07 / cg"
+!
+
+requestDirectoryName:titleString default:aFileName ok:okText abort:abortText version:versionSymbol pattern:pattern fromDirectory:aDirectoryPath ifFail:failBlock whenBoxCreatedEvaluate:boxCreatedCallback asLoadDialog:aBoolean
+    "same as requestFileName, but only show directories"
+
+    UserPreferences current useNewFileDialog ifTrue:[
+        FileDialog notNil ifTrue:[
+            ^ FileDialog
+                requestDirectoryName:titleString 
+                default:aFileName 
+                ok:okText 
+                abort:abortText 
+                version:versionSymbol 
+                pattern:pattern 
+                fromDirectory:aDirectoryPath 
+                ifFail:failBlock 
+                whenBoxCreatedEvaluate:boxCreatedCallback 
+                asLoadDialog:aBoolean.
+        ].
+    ].
+    ^ self
+        requestDirectoryName:titleString 
+        default:aFileName 
+        ok:okText abort:abortText 
+        ifFail:failBlock 
+        acceptReturnAsOK:true
+
+    "Modified: / 23-01-2012 / 17:23:27 / cg"
+!
+
+requestFileName
+    "launch a Dialog, which allows the user to enter a filename.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+	requestFileName:'filename:' 
+
+    "
+     Dialog requestFileName
+    "
+
+    "Created: 27.1.1996 / 13:24:35 / cg"
+    "Modified: 19.4.1996 / 13:49:28 / cg"
+!
+
+requestFileName:titleString
+    "launch a Dialog, which allows user to enter a filename.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+	requestFileName:titleString 
+	default:'file.ext' 
+
+    "
+     Dialog requestFileName:'enter a fileName:' 
+     Dialog requestFileName:'enter a fileName:' 
+    "
+
+    "Created: 27.1.1996 / 13:24:35 / cg"
+    "Modified: 19.4.1996 / 13:53:17 / cg"
+!
+
+requestFileName:titleString default:defaultName
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName 
+        version:nil 
+        ifFail:''
+
+    "
+     Dialog requestFileName:'Enter a fileName:' default:''  
+     Dialog requestFileName:'Enter a fileName:' default:'Makefile.bak'  
+    "
+
+    "Modified: / 19-04-1996 / 13:47:44 / cg"
+    "Modified (comment): / 23-01-2012 / 18:02:51 / cg"
+!
+
+requestFileName:titleString default:defaultName fromDirectory:aDirectoryPath
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName 
+        version:nil 
+        ifFail:''
+        pattern:nil 
+        fromDirectory:aDirectoryPath
+        forSave:false
+        whenBoxCreatedEvaluate:nil
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:' 
+        default:'Makefile.bak'
+        fromDirectory:'..'      
+    "
+
+    "Modified: / 27-10-2010 / 10:40:42 / cg"
+!
+
+requestFileName:titleString default:defaultName ifFail:cancelBlockOrValue
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName 
+        version:nil 
+        ifFail:cancelBlockOrValue
+
+    "
+     Dialog requestFileName:'enter a fileName:' default:''  
+     Dialog requestFileName:'enter a fileName:' default:'Makefile.bak'  
+    "
+
+    "Modified: 19.4.1996 / 13:47:44 / cg"
+!
+
+requestFileName:titleString default:defaultName ifFail:failReturn pattern:pattern fromDirectory:dir
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from dir.
+     The box will show ok/cancel in its buttons.
+     The matchPattern is set to pattern initially.
+     Return the string or failReturn if cancel was pressed."
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName
+        version:nil
+        ifFail:failReturn
+        pattern:pattern
+        fromDirectory:dir
+
+!
+
+requestFileName:titleString default:defaultName ok:okText abort:abortText
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string or nil if cancel was pressed."
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText abort:abortText 
+        pattern:'*'
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        ok:'yeah' 
+        abort:'oh, no' 
+    "
+!
+
+requestFileName:titleString default:defaultName ok:okText abort:abortText pattern:pattern
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string or nil if cancel was pressed."
+
+    ^ self 
+	requestFileName:titleString 
+	default:defaultName
+	ok:okText 
+	abort:abortText 
+	pattern:pattern
+	fromDirectory:nil
+
+    "
+     Dialog 
+	requestFileName:'enter a fileName:'
+	default:''
+	ok:'yeah' 
+	abort:'oh, no' 
+	pattern:'*.st'   
+    "
+
+    "Modified: 20.2.1997 / 18:13:13 / cg"
+!
+
+requestFileName:titleString default:defaultName ok:okText abort:abortText pattern:pattern fromDirectory:aDirectoryPathOrNil
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string, or nil if cancel was pressed."
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText 
+        abort:abortText 
+        pattern:pattern 
+        fromDirectory:aDirectoryPathOrNil 
+        whenBoxCreatedEvaluate:nil
+!
+
+requestFileName:titleString default:defaultName ok:okText abort:abortText pattern:pattern fromDirectory:aDirectoryPathOrNil forSave:forSave
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string, or nil if cancel was pressed."
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText 
+        abort:abortText 
+        pattern:pattern 
+        fromDirectory:aDirectoryPathOrNil
+        forSave:forSave
+        whenBoxCreatedEvaluate:nil
+
+    "Created: / 27-10-2010 / 11:22:58 / cg"
+!
+
+requestFileName:titleString default:defaultName ok:okText abort:abortText pattern:pattern fromDirectory:aDirectoryPathOrNil forSave:forSave whenBoxCreatedEvaluate:boxCreatedCallback
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string, or nil if cancel was pressed."
+
+    |box defaultDir defaultNm dir enteredName|
+
+    Screen current nativeFileDialogs ifTrue:[
+        OperatingSystem isMSWINDOWSlike ifTrue:[
+            Win32FileDialog notNil ifTrue:[
+                ^ Win32FileDialog    
+                    fileDialogFor:nil 
+                    save:forSave 
+                    title:titleString 
+                    inDirectory:aDirectoryPathOrNil
+                    initialAnswer:defaultName
+                    filter:pattern
+                    extension:nil
+            ].
+        ].
+    ].
+    UserPreferences current useNewFileDialog ifTrue:[
+        FileDialog notNil ifTrue:[
+            ^ FileDialog 
+                requestFileName:titleString 
+                default:defaultName 
+                ok:okText abort:abortText 
+                pattern:pattern 
+                fromDirectory:aDirectoryPathOrNil 
+                whenBoxCreatedEvaluate:boxCreatedCallback
+        ]
+    ].
+
+    defaultNm := defaultName.
+    defaultDir := aDirectoryPathOrNil.
+    defaultDir isNil ifTrue:[
+        defaultNm notNil ifTrue:[
+            defaultDir := defaultName asFilename directoryName.
+            defaultNm := defaultNm asFilename baseName.
+            defaultDir = Filename currentDirectory name ifTrue:[
+                defaultName asFilename isExplicitRelative ifFalse:[
+                    defaultDir := nil
+                ]
+            ]
+        ].
+    ].
+
+    box := FileSelectionBox 
+               title:titleString
+               okText:okText 
+               abortText:abortText
+               action:[:fileName | enteredName := fileName].
+
+    defaultDir notNil ifTrue:[
+        box directory:defaultDir
+    ] ifFalse:[
+        dir := FileSelectionBox lastFileSelectionDirectory.
+        dir notNil ifTrue:[
+            box directory:dir.
+        ].
+    ].
+    box pattern:pattern.
+    box initialText:defaultNm.
+    boxCreatedCallback notNil ifTrue:[boxCreatedCallback value:box].
+
+    self showAndThenDestroyBox:box.
+    box action:nil.
+
+    (enteredName notEmptyOrNil) ifTrue:[
+        FileSelectionBox lastFileSelectionDirectory:(enteredName asFilename directoryName).
+    ].
+
+    ^ enteredName
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        ok:'yeah' 
+        abort:'oh, no' 
+        pattern:'rc*'
+        fromDirectory:'/etc'  
+    "
+
+    "Modified: / 24-08-2010 / 17:28:57 / sr"
+    "Created: / 27-10-2010 / 11:21:05 / cg"
+!
+
+requestFileName:titleString default:defaultName ok:okText abort:abortText pattern:pattern fromDirectory:aDirectoryPathOrNil whenBoxCreatedEvaluate:boxCreatedCallback
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string, or nil if cancel was pressed."
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText 
+        abort:abortText 
+        pattern:pattern 
+        fromDirectory:aDirectoryPathOrNil 
+        forSave:false 
+        whenBoxCreatedEvaluate:boxCreatedCallback
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        ok:'yeah' 
+        abort:'oh, no' 
+        pattern:'rc*'
+        fromDirectory:'/etc'  
+    "
+
+    "Modified: / 24-08-2010 / 17:28:57 / sr"
+    "Modified: / 27-10-2010 / 11:21:44 / cg"
+!
+
+requestFileName:titleString default:defaultName ok:okText abort:abortText version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback asLoadDialog:aBoolean
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string, or nil if cancel was pressed
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    UserPreferences current useNewFileDialog ifTrue:[
+        FileDialog notNil ifTrue:[
+            ^ FileDialog
+                requestFileName:titleString 
+                default:defaultName 
+                ok:okText 
+                abort:abortText 
+                version:versionSymbol 
+                ifFail:failBlock 
+                pattern:pattern 
+                fromDirectory:aDirectoryPath 
+                whenBoxCreatedEvaluate:boxCreatedCallback 
+                asLoadDialog:aBoolean.
+        ].
+    ].
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText abort:abortText 
+        pattern:pattern fromDirectory:aDirectoryPath forSave:aBoolean not
+        whenBoxCreatedEvaluate:boxCreatedCallback
+
+    "Modified: / 23-01-2012 / 17:22:57 / cg"
+!
+
+requestFileName:titleString default:defaultName pattern:pattern
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show ok/cancel in its buttons.
+     The matchPattern is set to pattern initially.
+     Return the string or nil if cancel was pressed."
+
+    |resources|
+
+    resources := self classResources.
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName
+        ok:(resources string:'OK') 
+        abort:(resources string:'Cancel') 
+        pattern:pattern
+        fromDirectory:nil
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        pattern:'*.st'   
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        pattern:'*.st;*.h'   
+    "
+
+    "Created: 21.2.1997 / 11:16:52 / cg"
+    "Modified: 21.2.1997 / 11:18:40 / cg"
+!
+
+requestFileName:titleString default:defaultName pattern:pattern fromDirectory:aDirectory
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show ok/cancel in its buttons.
+     The matchPattern is set to pattern initially.
+     Return the string or nil if cancel was pressed."
+
+    |resources|
+
+    resources := self classResources.
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName
+        ok:(resources string:'OK') 
+        abort:(resources string:'Cancel') 
+        pattern:pattern
+        fromDirectory:aDirectory
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        pattern:'*.st'   
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        pattern:'*.st;*.h'   
+    "
+
+    "Created: 21.2.1997 / 11:16:52 / cg"
+    "Modified: 21.2.1997 / 11:18:40 / cg"
+!
+
+requestFileName:titleString default:defaultName version:versionSymbol
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the pathname string or the empty string if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+	#mustBeNew      - fail (return empty string) if the file exists
+	#new            - confirm if the file exists
+	#mustBeOld      - fail if the file does not exist
+	#old            - confirm if the file does not exist
+	#any (other)    - no validation
+    "
+
+    ^ self 
+	requestFileName:titleString 
+	default:defaultName 
+	version:versionSymbol 
+	ifFail:''
+
+    "
+     Dialog requestFileName:'enter a fileName:'
+			default:''
+			version:nil   
+
+     Dialog requestFileName:'enter a fileName:'
+			default:''
+			version:#mustBeNew 
+
+     Dialog requestFileName:'enter a fileName:'
+			default:''
+			version:#new   
+    "
+
+    "Modified: 19.4.1996 / 13:53:58 / cg"
+!
+
+requestFileName:titleString default:defaultName version:versionSymbol ifFail:failBlock
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+	#mustBeNew      - fail (return empty string) if the file exists
+	#new            - confirm if the file exists
+	#mustBeOld      - fail if the file does not exist
+	#old            - confirm if the file does not exist
+	#any (other)    - no validation
+    "
+
+    ^ self
+	requestFileName:titleString 
+	default:defaultName 
+	version:versionSymbol 
+	ifFail:failBlock
+	fromDirectory:nil
+
+    "
+     Dialog 
+	requestFileName:'enter a fileName:'
+	default:''
+	version:nil
+	ifFail:['none']   
+    "
+    "
+     Dialog 
+	requestFileName:'enter a fileName:'
+	default:''
+	version:#old 
+	ifFail:['none']   
+    "
+
+    "Modified: 19.4.1996 / 14:26:36 / cg"
+!
+
+requestFileName:titleString default:defaultName version:versionSymbol ifFail:failBlock fromDirectory:aDirectoryPath
+    "launch a Dialog, which allows user to enter a filename.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName 
+        version:versionSymbol 
+        ifFail:failBlock 
+        pattern:nil 
+        fromDirectory:aDirectoryPath
+        
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:nil
+        ifFail:['none']
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:#old 
+        ifFail:['none']   
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:#mustBeNew 
+        ifFail:['none']   
+        fromDirectory:'/etc'
+    "
+
+    "Modified: 20.2.1997 / 18:12:28 / cg"
+    "Modified: 21.2.1997 / 14:27:27 / stefan"
+!
+
+requestFileName:titleString default:defaultName version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath
+    "launch a Dialog, which allows user to enter a filename.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        version:versionSymbol 
+        ifFail:failBlock 
+        pattern:pattern 
+        fromDirectory:aDirectoryPath 
+        whenBoxCreatedEvaluate:nil
+!
+
+requestFileName:titleString default:defaultName version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath forSave:forSave whenBoxCreatedEvaluate:boxCreatedCallback
+    "launch a Dialog, which allows user to enter a filename.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    |box defaultDir defaultNm|
+
+    Screen current nativeFileDialogs ifTrue:[
+        OperatingSystem isMSWINDOWSlike ifTrue:[
+            Win32FileDialog notNil ifTrue:[
+                ^ Win32FileDialog    
+                    fileDialogFor:nil 
+                    save:forSave 
+                    title:titleString 
+                    inDirectory:aDirectoryPath
+                    initialAnswer:defaultName
+                    filter:pattern
+                    extension:nil
+            ]
+        ].
+    ].
+
+    UserPreferences current useNewFileDialog ifTrue:[
+        FileDialog notNil ifTrue:[ 
+            ^ FileDialog    
+                requestFileName:titleString 
+                default:defaultName 
+                version:versionSymbol 
+                ifFail:failBlock 
+                pattern:pattern 
+                fromDirectory:aDirectoryPath 
+                whenBoxCreatedEvaluate:boxCreatedCallback.
+        ].
+    ].
+
+    defaultName notNil ifTrue:[defaultNm := defaultName asFilename name].
+    defaultDir := aDirectoryPath.
+    defaultDir isNil ifTrue:[
+        defaultNm notNil ifTrue:[
+            defaultName asFilename withoutSuffix baseName = '*' ifTrue:[
+                defaultDir := FileSelectionBox lastFileSelectionDirectory.
+                defaultNm := ''.
+            ] ifFalse:[
+                defaultDir := defaultName asFilename directoryName.
+                defaultNm := defaultNm asFilename baseName.
+            ]
+        ].
+    ].
+
+    box := FileSelectionBox title:titleString.
+    defaultDir notNil ifTrue:[box directory:defaultDir].
+    pattern notNil ifTrue:[box pattern:pattern].
+    box initialText:defaultNm.
+    box action:[:name | 
+        versionSymbol == #mustBeNew ifTrue:[
+            "/ file may not exist
+            name asFilename exists ifTrue:[^ ''].
+        ].
+        versionSymbol == #new ifTrue:[
+            "/ file may not exist
+            name asFilename exists ifTrue:[
+                (self confirm:(self classResources string:'''%1'' exists.\\Continue anyway ?' with:box fileName) withCRs)
+                ifFalse:[^ ''].
+            ].
+        ].
+        versionSymbol == #mustBeOld ifTrue:[
+            name asFilename exists ifFalse:[^ ''].
+        ].
+        versionSymbol == #old ifTrue:[
+            "/ file may not exist
+            name asFilename exists ifFalse:[
+                (self confirm:(self classResources string:'''%1'' does not exist yet.\\Continue anyway ?' with:box fileName) withCRs)
+                ifFalse:[^ ''].
+            ].
+        ].
+        FileSelectionBox lastFileSelectionDirectory:box directory.
+        box destroy. 
+        ^ name
+    ].
+    boxCreatedCallback notNil ifTrue:[boxCreatedCallback value:box].
+    self showAndThenDestroyBox:box.
+    box action:nil.
+    ^ failBlock value
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:nil
+        ifFail:['none']
+        pattern:'*.conf'
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'Enter a fileName:'
+        default:''
+        version:#old 
+        ifFail:['none']   
+        pattern:'*.conf'
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'Enter a fileName:'
+        default:''
+        version:#mustBeNew 
+        ifFail:['none']   
+        pattern:'*.conf'
+        fromDirectory:'/etc'
+    "
+
+    "Modified: / 24-08-2010 / 17:29:04 / sr"
+    "Created: / 27-10-2010 / 10:38:10 / cg"
+!
+
+requestFileName:titleString default:defaultName version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback
+    "launch a Dialog, which allows user to enter a filename.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        version:versionSymbol 
+        ifFail:failBlock 
+        pattern:pattern 
+        fromDirectory:aDirectoryPath 
+        forSave:false
+        whenBoxCreatedEvaluate:boxCreatedCallback
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:nil
+        ifFail:['none']
+        pattern:'*.conf'
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:#old 
+        ifFail:['none']   
+        pattern:'*.conf'
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:#mustBeNew 
+        ifFail:['none']   
+        pattern:'*.conf'
+        fromDirectory:'/etc'
+    "
+
+    "Created: / 21-02-1997 / 14:23:44 / stefan"
+    "Modified: / 24-08-2010 / 17:29:04 / sr"
+    "Modified: / 27-10-2010 / 10:38:53 / cg"
+!
+
+requestFileName:titleString fromDirectory:aDirectory
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show ok/cancel in its buttons.
+     Return the string or nil if cancel was pressed."
+
+    ^ self 
+        requestFileName:titleString 
+        default:nil
+        pattern:'*'
+        fromDirectory:aDirectory
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        fromDirectory:'../../libbasic'
+    "
+!
+
+requestFileName:titleString ifFail:cancelBlockOrValue
+    "launch a Dialog, which allows user to enter a filename.
+     Return the pathname string consisting of the full pathname of the filename,
+     or the value from evaluating cancelBlock (if cancel was pressed)."
+
+    ^ self 
+        requestFileName:titleString 
+        default:'file.ext'
+        version:nil
+        ifFail:cancelBlockOrValue
+
+    "
+     Dialog requestFileName:'enter a fileName:' ifFail:['foo']
+     Dialog requestFileName:'enter a fileName:' ifFail:[nil] 
+    "
+
+    "Modified: 19.4.1996 / 13:53:17 / cg"
+    "Created: 19.4.1996 / 13:56:28 / cg"
+!
+
+requestFileName:titleString pattern:pattern
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show ok/cancel in its buttons.
+     The matchPattern is set to pattern initially.
+     Return the string or nil if cancel was pressed."
+
+    ^ self 
+        requestFileName:titleString 
+        default:nil
+        pattern:pattern
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        pattern:'*.st'   
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        pattern:'*.st;*.h'   
+    "
+!
+
+requestFileName:titleString pattern:pattern fromDirectory:aDirectory
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show ok/cancel in its buttons.
+     The matchPattern is set to pattern initially.
+     Return the string or nil if cancel was pressed."
+
+    ^ self 
+        requestFileName:titleString 
+        default:nil
+        pattern:pattern
+        fromDirectory:aDirectory
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        pattern:'*.st'   
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        pattern:'*.st;*.h'   
+    "
+!
+
+requestFileNameForSave:titleString
+    "launch a Dialog, which allows user to enter a filename.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+        requestFileNameForSave:titleString 
+        default:'file.ext' 
+
+    "
+     Dialog requestFileName:'enter a fileName:' 
+     Dialog requestFileName:'enter a fileName:' 
+    "
+
+    "Created: / 27-10-2010 / 11:31:52 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+        requestFileNameForSave:titleString 
+        default:defaultName 
+        version:nil 
+        ifFail:''
+
+    "
+     Dialog requestFileName:'enter a fileName:' default:''  
+     Dialog requestFileNameForSave:'enter a fileName:' default:''  
+    "
+
+    "Created: / 27-10-2010 / 11:32:06 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName fromDirectory:aDirectoryPath
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName 
+        version:nil 
+        ifFail:''
+        pattern:nil 
+        fromDirectory:aDirectoryPath
+        forSave:true
+        whenBoxCreatedEvaluate:nil
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:' 
+        default:'Makefile.bak'
+        fromDirectory:'..'      
+    "
+
+    "Created: / 27-10-2010 / 10:41:04 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName ok:okText abort:abortText pattern:pattern
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those from the current directory.
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string or nil if cancel was pressed."
+
+    ^ self 
+        requestFileNameForSave:titleString 
+        default:defaultName
+        ok:okText 
+        abort:abortText 
+        pattern:pattern
+        fromDirectory:nil
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        ok:'yeah' 
+        abort:'oh, no' 
+        pattern:'*.st'   
+    "
+
+    "Created: / 27-10-2010 / 11:29:20 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName ok:okText abort:abortText pattern:pattern fromDirectory:aDirectoryPathOrNil
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string, or nil if cancel was pressed."
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText 
+        abort:abortText 
+        pattern:pattern 
+        fromDirectory:aDirectoryPathOrNil
+        forSave:true
+        whenBoxCreatedEvaluate:nil
+
+    "Created: / 27-10-2010 / 11:24:37 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName ok:okText abort:abortText pattern:pattern fromDirectory:aDirectoryPathOrNil whenBoxCreatedEvaluate:boxCreatedCallback
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return the string, or nil if cancel was pressed."
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText 
+        abort:abortText 
+        pattern:pattern 
+        fromDirectory:aDirectoryPathOrNil 
+        forSave:true 
+        whenBoxCreatedEvaluate:boxCreatedCallback
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        ok:'yeah' 
+        abort:'oh, no' 
+        pattern:'rc*'
+        fromDirectory:'/etc'  
+    "
+
+    "Modified: / 24-08-2010 / 17:28:57 / sr"
+    "Created: / 27-10-2010 / 11:23:40 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName version:versionSymbol ifFail:failBlock
+    "launch a Dialog, which allows user to enter a filename.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    ^ self
+        requestFileNameForSave:titleString 
+        default:defaultName 
+        version:versionSymbol 
+        ifFail:failBlock
+        fromDirectory:nil
+
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:nil
+        ifFail:['none']   
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:#old 
+        ifFail:['none']   
+    "
+
+    "Created: / 27-10-2010 / 11:32:03 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName version:versionSymbol ifFail:failBlock fromDirectory:aDirectoryPath
+    "launch a Dialog, which allows user to enter a filename.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    ^ self 
+        requestFileNameForSave:titleString 
+        default:defaultName 
+        version:versionSymbol 
+        ifFail:failBlock 
+        pattern:nil 
+        fromDirectory:aDirectoryPath
+        
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:nil
+        ifFail:['none']
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:#old 
+        ifFail:['none']   
+        fromDirectory:'/etc'
+    "
+    "
+     Dialog 
+        requestFileName:'enter a fileName:'
+        default:''
+        version:#mustBeNew 
+        ifFail:['none']   
+        fromDirectory:'/etc'
+    "
+
+    "Modified: / 21-02-1997 / 14:27:27 / stefan"
+    "Created: / 27-10-2010 / 11:32:22 / cg"
+!
+
+requestFileNameForSave:titleString default:defaultName version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath
+    "launch a Dialog, which allows user to enter a filename.
+     Return the string or the value of failBlock if cancel was pressed.
+     The version argument allows validation of the files existance;
+     it may be any of:
+        #mustBeNew      - fail (return empty string) if the file exists
+        #new            - confirm if the file exists
+        #mustBeOld      - fail if the file does not exist
+        #old            - confirm if the file does not exist
+        #any (other)    - no validation
+    "
+
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        version:versionSymbol 
+        ifFail:failBlock 
+        pattern:pattern 
+        fromDirectory:aDirectoryPath
+        forSave:true
+        whenBoxCreatedEvaluate:nil
+
+    "Created: / 27-10-2010 / 11:32:55 / cg"
+!
+
+requestFileNames:titleString default:defaultName ok:okText abort:abortText ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback asLoadDialog:asLoadDialog
+    "launch a Dialog, which allows user to enter a filename.
+     The files presented initially are those in aDirectoryPathOrNil, or the
+     last fileBox directory (default: current directory) (if a nil path is given).
+     The box will show okText in its okButton, abortText in the abortButton.
+     The matchPattern is set to pattern initially.
+     Return all selected Filenames as filenames in a collection, or nil if cancel was pressed
+    "
+
+    UserPreferences current useNewFileDialog ifTrue:[
+        FileDialog notNil ifTrue:[
+            ^ FileDialog
+                requestFileNames:titleString 
+                default:defaultName 
+                ok:okText 
+                abort:abortText 
+                ifFail:failBlock 
+                pattern:pattern 
+                fromDirectory:aDirectoryPath 
+                whenBoxCreatedEvaluate:boxCreatedCallback 
+                asLoadDialog:asLoadDialog.
+        ].
+    ].
+    ^ self
+        requestFileName:titleString 
+        default:defaultName 
+        ok:okText abort:abortText 
+        pattern:pattern fromDirectory:aDirectoryPath forSave:asLoadDialog not
+        whenBoxCreatedEvaluate:boxCreatedCallback
+
+    "Modified: / 23-01-2012 / 17:24:06 / cg"
+!
+
+requestNewFileName:titleString default:defaultName
+    "launch a Dialog, which allows user to enter a filename.
+     We expect a new files (i.e. nonexisting) name to be enterred,
+     and confirm if it already exists.
+     The box will not allow pressing 'ok' without an entered string.
+     Return the pathname string consisting of the full pathname of the filename,
+     or an empty string (if cancel was pressed)."
+
+    ^ self 
+        requestFileName:titleString 
+        default:defaultName 
+        version:#new 
+        ifFail:''
+
+    "
+     Dialog requestNewFileName:'enter a fileName:' default:''  
+    "
+
+    "Modified: 27.1.1996 / 13:44:13 / cg"
+!
+
+requestSaveFileName:title default:defaultOrNil fromDirectory:directoryOrNil action:action appendAction:appendActionOrNil
+    "save contents into a file - ask user for filename using a fileSelectionBox.
+     Append is NOT offered, if appendActionOrNil is nil."
+
+    |doAppend fileBox fileName dialog default resources|
+
+    default := defaultOrNil.
+    default notNil ifTrue:[ default := default asString].
+
+    resources := self classResources.
+
+    Screen current nativeFileDialogs ifTrue:[
+        OperatingSystem isMSWINDOWSlike ifTrue:[
+            appendActionOrNil isNil ifTrue:[
+                Win32FileDialog notNil ifTrue:[
+                    ^ Win32FileDialog    
+                        fileDialogFor:nil 
+                        save:true 
+                        title:title 
+                        inDirectory:directoryOrNil
+                        initialAnswer:default
+                        filter:nil
+                        extension:nil
+                ]
+            ].
+        ].
+    ].
+
+    (UserPreferences current useNewFileDialog and:[FileDialog notNil]) ifTrue:[
+        fileName := FileDialog 
+                    requestFileName:title 
+                    default:default
+                    ok:(resources string:'Save') 
+                    abort:nil 
+                    version:nil 
+                    ifFail:nil 
+                    pattern:nil 
+                    fromDirectory:directoryOrNil 
+                    whenBoxCreatedEvaluate:[:box | (dialog := box) appendButtonVisibleHolder value:appendActionOrNil notNil].
+
+        doAppend := dialog appendWasPressed 
+    ] ifFalse:[
+        fileBox := FileSaveBox
+                        title:title
+                        okText:(resources string:'Save')
+                        abortText:(resources string:'Cancel')
+                        action:[:fn | doAppend := false. fileName := fn].
+        fileBox appendAction:[:fn | doAppend := true. fileName := fn].
+        directoryOrNil notNil ifTrue:[ fileBox directory:directoryOrNil].
+        default notNil ifTrue:[fileBox initialText:default].
+        fileBox showAtPointer.
+        fileBox destroy.
+    ].
+
+    fileName size > 0 ifTrue:[
+        (doAppend ifTrue:[appendActionOrNil] ifFalse:[action])
+            value:fileName
+    ].
+    ^ self.
+
+    "
+     Dialog
+        requestSaveFileName:'Save dialog example with append' 
+        default:'xxx.txt' 
+        fromDirectory:(Filename homeDirectory) 
+        action:[:fn | Transcript showCR:'save ',fn] 
+        appendAction:[:fn | Transcript showCR:'append ',fn]
+
+     Dialog
+        requestSaveFileName:'Save dialog example' 
+        default:'xxx.txt' 
+        fromDirectory:(Filename homeDirectory) 
+        action:[:fn | Transcript showCR:'save ',fn] 
+        appendAction:nil
+    "
+
+    "Modified: / 24-08-2010 / 17:29:12 / sr"
+    "Modified: / 23-01-2012 / 11:53:07 / cg"
+! !
+
+!DialogBox class methodsFor:'fill in the blank dialogs'!
+
+forRequestText:title editViewClass:editViewClass lines:numLines columns:numCols initialAnswer:initialText initialSelection:anIntervalOrNil model:textModel
+    "return a dialog asking for multiline text.
+     The box is not shown yet, for further customization"
+
+    ^ self
+        forRequestText:title 
+        editViewClass:editViewClass
+        lines:numLines columns:numCols 
+        initialAnswer:initialText 
+        setupWith:
+            [:textView :dialog|
+                initialText notEmptyOrNil ifTrue:[
+                    textModel value:initialText
+                ].
+                textView scrolledView model:textModel.
+                textView scrolledView 
+                    perform:#acceptChannel: 
+                    with:(dialog acceptChannel)
+                    ifNotUnderstood:[].
+
+                anIntervalOrNil notNil ifTrue:[
+                    textView scrolledView selectFromCharacterPosition:anIntervalOrNil start to:anIntervalOrNil stop.
+                ].
+            ]
+
+    "Modified: / 12-10-2006 / 13:59:21 / cg"
+!
+
+forRequestText:title editViewClass:editViewClass lines:numLines columns:numCols initialAnswer:initialText model:textModel
+    "return a dialog asking for multiline text.
+     The box is not shown yet, for further customization"
+
+    ^ self
+        forRequestText:title 
+        editViewClass:editViewClass 
+        lines:numLines columns:numCols 
+        initialAnswer:initialText initialSelection:nil      
+        model:textModel
+!
+
+forRequestText:title editViewClass:editViewClass lines:numLines columns:numCols initialAnswer:initialText setupWith:aSetupBlockOrNil
+    "return a dialog asking for multiline text.
+     The box is not shown yet, for further customization"
+
+    |dialog textView|
+
+    dialog := self new.
+    (dialog addTextLabel:(self classResources string:title)) adjust:#left.
+    textView := dialog addTextBoxOn:nil 
+                        class:editViewClass
+                        withNumberOfLines:numLines 
+                        hScrollable:true 
+                        vScrollable:true.
+    initialText notEmptyOrNil ifTrue:[
+        textView contents:initialText
+    ].
+    dialog width:(textView preferredExtentForLines:numLines cols:numCols) x.
+    dialog addAbortAndOkButtons.
+    dialog okButton isReturnButton:false.
+    dialog makeTabable:textView.
+    dialog stickAtBottomWithVariableHeight:textView.
+
+    aSetupBlockOrNil notNil ifTrue:[
+        aSetupBlockOrNil valueWithOptionalArgument:textView and:dialog
+    ].
+
+    ^ dialog
+
+    "
+     |dialog textHolder|
+
+     textHolder := ValueHolder new.
+     dialog := Dialog 
+                forRequestText:'foo' 
+                editViewClass:EditTextView
+                lines:10 columns:40 
+                initialAnswer:'hello' model:textHolder.
+     dialog open.
+     dialog accepted ifTrue:[
+        ^ textHolder value
+     ].
+     ^ nil           
+    "
+
+    "
+     |dialog textHolder|
+
+     textHolder := ValueHolder new.
+     dialog := Dialog 
+                forRequestText:'foo' 
+                editViewClass:CodeView
+                lines:10 columns:40 
+                initialAnswer:'hello' model:textHolder.
+     dialog open.
+     dialog accepted ifTrue:[
+        ^ textHolder value
+     ].
+     ^ nil           
+    "
+
+    "Created: / 12-10-2006 / 13:59:27 / cg"
+!
+
+forRequestText:title lines:numLines columns:numCols initialAnswer:initialText initialSelection:anIntervalOrNil model:textModel
+    "return a dialog asking for multiline text.
+     The box is not shown yet, for further customization"
+
+    ^ self
+        forRequestText:title 
+        editViewClass:EditTextView
+        lines:numLines columns:numCols 
+        initialAnswer:initialText initialSelection:anIntervalOrNil
+        model:textModel
+
+    "
+     |dialog textHolder|
+
+     textHolder := ValueHolder new.
+     dialog := Dialog forRequestText:'foo' lines:10 columns:40 initialAnswer:'hello' model:textHolder.
+     dialog open.
+     dialog accepted ifTrue:[
+        ^ textHolder value
+     ].
+     ^ nil           
+    "
+
+    "Modified: / 12-10-2006 / 12:45:47 / cg"
+!
+
+forRequestText:title lines:numLines columns:numCols initialAnswer:initialText model:textModel
+    "return a dialog asking for multiline text.
+     The box is not shown yet, for further customization"
+
+    ^ self
+        forRequestText:title 
+        editViewClass:EditTextView
+        lines:numLines columns:numCols 
+        initialAnswer:initialText initialSelection:nil
+        model:textModel
+
+    "
+     |dialog textHolder|
+
+     textHolder := ValueHolder new.
+     dialog := Dialog forRequestText:'foo' lines:10 columns:40 initialAnswer:'hello' model:textHolder.
+     dialog open.
+     dialog accepted ifTrue:[
+        ^ textHolder value
+     ].
+     ^ nil           
+    "
+
+    "Modified: / 12-10-2006 / 12:45:47 / cg"
+!
+
+request:aString 
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) 
+     or the empty string (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:''
+        onCancel:''
+
+    "
+     Dialog request:'enter a string:' 
+    "
+
+    "Modified: 29.5.1996 / 14:26:25 / cg"
+!
+
+request:aString displayAt:aPoint centered:centered action:resultAction initialAnswer:initial
+    "launch a Dialog, which allows user to enter a string.
+     If aPoint is nonNil, the box is shown there, optionally centered around
+     that point.
+     If it is nil, it is shown at the current pointer position or at the 
+     screen center.
+     Return the string or an empty string (if cancel was pressed)"
+
+    ^ self
+        request:aString 
+        displayAt:aPoint 
+        centered:centered 
+        action:resultAction 
+        initialAnswer:initial
+        okLabel:nil 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     centered around 200@200:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:200@200
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+
+
+     origin at 200@200:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:200@200
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+
+     under mouse pointer:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+
+     centered on the screen:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+    "
+
+    "Created: 7.12.1995 / 23:14:10 / cg"
+    "Modified: 29.5.1996 / 14:19:36 / cg"
+!
+
+request:aString displayAt:aPoint centered:centered action:resultAction initialAnswer:initial okLabel:okLabel cancelLabel:cancelLabel onCancel:cancelValue
+    "launch a Dialog, which allows user to enter a string.
+     If aPoint is nonNil, the box is shown there, optionally centered around it.
+     If it is nil, it is shown at the current pointer position or at the 
+     screen center (if centered is true).
+     The ok-button is labelled okLabel (or the default, ifNil),
+     the cancel-button is labelled cancelLabel (or the default, ifNil).
+     Return the string or the value of cancelValue (if cancel was pressed)"
+
+    ^ self
+        request:aString 
+        displayAt:aPoint 
+        centered:centered 
+        action:resultAction 
+        initialAnswer:initial 
+        okLabel:okLabel 
+        cancelLabel:cancelLabel 
+        title:nil 
+        onCancel:cancelValue
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     at topLeft (centering is suppressed, to make the box fully visible)    
+         Dialog 
+            request:'Enter a string:'
+            displayAt:0@0
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            onCancel:#foo
+
+     centered around 200@200:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:200@200
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            onCancel:#foo
+
+     topLeft of box at 200@200:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:200@200
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            onCancel:#foo
+
+     under mouse pointer:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            onCancel:#foo
+
+     centered on the screen:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            onCancel:#foo
+    "
+
+    "Created: 7.12.1995 / 23:14:10 / cg"
+    "Modified: 29.5.1996 / 14:35:45 / cg"
+!
+
+request:aString displayAt:aPoint centered:centered action:resultAction initialAnswer:initial okLabel:okLabel cancelLabel:cancelLabel title:titleString onCancel:cancelValue
+    "launch a Dialog, which allows user to enter a string.
+     The dialogs window is titled titleString, or the default (if nil).
+     If aPoint is nonNil, the box is shown there, optionally centered around it.
+     If it is nil, it is shown at the current pointer position or at the 
+     screen center (if centered is true).
+     The ok-button is labelled okLabel (or the default, ifNil),
+     the cancel-button is labelled cancelLabel (or the default, ifNil).
+     Return the string or the value of cancelValue (if cancel was pressed)"
+
+    ^ self
+        request:aString 
+        displayAt:aPoint 
+        centered:centered 
+        action:resultAction 
+        initialAnswer:initial 
+        okLabel:okLabel 
+        cancelLabel:cancelLabel 
+        title:titleString 
+        onCancel:cancelValue 
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+!
+
+request:aString displayAt:aPoint centered:centered action:resultAction 
+initialAnswer:initial okLabel:okLabel cancelLabel:cancelLabel title:titleString 
+onCancel:cancelValue list:listToSelectFrom
+    "launch a Dialog, which allows user to enter a string.
+     The dialogs window is titled titleString, or the default (if nil).
+     If aPoint is nonNil, the box is shown there, optionally centered around it.
+     If it is nil, it is shown at the current pointer position or at the 
+     screen center (if centered is true).
+     The ok-button is labelled okLabel (or the default, ifNil),
+     the cancel-button is labelled cancelLabel (or the default, ifNil).
+     Return the string or the value of cancelValue (if cancel was pressed)"
+
+    ^ self
+        request:aString 
+        displayAt:aPoint 
+        centered:centered 
+        action:resultAction 
+        initialAnswer:initial 
+        okLabel:okLabel 
+        cancelLabel:cancelLabel 
+        title:titleString 
+        onCancel:cancelValue 
+        list:listToSelectFrom 
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     centered around 200@200:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:200@200
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+
+     under mouse pointer:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:nil
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+
+     centered on the screen:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+
+     with a list:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+            list:#(foo bar baz)
+    "
+
+    "Created: / 29.5.1996 / 14:35:04 / cg"
+    "Modified: / 5.5.1999 / 10:50:22 / cg"
+!
+
+request:aString displayAt:aPoint centered:centered action:resultAction 
+initialAnswer:initial okLabel:okLabel cancelLabel:cancelLabel title:titleString 
+onCancel:cancelValue list:listToSelectFrom initialSelection:anIntervalOrNil
+    "launch a Dialog, which allows user to enter a string.
+     The dialogs window is titled titleString, or the default (if nil).
+     If aPoint is nonNil, the box is shown there, optionally centered around it.
+     If it is nil, it is shown at the current pointer position or at the 
+     screen center (if centered is true).
+     The ok-button is labelled okLabel (or the default, ifNil),
+     the cancel-button is labelled cancelLabel (or the default, ifNil).
+     Return the string or the value of cancelValue (if cancel was pressed)"
+
+    ^ self
+        request:aString 
+        displayAt:aPoint 
+        centered:centered 
+        action:resultAction 
+        initialAnswer:initial   
+        okLabel:okLabel 
+        cancelLabel:cancelLabel 
+        title:titleString 
+        onCancel:cancelValue 
+        list:listToSelectFrom 
+        initialSelection:anIntervalOrNil
+        entryCompletionBlock:nil
+
+    "
+     centered around 200@200:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:200@200
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            title:'foo'
+            onCancel:#foo
+
+     under mouse pointer:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            title:'foo'
+            onCancel:#foo
+
+     centered on the screen:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            title:'foo'
+            onCancel:#foo
+
+     with a list:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'Yes'
+            cancelLabel:'No'
+            title:'foo'
+            onCancel:#foo
+            list:#(foo bar baz)
+    "
+
+    "Created: / 29.5.1996 / 14:35:04 / cg"
+    "Modified: / 5.5.1999 / 10:50:22 / cg"
+!
+
+request:aString displayAt:aPoint centered:centeredOrNil action:resultAction 
+initialAnswer:initial okLabel:okLabel cancelLabel:cancelLabel title:titleString 
+onCancel:cancelValue list:listToSelectFrom initialSelection:anIntervalOrNil
+entryCompletionBlock:entryCompletionBlock
+    "launch a Dialog, which allows user to enter a string.
+     The dialogs window is titled titleString, or the default (if nil).
+     If aPoint is nonNil, the box is shown there, optionally centered around it.
+     If it is nil, it is shown at the current pointer position or at the 
+     screen center (if centered is true).
+     The ok-button is labelled okLabel (or the default, ifNil),
+     the cancel-button is labelled cancelLabel (or the default, ifNil).
+     Return the string or the value of cancelValue (if cancel was pressed)"
+
+    |box centered|
+
+    listToSelectFrom isNil ifTrue:[
+        box := EnterBox title:aString.
+    ] ifFalse:[
+        box := EnterBoxWithList title:aString.
+        box list:listToSelectFrom.
+    ].
+    initial notNil ifTrue:[ box initialText:initial printString ].
+    anIntervalOrNil notNil ifTrue:[
+        box selectFromCharacterPosition:anIntervalOrNil start to:anIntervalOrNil stop.
+    ].
+    box abortAction:[:val | box destroy. ^ cancelValue value].
+    okLabel notNil ifTrue:[
+        box okText:okLabel.
+    ].
+    cancelLabel notNil ifTrue:[
+        box abortText:cancelLabel 
+    ].
+    resultAction isNil ifTrue:[
+        box action:[:val | box destroy. ^ val]
+    ] ifFalse:[
+        box action:[:val | box destroy. ^ resultAction value:val]
+    ].
+    titleString notNil ifTrue:[
+        box label:titleString
+    ].
+    entryCompletionBlock notNil ifTrue:[
+"/        box entryCompletionBlock:[:text | box 
+"/                                            initialText:(entryCompletionBlock value:text) 
+"/                                            selected:false].
+        box entryCompletionBlock:entryCompletionBlock.
+    ].
+
+    centered := centeredOrNil ? (ForceModalBoxesToOpenAtCenter ? false).
+
+    aPoint notNil ifTrue:[
+        box showAt:aPoint center:centered
+    ] ifFalse:[
+        centered ifTrue:[
+            box showAtCenter
+        ] ifFalse:[
+            box showAtPointer
+        ]
+    ].
+    box destroy. 
+    ^ cancelValue value.
+
+    "
+     centered around 200@200:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:200@200
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+
+     under mouse pointer:
+
+         Dialog 
+            request:'Enter a string:'
+            displayAt:nil
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+
+     centered on the screen:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+
+     with a list:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            okLabel:'yes'
+            cancelLabel:'no'
+            title:'foo'
+            onCancel:#foo
+            list:#(foo bar baz)
+    "
+
+    "Created: / 29.5.1996 / 14:35:04 / cg"
+    "Modified: / 5.5.1999 / 10:50:22 / cg"
+!
+
+request:aString displayAt:aPoint centered:centered action:resultAction initialAnswer:initial onCancel:cancelValue
+    "launch a Dialog, which allows user to enter a string.
+     If aPoint is nonNil, the box is shown there, optionally centered.
+     If it is nil, it is shown at the current pointer position or at the screen center.
+     Return the string or the value of cancelValue (if cancel was pressed)"
+
+    ^ self
+        request:aString 
+        displayAt:aPoint 
+        centered:centered 
+        action:resultAction 
+        initialAnswer:initial 
+        okLabel:nil 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:cancelValue
+        list:nil
+        initialSelection:nil
+
+    "
+     at topLeft (centering is suppressed, to make the box fully visible)    
+         Dialog 
+            request:'enter a string:'
+            displayAt:0@0
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            onCancel:#foo
+
+     centered around 200@200:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:200@200
+            centered:true
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            onCancel:#foo
+
+     topLeft of box at 200@200:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:200@200
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            onCancel:#foo
+
+     under mouse pointer:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:nil
+            centered:false 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            onCancel:#foo
+
+     centered on the screen:
+
+         Dialog 
+            request:'enter a string:'
+            displayAt:nil
+            centered:true 
+            action:[:result | result printNewline]
+            initialAnswer:'the default'
+            onCancel:#foo
+    "
+
+    "Created: 7.12.1995 / 23:14:10 / cg"
+    "Modified: 29.5.1996 / 14:24:39 / cg"
+!
+
+request:aString displayAt:aPoint initialAnswer:initial
+    "launch a Dialog, which allows user to enter something.
+     The boxes topLeft is placed at aPoint, or under the mouse pointer (if aPoint is nil).
+     Return the entered string (may be empty string) or nil (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:aPoint 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        onCancel:nil
+
+    "
+     Dialog 
+         request:'enter a string:' 
+         displayAt:(250 @ 250) 
+         initialAnswer:'the default' 
+    "
+
+    "Modified: 29.5.1996 / 14:29:51 / cg"
+!
+
+request:aString initialAnswer:initial
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) or nil (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial 
+        okLabel:nil 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'enter a string:' 
+         initialAnswer:'the default'  
+    "
+
+    "Modified: 29.5.1996 / 14:30:05 / cg"
+!
+
+request:aString initialAnswer:initial entryCompletionBlock:entryCompletionBlock
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) or nil (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial 
+        okLabel:nil 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:entryCompletionBlock
+
+    "
+     Dialog 
+         request:'enter a selector:' 
+         initialAnswer:'at:p'
+         entryCompletionBlock:[:s | |completion|
+
+                                completion := Smalltalk selectorCompletion:s.
+                                completion second size > 1 ifTrue:[ Screen current beep].
+                                completion first
+                              ].  
+    "
+
+    "Modified: 29.5.1996 / 14:30:05 / cg"
+!
+
+request:aString initialAnswer:initial initialSelection:anIntervalOrNil
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) or nil (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial 
+        okLabel:nil 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil 
+        list:nil 
+        initialSelection:anIntervalOrNil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'enter a string:' 
+         initialAnswer:'the default'
+         initialSelection:(1 to:3)
+    "
+
+    "Modified: 29.5.1996 / 14:30:05 / cg"
+!
+
+request:aString initialAnswer:initial list:aList
+    "launch a Dialog, which allows user to enter something,
+     or select from a list of values.
+     Return the entered string (may be empty string) or nil (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        okLabel:nil 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil
+        list:aList
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'Enter a string:' 
+         initialAnswer:'the default'  
+         list:#('foo' 'bar' 'baz')  
+    "
+    "
+     Dialog 
+         request:'enter a string:' 
+         initialAnswer:'the default'  
+         list:((1 to:30) collect:[:i | i printString])  
+    "
+
+    "Modified: / 5.5.1999 / 10:53:45 / cg"
+!
+
+request:aString initialAnswer:initial okLabel:okLabel title:titleString 
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) 
+     or cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        okLabel:okLabel
+        cancelLabel:nil
+        title:titleString
+        onCancel:nil
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'Enter a string:' 
+         initialAnswer:'the default'  
+         okLabel:'Yes'      
+         title:'Only a Test'      
+    "
+
+    "Modified: 29.5.1996 / 14:28:24 / cg"
+    "Created: 29.5.1996 / 14:59:57 / cg"
+!
+
+request:aString initialAnswer:initial okLabel:okLabel title:titleString list:list
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) 
+     or cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        okLabel:okLabel
+        cancelLabel:nil
+        title:titleString
+        onCancel:nil
+        list:list
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'Enter or select a string:' 
+         initialAnswer:'the default'  
+         okLabel:'Yes'      
+         title:'Only a Test'      
+         list:#('a' 'b' 'c')      
+    "
+
+    "Modified: 29.5.1996 / 14:28:24 / cg"
+    "Created: 29.5.1996 / 14:59:57 / cg"
+!
+
+request:aString initialAnswer:initial okLabel:okLabel title:titleString onCancel:cancelAction
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) 
+     or cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        okLabel:okLabel
+        cancelLabel:nil
+        title:titleString
+        onCancel:cancelAction
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'Enter a string:' 
+         initialAnswer:'the default'  
+         onCancel:['foooo']      
+    "
+
+    "Modified: 29.5.1996 / 14:28:24 / cg"
+    "Created: 29.5.1996 / 14:59:57 / cg"
+!
+
+request:aString initialAnswer:initial okLabel:okLabel title:titleString onCancel:cancelAction list:listOfChoices
+    "launch a Dialog, which allows user to enter something
+     (with a list of choices for fast input).
+     Return the entered string (may be empty string) 
+     or cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        okLabel:okLabel
+        cancelLabel:nil
+        title:titleString
+        onCancel:cancelAction
+        list:listOfChoices
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'Enter a String:' 
+         initialAnswer:'the default'
+         okLabel:'OK'
+         title:'demo'
+         onCancel:nil
+         list:#('foo' 'bar' 'baz')
+    "
+
+    "Modified: 29.5.1996 / 14:28:24 / cg"
+    "Created: 29.5.1996 / 14:59:57 / cg"
+!
+
+request:aString initialAnswer:initial okLabel:okLabel title:titleString onCancel:cancelAction list:listOfChoices entryCompletionBlock:entryCompletionBlock
+    "launch a Dialog, which allows user to enter something
+     (with a list of choices for fast input).
+     Return the entered string (may be empty string) 
+     or cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        okLabel:okLabel
+        cancelLabel:nil
+        title:titleString
+        onCancel:cancelAction
+        list:listOfChoices
+        initialSelection:nil
+        entryCompletionBlock:entryCompletionBlock
+
+    "
+     Dialog 
+         request:'Enter a String:' 
+         initialAnswer:'the default'
+         okLabel:'OK'
+         title:'demo'
+         onCancel:nil
+         list:#('foo' 'bar' 'baz')
+    "
+
+    "Modified: 29.5.1996 / 14:28:24 / cg"
+    "Created: 29.5.1996 / 14:59:57 / cg"
+!
+
+request:aString initialAnswer:initial onCancel:cancelAction
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) 
+     or cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial
+        okLabel:nil
+        cancelLabel:nil
+        title:nil
+        onCancel:cancelAction
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'enter a string:' 
+         initialAnswer:'the default'  
+         onCancel:['foooo']      
+    "
+
+    "Modified: 29.5.1996 / 14:28:24 / cg"
+!
+
+request:aString list:listOfChoices
+    "launch a Dialog, which allows user to enter something,
+     but adds a list of choices for fast input.
+     Return the entered string (may be empty string) 
+     or the empty string (if cancel was pressed)"
+
+    ^ self request:aString list:listOfChoices initialAnswer:''
+
+    "
+     Dialog 
+         request:'Enter a string:'
+         list:#('foo' 'bar' 'baz')
+    "
+
+    "Modified: / 18-08-2011 / 19:29:28 / cg"
+!
+
+request:aString list:listOfChoices initialAnswer:initialAnswer
+    "launch a Dialog, which allows user to enter something,
+     but adds a list of choices for fast input.
+     Return the entered string (may be empty string) 
+     or the empty string (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initialAnswer 
+        okLabel:nil 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil 
+        list:listOfChoices
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'Enter a string:'
+         list:#('foo' 'bar' 'baz')
+         initialAnswer:'foe'   
+    "
+
+    "Modified: / 29-05-1996 / 14:26:25 / cg"
+    "Created: / 18-08-2011 / 19:28:13 / cg"
+!
+
+request:aString okLabel:okLabel
+    "launch a Dialog, which allows user to enter something.
+     The okButton is labelled as okLabel.
+     Return the entered string (may be empty string) 
+     or the empty string (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:''
+        okLabel:okLabel
+        cancelLabel:nil
+        title:nil 
+        onCancel:nil 
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+        request:'Enter a string:'
+        okLabel:'Yes'
+    "
+
+    "Modified: 29.5.1996 / 14:26:25 / cg"
+    "Created: 29.5.1996 / 14:31:10 / cg"
+!
+
+request:aString okLabel:okLabel onCancel:cancelValue
+    "launch a Dialog, which allows user to enter something.
+     The okButton is labelled as okLabel.
+     Return the entered string (may be empty string) 
+     or the value from evaluating cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:''
+        okLabel:okLabel
+        cancelLabel:nil
+        title:nil 
+        onCancel:cancelValue
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+        request:'Enter a string:'
+        okLabel:'Yes'
+        onCancel:nil    
+    "
+
+    "Modified: 29.5.1996 / 14:32:00 / cg"
+!
+
+request:aString okLabel:okLabel title:titleString onCancel:cancelValue
+    "launch a Dialog, which allows user to enter something.
+     The okButton is labelled as okLabel.
+     Return the entered string (may be empty string) 
+     or the value from evaluating cancelValue (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:''
+        okLabel:okLabel
+        cancelLabel:nil
+        title:titleString
+        onCancel:cancelValue
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+        request:'Enter a String:'
+        okLabel:'Yes'
+        title:'foo'
+        onCancel:nil    
+    "
+
+    "Modified: 29.5.1996 / 14:32:00 / cg"
+    "Created: 29.5.1996 / 14:57:02 / cg"
+!
+
+request:aString onCancel:cancelActionOrValue
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) 
+     or the value of cancelAction (if cancel was pressed)."
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:''
+        okLabel:nil
+        cancelLabel:nil
+        title:nil
+        onCancel:cancelActionOrValue
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'Enter a String:'
+         onCancel:nil       
+    "
+
+    "Created: 27.1.1996 / 14:31:45 / cg"
+    "Modified: 29.5.1996 / 14:28:59 / cg"
+!
+
+request:aString title:titleString initialAnswer:initial
+    "launch a Dialog, which allows user to enter something.
+     Return the entered string (may be empty string) or nil (if cancel was pressed)"
+
+    ^ self 
+        request:aString 
+        displayAt:nil 
+        centered:(ForceModalBoxesToOpenAtCenter ? false) 
+        action:nil 
+        initialAnswer:initial 
+        okLabel:nil 
+        cancelLabel:nil 
+        title:titleString 
+        onCancel:nil
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:nil
+
+    "
+     Dialog 
+         request:'enter a string:' 
+         initialAnswer:'the default'  
+    "
+
+    "Modified: 29.5.1996 / 14:30:05 / cg"
+!
+
+requestNumber:aString 
+    "launch a Dialog, which allows user to enter a number.
+     Return the numeric value or nil 
+     (for an invalid number or if cancel was pressed)"
+
+    |string|
+
+    string := self request:aString.
+    ^ Number readFrom:string onError:nil.
+
+    "
+     Dialog requestNumber:'Enter your Age:'      
+    "
+
+    "Created: 17.11.1995 / 09:45:21 / cg"
+!
+
+requestNumber:aString initialAnswer: aNumber
+    "launch a Dialog, which allows user to enter a number.
+     Return the numeric value or nil 
+     (for an invalid number or if cancel was pressed)"
+
+    |string|
+
+    string := self request:aString initialAnswer: aNumber.
+    ^ Number readFrom:string onError:nil.
+
+    "
+     Dialog requestNumber:'Enter your Age:' initialAnswer: 25     
+    "
+
+    "Created: / 26-07-2006 / 12:22:23 / fm"
+    "Modified: / 07-08-2006 / 15:31:30 / fm"
+!
+
+requestPassword:aString 
+    "launch a Dialog, which allows user to enter something invisibly.
+     Return the entered string (may be empty string) 
+     or nil (if cancel was pressed)"
+
+    ^ EnterBox requestPassword:aString 
+
+    "
+     Dialog 
+         requestPassword:'Enter Secret:'
+    "
+
+    "Created: 17.11.1995 / 09:45:21 / cg"
+!
+
+requestPassword:aString initialAnswer:defaultAnswer
+    "launch a Dialog, which allows user to enter something invisibly.
+     Return the entered string (may be empty string) 
+     or nil (if cancel was pressed)"
+
+    ^ EnterBox new initialText:defaultAnswer; requestPassword:aString 
+
+    "
+     Dialog 
+         requestPassword:'Enter Secret:'
+         initialText:'blabla'
+    "
+!
+
+requestText:title
+    "open a dialog asking for multiline text.
+     Return a stringCollection or nil if cancelled."
+
+    ^ self 
+        requestText:title initialAnswer:'' initialSelection:nil
+
+    "
+     Dialog requestText:'Bla'
+    "
+!
+
+requestText:title initialAnswer:initialAnswer 
+    "open a dialog asking for multiline text.
+     Return a stringCollection or nil if cancelled."
+
+    ^ self 
+        requestText:title initialAnswer:initialAnswer initialSelection:nil
+
+    "
+     Dialog requestText:'Bla' initialAnswer:'Hello world'
+    "
+!
+
+requestText:title initialAnswer:initialAnswer initialSelection:anIntervalOrNil
+    "open a dialog asking for multiline text.
+     Return a stringCollection or nil if cancelled."
+
+    ^ self 
+        requestText:title lines:10 columns:60 initialAnswer:initialAnswer initialSelection:anIntervalOrNil
+
+    "
+     Dialog requestText:'Bla' initialAnswer:'Hello world' initialSelection:(1 to:5)
+    "
+!
+
+requestText:title lines:numLines columns:numCols initialAnswer:initialText
+    "open a dialog asking for multiline text.
+     Return a stringCollection or nil if cancelled."
+
+    ^ self
+        requestText:title lines:numLines columns:numCols 
+        initialAnswer:initialText initialSelection:nil
+
+    "
+     Dialog requestText:'Bla' lines:8 columns:40 initialAnswer:'hello world'
+    "
+
+   "Modified: / 18.8.2000 / 21:45:41 / cg"
+!
+
+requestText:title lines:numLines columns:numCols initialAnswer:initialText initialSelection:anIntervalOrNil
+    "open a dialog asking for multiline text.
+     Return a stringCollection or nil if cancelled."
+
+    |dialog textHolder|
+
+    textHolder := ValueHolder new.
+    dialog := Dialog 
+                forRequestText:title editViewClass:EditTextView
+                lines:numLines columns:numCols 
+                initialAnswer:initialText initialSelection:anIntervalOrNil 
+                model:textHolder.
+    dialog open.
+    dialog accepted ifTrue:[
+        ^ textHolder value
+    ].
+    ^ nil
+
+    "
+     Dialog 
+        requestText:'Bla' lines:8 columns:40 initialAnswer:'hello world'
+
+     Dialog 
+        requestText:'Bla2' lines:8 columns:40 initialAnswer:'hello world' initialSelection:(1 to:5)
+   "
+
+   "Modified: / 18.8.2000 / 21:45:41 / cg"
+! !
+
+!DialogBox class methodsFor:'multiple choice dialogs'!
+
+choose:aString fromList:list lines:maxLines 
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the value
+     from list is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:(list collect:[:each| each printString]) values:list
+        initialSelection:nil
+        buttons:nil values:nil
+        default:nil
+        lines:maxLines
+        cancel:nil
+        multiple:false
+        title:nil
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+     )
+    "
+
+    "Modified: / 02-03-2007 / 12:08:31 / cg"
+!
+
+choose:aString fromList:list lines:maxLines initialSelection:initialSelection
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the value
+     from list is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:list values:list initialSelection:initialSelection
+        buttons:nil values:nil 
+        lines:maxLines 
+        cancel:nil     
+        multiple:false 
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+            initialSelection:4
+     )
+    "
+
+    "Modified: 27.1.1996 / 14:17:07 / cg"
+!
+
+choose:aString fromList:list lines:maxLines initialSelection:initialSelection title:windowTitle
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the value
+     from list is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:(list collect:[:each| each printString]) values:list
+        initialSelection:initialSelection
+        buttons:nil values:nil
+        default:nil
+        lines:maxLines
+        cancel:nil
+        multiple:false
+        title:windowTitle
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+            title:'Choose'    
+     )
+    "
+
+    "Created: / 02-03-2007 / 12:06:39 / cg"
+!
+
+choose:aString fromList:list lines:maxLines title:windowTitle
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the value
+     from list is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:(list collect:[:each| each printString]) values:list
+        initialSelection:nil
+        buttons:nil values:nil
+        default:nil
+        lines:maxLines
+        cancel:nil
+        multiple:false
+        title:windowTitle
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+            title:'Choose'    
+     )
+    "
+
+    "Modified: / 02-03-2007 / 12:08:20 / cg"
+!
+
+choose:aString fromList:list values:listValues buttons:buttonLabels values:buttonValues lines:maxLines cancel:cancelBlock
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        buttons:buttonLabels values:buttonValues 
+        lines:maxLines 
+        cancel:cancelBlock 
+        multiple:false
+
+    "
+     full example:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:#('five' 'six' 'seven')
+                values:#(5 6 7)
+                lines:10 
+                cancel:nil
+         )
+
+
+     no buttons:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:nil
+                values:nil
+                lines:4
+                cancel:nil
+         )
+
+
+     no list (lines argument is ignored):
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:nil
+                values:nil
+                buttons:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                lines:nil
+                cancel:nil
+         )
+
+
+      full including cancel value:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose example' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:#('five' 'six' 'seven')
+                values:#(5 6 7)
+                lines:4
+                cancel:[Transcript flash. #aborted]
+         )
+
+
+     degenerated:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:nil
+                values:nil
+                buttons:nil
+                values:nil
+                lines:nil 
+                cancel:nil
+         )
+
+
+    "
+
+    "Modified: / 02-03-2007 / 12:08:12 / cg"
+!
+
+choose:aString fromList:list values:listValues buttons:buttonLabels values:buttonValues lines:maxLines cancel:cancelBlock multiple:multiple
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     If a list is present, multiple controls if multiple selections are allowed.
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns nil or an empty collection (if multiple is true)."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        buttons:buttonLabels values:buttonValues 
+        lines:maxLines 
+        cancel:cancelBlock 
+        multiple:multiple
+        postBuildBlock:nil
+
+    "Modified: / 02-03-2007 / 12:08:06 / cg"
+!
+
+choose:aString fromList:list values:listValues buttons:buttonLabels values:buttonValues lines:maxLines cancel:cancelBlock multiple:multiple postBuildBlock:aBlockOrNil
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     If a list is present, multiple controls if multiple selections are allowed.
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns nil or an empty collection (if multiple is true)."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        initialSelection:nil
+        buttons:buttonLabels values:buttonValues 
+        default:nil
+        lines:maxLines 
+        cancel:cancelBlock     
+        multiple:multiple 
+        title:nil
+        postBuildBlock:aBlockOrNil
+
+    "
+     full example:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:#('five' 'six' 'seven')
+                values:#(5 6 7)
+                lines:10 
+                cancel:nil
+                multiple:true
+         )
+
+
+     no buttons:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:nil
+                values:nil
+                lines:4
+                cancel:nil
+                multiple:true
+         )
+    "
+
+    "Modified: / 02-03-2007 / 12:08:02 / cg"
+!
+
+choose:aString fromList:list values:listValues buttons:buttonLabels values:buttonValues lines:maxLines cancel:cancelBlock postBuildBlock:postBuildBlock
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        buttons:buttonLabels values:buttonValues 
+        lines:maxLines 
+        cancel:cancelBlock 
+        multiple:false
+        postBuildBlock:postBuildBlock.
+
+
+    "
+     full example:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:#('five' 'six' 'seven')
+                values:#(5 6 7)
+                lines:10 
+                cancel:nil
+         )
+
+
+     no buttons:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:nil
+                values:nil
+                lines:4
+                cancel:nil
+         )
+
+
+     no list (lines argument is ignored):
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:nil
+                values:nil
+                buttons:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                lines:nil
+                cancel:nil
+         )
+
+
+      full including cancel value:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose example' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:#('five' 'six' 'seven')
+                values:#(5 6 7)
+                lines:4
+                cancel:[Transcript flash. #aborted]
+         )
+
+
+     degenerated:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:nil
+                values:nil
+                buttons:nil
+                values:nil
+                lines:nil 
+                cancel:nil
+         )
+
+
+    "
+
+    "Modified: / 02-03-2007 / 12:08:12 / cg"
+!
+
+choose:aString fromList:list values:listValues initialSelection:initialListSelectionOrNil buttons:buttonLabels values:buttonValues default:defaultValue lines:maxLines cancel:cancelBlock multiple:multiple postBuildBlock:aBlockOrNil
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     If a list is present, multiple controls if multiple selections are allowed.
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns nil or an empty collection (if multiple is true)."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        initialSelection:initialListSelectionOrNil 
+        buttons:buttonLabels values:buttonValues 
+        default:defaultValue 
+        lines:maxLines 
+        cancel:cancelBlock 
+        multiple:multiple 
+        title:nil
+        postBuildBlock:aBlockOrNil
+
+    "Modified: / 02-03-2007 / 12:07:57 / cg"
+!
+
+choose:aString fromList:list values:listValues initialSelection:initialListSelectionOrNil buttons:buttonLabels values:buttonValues default:defaultValue lines:maxLines cancel:cancelBlock multiple:multiple title:windowTitle postBuildBlock:aBlockOrNil
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     If a list is present, multiple controls if multiple selections are allowed.
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns nil or an empty collection (if multiple is true)."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        initialSelection:initialListSelectionOrNil 
+        buttons:buttonLabels values:buttonValues 
+        default:defaultValue 
+        lines:maxLines width:nil
+        cancel:cancelBlock 
+        multiple:multiple 
+        title:windowTitle 
+        postBuildBlock:aBlockOrNil
+
+    "
+     full example:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') values:#(1 2 3 4) 
+                initialSelection: nil
+                buttons:#('five' 'six' 'seven') values:#(5 6 7)
+                default:6
+                lines:10 
+                cancel:nil
+                multiple:true
+                postBuildBlock:nil
+         )
+
+
+     no buttons:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:nil
+                values:nil
+                lines:4
+                cancel:nil
+                multiple:true
+         )
+    "
+
+    "Created: / 22-08-2006 / 16:10:19 / cg"
+!
+
+choose:aString fromList:list values:listValues initialSelection:initialListSelectionOrNil buttons:buttonLabels values:buttonValues default:defaultValue lines:maxLines width:boxWidthOrNil cancel:cancelBlock multiple:multiple title:windowTitle postBuildBlock:aBlockOrNil
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     If a list is present, multiple controls if multiple selections are allowed.
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     The buttonValue may be a block of up to 3 arguments; it gets the selection, the box and selIndices as args.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns nil or an empty collection (if multiple is true)."
+
+    |box listView panel sel haveDefault|
+
+    haveDefault := false.
+
+    box := Dialog new.
+    (box addTextLabel:aString) adjust:#left.
+
+    list notNil ifTrue:[
+        listView := HVScrollableView for:SelectionInListView.
+        listView autoHideScrollBars:true.
+"/        maxLines <= list size ifTrue:[
+"/            listView := HVScrollableView for:SelectionInListView.
+"/        ] ifFalse:[
+"/            listView := SelectionInListView new.
+"/            listView level:-1.
+"/        ].
+        listView list:list.
+        listView doubleClickAction:[:selectionIndex | 
+            |val okButton|
+
+            multiple ifTrue:[
+                val := selectionIndex collect:[:idx | listValues at:idx].
+            ] ifFalse:[
+                val := listValues at:selectionIndex.
+            ].
+            (box okButton notNil and:[box okButton isReturnButton]) ifTrue:[
+                box destroy. 
+            ] ifFalse:[
+                okButton := box allSubViewsDetect:[:v | v isDefault] ifNone:nil.
+                okButton notNil ifTrue:[
+                    okButton controller performAction
+                ]
+            ].
+            ^ val
+        ].
+        listView multipleSelectOk:multiple.
+
+        initialListSelectionOrNil notNil ifTrue:[
+            multiple ifTrue:[
+                listView selection:(initialListSelectionOrNil collect:[:each| listValues indexOf:each])
+            ] ifFalse:[
+                listView selection:(listValues indexOf:initialListSelectionOrNil)
+            ]
+        ].
+        box addComponent:listView indent:(ViewSpacing // 2) withHeight:(listView heightForLines:maxLines).
+        box makeTabable:listView.
+        box name:listView as:#ListView.
+    ].
+
+    buttonLabels size > 0 ifTrue:[
+        panel := HorizontalPanelView new.
+        panel horizontalLayout:#fitSpace.
+        buttonLabels keysAndValuesDo:[:index :label |
+            |b|
+
+            b := Button label:label.
+            b action:[
+                |val selectionValues listSelection|
+
+                listSelection := listView selection.
+                listSelection notNil ifTrue:[
+                    listSelection isCollection ifFalse:[ listSelection := Array with:listSelection ].
+                    selectionValues := listValues isNil 
+                                        ifTrue:[ listSelection ]
+                                        ifFalse:[ listSelection collect:[:idx | listValues at:idx]].
+                ].
+                val := buttonValues at:index.
+                val isBlock ifTrue:[ 
+                    val := val valueWithOptionalArgument:selectionValues and:box and:listView selection
+                ] ifFalse:[
+                    multiple ifTrue:[
+                        val := Array with:val
+                    ].
+                ].
+                box destroy. 
+                ^ val
+            ].
+            haveDefault ifFalse:[
+                defaultValue notNil ifTrue:[
+                    (buttonValues at:index) = defaultValue ifTrue:[
+                        b isReturnButton:true.
+                        haveDefault := true.
+                    ].
+                ].
+            ].
+            panel add:b.
+            box makeTabable:b.
+        ].
+        box addComponent:panel indent:0.  "/ panel has its own idea of indenting
+        box name:panel as:#ButtonPanel2.
+    ].
+    box addAbortButton.
+    list notNil ifTrue:[
+        haveDefault ifTrue:[
+            (box addOkButton) isReturnButton:false.
+        ] ifFalse:[
+            box addOkButton.
+        ].
+    ].
+
+    listView notNil ifTrue:[box stickAtBottomWithVariableHeight:listView].
+    panel notNil ifTrue:[box stickAtBottomWithFixHeight:panel].
+
+    aBlockOrNil notNil ifTrue:[
+        aBlockOrNil value:box
+    ].
+    windowTitle notNil ifTrue:[
+        box label:windowTitle.
+    ].
+    boxWidthOrNil notNil ifTrue:[
+        box width:(boxWidthOrNil max:250).
+    ] ifFalse:[
+        box width < 250 ifTrue:[
+            box width:250.
+        ]
+    ].
+
+    self showBox:box.
+
+    "/ notice: if one of the extra buttons is pressed, we do not arrive here, and the returned value
+    "/ is the value returned by the button-value (which might be a block)
+
+    box accepted ifTrue:[
+        (sel := listView selection) notNil ifTrue:[
+            box destroy. 
+            sel isInteger ifTrue:[
+                ^ listValues at:sel
+            ].
+            ^ sel collect:[:idx | listValues at:idx]
+        ].
+        box destroy. 
+        ^ multiple ifTrue:[ #() ] ifFalse:[ nil ]
+    ].
+    box destroy. 
+    ^ cancelBlock value
+
+    "
+     full example:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') values:#(1 2 3 4) 
+                initialSelection: nil
+                buttons:#('five' 'six' 'seven') values:#(5 6 7)
+                default:6
+                lines:10 
+                cancel:nil
+                multiple:true
+                postBuildBlock:nil
+         )
+
+
+     no buttons:
+
+         Transcript showCR:(
+             Dialog 
+                choose:'choose any' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:nil
+                values:nil
+                lines:4
+                cancel:nil
+                multiple:true
+         )
+    "
+
+    "Created: / 08-11-2011 / 12:15:20 / cg"
+!
+
+choose:aString fromList:list values:listValues initialSelection:initialListSelectionOrNil buttons:buttonLabels values:buttonValues lines:maxLines cancel:cancelBlock multiple:multiple postBuildBlock:aBlockOrNil
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     If a list is present, multiple controls if multiple selections are allowed.
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns nil or an empty collection (if multiple is true)."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        initialSelection:initialListSelectionOrNil 
+        buttons:buttonLabels values:buttonValues 
+        default:nil
+        lines:maxLines 
+        cancel:cancelBlock 
+        multiple:multiple 
+        title:nil
+        postBuildBlock:aBlockOrNil
+
+    "Modified: / 02-03-2007 / 12:07:47 / cg"
+!
+
+choose:aString fromList:list values:listValues lines:maxLines 
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:(list collect:[:each| each printString]) values:listValues
+        initialSelection:nil
+        buttons:nil values:nil
+        default:nil
+        lines:maxLines
+        cancel:nil
+        multiple:false
+        title:nil
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#('one' 'two' 'three') 
+            values:#(1 2 3) 
+            lines:4
+     )
+    "
+
+    "Modified: / 02-03-2007 / 12:08:31 / cg"
+!
+
+choose:aString fromList:list values:listValues lines:maxLines cancel:cancelBlock
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues
+        buttons:nil values:nil
+        lines:maxLines
+        cancel:cancelBlock
+        multiple:false
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#('one' 'two' 'three' 'four') 
+            values:#(1 2 3 4) 
+            lines:4
+            cancel:nil
+     )
+
+     Transcript showCR:(
+         Dialog 
+            choose:'choose example' 
+            fromList:#('one' 'two' 'three' 'four') 
+            values:#(1 2 3 4) 
+            lines:4
+            cancel:[Transcript flash. #aborted]
+     )
+    "
+
+    "Modified: / 02-03-2007 / 12:07:42 / cg"
+!
+
+choose:aString fromList:list values:values lines:maxLines cancel:cancelBlock title:windowTitle
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:list values:values
+        initialSelection:nil
+        buttons:nil values:nil
+        default:nil
+        lines:maxLines
+        cancel:cancelBlock
+        multiple:false
+        title:windowTitle
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+            title:'Choose'    
+     )
+    "
+
+    "Created: / 02-03-2007 / 12:07:32 / cg"
+!
+
+choose:aString fromList:list values:values lines:maxLines initialSelection:initialSelection title:windowTitle
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:list values:values
+        initialSelection:initialSelection
+        buttons:nil values:nil
+        default:nil
+        lines:maxLines
+        cancel:nil
+        multiple:false
+        title:windowTitle
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+            title:'Choose'    
+     )
+    "
+
+    "Created: / 02-03-2007 / 12:07:32 / cg"
+!
+
+choose:aString fromList:list values:values lines:maxLines title:windowTitle
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection is treated like cancel."
+
+    ^ self
+        choose:aString 
+        fromList:list values:values
+        initialSelection:nil
+        buttons:nil values:nil
+        default:nil
+        lines:maxLines
+        cancel:nil
+        multiple:false
+        title:windowTitle
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            choose:'choose any' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+            title:'Choose'    
+     )
+    "
+
+    "Created: / 02-03-2007 / 12:07:32 / cg"
+!
+
+choose:aString label:windowLabel image:imageOrNil labels:buttonLabels values:values default:default onCancel:cancelValue
+    "launch a Dialog, which allows user to enter any of buttonLabels.
+     Returning a corresponding value from the values-array.
+     The default entries button is marked as a return button and entering
+     return will choose that value; hitting escape returns cancelValue.
+     For a good userInterface style, we recommend this being the last
+     entry (to make the right-most button the default button)."
+
+    |box answer idx|
+
+    box := OptionBox title:aString numberOfOptions:buttonLabels size. 
+    windowLabel notNil ifTrue:[
+        box label:windowLabel
+    ].
+    imageOrNil notNil ifTrue:[
+        box image:imageOrNil
+    ].
+
+    box buttonTitles:(self classResources array:buttonLabels)
+             actions:(values collect:[:val | [answer := val]]).
+    answer := cancelValue.
+    box buttons last isReturnButton:false.
+    idx := values indexOf:default.
+    idx ~~ 0 ifTrue:[box defaultButtonIndex:idx].
+
+    self showAndThenDestroyBox:box.
+    box actions:nil.
+    ^ answer
+
+    "no good style (default button is not the rightmost one)
+
+     Dialog 
+        choose:'choose any' 
+        label:'Foo Bar Baz'
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:2     
+        onCancel:1      
+
+     Dialog 
+        choose:'choose any' 
+        labels:#('cancel' 'foo' 'bar' 'baz') 
+        values:#(nil foo bar baz) 
+        default:#baz     
+
+      Dialog 
+        choose:'choose any' 
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:nil 
+    "
+
+    "Modified: / 16.11.2001 / 14:55:33 / cg"
+    "Created: / 16.11.2001 / 15:04:16 / cg"
+!
+
+choose:aString label:windowLabel labels:buttonLabels values:values default:default
+    "launch a Dialog, which allows user to enter any of buttonLabels.
+     Returning a corresponding value from the values-array.
+     The default entries button is marked as a return button and entering
+     return will choose that value; hitting escape returns nil.
+     For a good userInterface style, we recommend this being the last
+     entry (to make the right-most button the default button)."
+
+    ^ self
+        choose:aString 
+        label:windowLabel image:nil
+        labels:buttonLabels values:values 
+        default:default
+        onCancel:nil
+
+    "no good style (default button is not the rightmost one)
+
+     Dialog 
+        choose:'choose any' 
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:2     
+
+     Dialog 
+        choose:'choose any' 
+        labels:#('cancel' 'foo' 'bar' 'baz') 
+        values:#(nil foo bar baz) 
+        default:#baz     
+
+      Dialog 
+        choose:'choose any' 
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:nil 
+    "
+
+    "Created: / 22-07-1996 / 11:44:27 / cg"
+    "Modified: / 02-03-2007 / 12:09:01 / cg"
+!
+
+choose:aString label:windowLabel labels:buttonLabels values:values default:default onCancel:cancelValue
+    "launch a Dialog, which allows user to enter any of buttonLabels.
+     Returning a corresponding value from the values-array.
+     The default entries button is marked as a return button and entering
+     return will choose that value; hitting escape returns cancelValue.
+     For a good userInterface style, we recommend this being the last
+     entry (to make the right-most button the default button)."
+
+    ^ self
+        choose:aString 
+        label:windowLabel image:nil
+        labels:buttonLabels values:values 
+        default:default onCancel:cancelValue
+
+    "no good style (default button is not the rightmost one)
+
+     Dialog 
+        choose:'choose any' 
+        label:'Foo Bar Baz'
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:2     
+        onCancel:1      
+
+     Dialog 
+        choose:'choose any' 
+        labels:#('cancel' 'foo' 'bar' 'baz') 
+        values:#(nil foo bar baz) 
+        default:#baz     
+
+      Dialog 
+        choose:'choose any' 
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:nil 
+    "
+
+    "Created: / 16-11-2001 / 14:53:55 / cg"
+    "Modified: / 02-03-2007 / 12:08:44 / cg"
+!
+
+choose:aString labels:buttonLabels values:values default:default
+    "launch a Dialog, which allows user to enter any of buttonLabels.
+     Returning a corresponding value from the values-array.
+     The default entries button is marked as a return button and entering
+     return will choose that value.
+     For a good userInterface style, we recommend this being the last
+     entry (to make the right-most button the default button)."
+
+    ^ self
+        choose:aString 
+        label:nil image:nil
+        labels:buttonLabels values:values 
+        default:default
+        onCancel:nil
+
+
+    "no good style (default button is not the rightmost one)
+
+     Dialog 
+        choose:'choose any' 
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:2 
+
+     Dialog 
+        choose:'choose any' 
+        labels:#('cancel' 'foo' 'bar' 'baz') 
+        values:#(nil foo bar baz) 
+        default:#baz     
+
+      Dialog 
+        choose:'choose any' 
+        labels:#('one' 'two' 'three' 'four') 
+        values:#(1 2 3 4) 
+        default:nil 
+    "
+
+    "Modified: / 02-03-2007 / 12:08:55 / cg"
+!
+
+chooseMultiple:aString fromList:list lines:maxLines 
+    "launch a Dialog showing the message and list.
+     The user can select any combination of items and click ok; 
+     in this case, the values from list is returned (doubleclick works as well).
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns an empty collection."
+
+    ^ self
+        choose:aString 
+        fromList:(list collect:[:each| each printString]) values:list
+        initialSelection:nil
+        buttons:nil values:nil
+        default:#()
+        lines:maxLines
+        cancel:nil
+        multiple:true
+        title:nil
+        postBuildBlock:nil
+
+    "
+     Transcript showCR:(
+         Dialog 
+            chooseMultiple:'choose any combination' 
+            fromList:#(1 2 3 4 5 6 7) 
+            lines:4
+     )
+    "
+
+    "Modified: / 02-03-2007 / 12:08:31 / cg"
+!
+
+chooseMultiple:aString fromList:list values:listValues buttons:buttonLabels values:buttonValues lines:maxLines cancel:cancelBlock
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns an empty collection."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        buttons:buttonLabels values:buttonValues 
+        lines:maxLines 
+        cancel:cancelBlock 
+        multiple:true
+
+    "
+     full example:
+
+         Transcript showCR:(
+             Dialog 
+                chooseMultiple:'choose selected' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:nil
+                values:nil
+                lines:10 
+                cancel:nil
+         )
+
+         Transcript showCR:(
+             Dialog 
+                chooseMultiple:'choose selected' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                buttons:#()
+                values:#()
+                lines:10 
+                cancel:nil
+         )
+    "
+
+    "Modified: / 02-03-2007 / 12:09:10 / cg"
+!
+
+chooseMultiple:aString fromList:list values:listValues initialSelection:initialListSelectionOrNil lines:maxLines
+    "launch a Dialog showing the message and list.
+     The user can select an item and click ok; in this case, the corresponding value
+     from listValues is returned (doubleclick works as well). 
+     The list may be suppressed (if the list arg is nil).
+     Below the list, an optional row of buttons is shown, which can also be
+     clicked upon, and a corresponding value from buttonValues is returned.
+     If cancel is pressed, the value of cancelBlock is returned.
+     Pressing ok without a selection returns an empty collection."
+
+    ^ self
+        choose:aString 
+        fromList:list values:listValues 
+        initialSelection:initialListSelectionOrNil
+        buttons:nil values:nil 
+        lines:maxLines 
+        cancel:nil 
+        multiple:true
+        postBuildBlock:nil
+
+    "
+     full example:
+
+         Transcript showCR:(
+             Dialog 
+                chooseMultiple:'choose selected' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#(1 2 3 4) 
+                initialSelection:#(2 4)
+                lines:10 
+         )
+
+         Transcript showCR:(
+             Dialog 
+                chooseMultiple:'choose selected' 
+                fromList:#('one' 'two' 'three' 'four') 
+                values:#('one' 'two' 'three' 'four') 
+                initialSelection:#( 'two' 'three')
+                lines:10 
+         )
+    "
+
+    "Created: / 18-08-2000 / 22:38:13 / cg"
+    "Modified: / 02-03-2007 / 12:09:15 / cg"
+! !
+
+!DialogBox class methodsFor:'private'!
+
+showAndThenDestroyBox:aBox
+    [
+        self showBox:aBox.
+    ] ensure:[
+        aBox destroy
+    ]
+!
+
+showBox:aBox
+    |wg v|
+
+    ForceModalBoxesToOpenAtCenter == true ifTrue:[
+        aBox showAtCenter.
+        ^ self.
+    ].
+    ForceModalBoxesToOpenAtPointer == true ifTrue:[
+        aBox showAtPointer.
+        ^ self.
+    ].
+
+    wg := WindowGroup activeGroup.
+    wg isNil ifTrue:[
+        aBox showAtCenter.
+        ^ self.
+    ].
+    wg isDebugged ifTrue:[
+        aBox showAtPointer.
+        ^ self.
+    ].
+
+    wg isModal ifTrue:[
+        v := wg mainView.
+        v notNil ifTrue:[
+            aBox showCenteredIn:v.
+            ^ self.
+        ].
+    ].
+
+    v := wg mainGroup mainView.
+    v isNil ifTrue:[
+        aBox showAtCenter.
+        ^ self.
+    ].
+
+    aBox showCenteredIn:v.
+
+    "Modified: / 29-08-2013 / 16:39:29 / cg"
+! !
+
+!DialogBox class methodsFor:'queries'!
+
+defaultOKButtonAtLeft
+    "somewhat of a kludge:
+     some viewStyles have ok at left (motif), others at right..."
+
+    ^ (StyleSheet at:'dialogBox.okAtLeft' default:false)
+
+    "
+     DialogBox defaultOKButtonAtLeft
+    "
+!
+
+defaultParentWindow
+    "return a default parent (top-) window for the dialog.
+     Here, the currently active view is returned, if there
+     is one; otherwise, the first encountered topView is
+     returned."
+
+    |activeGroup|
+
+    activeGroup := WindowGroup activeGroup.
+    activeGroup isNil ifTrue:[
+        "/ mhmh - looks like I am a background process ...
+        activeGroup := Transcript windowGroup.
+        activeGroup isNil ifTrue:[^ nil].
+    ].
+    ^ activeGroup topViews first.
+
+    "
+     self defaultParentWindow
+    "
+
+    "Modified: / 16.6.1998 / 12:36:15 / cg"
+! !
+
+!DialogBox class methodsFor:'smalltalk dialogs'!
+
+requestClass:aString
+    "launch a Dialog, which allows user to enter an existing classes name.
+     Return the entered class or nil (if cancel was pressed).
+     The entryField does classNameCompletion on TAB."
+
+     ^ self requestClass:aString okLabel:'OK' initialAnswer:nil.
+
+    "
+     Dialog 
+         requestClass:'Enter a class:'
+    "
+!
+
+requestClass:aString initialAnswer:initialAnswer
+    "launch a Dialog, which allows user to enter an existing classes name.
+     Return the entered class or nil (if cancel was pressed).
+     The entryField does classNameCompletion on TAB."
+
+     ^ self requestClass:aString okLabel:'OK' initialAnswer:initialAnswer.
+
+    "
+     Dialog 
+         requestClass:'Enter a class:'
+         initialAnswer:'Array'
+    "
+!
+
+requestClass:aString list:list okLabel:okLabel initialAnswer:initial
+    "launch a Dialog, which allows user to enter an existing classes name.
+     Return the entered class or nil (if cancel was pressed).
+     The entryField does classNameCompletion on TAB."
+
+     |className|
+
+     className := self requestClassName:aString list:list okLabel:okLabel initialAnswer:initial.
+     className isEmptyOrNil ifTrue:[^ nil].
+     ^ Smalltalk classNamed:className
+
+    "
+     Dialog 
+         requestClass:'Enter a class:'
+         okLabel:'OK'
+         initialAnswer:'Arr'        
+    "
+
+    "Created: / 12-01-2008 / 23:02:28 / cg"
+!
+
+requestClass:aString okLabel:okLabel initialAnswer:initial
+    "launch a Dialog, which allows user to enter an existing classes name.
+     Return the entered class or nil (if cancel was pressed).
+     The entryField does classNameCompletion on TAB."
+
+     ^ self requestClass:aString list:nil okLabel:okLabel initialAnswer:initial
+
+    "
+     Dialog 
+         requestClass:'Enter a class:'
+         okLabel:'OK'
+         initialAnswer:'Arr'        
+    "
+
+    "Modified: / 12-01-2008 / 23:02:42 / cg"
+!
+
+requestClassName:aString initialAnswer:initial
+    "launch a Dialog, which allows user to enter a class name.
+     Return the entered string (may be empty string) or nil (if cancel was pressed).
+     The entryField does classNameCompletion on TAB."
+
+     ^ self requestClassName:aString list:nil okLabel:'OK' initialAnswer:initial
+
+    "
+     Dialog 
+         requestClassName:'enter a class:'
+         initialAnswer:'Arr'        
+    "
+
+    "Modified: / 12-01-2008 / 22:58:13 / cg"
+!
+
+requestClassName:aString list:list okLabel:okLabel initialAnswer:initial
+    "launch a Dialog, which allows user to enter a class name.
+     Return the entered string (may be empty string) or nil (if cancel was pressed).
+     The entryField does classNameCompletion on TAB."
+
+     ^ self
+        request:aString 
+        displayAt:nil 
+        centered:nil 
+        action:nil 
+        initialAnswer:initial 
+        okLabel:okLabel 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil
+        list:list
+        initialSelection:nil
+        entryCompletionBlock:DoWhatIMeanSupport classNameEntryCompletionBlock
+
+    "
+     Dialog 
+         requestClassName:'Enter a class:'
+         list:(Array with:Array with:String with:Point)
+         okLabel:'OK'
+         initialAnswer:'Arr'        
+    "
+
+    "Created: / 12-01-2008 / 22:58:01 / cg"
+!
+
+requestClassName:aString okLabel:okLabel initialAnswer:initial
+    "launch a Dialog, which allows user to enter a class name.
+     Return the entered string (may be empty string) or nil (if cancel was pressed).
+     The entryField does classNameCompletion on TAB."
+
+     ^ self requestClassName:aString list:nil okLabel:okLabel initialAnswer:initial
+
+    "
+     Dialog 
+         requestClassName:'enter a class:'
+         okLabel:'OK'
+         initialAnswer:'Arr'        
+    "
+
+    "Modified: / 12-01-2008 / 22:58:13 / cg"
+!
+
+requestName:title fromList:nameList title:boxTitle initialAnswer:initialTextOrNil
+    "Ask for a name from a list (used for namespaces and sharedPools)"
+
+    |newName box|
+
+    box := ListSelectionBox new.
+    box title:title.
+    box list:nameList.
+    box okAction:[:sel | newName := sel].
+    box initialText:initialTextOrNil.
+    boxTitle notNil ifTrue:[ box label:boxTitle ].
+    box showAtPointer.
+
+    newName notNil ifTrue:[
+        newName := newName withoutSeparators.
+    ].
+    ^ newName
+
+    "
+     Dialog 
+        requestName:'Select a Name' 
+        fromList:#('foo' 'bar' 'baz') 
+        title:'blabla'
+        initialAnswer:nil
+    "
+!
+
+requestNameSpace:title initialAnswer:initialTextOrNil
+    "Ask for a namespaces name"
+
+    ^ self
+        requestNameSpace:title 
+        title:title 
+        initialAnswer:initialTextOrNil
+
+    "
+     Dialog 
+        requestNameSpace:'Select a NameSpace' 
+        initialAnswer:nil
+    "
+!
+
+requestNameSpace:title title:boxTitle initialAnswer:initialTextOrNil
+    "Ask for a namespaces name"
+
+    |allNameSpaces|
+
+    allNameSpaces := NameSpace allNameSpaces collect:[:each | each name].
+    allNameSpaces := allNameSpaces asOrderedCollection sort.
+
+    ^ self
+        requestName:title 
+        fromList:allNameSpaces 
+        title:boxTitle 
+        initialAnswer:initialTextOrNil
+
+    "
+     Dialog 
+        requestNameSpace:'Select a NameSpace' 
+        initialAnswer:nil
+    "
+!
+
+requestProject:title from:listOfProjects initialAnswer:initialTextOrNil suggestions:suggestions
+    "Ask for a project (package-id)"
+
+    |newProject box|
+
+    box := ListSelectionBox new.
+    box useComboBoxWithList:suggestions.
+    box title:title.
+    box list:listOfProjects.
+    box okAction:[:sel | newProject := sel].
+    box initialText:initialTextOrNil.
+    box entryCompletionBlock:(DoWhatIMeanSupport packageNameEntryCompletionBlock).
+    box label:'Enter Project/PackageID'.
+    box showAtPointer.
+
+    newProject notNil ifTrue:[
+        newProject := newProject withoutSeparators asSymbol.
+    ].
+    ^ newProject
+
+    "
+     Dialog 
+        requestProject:'enter a project'
+        initialAnswer:'stx:libbasic' 
+        suggestions:#('foo' 'bar' 'baz')
+    "
+
+    "Created: / 07-09-2006 / 11:40:17 / cg"
+!
+
+requestProject:title initialAnswer:initialTextOrNil suggestions:suggestions
+    "Ask for a project (package-id)"
+
+    |allProjects|
+
+    allProjects := Smalltalk allProjectIDs.
+    ^ self
+        requestProject:title 
+        from:allProjects
+        initialAnswer:initialTextOrNil 
+        suggestions:suggestions
+!
+
+requestSelector:aString initialAnswer:initial
+    "launch a Dialog, which allows user to enter a method selector.
+     Return the entered string (may be empty string) or nil (if cancel was pressed).
+     The entryField does selectorCompletion on TAB."
+
+     ^ self requestSelector:aString okLabel:nil initialAnswer:initial
+
+    "
+     Dialog 
+         requestSelector:'enter a selector:' 
+         initialAnswer:'at:p'        
+    "
+!
+
+requestSelector:aString okLabel:okLabel initialAnswer:initial
+    "launch a Dialog, which allows user to enter a method selector.
+     Return the entered string (may be empty string) or nil (if cancel was pressed).
+     The entryField does selectorCompletion on TAB."
+
+     ^ self
+        request:aString 
+        displayAt:nil 
+        centered:nil 
+        action:nil 
+        initialAnswer:initial 
+        okLabel:okLabel 
+        cancelLabel:nil 
+        title:nil 
+        onCancel:nil
+        list:nil
+        initialSelection:nil
+        entryCompletionBlock:[:s :field| 
+                                |completion|
+
+                                completion := Smalltalk selectorCompletion:s.
+                                completion second size > 1 ifTrue:[ 
+                                    UserPreferences current beepInEditor ifTrue:[                
+                                        Screen current beep
+                                    ].
+                                ].
+                                field contents:(completion first)
+                              ]
+
+    "
+     Dialog 
+         requestSelector:'enter a selector:' 
+         initialAnswer:'at:p'        
+    "
+!
+
+requestSharedPool:title title:boxTitle initialAnswer:initialTextOrNil
+    "Ask for a sharedPools name"
+
+    |allPools|
+
+    allPools := SharedPool allSubclasses collect:[:each | each name].
+    allPools := allPools asOrderedCollection sort.
+
+    ^ self
+        requestName:title 
+        fromList:allPools 
+        title:boxTitle 
+        initialAnswer:initialTextOrNil
+
+    "
+     Dialog 
+        requestSharedPool:'Select a SharedPool' 
+        title:nil
+        initialAnswer:nil
+    "
+! !
+
+!DialogBox methodsFor:'accessing-behavior'!
+
+abortAction:aBlock
+    "define the action to be performed when abort is pressed"
+
+    abortAction := aBlock
+!
+
+acceptCheck:aBlock
+    "if nonNil, the acceptCheck-block is evaluated when the dialog is
+     accepted (ok-button or Return-key). If it returns true, the box is closed,
+     otherwise not. Of course, you may also use a valueHolder instead of a block
+     to provide the check value."
+
+    acceptCheck := aBlock
+
+    "Modified: / 25.1.2000 / 20:56:04 / cg"
+!
+
+acceptOnLeave:aBoolean
+    "define the behavior when the last input field is left via cursor keys.
+     The default is to accept & close the dialog (i.e. true)."
+
+    acceptOnLeave := aBoolean.
+
+    "Modified: 19.4.1996 / 17:05:12 / cg"
+!
+
+acceptReturnAsOK:aBoolean
+    "turn on/off interpretation of return-key as ok.
+     Default is on"
+
+    acceptReturnAsOK := aBoolean.
+    okButton notNil ifTrue:[
+	okButton isReturnButton:aBoolean.
+    ]
+!
+
+action:aBlock
+    "set the action to be performed when user presses ok-button;
+     aBlock must be nil or a block. This method simply
+     reuses okAction: and has been added for a consistent action-setting
+     protocol."
+
+    self okAction:aBlock
+!
+
+focusOnField:anInputField
+    "arrange for the argument to get the focus (initially)"
+
+    inputFieldGroup makeActive:anInputField
+
+    "Modified: / 13.8.1998 / 21:23:17 / cg"
+!
+
+focusToOKOnLeave:aBoolean
+    "define the behavior when the last input field is left via a return
+     or cursor key.
+     The default is to shift the focus to the OK button (i.e. true).
+     If turned off, the OK is immediately performed, i.e.
+     the dialog is accepted & closed."
+
+    focusToOKOnLeave := aBoolean.
+
+    "Modified: 19.4.1996 / 17:05:12 / cg"
+    "Created: 19.4.1996 / 17:13:36 / cg"
+!
+
+hideOnAccept:aBoolean
+    "control if the dialog should close when accepted.
+     The default is true"
+
+    hideOnAccept := aBoolean
+!
+
+makeTabable:aComponentOrSubcomponent
+    "add a component (usually a subcomponent, of which the dialog
+     does not know) to the list of tabable ones (i.e. those, that can be
+     stepped through via FocusNext/FocusPrevious).
+     Toplevel tabable components are usually added with #addComponent:tabable:"
+
+    aComponentOrSubcomponent canTab:true.
+
+"/    tabableElements isNil ifTrue:[
+"/        tabableElements := OrderedCollection new
+"/    ].
+"/    (tabableElements includesIdentical:aComponentOrSubcomponent) ifFalse:[
+"/        tabableElements add:aComponentOrSubcomponent.
+"/    ].
+
+    (aComponentOrSubcomponent isInputField) ifTrue:[
+        self addToInputFieldGroup:aComponentOrSubcomponent
+    ].
+
+    "Modified: 31.5.1996 / 21:22:13 / cg"
+!
+
+makeTabable:aComponentOrSubcomponent after:anotherComponent
+    "add a component (usually a subcomponent, of which the dialog
+     does not know) to the list of tabable ones (i.e. those, that can be
+     stepped through via FocusNext/FocusPrevious).
+     Toplevel tabable components are usually added with #addComponent:tabable:"
+
+    <resource: #obsolete>
+    self obsoleteMethodWarning. "/ focusSequence has been eliminated
+
+    aComponentOrSubcomponent canTab:true.
+
+"/    tabableElements isNil ifTrue:[
+"/        tabableElements := OrderedCollection new
+"/    ].
+"/    tabableElements removeIdentical:aComponentOrSubcomponent ifAbsent:nil.
+"/
+"/    anotherComponent isNil ifTrue:[
+"/        tabableElements addLast:aComponentOrSubcomponent
+"/    ] ifFalse:[
+"/        tabableElements add:aComponentOrSubcomponent after:anotherComponent.
+"/    ].
+"/
+    (aComponentOrSubcomponent isInputField) ifTrue:[
+        self addToInputFieldGroup:aComponentOrSubcomponent after:anotherComponent
+    ].
+
+    "Modified: 18.10.1997 / 03:08:20 / cg"
+!
+
+makeUntabable:aComponentOrSubcomponent
+    aComponentOrSubcomponent canTab:false.
+
+"/    (tabableElements includesIdentical:aComponentOrSubcomponent) ifFalse:[
+"/        tabableElements removeIdentical:aComponentOrSubcomponent.
+"/    ].
+
+    (aComponentOrSubcomponent isInputField) ifTrue:[
+        self removeFromInputFieldGroup:aComponentOrSubcomponent
+    ].
+
+    "Modified: 18.10.1997 / 02:50:05 / cg"
+!
+
+noAction:aBlock
+    "define the action to be performed when 'no' is pressed"
+
+    abortAction := aBlock
+
+    "Modified: 16.1.1997 / 11:29:18 / cg"
+!
+
+okAction:aBlock
+    "define the action to be performed when ok is pressed"
+
+    okAction := aBlock
+!
+
+title:aString yesAction:yesBlock noAction:noBlock
+    "define title and actions"
+
+    self title:aString.
+    okAction := yesBlock.
+    abortAction := noBlock
+!
+
+yesAction:aBlock 
+    "define the action to be performed when 'yes' is pressed"
+
+    okAction := aBlock
+
+    "Modified: 16.1.1997 / 11:31:21 / cg"
+!
+
+yesAction:yesBlock noAction:noBlock
+    "define both actions"
+
+    okAction := yesBlock.
+    abortAction := noBlock
+! !
+
+!DialogBox methodsFor:'accessing-components'!
+
+abortButton
+    "return the abortButton - this access is provided to allow
+     setting the buttons look (for example: colors or font)"
+
+    ^ abortButton
+!
+
+buttonPanel
+    "return the buttonPanel - this access is provided to allow
+     setting the buttons look (for example: colors or font)"
+
+    ^ buttonPanel
+!
+
+cancelButton
+    "same as #abortButton;
+     return the abortButton - this access is provided to allow
+     setting the buttons look (for example: colors or font)"
+
+    ^ self abortButton
+!
+
+noButton
+    "return the no-button"
+
+    ^ abortButton
+!
+
+okButton
+    "return the okButton - this access is provided to allow
+     setting the buttons look (for example: colors or font)"
+
+    ^ okButton
+!
+
+verticalPanel
+    "if there is none yet, create and add a vertical panel.
+     This can be used to add additional components in an aboutToOpen hook callback."
+
+    |savedY|
+
+    verticalPanel isNil ifTrue:[
+        savedY := yPosition.
+        self addComponent:(verticalPanel := VerticalPanelView new).
+        verticalPanel horizontalLayout:#fit.
+        verticalPanel verticalLayout:#top.
+        verticalPanel height:25.
+        yPosition := savedY.
+    ].
+    ^ verticalPanel
+
+    "Modified (comment): / 28-02-2012 / 15:46:23 / cg"
+!
+
+yesButton
+    "return the 'yes'-button"
+
+    ^ okButton
+
+    "Modified: 16.1.1997 / 11:31:27 / cg"
+! !
+
+!DialogBox methodsFor:'accessing-elements'!
+
+componentAt:name
+    "retrieve a component by name - to access it, it must have been
+     named previously with #name:as:"
+
+    namedComponents isNil ifTrue:[^ nil].
+    ^ namedComponents at:name ifAbsent:nil
+
+    "Modified: 16.1.1997 / 11:40:50 / cg"
+!
+
+name:element as:name
+    "assign a name to a component. This can be done during construction,
+     to allow later access to the components (i.e. without a need to
+     remember them in some instVars)"
+
+    namedComponents isNil ifTrue:[
+	namedComponents := Dictionary new.
+    ].
+    namedComponents at:name put:element
+
+    "Modified: 16.1.1997 / 11:41:03 / cg"
+! !
+
+!DialogBox methodsFor:'accessing-look'!
+
+abortText:aString
+    "define the label in the abort-button"
+
+    |oldSize|
+
+    aString ~= abortButton label ifTrue:[
+	oldSize := abortButton extent.
+	abortButton label:aString.
+	abortButton resize.
+	abortButton extent ~= oldSize ifTrue:[
+	    shown ifTrue:[self resize]
+	]
+    ]
+!
+
+hideButtons
+    "hides the buttonPanel (i.e. the ok and cancel buttons if any)"
+
+    buttonPanel notNil ifTrue:[buttonPanel beInvisible]
+!
+
+noLabel:aString
+    "define the label of the 'no'-button.
+     And alias for #noText: - for backward compatibility"
+
+    self noText:aString.
+
+    "Created: 13.12.1995 / 16:21:57 / cg"
+    "Modified: 16.1.1997 / 11:30:25 / cg"
+!
+
+noText:aString
+    "define the label of the no-button.
+     If not set, it defaults to the resource-string for 'no'."
+
+    aString ~= abortButton label ifTrue:[
+        abortButton label:aString.
+        abortButton resize.
+        shown ifTrue:[self resize]
+    ]
+!
+
+okText:aString
+    "define the text in the ok-button"
+
+    |oldSize|
+
+    aString ~= okButton label ifTrue:[
+	oldSize := okButton extent.
+	okButton label:aString.
+	okButton resize.
+	okButton extent ~= oldSize ifTrue:[
+	    shown ifTrue:[self resize]
+	]
+    ]
+!
+
+okText:okString abortText:abortString
+    "set both texts displayed in the buttons"
+
+    (abortString ~= abortButton label 
+    or:[okString ~= okButton label]) ifTrue:[
+	okButton label:okString.
+	abortButton label:abortString.
+	okButton resize.
+	abortButton resize.
+	shown ifTrue:[self resize]
+    ]
+!
+
+okText:yesString noText:noString
+    "define the labels of both buttons.
+     Alias for yesText:noText: for backward compatibility."
+
+    ^ self yesText:yesString noText:noString
+
+    "Modified: 16.1.1997 / 11:30:58 / cg"
+!
+
+title:aString
+    "define title"
+
+    self label:aString.
+
+    "
+     DialogBox new open
+     (DialogBox new title:'Foo') open
+    "
+!
+
+title:aString yesText:yesString noText:noString
+    "define title and button labels"
+
+    self title:aString.
+    self yesText:yesString noText:noString
+!
+
+yesLabel:aString
+    "define the label of the 'yes'-button.
+     An alias for #yesText: for backward compatibility."
+
+    self yesText:aString.
+
+    "Created: 13.12.1995 / 16:22:05 / cg"
+    "Modified: 16.1.1997 / 11:31:58 / cg"
+!
+
+yesText:aString
+    "define the label of the 'yes'-button"
+
+    self okText:aString
+
+    "Modified: 16.1.1997 / 11:31:39 / cg"
+!
+
+yesText:yesString noText:noString
+    "define the labels of both buttons"
+
+    ((yesString ~= okButton label) or:[noString ~= abortButton label]) ifTrue:[
+        okButton label:yesString. 
+        abortButton label:noString.
+        okButton resize.
+        abortButton resize.
+        shown ifTrue:[self resize]
+    ]
+
+    "Modified: 21.2.1996 / 00:58:38 / cg"
+! !
+
+!DialogBox methodsFor:'accessing-models'!
+
+accept
+    "return the valueHolder holding true when the box
+     is accepted, false if closed via the windowManager or
+     the cancel button.
+     This is confusing: this method was originally called #acceptValue,
+     but renamed for compatibility with ST-80.
+     This looks like a bad name to me, since in most other situations, #accept
+     is used to force an accept, not to return some valueHolder ...)."
+
+    ^ acceptValue
+!
+
+acceptChannel
+    "same as #accept: return the valueHolder which is set to true when the box
+     is accepted"
+
+    ^ acceptValue
+
+    "Created: / 18.8.2000 / 21:44:24 / cg"
+!
+
+acceptChannel:aValueHolder
+    "set the valueHolder which is set to true when the box
+     is accepted"
+
+    acceptValue := aValueHolder
+!
+
+aspectAt:anAspectSymbol put:aDataModel
+    "return the dataModel for some aspect, nil if no such dataModel was defined;
+     requires that a corresponding dataModel has been set (usually during
+     initialization) via the #aspectAt:put: message.
+     Allows users of boxes to access individual values - especially useful,
+     in multi-field dialogs."
+
+    bindings isNil ifTrue:[bindings := IdentityDictionary new].
+    bindings at:anAspectSymbol put:aDataModel
+
+    "Created: 16.1.1997 / 11:38:46 / cg"
+    "Modified: 16.1.1997 / 11:41:28 / cg"
+!
+
+aspectFor:anAspectSymbol
+    "return the dataModel for some aspect, nil if no such dataModel was defined;
+     requires that a corresponding dataModel has been set (usually during
+     initialization) via the #aspectAt:put: message.
+     Allows users of boxes to access individual values - especially useful,
+     in multi-field dialogs."
+
+    "/ subclasses may redefine some aspects...
+    (self respondsTo:anAspectSymbol) ifTrue:[
+        ^ self perform:anAspectSymbol
+    ].
+
+    bindings isNil ifTrue:[^ nil].
+    ^ bindings at:anAspectSymbol ifAbsent:nil
+
+    "Modified: / 11-10-2006 / 21:48:14 / cg"
+!
+
+cancel
+    ^ BlockValue forLogicalNot:(acceptValue)
+! !
+
+!DialogBox methodsFor:'construction-adding'!
+
+addComponent:aComponent
+    "add any component with its preferred height and full width.
+     Returns the component."
+
+    ^ self addComponent:aComponent indent:nil tabable:false
+
+    "Modified: 9.2.1996 / 22:22:41 / cg"
+!
+
+addComponent:aComponent indent:indent
+    "add any component with its preferred height and full width.
+     The indent is temporarily changed to indent.
+     Returns the component."
+
+    ^ self addComponent:aComponent indent:indent tabable:false
+
+    "Modified: 9.2.1996 / 22:22:44 / cg"
+!
+
+addComponent:aComponent indent:indent tabable:tabable
+    "add any component with its preferred height and full width.
+     The indent is temporarily changed to indent.
+     Returns the component."
+
+    |oldLeft oldRight result|
+
+    oldLeft := leftIndent.
+    oldRight := rightIndent.
+    indent notNil ifTrue:[
+	leftIndent := rightIndent := indent.
+    ].
+    result := self addComponent:aComponent tabable:tabable tabbedComponent:aComponent.
+    leftIndent := oldLeft.
+    rightIndent := oldRight.
+    ^ result
+
+    "Modified: 9.2.1996 / 22:22:50 / cg"
+!
+
+addComponent:aComponent indent:indent withExtent:ext 
+    "add any component with some given extent.
+     Returns the component."
+
+    |fullSize lI rI|
+
+    indent isNil ifTrue:[
+        lI := leftIndent.
+        rI := rightIndent.
+    ] ifFalse:[
+        lI := rI := indent
+    ].
+
+    self basicAddComponent:aComponent.
+    (ext x isInteger) ifTrue:[ 
+        fullSize := ext + (lI + rI @ 0).
+        width := fullSize x max:width.
+    ] ifFalse:[
+        fullSize := ext.
+    ].
+    aComponent extent:fullSize.
+    aComponent origin:(0.0 @ yPosition); 
+               leftInset:lI; 
+               rightInset:rI.
+
+    yPosition := aComponent corner y + ViewSpacing.
+    "/ yPosition := yPosition + aComponent height + ViewSpacing.
+    needResize := true.
+    ^ aComponent
+
+    "Modified: / 29-07-2011 / 12:28:47 / cg"
+!
+
+addComponent:aComponent indent:indent withHeight:height 
+    "add any component with some given height and full width.
+     Returns the component."
+
+    |lI rI|
+
+    indent isNil ifTrue:[
+        lI := leftIndent.
+        rI := rightIndent.
+    ] ifFalse:[
+        lI := rI := indent
+    ].
+    self basicAddComponent:aComponent.
+    aComponent 
+        height:height;
+        origin:0.0@yPosition; 
+        width:1.0; 
+        leftInset:lI;
+        rightInset:rI.
+    yPosition := yPosition + height + ViewSpacing.
+    ^ aComponent
+
+    "Modified: 9.2.1996 / 22:22:58 / cg"
+!
+
+addComponent:aComponent tabable:tabable
+    "add any component with its preferred height and full width.
+     Returns the component."
+
+    ^ self addComponent:aComponent tabable:tabable tabbedComponent:aComponent
+
+    "Modified: 9.2.1996 / 22:23:04 / cg"
+!
+
+addComponent:aComponent tabable:tabable tabbedComponent:subComponent
+    "add any component with its preferred height and full width.
+     Returns the component."
+
+    tabable ifTrue:[
+        aComponent canTab:true.
+
+"/        tabableElements isNil ifTrue:[
+"/            tabableElements := OrderedCollection new
+"/        ].
+"/        tabableElements add:subComponent
+    ].
+    ^ self addComponent:aComponent withHeight:(aComponent preferredHeight).
+
+    "Modified: 9.2.1996 / 22:23:07 / cg"
+!
+
+addComponent:aComponent withExtent:ext 
+    "add any component with some given extent.
+     Returns the component."
+
+    ^ self addComponent:aComponent indent:nil withExtent:ext
+
+    "Modified: 9.2.1996 / 22:23:11 / cg"
+!
+
+addComponent:aComponent withHeight:height 
+    "add any component with some given height and full width.
+     Returns the component."
+
+    ^ self addComponent:aComponent indent:nil withHeight:height
+
+    "Modified: 9.2.1996 / 22:23:15 / cg"
+!
+
+addLabelledField:aView label:labelString adjust:labelAdjust tabable:tabable from:leftX to:rightX separateAtX:relativeX
+    "add a label and some view side-by-side.
+     The labels goes from 0.0 to relativeX; the inputField from relativeX to 1.0.
+     The labels string is defined by labelString and adjusted according to labelAdjust.
+     The inputField gets model as its model.
+     Return the inputField."
+
+    ^ self
+	addLabelledField:aView 
+	label:labelString 
+	adjust:labelAdjust 
+	tabable:tabable 
+	from:leftX to:rightX separateAtX:relativeX 
+	nameAs:nil
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+		addLabelledField:(EditField on:model) label:'input here:' 
+		adjust:#left 
+		tabable:true 
+		separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model field|
+
+     model := SelectionInList new.
+     model list:#('foo' 'bar' 'baz').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+		addLabelledField:(PopUpList on:model) label:'select here:' 
+		adjust:#left 
+		tabable:true 
+		separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "Created: 3.6.1996 / 11:03:24 / cg"
+    "Modified: 17.7.1996 / 15:04:07 / cg"
+!
+
+addLabelledField:aView label:labelString adjust:labelAdjust 
+    tabable:tabable from:leftX to:rightX separateAtX:relativeX nameAs:aName
+
+    "add a label and some view side-by-side.
+     The labels goes from 0.0 to relativeX; the inputField from relativeX to 1.0.
+     The labels string is defined by labelString and adjusted according to labelAdjust.
+     The inputField gets model as its model.
+     Return the inputField."
+
+    ^ self
+        addLabelledField:aView 
+        label:labelString 
+        adjust:labelAdjust 
+        tabable:tabable 
+        from:leftX to:rightX 
+        separateAtX:relativeX 
+        nameAs:aName
+        foregroundColor:nil
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+                addLabelledField:(EditField on:model) 
+                label:'input here:' 
+                adjust:#left 
+                tabable:true 
+                separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+                addLabelledField:((ComboListView on:model) list:#('foo' 'bar' 'baz'))
+                label:'select foo:'
+                adjust:#left 
+                tabable:true 
+                separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model field|
+
+     model := SelectionInList new.
+     model list:#('foo' 'bar' 'baz').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+                addLabelledField:(PopUpList on:model) 
+                label:'select here:' 
+                adjust:#left 
+                tabable:true 
+                separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "Created: 17.7.1996 / 15:03:32 / cg"
+    "Modified: 26.7.1996 / 18:11:12 / cg"
+!
+
+addLabelledField:aView label:labelString adjust:labelAdjust 
+    tabable:tabable from:leftX to:rightX separateAtX:relativeX nameAs:aName
+    foregroundColor:fgColor
+
+    "add a label and some view side-by-side.
+     The labels goes from 0.0 to relativeX; the inputField from relativeX to 1.0.
+     The labels string is defined by labelString and adjusted according to labelAdjust.
+     The inputField gets model as its model.
+     Return the inputField."
+
+    |y lbl max relW wLabel|
+
+    y := self yPosition.
+    lbl := Label label:labelString.
+
+    max := lbl preferredHeight max:(aView preferredHeight max:aView height).
+
+    relW := rightX - leftX.
+
+    self addComponent:lbl indent:leftIndent withHeight:max.
+    lbl rightInset:0.
+    relativeX isInteger ifTrue:[
+        wLabel := relativeX.
+    ] ifFalse:[
+        wLabel := relW*relativeX.
+    ].
+
+    lbl 
+        width:wLabel; 
+        left:leftX; 
+        adjust:labelAdjust; 
+        borderWidth:0.
+
+    relativeX isInteger ifTrue:[
+        lbl preferredExtent:(wLabel @ lbl preferredExtent y).
+        lbl extent:(wLabel @ lbl preferredExtent y).
+        lbl sizeFixed:true.
+    ].
+
+    fgColor notNil ifTrue:[
+        lbl foregroundColor:fgColor
+    ].
+
+    self yPosition:y.
+
+    "/ aView preferredExtent:(aView preferredExtent x @ max).
+    "/ aView height:max.
+
+    self addComponent:aView tabable:tabable.
+
+    relativeX isInteger ifTrue:[
+        aView 
+            leftInset:(ViewSpacing + relativeX); 
+            left:0.0;
+            rightInset:ViewSpacing; 
+            right:1.0.
+    ] ifFalse:[
+        aView 
+            leftInset:ViewSpacing; 
+            rightInset:ViewSpacing;
+            width:relW*(1.0 - relativeX); 
+            left:leftX+(relW*relativeX).
+    ].
+
+    "/ self todo. "/ someone changes this later, back to a too small height !!!!!!
+    aView setHeight:max.
+
+    aView isInputField ifTrue:[
+        self addToInputFieldGroup:aView
+    ].
+
+    aName notNil ifTrue:[
+        self name:lbl as:(aName , '.label').
+        self name:aView as:aName
+    ].
+
+    ^ aView                         
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+                addLabelledField:(EditField on:model) 
+                label:'input here:' 
+                adjust:#left 
+                tabable:true 
+                separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+                addLabelledField:((ComboListView on:model) list:#('foo' 'bar' 'baz'))
+                label:'select foo:'
+                adjust:#left 
+                tabable:true 
+                separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model field|
+
+     model := SelectionInList new.
+     model list:#('foo' 'bar' 'baz').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+                addLabelledField:(PopUpList on:model) 
+                label:'select here:' 
+                adjust:#left 
+                tabable:true 
+                separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "Created: / 17-07-1996 / 15:03:32 / cg"
+    "Modified: / 02-02-2011 / 12:17:55 / cg"
+!
+
+addLabelledField:aView label:labelString adjust:labelAdjust tabable:tabable separateAtX:relativeX
+    "add a label and some view side-by-side.
+     The labels goes from 0.0 to relativeX; the inputField from relativeX to 1.0.
+     The labels string is defined by labelString and adjusted according to labelAdjust.
+     The inputField gets model as its model.
+     Return the inputField."
+
+    ^ self
+	addLabelledField:aView 
+	label:labelString 
+	adjust:labelAdjust 
+	tabable:tabable 
+	from:0.0 to:1.0 
+	separateAtX:relativeX
+
+"/    |y lbl max|
+"/
+"/    y := self yPosition.
+"/    lbl := Label label:labelString.
+"/    max := lbl preferredExtent y max:(aView preferredExtent y).
+"/
+"/    self addComponent:lbl indent:leftIndent withHeight:max.
+"/    lbl rightInset:0.
+"/    lbl width:relativeX; adjust:labelAdjust; borderWidth:0.
+"/
+"/    self yPosition:y.
+"/    self addComponent:aView tabable:tabable.
+"/    aView leftInset:ViewSpacing; rightInset:ViewSpacing.
+"/    aView width:(1.0 - relativeX); left:relativeX.
+"/
+"/    aView isInputField ifTrue:[
+"/        self addToInputFieldGroup:aView
+"/    ].
+"/
+"/    ^ aView
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+		addLabelledField:(EditField on:model) label:'input here:' 
+		adjust:#left 
+		tabable:true 
+		separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model field|
+
+     model := SelectionInList new.
+     model list:#('foo' 'bar' 'baz').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+		addLabelledField:(PopUpList on:model) label:'select here:' 
+		adjust:#left 
+		tabable:true 
+		separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "Created: 13.4.1996 / 13:41:31 / cg"
+    "Modified: 3.6.1996 / 18:48:49 / cg"
+!
+
+addMessage:labelString centered:centered
+    |l|
+
+    l := self addTextLabel:labelString.
+    l adjust:(centered ifTrue:[#center] ifFalse:[#left]).
+    ^ l
+
+    "Created: / 4.2.2000 / 00:03:24 / cg"
+!
+
+addMessage:labelString textLine:valueHolder boundary:fraction
+    ^ self
+        addMessage:labelString 
+        textLine:valueHolder 
+        type:nil 
+        boundary:fraction
+!
+
+addMessage:labelString textLine:valueHolder type:typeSymbolOrNil boundary:fraction
+    |pos lbl field|
+
+    pos := self yPosition.
+    lbl := self addTextLabel:labelString.
+    lbl width:fraction.
+    self yPosition:pos.
+    field := self addInputFieldOn:valueHolder tabable:true.
+    field left:fraction; width:(1.0-fraction).
+    typeSymbolOrNil == #password ifTrue:[
+        field bePassword
+    ].
+    ^ field
+!
+
+addTextLabel:aString
+    "create a text label - the name has been choosen for ST-80 compatibility;
+     however, ST/X labels allow image labels too.
+     Returns the label."
+
+    |l|
+
+    l := Label new label:aString.
+    l borderWidth:0.
+    self addComponent:l.
+    ^ l
+
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabel:'hello'.
+     b showAtPointer
+    "
+    "
+     |b|
+
+     b := DialogBox new.
+     b leftIndent:100.
+     b addTextLabel:'hello'.
+     b leftIndent:0.
+     b addTextLabel:'world'.
+     b showAtPointer
+    "
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabel:'hello'.
+     b addTextLabel:'world'.
+     b addOkButton.
+     b showAtPointer
+    "
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabel:'hello'.
+     (b addTextLabel:'world') foregroundColor:Color red.
+     b addOkButton.
+     b showAtPointer
+    "
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabel:'hello world\\How about this ?' withCRs.
+     b addOkButton.
+     b showAtPointer
+    "
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabel:'hello world\\How about this ?' withCRs.
+     b addTextLabel:'not bad'.
+     b addAbortButton.
+     b addOkButton.
+     b showAtPointer
+    "
+!
+
+addTextLabel:aString adjust:how
+    "create a text label - the name has been choosen for ST-80 compatibility;
+     however, ST/X labels allow image labels too.
+     Returns the label."
+
+    |l|
+
+    l := self addTextLabel:aString.
+    l adjust:how.
+    ^ l
+
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabel:'hello' adjust:#left.
+     b showAtPointer
+    "
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabel:'hello' adjust:#right.
+     b showAtPointer
+    "
+!
+
+addTextLabelOn:aValueHolder
+    "create a text label showing the contents of a valueHolder.
+     Returns the label."
+
+    |l|
+
+    l := Label new labelChannel:aValueHolder.
+    l borderWidth:0.
+    self addComponent:l.
+    ^ l
+
+    "
+     |b|
+
+     b := DialogBox new.
+     b addTextLabelOn:'hello' asValue.
+     b showAtPointer
+    "
+    "
+     |b|
+
+     b := DialogBox new.
+     b leftIndent:100.
+     b addTextLabelOn:'hello' asValue.
+     b leftIndent:0.
+     b addTextLabelOn:'world' asValue.
+     b showAtPointer
+    "
+!
+
+addToInputFieldGroup:aComponentOrSubcomponent
+    "add a component to the input group.
+     The argument, aComponentOrSubcomponent may even be a nested subcomponent of
+     a topLevel component."
+
+    self
+	addToInputFieldGroup:aComponentOrSubcomponent before:nil
+
+    "Modified: 18.10.1997 / 03:09:17 / cg"
+!
+
+addToInputFieldGroup:aComponentOrSubcomponent before:anotherComponent
+    "add a component to the input group.
+     The argument, aComponentOrSubcomponent may even be a nested subcomponent of
+     a topLevel component."
+
+    inputFieldGroup isNil ifTrue:[
+        inputFieldGroup := EnterFieldGroup new.
+        inputFieldGroup leaveAction:[self lastFieldLeft].
+        "/
+        "/ the first inputField gets the focus initially
+        "/
+        aComponentOrSubcomponent hasKeyboardFocus:true.
+    ].
+    inputFieldGroup add:aComponentOrSubcomponent before:anotherComponent.
+    self delegate:(KeyboardForwarder to:inputFieldGroup condition:#noFocus).
+
+"/    inputFields isNil ifTrue:[
+"/        inputFields := OrderedCollection new.
+"/
+"/        "/ the very first field gets the focus initially
+"/
+"/        aComponentOrSubcomponent showCursor.
+"/        aComponentOrSubcomponent hasKeyboardFocus:true.
+"/    ] ifFalse:[
+"/        aComponentOrSubcomponent hideCursor.
+"/        aComponentOrSubcomponent hasKeyboardFocus:false.
+"/    ].
+"/    inputFields add:aComponentOrSubcomponent
+
+    "Modified: 18.10.1997 / 02:47:20 / cg"
+    "Created: 18.10.1997 / 03:08:51 / cg"
+!
+
+removeFromInputFieldGroup:aComponentOrSubcomponent
+    "remove a component from the input group.
+     The argument, aComponentOrSubcomponent may even be a nested subcomponent of
+     a topLevel component."
+
+    inputFieldGroup isNil ifTrue:[^ self].
+    inputFieldGroup remove:aComponentOrSubcomponent.
+
+    "Created: 18.10.1997 / 02:51:30 / cg"
+! !
+
+!DialogBox methodsFor:'construction-buttons'!
+
+addAbortAndOkButtons
+    "create both abort- and Ok Buttons"
+
+    self 
+        addAbortButtonLabelled:nil; 
+        addOkButtonLabelled:nil
+!
+
+addAbortButton
+    "create an abortButton - to be sent from redefined initialize
+     methods in subclasses or when creating a box programmatically.
+     Returns the button."
+
+    ^ self addAbortButtonLabelled:nil
+!
+
+addAbortButton:aButton 
+    "add an already created abortButton - to be sent from redefined initialize
+     methods in subclasses or when creating a box programmatically.
+     Returns the button."
+
+    abortButton := aButton.
+    aButton model:self; change:#abortPressed.
+
+    "/ changed:
+    "/ now exclusively done by the buttonPanel itself
+
+"/    (Dialog defaultOKButtonAtLeft) ifTrue:[
+"/        self addButton:aButton after:nil.
+"/    ] ifFalse:[
+"/        self addButton:aButton before:nil.
+"/    ].
+
+    self addButton:aButton before:nil.
+    ^ aButton.
+
+    "Created: 17.9.1995 / 20:17:26 / claus"
+!
+
+addAbortButtonLabelled:buttonLabel
+    "create an abortButton with a label - to be sent from redefined initialize
+     methods in subclasses or when creating a box programmatically.
+     A nil argument creates one with the default label.
+     Returns the button."
+
+    |aButton|
+
+    aButton := Button abortButton.
+    buttonLabel notNil ifTrue:[aButton label:buttonLabel].
+    ^ self addAbortButton:aButton
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButtonLabelled:'get out of here'.
+     dialog addOkButtonLabelled:'yes thats ok'.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "Modified: 9.2.1996 / 22:09:40 / cg"
+!
+
+addButton:aButton
+    "add a button into the buttonPanel.
+     Returns the button."
+
+    "/ ^ self addButton:aButton after:nil
+    (self class defaultOKButtonAtLeft) ifFalse:[
+        ^ self addButton:aButton before:nil
+    ] ifTrue:[
+        ^ self addButton:aButton after:nil
+    ].
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButton.
+     dialog addButton:(Button label:'foo' action:[Transcript showCR:'foo']).
+     dialog addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButton.
+     dialog addButton:(Button label:'foo' action:[dialog hide. Transcript showCR:'foo']).
+     dialog addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addButton:(Button label:'foo' action:[dialog hide. Transcript showCR:'foo']).
+     dialog addAbortButton.
+     dialog addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "Modified: 9.2.1996 / 22:14:17 / cg"
+!
+
+addButton:aButton after:someOtherButtonOrNil
+    "add a button into the buttonPanel.
+     If the argument someOtherButtonOrNil is nil, the button is
+     added at the end."
+
+    |h|
+
+    buttonPanel addSubView:aButton after:someOtherButtonOrNil.
+    buttonPanel subViews size > 1 ifTrue:[
+        buttonPanel horizontalLayout:#fitSpace.
+    ].
+    (h := (aButton heightIncludingBorder + (ViewSpacing * 2))) > buttonPanel topInset ifTrue:[
+         buttonPanel topInset:h negated
+    ].
+    needResize := true.
+    ^ aButton
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButton.
+     dialog addOkButton.
+     dialog addButton:(Button 
+                        label:'foo' 
+                        action:[dialog hide. Transcript showCR:'foo'])
+                after:(dialog okButton).
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButton.
+     dialog addOkButton.
+     dialog addButton:(Button 
+                        label:'foo' 
+                        action:[dialog hide. Transcript showCR:'foo'])
+                after:(dialog abortButton).
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButton.
+     dialog addOkButton.
+     dialog addButton:(Button 
+                        label:'foo' 
+                        action:[dialog hide. Transcript showCR:'foo'])
+                after:nil.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "Modified: 9.2.1996 / 22:13:51 / cg"
+!
+
+addButton:aButton before:someOtherButtonOrNil
+    "add a button into the buttonPanel.
+     If the argument someOtherButtonOrNil is nil, the button is
+     added upFront."
+
+    |h|
+
+    buttonPanel addSubView:aButton before:someOtherButtonOrNil.
+    buttonPanel subViews size > 1 ifTrue:[
+        buttonPanel horizontalLayout:#fitSpace.
+    ].
+    (h := (aButton heightIncludingBorder + (ViewSpacing * 2))) > buttonPanel topInset ifTrue:[
+         buttonPanel topInset:h negated
+    ].
+    preferredExtent := nil.
+    needResize := true.
+    shown ifTrue:[ aButton realize ].
+    ^ aButton
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButton.
+     dialog addOkButton.
+     dialog addButton:(Button 
+                        label:'foo' 
+                        action:[dialog hide. Transcript showCR:'foo'])
+                before:(dialog okButton).
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addAbortButton.
+     dialog addOkButton.
+     dialog addButton:(Button 
+                        label:'foo' 
+                        action:[dialog hide. Transcript showCR:'foo'])
+                before:nil.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "Modified: 9.2.1996 / 22:13:51 / cg"
+    "Created: 10.2.1996 / 16:04:35 / cg"
+!
+
+addHelpButtonFor:pathToHelpText 
+    "add a help button to the buttonPanel.
+     The argument, pathToHelpText should specify the path to the help
+     text under either the doc/online/<language> or the help/<language>
+     directory."
+
+    ^ self addHelpButtonWithAction:[HTMLDocumentView openFullOnHelpFile:pathToHelpText].
+
+    "
+     |box|
+
+     box := DialogBox new.
+     box 
+        addHelpButtonFor:'Launcher/compilerSettings.html';
+        addAbortButton; 
+        addOkButton.
+
+     box open
+    "
+
+    "Modified: / 09-09-1996 / 22:40:21 / stefan"
+    "Modified: / 26-01-2011 / 18:04:53 / cg"
+!
+
+addHelpButtonWithAction:helpAction
+    "add a help button to the buttonPanel.
+     The argument, helpAction is avaluated when clicked"
+
+    |helpButton|
+
+    helpButton := Button label:(resources string:'Help').
+    helpButton action:[
+        self withWaitCursorDo:helpAction
+    ].
+
+    "/ changed:
+    "/ now exclusively done by the buttonPanel itself
+
+"/    (Dialog defaultOKButtonAtLeft) ifTrue:[
+"/        self addButton:helpButton after:nil.
+"/    ] ifFalse:[
+"/        self addButton:helpButton before:nil.
+"/    ].
+
+    self addButton:helpButton before:nil.
+    ^ helpButton
+
+    "
+     |box|
+
+     box := DialogBox new.
+     box 
+        addHelpButtonWithAction:[ Transcript flash ];
+        addAbortButton; 
+        addOkButton.
+
+     box open
+    "
+
+    "Modified: / 09-09-1996 / 22:40:21 / stefan"
+    "Created: / 26-01-2011 / 18:04:16 / cg"
+!
+
+addOK:checkBlock
+    |butt|
+
+    butt := self addOkButton.
+    "/ what is checkBlock ?
+    ^ butt
+
+    "Modified: / 4.2.2000 / 00:09:15 / cg"
+!
+
+addOkButton
+    "create an okButton - to be sent from redefined initialize
+     methods in subclasses or when creating a box programmatically.
+     Returns the button."
+
+    ^ self addOkButtonLabelled:nil
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "Modified: 9.2.1996 / 21:37:02 / cg"
+!
+
+addOkButton:aButton 
+    "add an already created okButton - to be sent from redefined initialize
+     methods in subclasses or when creating a box programmatically.
+     Returns the button."
+
+"/    okButton isNil ifTrue:[
+        okButton := aButton.
+"/    ].
+    aButton model:self; change:#okPressed.
+
+    "/ changed:
+    "/ now exclusively done by the buttonPanel itself
+
+"/    (Dialog defaultOKButtonAtLeft) ifTrue:[
+"/        self addButton:aButton before:nil.
+"/    ] ifFalse:[
+"/        self addButton:aButton after:nil.
+"/    ].
+
+    self addButton:aButton after:nil.
+
+    ^ aButton.
+
+    "
+     |dialog b|
+
+     b := Button label:((Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages') magnifiedBy:0.5).
+
+     dialog := DialogBox new.
+     dialog addOkButton:b.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "Modified: 17.9.1995 / 20:20:41 / claus"
+    "Modified: 9.2.1996 / 21:38:48 / cg"
+!
+
+addOkButtonLabelled:buttonLabel 
+    "create an okButton with a label - to be sent from redefined initialize
+     methods in subclasses or when creating a box programmatically.
+     A nil argument creates one with the default text.
+     Returns the button."
+
+    |aButton|
+
+    aButton := Button okButton.
+    buttonLabel notNil ifTrue:[aButton label:buttonLabel].
+    aButton isReturnButton:acceptReturnAsOK.
+    ^ self addOkButton:aButton.
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addOkButtonLabelled:'get out of here'.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:'yes'].
+    "
+
+    "Modified: 9.2.1996 / 21:39:34 / cg"
+!
+
+removeAbortButton 
+    "remove an already added okButton - only useful to change some already created
+     dialog afterwards"
+
+    abortButton destroy
+!
+
+removeOkButton 
+    "remove an already added okButton - only useful to change some already created
+     dialog afterwards"
+
+    okButton destroy
+! !
+
+!DialogBox methodsFor:'construction-check & comboboxes'!
+
+addCheckBox:label on:aModel
+    "create a checkBox with label on aModel and add it.
+     Returns the box."
+
+    ^ self addCheckBox:label on:aModel tabable:true
+
+    "
+     |dialog check|
+
+     check := true asValue.
+
+     dialog := DialogBox new.
+     dialog addCheckBox:'on or off' on:check.
+     dialog addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:check value].
+    "
+
+    "Modified: 9.2.1996 / 22:15:38 / cg"
+!
+
+addCheckBox:label on:aModel tabable:tabable
+    "create a checkBox with label on aModel and add it.
+     Returns the box."
+
+    |b|
+
+    b := CheckBox on:aModel.
+    b label:label.
+    self addComponent:b tabable:tabable.
+    ^ b
+
+    "
+     |dialog check1 check2 check3|
+
+     check1 := true asValue.
+     check2 := false asValue.
+     check3 := true asValue.
+
+     dialog := DialogBox new.
+     dialog addCheckBox:'on or off' on:check1 tabable:false.
+     dialog addHorizontalLine.
+
+     dialog addCheckBox:'on or off' on:check2 tabable:true.
+     dialog addCheckBox:'on or off' on:check3 tabable:true.
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 22:16:49 / cg"
+!
+
+addCheckBoxAtBottom:checkLabel on:aValueHolder
+    "add a checkbox and make it stick at the bottom"
+
+    |box|
+
+    box := here addCheckBox:checkLabel on:aValueHolder.
+
+    box layout:((0.0 @ 1.0 corner:1.0 @ 1.0) asLayout 
+                topOffset:(buttonPanel preferredHeight 
+                          + box preferredHeight
+                          + ViewSpacing ) negated;
+                bottomOffset:(buttonPanel preferredHeight 
+                          + ViewSpacing ) negated).
+    ^ box.
+
+    "Created: / 28-02-2012 / 09:03:22 / cg"
+!
+
+addComboBoxOn:aModel
+    "create a comboBoxView on aModel and add it.
+     Returns the comboBoxView."
+
+    ^ self addComboBoxOn:aModel tabable:true
+
+    "
+     without a list, the comboBox is disabled:
+
+     |box val|
+
+     val := 'some input' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo box example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboBoxOn:val).
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "with a list, it can be pulled:
+
+     |box val|
+
+     val := '' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo box example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboBoxOn:val) list:#('one' 'two' 'three' 'four').
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "Modified: 28.2.1996 / 15:17:39 / cg"
+    "Created: 4.3.1996 / 17:21:45 / cg"
+!
+
+addComboBoxOn:aModel tabable:tabable
+    "create a comboBoxView on aModel and add it.
+     Returns the comboBoxView."
+
+    |f|
+
+    f := ComboBoxView new.
+    f model:aModel.
+    self addComponent:f tabable:tabable.
+    tabable ifTrue:[
+	self addToInputFieldGroup:f editor.
+    ].
+    ^ f
+
+    "
+     without a list, the comboBox is disabled:
+
+     |box val|
+
+     val := 'some input' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo box example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboBoxOn:val tabable:true).
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "with a list, it can be pulled:
+
+     |box val|
+
+     val := '' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo box example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboBoxOn:val tabable:true) list:#('one' 'two' 'three' 'four').
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "Modified: 4.3.1996 / 17:21:57 / cg"
+!
+
+addComboListOn:aModel
+    "create a comboListView on aModel and add it.
+     Returns the comboListView."
+
+    ^ self addComboListOn:aModel tabable:true 
+
+    "without a list, the comboList is disabled:
+
+     |box val|
+
+     val := 'some input' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo list example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboListOn:val).
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "with a list, it can be pulled:
+
+     |box val|
+
+     val := '' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo box example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboListOn:val) list:#('one' 'two' 'three' 'four').
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "Created: 28.2.1996 / 15:16:34 / cg"
+    "Modified: 4.3.1996 / 17:22:59 / cg"
+!
+
+addComboListOn:aModel list:list tabable:tabable
+    "create a comboListView on aModel and add it.
+     Returns the comboListView."
+
+    ^ (self addComboListOn:aModel tabable:tabable) list:list
+
+    "
+     |box val|
+
+     val := '' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo box example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboListOn:val list:#('one' 'two' 'three' 'four') tabable:true).
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+        Transcript showCR:val value
+     ].
+    "
+!
+
+addComboListOn:aModel tabable:tabable
+    "create a comboListView on aModel and add it.
+     Returns the comboListView."
+
+    |f|
+
+    f := ComboListView new.
+    f model:aModel.
+    self addComponent:f tabable:tabable.
+    ^ f
+
+    "without a list, the comboList is disabled:
+
+     |box val|
+
+     val := 'some input' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo list example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboListOn:val tabable:true).
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "with a list, it can be pulled:
+
+     |box val|
+
+     val := '' asValue.
+
+     box := Dialog new.
+
+     (box addTextLabel:'combo box example') adjust:#left.
+     box addVerticalSpace.
+     (box addComboListOn:val tabable:true) list:#('one' 'two' 'three' 'four').
+     box addOkButton.
+     box open.
+     box accepted ifTrue:[
+	Transcript showCR:val value
+     ].
+    "
+
+    "Created: 28.2.1996 / 15:16:34 / cg"
+    "Modified: 4.3.1996 / 17:23:38 / cg"
+!
+
+addTriggerBox:label action:aBlock
+    "create a triggerBox with label and action and add it.
+     Returns the box."
+
+    |b|
+
+    b := TriggerBox new action:aBlock.
+    b label:label.
+    self addComponent:b tabable:false.
+    ^ b
+
+    "
+     |dialog trigger1 trigger2 trigger3|
+
+     trigger1 := true asValue.
+     trigger2 := false asValue.
+     trigger3 := true asValue.
+
+     dialog := DialogBox new.
+     dialog addTriggerBox:'go' action:[Transcript showCR:'1'].
+     dialog addHorizontalLine.
+
+     dialog addTriggerBox:'go go' action:[Transcript showCR:'2'].
+     dialog addTriggerBox:'trigger' action:[Transcript showCR:'3'].
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 22:16:49 / cg"
+! !
+
+!DialogBox methodsFor:'construction-inputfields'!
+
+addFilenameInputFieldOn:aModel in:aDirectory tabable:tabable
+    "create a fileName input field on aModel and add it.
+     Returns the field. This is much like a normal input field,
+     but supports filename completion."
+
+    |f|
+
+    f := FilenameEditField new.
+    aDirectory notNil ifTrue:[f directory:aDirectory].
+    f model:aModel.
+    self addInputField:f tabable:tabable.
+    ^ f
+!
+
+addInputField:aField
+    "add an already created input field.
+     Returns the field."
+
+    ^ self addInputField:aField tabable:true
+
+    "Modified: 9.2.1996 / 20:46:16 / cg"
+!
+
+addInputField:aField tabable:tabable
+    "add an already created input field.
+     If tabable is true, the field is put into a group, to allow
+     stepping through the fields with #Cursor/#Return keys.
+     Returns the field."
+
+    self addComponent:aField tabable:tabable.
+    tabable ifTrue:[
+	self addToInputFieldGroup:aField.
+    ].
+    ^ aField
+
+    "Modified: 31.5.1996 / 21:22:29 / cg"
+!
+
+addInputFieldOn:aModel
+    "create an input field on aModel and add it.
+     Returns the field."
+
+    ^ self addInputFieldOn:aModel tabable:true
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'enter a string') adjust:#left.
+
+     field := dialog addInputFieldOn:model.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "Modified: 9.2.1996 / 21:34:14 / cg"
+!
+
+addInputFieldOn:aModel tabable:tabable
+    "create an input field on aModel and add it.
+     If tabable is false, the field cannot be tabbed into
+     and return does not close the box.
+     (pointer must be moved into it).
+     Returns the field."
+
+    |f|
+
+    f := EditField model:aModel.
+    self addInputField:f tabable:tabable.
+    ^ f
+
+    " a non-tabable field:
+
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'enter a string') adjust:#left.
+
+     field := dialog addInputFieldOn:model tabable:false.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "Modified: 9.2.1996 / 21:36:16 / cg"
+    "Modified: 3.1.1997 / 10:24:04 / stefan"
+!
+
+addLabelledInputField:labelString adjust:labelAdjust on:model tabable:tabable from:leftX to:rightX separateAtX:relativeX
+    "add a label and an inputField side-by-side.
+     The labels goes from 0.0 to relativeX; the inputField from relativeX to 1.0.
+     The labels string is defined by labelString and adjusted according to labelAdjust.
+     The inputField gets model as its model.
+     Return the inputField."
+
+
+    ^ self 
+	addLabelledField:(EditField on:model) label:labelString 
+	adjust:labelAdjust
+	tabable:tabable 
+	from:leftX to:rightX
+	separateAtX:relativeX.
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+		addLabelledInputField:'enter a string' 
+		adjust:#left 
+		on:model 
+		tabable:true 
+		separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model1 model2 field|
+
+     model1 := '' asValue.
+     model2 := '' asValue.
+
+     dialog := DialogBox new.
+
+     dialog addTextLabel:'a two-input box'.
+     dialog addHorizontalLine.
+
+     field := dialog 
+		addLabelledInputField:'string1:' 
+		adjust:#right 
+		on:model1 
+		tabable:true 
+		separateAtX:0.4.
+
+     field := dialog 
+		addLabelledInputField:'string2:' 
+		adjust:#right 
+		on:model2 
+		tabable:true 
+		separateAtX:0.4.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[
+	Transcript showCR:model1 value.
+	Transcript showCR:model2 value.
+     ].
+    "
+
+    "Modified: 19.4.1996 / 17:39:46 / cg"
+    "Created: 3.6.1996 / 11:04:23 / cg"
+!
+
+addLabelledInputField:labelString adjust:labelAdjust on:model tabable:tabable separateAtX:relativeX
+    "add a label and an inputField side-by-side.
+     The labels goes from 0.0 to relativeX; the inputField from relativeX to 1.0.
+     The labels string is defined by labelString and adjusted according to labelAdjust.
+     The inputField gets model as its model.
+     Return the inputField."
+
+
+    ^ self 
+	addLabelledField:(EditField on:model) label:labelString 
+	adjust:labelAdjust
+	tabable:tabable 
+	separateAtX:relativeX.
+
+    "
+     |dialog model field|
+
+     model := '' asValue.
+
+     dialog := DialogBox new.
+
+     field := dialog 
+		addLabelledInputField:'enter a string' 
+		adjust:#left 
+		on:model 
+		tabable:true 
+		separateAtX:0.3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[Transcript showCR:model value].
+    "
+
+    "
+     |dialog model1 model2 field|
+
+     model1 := '' asValue.
+     model2 := '' asValue.
+
+     dialog := DialogBox new.
+
+     dialog addTextLabel:'a two-input box'.
+     dialog addHorizontalLine.
+
+     field := dialog 
+		addLabelledInputField:'string1:' 
+		adjust:#right 
+		on:model1 
+		tabable:true 
+		separateAtX:0.4.
+
+     field := dialog 
+		addLabelledInputField:'string2:' 
+		adjust:#right 
+		on:model2 
+		tabable:true 
+		separateAtX:0.4.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+     dialog accepted ifTrue:[
+	Transcript showCR:model1 value.
+	Transcript showCR:model2 value.
+     ].
+    "
+
+    "Created: 13.4.1996 / 13:41:31 / cg"
+    "Modified: 19.4.1996 / 17:39:46 / cg"
+! !
+
+!DialogBox methodsFor:'construction-layout'!
+
+addGap
+    "VW compatibility"
+
+    self addGap:4
+!
+
+addGap:pixels
+    "VW compatibility"
+
+    self addVerticalSpace:pixels
+
+    "Created: / 4.2.2000 / 00:03:58 / cg"
+    "Modified: / 5.2.2000 / 15:30:26 / cg"
+!
+
+addHorizontalLine
+    "add a horizontal line as separator"
+
+    ^ self addComponent:(Separator new extent:1.0 @ 5).
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog 
+	addTextLabel:'some title string';
+	addHorizontalLine;
+	addTextLabel:'more text';
+	addOkButton;
+	open.
+    "
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog 
+	addTextLabel:'some title string';
+	addHorizontalLine;
+	addTextLabel:'more text'.
+     (dialog addHorizontalLine) width:20.
+     dialog addTextLabel:'more text'.
+     (dialog addHorizontalLine) width:20.
+     dialog 
+	addTextLabel:'more text';
+	addHorizontalLine;
+	addOkButton;
+	open.
+    "
+
+    "Modified: 19.4.1996 / 15:11:30 / cg"
+!
+
+addVerticalSpace
+    "add a default vertical space (1 mm)"
+
+    self addVerticalSpace:(ViewSpacing).
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addTextLabel:'some title string'.
+     dialog addVerticalSpace.
+     dialog addTextLabel:'more text'.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 21:41:10 / cg"
+!
+
+addVerticalSpace:nPixel
+    "add some pixels of space to the next component"
+
+    yPosition := yPosition + nPixel.
+    needResize := true.
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     dialog addTextLabel:'some title string'.
+     dialog addVerticalSpace:50.
+     dialog addTextLabel:'more text'.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 21:41:23 / cg"
+! !
+
+!DialogBox methodsFor:'construction-lists'!
+
+addList:listHolder lines:nLines validation:validateionBlock
+    ^ self 
+        addListBoxOn:listHolder
+        withNumberOfLines:nLines 
+        hScrollable:true
+        vScrollable:true
+
+    "Created: / 4.2.2000 / 00:04:49 / cg"
+    "Modified: / 4.2.2000 / 00:06:06 / cg"
+!
+
+addListBoxOn:aModel
+    "add a selectionInListView to the box.
+     The listViews ScrollWrapper is returned"
+
+    ^ self 
+	addListBoxOn:aModel 
+	withNumberOfLines:nil 
+	hScrollable:false 
+	vScrollable:true. 
+
+    "
+     |dialog model listView|
+
+     model := SelectionInList new.
+     model list:#('one' 'two' 'three' 'four').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'select any') adjust:#left.
+
+     listView := dialog addListBoxOn:model.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[Transcript show:'selection is:'; showCR:model selection].
+    "
+
+    "Modified: 27.4.1996 / 18:27:58 / cg"
+!
+
+addListBoxOn:aModel class:aListViewClass
+    "create & add an instance of aListViewClass to the box.
+     The listViews ScrollWrapper is returned"
+
+    ^ self 
+	addListBoxOn:aModel
+	class:aListViewClass
+	withNumberOfLines:nil 
+	hScrollable:false 
+	vScrollable:true.
+
+    "Created: 19.4.1996 / 13:06:14 / cg"
+    "Modified: 27.4.1996 / 18:27:53 / cg"
+!
+
+addListBoxOn:aModel class:aListViewClass withNumberOfLines:numLines
+    "create and add an instance of aListViewClass to the box.
+     The list has numLines (if nonNil) number of lines shown.
+     The listViews ScrollWrapper is returned"
+
+    ^ self 
+	addListBoxOn:aModel
+	class:aListViewClass
+	withNumberOfLines:numLines 
+	hScrollable:false 
+	vScrollable:true.
+
+    "Created: 19.4.1996 / 13:05:05 / cg"
+    "Modified: 27.4.1996 / 18:27:48 / cg"
+!
+
+addListBoxOn:aModel class:aListViewClass withNumberOfLines:numLines hScrollable:hs vScrollable:vs
+    "add an instance of aListViewClass (selectionInListView) to the box.
+     The list has numLines (if nonNil) number of lines shown.
+     If scrolled, the ScrollWrapper is returned - otherwise the listView."
+
+    |l|
+
+    l := self addTextBoxOn:aModel class:aListViewClass withNumberOfLines:numLines hScrollable:hs vScrollable:vs.
+    (aListViewClass canUnderstand:#doubleClickAction:) ifTrue:[
+        l doubleClickAction:[:name | self okPressed].
+    ].
+    ^ l
+
+    "
+     |dialog listView|
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'select any') adjust:#left.
+
+     listView := dialog 
+                        addListBoxOn:nil 
+                        class:FileSelectionList
+                        withNumberOfLines:10 
+                        hScrollable:false 
+                        vScrollable:false.
+
+     listView directory:'/etc'.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[Transcript show:'selection is:'; showCR:listView selectionValue].
+    "
+
+    "Created: 22.2.1996 / 15:40:07 / cg"
+    "Modified: 27.4.1996 / 18:26:15 / cg"
+    "Modified: 15.6.1996 / 00:31:20 / stefan"
+!
+
+addListBoxOn:aModel withNumberOfLines:numLines
+    "add a selectionInListView to the box.
+     The list has numLines (if nonNil) number of lines shown.
+     The listViews ScrollWrapper is returned"
+
+    ^ self 
+	addListBoxOn:aModel 
+	withNumberOfLines:numLines 
+	hScrollable:false 
+	vScrollable:true. 
+
+    "
+     |dialog model listView|
+
+     model := SelectionInList new.
+     model list:#('one' 'two' 'three' 'four').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'select any') adjust:#left.
+
+     listView := dialog addListBoxOn:model withNumberOfLines:3.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[Transcript show:'selection is:'; showCR:model selection].
+    "
+
+    "Created: 22.2.1996 / 15:40:07 / cg"
+    "Modified: 27.4.1996 / 18:27:42 / cg"
+!
+
+addListBoxOn:aModel withNumberOfLines:numLines hScrollable:hs vScrollable:vs
+    "add a selectionInListView to the box.
+     The list has numLines (if nonNil) number of lines shown.
+     If scrolled, the ScrollWrapper is returned - otherwise the listView."
+
+    ^ self 
+	addListBoxOn:aModel 
+	class:SelectionInListView
+	withNumberOfLines:numLines 
+	hScrollable:hs 
+	vScrollable:vs
+
+    "
+     |dialog model listView|
+
+     model := SelectionInList new.
+     model list:#('one' 'two' 'three' 'four').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'select any') adjust:#left.
+
+     listView := dialog addListBoxOn:model withNumberOfLines:3 hScrollable:true vScrollable:true.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[Transcript show:'selection is:'; showCR:model selection].
+    "
+
+    "
+     |dialog model listView|
+
+     model := SelectionInList new.
+     model list:#('one' 'two' 'three' 'four').
+     model selectionIndex:2.
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'select any') adjust:#left.
+
+     listView := dialog addListBoxOn:model withNumberOfLines:3 hScrollable:false vScrollable:false.
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[Transcript show:'selection is:'; showCR:model selection].
+    "
+
+    "Created: 22.2.1996 / 15:40:07 / cg"
+    "Modified: 27.4.1996 / 18:26:36 / cg"
+!
+
+addPopUpList:labelString on:aModel
+    "create a popUpList with a label on aModel and add it.
+     Returns the box."
+
+    ^ self addPopUpList:labelString on:aModel tabable:true
+!
+
+addPopUpList:labelString on:aModel tabable:tabable
+    "create a popUpList on aModel and add it.
+     Returns the popUpList."
+
+    |p box l|
+
+    p := PopUpList on:aModel.
+    p resize; sizeFixed:true.
+    labelString notNil ifTrue:[
+	box := HorizontalPanelView new.
+	box borderWidth:0; horizontalLayout:#rightSpace.
+	box add:(l := Label label:labelString).
+	l borderWidth:0.
+	box add:p.
+    ] ifFalse:[
+	box := p.
+    ].        
+    self addComponent:box tabable:tabable tabbedComponent:p.
+    ^ p
+
+    "Modified: 31.5.1996 / 21:25:17 / cg"
+!
+
+addPopUpListOn:aModel
+    "create a popUpList on aModel and add it.
+     Returns the box."
+
+    ^ self addPopUpList:nil on:aModel tabable:true
+!
+
+addPopUpListOn:aModel tabable:tabable
+    "create a popUpList on aModel and add it.
+     Returns the popUpList."
+
+    ^ self addPopUpList:nil on:aModel tabable:tabable
+!
+
+addRadioButton:labelString on:aRadioButtonGroupModel value:radioValue tabable:tabable
+    "create a radio button on aModel and add it.
+     Returns the radio button."
+
+    |r|
+
+    r := RadioButton label:labelString.
+    aRadioButtonGroupModel add:r value:radioValue.
+
+    self addComponent:r tabable:tabable.
+    ^ r
+
+    "Created: / 23-07-2011 / 17:28:08 / cg"
+!
+
+addTextBoxOn:aModel class:aListViewClass withNumberOfLines:numLines hScrollable:hs vScrollable:vs
+    "add an instance of aListViewClass to the box.
+     The list has numLines (if nonNil) number of lines shown.
+     If scrolled, the ScrollWrapper is returned - otherwise the listView."
+
+    |l scr h dH|
+
+    l := aListViewClass new.
+    l model:aModel.
+
+    (vs or:[hs]) ifTrue:[
+        hs ifTrue:[
+            scr := HVScrollableView forView:l miniScrollerH:true .
+        ] ifFalse:[
+            scr := ScrollableView forView:l
+        ].
+        scr resize.
+        "/ Transcript show:scr height; show:' '; showCR:l height.
+        dH := scr height - l height.
+    ] ifFalse:[
+        l level:-1.
+        scr := l.
+        dH := 0.
+    ].
+
+    numLines notNil ifTrue:[
+        h := l heightForLines:numLines.
+    ] ifFalse:[
+        h := l preferredHeight
+    ].
+    self addComponent:scr withHeight:(h + dH).
+    ^ scr
+
+    "
+     |dialog listView|
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'select any') adjust:#left.
+
+     listView := dialog 
+                        addTextBoxOn:nil 
+                        class:EditTextView
+                        withNumberOfLines:10 
+                        hScrollable:true 
+                        vScrollable:true.
+
+
+     dialog addAbortButton; addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[Transcript show:'selection is:'; showCR:listView contents].
+    "
+
+    "Created: 14.6.1996 / 23:33:47 / stefan"
+    "Modified: 8.11.1996 / 15:31:15 / cg"
+! !
+
+!DialogBox methodsFor:'construction-rows & columns'!
+
+addColumn:aRow fromX:leftX toX:rightX collect:aBlock
+    "add some elements in a vertical column.
+     Equally space elements as returned from aBlock."
+
+    self 
+	addColumn:aRow 
+	fromX:leftX toX:rightX 
+	collect:aBlock 
+	tabable:false
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+	addColumn:#('label1' 'label2' 'lbl3' 'l4' 'label5')
+	fromX:0.0
+	toX:1.0
+	collect:[:label | Label label:label].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+	addColumn:#('label1' 'label2' 'label3' 'label4' 'label5')
+	fromX:0.25 
+	toX:0.75
+	collect:[:label | (Label label:label) adjust:#left].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog y|
+
+     dialog := Dialog new.
+     y := dialog yPosition.
+     dialog 
+	addColumn:#('a1' 'b1' 'c1' 'd1')
+	fromX:0
+	toX:(1/3) 
+	collect:[:label | Label label:label].
+
+     dialog yPosition:y.
+     dialog 
+	addColumn:#('a2' 'b2' 'c2' 'd2')
+	fromX:(1/3)
+	toX:(2/3) 
+	collect:[:label | Label label:label].
+
+     dialog yPosition:y.
+     dialog 
+	addColumn:#('a3' 'b3' 'c3' 'd3')
+	fromX:(2/3)
+	toX:1 
+	collect:[:label | Label label:label].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 22:22:12 / cg"
+!
+
+addColumn:aRow fromX:leftX toX:rightX collect:aBlock tabable:tabable
+    "add some elements in a vertical column.
+     Equally space elements as returned from aBlock."
+
+    self 
+	addColumn:aRow 
+	fromX:leftX toX:rightX 
+	collect:aBlock 
+	tabable:tabable 
+	horizontalLayout:#fitSpace 
+
+    "
+     |dialog y values|
+
+     values := (1 to:4) collect:[:dummy | '' asValue].
+
+     dialog := Dialog new.
+     y := dialog yPosition.
+     dialog 
+	addColumn:#('one' 'two' 'three' 'four')
+	fromX:0
+	toX:0.3 
+	collect:[:label | Label label:label].
+
+     dialog yPosition:y.
+     dialog 
+	addColumn:values
+	fromX:0.3
+	toX:1.0 
+	collect:[:value | EditField on:value]
+	tabable:true.
+
+     dialog addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[
+	Transcript showCR:(values collect:[:holder | holder value])
+     ]
+    "
+
+    "
+     |dialog y values|
+
+     values := #(true true false false false true false true) collect:[:val | val asValue].
+
+     dialog := Dialog new.
+     y := dialog yPosition.
+     dialog 
+	addColumn:(1 to:4)
+	fromX:0
+	toX:0.5 
+	collect:[:idx | CheckToggle on:(values at:idx)]
+	tabable:true
+	horizontalLayout:#center.
+
+     dialog yPosition:y.
+     dialog 
+	addColumn:(5 to:8) 
+	fromX:0.5 
+	toX:1.0 
+	collect:[:idx | CheckToggle on:(values at:idx)]
+	tabable:true
+	horizontalLayout:#center.
+
+     dialog addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[
+	Transcript showCR:(values collect:[:holder | holder value])
+     ]
+    "
+
+    "Created: 9.2.1996 / 21:51:47 / cg"
+    "Modified: 9.2.1996 / 22:22:02 / cg"
+!
+
+addColumn:aRow fromX:leftX toX:rightX collect:aBlock tabable:tabable horizontalLayout:hLayout
+    "add some elements in a vertical column.
+     Equally space elements as returned from aBlock."
+
+    |helper component|
+
+    helper := VerticalPanelView new.
+
+    aRow do:[:el |
+        component := aBlock value:el.
+        helper add:component.
+        component resize.
+        tabable ifTrue:[self makeTabable:component].
+    ].    
+
+    helper resize.
+    self addComponent:helper.
+    width < helper preferredWidth ifTrue:[
+        self width:helper preferredWidth.
+        "/ Transcript show:'w now: '; showCR:helper preferredExtent x
+    ].
+    helper horizontalLayout:hLayout.
+    helper left:leftX asFloat;
+           right:rightX asFloat;
+           leftInset:leftIndent;
+           rightInset:rightIndent.
+
+    "
+     |dialog y values|
+
+     values := (1 to:4) collect:[:dummy | '' asValue].
+
+     dialog := Dialog new.
+     y := dialog yPosition.
+     dialog 
+        addColumn:#('one' 'two' 'three' 'four')
+        fromX:0
+        toX:0.3 
+        collect:[:label | Label label:label].
+
+     dialog yPosition:y.
+     dialog 
+        addColumn:values
+        fromX:0.3
+        toX:1.0 
+        collect:[:value | EditField on:value]
+        tabable:true.
+
+     dialog addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[
+        Transcript showCR:(values collect:[:holder | holder value])
+     ]
+    "
+
+    "
+     |dialog y values|
+
+     values := #(true true false false false true false true) collect:[:val | val asValue].
+
+     dialog := Dialog new.
+     y := dialog yPosition.
+     dialog 
+        addColumn:(1 to:4)
+        fromX:0
+        toX:0.5 
+        collect:[:idx | CheckToggle on:(values at:idx)].
+
+     dialog yPosition:y.
+     dialog 
+        addColumn:(5 to:8) 
+        fromX:0.5 
+        toX:1.0 
+        collect:[:idx | CheckToggle on:(values at:idx)]
+        tabable:true.
+
+     dialog addOkButton.
+     dialog open.
+
+     dialog accepted ifTrue:[
+        Transcript showCR:(values collect:[:holder | holder value])
+     ]
+    "
+
+    "Modified: 9.2.1996 / 22:02:22 / cg"
+    "Created: 9.2.1996 / 22:20:31 / cg"
+!
+
+addRow:aCol fromX:leftX toX:rightX collect:aBlock
+    "add some elements in a horizontal row.
+     Equally space elements as returned from aBlock.
+     Advance y."
+
+    self 
+	addRow:aCol 
+	fromX:leftX toX:rightX 
+	collect:aBlock 
+	tabable:true 
+	horizontalLayout:#spread 
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+	addRow:#('a' 'b' 'c' 'd')
+	fromX:0
+	toX:1
+	collect:[:label | Label label:label].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+	addRow:#('a1' 'b1' 'c1' 'd1')
+	fromX:0
+	toX:1 
+	collect:[:label | Label label:label].
+
+     dialog 
+	addRow:#('a2' 'b2' 'c2' 'd2')
+	fromX:0
+	toX:0.5 
+	collect:[:label | Label label:label].
+
+     dialog 
+	addRow:#('a3' 'b3' 'c3' 'd3')
+	fromX:0.5
+	toX:1 
+	collect:[:label | Label label:label].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 22:25:16 / cg"
+!
+
+addRow:aCol fromX:leftX toX:rightX collect:aBlock tabable:tabable
+    "add some elements in a horizontal row.
+     Equally space elements as returned from aBlock.
+     Advance y."
+
+    self 
+	addRow:aCol 
+	fromX:leftX toX:rightX 
+	collect:aBlock 
+	tabable:tabable 
+	horizontalLayout:#spread
+
+    "Created: 9.2.1996 / 22:25:35 / cg"
+!
+
+addRow:aCol fromX:leftX toX:rightX collect:aBlock tabable:tabable horizontalLayout:hLayout
+    "add some elements in a horizontal row.
+     Equally space elements as returned from aBlock.
+     Advance y."
+
+    ^ self
+	addRow:aCol 
+	fromX:leftX toX:rightX 
+	collect:aBlock 
+	tabable:tabable 
+	horizontalLayout:hLayout
+	verticalLayout:#fit
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+	addRow:#('a' 'b' 'c' 'd')
+	fromX:0
+	toX:1
+	collect:[:label | Label label:label]
+	tabable:false
+	horizontalLayout:#fit.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+	addRow:#('one' 'two' 'three' 'four')
+	fromX:0
+	toX:1
+	collect:[:label | Button label:label]
+	tabable:false
+	horizontalLayout:#fit.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+	addRow:#('a1' 'b1' 'c1' 'd1')
+	fromX:0
+	toX:1 
+	collect:[:label | Label label:label].
+
+     dialog 
+	addRow:#('a2' 'b2' 'c2' 'd2')
+	fromX:0
+	toX:0.5 
+	collect:[:label | Label label:label].
+
+     dialog 
+	addRow:#('a3' 'b3' 'c3' 'd3')
+	fromX:0.5
+	toX:1 
+	collect:[:label | Label label:label].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Created: 9.2.1996 / 22:24:31 / cg"
+    "Modified: 31.5.1996 / 20:46:00 / cg"
+!
+
+addRow:aCol fromX:leftX toX:rightX collect:aBlock tabable:tabable horizontalLayout:hLayout verticalLayout:vLayout
+    "add some elements in a horizontal row.
+     Equally space elements as returned from aBlock.
+     Advance y."
+
+    |helper component|
+
+    helper := HorizontalPanelView new.
+    helper borderWidth:0.
+
+    aCol do:[:el |
+        component := aBlock value:el.
+        component resize.
+        helper add:component.
+        tabable ifTrue:[self makeTabable:component]
+    ].    
+
+    helper resize.
+    self addComponent:helper.
+
+    width < helper preferredWidth ifTrue:[
+        self width:helper preferredWidth.
+        "/ Transcript show:'w now: '; showCR:helper preferredWidth
+    ].
+    hLayout notNil ifTrue:[
+        helper horizontalLayout:hLayout.
+    ].
+    vLayout notNil ifTrue:[
+        helper verticalLayout:vLayout.
+    ].
+    helper left:leftX asFloat;
+           right:rightX asFloat.
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+        addRow:#('a' 'b' 'c' 'd')
+        fromX:0
+        toX:1
+        collect:[:label | Label label:label]
+        tabable:false
+        horizontalLayout:#fit.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+        addRow:#('one' 'two' 'three' 'four')
+        fromX:0
+        toX:1
+        collect:[:label | Button label:label]
+        tabable:false
+        horizontalLayout:#fit.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog|
+
+     dialog := Dialog new.
+     dialog 
+        addRow:#('a1' 'b1' 'c1' 'd1')
+        fromX:0
+        toX:1 
+        collect:[:label | Label label:label].
+
+     dialog 
+        addRow:#('a2' 'b2' 'c2' 'd2')
+        fromX:0
+        toX:0.5 
+        collect:[:label | Label label:label].
+
+     dialog 
+        addRow:#('a3' 'b3' 'c3' 'd3')
+        fromX:0.5
+        toX:1 
+        collect:[:label | Label label:label].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Created: 31.5.1996 / 20:45:31 / cg"
+    "Modified: 17.7.1996 / 12:06:08 / cg"
+! !
+
+!DialogBox methodsFor:'explicit focus control'!
+
+focusOnOk
+    windowGroup focusView:okButton
+
+    "Modified: 19.4.1996 / 16:57:58 / cg"
+! !
+
+!DialogBox methodsFor:'initialization & release'!
+
+initialize
+    super initialize.
+
+"/    label := 'Dialog'.
+    acceptValue := ValueHolder newBoolean.
+
+    acceptReturnAsOK := true.
+    acceptOnLeave := true.
+    focusToOKOnLeave := DefaultFocusToOKOnLeave.
+    hideOnAccept := true.
+    autoAccept := true.
+
+    buttonPanel := HorizontalPanelView in:self.
+    buttonPanel 
+        origin:(0.0 @ 1.0) corner:(1.0 @ 1.0);
+        bottomInset:ViewSpacing; 
+        topInset:((gc font height + ViewSpacing) * 2) negated;
+        borderWidth:0;
+        horizontalLayout:#spread.
+
+    buttonPanel rightInset:(self device extentOfResizeHandle x).
+    "/ some viewStyles want ok to be the leftMost button.
+    buttonPanel reverseOrderIfOKAtLeft:true.
+
+    yPosition := ViewSpacing.
+    leftIndent := rightIndent := (ViewSpacing // 2).
+    needResize := true.
+
+    "
+     |b|
+     b := DialogBox new.
+     b addAbortButton; 
+       addOkButton; 
+       showAtPointer
+    "
+    "
+     |b|
+     b := DialogBox new.
+     b addOkButton; 
+       showAtPointer
+    "
+    "
+     |b|
+     b := DialogBox new.
+     b addTextLabel:'hello world';
+       addOkButton; 
+       showAtPointer
+    "
+    "
+     |b|
+     b := DialogBox new.
+     b addTextLabel:'hello world';
+       addVerticalSpace:50; 
+       addOkButton; 
+       showAtPointer
+    "
+
+    "Modified: / 23.12.1997 / 10:05:24 / md"
+    "Modified: / 27.7.1998 / 20:16:37 / cg"
+!
+
+reAdjustGeometry
+    "sent late in snapin processing - gives me a chance
+     to resize for changed font dimensions."
+
+    super reAdjustGeometry.
+    okButton notNil ifTrue:[okButton resize].
+    abortButton notNil ifTrue:[abortButton resize].
+    self resize
+! !
+
+!DialogBox methodsFor:'layout control'!
+
+bottomAlign:widgets
+    "mhmh - seems similar to our stickAtBottom functionality - to be checked"
+
+    'DialogBox [warning]: unimplemented VW feature: #bottomAlign' infoPrintCR.
+"/    self halt:'unimplemented VW functionality'.
+
+    "Created: / 4.2.2000 / 00:10:21 / cg"
+    "Modified: / 5.2.2000 / 15:31:23 / cg"
+!
+
+bottomAlignLowerEdge:widget
+    "mhmh - seems similar to our stickAtBottom functionality - to be checked"
+
+    "/ self halt:'unimplemented VW functionality'.
+    self stickAtBottomWithVariableHeight:widget
+
+    "Modified: / 5.2.2000 / 15:31:15 / cg"
+!
+
+leftIndent
+    "return the current indent 
+     (current x position - thats where the next component will be located)."
+
+    ^ leftIndent
+
+    "Modified: 27.1.1996 / 18:21:31 / cg"
+!
+
+leftIndent:aNumber 
+    "set the left indent 
+     (current x position - that's where the next component(s) will be located).
+     Setting this before adding a component will place it indented"
+
+    leftIndent := aNumber.
+    needResize := true.
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'label1') adjust:#left.
+     dialog leftIndent:20.
+     (dialog addTextLabel:'label2') adjust:#left.
+     dialog leftIndent:40.
+     (dialog addTextLabel:'label3') adjust:#left.
+     dialog leftIndent:60.
+     (dialog addTextLabel:'label4') adjust:#left.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 21:42:20 / cg"
+!
+
+rightIndent
+    "return the current right indent."
+
+    ^ rightIndent
+
+    "Modified: 27.1.1996 / 18:21:31 / cg"
+!
+
+rightIndent:aNumber 
+    "set the right indent"
+
+    rightIndent := aNumber.
+    needResize := true.
+
+    "
+     |dialog|
+
+     dialog := DialogBox new.
+     (dialog addTextLabel:'label1') adjust:#right.
+     dialog rightIndent:20.
+     (dialog addTextLabel:'label2') adjust:#right.
+     dialog rightIndent:40.
+     (dialog addTextLabel:'label3') adjust:#right.
+     dialog rightIndent:60.
+     (dialog addTextLabel:'label4') adjust:#right.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 21:42:46 / cg"
+!
+
+setInitialGap
+
+    "Created: / 4.2.2000 / 00:01:44 / cg"
+!
+
+stickAtBottomWithFixHeight:aComponent
+    "arrange for a component to be positioned at a constant offset
+     from the bottom of the box and its height to remain the same.
+     This will keep the component at a constant distance from the bottom
+     (without this setup, it would stay at a constant offset from the top).
+     ATTENTION: use this as a last step, after all components have been added."
+
+    self stickAtBottomWithFixHeight:aComponent left:0.0 right:1.0
+
+    "
+     compare the resizing behavior of:
+
+        |box|
+
+        box := Dialog new.
+        box addTextLabel:'hello'.
+        box addTextLabel:'hello2'.
+        box addOkButton.
+        box show
+
+     with:
+
+        |box l2|
+
+        box := Dialog new.
+        box addTextLabel:'hello'.
+        l2 := box addTextLabel:'hello2'.
+        box addOkButton.
+        box stickAtBottomWithFixHeight:l2.
+        box show
+   "
+
+    "Created: / 27.1.1996 / 17:17:41 / cg"
+    "Modified: / 18.8.2000 / 21:38:21 / cg"
+!
+
+stickAtBottomWithFixHeight:aComponent left:left right:right
+    "arrange for a component to be positioned at a constant offset
+     from the bottom of the box and its height to remain the same.
+     This will keep the component at a constant distance from the bottom
+     (without this setup, it would stay at a constant offset from the top).
+     ATTENTION: use this as a last step, after all components have been added."
+
+    self resize.
+
+    aComponent
+        topInset:(self height - aComponent top) negated;
+        bottomInset:(self height - aComponent bottom); 
+        origin:left @ 1.0; corner:right @ 1.0.
+
+    "
+     compare the resizing behavior of:
+
+        |box|
+
+        box := Dialog new.
+        box addTextLabel:'hello'.
+        box addTextLabel:'hello2'.
+        box addOkButton.
+        box show
+
+     with:
+
+        |box l2|
+
+        box := Dialog new.
+        box addTextLabel:'hello'.
+        l2 := box addTextLabel:'hello2'.
+        box addOkButton.
+        box stickAtBottomWithFixHeight:l2.
+        box show
+   "
+
+    "Created: / 27.1.1996 / 17:17:41 / cg"
+    "Modified: / 18.8.2000 / 21:38:26 / cg"
+!
+
+stickAtBottomWithVariableHeight:aComponent
+    "arrange for a component to be positioned at a constant offset
+     from the bottom of the box and its height to be adjusted.
+     This will resize the component for a constant distance from the top,
+     and the bottom.
+     (without this setup, its height would remain constant).
+     ATTENTION: use this as a last step, after all components have been added."
+
+    self resize.
+
+    aComponent
+        bottomInset:(self height - aComponent bottom); 
+        corner:1.0@1.0.
+
+    "
+     compare the resizing behavior of:
+
+        |box|
+
+        box := Dialog new.
+        box addTextLabel:'hello'.
+        (box addComponent:(SelectionInListView new)) level:-1.
+        box addOkButton.
+        box show
+
+     with:
+
+        |box list|
+
+        box := Dialog new.
+        box addTextLabel:'hello'.
+        list := (box addComponent:(SelectionInListView new)) level:-1.
+        box addOkButton.
+        box stickAtBottomWithVariableHeight:list.
+        box show
+   "
+
+    "Modified: / 18.8.2000 / 21:38:35 / cg"
+!
+
+yPosition 
+    "return the current y position (thats where the next component
+     will be located)."
+
+    ^ yPosition 
+!
+
+yPosition:aNumber 
+    "set the current y position (thats where the next component
+     will be located)."
+
+    yPosition := aNumber.
+    needResize := true.
+
+    "
+     |dialog pos|
+
+     dialog := DialogBox new.
+     pos := dialog yPosition.
+     (dialog addTextLabel:'label1') width:0.5.
+     dialog yPosition:pos.
+     (dialog addTextLabel:'label2') width:0.5; left:0.5.
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "
+     |dialog pos|
+
+     dialog := DialogBox new.
+     pos := dialog yPosition.
+     #('one' 'two' 'three' 'four') 
+     with:#(0.0 0.25 0.5 0.75) do:[:lbl :x |
+	 dialog yPosition:pos.
+	(dialog addComponent:(Button label:lbl) tabable:true)
+		width:0.25; left:x.
+     ].
+
+     dialog addOkButton.
+     dialog open.
+    "
+
+    "Modified: 9.2.1996 / 21:46:40 / cg"
+! !
+
+!DialogBox methodsFor:'private'!
+
+basicAddComponent:aComponent 
+    "add a component, dont change its size"
+
+    addedComponents isNil ifTrue:[
+        addedComponents := OrderedCollection new.
+    ].
+    addedComponents add:aComponent.
+    self addSubView:aComponent.
+
+    needResize := true.
+    "/ must flush any cached preferredExtent, when a component is added (for example, in an aboutToOpen callBack)
+    preferredExtent := nil.
+!
+
+hideAndEvaluate:aBlock
+    "if I am modal, make myself invisible and evaluate aBlock.
+     If nonModal, stay up, but also evaluate the block."
+
+    (windowGroup notNil and:[windowGroup isModal]) ifTrue:[
+        self hide.
+    ].
+    aBlock notNil ifTrue:[
+        aBlock numArgs == 0 ifTrue:[
+            aBlock value
+        ] ifFalse:[
+            aBlock value:(self actionArgument)
+        ]
+    ].
+
+    (windowGroup isNil or:[windowGroup isModal not]) ifTrue:[
+        self destroy.
+    ].
+
+    "Modified: 5.9.1995 / 19:06:33 / claus"
+!
+
+preOpen
+
+    "Created: / 4.2.2000 / 00:10:48 / cg"
+!
+
+realize
+    "if any inputFields where added, activate the first one"
+
+    verticalPanel notNil ifTrue:[
+        verticalPanel extent:verticalPanel preferredExtent.
+        preferredExtent := nil.
+        self extent:(self preferredExtent).
+    ].
+
+    super realize.
+
+    buttonPanel notNil ifTrue:[
+        buttonPanel raise.
+        buttonPanel subViews do:[:eachButton |
+            eachButton canTab:true.
+        ]
+    ].    
+
+    inputFieldGroup notNil ifTrue:[
+        inputFieldGroup activateFirstIfNoCurrent
+    ].
+
+    "Modified: / 28-02-2012 / 15:54:10 / cg"
+!
+
+resize
+    needResize ifTrue:[
+"/        verticalPanel notNil ifTrue:[
+"/            verticalPanel extent:verticalPanel preferredExtent.
+"/            preferredExtent := nil.
+"/            self extent:(self preferredExtent).
+"/        ].
+        needResize := false.
+        super resize
+    ]
+
+    "Created: 27.1.1996 / 17:22:33 / cg"
+    "Modified: 27.1.1996 / 18:25:40 / cg"
+! !
+
+!DialogBox methodsFor:'queries'!
+
+accepted
+    "after the box has closed:
+	 return true if accepted, false if canceled"
+
+    ^ acceptValue value
+!
+
+interfaceSpecFor:aSelector
+    "return an interface spec.
+     Notice - Dialog should be moved under AppModel so this becomes obsolete."
+
+    ^ UISpecification from:(self specificationFor:aSelector)
+!
+
+maxPreferredWidthOfAddedComponents
+    "helper for computing my preferred extent.
+     That is the max component width"
+
+    ^ (addedComponents ? #())
+        inject:0 
+        into:[:max :element |
+                |eExt prefWidth scale rel relX|
+
+                prefWidth := element preferredWidth.
+
+                "/ special (for your convenience)
+                "/ if the element has been added with a relative width,
+                "/ scale it to get at least its preferred width
+
+                (rel := element relativeExtent) notNil ifTrue:[
+                    relX := rel x.
+                    (relX isNil or:[relX isInteger]) ifFalse:[
+                        prefWidth := (prefWidth * (1 / relX)) rounded
+                    ].
+                ].
+                eExt := prefWidth + (element borderWidth * 2). "/ max:element extent x.
+                max max:(eExt + element leftInset + element rightInset)].
+!
+
+positionOffset
+    "return the delta, by which the box should be displayed
+     from the mouse pointer. Here, an offset is returned, which
+     makes the center of the first return-Button in the panel
+     appear under the cursor. If there is no such button,
+     use my superclasses offset."
+
+    |idx butt buttons|
+
+    buttonPanel notNil ifTrue:[
+        buttons := buttonPanel subViews.
+        buttons size > 0 ifTrue:[
+            idx := buttons findFirst:[:b | b isDefault].
+            idx ~~ 0 ifTrue:[
+                butt := buttons at:idx.
+
+                "get our size (preferredExtent) and compute
+                 origin and extent of buttonPanel and okButton.
+                 This is normally done on view realization."
+
+                needResize ifTrue:[ self resize ].
+                buttonPanel 
+                    pixelOrigin:buttonPanel computeOrigin
+                    extent:buttonPanel computeExtent.
+                buttonPanel setChildPositionsIfChanged.
+                ^ (butt originRelativeTo:self) + (butt extent // 2).
+            ]
+        ]
+    ].
+
+    ^ super positionOffset
+
+    "Modified: 3.1.1997 / 10:41:58 / stefan"
+    "Modified: 16.1.1997 / 22:00:23 / cg"
+!
+
+preferredExtent 
+    "return my preferred extent.
+     That is the max component width, or my current width (default);
+     whichever is larger, by the sum of the component's heights."
+
+    |w h p|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    h := yPosition + ViewSpacing.
+    verticalPanel notNil ifTrue:[
+        "/ because the vertical panels size was not known until now,
+        "/ it was not counted in the y-position yet.
+        "/ do this now.
+        verticalPanel extent:(verticalPanel computePreferredExtent).
+        h := h + verticalPanel height.
+    ].
+
+    addedComponents notNil ifTrue:[
+        w := self maxPreferredWidthOfAddedComponents.
+    ] ifFalse:[
+        w := super preferredExtent x.
+    ].
+    w := w max:width.
+
+    subViews size ~~ 0 ifTrue:[
+        p := buttonPanel preferredExtent.
+        w := w max:p x.
+        h := h
+             + p y
+             + ViewSpacing.
+    ].
+
+"/    okButton isNil ifTrue:[
+"/        ^ super preferredExtent
+"/    ].
+"/    p := buttonPanel preferredExtent.
+"/    w := p x.
+"/    h := ViewSpacing
+"/         + p y
+"/         + ViewSpacing.
+"/
+    ^ w @ h
+
+    "Modified: 19.7.1996 / 20:43:52 / cg"
+!
+
+specificationFor:aKey
+    "return an interface specs literal encoding.
+     Notice - Dialog should be moved under AppModel so this becomes obsolete."
+
+    ^ ApplicationModel
+        specificationFor:aKey 
+        application:self
+        onDevice:(self graphicsDevice)
+! !
+
+!DialogBox methodsFor:'user actions'!
+
+abortPressed
+    "sent by the cancel button; user pressed abort button
+     - hide myself and evaluate okAction"
+
+    abortButton turnOffWithoutRedraw.
+    acceptValue value:false.
+
+    "/ actually, only hides if I have been opened modal
+    self hideAndEvaluate:abortAction
+!
+
+actionArgument
+    ^ nil
+!
+
+closeCancel
+    "closed via escape"
+
+    acceptValue value:false.
+
+    "/ actually, only hides if I have been opened modal
+    self hideAndEvaluate:abortAction
+!
+
+doAccept
+    "let all components accept (i.e. update their model from the values),
+     then set my accept value to true.
+     This is confusing: this method was originally called #accept,
+     but renamed for compatibility with ST-80, where #accept returns the
+     accept-valueHolder (which looks like a bad name to me ...)."
+
+    autoAccept ifTrue:[    
+	addedComponents notNil ifTrue:[
+	    addedComponents do:[:aComponent |
+		(aComponent respondsTo:#accept) ifTrue:[
+		    aComponent accept
+		]
+	    ]
+	].
+    ].
+    acceptValue value:true.
+
+    "Modified: 4.3.1996 / 12:14:56 / cg"
+!
+
+keyPress:aKey x:x y:y
+    "return-key duplicates ok-function if acceptReturnAsOK is true"
+
+    <resource: #keyboard (#Return #Escape)>
+
+    |b|
+
+    "/ oops - for old-style DialogBoxes (wo. AppModel), the keyboardProcessor has
+    "/ no one to inform about RETURN/ESCAPE. So the procesing here is still needed.
+
+    (aKey == #Return) ifTrue:[
+        (okButton notNil and:[okButton isReturnButton]) ifTrue:[
+            ^ self okPressed
+        ].
+        (abortButton notNil and:[abortButton isReturnButton]) ifTrue:[
+            ^ self abortPressed
+        ].
+        (buttonPanel notNil and:[(b := buttonPanel subViews detect:[:b | b isReturnButton] ifNone:nil) notNil]) ifTrue:[
+            b turnOnWithAction. b turnOffWithAction.
+            ^ self.
+        ]
+    ].
+
+    (aKey == #Escape) ifTrue:[
+        (abortButton notNil) ifTrue:[
+            ^ self abortPressed
+        ].
+    ].
+
+    super keyPress:aKey x:x y:y
+
+    "Modified: 7.3.1996 / 13:15:09 / cg"
+!
+
+lastFieldLeft
+    "if the dialog involves input fields, this is called
+     when the last field is left by Return-key or NextField-key"
+
+    acceptOnLeave ifTrue:[
+	acceptReturnAsOK ifTrue:[
+	    focusToOKOnLeave ifTrue:[
+		self focusOnOk.
+		^ self.
+	    ].
+	    self okPressed
+	]
+    ].
+    inputFieldGroup activateFirst
+
+    "Modified: 19.4.1996 / 17:09:02 / cg"
+!
+
+okPressed
+    "sent by the okButton; user pressed ok-button
+     - make myself invisible and if an action was specified do it"
+
+    okButton notNil ifTrue:[okButton turnOffWithoutRedraw].
+
+    self doAccept.
+
+    acceptCheck notNil ifTrue:[
+	acceptCheck value ifFalse:[^ self]
+    ].
+
+    hideOnAccept ifTrue:[
+	"/ actually, only hides if I have been opened modal
+	self hideAndEvaluate:okAction.
+    ] ifFalse:[
+	okAction value
+    ]
+!
+
+openDialog
+    self showAtPointer.
+    ^ self accepted
+! !
+
+!DialogBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/DialogBox.st,v 1.354 2014-05-06 19:44:25 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/DialogBox.st,v 1.354 2014-05-06 19:44:25 cg Exp $'
+! !
+
+
+DialogBox initialize!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DialogConfirmationRequest.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,38 @@
+"{ Package: 'stx:libwidg' }"
+
+Query subclass:#DialogConfirmationRequest
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Kernel-Exceptions-Control'
+!
+
+!DialogConfirmationRequest class methodsFor:'documentation'!
+
+documentation
+"
+    intended to allow confirmation dialogs to be automatically answered,
+    for example for self tests.
+
+    [author:]
+        cg
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!DialogConfirmationRequest class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/DialogConfirmationRequest.st,v 1.1 2013-07-28 22:20:45 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/DialogConfirmationRequest.st,v 1.1 2013-07-28 22:20:45 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EWorldIconLibrary.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,254 @@
+"
+ COPYRIGHT (c) 2005 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+"{ Package: 'stx:libwidg' }"
+
+XPToolbarIconLibrary subclass:#EWorldIconLibrary
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Smalltalk'
+!
+
+!EWorldIconLibrary class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2005 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+     Unfinished - Under construction.
+
+     ToolbarIconLibrary := EWorldIconLibrary
+"
+! !
+
+!EWorldIconLibrary class methodsFor:'image specs'!
+
+editor32x32Icon
+    "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 editor32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#editor32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'EWorldIconLibrary class editor32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@1HREAPR@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LRD!!8EC1PC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@1HRD!!XV
+C0TEE0LC@0LC@0LC@0LC@0LC@1HRD!!HRD!!PTB0,RFP0^AP<T@0LC@1HRD!!HRD!!HRD!!PTE@,VE!!$LC@@PBA4VGA$VEAHC@0LCEA\VE  HF@PLC@0@@A0PDA@P
+GAXNEQTVAA$R@0LC@0LTC@@@@@@@@@@@@@@@GA0\D@@VBQTUA!!TRD!!HC@0LC@1HL@@@@@@@@@@@@GA0\GA@@B0$FEQTIF1HC@0LC@0LCD!! @@@@@@@@@GA0\
+GA0PGAXBA XUC!!XVD LC@0LC@0LRB@@@@@@@GA0\GA0PDA@LA1DAEQXXDPPR@0LC@0LC@1HV@@@@GA0\GA0PDA@PB!!XYDQ(VCADQCAHC@0LC@0LCD ,\GA0\
+GA0PDA@PD@(GD!!PYC@(QDQDGD LC@0LC@0LRE@@\GA0PDA@PDA@PCQ(DB 4QDQDQDQ0R@0LC@0LC@0LT@A@PDA@PDA@PB (JCQDQDQDQDQDQDQPC@0LC@0LC
+@1HZDA@PDA@PB (QDP4QDQDQDQDQDQDQEAHC@0LC@0LCD 0PDA@PB (QDP4QDQDQDQDQDQDQDQDVD LC@0LC@0LRA@4PB (QDP4QDQDQDQDQDQDQDQDQDQ$R
+@0LC@0LC@1HYCP(QDQDQDQDQDQDQDQDQDQDQDQDQCAHC@0LC@0LCD!!XQDP4QDQDQDQDQDQDQDQDQDQDQDQDGD LC@0LC@0LRE!!DQDQDQDQDQDQDQDQDQDQDQ
+DQDQDP(R@0LC@0LC@1HKDQDQDQDQDQDQDQDQDQDQDQDJB (QDQPC@0LC@0LC@1PQDQDQDQDQDQDQDQDQDQDVE!!$YBA$YEAHC@0LC@0LCE@(QDQDQDQDQDQDQ
+DQDQDP0HDA@PDA@TD LC@0LC@0LRGADQDQDQDQDQDQDQDQDQDQXPDA@PCAPC@0LC@0LC@1H\DQDQDQDQDQDQDQDQDQDQF  PDA@VD LC@0LC@0LCD \QDQDQ
+DQDQDQDQDQDQDQDQE!!@PCAHC@0LC@0LC@0LRCADQDQDQDQDQDQDQDQDQDQDVDA@TD LC@0LC@0LC@1HDDQDQDQDQDQDQDQDQDQDQDQ$SEAHC@0LC@0LC@0LC
+D!!$QDQDQDQDQDQDQDQDQDQDQE!!PR@0LC@0LC@0LC@0LRE!!DQDQDQDQDQDQDQDP(\F 0TD LC@0LC@0LC@0LC@1HKDQDQDQ0ZCA$VE!!PTEAHRD!!HC@0LC@0LC
+@0LC@0LC@1PVB1PTD!!HRD!!HR@0LC@0LC@0LC@0LC@0LC@0@a') ; colorMapFromArray:#[212 159 170 255 255 170 212 191 85 202 226 255 132 132 132 255 95 85 255 255 85 188 187 187 85 95 170 212 159 85 221 221 221 68 68 68 168 159 167 255 204 255 170 159 85 212 95 85 204 204 255 255 253 247 0 0 0 170 159 255 34 34 34 255 191 85 85 90 85 85 63 85 170 95 170 118 118 117 170 170 170 42 63 0 207 204 196 170 95 85 170 63 85]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@_@@@@O0@@@_<@@_??C????0????8O???>C???>@???? O???8C???>@???? O???8A???>@_???0G???<A????@_???0G???<A????@_???0C???>@??
+?? O???0C???<@???>@O??? C???0@???8@O??<@C??>@@_?@@@b') ; yourself); yourself]
+!
+
+imageEditor32x32Icon2
+    "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 imageEditor32x32Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor32x32Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'EWorldIconLibrary class imageEditor32x32Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@NS$9NS$9NS$9NS$9@  B@#$@@@@@@@@@@@@@@@@@@@@9NS$9NS$9NS$9@ H G3 BNP@@@@@@@@@@@@@@@@@@@C$9NS$9NS$@@ HO
+AR$_G2@9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EB@(JKQ<)BC$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(.IP8EH@ BNP@@@@@@@@@@@@@@@@@@@@@@@@@G
+C ,IMA(#BPXI@#$9@@@@@@@@@@@@@@LGC 4FB $EFA0XBBLZF"<#B@HBNS$@@@@@@@4IBPTXFA ]GR,''D1LLD0<(IA(ZJBXBNS$9NP@@@@@@AS@3KALSD00L
+C@0LC@0EMRP$F#DH@#$9NS$9@@@@@@@FJ1LSD00LC@0LC@0YF0,AL!!(%CP@@NS$9NS$@@@@@@@,]CALSH!!0\C@0LDA$XB \FDPX@@@@@@C$9NP@@@@@@A14L
+CA J@0,EDA$YM HTBP4[A @@@@@@NS$9@@@@@@@@G@0"B DA@PX"FQ$KA!!$A@P8J@@@@@@@9NS$@@@@@@@@JI0TA@PDA@P<P@PDA@PDA@0$@@@@@@C$9NP@@
+@@@@@@XXA DA@PDACP(A@PDACP$IAP@@@@@@NS$9@@@@@@@@B0 NA ,AB XAC0LA@P(!!EQ8V@@@@@@@9NS$@@@@@@@@GB@<QCP8OAP$TCPDKHPPDAAX@@@@@
+@C$9NP@@@@@@@@@QF0XEAP,NB04I@1XUA@PDE \@@@@@NS$9@@@@@@@@@@T7C $MA0\G@0(ED PDA@PRC @@@@@9NS$@@@@@@@@@BP,GDA@C@0LAC"XUA@PD
+AAHK@@@@@C$9NP@@@@@@@@@JCP\C@04JA 8JD PDA@PDJ 4@@@@@NS$9@@@@@@@@@@XF@PLIE!!HRD!!HDA@PDEQT^BP@@@@@9NS$@@@@@@@@@CP(ABQ8DA@PD
+A@PDA@PRD TE@@@@@C$9NP@@@@@@@@@NBP4RA@PDA@PUEQTRD!!HRC0,@@@@@NS$9@@@@@@@@@@@TE!!T*G!!XVE"TEBPXMB0,@@@@@@@@9NS$@@@@@@@@@@@<T
+DPTJA ,G@@@@@@@@@@@@@@@@NS$9NP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C$9NS$9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9NS$9NS$9
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C$9NS$9NS$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@NS$9NS$9NP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9
+NS$9NS$9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C$9NP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 17 17 17 238 238 238 102 255 51 102 102 102 153 153 153 221 221 221 34 34 34 119 119 119 136 136 136 187 187 187 153 204 255 170 170 170 204 204 204 85 85 85 204 204 255 68 68 68 51 153 51 102 204 255 51 51 51 102 204 51 51 102 51 255 204 255 51 102 102 204 255 255 255 204 51 153 153 204 102 102 153 51 102 153 51 153 0 255 102 102 102 51 51 51 102 0 102 153 153 204 153 51 255 255 102 102 102 51 51 51 0 102 153 204 204 204 51 204 102 102 102 153 51 51 153 204 51 204 255 153 51 51 153 102 0 255 255 51 0 153 204 153 102 51 255 255 153 51 153 255 153 153 51 204 204 102 153 204 204 204 153 204 153 102 102 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@G @@@G8@@@G>@@@A? @@@_8@@A?<@C???@_???@G??? A??? @_??0@G??<@@???@@O??0@C??<@@???@@O??0@A??>@@_?? @G??8@A??>@@_?? @G?
+?8@A??>@@O?>@@C?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+! !
+
+!EWorldIconLibrary class methodsFor:'image specs-32x32'!
+
+fileBrowser32x32Icon
+    "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 fileBrowser32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'EWorldIconLibrary class fileBrowser32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+HRD!!HRD!!HRD!!HRD!!HRD!!HPHB@"DB@"D!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HPHB@ \Q@ T[C H!!HRD!!HRD!!HRD!!HRD!!HRD!!HRDBHPHB@ 8BA00RAQ4SGPHB
+HRD!!HRD!!HRDB@ H!!HRDBHPHB@ TEB@(ECA$LD@\ID0\B@"D!!HRD!!HPHEDP8B@ HBC!!DNB@LMCPXID!!$QB!!POF1LE@ H!!HRD!!@!!@LCADEA04ED 0PCPLFA0(O
+DQHO@PLABQLSC HBHRDBD@0LCA\ED1TSDP0RBP<PD@<JBQ PC0,CA $_A0H!!HPHPC@0LE0<ABQLUBQDWDR@LD $F@P$PC0DKA0 OARDB@!!@LC@0WBP,CB $M
+D0<RC@0YDP\FAADRC \OA PGHPTHAQ0LC@0\B@(C@04HEP$PC@0QA 4IAP J@PPA@P\!!A0LABQ@RC@0VG!!@MB1POD1THCADGB@$FA@PAA@PAARDGB0LC@P$Z
+E 0LE!! P@PLIEP GA0<AA@DA@PPJB DEHP\KC0DC@0DHF!!XLCAHO@0 EBP(AA@DA@PPFA0HI@PT!!A1PNA0<D@0,JDA VG TIC0XD@PDAA@PJA08ECPDAC"DG
+B0TJA@$ME@LKCPTHB DD@PDAA@DJB@8GCPDD@PDNHP\KAP(C@0XIB!!PCB@XD@PDDA@XOAPTIA PD@PDAA 8!!A0,GB LC@0LIAP,IA DD@P(H@ 8O@PPA@PDA
+@PDF@"DGB0\M@0LC@0(EB0$F@P4E@ TM@PPA@PDA@PPA@P(BHP\KA $J@0LCB TKB@XAAPTM@PPA@PDA@PPACP AB H!!A0,CB04IA@LJA0,IA DF@PPA@PDA
+@PPAC0TNBPPJ@"DEB0LC@0PIB 4GB0 F@PDA@PDAA@PFBPTEC0XDA@4BHPTK@0LC@0LJAP KB@XA@PDAA@DJB@TGCPDD@PDDCPH!!A0LC@0LC@0LTE@,HA DA
+A@XOAP8HA PD@PDA@PPM@"DN@PLC@0LC@0LCB0 F@P(HC 8OA PA@PDA@PPAB \BHPHNCP,C@0LC@0LKB@XDB@8O@PPA@PDA@PPACP\B@"D!!HRDBA1PC@0LC
+@0,HA DF@PPA@PDA@PPFC0TB@"D!!HRD!!HRDBC 4C@0LCB0 F@PDA@PDAA@PJB@8B@"D!!HRD!!HRD!!HRDB@  T@0LKB@XA@PDAA@DJB@HB@"D!!HRD!!HRD!!HRD!!
+HRD!!@ 8A@0,HA DAA@DMAPHBHRD!!HRD!!HRD!!HRD!!HRD!!HRD!!@ HMB0 AA@XOAPHBHRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HPHIB@(IC HBHRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HPHBC HBHRD!!HRD!!HRD!!HRD!!HRD!!HP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 187 187 187 17 17 17 255 255 255 204 204 204 51 51 51 170 170 170 68 68 68 85 85 85 102 102 102 153 153 153 238 238 238 255 255 153 136 136 136 34 34 34 119 119 119 102 102 51 153 153 102 204 204 102 102 102 153 221 221 221 153 153 204 255 204 102 255 255 102 153 153 51 255 255 204 153 102 51 51 102 102 204 153 102 51 51 102 204 153 51 153 204 255 204 204 153 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@C,@@@C?0@@K??@NK??<C????0?????O????3????=?????_????7????=?????_????7????=?????_????7????=?????_????7????=?????_????7??
+??=?????_????!!???? O??? A??? @G??@@@??@@@C?@@@@_@@@b') ; yourself); yourself]
+!
+
+fileSave32x32Icon
+    "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 fileSave32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileSave32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'EWorldIconLibrary class fileSave32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+E1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\GA0\GA0\GBP$IBP$IBP$IBP$IA0$P
+D@$GE1\WE1\WA1@VEALMC (JA@HB@ HEAPTA@PDODQDQD \WE1\WA0$KA!!TH@ HB@ HEAPTE@PDA@PDA@P4QEAPRBQ\WE1\ID XFEP,D@ HB@ TEAPDA@PDA
+@PDAB!!DHB0XPA1\WE1@FA XFB0PBA@PDA@PDA@PDB (D@PDDB@XFA!!PGE1\WD@XFA XKA@PMCP4MCP8NC (JB PA@PTKA XCB0\WE1\PA XFA ,D@ HBAPTE
+@PDA@PDA@PDA@P FA LHA1\WE1@FA XFB0PBAPTE@PDA@PDA@PDA@PDAB@XC@0 GE1\WD@XFA XKA@HB@ HB@ PDA@(JC (A@PDHA LCDP\WE1\PA XFA ,D
+AP8MCP8NC (JB PBAPDA@P<R@0LRA1\WE1@FA LCB@(EAPTE@PDA@PDA@PDA@PDAD1HC@1HGE1\WD@XC@0LHB DA@PDA@PDA@PDA@PTBA@8KCPLCCP\WE1\P
+A LC@1DOB (JB 8MCQLOB@ HB@ QDQLC@0LFA1\WE1@C@0LCA!!DHDQDQC1HRCPXF@0LC@0LC@0LC@0XGE1\WBPXC@0LCC@LCA XFCQHRDQDQB@ HB@ K@0LC
+A $WE1\IA LC@0XHB0,KB0 OC1LMC 8D@ TEAP F@0LCBQ\WE0$C@0LCC0 JB PD@ HEAPTEAPPNC PAC04DA@LIE1\WBPLC@0POD0PDA@PB@ HB@ TJE@<H
+D0DSD 0D@1@WE1\I@0LCC@<SA@PD@ HB@ HEAP(HA@8O@P4OC@PJDA\WE0$CA@LLD!!LBA@PB@ HB@ TEA@ DC <ACQDLA@PTE1\WBPLDA@0RC0HD@ HB@ HE
+APTBB0(NC0DNC00DAAPWE1\I@0PDCAHO@ HB@ HBAPTEAPHKB 8H@P(HC@PLEA\WE0$CA@PLD0<B@ HB@ HEAPTEAP JB  AA@ LC@0KE1\WBPXLA@0MC0HB
+@ HBAPTEAPDEB@(JB0DBB@0LC@,WE1\GA 0DC@4H@ HB@ HEAPTE@PDHB0,K@PTHC@0LB1\WE0\FC@0LA  E@ TEAPDA@PDA@PHD@ TA@ ,MD0 IE1\WA04L
+A@PFB0(NC 4MCQLSC0 HB0,TD@$IA0\GA0\WE1\GDAPPBP$GA0\GA0\GA0\GA0\GA0\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\W
+E1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 221 221 221 204 153 204 204 204 204 238 238 238 153 153 204 17 17 17 102 102 102 34 34 34 187 187 187 85 85 85 204 204 255 153 153 153 170 170 170 119 119 119 51 51 51 102 102 153 153 102 153 136 136 136 68 68 68 153 102 204 51 51 102 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@O???8G???>G????!!????<_????G????1????<_????G????1????<_????G????1????<_????G????1????<_????G????1????<_????G??
+??1????<_????G????1????<_????G????1???0@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+imageEditor32x32Icon
+    "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 imageEditor32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'EWorldIconLibrary class imageEditor32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$9NS$9NS$9NS$9NS$9NS$9NS$9NS$9NS$9@  B@#$9NS$9NS$9NS$9NS$9NS$9NS$9NS$9NS$9@ H G3 BNS$9NS$9NS$9NS$9NS$9NS$9NS$9NS$B@ HO
+AR$_G2@9NS$9NS$9NS$9NS$9@ HB@ HB@ HHBADEB@(JKQ<)BC$9NPHB@ HB@ HBBAPQC0TJA 4KA0LA@P(.IP8EH@ BNS$9B@TJA 4KC \C@PDA@PDA@PDG
+C ,IMA(#BPXI@#$9NS$T@PDA@PDA@PLGC 4FB $EFA0XBBLZF"<#B@HBNS$9NP G@P4IBPTXFA ]GR,''D1LLD0<(IA(ZJBXBNS$9NS$9@ ,AAS@3KALSD00L
+C@0LC@0EMRP$F#DH@#$9NS$9NS$BA DFJ1LSD00LC@0LC@0YF0,AL!!(%CPTBNS$9NS$9NPHI@P,]CALSH!!0\C@0LDA$XB \FDPXAB H9NS$9NS$9@ <AA14L
+CA J@0,EDA$YM HTBP4[A DF@#$9NS$9NS$BE@DAG@0"B DA@PX"FQ$KA!!$A@P8J@P,BNS$9NS$9NS$H@0DJI0TA@PDA@P<P@PDA@PDA@0$AC H9NS$9NS$9
+NPHN@PXXA DA@PDACP(A@PDACP$IAPDCBC$9NS$9NS$9@ ,AB0 NA ,AB XAC0LA@P(!!EQ8V@PDTNS$9NS$9NS$BA DGB@<QCP8OAP$TCPDKHPPDAAXA@P<B
+NS$9NS$9NPHI@PLQF0XEAP,NB04I@1XUA@PDE \ABPH9NS$9NS$9@!!DA@PT7C $MA0\G@0(ED PDA@PRC DF@#$9NS$9NS$9B@DABP,GDA@C@0LAC"XUA@PD
+AAHK@P,BNS$9NS$9NS$BA0DJCP\C@04JA 8JD PDA@PDJ 4AA0H9NS$9NS$9NPHK@PXF@PLIE!!HRD!!HDA@PDEQT^BPLGBC$9NS$9NS$9@ XACP(ABQ8DA@PD
+A@PDA@PRDPTEAPTH@#$9NS$9NS$BBPDNBP4RA@PDA@PUEQTRD"DODA@PF0H9NS$9NS$9NPHO@P\TE!!T*G!!XVE"TEBPXMB0TPDA@O@#$9NS$9NS$9@!!PC@0<T
+DPTJA ,G@PDA@PDACP(CF0H9NS$9NS$9NS$9B@8C@0\C@0DA@PDA@PDA@PDNGA,H@#$9NS$9NS$9NS$BB1\CE1\C@0LC@0LA@PDA@P\QB@H9NS$9NS$9NS$9
+NPHFE0\G@0LCE0LC@PDA@PLCCPHBNS$9NS$9NS$9NS$9@ (WA0\GE0LC@0\KA $ODP B@#$9NS$9NS$9NS$9NS$BAQ\PD@8MB TQB@HB@ HBNS$9NS$9NS$9
+NS$9NS$9NPHTC1DTB@HB@ H9NS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 17 17 17 238 238 238 102 255 51 102 102 102 153 153 153 221 221 221 34 34 34 119 119 119 136 136 136 187 187 187 153 204 255 170 170 170 204 204 204 85 85 85 204 204 255 68 68 68 51 153 51 102 204 255 51 51 51 102 204 51 51 102 51 255 204 255 51 102 102 204 255 255 255 204 51 153 153 204 102 102 153 51 102 153 51 153 0 255 102 102 102 51 51 51 102 0 102 153 153 204 153 51 255 255 102 102 102 51 51 51 0 102 153 204 204 204 51 204 102 102 102 153 51 51 153 204 51 204 255 153 51 51 153 102 0 255 255 51 0 153 204 153 102 51 255 255 153 51 153 255 153 153 51 204 204 102 153 204 204 204 153 204 153 102 102 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@G @@@G8@@@O>@@???#????8????<O????C????@???? O???8C???>@???? O???8A???>@_??? G???8A????@_???0G???<@????@O???0C???<@??
+?? O???0C???<@???>@G??? A???0@_??8@G??<@A??8@@_>@@@b') ; yourself); yourself]
+! !
+
+!EWorldIconLibrary class methodsFor:'image specs-tools-Launcher'!
+
+saveImageIcon
+    <resource: #programImage>
+
+    ^ self fileSave32x32Icon
+!
+
+startFileBrowserIcon
+    <resource: #programImage>
+
+    ^ self fileBrowser32x32Icon
+!
+
+startImageEditorIcon
+    <resource: #programImage>
+
+    ^ self imageEditor32x32Icon2
+!
+
+startNewFileBrowserIcon
+    <resource: #programImage>
+
+    ^ self fileBrowser32x32Icon
+! !
+
+!EWorldIconLibrary class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/EWorldIconLibrary.st,v 1.3 2009-11-16 16:09:31 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EditField.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,2374 @@
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+EditTextView subclass:#EditField
+	instanceVariableNames:'leaveAction enabled clickAction crAction tabAction converter
+		leaveKeys immediateAccept acceptOnLeave acceptOnReturn
+		lengthLimit entryCompletionBlock entryCompletionCharacter
+		passwordCharacter autoScrollHorizontally acceptOnTab
+		acceptOnLostFocus acceptOnPointerLeave acceptIfUnchanged leaveKey
+		doubleClickAction emptyFieldReplacementText leaveKeyActions'
+	classVariableNames:'DefaultForegroundColor DefaultBackgroundColor
+		DefaultSelectionForegroundColor DefaultSelectionBackgroundColor
+		DefaultBorderColor DefaultBorderWidth DefaultLevel'
+	poolDictionaries:''
+	category:'Views-Text'
+!
+
+!EditField class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    an editable text-field. Realized by using an EditTextView,
+    and forcing its size to 1 line - disabling cursor movement
+    in the vertical direction.
+
+    Basically, an editField is an editor for a single line text,
+    and provides the usual access protocol as defined in its superClasses
+    (especially: #contents / #contents:).
+
+    The above underlying internal mechanism can be used for fields which
+    are passive; i.e. into which text can be entered and the value (string)
+    is extracted actively by someone else.
+
+    accepting:
+      The opposite way to use editFields is to connect them to a model
+      and let the field notify changes to it.
+      This notification is called ``accepting''.
+      Unless accepted, the models value is not updated from the editFields contents
+      this default is the normal operation and way things should work, since most
+      uses of editFields are not interested in every individual change
+      (i.e. getting each keyStroke when a long number is entered).
+      The default behavior is to ``accept'' when either return or a cursorUp/Down
+      key is pressed in a field.
+      However, the field can setup to accept/not accept on leave, on return
+      or on each individual key input.
+      See the methods #acceptOnLeave: / #acceptOnReturn: / #immediateAccept.
+
+      In addition, the set of keys which are considered ``leaveKeys'' can be
+      specified by #leaveKeys: (in case you need keys other than Return, CursorUp/Down).
+
+    models value vs. field contents:
+      Although the field internally keeps its contents as some string object,
+      the application may prefer to think of numbers, floats, yes/no values etc.
+      To support this, a converter may defined, which is responsible for conversion of
+      strings to/from the models domain value.
+      If present (i.e. nonNil), the converter is asked to convert a string to the models
+      domain with #readValueFrom:aString and vice versa, a value to a string by #printStringFor:.
+      The PrintConverter class already provides a number of standard conversions, see the examples.
+      To access a converted value directly (i.e. not via the model), use #editValue.
+
+    grouping:
+      Individual fields do not know about being included in a group. This must be arranged on the
+      outside, by placing multiple fields into an EnterFieldGroup.
+      This groupObject keeps a reference to one active field, and forwards input from any other
+      field to the active one. Also have a look at the examples for this.
+
+    input completion:
+      To support input completion (i.e. filename completion, classname completion etc.),
+      a completionBlock can be defined which (if non-nil) is evaluated when the completion-key
+      is pressed and its value is taken as the new field-contents. 
+      The physical completion-key is the Tab key (this one cannot be defined by
+      the keyboardTranslation mechanism, since that would disable the Tab-key on regular text views.
+
+
+
+    [Instance variables:]
+
+      leaveAction    <Block | nil>              if non-nil, this is evaluated with
+                                                the key (#Return, #CursorUp etc.) when
+                                                the field is left via keyboard keys.
+                                                (fieldGroups use this to decide which
+                                                 field has to be enabled next)
+
+      enabled        <Boolean>                  if false, input is ignored.
+
+      clickAction    <Block | nil>              action performed if the field is
+                                                clicked upon.
+                                                (this is used by the group to
+                                                 set the active field to the clicked upon field)
+
+      crAction       <Block | nil>              if non-nil, keyboard input of a cr are not
+                                                handled specially, instead this block is evaluated
+                                                (however, this block can perform additional checks and send
+                                                 a #accept then)
+
+      tabAction      <Block | nil>              if non-nil, keyboard input of a tab character
+                                                is not entered into the text, instead this block
+                                                is evaluated. Also, no input completion is performed if
+                                                tabAction is nonNil.
+
+      converter      <PrintConverter | nil>     if non-nil, this is supposed to convert between
+                                                the object and its printed representation and vice versa.
+                                                Defaults to nil i.e. assume that strings are edited.
+
+      leaveKeys      <Collection>               keys which are interpreted as 'leaving the field'
+
+      immediateAccept   <Boolean>               if true, every change of the text is immediately
+                                                forwarded to the model/acceptBlock. If false,
+                                                the changed value is only stored in the model
+                                                if the field is left or accepted.
+                                                Default is false.
+
+      acceptOnLeave  <Boolean>                  if true, leaving the field (via cursor keys)
+                                                automatically accepts the value into the model.
+                                                Default is true.
+
+      acceptOnReturn <Boolean>                  if true, leaving the field via return
+                                                automatically accepts the value into the model.
+                                                Default is true.
+
+      acceptOnTab    <Boolean>                  if true, the Tab key accepts and leaves the field.
+                                                If false, Tabs are entered into the contents field like
+                                                ordinary non-control keys.
+                                                AcceptOnTab is ignored if the entryCompletion block is nonNil.
+                                                Default is true.
+
+      lengthLimit    <Number>                   the max. number of allowed characters
+
+      entryCompletionBlock <BlockOrNil>         if non-nil, this is evaluated to complete the entry
+                                                when <entryCompletionCharacter> is pressed.
+                                                Entry completion is used with Filenamefields or in the
+                                                browser for classname/selector completion.
+                                                Setting a nonNil entryCompletion disables acceptOnTab.
+
+      entryCompletionCharacter <CharacterOrNil> if non-nil AND entryCompletionBlock is nonNil, that one
+                                                is evaluated for completion. Typically used to complete
+                                                a fileName (also, classNames in the browser)
+                                                Default is #Tab.
+
+      passwordCharacter     <CharacterOrNil>    if non-nil, typed input is replaced by this character
+                                                for display. Used for secret-input fields (such as password entry).
+                                                Default is nil.
+
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DialogBox
+        EnterFieldGroup
+        EnterBox EnterBox2
+        FilenameEditField EditTextView
+"
+!
+
+examples 
+"
+    see more examples in EnterFieldGroup>>examples.
+
+
+    Step-by-step introduction:
+
+
+    basic field in some view:
+                                                                        [exBegin]
+        |top field|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:0.0@0.0 in:top.
+        field width:1.0.                                'let its height as-is'.
+
+        top open
+                                                                        [exEnd]
+
+
+    forward input in topView to the field:
+    (currently, the field does not know this - therefore,
+     its been told here ... this may change)
+                                                                        [exBegin]
+        |top field|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:0.0@0.0 in:top.
+        field width:1.0.                                'let its height as-is'.
+
+        top delegate:(KeyboardForwarder toView:field).
+        field hasKeyboardFocus:true.
+        top open
+                                                                        [exEnd]
+
+
+    to make it look better: set some inset:
+                                                                        [exBegin]
+        |top field spacing|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        spacing := View viewSpacing.
+        field := EditField origin:(0.0 @ spacing) in:top.
+        field width:1.0.                                        'let its height as-is'.
+        field leftInset:spacing; rightInset:spacing.
+
+        top open
+                                                                        [exEnd]
+
+
+    give it an initial contents:
+                                                                        [exBegin]
+        |top field|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:(0.0 @ 0.0) in:top.
+        field width:1.0.       
+
+        field editValue:'hello world'.
+
+        top open
+                                                                        [exEnd]
+
+
+    have it preselected:
+                                                                        [exBegin]
+        |top field|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:(0.0 @ 0.0) in:top.
+        field width:1.0.     
+        field editValue:'hello world' selected:true.
+
+        top open
+                                                                         [exEnd]
+
+
+    have part of it preselected:
+                                                                        [exBegin]
+        |top field|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:(0.0 @ 0.0) in:top.
+        field width:1.0.     
+
+        field editValue:'hello world'.
+        field selectFromCharacterPosition:1 to:5.
+
+        top open
+                                                                        [exEnd]
+
+
+    set a size limit:
+                                                                        [exBegin]
+        |top field|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:(0.0 @ 0.0) in:top.
+        field width:1.0.     
+        field editValue:'hello'.
+
+        field maxChars:8.
+
+        top open
+                                                                        [exEnd]
+
+
+    set a size limit, initial width and stop it from scrolling
+    notice: you may prefer a constant-pitch font (such as courier):
+                                                                        [exBegin]
+        |top field|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:(0.0 @ 0.0) in:top.
+        field innerWidth:(field font widthOf:'00000000').     
+        field editValue:'12345678'.
+
+        field maxChars:8.
+        field autoScroll:false.
+
+        top open
+                                                                        [exEnd]
+
+
+    enable / disable:
+                                                                        [exBegin]
+        |top panel check field ena|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        panel borderWidth:0.
+        panel horizontalLayout:#left.
+        panel horizontalInset:View viewSpacing.
+
+        check := CheckBox label:'enable' in:panel.
+        check turnOn.
+        check action:[:onOff | onOff ifTrue:[field enable] ifFalse:[field disable]].
+
+        panel add:(View new height:30; borderWidth:0).
+
+        field := EditField in:panel.
+        field width:1.0.     
+        field editValue:'hello'.
+        
+        top open
+                                                                        [exEnd]
+
+
+    enable / disable using a channel:
+                                                                        [exBegin]
+        |top panel check field ena|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        panel borderWidth:0.
+        panel horizontalLayout:#left.
+        panel horizontalInset:View viewSpacing.
+
+        ena := true asValue.
+
+        check := CheckBox label:'enable' in:panel.
+        check model:ena.
+
+        panel add:(View new height:30; borderWidth:0).
+
+        field := EditField in:panel.
+        field enableChannel:ena.
+        field width:1.0.     
+        field editValue:'hello'.
+
+        top open
+                                                                        [exEnd]
+
+
+    use a converter:
+      - numbers (default to 0):
+                                                                        [exBegin]
+        |top field spacing|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        spacing := View viewSpacing.
+
+        field := EditField origin:0.0 @ spacing in:top.
+        field width:1.0.
+        field horizontalInset:spacing.
+
+        field converter:(PrintConverter new initForNumber).
+        field editValue:1234.
+        field acceptAction:[:value | Transcript showCR:value].
+        field crAction:[field accept. top destroy].
+        top open.
+                                                                        [exEnd]
+
+      - dates:
+                                                                        [exBegin]
+        |top field spacing|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        spacing := View viewSpacing.
+
+        field := EditField origin:0.0 @ spacing in:top.
+        field width:1.0.
+        field horizontalInset:spacing.
+
+        field converter:(PrintConverter new initForDate).
+        field editValue:Date today.
+        field acceptAction:[:value | Transcript showCR:value class name , ' ' , value printString].
+        field crAction:[field accept. top destroy].
+        top open.
+                                                                        [exEnd]
+
+
+    setting immediateAccept, makes the field update with every key:
+
+      - immediate accept numbers, defaulting to nil:
+                                                                        [exBegin]
+        |top field spacing|
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        spacing := View viewSpacing.
+
+        field := EditField origin:0.0 @ spacing in:top.
+        field width:1.0.
+        field horizontalInset:spacing.
+
+        field converter:(PrintConverter new initForNumberOrNil).
+        field immediateAccept:true.
+        field editValue:1234.
+        field acceptAction:[:value | Transcript showCR:value].
+        field crAction:[field accept. top destroy].
+        top open.
+                                                                        [exEnd]
+
+
+
+    grouping multiple fields, and forward keyPres from the outer view to the active field
+    (i.e. actually: to the group):
+                                                                        [exBegin]
+        |top field1 field2 field3 group|
+
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field1 := EditField origin:(0.0 @ 0.0) in:top.
+        field1 width:1.0.
+
+        field2 := EditField origin:(0.0 @ 0.0) in:top.
+        field2 width:0.5.
+        field2 topInset:(field1 height); bottomInset:(field1 height negated).
+
+        field3 := EditField origin:(0.5 @ 0.0) in:top.
+        field3 width:0.5.
+        field3 topInset:(field1 height); bottomInset:(field1 height negated).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+
+        top delegate:(KeyboardForwarder to:group).
+
+        top open.
+                                                                        [exEnd]
+
+        
+    in addition: tell the group to close when the last field is left:
+                                                                        [exBegin]
+        |top field1 field2 field3 group|
+
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field1 := EditField origin:(0.0 @ 0.0) in:top.
+        field1 width:1.0.
+
+        field2 := EditField origin:(0.0 @ 0.0) in:top.
+        field2 width:0.5.
+        field2 topInset:(field1 height); bottomInset:(field1 height negated).
+
+        field3 := EditField origin:(0.5 @ 0.0) in:top.
+        field3 width:0.5.
+        field3 topInset:(field1 height); bottomInset:(field1 height negated).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+        group leaveAction:[top destroy].
+
+        top delegate:(KeyboardForwarder to:group).
+
+        top open.
+                                                                        [exEnd]
+
+
+    use a model:
+    (see changing model value in inspector when return is pressed in the field)
+                                                                        [exBegin]
+        |top field model|
+
+        model := 'hello world' asValue.
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:(0.0 @ 0.0) in:top.
+        field width:1.0.
+        field model:model.
+        field acceptOnReturn:true.
+
+        top open.
+        model inspect.
+                                                                        [exEnd]
+
+
+    like above, but also accept the value, when the focus is changed
+    (i.e. out of the input field):
+    (see changing model value in inspector)
+                                                                        [exBegin]
+        |top field model|
+
+        model := 'hello world' asValue.
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        field := EditField origin:(0.0 @ 0.0) in:top.
+        field width:1.0.
+        field model:model.
+        field acceptOnLostFocus:true.
+
+        top open.
+        InspectorView openOn:model monitor:'value'.
+                                                                        [exEnd]
+
+
+    two views on the same model (each accepts on return):
+                                                                        [exBegin]
+        |top1 top2 field1 field2 model|
+
+        model := 'hello world' asValue.
+
+        top1 := StandardSystemView new.
+        top1 extent:200@100.
+        field1 := EditField origin:(0.0 @ 0.0) in:top1.
+        field1 width:1.0.
+        field1 model:model.
+        field1 acceptOnReturn:true.
+        top1 open.
+
+        top2 := StandardSystemView new.
+        top2 extent:200@100.
+        field2 := EditField origin:(0.0 @ 0.0) in:top2.
+        field2 width:1.0.
+        field2 model:model.
+        field2 acceptOnReturn:true.
+        top2 open.
+                                                                        [exEnd]
+
+    two views on the same model (no accept on return):
+                                                                        [exBegin]
+        |top1 top2 field1 field2 model|
+
+        model := 'hello world' asValue.
+
+        top1 := StandardSystemView new.
+        top1 extent:200@100.
+        field1 := EditField origin:(0.0 @ 0.0) in:top1.
+        field1 width:1.0.
+        field1 model:model; acceptOnReturn:false.
+        top1 open.
+
+        top2 := StandardSystemView new.
+        top2 extent:200@100.
+        field2 := EditField origin:(0.0 @ 0.0) in:top2.
+        field2 width:1.0.
+        field2 model:model; acceptOnReturn:false.
+        top2 open.
+                                                                        [exEnd]
+
+    with immediate accept (every key updates the model):
+                                                                        [exBegin]
+        |top1 top2 field1 field2 model|
+
+        model := 'hello world' asValue.
+
+        top1 := StandardSystemView new.
+        top1 extent:200@100.
+        field1 := EditField origin:(0.0 @ 0.0) in:top1.
+        field1 width:1.0.
+        field1 model:model; immediateAccept:true.
+        top1 open.
+
+        top2 := StandardSystemView new.
+        top2 extent:200@100.
+        field2 := EditField origin:(0.0 @ 0.0) in:top2.
+        field2 width:1.0.
+        field2 model:model; immediateAccept:true.
+        top2 open.
+                                                                        [exEnd]
+
+    just an example; a checkBox and an editField on the same model:
+                                                                        [exBegin]
+        |top1 top2 field1 box model|
+
+        model := false asValue.
+
+        top1 := StandardSystemView new.
+        top1 extent:200@100.
+        field1 := EditField origin:(0.0 @ 0.0) in:top1.
+        field1 width:1.0.
+        field1 converter:(PrintConverter new initForYesNo).
+        field1 model:model.
+        top1 open.
+
+        top2 := StandardSystemView new.
+        top2 extent:200@100.
+        box := CheckBox on:model.
+        box label:'on/off'.
+        top2 add:box.
+        top2 open.
+
+        model inspect.
+                                                                        [exEnd]
+
+
+    multiple editFields on multiple models (value holders):
+    (the fields are connected by a group to allow tabbing)
+                                                                        [exBegin]
+        |top panel group field1 field2 field3 box 
+         v1 v2 v3 spacing|
+
+        v1 := true asValue.
+        v2 := 'some string' asValue.
+        v3 := 1.2 asValue.
+
+        top := StandardSystemView new.
+        top extent:200@100.
+
+        panel := VerticalPanelView origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:top.
+
+        spacing := View viewSpacing.
+
+        field1 := EditField new.
+        field1 width:1.0.
+        field1 horizontalInset:spacing.
+        field1 converter:(PrintConverter new initForYesNo).
+        field1 model:v1.
+        panel add:field1.
+
+        field2 := EditField new.
+        field2 width:1.0.
+        field2 horizontalInset:spacing.
+        field2 model:v2.
+        panel add:field2.
+
+        field3 := EditField new.
+        field3 width:1.0.
+        field3 horizontalInset:spacing.
+        field3 converter:(PrintConverter new initForNumber).
+        field3 model:v3.
+        panel add:field3.
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+
+        top openModal.
+
+        Transcript showCR:v1 value.
+        Transcript showCR:v2 value.
+        Transcript showCR:v3 value.
+                                                                        [exEnd]
+
+
+    connecting fields:
+    update field2 wehenever field1 is changed.
+    (normally, the processing below (xChanged) is done in your application
+     class, or in a complex model. For the demonstration below, we use
+     a Plug to simulate the protocol.)
+                                                                        [exBegin]
+        |application top field1 field2 value1 value2|
+
+        application := Plug new.
+        application respondTo:#value1Changed
+                         with:[value2 value:(value1 value isNil ifTrue:[nil]
+                                                                ifFalse:[value1 value squared])].
+
+        value1 := 1 asValue.
+        value2 := 1 asValue.
+
+        top := Dialog new.
+        top extent:200@200.
+
+        (top addTextLabel:'some number:') layout:#left.
+        top addVerticalSpace.
+
+        (top addInputFieldOn:value1 tabable:false) 
+            converter:(PrintConverter new initForNumberOrNil);
+            immediateAccept:true.
+        top addVerticalSpace.
+
+        (top addTextLabel:'squared:') layout:#left.
+        top addVerticalSpace.
+        (top addInputFieldOn:value2 tabable:false) 
+            converter:(PrintConverter new initForNumberOrNil).
+
+        value1 onChangeSend:#value1Changed to:application.
+
+        top openModeless.
+                                                                        [exEnd]
+
+
+    two-way connect:
+    each field updates the other (notice, that we have to turn off
+    onChange: notification, to avoid an endless notification cycle)
+                                                                        [exBegin]
+        |application top field1 field2 value1 value2|
+
+        application := Plug new.
+        application respondTo:#value1Changed
+                         with:[value2 retractInterestsFor:application.
+                               value2 value:(value1 value isNil ifTrue:[nil]
+                                                                ifFalse:[value1 value squared]).
+                               value2 onChangeSend:#value2Changed to:application.
+                              ].
+        application respondTo:#value2Changed
+                         with:[value1 retractInterestsFor:application.
+                               value1 value:(value2 value isNil ifTrue:[nil]
+                                                                ifFalse:[value2 value sqrt]).
+                               value1 onChangeSend:#value1Changed to:application.
+                              ].
+
+        value1 := 1 asValue.
+        value2 := 1 asValue.
+
+        top := Dialog new.
+        top extent:200@200.
+
+        (top addTextLabel:'some number:') layout:#left.
+        top addVerticalSpace.
+
+        (top addInputFieldOn:value1 tabable:false) 
+            converter:(PrintConverter new initForNumberOrNil);
+            immediateAccept:true.
+        top addVerticalSpace.
+
+        (top addTextLabel:'squared:') layout:#left.
+        top addVerticalSpace.
+        (top addInputFieldOn:value2 tabable:false) 
+            converter:(PrintConverter new initForNumberOrNil);
+            immediateAccept:true.
+
+        value1 onChangeSend:#value1Changed to:application.
+        value2 onChangeSend:#value2Changed to:application.
+
+        top openModeless.
+                                                                        [exEnd]
+"
+! !
+
+!EditField class methodsFor:'defaults'!
+
+defaultBorderColor
+    ^ DefaultBorderColor
+!
+
+defaultBorderWidth
+    ^ DefaultBorderWidth
+!
+
+defaultLeaveKeys
+    "return the set of keys which are taken as leave-keys.
+     If the field is in an enterFieldGroup, all leave keys will be
+     forwarded to the group and possible step to the next/previous field.
+     Also, if acceptOnLeave is true, leave keys will store the current
+     value into their model (if any)"
+
+    ^ #(Return CursorUp CursorDown Next Previous Accept)
+!
+
+defaultLevel
+    ^ DefaultLevel
+!
+
+defaultNumberOfLines
+    "the number of lines in the field"
+
+    ^ 1
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'editField.foregroundColor' 
+                       #'editField.backgroundColor'
+                       #'editField.selectionForegroundColor' 
+                       #'editField.selectionBackgroundColor'
+                       #'editField.font')>
+
+    DefaultForegroundColor := StyleSheet colorAt:'editField.foregroundColor' default:Color black.
+    DefaultBackgroundColor := StyleSheet colorAt:'editField.backgroundColor' default:Color white.
+    DefaultSelectionForegroundColor := StyleSheet colorAt:'editField.selectionForegroundColor' default:nil.
+    DefaultSelectionForegroundColor isNil ifTrue:[
+        DefaultSelectionForegroundColor := StyleSheet colorAt:'selection.hilightForegroundColor' default:DefaultBackgroundColor.
+    ].
+    DefaultSelectionBackgroundColor := StyleSheet colorAt:'editField.selectionBackgroundColor' default:nil.
+    DefaultSelectionBackgroundColor isNil ifTrue:[
+        DefaultSelectionBackgroundColor := StyleSheet colorAt:'selection.hilightBackgroundColor' default:DefaultForegroundColor.
+    ].
+    DefaultFont := StyleSheet fontAt:'editField.font' default:nil.
+    DefaultBorderColor := StyleSheet colorAt:'editField.borderColor' default:nil. 
+    DefaultBorderWidth := StyleSheet at:'editField.borderWidth' default:nil.  
+    DefaultLevel := StyleSheet at:'editField.level' default:nil. 
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: / 19-01-2011 / 22:34:35 / cg"
+! !
+
+!EditField methodsFor:'accepting'!
+
+accept
+    "accept the current contents by executing the accept-action and/or
+     changeMessage.
+     Do this only if the contents of the EditField differs
+     from the printed representation of the model."
+
+    |string|
+
+    acceptEnabled == false ifTrue:[
+        self beep.
+        ^ self
+    ].
+
+    (acceptIfUnchanged not
+     and:[model notNil
+     and:[(self convertEditValueToString:model value) = self contents]]) ifTrue:[
+        ^ self
+    ].
+
+    super accept.
+
+    "a typeconverter can convert different strings to the same value 
+     ('010' asInteger = '10' asInteger).
+     Show the common string representation ('10') of the value"
+
+    converter notNil ifTrue:[
+        string := converter printStringFor:self editValue.
+        string ~= self contents ifTrue:[
+            self contents:string.
+            self flash
+        ].
+    ].
+
+    "Modified: 7.3.1997 / 11:06:00 / cg"
+! !
+
+!EditField methodsFor:'accessing-behavior'!
+
+acceptIfUnchanged
+    "return the acceptIfUnchanged flag setting.
+     if set (the default), an accept notification is sent on accept,
+     even if the fields value is the same. If cleared,
+     the notification is suppressed, if the fields contents is the same."
+
+    ^ acceptIfUnchanged
+!
+
+acceptIfUnchanged:aBoolean
+    "if set (the default), an accept notification is sent on accept,
+     even if the fields value is the same. If cleared,
+     the notification is suppressed, if the fields contents is the same."
+
+    acceptIfUnchanged := aBoolean
+!
+
+acceptOnLeave
+    "returnr the acceptOnLeave flag. The default is false.
+     If true, leaving the box (via return, cursor etc.) accepts my 
+     string into the valueHolder (if any).
+     (actually, the set of keys can be specified with #leaveKeys:)"
+
+     ^ acceptOnLeave 
+!
+
+acceptOnLeave:aBoolean
+    "set/clear the acceptOnLeave flag. The default is false.
+     If true, leaving the box (via return, cursor etc.) accepts my 
+     string into the valueHolder (if any).
+     (actually, the set of keys can be specified with #leaveKeys:)"
+
+     acceptOnLeave := aBoolean
+
+    "Modified: 11.12.1996 / 16:47:25 / cg"
+!
+
+acceptOnLostFocus
+    ^ acceptOnLostFocus
+!
+
+acceptOnLostFocus:aBoolean
+    "set/clear the acceptOnLostFocus flag. The default is false.
+     If true, a lost focus (via mouse-pointer motion etc.) accepts my 
+     string into the valueHolder (if any)."
+
+     acceptOnLostFocus := aBoolean
+
+    "Modified: 16.12.1995 / 16:26:45 / cg"
+    "Created: 11.12.1996 / 16:48:00 / cg"
+!
+
+acceptOnPointerLeave:aBoolean
+    "set/clear the acceptOnPointerLeave flag. The default is false.
+     If true, a pointer leave (via mouse-pointer motion etc.) accepts my 
+     string into the valueHolder (if any)."
+
+     acceptOnPointerLeave := aBoolean
+
+    "Modified: / 16.12.1995 / 16:26:45 / cg"
+    "Created: / 28.6.1999 / 18:07:38 / cg"
+!
+
+acceptOnReturn:aBoolean
+    "set/clear the acceptOnReturn flag. The default is false.
+     If true, leaving the box via return accepts my 
+     string into the valueHolder (if any)."
+
+     acceptOnReturn := aBoolean
+
+    "Modified: 16.12.1995 / 16:25:34 / cg"
+!
+
+acceptOnTab:aBoolean
+    "set/clear the acceptOnTab flag. The default is true.
+     If true, a pressed Tab key accepts and leaves the box.
+     If false, the Tab key is treated like any normal input character
+     (i.e. inserted into the contents)."
+
+     acceptOnTab := aBoolean
+
+    "Created: 24.1.1996 / 13:13:37 / cg"
+!
+
+autoScroll:aBoolean
+    "turn on/off automatic scrolling upon keyboard entry
+     to make the cursor visible."
+
+    autoScrollHorizontally := aBoolean
+!
+
+clickAction:aBlock
+    "define an action to be evaluated when being clicked upon"
+
+    clickAction := aBlock
+!
+
+converter
+    "return the converter (if any)."
+
+    ^ converter
+!
+
+converter:aConverter
+    "set the converter. If non-nil,
+     the converter is applied to the text to convert from the string
+     representation to the actual object value and vice versa.
+     The default converter is nil, meaning no-conversion
+     (i.e. the edited object is the string itself."
+
+    converter := aConverter
+!
+
+crAction:aBlock
+    "define an action to be evaluated when the return key is pressed."
+
+    crAction := aBlock
+!
+
+doubleClickAction:aBlock
+    "define an action to be evaluated when being double clicked upon"
+
+    doubleClickAction := aBlock
+!
+
+enabled
+    "return true, if the field is enabled (i.e. accepts keyboard input)"
+
+    ^ enabled ? true 
+
+!
+
+enabled:aBoolean
+    "enable/disable the field; show/hide the cursor and allow/disallow input"
+
+    enabled ~~ aBoolean ifTrue:[
+        enabled := aBoolean.
+        self updateBackground.
+        super cursorShown:aBoolean
+    ]
+
+    "Modified: / 3.8.1998 / 17:52:18 / cg"
+    "Created: / 30.3.1999 / 15:19:17 / stefan"
+    "Modified: / 30.3.1999 / 16:00:43 / stefan"
+!
+
+entryCompletionBlock
+    "the action to be evaluated when Tab (EntryCompletionCharacter) is pressed.
+     The block gets the current contents and the field itself as optional arguments
+     (i.e. it can be a 0, 1 or 2-arg block)."
+
+    "/ read comment in entryCompletionBlockHolder: on why the following kludge is present
+    entryCompletionBlock isBlock ifTrue:[
+        ^ entryCompletionBlock
+    ].
+    ^ entryCompletionBlock value
+!
+
+entryCompletionBlock:aZeroOneOrTwoArgBlock
+    "define an action to be evaluated when Tab (EntryCompletionCharacter) is pressed.
+     The block gets the current contents and the field itself as optional arguments
+     (i.e. it can be a 0, 1 or 2-arg block)."
+
+    entryCompletionBlock := aZeroOneOrTwoArgBlock
+!
+
+entryCompletionBlockHolder:aZeroOneOrTwoArgBlock
+    "a holder for an action to be evaluated when Tab (EntryCompletionCharacter) is pressed.
+     The block gets the current contents and the field itself as optional arguments
+     (i.e. it can be a 0, 1 or 2-arg block)."
+
+    "/ for now (to avoid incompatibilities), misuse the existing
+    "/ entryCompletionBlock and check if its a holder.
+
+    entryCompletionBlock := aZeroOneOrTwoArgBlock
+!
+
+entryCompletionCharacter
+    "return the value of the instance variable 'entryCompletionCharacter' (automatically generated)"
+
+    ^ entryCompletionCharacter
+!
+
+immediateAccept:aBoolean
+    "set/clear the immediateAccept flag. The default is false.
+     If true, every pressed key immediately accepts my 
+     string into the valueHolder (if any)."
+
+     immediateAccept := aBoolean
+
+    "Modified: 16.12.1995 / 16:25:57 / cg"
+!
+
+isAcceptOnLeave
+    "return the acceptOnLeave flag. The default is false.
+     If true, leaving the box (via return, cursor etc.) accepts my 
+     string into the valueHolder (if any).
+     (actually, the set of keys can be specified with #leaveKeys:)"
+
+     ^ acceptOnLeave 
+
+    "Modified: 11.12.1996 / 16:47:25 / cg"
+!
+
+isAcceptOnLostFocus
+    "return the acceptOnLostFocus flag. The default is false.
+     If true, a lost focus (via mouse-pointer motion etc.) accepts my 
+     string into the valueHolder (if any)."
+
+     ^ acceptOnLostFocus
+
+    "Modified: 16.12.1995 / 16:26:45 / cg"
+    "Created: 11.12.1996 / 16:48:00 / cg"
+!
+
+isAcceptOnReturn
+    "return the acceptOnReturn flag. The default is false.
+     If true, leaving the box via return accepts my 
+     string into the valueHolder (if any)."
+
+     ^ acceptOnReturn 
+
+    "Modified: 16.12.1995 / 16:25:34 / cg"
+!
+
+isAcceptOnTab
+    "return the acceptOnTab flag. The default is true.
+     If true, a pressed Tab key accepts and leaves the box.
+     If false, the Tab key is treated like any normal input character
+     (i.e. inserted into the contents)."
+
+     ^ acceptOnTab
+!
+
+isImmediateAccept
+    "return the immediateAccept flag. The default is false.
+     If true, every pressed key immediately accepts my 
+     string into the valueHolder (if any)."
+
+     ^ immediateAccept
+
+    "Modified: 16.12.1995 / 16:25:57 / cg"
+!
+
+leaveAction:aBlock
+    "define an action to be evaluated when field is left by a leave-key
+     (by default: return or cursor keys.
+     Actually, the set of keys can be specified with #leaveKeys:
+     On leave, the precedence of actions is:
+       1) explicit leaveAction per key
+       2) this general leaveAction
+       3) tab or return action
+"
+
+    leaveAction := aBlock
+
+    "Modified: 16.12.1995 / 16:26:36 / cg"
+!
+
+leaveKey
+    "only valid after the editField has been left via a leaveCharacter.
+     Allows for users of the EditField to advance the selection 
+     (especially: DataSets to select next/prev if editor is left via CrsrUp/Down)"
+
+    ^ leaveKey
+!
+
+leaveKeys
+    "return (a copy of) the collection of keys which are interpreted as leaveKeys.
+     I.e. those that make the field inactive and pass the focus to the next field
+     (and accept, if acceptOnLeave is true)"
+
+    ^ leaveKeys copy
+!
+
+leaveKeys:aCollectionOfKeySymbols 
+    "define the set of keys which are interpreted as leaveKeys.
+     I.e. those that make the field inactive and accept (if acceptOnLeave is true).
+     The default is a set of #CursorUp, #CursorDown, #Next, #Prior and #Return."
+
+    leaveKeys := aCollectionOfKeySymbols
+!
+
+makeTabable
+    "arrange for Tab to accept & leave the field
+     If the field is part of a group, the next field gets the
+     input focus"
+
+    leaveKeys isNil ifTrue:[
+        leaveKeys := self class defaultLeaveKeys
+    ].
+    leaveKeys := leaveKeys copyWith:#Tab
+
+    "Created: 27.4.1996 / 17:09:48 / cg"
+!
+
+onKey:aKey leaveWith:aBlock
+    "arrange for aKey to leave the field and evalaute aBlock.
+     On leave, the precedence of actions is:
+       1) explicit leaveAction per key
+       2) general leaveAction
+       3) tab or return action
+     Can be used to arrange for cursorDown to pass focus to another widget."
+
+    leaveKeys := leaveKeys asOrderedCollection.
+    leaveKeys add:aKey.
+    leaveKeyActions isNil ifTrue:[
+        leaveKeyActions := Dictionary new.
+    ].
+    leaveKeyActions at:aKey put:aBlock.
+!
+
+readOnly:aBoolean
+    "make the text readonly or writable"
+
+    super readOnly:aBoolean.
+    self updateBackground.
+
+    "Created: / 26.7.1998 / 21:23:17 / cg"
+    "Modified: / 3.8.1998 / 17:52:38 / cg"
+!
+
+returnKeyIsFocusNext
+    "arrange for the return key to act as a focus-next key"
+
+    leaveKeys := leaveKeys copyAsOrderedCollection. 
+    leaveKeys remove:#Return ifAbsent:nil
+!
+
+tabAction:aBlock
+    "define an action to be evaluated when the tabulator key is pressed."
+
+    tabAction := aBlock
+!
+
+tabKey:aKeySymbol 
+    "arrange for aKeySymbol to accept & leave the field
+     If the field is part of a group, the next field gets the
+     input focus"
+
+    leaveKeys isNil ifTrue:[
+        leaveKeys := self class defaultLeaveKeys
+    ].
+    leaveKeys := leaveKeys copyWith:#Tab
+
+    "Created: 27.4.1996 / 17:08:54 / cg"
+! !
+
+!EditField methodsFor:'accessing-contents'!
+
+contents
+    "return contents as a string
+     - redefined since EditFields hold only one line of text.
+    In your application, please use #editValue; 
+    it uses a converter (if any) and is compatible to ST-80."
+
+    (list isEmptyOrNil) ifTrue:[^ ''].
+    ^ list at:1
+!
+
+contents:someText
+    "set the contents from a string
+     - redefined to place the cursor to the end.
+    In your application, please use #editValue: - 
+    it uses a converter (if any) and is compatible to ST-80."
+
+    |newCol txt|
+
+    newCol := cursorCol.
+
+    someText isNil ifTrue:[
+        txt := ''.
+    ] ifFalse:[
+        txt := someText asString.
+    ].
+    super contents:txt.
+
+    (cursorMovementWhenUpdating == #endOfLine
+    or:[cursorMovementWhenUpdating == #endOfText
+    or:[cursorMovementWhenUpdating == #end]]) ifTrue:[
+         newCol := (txt size + 1).
+    ] ifFalse:[
+        (cursorMovementWhenUpdating == #beginOfLine
+        or:[cursorMovementWhenUpdating == #beginOfText
+        or:[cursorMovementWhenUpdating == #begin]]) ifTrue:[
+            newCol := 1
+        ] ifFalse:[
+            "/ default: stay where it was
+        ]
+    ].
+
+    self cursorCol:newCol.
+
+    "Modified: / 13.11.1999 / 13:50:30 / cg"
+!
+
+convertEditValueToString:aStringOrObject
+    "convert a aStringOrObject to a printed representation. 
+     If there is a converter, use it to convert
+     the object into a printed representation.
+     Use asString to convert the object,
+     and used directly."
+
+    converter notNil ifTrue:[
+        ^ converter printStringFor:aStringOrObject
+    ].
+
+    aStringOrObject isNil ifTrue:[
+        ^ ''.
+    ].
+    ^ aStringOrObject asString.
+!
+
+editValue
+    "if the field edits a string, this is a name alias for #contents.
+     Otherwise, if there is a converter, return the edited string
+     converted to an appropriate object."
+
+    |string|
+
+    string := self contents.
+    string isNil ifTrue:[string := ''].
+    converter isNil ifTrue:[^ string].
+    ^ converter readValueFrom:string 
+!
+
+editValue:anObject
+    "set the contents. If there is a converter, use it to convert
+     the object into a printed representation.
+     Otherwise, convert anObject to a string using #asString
+     (this is equivalent to sending #contents:)."
+
+    self editValue:anObject selected:false
+!
+
+editValue:anObject selected:isSelected
+    "set the contents. If there is a converter, use it to convert
+     anObject into a printed representation.
+     Otherwise, use anObject asString
+     (i.e. this is equivalent to sending #initialText:selected:)."
+
+    |string|
+
+    string := self convertEditValueToString:anObject.
+    self contents:string.
+    isSelected ifTrue:[
+        self selectFromLine:1 col:1 toLine:1 col:string size.
+    ]
+!
+
+initialText:aString
+    "set the initialText and select it.
+     Better use #editValue: - it uses the type converter."
+
+    self initialText:aString selected:true
+!
+
+initialText:aString selected:isSelected
+    "set the initialText and select it if isSelected is true
+     Better use #editValue:selected: - it uses the type converter."
+
+    |len s|
+
+    viewOrigin := 0 @ viewOrigin y.
+
+    self contents:aString.
+    isSelected ifTrue:[
+        s := self contents.
+        len := s size.
+        len ~~ 0 ifTrue:[
+            self selectFromLine:1 col:1 toLine:1 col:len
+        ]
+    ].
+!
+
+list:someText
+    "low level access to the underlying contents' list.
+     Redefined to force text to 1 line, and notify dependents
+     of any changed extent-wishes (for automatic box resizing)."
+
+    |l oldWidth|
+
+    l := someText.
+    l notEmptyOrNil ifTrue:[
+        l := OrderedCollection with:(l at:1)
+    ].
+    oldWidth := self widthOfContents.
+    super list:l.
+    self widthOfContents ~~ oldWidth ifTrue:[
+        self changedPreferredBounds:nil
+    ]
+
+    "Modified: 6.3.1997 / 16:13:36 / cg"
+!
+
+stringValue
+    "alias for #contents - for compatibility with ST-80's InputField"
+
+    ^ self contents
+! !
+
+!EditField methodsFor:'accessing-look'!
+
+bePassword
+    "make me a password entry field (i.e. show *'s for typed characters"
+
+    self passwordCharacter:$*
+!
+
+emptyFieldReplacementText
+    "the string to show in grey if nothing has been entered (and the field is passive)"
+
+    ^ emptyFieldReplacementText
+!
+
+emptyFieldReplacementText:something
+    "the string to show in grey if nothing has been entered (and the field is passive)"
+
+    emptyFieldReplacementText := something.
+!
+
+font:aFont
+    super font:aFont.
+    self computeTopMargin.
+!
+
+maxChars
+    "return the maximum number of characters that are allowed in
+     the field. 
+     A limit of nil means: unlimited. This is the default."
+
+    ^ lengthLimit
+
+    "Modified: 6.9.1995 / 13:43:33 / claus"
+!
+
+maxChars:aNumberOrNil
+    "set the maximum number of characters that are allowed in
+     the field. Additional input will be ignored by the field.
+     A limit of nil or zero means: unlimited. This is the default.
+     If set, a lengthLimit must be defined before any contents is placed
+     into the field, because the contents is not cut when the max is
+     changed later. I.e. it should be set early after creation of the field.
+
+     This method has been renamed from #lengthLimit: for ST-80
+     compatibility."
+
+    aNumberOrNil == 0 ifTrue:[
+        lengthLimit := nil
+    ] ifFalse:[
+        lengthLimit := aNumberOrNil.
+    ]
+!
+
+passwordCharacter
+    "return the passwordCharacter;
+     If nonNil, that one is replacing typed input
+     (for secret input)"
+
+    ^ passwordCharacter
+
+    "Modified: 6.9.1995 / 12:25:39 / claus"
+    "Modified: 16.12.1995 / 16:24:25 / cg"
+!
+
+passwordCharacter:aCharacter
+    "set the passwordCharacter;
+     If nonNil, that one is replacing typed input
+     (for secret input)"
+
+    passwordCharacter := aCharacter
+
+    "Modified: 6.9.1995 / 12:25:33 / claus"
+    "Modified: 16.12.1995 / 16:24:33 / cg"
+! !
+
+!EditField methodsFor:'cursor drawing'!
+
+cursorShown:aBoolean
+    "make cursor visible if currently invisible - but only if this
+     EditField is enabled. 
+     Return the previous cursor-shown-state"
+
+    ^ super cursorShown:(aBoolean and:[enabled and:[self isReadOnly not]])
+
+    "Created: / 30.3.1999 / 16:00:25 / stefan"
+    "Modified: / 1.4.1999 / 11:18:38 / cg"
+!
+
+drawFromVisibleLine:startVisLineNr to:endVisLineNr with:fg and:bg
+    startVisLineNr to:endVisLineNr do:[:visLine |
+	self drawVisibleLine:visLine with:fg and:bg
+    ]
+
+    "Modified: 6.9.1995 / 12:24:29 / claus"
+! !
+
+!EditField methodsFor:'cursor movement'!
+
+cursorDown
+    "catch cursor movement"
+
+    (cursorVisibleLine == nLinesShown) ifFalse:[
+	super cursorDown
+    ]
+!
+
+cursorLine:line col:col
+    "catch cursor movement"
+
+    super cursorLine:1 col:col
+!
+
+validateCursorCol:col inLine:line
+    "check of col is a valid cursor position;
+     return a fixed value if not."
+
+    |sz|
+
+    sz := self contents size.
+    lengthLimit notNil ifTrue:[
+        sz := sz min:lengthLimit.
+    ].
+
+    col <= sz ifTrue:[
+        ^ col
+    ].
+    ^ sz + 1.  "/ to allow positioning right behind the string
+
+    "Created: 22.5.1996 / 18:17:27 / cg"
+    "Modified: 22.5.1996 / 18:19:04 / cg"
+! !
+
+!EditField methodsFor:'drag & drop'!
+
+dropFileObject:aDropObject
+    "drop objects
+     Redefined to always drop the name only"
+
+    self 
+        undoablePasteReplacingAll:(aDropObject asFilename pathName) 
+        info:'Drop Filename'.
+
+    "Created: / 13-10-2006 / 17:42:22 / cg"
+    "Modified: / 28-07-2007 / 13:27:32 / cg"
+! !
+
+!EditField methodsFor:'editing'!
+
+paste:someText
+    "redefined to force text to 1 line"
+
+    super paste:someText.
+    list size > 1 ifTrue:[
+	self deleteFromLine:2 toLine:(list size)
+    ]
+! !
+
+!EditField methodsFor:'event handling'!
+
+buttonPress:button x:x y:y
+    "enable myself on mouse click"
+
+    |prevFocus|
+
+    enabled ifTrue:[
+        prevFocus := hasKeyboardFocus.
+        clickAction notNil ifTrue:[
+            clickAction value:self
+        ].
+        hasKeyboardFocus ~~ prevFocus ifTrue:[
+            ^ self
+        ].
+    ].
+    super buttonPress:button x:x y:y
+
+"/    enabled ifFalse:[
+"/        enabled := true.
+"/        super buttonPress:button x:x y:y.
+"/        enableAction notNil ifTrue:[
+"/            enableAction value
+"/        ]
+"/    ] ifTrue:[
+"/        super buttonPress:button x:x y:y
+"/    ]
+
+    "Modified: 22.5.1996 / 15:02:45 / cg"
+!
+
+canHandle:aKey
+    "return true, if the receiver would like to handle aKey
+     (usually from another view, when the receiver is part of
+      a more complex dialog box).
+     We do return true here, since the editfield will handle
+     all keys.
+     OBSOLETE: dont use this anymore - its a leftover for the tableWidget"
+
+    ^ true
+!
+
+doubleClickX:x y:y
+    doubleClickAction notNil ifTrue: [
+        doubleClickAction value.
+    ].
+
+    super doubleClickX:x y:y
+!
+
+handleCompletionService
+    "none here"
+
+    ^ self
+!
+
+handleFocusKey:key
+    "handle a focus key, to assign the focus to another field in my group"
+
+    <resource: #keyboard (#Tab #Return #CursorDown #CursorUp)>
+
+    windowGroup isNil ifTrue:[^ self ].
+
+    (key == #Tab) ifTrue:[
+        (self tabRequiresControl not
+        or:[ self sensor ctrlDown ]) ifTrue:[
+            self sensor shiftDown ifTrue:[
+                windowGroup focusPrevious
+            ] ifFalse:[
+                windowGroup focusNext
+            ].
+        ].
+        ^ self
+    ].
+
+    (key == #Return) ifTrue:[
+        windowGroup focusNext.
+        ^ self
+    ].
+
+    key == #CursorDown ifTrue:[
+        windowGroup focusNext.
+        ^ self.
+    ].
+    key == #CursorUp ifTrue:[
+        windowGroup focusPrevious.
+        ^ self.
+    ].
+
+    "Created: / 06-03-2007 / 20:14:04 / cg"
+!
+
+keyPress:key x:x y:y
+    "if keyHandler is defined, pass input; otherwise check for leave
+     keys"
+
+    <resource: #keyboard (#Tab #Return #Find #FindNext #FindPrev
+                          #DeleteLine #GotoLine #EndOfLine #EndOfText
+                          #CursorDown #CursorUp)>
+
+    |leave oldContents newContents doAccept keyAction numArgs|
+
+    enabled ifFalse:[
+        ^ self
+    ].
+
+    (key == #DeleteLine) ifTrue:[
+        Smalltalk at:#CopyBuffer put:(self contents).
+        self contents:''. 
+        ^ self
+    ].
+
+    (key == entryCompletionCharacter and:[self entryCompletionBlock notNil]) ifTrue:[
+        oldContents := self contents.
+        oldContents isNil ifTrue:[
+            oldContents := ''
+        ] ifFalse:[
+            oldContents := oldContents asString
+        ].
+
+        self entryCompletionBlock valueWithOptionalArgument:oldContents and:self.
+
+        newContents := self contents.
+        newContents isNil ifTrue:[
+            newContents := ''
+        ] ifFalse:[
+            newContents := newContents asString
+        ].
+        newContents ~= oldContents ifTrue:[
+            self textChanged
+        ].
+        ^ self
+    ].
+
+    (key == #Tab) ifTrue:[
+        doAccept := acceptOnTab.
+        keyAction := tabAction.
+    ].
+    (key == #Return) ifTrue:[
+        doAccept := acceptOnReturn.
+        keyAction := crAction.
+    ].
+
+    leave := leaveKeys includes:key.
+    leave ifTrue:[
+        leaveKey := key.
+        doAccept := doAccept ? acceptOnLeave.
+
+        "/ on leave, the precedence of actions is:
+        "/  1) explicit leaveAction per key
+        "/  2) general leaveAction
+        "/  3) tab or return action
+        leaveKeyActions notNil ifTrue:[
+            keyAction := leaveKeyActions at:key ifAbsent:[keyAction].
+        ].
+        keyAction := keyAction ? leaveAction.
+    ].
+
+    doAccept == true ifTrue:[
+        self accept.
+    ].
+
+    keyAction notNil ifTrue:[
+        numArgs := keyAction numArgs.
+
+        numArgs == 2 ifTrue:[
+            ^ keyAction value:self value:key
+        ].
+        numArgs == 0 ifTrue:[
+            ^ keyAction value
+        ].
+        ^ keyAction value:key
+    ].
+
+    leave ifTrue:[
+        (x notNil and:[x >= 0]) ifTrue:[
+            "
+             we do not handle this key directly.
+             let superview know about the key that caused us to leave (maybe RETURN, DOWN, UP etc....
+            "
+            (superView notNil and:[superView canHandle:key from:self]) ifTrue:[
+                superView keyPress:key x:x y:y.
+            ].
+        ].
+
+        "/ a leave, but no action defined
+        "/ forward it as a Focus-step
+        key == #CursorDown ifTrue:[
+            self handleFocusKey:key.
+            ^ self.
+        ].
+        key == #CursorUp ifTrue:[
+            self handleFocusKey:key.
+            ^ self.
+        ].
+        ^ self
+    ].
+
+    "
+     ignore some keys (if not a leaveKey) ...
+    "
+    (key == #Find) ifTrue:[^self].
+    (key == #FindNext) ifTrue:[^self].
+    (key == #FindPrev) ifTrue:[^self].
+    (key == #GotoLine) ifTrue:[^self].
+    "
+     a normal key - let superclass's method insert it
+    "
+    super keyPress:key x:x y:y.
+
+    "
+     for end-of-text, also move to end-of-line
+    "
+    key == #EndOfText ifTrue:[
+        super keyPress:#EndOfLine x:x y:y.
+    ].
+
+    self resizeOrScroll.
+
+    "Modified: / 02-05-1996 / 17:24:16 / stefan"
+    "Modified: / 17-01-2011 / 11:26:08 / cg"
+!
+
+pointerLeave:state
+    (acceptOnPointerLeave and:[enabled and:[self modified]]) ifTrue:[
+        self accept
+    ].
+    super pointerLeave:state
+
+    "Modified: / 28.6.1999 / 18:08:29 / cg"
+!
+
+resizeOrScroll
+    "helper for keyPress.
+     Extracted for easier subclass redefinition."
+
+    |xCol newOffset newWidth|
+
+    newWidth := self widthOfContents.
+
+    "
+     should (& can) we resize ?
+    "
+    xCol := (self xOfCol:cursorCol inVisibleLine:cursorLine) - viewOrigin x.
+    (xCol > (width * (5/6))) ifTrue:[
+        self changedPreferredBounds:nil
+    ] ifFalse:[
+        newWidth < (width * (1/6)) ifTrue:[
+            self changedPreferredBounds:nil
+        ]
+    ].
+
+    autoScrollHorizontally ifTrue:[
+        "
+         did someone react (i.e. has my extent changed) ?
+         (if not, we scroll horizontally)
+        "
+        lengthLimit notNil ifTrue:[
+            (self xOfCol:lengthLimit+1 inVisibleLine:cursorLine) <= self innerWidth
+            ifTrue:[
+                ^ self
+            ].
+        ].
+
+        xCol := (self xOfCol:cursorCol inVisibleLine:cursorLine) - viewOrigin x.
+        (xCol > (width * (5/6))) ifTrue:[
+            newOffset := viewOrigin x + (width // 2).
+        ] ifFalse:[
+            (xCol < (width * (1/6))) ifTrue:[
+                newOffset := 0 max: viewOrigin x - (width // 2).
+            ] ifFalse:[
+                newOffset := viewOrigin x
+            ]
+        ].
+        newOffset ~~ viewOrigin x ifTrue:[
+            self scrollHorizontalTo:newOffset.
+        ]
+    ].
+
+    "Modified: 6.3.1997 / 16:13:59 / cg"
+!
+
+sizeChanged:how
+    "scroll to origin, if all fits"
+
+    |xCol|
+
+    viewOrigin x ~~ 0 ifTrue:[
+        xCol := self xOfCol:cursorCol inVisibleLine:cursorLine.
+        (xCol < (width * (5/6))) ifTrue:[
+            self scrollHorizontalTo:0
+        ].
+    ].
+    self makeCursorVisible.
+    super sizeChanged:how.
+    self computeTopMargin.
+
+    "Modified: 10.7.1996 / 10:59:37 / cg"
+!
+
+tripleClickX:x y:y
+    "triple-click - select all"
+
+    self selectAll
+
+    "Created: / 09-04-2014 / 19:04:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditField methodsFor:'focus handling'!
+
+hasKeyboardFocus:aBoolean
+    "the view got/lost the keyboard focus"
+
+    |hadKeyboardFocus|
+
+    hadKeyboardFocus := hasKeyboardFocus.
+    super hasKeyboardFocus:aBoolean.
+
+    (acceptOnLostFocus and:[enabled and:[aBoolean not and:[hadKeyboardFocus]]]) ifTrue:[
+        model notNil ifTrue:[
+            model value = self argForChangeMessage ifTrue:[
+                ^ self
+            ]
+        ].
+        self accept.
+    ].
+
+    "Created: / 11.12.1996 / 16:57:50 / cg"
+    "Modified: / 6.12.1997 / 14:07:12 / cg"
+!
+
+showFocus:explicit
+    "the view got the keyboard focus 
+     (either explicit, via tabbing; or implicit, by pointer movement)
+      - change any display attributes as req'd."
+
+    "/ giving me the focus is like clicking on me
+    "/ (tell my enterFieldGroup ...)
+
+
+    (enabled or:[explicit]) ifTrue:[
+        clickAction notNil ifTrue:[clickAction value:self].
+        "/ mhmh - should we ALWAYS do this ?
+        explicit ifTrue:[ self makeCursorVisible ].
+        super showFocus:explicit
+    ]
+
+    "Modified: / 06-03-2007 / 21:11:17 / cg"
+!
+
+showNoFocus:explicit
+    "the view lost the keyboard focus 
+     (either explicit, via tabbing; or implicit, by pointer movement)
+      - change any display attributes as req'd."
+
+    self hideCursor.
+    super showNoFocus:explicit
+
+    "Modified: / 17.9.1998 / 15:10:04 / cg"
+!
+
+wantsFocusWithPointerEnter
+    "return true, if I want the focus when
+     the mouse pointer enters"
+
+    ^ UserPreferences current focusFollowsMouse ~~ false
+         and:[(styleSheet at:#'editField.requestFocusOnPointerEnter' default:true)
+         and:[self enabled 
+         and:[self isReadOnly not]]]
+! !
+
+!EditField methodsFor:'initialization & release'!
+
+computeTopMargin
+    |innerHeight rest|
+
+    innerHeight := self innerHeight.
+    rest := innerHeight - (gc font height + (gc font descent // 2)).
+    rest > 1 ifTrue:[
+        textStartTop := (rest // 2) + margin + topMargin
+    ].
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    <resource: #style (#'editField.cursorType'
+                       #'editField.cursorForegroundColor' 
+                       #'editField.cursorBackgroundColor'
+                       )>
+
+    super initStyle.
+
+    self computeTopMargin.
+
+    DefaultBackgroundColor notNil ifTrue:[
+        bgColor := DefaultBackgroundColor onDevice:self graphicsDevice.
+"/        bgColor ditherForm notNil ifTrue:[
+"/            bgColor := (bgColor copy) exactOrNearestOn:self graphicsDevice
+"/        ].
+        self viewBackground:bgColor.
+    ].
+    fgColor := DefaultForegroundColor.
+    selectionFgColor := DefaultSelectionForegroundColor.
+    selectionBgColor := DefaultSelectionBackgroundColor.
+
+    "/ enable this, when the focus detection works correctly (in dialogs)
+    cursorTypeNoFocus := #none.
+
+    cursorType := styleSheet at:#'editField.cursorType' default:cursorType.
+
+    cursorFgColor := styleSheet at:#'editField.cursorForegroundColor' default:cursorFgColor.
+    cursorBgColor := styleSheet at:#'editField.cursorBackgroundColor' default:cursorBgColor.
+
+    DefaultLevel notNil ifTrue:[
+        self level:DefaultLevel.
+    ].
+    DefaultBorderWidth notNil ifTrue:[
+        self borderWidth:DefaultBorderWidth.
+        DefaultBorderColor notNil ifTrue:[
+            self borderColor:DefaultBorderColor.
+        ].
+    ].
+
+    "Modified: / 21-05-1998 / 15:38:14 / cg"
+    "Modified (comment): / 05-10-2011 / 15:51:15 / az"
+!
+
+initialize
+    super initialize.
+    self initialHeight:(gc font height + gc font descent + (topMargin * 2)).
+
+    nFullLinesShown := 1.
+    nLinesShown := 1.
+    trimBlankLines := immediateAccept := acceptOnLostFocus := false.
+    acceptOnPointerLeave := false.
+    enabled := fixedSize := autoScrollHorizontally := true.
+    acceptOnLeave := acceptOnReturn := acceptOnTab := true.
+    cursorShown := true.
+    entryCompletionCharacter := #Tab.
+    acceptIfUnchanged := false.
+
+    leaveKeys isNil ifTrue:[
+        leaveKeys := self class defaultLeaveKeys.
+    ].
+    cursorMovementWhenUpdating := #endOfLine
+
+    "Modified: / 28.6.1999 / 18:08:17 / cg"
+! !
+
+!EditField methodsFor:'menu actions'!
+
+editMenu
+    "return a popUpMenu for the receiver"
+
+    <resource: #keyboard ( #Accept #Copy #Cut #Paste ) >
+    <resource: #programMenu>
+
+    |items m isReadOnly|
+
+    isReadOnly := (self isReadOnly == true or:[enabled == false]).
+    isReadOnly ifTrue:[
+        items := #(
+                ('Copy'   copySelection  Copy  )
+                )
+    ] ifFalse:[
+        items := #(
+                    ('Cut'    cut            Cut   )
+                    ('Copy'   copySelection  Copy  )
+                    ('Paste'  pasteOrReplace Paste )
+                   ).
+        (acceptAction notNil 
+        or:[model notNil and:[changeMsg notNil]]) ifTrue:[
+            immediateAccept ifFalse:[
+                items := items , #(
+                                        ('-'                     )
+                                        ('Accept'  accept  Accept)
+                                    ).
+            ].
+        ].
+    ].
+
+    isReadOnly ifFalse:[
+        items := items ,
+                    #(
+                        ('-'                     )
+                        ('Insert Unicode...'            insertUnicode )
+                    ).
+        CharacterSetView notNil ifTrue:[
+            items := items ,
+                        #(
+                            ('Special Characters...'    specialCharacters  OpenSpecialCharacterWindow )
+                        ).
+        ].
+    ].
+
+    m := PopUpMenu itemList:items resources:resources.
+
+    passwordCharacter notNil ifTrue:[
+        m disable:#copySelection
+    ].
+
+    self hasSelectionForCopy ifFalse:[
+        m disable:#copySelection
+    ].
+    self hasSelection ifFalse:[
+        m disable:#cut
+    ].
+    isReadOnly ifTrue:[
+        m disableAll:#(cut pasteOrReplace accept)
+    ].
+
+    ^ m
+
+    "Modified: / 17-01-2011 / 11:24:22 / cg"
+! !
+
+!EditField methodsFor:'private'!
+
+argForChangeMessage
+    "redefined to send use converted value (if I have one)"
+
+    |str|
+
+    str := self editValue.
+    (acceptIfUnchanged
+    and:[model notNil
+    and:[model value == self editValue]]) ifTrue:[
+        "/ copy to force valueHolder to trigger
+        str := str copy.
+    ].
+    ^ str
+!
+
+getListFromModel
+    "redefined to aquire the text via the aspectMsg - not the listMsg,
+     and to ignore updates resulting from my own change."
+
+    |val|
+
+    (model notNil and:[aspectMsg notNil]) ifTrue:[
+        aspectMsg == #value ifTrue:[
+            val := model value
+        ] ifFalse:[
+            val := model perform:aspectMsg
+        ].
+
+        "
+         ignore updates from my own change
+        "
+        lockUpdates ifTrue:[
+            lockUpdates := false.
+            val = self editValue ifTrue:[
+                ^ self
+            ]
+        ].
+
+        self editValue:val.
+    ]
+
+    "Modified: / 23.4.1998 / 10:10:37 / cg"
+!
+
+startAutoScrollDown:y
+    "no vertical scrolling in editfields"
+
+    ^ self
+!
+
+startAutoScrollUp:y
+    "no vertical scrolling in editfields"
+
+    ^ self
+!
+
+textChanged
+    "this is sent by mySelf (somewhere in a superclass) whenever
+     my contents has changed. 
+     A good place to add immediateAccept functionality and check for the
+     lengthLimit."
+
+    |string c|
+
+    super textChanged.
+    string := self contents.
+    lengthLimit notNil ifTrue:[
+	string size > lengthLimit ifTrue:[
+	    c := cursorCol.
+	    self contents:(string copyTo:lengthLimit).
+	    self flash.
+	    self cursorCol:c.
+	]
+    ].
+    immediateAccept ifTrue:[
+	self accept
+    ]
+!
+
+textChangedButNoSizeChange
+    "this is sent by mySelf (somewhere in a superclass) whenever
+     my contents has changed. 
+     A good place to add immediateAccept functionality."
+
+    super textChangedButNoSizeChange.
+    immediateAccept ifTrue:[
+        self accept
+    ]
+!
+
+updateBackground
+    "make my background grey, whenever either readOnly or disable"
+
+    |fg|
+
+    backgroundChannel notNil ifTrue:[^ self].
+
+    (self isReadOnly or:[enabled not]) ifTrue:[
+        self backgroundColor:(View defaultViewBackgroundColor).
+        enabled ifFalse:[
+            fg := StyleSheet colorAt:'editField.disabledForegroundColor' default:nil.
+            fg isNil ifTrue:[
+                fg := StyleSheet colorAt:'button.disabledForegroundColor' default:Color gray.
+            ].
+            self foregroundColor:fg.
+        ] ifTrue:[
+            self foregroundColor:DefaultForegroundColor.
+        ].
+    ] ifFalse:[
+        self backgroundColor:DefaultBackgroundColor.
+        self foregroundColor:DefaultForegroundColor.
+    ]
+
+    "Modified: / 3.8.1998 / 18:40:11 / cg"
+!
+
+visibleAt:visLineNr
+    "return the string at lineNr for display.
+     If there is a password character, return a string consisting of those only."
+
+    |s emptyText|
+
+    s := super visibleAt:visLineNr.
+    passwordCharacter notNil ifTrue:[
+        ^ String new:(s size) withAll:passwordCharacter
+    ].
+    (s isEmptyOrNil  
+    and:[ (emptyText := self emptyFieldReplacementText) notNil  
+    and:[ self hasFocus not 
+    and:[ visLineNr == 1 ]]])
+    ifTrue:[
+        ^ emptyText allItalic colorizeAllWith:Color lightGrey.
+    ].
+
+    ^ s
+
+    "Modified: 6.9.1995 / 12:25:06 / claus"
+! !
+
+!EditField methodsFor:'queries'!
+
+hasSelectionForCopy
+    "return true, if there is a selection which can be copied."
+
+    ^ passwordCharacter isNil and:[self hasSelection]
+!
+
+isInputField
+    "return true, if the receiver is some kind of input view,
+     i.e. it should (can) be part of an enterGroup.
+     Return true here"
+
+    ^ true
+
+    "Created: 4.3.1996 / 11:32:34 / cg"
+!
+
+preferredExtent
+    "return the preferred extent of this view.
+     That is the width of the string plus some extra, 
+     but not wider than half of the screen"
+
+    |string w h f|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    string := self contents.
+    (string isNil or:[string isBlank]) ifTrue:[
+        w := fontWidth * 20.  "space for 20 characters"
+    ] ifFalse:[
+        "length of current contents +  50% space to type more characters"
+        f := gc font onDevice:self graphicsDevice.
+        w := ((f widthOf:string) * 1.5) rounded. 
+        w := w + margin + margin.
+    ].
+    w := w min:(self graphicsDevice width // 2).
+
+    "/ h := f maxHeight + (f maxDescent * 2) + (margin * 2).
+    h := fontHeight + topMargin + (margin * 2).
+
+    ^ w rounded @ h rounded
+
+    "Modified: / 6.9.1995 / 19:24:06 / claus"
+    "Modified: / 21.5.1998 / 02:13:35 / cg"
+!
+
+specClass
+    "redefined, since the name of my specClass is nonStandard (i.e. not EditFieldSpec)"
+
+    self class == EditField ifTrue:[^ InputFieldSpec].
+    ^ super specClass
+
+    "Modified: / 5.9.1995 / 17:28:27 / claus"
+    "Modified: / 31.10.1997 / 19:48:59 / cg"
+!
+
+tabMeansNextField
+    "return true, if Tab character should shift focus to the next field"
+
+    "if I have a completionBlock, I want my Tabs ..."
+
+    ^ self entryCompletionBlock isNil or:[entryCompletionCharacter ~~ #Tab]
+
+    "Created: 7.2.1996 / 19:16:38 / cg"
+! !
+
+!EditField methodsFor:'realization'!
+
+realize
+    "scroll back to beginning when realized"
+
+    viewOrigin := 0 @ viewOrigin y.
+    super realize
+
+    "Created: 24.7.1997 / 18:23:15 / cg"
+! !
+
+!EditField methodsFor:'scrolling'!
+
+makeColVisible:col inLine:lineNr
+    "don't scroll for the cursor, if its beyond the text and a lengthLimit
+     is present."
+
+    |wText innerWidth colToMakeVisible|
+
+    innerWidth := self innerWidth.
+    colToMakeVisible := col.
+
+    lengthLimit notNil ifTrue:[
+        (self xOfCol:col inVisibleLine:1) <= innerWidth
+        ifTrue:[
+            ^ self
+        ].
+        (self xOfCol:lengthLimit inVisibleLine:1) <= innerWidth
+        ifTrue:[
+            ^ self
+        ].
+        (col == cursorCol and:[col > lengthLimit]) ifTrue:[
+            colToMakeVisible := lengthLimit
+        ].
+    ].
+
+    super makeColVisible:colToMakeVisible inLine:lineNr.
+
+    "/ new:
+    "/ care to make the most possible visible
+    viewOrigin x > 0 ifTrue:[
+        wText := self widthOfLine:lineNr.
+        wText <= innerWidth ifTrue:[
+            self scrollHorizontalTo:0
+        ]
+    ]
+
+    "Modified: / 06-09-1995 / 13:57:53 / claus"
+    "Modified: / 04-08-2010 / 17:30:17 / cg"
+! !
+
+!EditField methodsFor:'selections'!
+
+copySelection
+    "refuse to copy a password to the clipboard"
+
+    passwordCharacter notNil ifTrue:[
+        self beep.
+        ^ self
+    ].
+    ^ super copySelection
+!
+
+selectAll
+    "select the whole text.
+     redefined to send super selectFrom... since we dont want the
+     cursor to be moved in this case."
+
+    |len|
+
+    list isNil ifTrue:[
+        self unselect
+    ] ifFalse:[
+        len := (self listAt:1) size.
+        len ~~ 0 ifTrue:[
+            self selectFromLine:1 col:1 toLine:1 col:len.
+        ].
+        typeOfSelection := nil
+    ]
+
+    "Modified: 28.2.1997 / 19:16:21 / cg"
+!
+
+selectFrom:firstColToSelect
+    "select the right part of the text"
+
+    |len|
+
+    list isNil ifTrue:[
+        self unselect
+    ] ifFalse:[
+        len := (self listAt:1) size.
+        firstColToSelect <= len ifTrue:[
+            self selectFromLine:1 col:firstColToSelect toLine:1 col:len.
+        ].
+        typeOfSelection := nil
+    ]
+!
+
+validateNewSelection
+    "make certain that only one line is ever selected"
+
+    selectionEndLine notNil ifTrue:[
+        selectionEndLine > 1 ifTrue:[
+            selectionEndLine := 2. selectionEndCol := 0
+        ]
+    ].
+! !
+
+!EditField class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/EditField.st,v 1.235 2014-04-13 21:00:32 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/EditField.st,v 1.235 2014-04-13 21:00:32 stefan Exp $'
+! !
+
--- a/EditTextView.st	Tue May 13 23:20:31 2014 +0100
+++ b/EditTextView.st	Sun May 18 09:45:08 2014 +0100
@@ -9,8 +9,6 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 "
-'From Smalltalk/X, Version:6.2.3.0 on 18-02-2014 at 18:37:41'                   !
-
 "{ Package: 'stx:libwidg' }"
 
 TextView subclass:#EditTextView
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EditTextViewCompletionSupport.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,313 @@
+"{ Package: 'stx:libwidg' }"
+
+Object subclass:#EditTextViewCompletionSupport
+	instanceVariableNames:'completionView completionProcess editView autoSelect'
+	classVariableNames:'LastCompletions'
+	poolDictionaries:''
+	category:'Views-Text'
+!
+
+!EditTextViewCompletionSupport class methodsFor:'documentation'!
+
+documentation
+"
+    An abstract supperclass to support completion in text views.
+    Individual completion engines may create a subclass of 
+    EditTextCompletionSupport and customize it.
+
+    Basucally, they have to implement #computeCompletions
+
+    [author:]
+        Claus Gittinger
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!EditTextViewCompletionSupport class methodsFor:'instance creation'!
+
+for:anEditView
+    ^ self new editView:anEditView
+! !
+
+!EditTextViewCompletionSupport class methodsFor:'queries'!
+
+isAbstract
+    ^true
+
+    "Created: / 26-09-2013 / 16:22:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditTextViewCompletionSupport methodsFor:'accessing'!
+
+editView:anEditTextView
+    editView := anEditTextView.
+! !
+
+!EditTextViewCompletionSupport methodsFor:'events'!
+
+buttonPress:button x:x y:y
+    self closeCompletionView.
+!
+
+editViewLostFocus
+    completionView notNil ifTrue:[
+        "/ this is a hack for Windows:
+        "/ on windows, an activate:false event is first sent to my textView,
+        "/ then an activate is sent to the completion popup.
+        "/ this is done BEFORE the buttonPress event is delivered.
+        "/ therefore, allow for the activate of the completionMenu and it's button event to be processed.
+        "/ before forcing it to be closed...
+        editView graphicsDevice anyButtonPressed ifTrue:[
+            editView sensor pushUserEvent:#editViewLostFocus for:self.
+        ] ifFalse:[
+            self closeCompletionView
+        ]
+    ].
+!
+
+handleKeyPress:key x:x y:y
+    "return true, if I have eaten this keypress"
+
+    |ch completeImmediate eatCursorLeftOrRight|
+
+    completeImmediate := UserPreferences current immediateCodeCompletion.
+
+    "/ open on CTRL- or TAB-key?
+    (completionView isNil or:[completionView realized not]) ifTrue:[
+        editView hasSelection ifFalse:[
+            ((ch := editView characterBeforeCursor) notNil "/ i.e. not at begin of line
+            and:[ ch isLetterOrDigit or:[ch == $_] ]) ifTrue:[
+                (key == #Control_L or:[ key == #Ctrl or:[ key == #Control_R or:[ key == #Control]]]) ifTrue:[
+                    UserPreferences current codeCompletionOnControlKey ifTrue:[
+                        autoSelect := true.
+                        self updateCompletionList
+                    ]
+                ].
+                ((key == #Tab) and:[editView sensor shiftDown not]) ifTrue:[
+                    UserPreferences current codeCompletionOnTabKey ifTrue:[
+                        autoSelect := true.
+                        self updateCompletionList.
+                        ^ true
+                    ].
+                ]
+            ].
+        ].
+        ^ false.
+    ].
+
+    "/ key for completion view ? (careful: do not forward too many, it would disturb user's typing)
+    key isCharacter ifFalse:[
+        "/ forward to menu
+        (completionView notNil) ifTrue:[
+            eatCursorLeftOrRight := false.
+"/                                    completeImmediate not
+"/                                    or:[ editView sensor shiftDown 
+"/                                    or:[ editView sensor ctrlDown ]].
+            (key == #CursorDown 
+                or:[ (key == #CursorUp)
+                or:[ ((key == #CursorLeft) and:[eatCursorLeftOrRight])
+                or:[ ((key == #CursorRight) and:[eatCursorLeftOrRight])
+                or:[ ((key == #Return) and:[ completionView hasSelection ])
+            ]]]]) ifTrue:[
+                "/ only with shift - normal user typing should not interfere with completion
+                true "editView sensor shiftDown" ifTrue:[
+                    "/ forward to completion view
+                    completionView sensor pushUserEvent:#value for:[ completionView keyPress:key x:0 y:0 ].
+                    ^ true.
+                ].
+            ].
+
+            (key == #Control_L or:[ key == #Control_R or:[ key == #Control or:[ key == #Ctrl ]]]) ifTrue:[
+                "/ CTRL is a toggle
+                self closeCompletionView.   
+                ^ true.
+                "/ ^ false
+            ].
+            (key == #Escape) ifTrue:[
+                self closeCompletionView.
+                ^ true  "/ EAT
+            ].
+            "/ shift does not close
+            (key == #Shift_L or:[ key == #Shift_R or:[ key == #Shift]]) ifTrue:[
+                ^ false "/ don' eat
+            ].
+
+            (key == #BackSpace) ifTrue:[
+                ^ false "/ don' eat
+            ].
+            self closeCompletionView.
+            ^ false "/ don' eat
+        ].
+    ].
+    ^ false.
+!
+
+postKeyPress:key
+    UserPreferences current immediateCodeCompletion ifFalse:[
+        "/ only update, if already open
+        completionView isNil ifTrue:[^ self].
+    ].
+
+    (key == #BackSpace or:[key == #BasicBackspace]) ifTrue:[
+        autoSelect := false.
+        self updateCompletionList.
+        ^ self
+    ].
+
+    key isCharacter ifTrue:[
+        key isSeparator ifTrue:[
+            self closeCompletionView
+        ] ifFalse:[
+            autoSelect := false.
+            self updateCompletionList.
+        ].
+        ^ self
+    ].
+! !
+
+!EditTextViewCompletionSupport methodsFor:'private'!
+
+computeCompletions
+    "Actually compute the completions and update the completion view."
+
+    self subclassResponsibility
+
+    "Created: / 26-09-2013 / 17:35:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+release
+    self stopCompletionProcess.
+    self closeCompletionView.
+    super release
+!
+
+startCompletionProcess
+    "start the code completion process in the background"
+
+    |initialList cursorX cursorY|
+
+    "/ terminate any previous process
+    self stopCompletionProcess.
+
+    (editView sensor hasKeyPressEventFor:nil) ifTrue:[ 
+        "/ 'cl' printCR.
+        self closeCompletionView. 
+        ^ self
+    ].
+    ((cursorX := editView xOfCursor) isNil
+    or:[ (cursorY := editView yOfCursor) isNil ]) ifTrue:[
+        "/ no cursor - user is selecting, or cursor has been scrolled out of sight.
+        "/ 'cl2' printCR.
+        self closeCompletionView. 
+        ^ self
+    ].
+
+    completionView isNil ifTrue:[
+        initialList := #( 'Busy...' ).
+        "/ 'op1' printCR.
+    ] ifFalse:[
+        initialList := completionView list.
+        "/ 'op2' printCR.
+    ].
+    self openCompletionView:initialList.
+
+    completionProcess := 
+        [
+            self computeCompletions.
+        ] forkAt:(Processor activePriority - 1).
+
+    "Modified: / 26-09-2013 / 17:36:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+stopCompletionProcess
+    "kill any background completion process"
+
+    |p|
+
+    (p := completionProcess) notNil ifTrue:[
+        completionProcess := nil.
+        p terminate.
+    ].
+!
+
+updateCompletionList
+    "called for keypress events"
+
+    self startCompletionProcess.
+! !
+
+!EditTextViewCompletionSupport methodsFor:'private-API'!
+
+closeCompletionView
+    |v|
+
+    (v := completionView) notNil ifTrue:[
+        completionView := nil.
+        "/ let it close itself - avoids synchronization problems
+        v sensor
+            pushUserEvent:#value
+            for:[ v topView destroy ]
+    ].
+!
+
+openCompletionView
+    "Opens the completion view with an initial list. Called as soon as
+     completion is initiated but completion options are not yet computed."
+
+    self openCompletionView: (Array with: 'Busy...')
+
+    "Created: / 26-09-2013 / 17:06:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+openCompletionView: list
+    "Makes sure the completion view is opened and with given `list`."
+    
+    | movePos topView |
+
+    "/ move the window
+    movePos := editView device translatePoint:(editView xOfCursor @ editView yOfCursor) fromView:editView toView:nil.
+    movePos := movePos - (editView viewOrigin x @ 0).
+    "/ currently, we have to stay away a bit, to avoid getting the focus
+    movePos := movePos + (60 @ (editView font height)).
+
+    completionView isNil ifTrue:[
+        completionView := CodeCompletionHelpMenuView new.
+        completionView name:'completion'.
+        completionView level:0.
+        completionView list:list.
+        completionView enable:false.
+        completionView extent:completionView preferredExtentForContents.
+        "/ completionView font: editView font.
+        topView := CodeCompletionHelpView with:completionView.
+        topView editView:editView.
+    ] ifFalse:[
+        completionView list:list.
+        topView := completionView topView.
+    ].
+    topView ~~ completionView ifTrue:[
+        topView resizeToFit.
+"/        movePos := editView device 
+"/                        translatePoint:((editView right - topView width) @ (editView top)) 
+"/                        fromView:editView toView:nil.
+        topView origin:movePos.
+    ].
+
+    "Created: / 26-09-2013 / 17:07:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!EditTextViewCompletionSupport class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/EditTextViewCompletionSupport.st,v 1.7 2014-03-24 09:01:58 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/EditTextViewCompletionSupport.st,v 1.7 2014-03-24 09:01:58 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EnterBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,725 @@
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+DialogBox subclass:#EnterBox
+	instanceVariableNames:'labelField enterField trimBlanks'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!EnterBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+   Historic note:
+        originally, ST/X had separate classes for the various entry methods;
+        there were YesNoBox, EnterBox, InfoBox and so on.
+        In the meantime, the DialogBox class (and therefore its alias: Dialog)
+        is going to duplicate most funcionality found in these classes.
+
+        In the future, those existing subclasses' functionality is going to
+        be moved fully into Dialog, and the subclasses will be replaced by dummy
+        delegators. (They will be kept for backward compatibility, though).
+
+
+    this class implements a pop-up box to enter some string
+    with 2 buttons; a cancel button, and a trigger-action button.
+    Normally, the box is created and opened with the single message:
+        EnterBox request:'someString'
+    which returns nil if aborted and the entered string otherwise.
+
+    However, to control more details of the box, it may also be created first
+    (EnterBox new) and then modified as appropriate before its shown.
+
+    For example, the boxes title can be changed with: 
+
+        aBox title:'some string'
+
+    The two button-labels default to 'abort' and 'ok'; 
+    they can be changed using:
+
+        aBox okText:'someString'
+        aBox abortText:'someString'
+
+    The initial text in the enterfield can be set using:
+
+        aBox initialText:'someString'
+
+    when the ok-button is pressed, an action is performed, which is
+    set using:
+
+        aBox action:[ ... ]
+
+    the abort-action defaults to no-action, but can also be set.
+
+    The box can be opened modal (i.e. the currently active view will
+    be suspended) or modeless. The default is modal (i.e. sending #open
+    is equivalent to #openModal).
+
+    Most of the above is also available via messages to Dialog for ST-80 compatibility
+    (i.e. Dialog request:someString' is the same as EnterBox request:'someString')
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DialogBox
+        EnterBox2 YesNoBox ListSelectionBox FileSelectionBox FileSaveBox
+        EditField EditTextView
+        EnterFieldGroup
+"
+!
+
+examples 
+"
+    examples (for ST-80 compatibility, please use Dialog messages):
+
+    simple (most common):
+                                                                        [exBegin]
+        |someString|
+
+        someString := EnterBox request:'enter a string'.
+        Transcript showCR:someString
+                                                                        [exEnd]
+
+
+    creating first, setting actions and manually opening:
+                                                                        [exBegin]
+        |box|
+
+        box := EnterBox new.
+        box title:'your name please:'.
+        box action:[:arg | Transcript showCR:'entered: ''' , arg printString , ''''].
+        box open
+                                                                        [exEnd]
+
+
+    turning off trimming of leading/trailing spaces (seldom required):
+                                                                        [exBegin]
+        |box|
+
+        box := EnterBox new.
+        box title:'your name please:'.
+        box action:[:arg | Transcript showCR:'entered: ''' , arg printString , ''''].
+        box trimBlanks:false.
+        box open
+                                                                        [exEnd]
+
+
+    non-modal
+    (just for the demo; it does not really make sense,
+     since cancel-button has no effect):
+                                                                        [exBegin]
+        |box|
+
+        box := EnterBox new.
+        box title:'your name please:'.
+        box action:[:arg | Transcript showCR:'entered: ' , arg printString].
+        box openModeless
+                                                                        [exEnd]
+
+
+    for easier instance creation, there are also some combination methods:
+                                                                        [exBegin]
+        |box|
+
+        box := EnterBox 
+                 title:'your name please:'
+                 action:[:arg | Transcript showCR:'entered: ' , arg printString].
+        box open
+                                                                        [exEnd]
+
+
+    If the box is needed to ask for a simple string, you can also use the
+    #request method, to bring up a box, let it ask for something and return
+    the entered string. This method will return nil, if the box was
+    closed with the 'abort' button.
+    Example:
+                                                                        [exBegin]
+        |box string|
+
+        box := EnterBox request:'input some string:'.
+        string isNil ifTrue:[
+            Transcript showCR:'no input'
+        ] ifFalse:[
+            Transcript showCR:('the entered string was: ' , string)
+        ]
+                                                                        [exEnd]
+
+
+    of course, this can be written shorter as:
+                                                                        [exBegin]
+        |string|
+
+        string := EnterBox request:'input some string:'.
+        string isNil ifTrue:[
+            Transcript showCR:'no input'
+        ] ifFalse:[
+            Transcript showCR:('the entered string was: ' , string)
+        ]
+                                                                        [exEnd]
+
+
+    A box for passwords is created with:
+                                                                        [exBegin]
+        |box|
+
+        box := EnterBox 
+                 title:'your name please:'
+                 action:[:arg | Transcript showCR:'entered: ' , arg printString].
+        box enterField passwordCharacter:$*.
+        box showAtPointer
+                                                                        [exEnd]
+
+
+    or simply:
+                                                                        [exBegin]
+        |string|
+
+        string := EnterBox requestPassword:'enter your password:'.
+        Transcript showCR:string.
+                                                                        [exEnd]
+
+    ATTENTION:
+    for ST-80 compatibility, please use protocol from Dialog 
+    (which is an alias for DialogBox):
+                                                                        [exBegin]
+        |string|
+
+        string := Dialog request:'input some string:'.
+        string isNil ifTrue:[
+            Transcript showCR:'no input'
+        ] ifFalse:[
+            Transcript showCR:('the entered string was: ' , string)
+        ]
+                                                                        [exEnd]
+    and:    
+                                                                        [exBegin]
+        |string|
+
+        string := Dialog requestPassword:'enter your password:'.
+        Transcript showCR:string.
+                                                                        [exEnd]
+"
+
+    "Modified: 16.11.1995 / 21:28:11 / cg"
+! !
+
+!EnterBox class methodsFor:'instance creation'!
+
+action:aBlock
+    "create and return a new EnterBox 
+     which will evaluate aBlock when 'ok' is pressed"
+
+    ^ (self new) action:aBlock
+
+    "(EnterBox action:[:string | Transcript showCR:string]) showAtPointer"
+!
+
+title:titleString
+    "create and return a new EnterBox with title aString"
+
+    ^ self new title:titleString
+!
+
+title:titleString action:aBlock
+    "create and return a new EnterBox with title aString,
+     which will evaluate aBlock when 'ok' is pressed"
+
+    ^ (self title:titleString) action:aBlock
+!
+
+title:titleString okText:okText abortText:abortText action:aBlock
+    "create and return a new EnterBox with title aString, and buttons showing
+     okText and abortText; it will evaluate aBlock when 'ok' is pressed"
+
+    ^ (self title:titleString okText:okText action:aBlock) abortText:abortText 
+!
+
+title:titleString okText:okText action:aBlock
+    "create and return a new EnterBox with title aString, and ok button showing
+     okText; it will evaluate aBlock when 'ok' is pressed"
+
+    ^ (self title:titleString action:aBlock) okText:okText
+! !
+
+!EnterBox class methodsFor:'defaults'!
+
+defaultExtent
+    "return the default extent of my instances.
+     The value returned here is usually ignored, and
+     the value from preferredExtent taken instead."
+
+    ^ (Screen current pixelPerMillimeter * (60 @ 20)) rounded
+
+    "Modified: / 22.1.1998 / 09:57:26 / md"
+    "Modified: / 27.7.1998 / 20:15:52 / cg"
+!
+
+minExtent
+    ^ self defaultExtent
+! !
+
+!EnterBox class methodsFor:'easy startup'!
+
+request:aTitle
+    "create and show an enterBox asking for aTitle.
+     Return the enterred string or an empty string (if abort was pressed).
+     The string may be empty, in case return was pressed immediately."
+
+    ^ self new request:aTitle
+
+    "
+     EnterBox request:'enter a string'
+    "
+
+    "Modified: 27.1.1996 / 14:34:23 / cg"
+!
+
+requestPassword:aTitle
+    "create and show an enterBox asking for aTitle.
+     The box is setup to NOT display entered characters (as with password entry).
+     Return the entered string or nil (if abort was pressed).
+     The string may be empty, in case return was pressed immediately."
+
+    ^ self new requestPassword:aTitle
+
+    "
+     |s|
+
+     s := EnterBox requestPassword:'enter a string'.
+     Transcript showCR:'you entered: ' , s
+    "
+
+    "Created: 16.11.1995 / 21:25:08 / cg"
+! !
+
+!EnterBox methodsFor:'accessing-behavior'!
+
+entryCompletionBlock:aBlock
+    "define an entryCompletion block; if nonNil, that one
+     is evaluated if TAB is pressed in the field and should
+     try to complete the input.
+     The block gets the current contents and the field itself as optional arguments
+     (i.e. it can be a 0, 1 or 2-arg block).
+     Typically used with fileName-boxes."
+
+    enterField entryCompletionBlock:aBlock
+
+    "Modified: 22.5.1996 / 15:19:31 / cg"
+!
+
+trimBlanks:aBoolean
+    "set/clear blank trimming in the returned string.
+     By default, leading and trailing spaces are removed from the input;
+     setting trimBlanks to false disables this behavior.
+     (not normally useful in most applications)"
+
+    trimBlanks := aBoolean
+
+    "Created: 22.5.1996 / 15:23:45 / cg"
+! !
+
+!EnterBox methodsFor:'accessing-components'!
+
+enterField
+    "provide access to the entryfield"
+
+    ^ enterField
+
+    "Created: 16.11.1995 / 21:23:48 / cg"
+!
+
+labelField
+    "provide access to the labelfield"
+
+    ^ labelField
+
+    "Created: 16.11.1995 / 21:23:48 / cg"
+! !
+
+!EnterBox methodsFor:'accessing-contents'!
+
+contents
+    "return my contents"
+
+    ^ enterField contents
+!
+
+contents:aString
+    "set my contents"
+
+    enterField contents:aString
+!
+
+initialAnswer:aString
+    "for protocol compatibility - an alias for initialText:"
+
+    self initialText:aString
+!
+
+initialText:aString
+    "define the initial text in the enterfield. all will be selected initially"
+
+    self initialText:aString selected:true
+!
+
+initialText:aString selectFrom:start to:stop
+    "define the initial text in the enterfield, and the part to be selected"
+
+    self initialText:aString.
+    self selectFromCharacterPosition:start to:stop
+!
+
+initialText:someString selected:selected
+    "define the initial text in the enterfield; optionally, all is selected initially"
+
+    enterField initialText:someString selected:selected
+!
+
+selectFrom:start to:stop
+    "define the initial selection in the enterfield"
+
+    enterField selectFromLine:1 col:start toLine:1 col:stop
+!
+
+selectFromCharacterPosition:start to:stop
+    "define the initial selection in the enterfield"
+
+    enterField selectFromCharacterPosition:start to:stop
+! !
+
+!EnterBox methodsFor:'accessing-look'!
+
+noCancel
+    "make the cancel button invisible - i.e. only the ok button is shown.
+     Not useful here, but useful with display-only textBoxes."
+
+    abortButton beInvisible.
+!
+
+title:aString
+    "set the title to be displayed at top of enterBox"
+
+    |oldSize|
+
+    aString ~= labelField label ifTrue:[
+        oldSize := labelField extent.
+        labelField label:aString.
+        labelField forceResize.
+
+        shown ifTrue:[
+            labelField extent ~= oldSize ifTrue:[
+                self resize
+            ]
+        ] ifFalse:[
+            self sizeChanged:nil.
+        ]
+    ]
+!
+
+title:titleString okText:okString
+    "set title and text in okbutton"
+
+    (titleString ~= labelField label or:[okString ~= okButton label]) ifTrue:[
+        okButton label:okString.
+        okButton resize.
+        labelField label:titleString.
+        labelField forceResize.
+        shown 
+            ifTrue:[self resize]
+            ifFalse:[ self sizeChanged:nil].
+    ]
+!
+
+title:titleString okText:okString abortText:abortString
+    "set title and texts in the buttons"
+
+    (titleString ~= labelField label 
+     or:[okString ~= okButton label
+     or:[abortString ~= abortButton label]]) ifTrue:[
+        okButton label:okString.
+        okButton resize.
+        abortButton label:abortString.
+        abortButton resize.
+        labelField label:titleString.
+        labelField forceResize.
+        shown 
+            ifTrue:[self resize]
+            ifFalse:[ self sizeChanged:nil].
+    ]
+! !
+
+!EnterBox methodsFor:'change & update'!
+
+update:something with:someArgument from:changedObject
+    "sent if my enterbox thinks it needs more real-estate ..."
+
+    changedObject == enterField ifTrue:[
+	something == #preferredExtent ifTrue:[
+	    shown ifTrue:[self resizeUnderPointer].
+	    ^ self
+	]
+    ].
+    super update:something with:someArgument from:changedObject
+! !
+
+!EnterBox methodsFor:'initialization'!
+
+addEnterField:aWidget
+    |space2 innerWidth|
+
+    enterField notNil ifTrue:[
+        enterField removeDependent:self.
+        enterField destroy.
+        enterField := nil.
+    ].
+
+    space2 := 2 * ViewSpacing.
+    innerWidth := width - space2.
+
+    self addComponent:(enterField := aWidget).
+    enterField 
+        width:1.0;
+        origin:[0.0 @ (space2 + labelField preferredHeight "height")];
+        leftInset:ViewSpacing-enterField borderWidth; 
+        rightInset:1 "ViewSpacing".
+
+    enterField addDependent:self. "to get preferredExtent-changes"
+
+    self makeTabable:enterField
+
+    "Modified: / 23-01-2012 / 17:30:17 / cg"
+!
+
+createEnterField
+    "this has been extracted from the initialize method
+     to allow redefinition in subclasses. (FilenameEnterBox for example).
+     It shall return a new instance of the desired editField class."
+
+    |widget|
+
+    widget := EditField new.
+    widget leaveAction:[:key | self okPressed].
+    ^ widget
+!
+
+initialize
+    |space2 innerWidth|
+
+    super initialize.
+
+    self addAbortAndOkButtons.
+
+    trimBlanks := true.
+    label := resources string:'Enter'.
+
+    space2 := 2 * ViewSpacing.
+    innerWidth := width - space2.
+
+    labelField := Label in:self.
+    labelField 
+        label:''; 
+        borderWidth:0;
+        adjust:#left;
+        origin:(0.0 @ ViewSpacing) extent:[1.0 @ labelField height];
+        leftInset:ViewSpacing; 
+        rightInset:ViewSpacing.
+
+    self addEnterField:(self createEnterField).
+    yPosition := enterField bottom + ViewSpacing.
+!
+
+reAdjustGeometry
+    "sent late in snapin processing - gives me a chance
+     to resize for new font dimensions"
+
+    super reAdjustGeometry.
+    labelField resize.
+    okButton resize.
+    abortButton resize.
+    self resize
+! !
+
+!EnterBox methodsFor:'queries'!
+
+preferredExtent 
+    "compute the boxes preferredExtent from the components' sizes"
+
+    |wWanted hWanted wPanel vs2 min 
+     labelPref enterPref panelPref|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    panelPref := buttonPanel preferredExtent.
+    labelPref := labelField preferredExtent.
+    enterPref := enterField preferredExtent.
+    wWanted := (labelPref x max:enterPref x).
+    wPanel := panelPref x.
+    wPanel > wWanted ifTrue:[
+        wWanted := wPanel
+    ].
+    hWanted := labelPref y + ViewSpacing + enterPref y +
+               ViewSpacing + panelPref y + ViewSpacing.
+    verticalPanel notNil ifTrue:[
+        hWanted := hWanted + ViewSpacing + (verticalPanel preferredHeight). 
+    ].
+
+    min := self class minExtent.
+    wWanted <  min x ifTrue:[
+        wWanted :=  min x
+    ].
+    hWanted <  min y ifTrue:[
+        hWanted :=  min y
+    ].
+    vs2 := ViewSpacing * 2.
+    ^ (wWanted + vs2) @ (hWanted + vs2)
+
+    "Modified: / 22.1.1998 / 09:57:55 / md"
+    "Modified: / 27.7.1998 / 20:18:41 / cg"
+! !
+
+!EnterBox methodsFor:'startup'!
+
+request
+    "open the box and return the entered string
+     or an empty string, if abort was pressed"
+
+    ^ self requestOnCancel:''
+
+    "Modified: 27.1.1996 / 14:50:01 / cg"
+!
+
+request:title
+    "set the title, open the box and return the entered string,
+     or  the empty string, if abort was pressed."
+
+    ^ self request:title onCancel:''
+
+    "
+     EnterBox request:'enter some string:' 
+
+     |bx|
+     bx := EnterBox new.
+     bx label:'foo bar baz'.
+     bx request:'enter some string:' 
+    "
+
+    "Created: 7.12.1995 / 23:12:19 / cg"
+    "Modified: 27.1.1996 / 14:49:23 / cg"
+!
+
+request:title onCancel:cancelValue
+    "set the title, open the box and return the entered string,
+     or cancelValue if abort was pressed."
+
+    self title:title.
+    ^ self requestOnCancel:cancelValue
+
+    "
+     EnterBox request:'enter some string:' onCancel:nil
+
+     |bx|
+     bx := EnterBox new.
+     bx label:'foo bar baz'.
+     bx request:'enter some string:' onCancel:#foo 
+    "
+
+    "Created: 7.12.1995 / 23:12:19 / cg"
+    "Modified: 27.1.1996 / 14:48:39 / cg"
+!
+
+requestOnCancel:cancelValue
+    "open the box and return the entered string 
+     or cancelValue, if abort was pressed"
+
+    self action:[:string | ^ string].
+    self open.
+    ^ cancelValue value
+
+    "Created: 27.1.1996 / 14:47:47 / cg"
+!
+
+requestPassword:title
+    "set the title, set password mode, open the box and return the entered string 
+     or nil, if abort was pressed"
+
+    ^ self requestPassword:title onCancel:nil
+
+    "Created: 16.11.1995 / 21:25:33 / cg"
+    "Modified: 27.1.1996 / 14:52:36 / cg"
+!
+
+requestPassword:title onCancel:cancelValue
+    "set the title, set password mode, open the box and return the entered string 
+     or cancelValue, if abort was pressed"
+
+    enterField bePassword.
+    ^ self request:title onCancel:cancelValue
+
+    "Modified: 27.1.1996 / 14:34:07 / cg"
+    "Created: 27.1.1996 / 14:52:13 / cg"
+! !
+
+!EnterBox methodsFor:'user actions'!
+
+actionArgument
+    "fetch the entered string, trim spaces and return it"
+
+    |string|
+
+    string := self contents.
+    string isNil ifTrue:[
+        string := ''
+    ] ifFalse:[
+        trimBlanks ifTrue:[
+            string := string withoutSeparators
+        ]
+    ].
+
+    ^ string
+! !
+
+!EnterBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/EnterBox.st,v 1.70 2013-04-04 09:33:30 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/EnterBox.st,v 1.70 2013-04-04 09:33:30 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EnterBox2.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,157 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+EnterBox subclass:#EnterBox2
+	instanceVariableNames:'okButton2 okAction2'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!EnterBox2 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+   Historic note:
+        originally, ST/X had separate classes for the various entry methods;
+        there were YesNoBox, EnterBox, InfoBox and so on.
+        In the meantime, the DialogBox class (and therefore its alias: Dialog)
+        is going to duplicate most funcionality found in these classes.
+
+        In the future, those existing subclasses' functionality is going to
+        be moved fully into Dialog, and the subclasses will be replaced by dummy
+        delegators. (They will be kept for backward compatibility, though).
+
+    An EnterBox2 is like an EnterBox but with 2 action buttons.
+    This is used (for example) in the search-boxes, where two ok-buttons
+    'find-previous' and 'find-next' are needed in addition to the abort button.
+    The protocol is like that of EnterBox, the additional buttons label
+    can be set with 'okText2:aString' and its action with 'action2:aBlock'.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DialogBox
+        EnterBox YesNoBox
+        ListSelectionBox FileSelectionBox FileSaveBox
+"
+
+    "Modified: 25.4.1996 / 16:47:41 / cg"
+! !
+
+!EnterBox2 class methodsFor:'instance creation'!
+
+title:titleString okText1:text1 okText2:text2 abortText:abortText
+		  action1:block1 action2:block2
+    "create and return a new EnterBox-with-2 buttons
+     and define its text, button-labels and actions"
+
+    ^ (super title:titleString 
+	    okText:text1 
+	 abortText:abortText
+	    action:block1) okText2:text2 action2:block2
+! !
+
+!EnterBox2 methodsFor:'accessing'!
+
+action2:aBlock
+    "set the action to be performed when user presses the 2nd ok-button;
+     aBlock must be nil or a block with one argument "
+
+    okAction2 := aBlock
+!
+
+okText2:aString
+    "set the text to be displayed in the 2nd ok-button"
+
+    aString ~= okButton2 label ifTrue:[
+	okButton2 label:aString.
+	okButton2 resize.
+	shown ifTrue:[self resize]
+    ]
+!
+
+okText2:aString action2:aBlock
+    "set the text to be displayed in the 2nd ok-button,
+     and its action"
+
+    self okText2:aString.
+    okAction2 := aBlock
+! !
+
+!EnterBox2 methodsFor:'initialization'!
+
+initialize
+    super initialize.
+
+    "
+     add a second ok-button (a return button)
+    "
+    okButton2 := Button okButton.
+    okButton2 name: 'okButton2'.
+    buttonPanel addSubView:okButton2 before:okButton.
+    okButton2 model:self; change:#ok2Pressed.
+
+    "
+     the old (see superclass) ok-button is no longer a return-button
+    "
+    okButton isReturnButton:false.
+
+    enterField leaveAction:[:key | self ok2Pressed]
+
+    "Modified: / 29-08-2013 / 12:20:15 / cg"
+! !
+
+!EnterBox2 methodsFor:'user interaction'!
+
+keyPress:aKey x:x y:y
+    "return-key duplicates ok-function if acceptReturnAsOK is true"
+
+    <resource: #keyboard (#Return)>
+
+    acceptReturnAsOK ifTrue:[
+        (aKey == #Return) ifTrue:[^ self ok2Pressed]
+    ].
+    super keyPress:aKey x:x y:y
+
+    "Modified: 7.3.1996 / 13:16:37 / cg"
+!
+
+ok2Pressed
+    "user pressed 2nd ok button - evaluate action"
+
+    okButton2 turnOffWithoutRedraw.
+    self hideAndEvaluate:okAction2
+! !
+
+!EnterBox2 class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/EnterBox2.st,v 1.27 2013-08-29 10:28:00 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EnterFieldGroup.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,802 @@
+"
+ COPYRIGHT (c) 1992 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Object subclass:#EnterFieldGroup
+	instanceVariableNames:'fields currentField leaveAction wrap leaveOnTabLast'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support'
+!
+
+!EnterFieldGroup class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1992 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    EnterFieldGroup controls the interaction between EnterFields
+    enabling the next/prev field when a field is left. 
+    Instances of this class keep track of which field of the group is the 
+    currentField (i.e. the one getting keyboard input) and forwards input
+    to that one.
+    This is done by arranging for all of my fields to delegate their
+    input to me, which is then forwarded to the active field).
+
+    The block accessable as leaveAction is evaluated when the last
+    field of the group is left (by cursor-down or cr). 
+    Usually this block triggers accept on the fields (if they did not already)
+    and/or performs some followup processing and possibly closes the topview 
+    (for example: in a dialog).
+
+    EnterFieldGroups can be used as a delegate (of the topView) to forward
+    input (entered into the topView) to the currently active field.
+
+    Stepping to previous field is via CursorUp/PreviousField,
+    to next field via CursorDown/NextField/Tab.
+    By default, tabbing via #Tab is disabled - to enable it, send the field
+    a #makeTabable or #makeAllTabable to the group.
+
+    All of this here is low level stuff, providing a lot of freedom in
+    which keys are handled and how they perform.
+    Normally, these are not required for most users - the DialogBox sets up
+    things correctly for most cases.
+
+
+    [Instance variables:]
+
+        fields          <Collection of EditField>       the fields of the group
+
+        currentField    <EditField>                     the active field
+
+        leaveAction     <nil|Block>                     action to perform, when the
+                                                        last field is left by a non-wrap
+
+        wrap            <Boolean>                       if true, non-return next-keys wrap
+                                                        back to the first field.
+                                                        If false (the default), next in
+                                                        the last field is taken as return.
+                                                        This is ignored, if no leaveAction was 
+                                                        defined.
+
+        leaveOnTabLast  <Boolean>                       if true, tabbing out of the last
+                                                        field leaves the group.
+                                                        The default is false.
+
+    [author:]
+        Claus Gittinger
+
+
+    [see also:]
+        DialogBox
+        EditField
+"
+!
+
+examples 
+"
+    without a group - user has to enter mouse into the next field to activate it;
+    Cursor-keys dont work:
+                                                                        [exBegin]
+        |top panel field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        top open
+                                                                        [exEnd]
+
+
+    with a group - Return-key or CursorKey enables next field:
+    (but still, mouse pointer has to be moved into any of the fields,
+     because the topView does not forward its input into the fields.
+     Also, tabbing is not possible here)
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+
+        top open
+                                                                        [exEnd]
+
+
+
+    same, enables tabbing within the group via the Tab key
+    (but still, the mouse pointer must be in one of the fields):
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+
+        field1 makeTabable.
+        field2 makeTabable.
+        field3 makeTabable.
+        top open
+                                                                        [exEnd]
+    individual makeTabable messages to the fields allows single
+    fields to be sticky (i.e. explicit click is needed to get out
+    of it) - this is very seldom required.
+    To make all fields tabable (the usual case), there is a shortCut:
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+        group makeAllTabable.
+
+        top open
+                                                                        [exEnd]
+
+
+
+    use a delagation from the outerView to the group - 
+    Return-key or CursorKey enables next field:
+    input for topView is delegated to the group, which also behaves
+    as a unit w.r.t. keyboard focus (move pointer in and out).
+    Again, without tabbing:
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+
+        top delegate:group.
+        top open
+                                                                        [exEnd]
+
+
+    and, with tabbing:
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+        group makeAllTabable.
+
+        top delegate:group.
+        top open
+                                                                        [exEnd]
+
+
+
+    as above, but close the box when the last field is left
+    via return - notice, that tabbing still wraps around:
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+        group leaveAction:[top destroy].
+        group makeAllTabable.
+
+        top delegate:group.
+        top open
+                                                                        [exEnd]
+
+    in the next example, tabbing out of the last field
+    closes the box as well:
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+        group leaveAction:[top destroy].
+        group makeAllTabable.
+        group leaveOnTabLast:true.
+
+        top delegate:group.
+        top open
+                                                                        [exEnd]
+
+
+    the next example shows that the input order is defined by the
+    order in the group; NOT by the physical layout of the fields in the superview:
+    (i.e. you can arrange your fields in multiple framedBoxes, panels or
+     subviews - independent of the tab-stepping order)
+                                                                        [exBegin]
+        |top panel group field1 field2 field3|
+
+        top := StandardSystemView label:'reverse'.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field3; add:field2; add:field1.
+        group leaveAction:[top destroy].
+        group makeAllTabable.
+
+        top delegate:group.
+        top open
+                                                                        [exEnd]
+
+
+
+    using a single model for all fields:
+    (here, we use a Plug to simulate a more complex model):
+                                                                        [exBegin]
+        |top panel group field1 field2 field3 model
+         value1 value2 value3|
+
+        top := StandardSystemView new.
+        top extent:200@200.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        panel add:(field1 := EditField extent:(1.0 @ nil)).
+        panel add:(field2 := EditField extent:(1.0 @ nil)).
+        panel add:(field3 := EditField extent:(1.0 @ nil)).
+
+        group := EnterFieldGroup new.
+        group add:field1; add:field2; add:field3.
+        group leaveAction:[top destroy].
+        group makeAllTabable.
+
+        value1 := 'one'. value2 := 'two'. value3 := 'three'.
+
+        model := Plug new.
+        model respondTo:#value1 with:[value1].
+        model respondTo:#value1: with:[:arg | value1 := arg].
+        model respondTo:#value2 with:[value2].
+        model respondTo:#value2: with:[:arg | value2 := arg].
+        model respondTo:#value3 with:[value3].
+        model respondTo:#value3: with:[:arg | value3 := arg].
+
+        field1 model:model; aspect:#value1; change:#value1:.
+        field2 model:model; aspect:#value2; change:#value2:.
+        field3 model:model; aspect:#value3; change:#value3:.
+
+        top delegate:group.
+        top openModal.
+
+        Transcript showCR:'value1: ' , value1.
+        Transcript showCR:'value2: ' , value2.
+        Transcript showCR:'value3: ' , value3.
+                                                                        [exEnd]
+
+
+    all of the above is done automatically for you, 
+    if you add inputFields to a dialogBox.
+    Here, all fields use the same model, but different aspects:
+                                                                        [exBegin]
+        |box model
+         value1 value2 value3|
+
+        box := DialogBox new.
+        box extent:200@200.
+
+        value1 := 'one'. value2 := 'two'. value3 := 'three'.
+
+        model := Plug new.
+        model respondTo:#value1 with:[value1].
+        model respondTo:#value1: with:[:arg | value1 := arg].
+        model respondTo:#value2 with:[value2].
+        model respondTo:#value2: with:[:arg | value2 := arg].
+        model respondTo:#value3 with:[value3].
+        model respondTo:#value3: with:[:arg | value3 := arg].
+
+        (box addInputFieldOn:model) aspect:#value1; change:#value1:.
+        box addVerticalSpace.
+        (box addInputFieldOn:model) aspect:#value2; change:#value2:.
+        box addVerticalSpace.
+        (box addInputFieldOn:model) aspect:#value3; change:#value3:.
+
+        box addOkButton.
+
+        box open.
+
+        Transcript showCR:'value1: ' , value1.
+        Transcript showCR:'value2: ' , value2.
+        Transcript showCR:'value3: ' , value3.
+                                                                        [exEnd]
+
+    Here, the fields use different models, but the same aspect:
+                                                                        [exBegin]
+        |box model
+         valueHolder1 valueHolder2 valueHolder3|
+
+        box := DialogBox new.
+        box extent:200@200.
+
+        valueHolder1 := 'one' asValue. 
+        valueHolder2 := 'two' asValue. 
+        valueHolder3 := 'three' asValue.
+
+        box addInputFieldOn:valueHolder1.
+        box addVerticalSpace.
+        box addInputFieldOn:valueHolder2.
+        box addVerticalSpace.
+        box addInputFieldOn:valueHolder3.
+
+        box addOkButton.
+
+        box open.
+
+        Transcript showCR:'value1: ' , valueHolder1 value.
+        Transcript showCR:'value2: ' , valueHolder2 value.
+        Transcript showCR:'value3: ' , valueHolder3 value.
+                                                                        [exEnd]
+"
+
+    "Created: 27.4.1996 / 16:43:28 / cg"
+! !
+
+!EnterFieldGroup methodsFor:'accessing'!
+
+fields
+    "return a collection of the inputFields contained in the group."
+
+     ^ fields
+!
+
+leaveAction:aBlock
+    "set the action to perform when the last field is left.
+     Usually, this is to accept the values of all fields and perform
+     some additional processing (such as closing a dialog)."
+
+    leaveAction := aBlock
+!
+
+leaveOnTabLast:aBoolean
+    "specifies if leaving the last field via Tab
+     should leave the group or stay in the group.
+     (if staying, either wrap or not, depending on the setting of wrap)
+     The default is to stay in the group"
+
+    leaveOnTabLast := aBoolean
+
+    "Created: 27.4.1996 / 17:22:30 / cg"
+    "Modified: 27.4.1996 / 17:22:44 / cg"
+!
+
+makeAllTabable
+    "make all fields tabable"
+
+    fields do:[:field |
+        field makeTabable
+    ]
+
+    "Created: 27.4.1996 / 17:11:41 / cg"
+!
+
+wrap:aBoolean
+    "specifies if leaving the last field via non-Return
+     (i.e. Tab or Cursor-Down) should wrap back to the first, 
+     or leave the group.
+     The default is to not leave the group and wrap back to the first field."
+
+    wrap := aBoolean
+
+    "Modified: 27.4.1996 / 17:19:50 / cg"
+! !
+
+!EnterFieldGroup methodsFor:'adding & removing'!
+
+add:aField
+    "add another field to the group.
+     Cursor motion out of the previous field will lead to the next
+     one and vice versa."
+
+    self add:aField before:nil
+
+    "Modified: 18.10.1997 / 03:19:51 / cg"
+!
+
+add:aField before:anotherField
+    "add another field to the group into a particular position
+     within the tabbing order.
+     Cursor motion out of the previous field will lead to the next
+     one and vice versa."
+
+    fields isNil ifTrue:[
+        fields := OrderedCollection new
+    ].
+
+    anotherField isNil ifTrue:[
+        fields add:aField.
+    ] ifFalse:[
+        fields add:aField before:anotherField
+    ].
+
+    aField delegate:self.
+    aField hideCursor.
+"/    aField disable.
+
+    "set the fields enableAction to disable active field"
+
+    aField clickAction:[:field |
+        self makeActive:field
+    ].
+
+    "set the fields leaveAction to enable next field"
+
+    aField leaveAction:[:field :key |
+        self fieldLeft:field withKey:key
+    ].
+
+    fields size == 1 ifTrue:[
+        "the first one"
+        self makeActive:aField
+    ]
+
+    "Created: 18.10.1997 / 03:06:00 / cg"
+    "Modified: 18.10.1997 / 03:20:36 / cg"
+!
+
+remove:aField
+    "remove a field from the group."
+
+    fields isNil ifTrue:[^ self].
+    (fields includesIdentical:aField) ifFalse:[^ self].
+
+    fields removeIdentical:aField.
+
+    "Created: 18.10.1997 / 02:53:29 / cg"
+    "Modified: 18.10.1997 / 03:21:09 / cg"
+! !
+
+!EnterFieldGroup methodsFor:'event forwarding'!
+
+buttonPress:button x:x y:y view:aView
+    "clicking on a field activates it and forwards the click to it"
+
+    self makeActive:aView.
+    aView buttonPress:button x:x y:y
+!
+
+handlesButtonPress:button inView:aView
+    "query from event processor: am I interested in button-events ?
+     yes I am (to activate the clicked-on field)."
+
+   ^ true
+!
+
+handlesKeyPress:key inView:aView
+    "query from event processor: am I interested in key-events ?
+     yes I am (to forward it to the active field)."
+
+    ^ true
+!
+
+handlesKeyRelease:key inView:aView
+    "query from event processor: am I interested in key-events ?
+     yes I am (to forward it to the active field)."
+
+    ^ true
+!
+
+keyPress:key x:x y:y view:aView
+    "key-press in any field - forward the key to the active field
+     (with nil coordinates to indicate that the key was pressed
+      outside. However, this info is not used by any view currently)"
+
+    currentField notNil ifTrue:[
+        currentField keyPress:key x:nil y:nil
+    ]
+
+    "Modified: / 18.9.1998 / 20:00:36 / cg"
+!
+
+keyRelease:key x:x y:y view:aView
+    "key-release in any field - forward the key to the active field.
+     (with -1/-1 as coordinate to indicate that the key was pressed
+      outside. However, this info is not used by any view currently)"
+
+    currentField notNil ifTrue:[
+	currentField keyRelease:key x:-1 y:-1
+    ]
+!
+
+showFocus:onOrOff
+    "forward focus display to the active field "
+
+    currentField notNil ifTrue:[
+        currentField showFocus:onOrOff
+    ]
+
+    "Modified: 4.3.1996 / 22:18:22 / cg"
+    "Created: 27.4.1996 / 16:41:38 / cg"
+!
+
+showNoFocus:onOrOff
+    "forward nofocus display to the active field "
+
+    currentField notNil ifTrue:[
+        currentField showNoFocus:onOrOff
+    ]
+
+    "Modified: 4.3.1996 / 22:18:22 / cg"
+    "Created: 27.4.1996 / 16:42:07 / cg"
+! !
+
+!EnterFieldGroup methodsFor:'group control'!
+
+fieldLeft:aField withKey:key
+    "some of my fields was left using key.
+     Figure out, which one to give the focus:
+     If there are more fields, go to that one;
+     otherwise, handle this like tabbing to the next component"
+
+    |thisIndex action next wg explicit nFields nextField delta|
+
+    action := key.
+    nFields := fields size.
+    thisIndex := fields indexOf:aField.
+
+    ((key == #CursorUp) or:[key == #PreviousField]) ifTrue:[
+        delta := -1.
+        (thisIndex == 1) ifTrue:[
+            next := nFields
+        ] ifFalse:[
+            next := thisIndex - 1
+        ]
+    ].
+
+    ((key == #CursorDown) 
+    or:[key == #NextField
+    or:[key == #Tab]]) ifTrue:[
+        delta := 1.
+        (thisIndex == nFields) ifTrue:[
+            next := 1.
+            wrap == false ifTrue:[
+                action := #Return.
+            ].
+        ] ifFalse:[
+            next := thisIndex + 1
+        ]
+    ].
+    ((action == #Return)
+    or:[key == #Tab and:[leaveOnTabLast == true]]) ifTrue:[
+        delta := 1.
+        (thisIndex == nFields) ifTrue:[
+            leaveAction notNil ifTrue:[
+                self makeInactive:aField.
+                currentField := nil.
+                leaveAction value.
+                next := nil
+            ] ifFalse:[
+                next := 1
+            ]
+        ] ifFalse:[
+            next := thisIndex + 1
+        ]
+    ].
+
+    next notNil ifTrue:[
+        "/ search for the next enabled field
+
+        nextField := fields at:next.
+        [nextField notNil 
+         and:[nextField enabled not
+               or:[nextField reallyRealized not]]] whileTrue:[
+            next := next + delta.
+            next < 1 ifTrue:[
+                next := fields size.
+            ] ifFalse:[
+                next > fields size ifTrue:[
+                    next := 1
+                ]
+            ].
+            next == thisIndex ifTrue:[
+                nextField := next := nil
+            ] ifFalse:[
+                nextField := fields at:next.
+            ]
+        ].
+
+        (wg := currentField windowGroup) notNil ifTrue:[
+            next isNil ifTrue:[
+                delta < 0 ifTrue:[
+                    ^ wg focusPreviousFrom:aField
+                ].
+                ^ wg focusNextFrom:aField.
+            ].
+        ].
+
+        nextField := fields at:next.
+        explicit := false.
+        wg notNil ifTrue:[
+            wg focusView == currentField ifTrue:[
+                explicit := true.
+            ]
+        ].
+        explicit ifTrue:[
+            wg focusView:nextField byTab:(wg focusCameByTab).
+        ] ifFalse:[
+            self makeActive:nextField 
+        ]
+    ]
+
+    "Created: / 18-10-1997 / 03:03:34 / cg"
+    "Modified: / 18-09-1998 / 20:16:48 / cg"
+    "Modified: / 24-08-2010 / 16:14:17 / az"
+! !
+
+!EnterFieldGroup methodsFor:'misc'!
+
+activateFirst
+    "pass controll to my first field"
+
+    fields notNil ifTrue:[
+        self makeActive:fields first
+    ]
+
+    "Modified: 7.2.1996 / 15:23:09 / cg"
+!
+
+activateFirstIfNoCurrent
+    "pass controll to my first field, if there is no current field"
+
+    currentField isNil ifTrue:[
+        self activateFirst
+    ] ifFalse:[
+        currentField requestFocus
+    ]
+
+    "Created: / 13.8.1998 / 21:22:35 / cg"
+    "Modified: / 15.3.1999 / 08:22:18 / cg"
+!
+
+activateLast
+    "pass controll to my last field"
+
+    fields notNil ifTrue:[
+        self makeActive:fields last
+    ]
+
+    "Modified: 7.2.1996 / 15:23:09 / cg"
+    "Created: 22.5.1996 / 19:04:05 / cg"
+!
+
+delegatesTo:aView
+    ^ aView == currentField
+
+    "Created: / 18.9.1998 / 19:57:49 / cg"
+    "Modified: / 18.9.1998 / 19:58:23 / cg"
+!
+
+makeInactive
+    "make the current field inActive (take its focus)"
+
+    self makeInactive:currentField
+
+    "Created: 22.5.1996 / 18:58:56 / cg"
+    "Modified: 22.5.1996 / 19:03:44 / cg"
+! !
+
+!EnterFieldGroup methodsFor:'private'!
+
+makeActive:aField
+    "make a specific field the active one"
+
+    currentField == aField ifTrue:[^ self].
+
+    currentField notNil ifTrue:[
+        currentField hideCursor.
+        currentField hasKeyboardFocus:false.
+    ].
+    currentField := aField.
+    currentField showCursor.
+    currentField hasKeyboardFocus:true.
+
+    "Modified: 21.5.1996 / 21:21:07 / cg"
+!
+
+makeInactive:aField
+    "make a specific field inActive"
+
+    currentField == aField ifTrue:[currentField := nil].
+
+    aField notNil ifTrue:[
+        aField hideCursor.
+        aField hasKeyboardFocus:false.
+    ].
+
+    "Created: 21.5.1996 / 21:20:57 / cg"
+! !
+
+!EnterFieldGroup class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/EnterFieldGroup.st,v 1.41 2010-08-24 14:13:15 az Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/EnterFieldGroup.st,v 1.41 2010-08-24 14:13:15 az Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FileSaveBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,105 @@
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+FileSelectionBox subclass:#FileSaveBox
+	instanceVariableNames:'appendButton appendAction'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!FileSaveBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Instances of FileSaveBox add an 'append'-button, and an
+    associated append-action. 
+    The other behavior is that of a FileSelectionBox.
+
+    [Instance variables:]
+        appendAction            action to be performed when append is pressed
+
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DialogBox
+        EnterBox2 FilenameEnterBox YesNoBox
+        ListSelectionBox FileSelectionBox 
+"
+! !
+
+!FileSaveBox methodsFor:'accessing'!
+
+appendAction:aBlock
+    "set the action to be performed when append is pressed"
+
+    appendAction := aBlock
+! !
+
+!FileSaveBox methodsFor:'initialization'!
+
+initialize
+    super initialize.
+
+    label := resources string:'Save file dialog'.
+
+    okButton label:(resources string:'save').
+
+    "
+     insert an append-button between abort- and save-buttons
+    "
+    appendButton := Button okButton.
+    appendButton isReturnButton:false.
+    appendButton label:(resources string:'Append').
+    appendButton action:[appendButton turnOffWithoutRedraw. self appendPressed].
+    self addButton:appendButton after:okButton.
+
+    "Modified: / 29-08-2013 / 12:19:54 / cg"
+! !
+
+!FileSaveBox methodsFor:'user interaction'!
+
+appendPressed
+    "append was pressed - evaluate the append-action"
+
+    self hideAndEvaluate:[:string |
+        appendAction notNil ifTrue:[
+            appendAction value:string 
+        ]
+    ]
+
+    "Modified: 12.5.1996 / 21:45:52 / cg"
+! !
+
+!FileSaveBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/FileSaveBox.st,v 1.17 2013-08-29 10:28:12 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FileSelectionBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,787 @@
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+ListSelectionBox subclass:#FileSelectionBox
+	instanceVariableNames:'patternField selectingDirectory allowMakeDirectory'
+	classVariableNames:'LastFileSelectionDirectory'
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!FileSelectionBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this class implements file selection boxes. Instances show a list of
+    files, and perform an action block with the selected pathname as
+    argument when ok is clicked. It is also possible, to open the box
+    without action and ask it afterward if it has been left with ok
+    (i.e. the ST-80 way, asking 'aBox accepted ifTrue:[...]')
+
+    There is an optional PatternField, which shows itself when a pattern
+    is defined (i.e. if there is no pattern, it is hidden). 
+    If there is a pattern, only files matching the pattern are shown in 
+    the list. Directories are not affected by the patternField.
+
+    In addition, there is an optional matchBlock (actually this is defined 
+    in the FileSelectionList). Only names for which this matchblock
+    returns true will be presented. The matchBlock affects both regular files
+    and names of directories. The argument passed to the matchBlock is the full
+    pathname.
+
+    All of the actual work is done in the fileList; see the documentation
+    of FileSelectionList for more options 
+    (you can access a boxes fileList via 'aBox>>listView' and get access to all
+     of those fancy settings)
+    For example, by accessing the list, it is possible to hide all directories 
+    ('aBox listView ignoreDirectories:true'), to hide the parentDirectory alone 
+    ('aBox listView ignoreParentDirectory') and to turn off the marking 
+    of subdirectories ('aBox listView markSubdirectories:false').
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DialogBox
+        EnterBox2 FilenameEnterBox YesNoBox
+        ListSelectionBox FileSaveBox
+        FileSelectionList SelectionInListView
+"
+!
+
+examples 
+"
+  simple standard queries
+  (notice, that the receiver of those messages is Dialog - this should always
+   be done for compatibility - although the real fileBox implementation is here).
+
+    very simple:
+                                                                        [exBegin]
+        |name|
+
+        name := Dialog requestFileName.
+        Transcript showCR:name
+                                                                        [exEnd]
+
+
+    simple:
+                                                                        [exBegin]
+        |name|
+
+        name := FileSelectionBox requestFileName:'which file ?'.
+        Transcript showCR:name
+                                                                        [exEnd]
+
+
+    with initial selection:
+                                                                        [exBegin]
+        |name|
+
+        name := FileSelectionBox requestFileName:'which file ?' default:'Make.proto'.
+        Transcript showCR:name
+                                                                        [exEnd]
+
+
+
+  more detailed setup
+
+    setting title:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which file ?'.
+        box open.
+        box accepted ifTrue:[
+            Transcript showCR:'you selected: ' , box pathName
+        ]
+                                                                        [exEnd]
+
+    setting a matchpattern:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which file ?'.
+        box pattern:'*.rc'.
+        box open
+                                                                        [exEnd]
+
+    setting multiple patterns:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which file ?'.
+        box pattern:'*.rc;*.st'.
+        box open
+                                                                        [exEnd]
+
+    setting a matchblock:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which file ?'.
+        box directory:'/etc'.
+        box pattern:'*'.
+        box matchBlock:[:name | name asFilename baseName first between:$a and:$z].
+        box open
+                                                                        [exEnd]
+
+    both pattern and matchBlock:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which directory ?'.
+        box selectingDirectory:true.
+        box pattern:'l*'.
+        box matchBlock:[:name | OperatingSystem isDirectory:name].
+        box action:[:fn | Transcript showCR:fn].
+        box open
+                                                                        [exEnd]
+
+    dont show the parent directory:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which directory ?'.
+        box listView ignoreParentDirectory:true.
+        box open
+                                                                        [exEnd]
+
+    dont show any directory:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which file ?'.
+        box listView ignoreDirectories:true.
+        box open
+                                                                        [exEnd]
+
+    dont show any directory or hidden file:
+    (notice the basename extraction - we are not interested in the full pathName)
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which file ?'.
+        box listView ignoreDirectories:true.
+        box matchBlock:[:name | (name asFilename baseName startsWith:'.') not].
+        box open
+                                                                        [exEnd]
+
+    dont allow direct filename entry:
+    (i.e. avoid the user choosing files from other directories)
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which one ?'.
+        box enterField beInvisible.
+        box open.
+        box accepted ifTrue:[
+            Transcript showCR:'path is ' , box pathName
+        ].
+                                                                        [exEnd]
+
+    combined with above directory ignoring,
+    this limits selection of files from a single directory:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which file ?'.
+        box enterField beInvisible.
+        box listView ignoreDirectories:true.
+        box open.
+        box accepted ifTrue:[
+            Transcript showCR:'path is ' , box pathName
+        ].
+                                                                        [exEnd]
+
+    finally, an action:
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which directory ?'.
+        box pattern:'l*'.
+        box matchBlock:[:name | OperatingSystem isDirectory:name].
+        box action:[:name | Transcript showCR:name].
+        box open
+                                                                        [exEnd]
+
+  concrete examples:
+
+    only show files beginning with lowercase characters
+    and ending in '.c':
+                                                                        [exBegin]
+        |box|
+        box := FileSelectionBox new.
+        box title:'Which directory ?'.
+        box matchBlock:[:name |
+                            box pathName asFilename isDirectory
+                            or:[name first isLowercase
+                                and:[name endsWith:'.c']]
+                       ].
+        box open.
+        box accepted ifTrue:[
+            Transcript showCR:'full path:  ' , box pathName.
+            Transcript showCR:'files name: ' , box fileName.
+            Transcript showCR:'directory : ' , box directory pathName.
+        ]
+                                                                        [exEnd]
+"
+! !
+
+!FileSelectionBox class methodsFor:'accessing'!
+
+lastFileSelectionDirectory
+    "return the name of the directory used in the previous
+     fileSelection dialog. This will be used as default for the next dialog,
+     if no explicit path is specified (see requestFileName:* methods)"
+
+    |f|
+
+    LastFileSelectionDirectory notNil ifTrue:[
+        ((f := LastFileSelectionDirectory asFilename) exists 
+        and:[f isDirectory]) ifFalse:[
+            LastFileSelectionDirectory := nil.
+        ]
+    ].
+    ^ LastFileSelectionDirectory
+
+    "Created: / 9.9.1997 / 10:03:17 / cg"
+    "Modified: / 16.6.1998 / 15:11:20 / cg"
+!
+
+lastFileSelectionDirectory:aDirectoryString
+    "set the name of the directory used in the previous
+     fileSelection dialog. This will be used as default for the next dialog,
+     if no explicit path is specified (see requestFileName:* methods)"
+
+    LastFileSelectionDirectory := aDirectoryString
+
+    "Created: / 9.9.1997 / 10:03:42 / cg"
+    "Modified: / 15.6.1998 / 14:05:21 / cg"
+! !
+
+!FileSelectionBox class methodsFor:'defaults'!
+
+listViewType
+    "return the type of listView - using a FileSelectionList here"
+
+    ^ FileSelectionList
+! !
+
+!FileSelectionBox class methodsFor:'menu specs'!
+
+fileListMenu
+    "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:FileSelectionBox andSelector:#fileListMenu
+     (Menu new fromLiteralArrayEncoding:(FileSelectionBox fileListMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(#Menu
+        #(
+         #(#MenuItem
+            #label: 'New Folder...'
+            #translateLabel: true
+            #value: #fileListMenuNewFolder
+          )
+         #(#MenuItem
+            #label: '-'
+          )
+         #(#MenuItem
+            #label: 'Remove...'
+            #translateLabel: true
+            #value: #fileListMenuRemove
+          )
+         )
+        nil
+        nil
+      )
+! !
+
+!FileSelectionBox methodsFor:'accessing'!
+
+allowMakeDirectory:aBoolean
+    "allow or deny creation of new directories;
+     The default is to allow it."
+
+    allowMakeDirectory := aBoolean.
+!
+
+contents
+    "return the current entered value (i.e. the enterFields string).
+     redefined to return the full pathname."
+
+    |string|
+
+    string := super contents.
+    string size == 0 ifTrue:[
+        selectingDirectory ifFalse:[^ string].
+        ^ selectionList directory pathName
+    ].
+    (string asFilename isAbsolute) ifTrue:[
+        ^ string
+    ].
+    ^ (selectionList directory pathName asFilename construct:string) asString
+
+    "Modified: / 9.9.1998 / 21:23:16 / cg"
+!
+
+directory
+    "return the directory which is currently shown"
+
+    ^ selectionList directory
+!
+
+directory:directoryName
+    "change the directory shown in the list."
+
+    selectionList directory:directoryName.
+    selectingDirectory ifTrue:[
+        enterField contents:directoryName asFilename pathName
+    ]
+!
+
+fileName
+    "if some filename has been entered, return it (without the directory path)
+     otherwise, return nil"
+
+    |string|
+
+    string := super contents.
+    string isNil ifTrue:[^ nil].
+    ^ self pathName asFilename baseName
+
+    "Modified: / 12.8.1998 / 09:54:01 / cg"
+!
+
+matchBlock:aBlock
+    "set the matchBlock (in the selectionList). Only files
+     for which the block returns true are shown.
+     The matching is actually done in the fileSelectionList."
+
+    selectionList matchBlock:aBlock 
+!
+
+openOn:aPath
+    "open the box showing files in aPath.
+     This is only a shortcut message - no new functionality."
+
+    self directory:aPath.
+    self showAtPointer
+!
+
+pathName
+    "same as contents - return the full pathname of the selected file,
+     or the pathname of the directory if nothing has been entered"
+
+    ^ self contents
+!
+
+pattern:aPattern
+    "set the pattern - this also enables the PatternField
+     (if the pattern is non-nil) or hides it (if nil)."
+
+    |focusSequence|
+
+    patternField initialText:aPattern.
+    selectionList pattern:aPattern.
+    aPattern isNil ifTrue:[
+        patternField beInvisible.
+        self makeUntabable:patternField.
+        focusSequence := (Array 
+                             with:enterField 
+                             with:selectionList 
+                             with:okButton 
+                             with:abortButton)
+    ] ifFalse:[
+        patternField beVisible.
+        self makeTabable:patternField.
+        focusSequence := (Array 
+                             with:patternField 
+                             with:enterField 
+                             with:selectionList 
+                             with:okButton 
+                             with:abortButton)
+    ].
+
+    windowGroup notNil ifTrue:[
+        windowGroup focusSequence:focusSequence
+    ].
+
+    "Modified: 18.10.1997 / 03:02:05 / cg"
+!
+
+selectingDirectory:aBoolean
+    "setup the box for directory selection (hides regular files).
+     Use this, to ask the user for a directories name"
+
+    selectingDirectory := aBoolean.
+    aBoolean ifTrue:[
+        selectionList directoryChangeAction:[:entry | self directoryChanged].
+        selectionList directorySelectAction:[:entry | self directorySelected].
+        selectionList ignoreFiles:true.
+    ]
+
+    "Modified: 22.10.1996 / 13:24:50 / cg"
+! !
+
+!FileSelectionBox methodsFor:'change & update'!
+
+update:something with:argument from:changedObject
+    |commonName index s|
+
+    something == #directory ifTrue:[
+        "
+         sent by fileNameEnterField, if a filename
+         completion was not possible due to multiple
+         matches.
+        "
+        selectionList directory:argument.
+        s := enterField contents.
+        s notNil ifTrue:[
+            commonName := s asFilename baseName.
+            commonName size > 0 ifTrue:[
+                index := selectionList list findFirst:[:entry | entry startsWith:commonName].
+                index ~~ 0 ifTrue:[
+                    selectionList makeLineVisible:index
+                ]
+            ]
+        ]
+    ].
+
+    super update:something with:argument from:changedObject
+
+    "Modified: / 23-01-2012 / 17:35:54 / cg"
+! !
+
+!FileSelectionBox methodsFor:'initialization'!
+
+createEnterField
+    "if the (optional) class FilenameEditField is present, use
+     it, since it provides filename completion. Otherwise, we have
+     to live with the dumb (default) field ...
+    "
+    FilenameEditField notNil ifTrue:[
+        ^ FilenameEditField new.
+    ].
+    ^ super createEnterField
+
+    "Modified: 18.4.1996 / 20:02:24 / cg"
+!
+
+initialize
+    |corner|
+
+    super initialize.
+    selectingDirectory := false.
+    allowMakeDirectory := true.
+
+    label := resources string:'File dialog'.
+
+    labelField extent:(0.7 @ labelField height).
+    labelField label:(resources string:'Select a file:').
+    labelField adjust:#left.
+
+    patternField := EditField in:self.
+    self is3D ifTrue:[
+        corner := (1.0 @ (labelField origin y+patternField heightIncludingBorder)).
+    ] ifFalse:[
+        corner := [(width - ViewSpacing - (patternField borderWidth * 2)) @ (labelField origin y+patternField height"IncludingBorder")].
+    ].
+    patternField origin:(0.7 @ labelField origin y) corner:corner.
+    patternField rightInset:0.
+    patternField initialText:'*'.
+    patternField leaveAction:[:reason | self patternChanged]. 
+    patternField crAction:[self patternChanged].
+    patternField hiddenOnRealize:true. "delay showing, until a pattern is defined"
+"/ no, since its invisible
+"/    self makeTabable:patternField before:enterField.
+
+    enterField 
+        origin:[0.0 @ (ViewSpacing + ViewSpacing + (labelField preferredHeight max:patternField preferredHeight) "height")].
+    enterField addDependent:self.
+    "/ enterField immediateAccept:true.
+    enterField acceptAction:[:newFile | self enterFieldChanged ].
+    enterField crAction:[:newFile | self enterFieldChanged. self okPressed ].
+
+    selectionList menuHolder:self; menuMessage:#fileListMenu; menuPerformer:self.
+    selectionList ignoreCaseInPattern:true.
+
+    "
+     FileSelectionBox open
+     FileSelectionBox new show
+    "
+
+    "Modified: / 23-01-2012 / 18:18:47 / cg"
+!
+
+postRealize
+    "if some default is present in the enterField,
+     scroll to make this one visible"
+
+    |contents|
+
+    super postRealize.
+    (contents := enterField contents) notNil ifTrue:[
+        contents notEmpty ifTrue:[
+            selectionList makeVisible:contents
+        ]
+    ]
+
+    "Created: 24.7.1997 / 18:19:14 / cg"
+! !
+
+!FileSelectionBox methodsFor:'menu'!
+
+fileListMenu
+    allowMakeDirectory ifFalse:[^ self].
+    ^ self class fileListMenu
+!
+
+fileListMenuNewFolder
+    |newDirName d|
+
+    newDirName := Dialog request:(resources string:'Name of new Folder:').
+    newDirName size == 0 ifTrue:[^ self].
+
+    d := self directory asFilename construct:newDirName.
+    d exists ifTrue:[
+        d isDirectory ifTrue:[
+            ^ self
+        ].
+        self warn:(resources string:'A file named %1 already exists.' with:newDirName).
+        ^ self
+    ].
+
+    d makeDirectory.
+    self updateList.
+
+    "
+     self open
+    "
+!
+
+fileListMenuRemove
+    |selectedFilename baseName|
+
+    selectedFilename := self pathName asFilename.
+    baseName := selectedFilename baseName.
+
+    (Dialog confirm:(resources string:'Really remove ''%1'' ?' with:baseName allBold)) ifFalse:[
+        ^ self.
+    ].
+
+    selectedFilename isDirectory ifTrue:[
+        self warn:(resources string:'%1 is a directory..' with:baseName).
+        ^ self.
+    ].
+
+    selectedFilename delete.
+    self updateListWithoutScrolling.
+! !
+
+!FileSelectionBox methodsFor:'private'!
+
+updateList
+    selectionList updateList
+!
+
+updateListWithoutScrolling
+    selectionList updateListWithoutScrolling
+! !
+
+!FileSelectionBox methodsFor:'queries'!
+
+preferredExtent
+    "return my preferred extent - thats the minimum size 
+     to make everything visible"
+
+    |wWanted hWanted mm|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    mm := ViewSpacing.
+
+    wWanted := mm + 
+               labelField preferredWidth + 
+               (mm * 2) + 
+               patternField preferredWidth + 
+               mm.
+    (wWanted < width) ifTrue:[
+        wWanted := width
+    ].
+    hWanted := mm + labelField height +
+               mm + enterField height +
+               mm + selectionList height +
+               mm + buttonPanel preferredHeight +
+               mm.
+
+    (hWanted < height) ifTrue:[
+        hWanted := height
+    ].
+    ^ (wWanted @ hWanted)
+
+    "Modified: 19.7.1996 / 20:44:04 / cg"
+! !
+
+!FileSelectionBox methodsFor:'user actions'!
+
+directoryChanged
+    selectingDirectory ifTrue:[
+        selectionList changeDirectory.
+        enterField contents:(selectionList directory pathName).
+        selectionList setSelection:nil.
+    ].
+
+    "Created: 18.4.1996 / 18:38:21 / cg"
+    "Modified: 25.5.1996 / 12:27:05 / cg"
+!
+
+directorySelected
+    "a directory was selected - show the new path in the inputField,
+     if we are in directory mode"
+
+    selectingDirectory ifTrue:[
+        |newDir|
+
+        newDir := (selectionList directory)
+                      construct:selectionList selectionValue.
+        enterField contents:newDir pathName.
+    ].
+
+    "Created: / 18.4.1996 / 18:46:15 / cg"
+    "Modified: / 7.8.1998 / 17:19:26 / cg"
+!
+
+doubleClick
+    |entry|
+
+    entry := selectionList selectionValue.
+    entry notNil ifTrue:[
+        ((selectionList directory asFilename construct:entry) isDirectory) ifFalse:[
+            selectingDirectory ifFalse:[
+                enterField contents:entry.
+                self okPressed
+            ]
+        ]
+    ].
+
+    "Modified: 19.10.1997 / 00:17:37 / cg"
+!
+
+enterFieldChanged
+    |fn dir|
+
+    fn := enterField contents.
+    (dir := fn asFilename) exists ifFalse:[
+        dir := dir directory.
+    ].
+    dir exists ifTrue:[
+        dir isDirectory ifFalse:[
+            dir := dir directory
+        ].
+        selectionList changeDirectoryTo:dir pathName
+    ].
+
+    "Created: / 23-01-2012 / 18:10:32 / cg"
+!
+
+okPressed
+    "called for both on ok-press and on return-key"
+
+    |dir string fname|
+
+    string := enterField contents.
+    (string notEmptyOrNil) ifTrue:[
+        string := string withoutSeparators.
+        string asFilename isAbsolute ifTrue:[
+            fname := string asFilename
+        ] ifFalse:[
+            dir := selectionList directory pathName asFilename.
+            fname := dir construct:string
+        ].
+        fname isDirectory ifTrue:[
+            selectingDirectory ifFalse:[
+                selectionList directory:fname asString.
+                self updateList.
+                ^ self
+            ]    
+        ]
+    ] ifFalse:[
+        selectingDirectory ifTrue:[
+            enterField contents:(selectionList directory pathName).
+        ].
+    ].
+
+    super okPressed
+
+    "Modified: / 10.9.1998 / 22:19:11 / cg"
+!
+
+patternChanged
+    selectionList pattern:patternField contents. 
+    self updateList
+
+    "Created: 4.6.1996 / 20:30:23 / cg"
+!
+
+selectionChanged
+    |entry|
+
+    entry := selectionList selectionValue.
+    (selectionList directory asFilename construct:entry) type == #directory ifFalse:[
+        selectingDirectory ifTrue:[
+            enterField contents:(selectionList directory pathName).
+            selectionList setSelection:nil.
+            ^ self
+        ]
+    ].
+    enterField contents:entry
+
+    "Modified: 21.9.1997 / 12:07:55 / cg"
+! !
+
+!FileSelectionBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/FileSelectionBox.st,v 1.71 2013-06-25 23:10:52 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FileSelectionList.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1096 @@
+"
+ COPYRIGHT (c) 1993 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SelectionInListView subclass:#FileSelectionList
+	instanceVariableNames:'pattern directory timeStamp directoryId directoryName
+		directoryContents directoryFileTypes realAction matchBlock
+		stayInDirectory ignoreParentDirectory markDirectories
+		ignoreDirectories directoryChangeCheckBlock quickDirectoryChange
+		directoryChangeAction directorySelectAction fileSelectAction
+		ignoreFiles directoryHolder directoryStack ignoreCaseInPattern'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Lists'
+!
+
+!FileSelectionList class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1993 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this class implements file selection lists - its basically a
+    selection-in-list-view, but adds some right-arrows to directories.
+    (and will soon remember the previous position when changing directories).
+    You can specify an optional filename-pattern (such as '*.st') and an
+    optional matchBlock (such as: [:name | name startsWith:'A']).
+
+    Only files (plus directories) matching the pattern (if present) and
+    for which the matchBlock returns true (if present), are shown.
+
+    Except for file-browser like applications, FileSelectionLists are almost 
+    exclusively used with FileSelectionBoxes (see examples there).
+
+    [Instance variables:]
+            pattern                 the matchpattern
+
+            directory               the current directory
+
+            timeStamp               the time, when directoryContents was last taken
+
+            directoryId             the directories id (inode-nr) when it was taken
+
+            directoryName           the path when it was taken
+
+            directoryContents       (cached) contents of current directory
+
+            directoryFileTypes      (cached) isDirectory-boolean per entry
+
+            fileTypes               file types as shown in list (i.e only matching ones)
+
+            matchBlock              if non-nil: block evaluated per full filename;
+                                    only files for which matchBlock returns true are shown.
+
+            realAction              (internal) the action to perform when a file is selected
+
+            quickDirectoryChange    if true, directories can be changed with a single click
+                                    if false (the default), they need a double click.
+                                    Makes sense if a directory is what we are interested in,
+                                    for files its better to leave it as false.
+
+            stayInDirectory         if true, no directoryChanges are allowed.
+                                    Makes sense to limit the user to choose among certain files.    
+                                    The default is false.
+
+            ignoreParentDirectory   if true, the parent directory is not shown.
+                                    Makes sense to limit the user to files below the initial
+                                    directory. Default is false.
+
+            ignoreDirectories       if true, no directories are shown at all.
+                                    Makes sense to limit the user to choose among regular files.
+                                    Default is false.
+
+            ignoreFiles             if true, no regular files are shown at all.
+                                    Makes sense to limit the user to choose among directories files.
+                                    Default is false.
+
+            directoryChangeCheckBlock 
+                                    if nonNil, directoryChanges are only allowed if this block
+                                    returns true. It is evaluated with one argument, the pathName.
+                                    Defaults to nil (i.e. no checks).
+
+            directorySelectAction 
+                                    if nonNil, a directory-select evaluate this block.
+                                    Possible hook for others (used with Boxes)
+                                    Defaults to nil.
+
+            fileSelectAction 
+                                    if nonNil, file-select evaluate this block.
+                                    Possible hook for others (used with Boxes)
+                                    Defaults to nil.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DialogBox
+        EnterBox2 YesNoBox
+        ListSelectionBox FileSelectionBox FileSaveBox 
+"
+!
+
+examples 
+"
+    FileSelectionLists are typically used in FileSelectionBoxes,
+    or file-browser-like applications.
+    Thus, the following examples are a bit untypical.
+
+    example (plain file-list):
+                                                                        [exBegin]
+        |list|
+
+        list := FileSelectionList new.
+        list open
+                                                                        [exEnd]
+
+
+    setting a directory holder:
+                                                                        [exBegin]
+        |holder list|
+
+        holder := '/etc' asValue.
+        list := FileSelectionList new.
+        list directoryHolder:holder.
+        list open.
+
+        (EditField on:holder) open.
+                                                                        [exEnd]
+
+
+    scrolled & some action:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    ignore the parentDirectory:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list ignoreParentDirectory:true.
+        top open
+                                                                        [exEnd]
+
+    ignore all directories (i.e. regular files only):
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list ignoreDirectories:true.
+        top open
+                                                                        [exEnd]
+
+    ignore all regular files (i.e. directories only):
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list ignoreFiles:true.
+        top open
+                                                                        [exEnd]
+
+    dont show the directory arrow-mark:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list markDirectories:false.
+        top open
+                                                                        [exEnd]
+
+    adds a pattern, only showing .st files and directories:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list pattern:'*.st'.
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    a more complicated pattern:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list pattern:'[A-D]*.st'.
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    adds a matchblock to show only writable files:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list matchBlock:[:name | 
+                            |fileName|
+                            fileName := name asFilename.
+                            fileName isWritable or:[fileName isDirectory]
+                        ].
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    adds a matchblock to suppress directories:
+    (this can be done easier with #ignoreDirectories)
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list matchBlock:[:name | 
+                            name asFilename isDirectory not
+                        ].
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    the above can be done more convenient:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list ignoreDirectories:true.
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    adds a matchblock to block parent dirs (i.e. only allow files here & below):
+    (can be done easier with #ignoreParentDirectory)
+                                                                        [exBegin]
+        |top v list currentDir|
+
+        currentDir := '.' asFilename pathName.
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list matchBlock:[:name | 
+                            ((name endsWith:'/..') and:[list directory pathName = currentDir]) not
+                        ].
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    do not allow changing up AND show all .rc-files only:
+    (but allow going down)
+                                                                        [exBegin]
+        |top v list currentDir|
+
+        currentDir := '.' asFilename pathName.
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list pattern:'*.rc'.
+        list matchBlock:[:name |  
+                            ((name endsWith:'/..') and:[list directory pathName = currentDir]) not
+                        ].
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    show only .rc-files in current directory:
+                                                                        [exBegin]
+        |top v list currentDir|
+
+        currentDir := '.' asFilename pathName.
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list pattern:'*.rc'.
+        list matchBlock:[:name | 
+                            name asFilename isDirectory not
+                        ].
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    show only h*-files in /etc; dont allow directory changes:
+                                                                        [exBegin]
+        |top v list|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list directory:'/etc'.
+        list pattern:'h*'.
+        list matchBlock:[:name | name printNL.
+                            name asFilename isDirectory not
+                        ].
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+    only allow changing into directories below the current one; i.e. not up;
+    but show it
+                                                                        [exBegin]
+        |top v list here|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 200).
+        v := ScrollableView for:FileSelectionList in:top.
+        v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        list := v scrolledView.
+        list directoryChangeCheckBlock:[:dirPath |
+                        dirPath asFilename pathName
+                            startsWith:Filename currentDirectory pathName].
+        list action:[:index | Transcript showCR:'you selected: ' , list selectionValue].
+        top open
+                                                                        [exEnd]
+
+
+    living in a box:
+                                                                        [exBegin]
+        |box listView|
+
+        box := Dialog new.
+        box addTextLabel:'which file ?'.
+
+        listView := box 
+                        addListBoxOn:nil 
+                        class:FileSelectionList
+                        withNumberOfLines:10 
+                        hScrollable:false 
+                        vScrollable:true.
+
+        box addAbortButton; addOkButton.
+        box stickAtBottomWithVariableHeight:listView.
+        box open.
+        box accepted ifTrue:[
+            Transcript showCR:listView selectedPathname
+        ]
+                                                                        [exEnd]
+
+
+    living in a box (local files only, no directory change allowed):
+                                                                        [exBegin]
+        |box listView|
+
+        box := Dialog new.
+        box addTextLabel:'which file ?'.
+
+        listView := box 
+                        addListBoxOn:nil 
+                        class:FileSelectionList
+                        withNumberOfLines:10 
+                        hScrollable:false 
+                        vScrollable:true.
+
+        listView ignoreDirectories:true.
+        listView ignoreParentDirectory:true.
+
+        box addAbortButton; addOkButton.
+        box stickAtBottomWithVariableHeight:listView.
+        box open.
+        box accepted ifTrue:[
+            Transcript showCR:listView selectedPathname
+        ]
+                                                                        [exEnd]
+
+
+    living in a box (local files only; immediately show owner in another field):
+                                                                        [exBegin]
+        |box listView lbl|
+
+        box := Dialog new.
+        box addTextLabel:'which file ?'.
+
+        listView := box 
+                        addListBoxOn:nil 
+                        class:FileSelectionList
+                        withNumberOfLines:10 
+                        hScrollable:false 
+                        vScrollable:true.
+
+        lbl := box addTextLabel:''.
+        lbl adjust:#left.
+
+        listView fileSelectAction:[:index |
+            |ownerId owner|
+
+            ownerId := listView selectedPathname asFilename info at:#uid.
+            ownerId == OperatingSystem getUserID ifTrue:[
+                lbl label:('one of yours').
+            ] ifFalse:[
+                owner := OperatingSystem getUserNameFromID:ownerId.
+                lbl label:(owner , '''s property').
+            ]
+        ].
+
+        listView directorySelectAction:[:index |
+            |ownerId owner|
+
+            ownerId := listView selectedPathname asFilename info at:#uid.
+            ownerId == OperatingSystem getUserID ifTrue:[
+                lbl label:('your files there').
+            ] ifFalse:[
+                owner := OperatingSystem getUserNameFromID:ownerId.
+                lbl label:(owner , '''s files there').
+            ]    
+        ].
+
+        box addAbortButton; addOkButton.
+        box stickAtBottomWithFixHeight:lbl.
+        box stickAtBottomWithVariableHeight:listView.
+        box open.
+        box accepted ifTrue:[
+            Transcript showCR:listView selectedPathname
+        ]
+                                                                        [exEnd]
+"
+! !
+
+!FileSelectionList methodsFor:'accessing-behavior'!
+
+action:aBlock
+    "set the action to be performed on a selection"
+
+    realAction := aBlock
+!
+
+directoryChangeAction:aBlock
+    "set the action to be performed on a directory change"
+
+    directoryChangeAction := aBlock
+
+    "Created: 5.3.1996 / 02:37:08 / cg"
+!
+
+directoryChangeCheckBlock:aBlock
+    "set the directoryChangeCheckBlock - if non-nil, it controls if
+     a directory change is legal."
+
+    directoryChangeCheckBlock := aBlock
+!
+
+directorySelectAction:aBlock
+    "set the action to be performed when a directory is selected.
+     Useful if someone else wants to show additional information
+     (readable/owner ...) somewhere."
+
+    directorySelectAction := aBlock
+
+    "Created: 18.4.1996 / 18:45:13 / cg"
+!
+
+fileSelectAction:aBlock
+    "set the action to be performed when a file is selected.
+     Useful if someone else wants to show additional information
+     (readable/owner ...) somewhere."
+
+    fileSelectAction := aBlock
+
+    "Created: 18.4.1996 / 18:45:24 / cg"
+!
+
+ignoreCaseInPattern:aBoolean
+    "set/clear the flag which controls if the pattern match is caseless.
+     if it changes, update the list.
+     The default is true for systems, where filenames are caseless (i.e. msdos-based)."
+
+    ignoreCaseInPattern ~= aBoolean ifTrue:[
+        ignoreCaseInPattern := aBoolean.
+        realized ifTrue:[
+            self updateList
+        ].
+    ].
+!
+
+ignoreDirectories:aBoolean
+    "set/clear the flag which controls if directories are ignored
+     (i.e. hidden). The default is false (i.e. dirs are shown)"
+
+    ignoreDirectories := aBoolean
+!
+
+ignoreFiles:aBoolean
+    "set/clear the flag which controls if plain files are ignored
+     (i.e. hidden). The default is false (i.e. they are shown)"
+
+    ignoreFiles := aBoolean
+
+    "Created: 18.4.1996 / 18:48:43 / cg"
+    "Modified: 18.4.1996 / 18:49:23 / cg"
+!
+
+ignoreParentDirectory:aBoolean
+    "set/clear the flag which controls if the parent directory (..)
+     is shown in the list. The default is false (i.e. show it)"
+
+    ignoreParentDirectory := aBoolean
+!
+
+markDirectories:aBoolean
+    "turn on/off marking of directories with an arrow.
+     The default is on"
+
+     markDirectories := aBoolean
+!
+
+matchBlock:aBlock
+    "set the matchBlock - if non-nil, it controls which
+     names are shown in the list."
+
+    matchBlock := aBlock
+!
+
+pattern:aPattern
+    "set the pattern - if it changes, update the list."
+
+    pattern ~= aPattern ifTrue:[
+	pattern := aPattern.
+	realized ifTrue:[
+	    self updateList
+	].
+    ].
+!
+
+quickDirectoryChange:aBoolean
+    "set/clear quick change (i.e. chdir with single click).
+     The default is false (i.e. double click is required)"
+
+    quickDirectoryChange := aBoolean
+
+    "Created: 4.3.1996 / 17:37:58 / cg"
+!
+
+stayInDirectory:aBoolean
+    "set/clear the flag which controls if selecting a directory
+     should locally change (if false) or be handled just like
+     the selection of a file (if true).
+     The default is false (i.e. change and do not tell via action)"
+
+    stayInDirectory := aBoolean
+! !
+
+!FileSelectionList methodsFor:'accessing-channels'!
+
+directoryHolder:aValueHolder
+    directoryHolder := aValueHolder.
+    directoryHolder onChangeSend:#directoryHolderChange to:self.
+    self directoryHolderChange
+
+    "Modified: 20.9.1997 / 13:16:58 / cg"
+! !
+
+!FileSelectionList methodsFor:'accessing-contents'!
+
+directory
+    "return the shown directory"
+
+    ^ directory
+!
+
+directory:nameOrDirectory
+    "set the lists contents to the filenames in the directory.
+     This does not validate the change with any directoryChangeBlock."
+
+    |oldPath f|
+
+    nameOrDirectory isNil ifTrue:[
+        directory := nil.
+        directoryHolder notNil ifTrue:[directoryHolder value:directory].
+        ^ self updateList
+    ].
+    directory notNil ifTrue:[
+        oldPath := directory pathName.
+    ].
+    directory := nameOrDirectory asFilename.
+    (directory exists 
+    and:[directory isDirectory]) ifFalse:[
+        directory := Filename currentDirectory
+    ].
+    directoryHolder notNil ifTrue:[directoryHolder value:directory].
+    realized ifTrue:[
+        (directory pathName = oldPath) ifFalse:[
+            self updateList
+        ]
+    ]
+
+    "Modified: 18.9.1997 / 23:42:27 / stefan"
+    "Modified: 20.9.1997 / 13:29:02 / cg"
+!
+
+selectedPathname
+    "if there is a selection, return its full pathname.
+     Of there is no selection, return nil."
+
+    |sel|
+
+    sel := self selectionValue.
+    sel isNil ifTrue:[^ nil].
+    ^ directory constructString:sel.
+
+    "Modified: 7.9.1997 / 23:49:01 / cg"
+    "Modified: 18.9.1997 / 23:49:16 / stefan"
+! !
+
+!FileSelectionList methodsFor:'drawing'!
+
+redrawFromVisibleLine:startVisLineNr to:endVisLineNr
+    "redefined to look for directory in every line"
+
+    |l|
+
+    "first, draw chunk of lines"
+    super redrawFromVisibleLine:startVisLineNr to:endVisLineNr.
+    markDirectories ifFalse:[^ self].
+
+    "then draw marks"
+    startVisLineNr to:endVisLineNr do:[:visLineNr |
+        l := self visibleLineToListLine:visLineNr.
+        l notNil ifTrue:[
+            (directoryFileTypes at:l) ifTrue:[
+                self drawRightArrowInVisibleLine:visLineNr
+            ]
+        ]
+    ]
+
+    "Modified: / 22.9.1998 / 12:32:24 / cg"
+!
+
+redrawVisibleLine:visLineNr
+    "if the line is one for a directory, draw a right arrow"
+
+    |l|
+
+    super redrawVisibleLine:visLineNr.
+    markDirectories ifFalse:[^ self].
+
+    l := self visibleLineToListLine:visLineNr.
+    l notNil ifTrue:[
+        (directoryFileTypes at:l) ifTrue:[
+            self drawRightArrowInVisibleLine:visLineNr
+        ]
+    ]
+
+    "Modified: / 22.9.1998 / 12:32:34 / cg"
+! !
+
+!FileSelectionList methodsFor:'events'!
+
+directoryHolderChange
+    self directory:directoryHolder value.
+
+    "Created: 20.9.1997 / 13:12:45 / cg"
+!
+
+doubleClicked
+    self selectionIsDirectory ifTrue:[
+        stayInDirectory ifFalse:[
+            quickDirectoryChange ifFalse:[
+                directoryChangeAction notNil ifTrue:[
+                    directoryChangeAction value:self selection
+                ] ifFalse:[
+                    self changeDirectory
+                ]
+            ]
+        ].
+        ^ self
+    ].
+    super doubleClicked
+
+    "Created: 4.3.1996 / 17:39:58 / cg"
+    "Modified: 5.3.1996 / 02:38:06 / cg"
+!
+
+keyPress:key x:x y:y
+    "handle cursor-left and cursor-right keys"
+
+    <resource: #keyboard (#CursorLeft #CursorRight)>
+
+    key == #CursorLeft ifTrue:[
+        self changeToParentDirectory.
+        ^ self
+    ].
+    (key == #CursorRight) ifTrue:[
+        self changeToPreviousDirectory.
+        ^ self
+    ].
+    super keyPress:key x:x y:y
+!
+
+selectionChanged
+    "if the selection changed, check for it being a directory
+     and possibly go there. If its not a directory, perform the realAction."
+
+    self selection isCollection ifFalse:[
+        self selectionIsDirectory ifTrue:[
+            (stayInDirectory not and:[quickDirectoryChange]) ifTrue:[
+                directoryChangeAction notNil ifTrue:[
+                    directoryChangeAction value:self selection
+                ] ifFalse:[
+                    self changeDirectory
+                ]
+            ] ifFalse:[
+                directorySelectAction notNil ifTrue:[
+                    directorySelectAction value:self selection
+                ]
+            ]
+        ] ifFalse:[
+            realAction notNil ifTrue:[
+                realAction value:self selection
+            ].
+            fileSelectAction notNil ifTrue:[
+                fileSelectAction value:self selection
+            ]
+        ]
+    ]
+
+    "Modified: 18.4.1996 / 18:44:30 / cg"
+!
+
+sizeChanged:how
+    "redraw marks if any"
+
+    super sizeChanged:how.
+    markDirectories ifTrue:[
+        self invalidate
+    ]
+
+    "Modified: 29.5.1996 / 16:15:12 / cg"
+! !
+
+!FileSelectionList methodsFor:'initialization'!
+
+initialize
+    directory := Filename currentDirectory.
+    stayInDirectory := ignoreParentDirectory := ignoreDirectories := false.
+    ignoreFiles := quickDirectoryChange := false.
+    markDirectories := true.
+    super initialize.
+
+    pattern := '*'.
+    ignoreCaseInPattern := Filename isCaseSensitive not.
+    self initializeAction.
+
+    "nontypical use ..."
+    "
+     FileSelectionList new open
+     (FileSelectionList new directory:'/etc') open
+     (ScrollableView for:FileSelectionList) open
+     (HVScrollableView for:FileSelectionList) open
+    "
+
+    "Modified: 18.4.1996 / 18:49:19 / cg"
+    "Modified: 18.9.1997 / 18:52:03 / stefan"
+!
+
+initializeAction
+    "setup action as: selections in list get forwarded to enterfield if not 
+     a directory; otherwise directory is changed"
+
+    actionBlock := [:lineNr | self selectionChanged].
+"/    doubleClickActionBlock := [:lineNr | self selectionChanged].
+
+    "Modified: 4.3.1996 / 17:39:08 / cg"
+!
+
+reinitialize
+    directory := Filename currentDirectory.
+    super reinitialize
+
+    "Modified: 18.9.1997 / 18:52:16 / stefan"
+! !
+
+!FileSelectionList methodsFor:'private'!
+
+changeDirectory
+    "change directory to the selected one"
+
+    |entry|
+
+    entry := self selectionValue.
+    (entry isEmptyOrNil) ifTrue:[^ self].
+
+    (self changeDirectoryTo:entry) ifFalse:[^ self].
+
+    directoryStack := nil.
+!
+
+changeDirectoryTo:newDirectory
+    "change directory; check if allowed; return true if change was ok"
+
+    |entry ok newDir warnMessage oldDir|
+
+    entry := newDirectory.
+    (entry endsWith:' ...') ifTrue:[
+        entry := entry copyButLast:4.
+    ].
+
+    ok := false.
+    oldDir := directory baseName.
+    entry asFilename isAbsolute ifTrue:[
+        newDir := entry asFilename.
+    ] ifFalse:[
+        newDir := directory construct:entry.
+    ].
+    (directoryChangeCheckBlock isNil
+    or:[directoryChangeCheckBlock value:newDir]) ifTrue:[
+        newDir isReadable ifFalse:[
+            warnMessage := 'No permission to read directory "%1" !!'
+        ] ifTrue:[
+            newDir isExecutable ifFalse:[
+                warnMessage := 'No permission to enter directory "%1" !!'
+            ] ifTrue:[
+                ok := true.
+            ]
+        ].
+    ].
+    ok ifFalse:[
+        warnMessage notNil ifTrue:[
+            self warn:warnMessage with:entry.
+        ].
+        self setSelection:nil
+    ] ifTrue:[
+        self directory:newDir.
+        entry = '..' ifTrue:[
+            self setSelectElement:oldDir 
+        ].
+    ].
+    ^ ok
+
+    "Modified: / 23-01-2012 / 18:16:19 / cg"
+!
+
+changeToParentDirectory
+    "change to the parent directory"
+
+    |current parent|
+
+    current := self directory asFilename.
+    parent := current directory.
+    parent = current ifTrue:[^ false].
+
+    (self changeDirectoryTo:'..') ifFalse:[^ false].
+
+    directoryStack isNil ifTrue:[
+        directoryStack := OrderedCollection new.
+    ].
+    directoryStack addFirst:current pathName
+!
+
+changeToPreviousDirectory
+    "change to the previous directory"
+
+    |current previous|
+
+    directoryStack size == 0 ifTrue:[^ false].
+
+    previous := directoryStack removeFirst.
+
+    (self changeDirectoryTo:(previous asFilename baseName)) ifFalse:[^ false].
+!
+
+selectionIsDirectory
+    "return true, if the current selection is a directory"
+
+    |entry|
+
+    entry := self selectionValue.
+    (entry isEmptyOrNil) ifTrue:[ ^ false].
+
+    (entry endsWith:' ...') ifTrue:[
+        entry := entry copyButLast:4.
+    ].
+    ^ (directory construct:entry) isDirectory
+
+    "Created: / 4.3.1996 / 17:43:26 / cg"
+    "Modified: / 18.9.1997 / 23:37:05 / stefan"
+    "Modified: / 22.9.1998 / 12:30:21 / cg"
+!
+
+updateList
+    "set the lists contents to the filenames in the directory"
+
+    |newList newTypes obsolete 
+     matching dir ignoreCase|
+
+    directory isNil ifTrue:[
+        self list:nil.
+        ^ self
+    ].
+
+    self withCursor:(Cursor read) do:[
+        "
+         if the directory-id changed, MUST update.
+         (can happen after a restart, when a file is no longer
+          there, has moved or is NFS-mounted differently)
+        "
+        obsolete := directoryId ~~ directory id
+                    or:[directoryName ~= directory pathName
+                    or:[timeStamp notNil
+                        and:[directory modificationTime > timeStamp]]].
+
+        obsolete ifTrue:[
+            timeStamp := directory modificationTime.
+            directoryId := directory id.
+            directoryName := directory pathName.
+            [
+                directoryContents := (directory fullDirectoryContents ? #()) sort.
+            ] on:FileStream openErrorSignal do:[:ex|
+                directoryContents := nil
+            ].
+        ].
+
+        newList := OrderedCollection new.
+        newTypes := OrderedCollection new.
+
+        ignoreCase := ignoreCaseInPattern ? (Filename isCaseSensitive not).
+
+        dir := directory pathName asFilename.
+        directoryContents do:[:name |
+            |type fn fullName isDirectory ignore|
+
+            fn := dir construct:name.
+            fullName := dir constructString:name.
+            isDirectory := fn isDirectory.
+            ignore := true.
+
+            (matchBlock isNil or:[matchBlock value:fullName]) ifTrue:[
+                isDirectory ifTrue:[
+                    ignoreDirectories ifFalse:[
+                        name = '..' ifTrue:[
+                            ignoreParentDirectory ifFalse:[
+                                ignore := false.
+                            ]
+                        ] ifFalse:[
+                            name = '.' ifTrue:[
+                                "ignore"
+                            ] ifFalse:[
+                                ignore := false.
+                            ]
+                        ]
+                    ]
+                ] ifFalse:[
+                    ignoreFiles ifFalse:[
+                        matching := true.
+
+                        (pattern size > 0) ifTrue:[ 
+                            pattern ~= '*' ifTrue:[
+                                matching := pattern compoundMatch:name caseSensitive:ignoreCase not
+                            ]
+                        ].
+                                        
+                        matching ifTrue:[
+                            ignore := false.
+                        ]
+                    ]
+                ].
+            ].
+            ignore ifFalse:[
+                newList add:name.
+                newTypes add:isDirectory.
+            ].
+        ].
+        directoryFileTypes := newTypes.
+        self list:newList.
+    ].
+
+    "Modified: / 18.9.1997 / 23:43:52 / stefan"
+    "Modified: / 16.12.1999 / 01:23:41 / cg"
+!
+
+updateListWithoutScrolling
+    "set the lists contents to the filenames in the directory"
+
+    |sav|
+
+    sav := scrollWhenUpdating.
+    scrollWhenUpdating := nil.
+    self updateList.
+    scrollWhenUpdating := sav
+!
+
+visibleLineNeedsSpecialCare:visLineNr
+    |l|
+
+    l := self visibleLineToListLine:visLineNr.
+    l notNil ifTrue:[
+        (directoryFileTypes at:l) ifTrue:[^ true].
+        ^ super visibleLineNeedsSpecialCare:visLineNr
+    ].
+    ^ false
+
+    "Modified: / 22.9.1998 / 12:32:48 / cg"
+!
+
+widthForScrollBetween:firstLine and:lastLine
+    "return the width in pixels for a scroll between firstLine and lastLine
+     - return full width here since there might be directory marks"
+
+    ^ (width - margin - margin)
+! !
+
+!FileSelectionList methodsFor:'realization'!
+
+realize
+    "check if directory is still valid (using timestamp and inode numbers)
+     - reread if not"
+
+    super realize.
+
+    (timeStamp isNil 
+     or:[(directory modificationTime > timeStamp) 
+     or:[(directoryId isNil)
+     or:[directoryId ~~ directory id]]]) ifTrue:[
+        directoryId := nil.
+        self updateList
+    ].
+
+    "Created: 24.7.1997 / 18:24:36 / cg"
+    "Modified: 18.9.1997 / 23:36:10 / stefan"
+! !
+
+!FileSelectionList class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/FileSelectionList.st,v 1.59 2013-08-31 19:29:52 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FontPanel.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1327 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+DialogBox subclass:#FontPanel
+	instanceVariableNames:'previewField listOfEncodings familyList faceList sizeList
+		revertButton currentFamily currentFace currentStyle
+		currentFaceAndStyle currentSize sizeUnit currentEncoding
+		selectedFont nameLabel encodingFilter encodingLabel filter
+		combinedFilter encoding sizeLabelHolder pixelPointSwitch
+		xftFontsOnlyHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!FontPanel class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+
+!
+
+documentation
+"
+    this class implements a font chooser.
+
+    Notice: 
+        this is a very old dialog; 
+        it was written before the UI-framework was available and is completely
+        setup manually (initialize method).
+        Therefore, it desperately asks to be rewritten using the UIPainter...
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        Font FontDescription
+        View Dialog
+"
+!
+
+examples
+"
+    very simple:
+                                                                        [exBegin]
+        |font|
+        
+        font := FontPanel fontFromUser.
+        Transcript showCR:font
+                                                                        [exEnd]
+
+
+    with initial font:
+                                                                        [exBegin]
+        |font|
+
+        font := FontPanel 
+                    fontFromUserInitial:(Font 
+                                            family:'courier'
+                                            size:12).
+        Transcript showCR:font
+                                                                        [exEnd]
+
+
+    with initial font & title:
+                                                                        [exBegin]
+        |font|
+
+        font := FontPanel 
+                    fontFromUserInitial:(Font 
+                                            family:'courier'
+                                            size:12)
+                                  title:'select a fooBar font'.
+        Transcript showCR:font
+                                                                        [exEnd]
+
+
+    full setup; setting a filter to only present iso fonts
+    and callBack action:
+                                                                        [exBegin]
+
+        |panel|
+
+        panel := FontPanel new.
+        panel label:'hi there - which iso font ?'.
+        panel filter:[:fd | fd encoding notNil
+                            and:[fd encoding startsWith:'iso']].
+        panel action:[:family :face :style :size | 
+                        Transcript showCR:'family:' , family.
+                        Transcript showCR:'face:' , face.
+                        Transcript showCR:'style:' , style.
+                        Transcript showCR:'size:' , size printString.
+                     ].
+        panel open
+                                                                        [exEnd]
+"
+! !
+
+!FontPanel class methodsFor:'defaults'!
+
+defaultAsciiSampleString
+    ^ (self sampleStringWithAllLetters) , '
+
+ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
+1234567890    !!@#$%^&*(){}[]:"~;,./<>?
+'
+!
+
+defaultExtent
+    "return the default extent of my instances.
+     The value returned here is usually ignored, and
+     the value from preferredExtent taken instead."
+
+    ^ (Screen current pixelPerMillimeter * (200 @ 150)) rounded
+
+    "Modified: 22.4.1996 / 23:36:19 / cg"
+!
+
+defaultJIS0201SampleString
+    "return the sample jis preview text"
+
+    ^ (self defaultLatin1SampleString).
+!
+
+defaultJISSampleString
+    "return the sample jis preview text"
+
+    ^ 
+'The quick brown fox
+jumps over the lazy dog.
+
+' , #(16r65E5 16r672C 16r8A9E) asUnicodeString
+!
+
+defaultLatin1SampleString
+    "return the sample latin1 preview text"
+
+    ^ (self defaultAsciiSampleString) , 'äöüÄÖÜßéèêå©'
+!
+
+defaultSampleStringForEncoding:enc
+    |string lines|
+
+    enc notNil ifTrue:[    
+        ((enc startsWith:'unicode') or:[enc startsWith:'iso10646-']) ifTrue:[
+            ^ self defaultUnicodeSampleString.
+        ].
+        (enc startsWith:'ms-ansi') ifTrue:[
+            ^ self defaultUnicodeSampleString.
+        ].
+
+        (enc startsWith:'jis') ifTrue:[
+            (enc includesString:'0201') ifTrue:[
+                string := self defaultJIS0201SampleString    
+            ] ifFalse:[
+                string := self defaultJISSampleString
+            ]
+        ] ifFalse:[
+        ]
+    ].
+    string isNil ifTrue:[
+        string := self defaultLatin1SampleString.
+    ].
+    lines := string asStringCollection.
+    [
+        lines := lines encodeFrom:#unicode into:enc
+    ] on:CharacterEncoderError do:[:ex|
+        "substitute a default value for codes that cannot be represented
+         in the new character set"
+        ex proceedWith:ex defaultValue.
+    ].
+
+    ^ lines.
+!
+
+defaultUnicodeSampleString
+    "return the sample unicode preview text"
+
+    |t|
+
+    t := (self defaultAsciiSampleString) , '
+diaresis: äöüÄÖÜß
+accent: éèêåÅ
+special: ' ,  #(16r20AC) asUnicodeString , '
+math: ' ,  #(16r2200 16r2203 16r221E 16r2208 16r2209) asUnicodeString , '
+cyrillic: ' ,  #(16r440 16r443 16r441 16r441 16r43A 16r438 16r439 16r20 16r44F 16r437 16r44B 16r43A) asUnicodeString , '
+greek: ' , #(16r395 16r3BB 16r3BB 16r3B7 16r3BD 16r3B9 16r3BA 16r3AC) asUnicodeString , '
+japanese: ' , #(16r65E5 16r672C 16r8A9E) asUnicodeString , '
+chinese: ' ,
+#(16r4F60 16r597D 16r3002) asUnicodeString , ' ' ,
+#(16r6211 16r4E0D 16r8BF4 16r4E2D 16r6587) asUnicodeString , '
+korean: ' , #( 50504 45397 54616 49464 50836 ) asUnicodeString , '
+' ", 'hebrew: ' , #( 16r5E9 16r5dc 16r5d5 16r5dd 16r20 16r5e2 16r5d5 16r5dc 16r5dd ) asUnicodeString , ' (sorry: right-to-left writing is not supported)
+' ", ''.
+    ^ t
+
+    "Modified: / 10-08-2010 / 16:05:16 / cg"
+!
+
+sampleStringWithAllLetters
+    ^ (self classResources 
+        at:'CHARSET_TEST_SENTENCE' 
+        ifAbsent:'The quick brown fox jumps over the lazy dog') withCRs
+! !
+
+!FontPanel class methodsFor:'menu specs'!
+
+previewMenu
+    "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:FontPanel andSelector:#previewMenu
+     (Menu new fromLiteralArrayEncoding:(FontPanel previewMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Copy'
+            itemValue: previewCopySelection
+            translateLabel: true
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            label: 'Show Character Set'
+            itemValue: previewShowCharacterSet
+            translateLabel: true
+            isVisible: characterSetViewClassAvailable
+          )
+         (MenuItem
+            label: 'Show Character Set (Using xfd)'
+            itemValue: previewShowCharacterSetUsingXFD
+            translateLabel: true
+            isVisible: osIsUNIX
+          )
+         (MenuItem
+            label: '-'
+            isVisible: characterSetViewClassAvailableOrOSIsUNIX
+          )
+         (MenuItem
+            label: 'Inspect Font'
+            itemValue: previewInspectFont
+            translateLabel: true
+          )
+         (MenuItem
+            label: 'Copy Fontname'
+            itemValue: copyFontName
+            translateLabel: true
+          )
+         )
+        nil
+        nil
+      )
+
+    "Modified: / 11-10-2006 / 21:51:02 / cg"
+! !
+
+!FontPanel class methodsFor:'startup'!
+
+fontFromUser
+    "open a fontPanel and return the selected font, or nil
+     if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:nil
+        title:nil
+        filter:nil
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUser
+    "
+
+    "Modified: 27.2.1996 / 00:51:59 / cg"
+!
+
+fontFromUserInitial:aFont
+    "open a fontPanel showing aFont initially,
+     and return the selected font, or nil if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:aFont 
+        title:nil
+        filter:nil
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12)
+     FontPanel fontFromUserInitial:MenuPanel defaultFont
+    "
+!
+
+fontFromUserInitial:aFont title:someTitle
+    "open a fontPanel with title and return the selected font, 
+     or nil if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:aFont 
+        title:someTitle 
+        filter:nil
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+
+    "Created: 27.2.1996 / 00:59:46 / cg"
+    "Modified: 29.4.1996 / 09:45:34 / cg"
+!
+
+fontFromUserInitial:initialFont title:someTitle filter:aFilterBlock
+    "open a fontPanel with title and font-filter
+     and return the selected font, or nil if abort is pressed"
+
+    ^ self 
+        fontFromUserInitial:initialFont 
+        title:someTitle 
+        filter:aFilterBlock 
+        encoding:nil
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+
+    "Created: 27.2.1996 / 00:59:46 / cg"
+    "Modified: 10.4.1997 / 09:53:03 / cg"
+!
+
+fontFromUserInitial:initialFont title:someTitle filter:aFilterBlock encoding:encoding
+    "open a fontPanel with title and font-filter
+     and return the selected font, or nil if abort is pressed"
+
+    ^ self
+        fontFromUserInitial:initialFont 
+        title:someTitle 
+        filter:aFilterBlock 
+        encoding:encoding 
+        enabled:true
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+!
+
+fontFromUserInitial:initialFont title:someTitle filter:aFilterBlock encoding:encoding enabled:enabled
+    "open a fontPanel with title and font-filter
+     and return the selected font, or nil if abort is pressed"
+
+    |fontPanel selectedFont|
+
+    fontPanel := self new.
+    fontPanel filter:aFilterBlock.
+    someTitle notNil ifTrue:[
+        fontPanel label:someTitle
+    ].
+    fontPanel action:[:aFontDescription | selectedFont := aFontDescription].
+    initialFont notNil ifTrue:[
+        fontPanel initialFont:initialFont.
+    ].
+    encoding notNil ifTrue:[
+        fontPanel encoding:encoding.
+    ] ifFalse:[
+        initialFont notNil ifTrue:[
+            fontPanel encoding:initialFont encoding
+        ].
+    ].
+    fontPanel enabled:enabled.
+    fontPanel showAtPointer.
+    fontPanel destroy.
+    ^ selectedFont
+
+    "
+     FontPanel fontFromUserInitial:(Font family:'courier' size:12) title:'select some font'
+    "
+
+    "Created: 27.2.1996 / 00:59:46 / cg"
+    "Modified: 10.4.1997 / 09:53:03 / cg"
+!
+
+openOn:aFont
+    "open a fontPanel showing aFont initially.
+     This panel is for information only - no font selection is possible."
+
+    ^ self 
+        fontFromUserInitial:aFont 
+        title:(aFont userFriendlyName)
+        filter:nil
+        encoding:nil
+        enabled:false
+
+    "
+     FontPanel openOn:(Font family:'courier' size:12)
+     FontPanel openOn:MenuPanel defaultFont
+    "
+! !
+
+!FontPanel methodsFor:'accessing'!
+
+action:aFourArgBlock
+    "set the action to be evaluated on ok.
+     The block will be evaluated with family, face, style, size and encoding."
+
+    okAction := aFourArgBlock
+
+    "Modified: 10.4.1997 / 09:49:58 / cg"
+!
+
+encoding:aPattern
+    "set the encoding goal"
+
+    encoding := aPattern.
+    encodingFilter contents:encoding.
+
+    self encodingFilterSelected:encoding.
+    shown ifTrue:[
+        self updateFamilyList
+    ].
+
+    "Created: 29.2.1996 / 04:05:31 / cg"
+    "Modified: 29.4.1996 / 09:40:18 / cg"
+!
+
+filter:aOneArgBlockOrNil
+    "set a filter; if non-nil, only fonts for which the filterBlock
+     returns true will be offered"
+
+    filter := aOneArgBlockOrNil.
+    filter isNil ifTrue:[
+        xftFontsOnlyHolder value 
+            ifTrue:[ combinedFilter := [:fd | fd isXftFont] ]
+            ifFalse:[ combinedFilter := [:fd | true] ]                                     
+    ] ifFalse:[
+        xftFontsOnlyHolder value 
+            ifTrue:[ combinedFilter := [:fd | fd isXftFont and:[filter value:fd]] ]
+            ifFalse:[ combinedFilter := filter ]
+    ].
+
+    familyList list:nil.
+    shown ifTrue:[
+        self updateFamilyList
+    ].
+
+    "Created: 27.2.1996 / 01:40:08 / cg"
+    "Modified: 29.4.1996 / 09:40:49 / cg"
+!
+
+initialFont:aFont
+    "set the font to be selected initially"
+
+    |encoding|
+
+    selectedFont := aFont.
+    currentFamily := aFont family.
+    currentFace := aFont face.
+    currentStyle := aFont style.
+    currentSize := aFont size.
+    currentFaceAndStyle := currentFace,'-',currentStyle.
+
+    self xftFontsOnlyHolder value:(aFont isXftFont).
+    encoding := aFont encoding.    
+    sizeUnit := aFont sizeUnit.
+
+"/ self halt.
+    encodingFilter contents:encoding.
+    self encodingFilterSelected:encoding.
+    self showSelectedFont.
+
+    "Modified: 23.2.1996 / 00:51:32 / cg"
+!
+
+xftFontsOnlyHolder
+    xftFontsOnlyHolder isNil ifTrue:[
+        xftFontsOnlyHolder := true asValue
+    ].
+    ^ xftFontsOnlyHolder
+! !
+
+!FontPanel methodsFor:'initialization'!
+
+enabled:aBoolean
+    familyList enabled:aBoolean.
+    faceList enabled:aBoolean.
+    sizeList enabled:aBoolean.
+    encodingFilter notNil ifTrue:[
+        encodingFilter enabled:aBoolean.
+    ]
+!
+
+initialize
+    |familyLabel faceLabel sizeLabel panel fontBrowserView v1 v2 v3
+     mm fH eH l box1 box2 showFontNameLabel xftCheckBox vPanel|
+
+    super initialize.
+
+    showFontNameLabel := self graphicsDevice isWindowsPlatform not.
+    sizeUnit := #pt.
+
+    mm := ViewSpacing.
+
+    self addAbortAndOkButtons.
+
+    panel := View origin:0.0@0.0 corner:1.0@1.0 in:self.
+    panel bottomInset:(buttonPanel preferredHeight 
+                        + (mm*3) 
+                        + (showFontNameLabel ifTrue:24 ifFalse:0) ).
+
+    label := resources string:'Font dialog'.
+
+    box1 := HorizontalPanelView in:panel.
+    "/ box horizontalLayout:#leftFit.
+    box1 horizontalLayout:#left.
+    box1 origin:0.0@1.0 corner:0.8@1.0.
+
+    box2 := HorizontalPanelView in:panel.
+    "/ box horizontalLayout:#leftFit.
+    box2 horizontalLayout:#right.
+    box2 origin:0.8@1.0 corner:1.0@1.0.
+
+    l := Label label:(resources string:'Encoding:') in:box1.
+    l borderWidth:0.
+    l adjust:#left.
+
+    eH := 0.
+
+    encodingFilter := ComboBoxView in:box1.
+    "/ encodingFilter font:l font.
+    encodingFilter level:-1.
+    encodingFilter contents:'*'.
+    encodingFilter list:(self listOfEncodingsInFilterCombo).
+    encodingFilter action:[:pattern | self encodingFilterSelected:pattern].
+    encodingFilter immediateAccept:true.
+    "/ encodingFilter editor font:l font.
+
+    self showEncodingFilter ifTrue:[
+        eH := encodingFilter preferredHeight.
+        box1 topInset:(eH negated-4); horizontalInset:mm.
+    ] ifFalse:[
+        encodingFilter beInvisible
+    ].
+
+"/    encodingFilter acceptOnReturn:true.
+"/    encodingFilter acceptOnTab:true.
+"/    encodingFilter acceptOnLeave:true.
+"/    encodingFilter acceptOnLostFocus:true.
+"/    encodingFilter acceptOnPointerLeave:true.
+
+    encodingLabel := Label label:' ' in:box1.
+    "/ eH := encodingLabel preferredExtent y.
+    "/ encodingLabel origin:0.6@1.0 corner:1.0@1.0.
+    "/ encodingLabel topInset:(eH negated); horizontalInset:mm.
+    encodingLabel level:0; adjust:#left.
+    encodingLabel adjust:#right.
+    self showEncodingFilter ifFalse:[
+        encodingLabel beInvisible
+    ].
+
+    XftFontDescription notNil ifTrue:[
+        UserPreferences current useXftFontsOnly ifTrue:[
+            self xftFontsOnlyHolder value: true.
+        ] ifFalse:[
+            self xftFontsOnlyHolder value: false.
+            xftCheckBox := CheckBox label:'XFT Fonts Only' in:box1.
+            xftCheckBox model:xftFontsOnlyHolder.
+            xftFontsOnlyHolder onChangeEvaluate:[ self xftFontsOnlyChanged ].
+        ].
+    ].
+
+"/    sep := View in:box1.
+"/    sep width:10 height:10.
+
+    pixelPointSwitch := ComboListView in:box2.
+    "/ encodingFilter font:l font.
+    pixelPointSwitch level:-1.
+    pixelPointSwitch contents:'pt'.
+    pixelPointSwitch list:#(#pt #px).
+    pixelPointSwitch action:[:sizeUnit | self sizeUnitSelected:sizeUnit].
+    box2 topInset:(pixelPointSwitch preferredHeight negated-4); horizontalInset:mm.
+    "/ encodingFilter editor font:l font.
+
+    self showEncodingFilter ifTrue:[
+        eH := encodingFilter preferredHeight.
+        box1 topInset:(eH negated-4); horizontalInset:mm.
+    ] ifFalse:[
+        encodingFilter beInvisible
+    ].
+
+    showFontNameLabel ifTrue:[
+        nameLabel := Label label:'' in:self.
+        nameLabel origin:0.0@1.0 corner:1.0@1.0.
+        nameLabel bottomInset:(buttonPanel preferredHeight + (mm*2)).
+        nameLabel topInset:(buttonPanel preferredHeight + (mm*2) + 24) negated; horizontalInset:mm.
+        nameLabel level:0; adjust:#left.
+        nameLabel font:(FontDescription family:'helvetica' face:'medium' style:'roman' size:9).
+    ].
+
+    vPanel := VariableVerticalPanel in:panel.
+    vPanel origin:0.0@0.0 corner:1.0@1.0.
+
+    previewField := HVScrollableView for:TextView in:vPanel.
+    "/ previewField origin:0.0@0.0 corner:1.0@0.4.
+    previewField autoHideScrollBars:true.
+    previewField := previewField scrolledView.
+    previewField inset:mm.
+
+    self is3D ifTrue:[
+        previewField level:-1.
+    ] ifFalse:[
+        previewField borderWidth:1.
+    ].
+
+    fontBrowserView := View in:vPanel.
+    "/ fontBrowserView origin:0.0@0.4 corner:1.0@1.0.
+    fontBrowserView bottomInset:(eH + mm).
+
+    v1 := View origin:0.0@0.0 corner:0.4@1.0 in:fontBrowserView.
+
+    familyLabel := Label label:(resources string:'Family') in:v1.
+    familyLabel borderWidth:0.
+    familyLabel origin:(0.0 @ 0.0) extent:(1.0 @ nil).
+    fH := familyLabel preferredHeight.
+
+    familyList := ScrollableView for:SelectionInListView in:v1.
+    familyList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+    familyList inset:mm.
+    familyList topInset:fH.
+
+    familyList := familyList scrolledView.
+    self makeTabable:familyList.
+
+    v2 := View origin:0.4@0.0 corner:0.8@1.0
+                   in:fontBrowserView.
+
+    faceLabel := Label label:(resources string:'Typeface') in:v2.
+    faceLabel borderWidth:0.
+    faceLabel origin:(0.0 @ 0.0) extent:(1.0 @ nil).
+
+    faceList := ScrollableView for:SelectionInListView in:v2.
+    faceList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+    faceList inset:mm.
+    faceList topInset:fH.
+    faceList := faceList scrolledView.
+    self makeTabable:faceList.
+
+    v3 := View origin:0.8@0.0 corner:1.0@1.0 in:fontBrowserView.
+
+    sizeLabelHolder := (resources string:'Size') asValue.
+    sizeLabel := Label in:v3.
+    sizeLabel labelChannel:sizeLabelHolder.
+    sizeLabel borderWidth:0.
+    sizeLabel origin:(0.0 @ 0.0)extent:(1.0 @ nil).
+
+    sizeList := ScrollableView for:SelectionInListView in:v3.
+    sizeList origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+    sizeList inset:mm.
+    sizeList topInset:fH.
+    sizeList := sizeList scrolledView.
+    self makeTabable:sizeList.
+
+    familyList action:[:lineNr | self familySelected:(familyList selectionValue)].
+    faceList action:[:lineNr | self faceSelected:(faceList selectionValue)].
+    sizeList action:[:lineNr | self sizeSelected:(sizeList selectionValue)].
+
+    previewField menuHolder:self previewMenu.
+
+    "
+     FontPanel new showAtPointer
+    "
+
+    "Modified: 31.5.1996 / 22:01:45 / cg"
+!
+
+listOfEncodingsInFilterCombo
+    |availableEncodings listPresentedToUser|
+
+    listOfEncodings := OrderedCollection new.
+    self graphicsDevice isWindowsPlatform ifTrue:[
+        listOfEncodings
+            addAll:
+                #(
+                    '*'
+                    nil
+                ).
+    ] ifFalse:[
+        listOfEncodings
+            addAll:
+                #(
+                    '*'
+                    #'iso8859-1'
+                    #'iso10646-1'
+                    'jis*'
+                    nil
+                ).
+    ].
+
+    availableEncodings := Set new.
+    self graphicsDevice listOfAvailableFonts do:[:f | availableEncodings add:(f encoding ? '?')].
+    availableEncodings := availableEncodings asSortedCollection.
+    listOfEncodings addAll:availableEncodings.
+
+    listPresentedToUser := listOfEncodings collect:[:enc |
+                            |encoder userFriendlyName|
+
+"/
+"/ disabled to avoid autoloading of encoders.
+"/                            (enc notNil and:[enc ~= '*']) ifTrue:[
+"/                                encoder := CharacterEncoder encoderFor:enc ifAbsent:nil.
+"/                                encoder notNil ifTrue:[
+"/                                    userFriendlyName := encoder userFriendlyNameOfEncoding.
+"/                                ].
+"/                            ].
+                            (userFriendlyName notNil and:[(userFriendlyName sameAs: enc) not]) ifTrue:[
+                                enc , ' (' , userFriendlyName , ')'
+                            ] ifFalse:[
+                                enc
+                            ]
+                          ].
+    ^ listPresentedToUser.
+!
+
+postRealize
+    "kludge for sco - xlsfont fails sometimes - try again here"
+
+    self updateFamilyList.
+    super postRealize
+
+    "Modified: 27.2.1996 / 01:40:47 / cg"
+    "Created: 24.7.1997 / 18:12:42 / cg"
+!
+
+previewMenu
+    <resource: #programMenu >
+
+    |menu|
+
+    menu :=  Menu decodeFromLiteralArray:(self class previewMenu).
+    menu findGuiResourcesIn:self.
+    ^ menu
+
+    "Modified: / 27-03-2007 / 11:15:53 / cg"
+!
+
+showEncodingFilter
+    ^ true
+! !
+
+!FontPanel methodsFor:'private'!
+
+clearPreview
+    "clear the preview subview"
+
+    shown ifTrue:[
+        previewField contents:nil.
+        encodingLabel notNil ifTrue:[ 
+            encodingLabel label:''.
+        ].
+    ].
+
+    "Created: 17.4.1996 / 15:19:16 / cg"
+    "Modified: 11.8.1997 / 03:01:42 / cg"
+!
+
+extractFaceAndStyleFrom:aString
+    "given a string, extract currentFace and currentStyle"
+
+    |index|
+
+    index := aString indexOf:$-.
+    currentFaceAndStyle := aString.
+    (index ~~ 0) ifTrue:[
+        currentFace := aString copyTo:(index - 1).
+        currentStyle := aString copyFrom:(index + 1)
+    ] ifFalse:[
+        currentFace := aString.
+        currentStyle := nil.
+    ].
+
+    "Modified: 29.4.1996 / 09:41:47 / cg"
+!
+
+fontForPreview
+    "get the preview font"
+
+    |font allFonts fonts|
+
+    currentSize isNil ifTrue:[
+        ^ nil.
+    ].
+
+    font := (self xftFontsOnlyHolder value
+                ifTrue:[XftFontDescription]
+                ifFalse:[Font])
+              family:currentFamily 
+              face:currentFace 
+              style:currentStyle
+              size:currentSize      
+              sizeUnit:sizeUnit
+              encoding:encoding.
+    
+    font notNil ifTrue:[^ font].
+
+    allFonts := self graphicsDevice 
+                    fontsInFamily:(currentFamily ? '*')
+                    face:(currentFace ? '*')
+                    style:(currentStyle ? '*')
+                    filtering:combinedFilter.
+
+    sizeUnit == #px ifTrue:[
+        fonts := allFonts select:[:f | f pixelSize = currentSize].
+    ] ifFalse:[
+        fonts := allFonts select:[:f | f size = currentSize].
+    ].
+    fonts notEmpty ifTrue:[
+        font := fonts anElement.
+    ] ifFalse:[
+        "/ mhmh:
+        "/   size=0 is returned for scalable fonts. 
+        "/   Any size is possible.
+        "/
+        fonts := allFonts select:[:f | f size = 0].
+        fonts notEmpty ifTrue:[
+            font := Font family:currentFamily 
+                      face:currentFace 
+                      style:currentStyle
+                      size:currentSize      
+                      sizeUnit:sizeUnit
+                      encoding:(fonts anElement encoding).
+        ]    
+    ].
+    ^ font
+!
+
+getFacesForFamily:aFamilyName filtering:filter
+    "the list of font faces for a given family"
+
+    ^ self graphicsDevice facesInFamily:aFamilyName filtering:filter.
+!
+
+getFamilyList 
+    "the list of font families"
+
+    ^ self graphicsDevice fontFamiliesFiltering:combinedFilter.
+!
+
+getSizesInFamily:aFamilyName face:face style:style filtering:filter
+    sizeUnit == #px ifTrue:[
+        ^ self graphicsDevice 
+             pixelSizesInFamily:(currentFamily ? '*')
+             face:(currentFace ? '*')
+             style:(currentStyle ? '*')
+             filtering:filter.
+    ] ifFalse:[
+        ^ self graphicsDevice 
+             sizesInFamily:(currentFamily ? '*')
+             face:(currentFace ? '*')
+             style:(currentStyle ? '*')
+             filtering:filter.
+    ].
+!
+
+getStylesInFamily:aFamilyName face:aFace filtering:filter
+    "the list of font styles for a given family-face"
+
+    ^ self graphicsDevice stylesInFamily:aFamilyName face:aFace filtering:filter.
+!
+
+showPreview
+    "show the preview text"
+
+    |font deviceFont enc fontName|
+
+    "/ self clearPreview.
+
+    "
+     show a wait cursor: for some fonts (kanji etc) the
+     X-server needs quite some time to load the font
+    "
+    self withWaitCursorDo:[
+        font := self fontForPreview.
+        font notNil ifTrue:[
+            deviceFont := font onDevice:self graphicsDevice.
+            enc := deviceFont encoding.
+            enc isNil ifTrue:[enc := #'fontspecific'].
+
+            previewField font:deviceFont.
+            previewField characterEncoding:enc.
+
+            encodingLabel label:enc.
+            currentEncoding := enc.
+            fontName := deviceFont fullName.
+            (font isKindOf:XftFontDescription) ifTrue:[fontName := fontName,' (xft)'].
+            previewField contents:(font userFriendlyName,'\\' withCRs,(self class defaultSampleStringForEncoding:enc) asString).
+        ] ifFalse:[
+            previewField contents:nil.
+            encodingLabel label:nil.
+            currentEncoding := nil.
+            fontName := nil.
+        ].
+        nameLabel notNil ifTrue:[nameLabel label:fontName].
+    ]
+
+    "Modified: 30.6.1997 / 17:26:22 / cg"
+!
+
+showSelectedFont
+    |fam face faceAndStyle style sz|
+
+    fam := selectedFont family.
+    currentEncoding := selectedFont encoding.
+
+    self familySelected:fam showPreview:false.
+    fam notNil ifTrue:[
+        face := selectedFont face.
+        (face notNil and:[(style := selectedFont style) notNil]) ifTrue:[
+            faceAndStyle := face , '-' , style.
+        ].
+        self faceSelected:faceAndStyle showPreview:false.
+        faceAndStyle notNil ifTrue:[
+            sz := sizeUnit == #px ifTrue:[selectedFont pixelSize] ifFalse:[selectedFont size].
+            pixelPointSwitch contents:sizeUnit.
+            self sizeSelected:sz showPreview:false. 
+        ]
+    ].
+
+    self showPreview
+!
+
+updateFamilyList 
+    "update the list of font families"
+
+    |families|
+
+    familyList list isNil ifTrue:[
+        families := self getFamilyList.
+        families notNil ifTrue:[
+            families := families asNewOrderedCollection sort
+        ].
+        familyList list:families
+    ].
+    selectedFont notNil ifTrue:[
+        self showSelectedFont
+    ].
+
+    "Modified: 27.2.1996 / 01:39:42 / cg"
+    "Created: 27.2.1996 / 01:40:37 / cg"
+!
+
+updateSizeList
+    |sizes sizeStrings oldSize|
+
+    sizes := self 
+            getSizesInFamily:(currentFamily ? '*')
+            face:(currentFace ? '*')
+            style:(currentStyle ? '*')
+            filtering:combinedFilter.
+
+    (sizes isEmptyOrNil) ifTrue:[
+        sizeList list:nil.
+        currentSize := nil.
+"/ self halt.
+        ^ self
+    ].
+
+    sizes := sizes asOrderedCollection.
+    selectedFont notNil ifTrue:[
+        oldSize := currentSize.
+        currentSize := (selectedFont sizeUnit == #px)
+                         ifTrue:[ selectedFont pixelSize ]
+                         ifFalse:[ selectedFont size ].
+        currentSize == 0 ifTrue:[
+            currentSize := oldSize 
+        ].
+        currentSize notNil ifTrue:[
+            (sizes includes:currentSize) ifFalse:[
+                sizes add:currentSize
+            ].
+        ].
+    ].
+    sizes sort.
+
+    sizeStrings := sizes collect:[:entry | entry printString].
+    sizeList list:sizeStrings.
+    currentSize notNil ifTrue:[
+        (sizeStrings includes:(currentSize printString)) ifTrue:[
+            sizeList setSelectElement:currentSize printString.
+        ]
+    ].
+!
+
+xftFontsOnlyChanged
+    self filter:filter. "/ will update combinedFilter
+! !
+
+!FontPanel methodsFor:'queries'!
+
+characterSetViewClassAvailable
+    ^ CharacterSetView notNil
+
+    "Created: / 11-10-2006 / 21:27:51 / cg"
+!
+
+characterSetViewClassAvailableOrOSIsUNIX
+    ^ self characterSetViewClassAvailable or:[self osIsUNIX]
+
+    "Created: / 11-10-2006 / 21:29:20 / cg"
+!
+
+osIsUNIX
+    ^ OperatingSystem isUNIXlike
+
+    "Modified: / 11-10-2006 / 21:28:59 / cg"
+!
+
+preferredExtent
+    "return the boxes preferredExtent"
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    "/ ^ 450@350
+    ^ self class defaultExtent.
+
+    "Modified: 19.7.1996 / 20:44:08 / cg"
+! !
+
+!FontPanel methodsFor:'user interaction'!
+
+copyFontName
+    self setClipboardText:(previewField font storeString).
+!
+
+encodingFilterSelected:anEncodingPattern
+    "another encoding was selected; find available fonts and update lists"
+
+    |pattern|
+
+    anEncodingPattern isNil ifTrue:[
+        self filter:nil.
+        ^ self.
+    ].
+
+    pattern := (anEncodingPattern upTo:$( ) withoutSeparators.
+
+    pattern = '?' ifTrue:[
+        pattern := ''
+    ] ifFalse:[
+        pattern := (pattern isEmptyOrNil ifTrue:'*' ifFalse:pattern).
+    ].
+    self 
+        filter:
+            [:f | 
+                |doesMatch encoding|
+
+                "/ k&d hack for mswindows names...
+                "/ Transcript showCR:f encoding.
+                encoding := f encoding ? ''.
+                doesMatch := (pattern match:encoding).
+                doesMatch ifFalse:[
+                    encoding = 'ms-ansi' ifTrue:[
+                       doesMatch := (pattern = 'iso8859-1') 
+                                    or:[ (pattern = 'iso10646-1')
+                                    or:[ (pattern = 'unicode') ]]
+                    ].
+                    (encoding = 'iso8859-1' 
+                    or:[encoding = 'iso10646-1' 
+                    or:[encoding = 'unicode']]) ifTrue:[
+                       doesMatch := (pattern = 'ms-ansi')
+                    ].
+                ].
+                doesMatch
+            ].
+!
+
+faceSelected:aFaceAndStyleName
+    "a fonts face was selected; find available sizes and update lists"
+
+    self faceSelected:aFaceAndStyleName showPreview:true
+!
+
+faceSelected:aFaceAndStyleName showPreview:showPreview
+    "a fonts face was selected; find available sizes and update lists"
+
+    |sizes sizeStrings didShow|
+
+    aFaceAndStyleName notNil ifTrue:[    
+        self extractFaceAndStyleFrom:aFaceAndStyleName.
+    ].
+    self updateSizeList.
+    showPreview ifTrue:[
+        self showPreview.
+    ].
+    ^ self.
+"/
+"/    sizes := self 
+"/                getSizesInFamily:(currentFamily ? '*')
+"/                face:(currentFace ? '*')
+"/                style:(currentStyle ? '*')
+"/                filtering:combinedFilter.
+"/
+"/    (sizes isEmptyOrNil) ifTrue:[
+"/        sizeList list:nil.
+"/        currentSize := nil.
+"/        self breakPoint:#cg.
+"/        showPreview ifTrue:[
+"/            self showPreview.
+"/        ].
+"/        ^ self
+"/    ].
+"/
+"/    didShow := false.
+"/
+"/    sizes := sizes asOrderedCollection.
+"/    selectedFont notNil ifTrue:[
+"/        (sizes includes:selectedFont size) ifFalse:[
+"/            sizes add:selectedFont size
+"/        ].
+"/    ].
+"/    sizes sort.
+"/
+"/    sizeStrings := sizes collect:[:entry | entry printString].
+"/    sizeList list:sizeStrings.
+"/    currentSize notNil ifTrue:[
+"/        (sizeStrings includes:(currentSize printString)) ifTrue:[
+"/            sizeList setSelectElement:currentSize printString.
+"/            showPreview ifTrue:[
+"/                self showPreview.
+"/                didShow := true.
+"/            ]
+"/        ]
+"/    ].
+"/    didShow ifFalse:[
+"/        self clearPreview
+"/    ].
+"/
+    "Modified: 30.6.1997 / 17:25:46 / cg"
+!
+
+familySelected:aFamilyName
+    "a fonts family was selected; find available faces and update lists"
+
+    self familySelected:aFamilyName showPreview:true
+!
+
+familySelected:aFamilyName showPreview:showPreview
+    "a fonts family was selected; find available faces and update lists"
+
+    |faces styles list|
+
+    familyList setSelectElement:aFamilyName.
+
+    currentFamily := aFamilyName.
+    faces := self getFacesForFamily:aFamilyName filtering:combinedFilter.
+    faces isEmptyOrNil ifTrue:[
+        currentFace := currentStyle := currentFaceAndStyle := nil.
+        faceList list:nil.
+        self faceSelected:nil showPreview:showPreview.
+        ^ self.
+    ].
+
+    list := SortedCollection new.
+    faces do:[:aFace |
+        styles := (self getStylesInFamily:aFamilyName face:aFace filtering:combinedFilter) ? #().
+        styles do:[:aStyle |
+            aFace isEmpty ifTrue:[
+                list add:(aStyle)
+            ] ifFalse:[
+                list add:(aFace , '-' , aStyle)
+            ]
+        ]
+    ].
+
+    faceList list:list.
+    currentFaceAndStyle notNil ifTrue:[
+        (list includes:currentFaceAndStyle) ifFalse:[
+            currentFaceAndStyle = 'normal-roman' ifTrue:[
+                (list includes:'regular-roman') ifTrue:[
+                    currentFaceAndStyle := 'regular-roman'.
+                    currentFace := 'regular'.
+                    currentStyle := 'roman'.
+                ].
+                (list includes:'medium-roman') ifTrue:[
+                    currentFaceAndStyle := 'medium-roman'.
+                    currentFace := 'medium'.
+                    currentStyle := 'roman'.
+                ].
+            ].
+        ].
+        (list includes:currentFaceAndStyle) ifTrue:[
+            faceList setSelectElement:currentFaceAndStyle.
+            self faceSelected:currentFaceAndStyle showPreview:showPreview.
+            ^ self
+        ]
+    ].
+    list notEmptyOrNil ifTrue:[
+        "/ faceList setSelectElement:(list first).
+        faceList selectElement:(list first).
+        self faceSelected:(list first) showPreview:showPreview.
+        self updateSizeList.
+        ^ self
+    ].
+
+    sizeList list:nil.
+    self clearPreview.
+
+    "Modified: 26.5.1996 / 15:04:29 / cg"
+!
+
+okPressed
+    "ok was pressed; hide myself and evaluate the okAction, passing
+     family, face, style and size as arguments"
+
+    self hide.
+    okAction notNil ifTrue:[
+        currentFamily notNil ifTrue:[
+            okAction value:
+                ((self xftFontsOnlyHolder value
+                        ifTrue:[XftFontDescription]
+                        ifFalse:[FontDescription])
+                      family:currentFamily 
+                      face:currentFace 
+                      style:currentStyle
+                      size:currentSize      
+                      sizeUnit:(sizeUnit ? #pt)
+                      encoding:(currentEncoding ? encoding)).
+        ]
+    ]
+
+    "Modified: 10.4.1997 / 09:51:31 / cg"
+!
+
+previewCopySelection
+    previewField copySelection.
+!
+
+previewInspectFont
+    previewField font inspect.
+!
+
+previewShowCharacterSet
+    CharacterSetView openOn:(previewField font)
+!
+
+previewShowCharacterSetUsingXFD
+    [
+        OperatingSystem executeCommand:'xfd -fn ' , previewField font fullName.
+    ] fork.
+!
+
+sizeSelected:aNumberOrString
+    "a size was selected; update preview"
+
+    self sizeSelected:aNumberOrString showPreview:true.
+!
+
+sizeSelected:aNumberOrString showPreview:showPreview
+    "a size was selected; update preview"
+
+    aNumberOrString isNumber ifTrue:[
+        currentSize := aNumberOrString
+    ] ifFalse:[
+        currentSize := Number readFromString:aNumberOrString onError:nil
+    ].
+    showPreview ifTrue:[self showPreview]
+
+    "Modified: 29.4.1996 / 09:43:23 / cg"
+!
+
+sizeUnitSelected:unitSymbol
+    sizeUnit := unitSymbol.
+    sizeLabelHolder value:(resources 
+                            string:(sizeUnit == #px 
+                                        ifTrue:'Size (px)' 
+                                        ifFalse:'Size')).
+
+    self showPreview
+! !
+
+!FontPanel class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/FontPanel.st,v 1.126 2014-04-27 21:57:23 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/FontPanel.st,v 1.126 2014-04-27 21:57:23 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FramedBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,773 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SimpleView subclass:#FramedBox
+	instanceVariableNames:'label labelChannel labelPosition fgColor showFrame frame3D
+		horizontalSpace verticalSpace innerHorizontalSpace
+		innerVerticalSpace'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!FramedBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a frame around something. The frame may have a label, whose position
+    is controlled by the labelPosition variable, a symbol which may be one of:
+    [#topCenter #topLeft #topRight #bottomLeft #bottomCenter #bottomRight #hidden]
+
+    The default labelPosition is controlled by the styleSheet variable:
+    'framedBoxLabelPosition' (usually, #topCenter).
+
+    Its also possible, to not show the frame but only the label, by setting
+    showFrame to false.
+
+    The distance from the outer viewBorder to the frame is controlled by
+    horizontalSpace / verticalSpace. The default is the fonts height.
+
+    The distance from the frame to the interior area is controlled by
+    innerHorizontalSpace / innerVerticalSpace. The default is 0.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        PanelView Separator
+"
+!
+
+examples 
+"
+    simple:
+                                                                        [exBegin]
+        |top frame1 frame2 frame3|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        frame1 := FramedBox origin:0.0@0.0 corner:0.5@0.5 in:top.
+        frame1 label:'frame1'.
+
+        frame2 := FramedBox origin:0.5@0.0 corner:1.0@0.5 in:top.
+        frame2 label:'frame2'.
+
+        frame3 := FramedBox origin:0.0@0.5 corner:1.0@1.0 in:top.
+        frame3 label:'frame3'.
+
+        top open
+                                                                        [exEnd]
+
+
+    non-string label:
+                                                                        [exBegin]
+        |top frame|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        frame := FramedBox origin:0.0@0.0 corner:1.0@1.0 in:top.
+        frame label:(Image fromFile:'bitmaps/SBrowser.xbm').
+
+        top open
+                                                                        [exEnd]
+
+
+    placing something inside:
+                                                                        [exBegin]
+        |top frame1 frame2 frame3 v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        frame1 := FramedBox origin:0.0@0.0 corner:0.5@0.5 in:top.
+        frame1 label:'frame1'.
+        v1 := View origin:0.0@0.0 corner:1.0@1.0 in:frame1.
+        v1 viewBackground:(Color yellow);
+           level:1.
+
+        frame2 := FramedBox origin:0.5@0.0 corner:1.0@0.5 in:top.
+        frame2 label:'frame2'.
+        v2 := View origin:0.0@0.0 corner:1.0@1.0 in:frame2.
+        v2 viewBackground:(Color red);
+           level:1.
+
+        frame3 := FramedBox origin:0.0@0.5 corner:1.0@1.0 in:top.
+        frame3 label:'frame3'.
+        v3 := View origin:0.0@0.0 corner:1.0@1.0 in:frame3.
+        v3 viewBackground:(Color green);
+           level:1.
+
+        top open
+                                                                        [exEnd]
+
+
+    placing something inside a frame in a dialog:
+                                                                        [exBegin]
+        |box panel frame1 frame2 frame3 v1 v1b v2 v3|
+
+        box := Dialog new.
+
+        frame1 := FramedBox label:'frame1'.
+        panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:frame1.
+        v1 := View extent:100@100 in:panel.
+        v1 viewBackground:(Color red);
+           level:1.
+        v1b := View extent:100@100 in:panel.
+        v1b viewBackground:(Color yellow);
+            level:1.
+
+        box addComponent:frame1.
+
+        frame2 := FramedBox label:'frame2'.
+        v2 := View origin:0.0@0.0 corner:1.0@1.0 in:frame2.
+        v2 viewBackground:(Color green);
+           level:1.
+        box addComponent:frame2.
+
+        frame3 := FramedBox label:'frame3'.
+        v3 := View origin:0.0@0.0 corner:1.0@1.0 in:frame3.
+        v3 viewBackground:(Color blue);
+           level:1.
+        box addComponent:frame3.
+
+        box addOkButton.
+        box stickAtBottomWithVariableHeight:frame3.
+        box open
+                                                                        [exEnd]
+
+
+    placing something inside a frame in a dialog:
+                                                                        [exBegin]
+        |box panel frame1 frame2 frame3 v1 v1b v2 v3|
+
+        box := Dialog new.
+
+        frame1 := FramedBox label:'frame1'.
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:frame1.
+        v1 := View extent:100@100 in:panel.
+        v1 viewBackground:(Color red);
+           level:1.
+        v1b := View extent:100@100 in:panel.
+        v1b viewBackground:(Color yellow);
+            level:1.
+
+        box addComponent:frame1.
+
+        frame2 := FramedBox label:'frame2'.
+        v2 := View origin:0.0@0.0 corner:1.0@1.0 in:frame2.
+        v2 viewBackground:(Color green);
+           level:1.
+        box addComponent:frame2.
+
+        frame3 := FramedBox label:'frame3'.
+        v3 := View origin:0.0@0.0 corner:1.0@1.0 in:frame3.
+        v3 viewBackground:(Color blue);
+           level:1.
+        box addComponent:frame3.
+
+        box addOkButton.
+        box stickAtBottomWithVariableHeight:frame3.
+        box open
+                                                                        [exEnd]
+
+
+    simple again, default spacings:
+                                                                        [exBegin]
+        |top frame v|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        frame := FramedBox origin:0.0@0.0 corner:0.5@0.5 in:top.
+        frame label:'frame'.
+
+        v := View origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        v viewBackground:(Color yellow); level:1.
+
+        top open
+                                                                        [exEnd]
+
+
+    changing spacings:
+                                                                        [exBegin]
+        |top frame v|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        frame := FramedBox origin:0.0@0.0 corner:0.5@0.5 in:top.
+        frame label:'frame'.
+        frame horizontalSpace:30.
+        frame verticalSpace:20.
+
+        v := View origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        v viewBackground:(Color yellow); level:1.
+
+        top open
+                                                                        [exEnd]
+
+
+    changing inner spacings:
+                                                                        [exBegin]
+        |top frame v|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        frame := FramedBox origin:0.0@0.0 corner:0.5@0.5 in:top.
+        frame label:'frame'.
+        frame innerHorizontalSpace:30.
+        frame innerVerticalSpace:20.
+
+        v := View origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        v viewBackground:(Color yellow); level:1.
+
+        top open
+                                                                        [exEnd]
+
+
+     label only (no frame around):
+                                                                        [exBegin]
+        |top frame v|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        frame := FramedBox origin:0.0@0.0 corner:0.5@0.5 in:top.
+        frame label:'frame'.
+        frame showFrame:false.
+
+        v := View origin:0.0@0.0 corner:1.0@1.0 in:frame.
+        v viewBackground:(Color yellow); level:1.
+
+        top open
+                                                                        [exEnd]
+"
+! !
+
+!FramedBox methodsFor:'accessing'!
+
+font:aFont
+    "set the frame labelstrings font.
+     CAVEAT: with the addition of Text objects,
+             this method is going to be obsoleted by a textStyle
+             method, which allows specific control over
+             normalFont/boldFont/italicFont parameters."
+
+    (self font ~= aFont) ifTrue:[
+        super font:aFont.
+        self invalidate
+    ]
+
+    "Modified: / 6.6.1998 / 20:05:05 / cg"
+!
+
+foregroundColor
+    "return the frame labels foreground color"
+
+    ^ fgColor
+!
+
+foregroundColor:aColor
+    "set the frame labels foreground color"
+
+    aColor ~= fgColor ifTrue:[
+        fgColor := aColor.
+        self invalidateRepairNow:true
+    ]
+
+    "Modified: / 6.6.1998 / 19:23:14 / cg"
+!
+
+frameShown
+    "return true, if frame is shown;
+     if false, oly the label is shown.
+     OBSOLETE; use #showFrame."
+
+    ^ self showFrame
+!
+
+horizontalSpace
+    "return the number of pixels by which the frame is inset horizontally.
+     The default, nil, lets the box compute the horizontal inset from the
+     labels font height."
+
+    ^ horizontalSpace
+
+    "Modified: 5.9.1995 / 17:24:21 / claus"
+!
+
+horizontalSpace:aNumber 
+    "set the number of pixels by which the frame is inset horizontally.
+     The default, nil, lets the box compute the horizontal inset from the
+     labels font height."
+
+    horizontalSpace := aNumber
+!
+
+innerHorizontalSpace:aNumber 
+    "set the number of pixels by which the interior is inset horizontally from the frame.
+     The default is 0"
+
+    innerHorizontalSpace := aNumber
+
+    "Created: 10.1.1996 / 14:39:20 / cg"
+!
+
+innerVerticalSpace:aNumber 
+    "set the number of pixels by which the interior is inset vertically from the frame.
+     The default is 0"
+
+    innerVerticalSpace := aNumber
+
+    "Created: 10.1.1996 / 14:39:35 / cg"
+!
+
+label
+    "return the frames labelstring"
+
+    ^ label
+!
+
+label:aStringOrImage
+    "set the frames labelstring or labelImage"
+
+    (label ~= aStringOrImage) ifTrue:[
+        (aStringOrImage isString 
+        and:[aStringOrImage isEmpty]) ifTrue:[
+            label := nil
+        ] ifFalse:[
+            label := aStringOrImage.
+        ].
+        self invalidateRepairNow:true
+    ]
+
+    "Modified: / 5.9.1995 / 17:20:05 / claus"
+    "Modified: / 6.6.1998 / 19:23:17 / cg"
+!
+
+labelPosition
+    "return the labelPosition, which is a symbol describing
+     the labels position."
+
+    ^ labelPosition
+!
+
+labelPosition:aSymbol
+    "define the position of the label;
+     aSymbol may be one of: 
+        #topLeft, #topCenter, #topRight;
+        #bottomLeft, #bottomCenter or #bottomRight
+        #hidden"
+
+    labelPosition ~~ aSymbol ifTrue:[
+        labelPosition := aSymbol.
+        self invalidate
+    ]
+
+    "Modified: / 6.6.1998 / 20:04:22 / cg"
+!
+
+layout:something
+    "OBSOLETE compatibility interface. Will vanish.
+     In the meantime, try to figure out what is meant ... a kludge"
+
+    <resource:#obsolete>
+
+    something isLayout ifTrue:[^ super layout:something].
+
+    self obsoleteMethodWarning:'use #labelPosition:'.
+    ^ self labelPosition:something
+
+    "Modified: 31.8.1995 / 23:07:00 / claus"
+!
+
+setLabel:anImage
+    "set the frames label.
+     same as #label: for ST-80 GroupBox compatibility"
+
+    ^ self label:anImage
+
+    "Created: 17.2.1997 / 11:03:04 / cg"
+    "Modified: 17.2.1997 / 11:03:24 / cg"
+!
+
+setLabelString:anImage
+    "set the frames label.
+     same as #label: for ST-80 GroupBox compatibility"
+
+    ^ self label:anImage
+
+    "Modified: 17.2.1997 / 11:03:19 / cg"
+!
+
+showFrame
+    "return if the view shows its frame.
+     If false, only the label is drawn"
+
+    ^ showFrame
+
+    "Modified: 5.9.1995 / 17:21:37 / claus"
+!
+
+showFrame:aBoolean
+    "turn on/off showing of the frame -
+     without a frame, only the label is shown at its position.
+     (unless the label is nil or #hidden)"
+
+    aBoolean ~~ showFrame ifTrue:[
+        showFrame := aBoolean.
+        self invalidate
+    ]
+
+    "Modified: / 6.6.1998 / 20:03:50 / cg"
+!
+
+verticalSpace
+    "return the number of pixels by which the frame is inset vertically.
+     The default, nil, lets the box compute the vertical inset from the
+     labels font height."
+
+    ^ verticalSpace
+
+    "Modified: 5.9.1995 / 17:24:21 / claus"
+    "Created: 10.1.1996 / 14:38:21 / cg"
+!
+
+verticalSpace:aNumber 
+    "set the number of pixels by which the frame is inset vertically.
+     The default, nil, lets the box compute the vertical inset from the
+     labels font height."
+
+    verticalSpace := aNumber.
+
+    "Created: / 10.1.1996 / 14:38:31 / cg"
+    "Modified: / 6.6.1998 / 20:04:39 / cg"
+! !
+
+!FramedBox methodsFor:'accessing-channels'!
+
+labelChannel
+    "return the labelChannel - or nil"
+
+    ^ labelChannel.
+
+
+!
+
+labelChannel:aValueHolder
+    "set the labelChannel - a valueHolder holding a string
+     which is shown as my logo
+    "
+    labelChannel notNil ifTrue:[
+        labelChannel removeDependent:self.
+    ].
+
+    (labelChannel := aValueHolder) notNil ifTrue:[
+        labelChannel addDependent:self.
+        self label:(labelChannel value).
+    ].
+! !
+
+!FramedBox methodsFor:'change & update'!
+
+update:what with:aPara from:aModel
+    "the MVC way of changing the label ...
+    "
+    aModel == labelChannel ifTrue:[
+        self label:(aModel value).
+        ^ self
+    ].
+    ^ super update:what with:aPara from:aModel
+! !
+
+!FramedBox methodsFor:'drawing'!
+
+drawFrame
+    "redraw the frame"
+
+    |halfSepX halfSepY w h|
+
+    "
+     if there is no label, give more real estate to the inside
+    "
+    label isNil ifTrue:[
+        halfSepX := halfSepY := 2
+    ] ifFalse:[
+        halfSepX := halfSepY := (label heightOn:self) // 2.
+    ].
+
+    horizontalSpace notNil ifTrue:[
+        halfSepX := horizontalSpace.
+    ].
+    verticalSpace notNil ifTrue:[
+        halfSepY := verticalSpace.
+    ].
+
+    halfSepX := halfSepX + margin.
+    halfSepY := halfSepY + margin.
+
+    w := width - halfSepX - halfSepX.
+    h := height - halfSepY - halfSepY.
+
+    frame3D ifFalse:[
+        self displayRectangleX:halfSepX 
+                             y:halfSepY
+                         width:w 
+                        height:h.
+        ^ self
+    ].
+
+    w := w + 1.
+    h := h + 1.
+
+    self paint:lightColor.
+    self displayRectangleX:halfSepX 
+                         y:halfSepY
+                     width:w
+                    height:h.
+
+    self paint:shadowColor.
+    self displayRectangleX:halfSepX-1 
+                         y:halfSepY-1
+                     width:w 
+                    height:h.
+
+    "Modified: 17.2.1997 / 11:04:34 / cg"
+!
+
+redraw
+    "redraw the frame and name if present"
+
+    |labelLen l x y|
+
+    self clear.
+
+    (label isNil or:[ labelPosition == #hidden]) ifTrue:[
+        labelLen := 0
+    ] ifFalse:[
+        label isString ifTrue:[
+            l := ' ' , label , ' '.
+            gc createFontOnDevice.
+        ] ifFalse:[
+            l := label
+        ].
+        labelLen := l widthOn:self
+    ].
+
+    showFrame ifTrue:[
+        self drawFrame.
+    ].
+
+    labelLen > 0 ifTrue:[
+        labelLen < width ifTrue:[
+            (labelPosition == #topLeft 
+            or:[labelPosition == #topCenter
+            or:[labelPosition == #topRight]]) ifTrue:[
+                "
+                 label at top
+                "
+                y := gc font ascent + margin.
+            ] ifFalse:[
+                "
+                 label at bottom
+                "
+                y := height - margin - gc font descent.
+            ].
+            (labelPosition == #topLeft
+            or:[labelPosition == #bottomLeft]) ifTrue:[
+                "
+                 label at left
+                "
+                x := gc font height + margin
+            ] ifFalse:[
+                (labelPosition == #topRight
+                or:[labelPosition == #bottomRight]) ifTrue:[
+                    "
+                     label at right
+                    "
+                    x := width - margin - labelLen - gc font height
+                ] ifFalse:[
+                    "
+                     label at center
+                    "
+                    x := (width - margin - labelLen) // 2
+                ]
+            ].
+            self paint:fgColor on:viewBackground.
+            label isString ifTrue:[
+                self displayOpaqueString:l x:x y:y
+            ] ifFalse:[
+                l displayOpaqueOn:self x:x y:y - gc font ascent
+            ]
+        ]
+    ]
+
+    "Modified: 28.2.1997 / 21:28:09 / cg"
+! !
+
+!FramedBox methodsFor:'event handling'!
+
+sizeChanged:how
+    self invalidate.
+    super sizeChanged:how
+
+    "Modified: 8.2.1997 / 15:19:52 / cg"
+! !
+
+!FramedBox methodsFor:'initialization'!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    super fetchDeviceResources.
+
+    fgColor := fgColor onDevice:self graphicsDevice.
+
+    "Created: 15.2.1997 / 16:57:56 / cg"
+!
+
+initStyle
+    "setup style specifics.
+     The default position is top-center, except for ms-windows, where
+     the text is positioned at top-left"
+
+    <resource: #style (#'framedBox.foregroundColor' 
+                       #'framedBox.labelPosition'
+                       #'framedBox.font'
+                       #'framedBox.3DFrame')>
+
+    super initStyle.
+
+    fgColor := StyleSheet at:'framedBox.foregroundColor' default:self blackColor.
+    labelPosition := StyleSheet at:'framedBox.labelPosition' default:#topCenter.
+    frame3D := StyleSheet at:'framedBox.3DFrame' default:true.
+    self basicFont:(StyleSheet at:'framedBox.font' default:(StyleSheet at:'label.font' default:self font)).
+    self borderWidth:0.
+
+    "Modified: / 26.10.1997 / 17:00:57 / cg"
+!
+
+initialize
+    innerHorizontalSpace := innerVerticalSpace := 0.
+    super initialize.
+    showFrame := true
+
+    "Modified: 10.1.1996 / 14:38:40 / cg"
+!
+
+release
+
+    labelChannel notNil ifTrue:[
+        labelChannel removeDependent:self.
+        labelChannel := nil.
+    ].
+    super release
+! !
+
+!FramedBox methodsFor:'queries'!
+
+preferredExtent
+    "compute the boxes preferredExtent from the components' sizes.
+     Redefined to add space for the frame to the default extent" 
+
+    |sep sep2|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    sep := gc font heightOn:self graphicsDevice.
+    sep2 := sep + sep.
+
+    true "showFrame" ifFalse:[
+        ^ super preferredExtent + (0 @ sep2)
+    ].
+    ^ super preferredExtent + (sep2 @ sep2)
+
+    "Modified: 3.1.1997 / 22:02:56 / cg"
+!
+
+viewRectangle
+    "return the inside area 
+     - redefined to save frame from relative computations."
+
+    |mH mV sepH sepV imH imV lw|
+
+    sepH := sepV := gc font heightOn:self graphicsDevice.
+    horizontalSpace notNil ifTrue:[
+        sepH := horizontalSpace
+    ].
+    verticalSpace notNil ifTrue:[
+        sepV := verticalSpace
+    ].
+
+    mH := sepH * 2.
+    mV := sepV * 2.
+    imH := innerHorizontalSpace * 2.
+    imV := innerVerticalSpace * 2.
+
+    true "showFrame" ifFalse:[
+        sepH := mH := lw := 0.
+    ] ifTrue:[
+        lw := 2.
+    ].
+
+    ^ ((sepH + innerHorizontalSpace + lw) @ (innerVerticalSpace + sepV + lw)) 
+        extent:((width - imH - mH - lw - lw) @ (height - imV - mV - lw - lw))
+
+"/    |m2 sepH sepV|
+"/
+"/    sepV := font height.
+"/
+"/    showFrame ifFalse:[
+"/        ^ (0 @ sepV) extent:(width @ (height - sepV - sepV))
+"/    ].
+"/    sepH := sepV // 2.
+"/    ^ (sepH @ sepH) extent:((width - sepH - sepH) @ (height - sepV - sepV))
+
+    "Modified: 3.1.1997 / 22:03:08 / cg"
+! !
+
+!FramedBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/FramedBox.st,v 1.59 2014-05-07 15:44:16 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/FramedBox.st,v 1.59 2014-05-07 15:44:16 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GenericToolbarIconLibrary.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,12165 @@
+"
+ COPYRIGHT (c) 2001 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Object subclass:#GenericToolbarIconLibrary
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Smalltalk'
+!
+
+!GenericToolbarIconLibrary class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2001 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    A common place to keep commonly used icons.
+    (also: VW compatibility)
+
+    Every method found here returns as value an image instance, which can be
+    directly used for labels, menus, etc.
+    The use of external files for bitmap images is no longer considered good style,
+    and all uses of them within ST/X are replaced by internal icons over the time.
+    (the reason is that it makes packaging, deployment etc. much easier. Also,
+    systems which have a poor disk performance for small files (aka Windows) suffer from
+    accessing many small bitmap files. So performance is improved there).
+
+    Notice: now, ToolbarIconLibrary is a reference to the actual IconLibrary,
+    which will refer to either this class (GenericToolbarIconLibrary) or
+    one of its subclasses (especially: XPToolbarIconLibrary).
+
+    The choice of which concrete iconLibrary class is actually used
+    is done in the styleSheet, where the global variable ToolbarIconLibrary
+    is set (see mswindowsXP.style as an example). By redefining individual icons
+    in that concrete class, different view styles may provide different looks
+    (try windowsXP vs. Windows95 looks, to see different icons).
+    Please make sure, that no concrete icon library is used in specs (window and menu
+    specs); only refer to ToolbarIconLibrary there, so you won't loose the ability to
+    change the look with another icon library.
+"
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'class initialization'!
+
+initialize
+    ToolbarIconLibrary isNil ifTrue:[
+	ToolbarIconLibrary := self
+    ]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'compatibility-VW'!
+
+visualFor:aKey
+    ^ self perform:aKey ifNotUnderstood:[nil]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs'!
+
+barResizeHorizontalIcon
+    "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 barResizeHorizontalIcon inspect
+     ImageEditor openOnClass:self andSelector:#barResizeHorizontalIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class barResizeHorizontalIcon'
+	ifAbsentPut:[(Depth2Image new) width: 11; height: 19; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@B@A@@@A@B@A@@@A@@@A@@@A@@@!!H@B!!J@J!!J B!!JC@!!H@@A@@@A@@@A@@@A@@@A@@@A@@@@@A') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width: 11; height: 19; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A<DG0P_AA<DG0P_AA<UG3V_]]<5''1T_AA<DG0P_AA<DG0P_@A<b') ; yourself); yourself]
+!
+
+barResizeVerticalIcon
+    "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 barResizeVerticalIcon inspect
+     ImageEditor openOnClass:self andSelector:#barResizeVerticalIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class barResizeVerticalIcon'
+	ifAbsentPut:[(Depth2Image new) width: 19; height: 11; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@B@@@@@@*@@@@@J*@@@@@@@@@AUUUUUP@@@@@@@@@*(@@@@@*@@@@@@ @@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width: 19; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@S@D@@@N@@@_@@@@@A_??@@@@@@_@@@N@@@D@D@@@H') ; yourself); yourself]
+!
+
+bookmarks17x18
+    "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 bookmarks17x18 inspect
+     ImageEditor openOnClass:self andSelector:#bookmarks17x18
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class bookmarks17x18'
+        ifAbsentPut:[(Depth8Image new) width: 17; height: 18; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D@@P@@@@@@@@@@@@@@@@@@@PBA@@@@@@@@@@@@@@@@@@D@ DBA@@@@@@@@@@@@@@@
+@@PB@PHD@@@@@@@@@@@DA@PD@ DA@PHDA@P@@@@@A@HB@ HA@PDA@PHB@ PA@@@@A@DA@PDA@PDA@PDAA@@@@@@@A@D@@@@@@@@@@PP@@@@@@@@@A@D@@@@@
+@@DD@@@@@@@@@@@D@P@@@@@@@PP@@@@@@@@@@@PA@@@A@@@AA@@@@@@@@@@D@ @A@PPA@P@BA@@@@@@@@@PA@PPD@@PD@PDD@@@@@@@A@@PD@@@@@@@DA@@A
+@@@@@@@A@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[240 151 26 255 213 5 245 234 120 240 243 250 240 76 0]; mask:((Depth1Image new) width: 17; height: 18; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@H@@@\@@@\@@@>@@@>@@_?<@_?<@O?8@G?0@C? @C? @C? @G?0@G70@OA8@D@P@@@@@') ; yourself); yourself]
+!
+
+breakpointRedEnabled9x9
+    "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 breakpointRedEnabled9x9 inspect
+     ImageEditor openOnClass:self andSelector:#breakpointRedEnabled9x9
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary breakpointRedEnabled9x9'
+        ifAbsentPut:[(Depth8Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'D1L@@@@@@@@SD0@J@0HCB @S@@<ABP,I@P<@@@LHDQDQB@L@@@HDCP0RA@H@@@LEC 8NAPL@@@<AA!!@G@P<@D0@J@0HCB @@D0@@@@@@@ALS') ; colorMapFromArray:#[253 255 252 127 73 46 114 60 38 139 79 54 203 129 108 195 127 107 205 147 131 204 146 130 200 145 130 208 165 152 225 182 169 229 191 180 190 104 83 194 111 90 204 134 115 216 159 144 215 159 145 219 166 152 192 108 89 255 255 255]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@>@G<@_0A?@G<@_0@>@@@@') ; yourself); yourself]
+!
+
+fullBreakPoint12x16
+    "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 stopPoint12x16 inspect
+     ImageEditor openOnClass:self andSelector:#fullBreakPoint12x16
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary stopPoint12x16'
+        ifAbsentPut:[(Depth4Image new) width: 12; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'L3L3L3L3L3L3L3L3L3L3L@L3L3LCL0@3LCA''U6@3L@:8FK8CLC^QDY\3L3WP@MT3L3_AD\\3L@::P+8CL3A''U6@CL3@CL0L3L3L3L3L3L3L3L3L3L3L3L3L3
+L3L3L3L@') ; colorMapFromArray:#[255 255 255 196 96 86 164 75 67 176 176 176 182 74 66 79 34 26 193 90 78 96 47 37 171 87 78 158 77 70 165 75 67 88 43 32 148 68 60 159 65 56 184 74 65]; mask:((Depth1Image new) width: 12; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@A0@O A?@O>@?8C? G<@O @\@@@@@@@@@@@@b') ; yourself); yourself]
+
+    "Created: / 05-03-2014 / 10:14:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+lineBreakPoint12x16
+    "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 lineBreakPoint12x16 inspect
+     ImageEditor openOnClass:self andSelector:#lineBreakPoint12x16
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary lineBreakPoint12x16'
+        ifAbsentPut:[(Depth4Image new) width: 12; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'L3L3L3L3L3L3L3L3L3L3L@L3L3LCL0@3LCA''U6@3L@:8FK8CLC^QDY\3L3WQD]T3L3_AD\\3L@::P+8CL3A''U6@CL3@CL0L3L3L3L3L3L3L3L3L3L3L3L3L3
+L3L3L3L@') ; colorMapFromArray:#[255 255 255 196 96 86 164 75 67 176 176 176 182 74 66 79 34 26 193 90 78 96 47 37 171 87 78 158 77 70 165 75 67 88 43 32 148 68 60 159 65 56 184 74 65]; mask:((Depth1Image new) width: 12; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@A0@O A?@O>@?8C? G<@O @\@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+sortIndicatorGreyIcon
+    "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 sortIndicatorGreyIcon inspect
+     ImageEditor openOnClass:self andSelector:#sortIndicatorGreyIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'DataSetLabel class sortIndicatorGreyIcon'
+	ifAbsentPut:[(Depth1Image new) width: 7; height: 5; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 7; height: 5; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A@(UJ(b') ; yourself); yourself]
+!
+
+sortIndicatorIcon
+    "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 sortIndicatorIcon inspect
+     ImageEditor openOnClass:self andSelector:#sortIndicatorIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'DataSetLabel class sortIndicatorIcon'
+	ifAbsentPut:[(Depth1Image new) width: 7; height: 4; photometric:(#palette); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@B@0 @a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 7; height: 4; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?''08D@@a') ; yourself); yourself]
+!
+
+sortReverseIndicatorGreyIcon
+    "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 sortReverseIndicatorGreyIcon inspect
+     ImageEditor openOnClass:self andSelector:#sortReverseIndicatorGreyIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'DataSetLabel class sortReverseIndicatorGreyIcon'
+	ifAbsentPut:[(Depth1Image new) width: 7; height: 5; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 7; height: 5; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'*%P(D@@b') ; yourself); yourself]
+!
+
+sortReverseIndicatorIcon
+    "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 sortReverseIndicatorIcon inspect
+     ImageEditor openOnClass:self andSelector:#sortReverseIndicatorIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'DataSetLabel class sortReverseIndicatorIcon'
+	ifAbsentPut:[(Depth1Image new) width: 7; height: 4; photometric:(#palette); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'0(@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 7; height: 4; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'DC!!<? @a') ; yourself); yourself]
+!
+
+standaloneStartupIcon
+    "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 standaloneStartupIcon inspect
+     ImageEditor openOnClass:self andSelector:#standaloneStartupIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary standaloneStartupIcon'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@A@ @@@@@@@@@@@@@@@0PEA @@@@@@@@@@@@LGB@$J@@@@@@@@@@@AB00MC <P@@@@@@@@@1DRD1PUE!!\X@@@@@@LYF!!([D10]G @@@@@CG2@!!DRHDE0@@
+@@@@@2LTIBT&G @@@@@@@@L''J@P)J @@@@@@@@@CJ20X@@@@@@@@@@@@@0H@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 32 104 24 208 216 208 47 120 24 47 112 24 128 168 128 224 232 224 191 224 176 95 160 80 47 104 24 159 184 144 159 216 136 160 216 136 144 208 136 64 136 56 79 136 64 191 200 176 127 200 96 111 200 88 112 200 88 143 208 120 127 192 104 63 120 48 96 144 88 207 200 200 96 192 64 95 192 64 95 192 56 111 184 88 48 104 48 176 192 176 112 216 88 127 224 96 128 216 104 96 176 88 143 224 104 128 200 120 64 136 48 64 120 56 128 208 120 95 168 80 143 160 136 239 224 224 47 136 40 127 168 120]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'L@@<@C8@O8@?8C? O<@? C<@O@@0@@@a') ; yourself); yourself]
+!
+
+stopPoint12x16
+    "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 stopPoint12x16 inspect
+     ImageEditor openOnClass:self andSelector:#stopPoint12x16
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary stopPoint12x16'
+        ifAbsentPut:[(Depth4Image new) width: 12; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'L3L3L3L3L3L3L3L3L3L3L@L3L3LCL0@3LCA''U6@3L@:8FK8CLC^QDY\3L3WP@MT3L3_AD\\3L@::P+8CL3A''U6@CL3@CL0L3L3L3L3L3L3L3L3L3L3L3L3L3
+L3L3L3L@') ; colorMapFromArray:#[255 255 255 196 96 86 164 75 67 176 176 176 182 74 66 79 34 26 193 90 78 96 47 37 171 87 78 158 77 70 165 75 67 88 43 32 148 68 60 159 65 56 184 74 65]; mask:((Depth1Image new) width: 12; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@A0@O A?@O>@?8C? G<@O @\@@@@@@@@@@@@b') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-09x09'!
+
+breakpointBlueDisabled9x9
+    "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 breakpointBlueDisabled9x9 inspect
+     ImageEditor openOnClass:self andSelector:#breakpointBlueDisabled9x9
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary breakpointBlueDisabled9x9'
+        ifAbsentPut:[(Depth4Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'H$QDQBADX7M$HDZTQIY@RDQDRDA@QDQ@PD!!DQD!!@R%QDV$@$(PF$HDQDQDH ') ; colorMapFromArray:#[79 80 79 85 85 85 255 255 255 135 135 135 227 235 248 122 122 122 201 201 201 105 105 105 98 98 98 103 103 103 182 182 182]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@>@G\@X0AA@FL@]0@>@@@@') ; yourself); yourself]
+!
+
+breakpointBlueEnabled9x9
+    "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 breakpointBlueEnabled9x9 inspect
+     ImageEditor openOnClass:self andSelector:#breakpointBlueEnabled9x9
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary breakpointBlueEnabled9x9'
+        ifAbsentPut:[(Depth8Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'D1L@@@@@@@@SD0@J@0HCB @S@@<ABP,I@P<@@@LHDQDQB@L@@@HDCP0RA@H@@@LEC 8NAPL@@@<AA!!@G@P<@D0@J@0HCB @@D0@@@@@@@ALS') ; colorMapFromArray:#[255 252 255 46 85 127 38 78 114 54 98 139 108 165 203 107 159 195 131 175 205 130 174 204 130 172 200 152 185 208 169 202 225 180 209 229 83 149 190 90 154 194 115 169 204 144 188 216 145 188 215 152 193 219 89 154 192 255 255 255]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@>@G<@_0A?@G<@_0@>@@@@') ; yourself); yourself]
+!
+
+breakpointRedDisabled9x9
+    "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 breakpointRedDisabled9x9 inspect
+     ImageEditor openOnClass:self andSelector:#breakpointRedDisabled9x9
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary breakpointRedDisabled9x9'
+        ifAbsentPut:[(Depth4Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'H$QDQBADX7M$HDZTQIY@RDQDRDA@QDQ@PD!!DQD!!@R%QDV$@$(PF$HDQDQDH ') ; colorMapFromArray:#[79 80 79 85 85 85 255 255 255 135 135 135 227 235 248 122 122 122 201 201 201 105 105 105 98 98 98 103 103 103 182 182 182]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@>@G\@X0AA@FL@]0@>@@@@') ; yourself); yourself]
+!
+
+closeIndicatorInTree9x9Icon
+    "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 closeIndicatorInTree9x9Icon inspect
+     ImageEditor openOnClass:self andSelector:#closeIndicatorInTree9x9Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class closeIndicatorInTree9x9Icon'
+        ifAbsentPut:[(Depth2Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'UUU@Z*)@Z")@Z")@X@I-Z")@Z")KZ*)@UUU;') ; colorMapFromArray:#[0 0 0 128 128 128 255 255 255]; yourself]
+!
+
+openIndicatorInTree9x9Icon
+    "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 openIndicatorInTree9x9Icon inspect
+     ImageEditor openOnClass:self andSelector:#openIndicatorInTree9x9Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class openIndicatorInTree9x9Icon'
+        ifAbsentPut:[(Depth2Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'UUU@Z*)@Z*)(Z*)HX@I@Z*)@Z*)@Z*)@UUU.') ; colorMapFromArray:#[0 0 0 128 128 128 255 255 255]; yourself]
+!
+
+stopPoint9x9
+    "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 stopPoint9x9 inspect
+     ImageEditor openOnClass:self andSelector:#stopPoint9x9
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary stopPoint9x9'
+        ifAbsentPut:[(Depth4Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'L0@@@C@0Y5] L@:8FK8@A9DQ%0@E4@CU@@_AD\\@C+)B/ @0Y5] @C@@@@L0') ; colorMapFromArray:#[255 255 255 196 96 86 164 75 67 176 176 176 182 74 66 79 34 26 193 90 78 96 47 37 171 87 78 158 77 70 165 75 67 88 43 32 148 68 60 159 65 56 184 74 65]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@>@G<@_0A?@G<@_0@>@@@@') ; yourself); yourself]
+!
+
+tracepointBlue9x9
+    "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 tracepointBlue9x9 inspect
+     ImageEditor openOnClass:self andSelector:#tracepointBlue9x9
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary tracepointBlue9x9'
+        ifAbsentPut:[(Depth8Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'D1L@@@@@@@@SD0@J@0HCB @S@@<ABP,I@P<@@@LHDQDQB@L@@@HDCP0RA@H@@@LEC 8NAPL@@@<AA!!@G@P<@D0@J@0HCB @@D0@@@@@@@ALS') ; colorMapFromArray:#[254 252 255 46 104 127 38 96 114 54 118 139 108 187 203 107 179 195 131 193 205 130 192 204 130 188 200 152 198 208 169 215 225 180 220 229 83 174 190 90 178 194 115 189 204 144 205 216 145 204 215 152 208 219 89 178 192 255 255 255]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@>@G<@_0A?@G<@_0@>@@@@') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-10x11'!
+
+ledDarkRed14x14
+    "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 ledDarkRed14x14 inspect
+     ImageEditor openOnClass:self andSelector:#ledDarkRed14x14
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledDarkRed14x14'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DB@0DA@0HA@@@@@@DAA@TFA0\FAPPA@@@@@P IB ,LC@,JBP A@@@ACP8ODADQD@<NCPD@@@DRD1PU
+E!!XUEALR@P@@@Q\XFQ([F1,\FA\A@@@AGQ ^G2@!!HRHXGPD@@@D#IBT&I2\(IRP#@P@@@PD)G2(+J20 KPDA@@@@@PD.K3@0K28A@PD@@@@@@PD1L#H1@PD@
+@@@@@@@@@PDA@PDA@P@@@@@a') ; colorMapFromArray:#[76 94 60 46 12 10 90 75 80 64 39 40 80 59 60 60 1 0 92 52 50 106 68 70 90 74 75 62 1 0 104 56 55 118 86 85 126 103 105 68 37 40 82 18 20 106 48 50 110 58 60 106 47 45 56 11 10 92 7 5 98 15 15 104 24 25 106 24 25 60 10 10 90 0 0 104 8 10 110 9 10 112 9 10 106 8 10 72 33 35 114 0 0 118 0 0 120 0 0 122 0 0 116 0 0 88 63 65 92 0 0 127 15 15 127 4 5 127 12 10 127 6 5 94 45 45 127 35 35 127 52 50 127 41 40 96 45 45 98 56 60 110 28 30 122 20 20 90 93 95 86 89 95]; mask:((ImageMask new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?@G>@?<C?0O?H?<C?0O?@_8@?@A8@@@@@a') ; yourself); yourself]
+!
+
+ledGrayedRed10x11
+    "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 ledGrayedRed10x11 inspect
+     ImageEditor openOnClass:self andSelector:#ledGrayedRed10x11
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledGrayedRed10x11'
+        ifAbsentPut:[(Depth8Image new) width: 10; height: 11; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@DB@0DA@0HA@@DDAPXGA0XEA@DHBP(KC@0KB $HCP8ODADQD@<NCQHSEATVE!!TTD1HWFA$ZF1,[GA WGQ ^G2@!!HRHXGRL$IRX''I2 %IBLAJQ<*J2,,HB4A
+@PD.K3@0K28A@P@A@SD2L#DA@P@b') ; colorMapFromArray:#[165 174 157 150 133 132 172 165 167 159 147 147 167 157 157 157 128 127 173 153 152 180 161 162 172 164 165 158 128 127 179 155 155 186 170 170 190 179 180 161 146 147 168 136 137 180 151 152 182 156 157 180 151 150 155 133 132 173 131 130 176 135 135 179 139 140 180 139 140 157 132 132 172 127 127 179 131 132 182 132 132 183 132 132 180 131 132 163 144 145 184 127 127 186 127 127 187 127 127 188 127 127 185 127 127 171 159 160 173 127 127 191 135 135 191 129 130 191 133 132 191 130 130 174 150 150 191 145 145 191 153 152 191 148 147 175 150 150 176 155 157 182 141 142 188 137 137 172 174 175 170 172 175]; mask:((Depth1Image new) width: 10; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O0A? O?@?<C?0O?@?<C?0G>@O0@^@@@a') ; yourself); yourself]
+!
+
+ledGrayedRed14x14
+    "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 ledGrayedRed14x14 inspect
+     ImageEditor openOnClass:self andSelector:#ledGrayedRed14x14
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledGrayedRed14x14'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DB@0DA@0HA@@@@@@DAA@TFA0\FAPPA@@@@@P IB ,LC@,JBP A@@@ACP8ODADQD@<NCPD@@@DRD1PU
+E!!XUEALR@P@@@Q\XFQ([F1,\FA\A@@@AGQ ^G2@!!HRHXGPD@@@D#IBT&I2\(IRP#@P@@@PD)G2(+J20 KPDA@@@@@PD.K3@0K28A@PD@@@@@@PD1L#H1@PD@
+@@@@@@@@@PDA@PDA@P@@@@@a') ; colorMapFromArray:#[165 174 157 150 133 132 172 165 167 159 147 147 167 157 157 157 128 127 173 153 152 180 161 162 172 164 165 158 128 127 179 155 155 186 170 170 190 179 180 161 146 147 168 136 137 180 151 152 182 156 157 180 151 150 155 133 132 173 131 130 176 135 135 179 139 140 180 139 140 157 132 132 172 127 127 179 131 132 182 132 132 183 132 132 180 131 132 163 144 145 184 127 127 186 127 127 187 127 127 188 127 127 185 127 127 171 159 160 173 127 127 191 135 135 191 129 130 191 133 132 191 130 130 174 150 150 191 145 145 191 153 152 191 148 147 175 150 150 176 155 157 182 141 142 188 137 137 172 174 175 170 172 175]; mask:((ImageMask new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?@G>@?<C?0O?H?<C?0O?@_8@?@A8@@@@@a') ; yourself); yourself]
+!
+
+ledGreen10x11
+    "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 ledGreen10x11 inspect
+     ImageEditor openOnClass:self andSelector:#ledGreen10x11
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledGreen10x11'
+        ifAbsentPut:[(Depth8Image new) width: 10; height: 11; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+K @+A0@@A2,@K @Q@QT/K1TADP@*@"T:P4L:IPH*B ,#LBX&LBLKB LIC!!HSFAHNBPLDAP<TFQ,[D@TDCP ZG2\)KA0FCR LKSD4M#H-CB @GQX7PTT;E2D@
+@C .G"@$H"88@B8@@CT3L3T@@B8b') ; colorMapFromArray:#[24 86 20 32 110 0 36 116 0 40 108 20 48 114 20 60 172 0 72 172 0 76 128 80 76 172 0 76 174 10 80 134 80 80 156 40 88 164 0 92 144 70 96 188 30 104 200 20 108 200 20 116 158 120 116 198 50 120 202 50 120 206 20 124 180 100 124 198 0 124 200 0 124 202 50 124 208 20 124 214 0 128 210 20 128 214 0 132 174 90 132 196 60 132 218 0 132 218 40 136 176 90 136 198 60 136 206 100 136 224 60 140 204 110 140 208 100 140 220 0 144 178 130 144 222 0 148 182 150 148 182 160 148 224 0 148 230 0 152 188 120 156 206 140 156 216 120 156 234 0 164 236 0 172 178 190 176 240 30 180 186 190 184 244 40 184 244 70 188 194 200 192 200 210 192 234 170 192 248 90 196 202 210 208 216 220 212 218 230 212 220 230 216 222 230 216 255 120 220 226 240 220 248 210 224 232 240 224 255 130]; mask:((Depth1Image new) width: 10; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O0A? O?@?<C?0O?@?<C?0G>@_8@^@@@a') ; yourself); yourself]
+!
+
+ledGrey10x11
+    "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 ledGrey10x11 inspect
+     ImageEditor openOnClass:self andSelector:#ledGrey10x11
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledGrey10x11'
+        ifAbsentPut:[(Depth8Image new) width: 10; height: 11; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@B@0PD@0H@@@@EA \HB@\FAP@IB ,LCP4LB0(IC1@QD!!LTD!!DPC1XWFA$ZF1$\E1X^G2@!!H"L#IA<^I"\(JR(+J2 ,I"4.K1H0LSH/K#L@MSX7NC$:M#,@
+@C0=O#=@PS4<@@@@@DP3L4P@@@@b') ; colorMapFromArray:#[170 170 170 235 235 235 179 179 179 123 123 123 83 83 83 154 154 154 105 105 105 178 178 178 203 203 203 179 179 179 111 111 111 197 197 197 226 226 226 241 241 241 230 230 230 132 132 132 151 151 151 197 197 197 208 208 208 199 199 199 200 200 200 225 225 225 107 107 107 163 163 163 177 177 177 187 187 187 188 188 188 189 189 189 175 175 175 221 221 221 118 118 118 159 159 159 184 184 184 189 189 189 192 192 192 193 193 193 185 185 185 218 218 218 146 146 146 163 163 163 194 194 194 197 197 197 198 198 198 201 201 201 162 162 162 176 176 176 160 160 160 206 206 206 217 217 217 220 220 220 210 210 210 177 177 177 201 201 201 168 168 168 182 182 182 225 225 225 240 240 240 242 242 242 229 229 229 169 169 169 192 192 192 181 181 181 183 183 183 200 200 200 206 206 206 184 184 184 217 217 217 198 198 198 184 184 184]; mask:((Depth1Image new) width: 10; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O0A? O?@?<C?0O?@?<C?0G>@_8@^@@@a') ; yourself); yourself]
+!
+
+ledRed10x11
+    "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 ledRed10x11 inspect
+     ImageEditor openOnClass:self andSelector:#ledRed10x11
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledRed10x11'
+        ifAbsentPut:[(Depth8Image new) width: 10; height: 11; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+B@@OAP@@AP<@B@@I@!!L#H1LBBP@NAA41MST1GPPNA ("JRD!!JRHJA DRFA0 HA0XD DCCQ,''J2,+G04CA04-LCH3L2<MA00QNSX8NC\9DP0@EC@:OC0;L!!X@
+@@@YJCP4JA$@@@ @@A@KB1@@@@ b') ; colorMapFromArray:#[92 24 20 112 22 20 120 2 0 120 20 20 124 2 0 128 78 80 136 74 80 144 66 70 152 188 120 160 118 120 164 36 40 172 178 190 176 126 130 180 0 0 180 148 150 180 150 160 180 186 190 184 0 0 184 14 10 184 104 100 188 90 90 188 194 200 192 90 90 192 200 210 196 30 30 196 112 120 196 202 210 208 16 20 208 48 50 208 112 110 208 216 220 212 16 20 212 48 50 212 94 90 212 96 100 212 136 140 212 218 230 212 220 230 216 222 230 220 18 20 220 56 60 220 116 120 220 226 240 224 18 20 224 232 240 228 0 0 228 236 250 232 0 0 236 0 0 236 172 170 240 0 0 244 0 0 244 40 40 252 206 210 255 8 10 255 12 10 255 24 20 255 30 30 255 70 70 255 82 80 255 104 100]; mask:((Depth1Image new) width: 10; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O0A? O?@?<C?0O?@?<C?0G>@O0@^@@@a') ; yourself); yourself]
+!
+
+ledYellow10x11
+    "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 ledYellow10x11 inspect
+     ImageEditor openOnClass:self andSelector:#ledYellow10x11
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledYellow10x11'
+        ifAbsentPut:[(Depth8Image new) width: 10; height: 11; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@P@R@ @@@!!H@@P@JA2L3L2LGB @SBS@?QTT?L@$SAQ,2NSP6NSH[APL%JR0.K20(IPLHIB,1MS\7KRPHCRH8N#,<OC !!CP< OS9AP$@=HA@@EB)CQ$]DJ!!T@
+@@,QGBX''GQDK@@D@@@XDA@X@@@Db') ; colorMapFromArray:#[144 64 20 152 188 120 168 108 80 172 90 20 172 178 190 180 118 80 180 186 190 184 84 0 184 102 20 188 92 0 188 144 120 188 194 200 192 200 210 196 134 70 196 202 210 200 172 130 200 174 130 200 182 120 204 170 160 204 172 150 208 162 90 208 164 90 208 216 220 212 218 230 212 220 230 216 222 230 220 226 240 224 134 40 224 184 60 224 186 60 224 232 240 228 236 250 236 150 0 236 152 0 236 154 0 236 162 100 240 146 0 240 150 10 244 206 40 244 212 60 248 164 30 248 166 30 252 178 0 252 178 20 252 178 50 252 180 20 252 180 50 252 182 50 252 184 110 252 186 20 252 186 100 252 190 140 255 188 100 255 190 20 255 190 100 255 192 20 255 196 0 255 200 120 255 202 0 255 204 0 255 208 0 255 216 0 255 220 0 255 222 170 255 224 0 255 230 30 255 234 40 255 236 70 255 240 90 255 240 210 255 254 120 255 255 130]; mask:((Depth1Image new) width: 10; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O0A? O?@?<C?0O?@?<C?0G>@_8@^@@@a') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-12x12'!
+
+dart12x12Icon
+    "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 dart12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#dart12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary dart12x12Icon'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@ @@@@@@@@@@@@ FB0(@@@@@@@@@D@(KB0,O@@@@@@@ZGA8^G!!8^G0@@@@@!!B2P%IRT%IR,@@BD%H0,$IRT%IR(''MBT^B0,KIBT%IR<*@B8^H0,K
+B2P%IRT*@@@9B0,KB0,$IRT*@@@@OADFA ,KO"T*@@@@@A@IO@XFA$ME@@@@@@@PD@$IDC,@') ; colorMapFromArray:#[0 0 0 176 216 240 48 208 200 15 216 184 144 216 224 48 216 200 0 208 184 31 216 200 191 216 240 95 216 208 0 216 184 0 208 176 16 216 184 143 216 224 32 216 200 0 224 200 80 216 208 15 208 184 79 216 200 47 176 200 0 168 208 0 152 200 0 152 184 0 160 200 16 168 200 112 192 240 95 160 216 0 192 208 15 168 184 0 112 200 0 120 200 0 160 240 31 176 240 0 128 208 0 184 184 0 216 176 0 160 184 0 128 200 0 144 208 0 168 240 15 168 240 32 144 208 0 160 224 0 168 224 15 168 224 95 168 216 0 136 208 0 152 216 0 176 184 16 168 224 47 144 208 15 160 224 47 152 208 15 128 200 31 136 208 16 136 208 16 144 208 0 136 216 31 184 200 160 224 224 63 216 200 32 208 184 0 168 184 111 216 208 0 176 240 31 168 224 31 208 184 15 176 200 79 184 224 143 208 240]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@ @O@A>@O<@?8G?0??A?<C?0G?@O<@_ ') ; yourself); yourself]
+!
+
+iconEqual12x12
+    "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 iconEqual12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconEqual12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconEqual12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@PHC@0PEA \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\D0$IG2@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PHC@0PE
+A \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\D0$IG2@ @@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 248 250 96 160 50 0 160 0 0 176 0 16 176 20 32 160 30 32 144 20 0 128 0 0 112 0 0 96 0 144 224 130 176 240 140 192 240 160 160 240 130 144 224 110 128 208 100 96 208 80 80 192 60 64 160 50 16 80 0 128 224 110 144 240 110 144 240 130 128 224 100 112 208 80 96 192 80 64 176 60 48 160 50 16 80 20 32 96 20 16 128 20 0 80 0 16 64 20]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@/?<O?5??G?<@@@@@C?<O?6??G?<@@@') ; yourself); yourself]
+!
+
+iconEqualGray12x12
+    "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 iconEqualGray12x12  inspect
+     Icon flushCachedIcons
+    "
+
+    <resource: #programImage>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconEqualGray12x12'
+        ifAbsentPut:[self iconEqual12x12 asGrayImageDepth: 8]
+
+    "Created: / 31-08-2011 / 10:53:15 / cg"
+!
+
+iconEqualOrange12x12
+    "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 iconEqualOrange12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconEqualOrange12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconEqualOrange12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@PHC@0PEA \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\D0$IG2@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PHC@0PE
+A \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\D0$IG2@ @@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 255 255 197 104 70 203 139 0 224 153 0 224 165 20 203 149 38 183 118 25 163 111 0 142 97 0 122 83 0 243 227 207 252 237 231 255 253 253 251 232 219 240 205 184 227 191 164 224 188 141 210 163 110 197 141 70 102 49 0 240 213 184 249 218 196 251 237 219 239 203 173 224 178 141 211 176 134 202 165 98 198 158 66 102 81 20 122 76 25 163 124 20 102 70 0 81 67 20]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@/?<O?5??G?<@@@@@C?<O?6??G?<@@@') ; yourself); yourself]
+!
+
+iconEqualYellow12x12
+    "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 iconEqualYellow12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconEqualYellow12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconEqualYellow12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@PHC@0PEA \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\D0$IG2@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PHC@0PE
+A \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\D0$IG2@ @@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 255 255 197 144 70 203 203 0 224 224 0 218 224 20 203 201 38 183 168 25 163 163 0 142 142 0 122 122 0 243 238 207 252 244 231 255 254 253 251 242 219 240 223 184 227 211 164 224 214 141 210 195 110 197 181 70 102 81 0 240 231 184 249 235 196 251 247 219 239 224 173 224 204 141 211 200 134 202 198 98 196 198 66 97 102 20 122 107 25 157 163 20 102 102 0 76 81 20]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@/?<O?5??G?<@@@@@C?<O?6??G?<@@@') ; yourself); yourself]
+!
+
+iconExclaRed12x12
+    "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 iconExclaRed12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconExclaRed12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary iconExclaRed12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+EQTUEP8LA04UEQTUEQTUEP,TD (UEQTUEQTUEP(RD0LUEQTUEQTUEPXSD@TUEQTUEQTUEPPPDPHUEQTUEQTUEPDQC0HUEQTUEQTUEP$B@@ UEQTUEQTUEQTU
+EQTUEQTUEQTUEP8LA04UEQTUEQTUEP,TD (UEQTUEQTUEPDQC0HUEQTUEQTUEP$B@@ UEQTU') ; colorMapFromArray:#[80 0 31 80 0 15 80 16 24 100 0 16 110 0 22 100 16 26 110 16 30 140 20 56 110 80 103 110 60 75 130 16 33 160 16 39 160 32 56 160 80 111 180 60 100 160 48 68 190 60 106 180 52 86 210 100 148 210 80 120 240 132 165 250 251 255]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0,O@@<EC0DO@@<@C0@@@@<FC0DO@@<@') ; yourself); yourself]
+!
+
+iconMinus12x12
+    "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 iconMinus12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconMinus12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconMinus12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PHC@0PEA \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\
+D0$IG2@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 248 250 96 160 50 0 160 0 0 176 0 16 176 20 32 160 30 32 144 20 0 128 0 0 112 0 0 96 0 144 224 130 176 240 140 192 240 160 160 240 130 144 224 110 128 208 100 96 208 80 80 192 60 64 160 50 16 80 0 128 224 110 144 240 110 144 240 130 128 224 100 112 208 80 96 192 80 64 176 60 48 160 50 16 80 20 32 96 20 16 128 20 0 80 0 16 64 20]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@,@@@@E@@G?<O?0??C?<@@F@@D@@@@@') ; yourself); yourself]
+!
+
+iconMinusGray12x12
+    "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 iconMinusGray12x12  inspect
+     Icon flushCachedIcons
+    "
+
+    <resource: #programImage>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconMinusGray12x12'
+        ifAbsentPut:[self iconMinus12x12 asGrayImageDepth: 8]
+
+    "Created: / 31-08-2011 / 10:54:22 / cg"
+!
+
+iconMinusRed12x12
+    "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 iconMinusRed12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconMinusRed12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary iconMinusRed12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PHC@0PEA \HBP$IAP(KC@,MC <PDQHSAQPUE!!XNE1 YF!!,\GP\GA18\
+D0$IG2@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[248 248 255 160 50 56 160 59 0 176 65 0 176 79 16 160 76 30 144 53 20 128 47 0 112 41 0 96 35 0 224 150 130 240 141 140 240 160 163 240 140 130 224 118 110 208 112 100 208 111 80 192 88 60 160 76 50 80 13 0 224 134 110 240 124 110 240 156 130 224 117 100 208 95 80 192 105 80 176 99 60 160 91 48 80 43 16 96 36 20 128 61 16 80 29 0 64 38 16]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@,@@@@E@@G?<O?0??C?<@@F@@D@@@@@') ; yourself); yourself]
+!
+
+iconPlus12x12
+    "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 iconPlus12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconPlus12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconPlus12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@DB@0P@@@@@@@@@@@TFA0 @@@@@@@@@@@$JB0 @@@@@@@@@@@$LCP8@@@@@C1@QDP$LCP8RD1LS@!!PJEP(VCP\WFA$Z@ ,[A XMGA4^G2@!!H 8NC  G
+E1LSH2P$@@@@@BTWFBX@@@@@@@@@@AHXI2D@@@@@@@@@@BL''HBD@@@@@@@@@@B !!F"$@@@@@') ; colorMapFromArray:#[255 248 250 80 176 60 32 160 30 32 144 20 96 160 80 16 160 20 144 240 130 128 208 100 16 128 20 16 176 20 176 240 140 128 224 110 176 240 160 144 224 110 0 128 0 96 160 50 0 160 0 0 176 0 0 112 0 0 96 0 144 224 130 192 240 160 160 240 130 96 208 80 80 192 60 64 160 50 16 80 0 144 240 110 128 224 100 112 208 80 96 192 80 64 176 60 48 160 50 16 80 20 32 96 20 0 80 0 16 64 20 16 112 20 16 96 20 64 176 50 64 112 60 96 112 80]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0,O@@<EC0G?<O?0??C?<@<FC0DO@@<@') ; yourself); yourself]
+!
+
+iconPlusBlue12x12
+    "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 iconPlusBlue12x12 inspect
+     ImageEditor openOnClass:self andSelector:#iconPlusBlue12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary iconPlusBlue12x12'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@DB@0P@@@@@@@@@@@TFA0 @@@@@@@@@@@$JB0 @@@@@@@@@@@$LCP8@@@@@C1@QDP$LCP8RD1LS@!!PJEP(VCP\WFA$Z@ ,[A XMGA4^G2@!!H 8NC  G
+E1LSH2P$@@@@@BTWFBX@@@@@@@@@@AHXI2D@@@@@@@@@@BL''HBD@@@@@@@@@@B !!F"$@@@@@') ; colorMapFromArray:#[253 255 248 60 126 176 30 84 160 20 82 144 80 128 160 16 70 160 130 188 240 100 171 208 16 57 128 16 76 176 140 216 240 110 174 224 160 208 240 110 190 224 0 51 128 50 140 160 0 64 160 0 70 176 0 45 112 0 38 96 130 182 224 160 224 240 130 204 240 80 147 208 60 133 192 50 108 160 0 48 80 110 196 240 100 178 224 80 163 208 80 141 192 60 110 176 48 91 160 16 38 80 20 62 96 0 32 80 16 31 64 16 50 112 16 44 96 50 114 176 60 85 112 80 109 112]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0,O@@<EC0G?<O?0??C?<@<FC0DO@@<@') ; yourself); yourself]
+!
+
+iconPlusGray12x12
+    "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 iconPlusGray12x12  inspect
+     Icon flushCachedIcons
+    "
+
+    <resource: #programImage>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class iconPlusGray12x12'
+        ifAbsentPut:[self iconPlus12x12 asGrayImageDepth: 8]
+
+    "Created: / 31-08-2011 / 10:54:27 / cg"
+!
+
+javascript12x12Icon
+    "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 javascript12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#javascript12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary javascript12x12Icon'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+S0@@E1\WE1\KHA]O@@, E!!XVJ2ELSAML@AXVJ0!!LD1LSU18SPR-LD1LLG!!8RD!!HRBALSG!!HLR ,KB4)JD1H=MT)NR"H[SB]UD5T\T$\KC -VJ4\NA2X@GC!!D
+ID0;@BHNA2YG@@0+C @L@D\EU4YFATX2Q#<;Q$YFU4YFQ$YFQ$YFQ$YFS4YFQ$YFQ$YFQ$X@') ; colorMapFromArray:#[240 255 255 96 128 160 112 160 190 128 160 190 144 160 180 112 128 190 176 176 180 192 208 210 208 224 220 176 176 220 240 255 240 240 240 240 255 255 255 255 240 255 96 128 180 112 160 210 160 176 190 128 128 180 176 192 210 192 208 220 160 160 210 192 208 240 224 224 240 240 240 255 96 96 140 128 160 180 144 144 160 144 160 190 144 144 180 144 144 190 176 192 220 208 208 210 224 240 240 208 208 240 224 224 255 128 128 140 112 144 180 112 112 160 128 144 190 160 160 180 176 176 190 160 176 220 192 192 210 208 224 240 208 224 255 128 144 140 112 112 140 128 144 160 128 128 160 160 176 180 112 144 210 160 160 190 112 128 210 176 176 210 240 240 220 224 240 255 112 128 140 96 144 180 96 112 160 96 128 190 96 112 180 160 192 210 144 176 220 128 144 210 192 224 240 224 224 220 96 128 140 96 112 140 255 240 240 112 128 160 112 144 190 112 128 180 144 176 210 176 208 220 160 176 210 240 255 220 208 208 220 255 240 220 255 255 240 0 0 0 96 144 190 144 176 190 128 144 180 128 160 210 160 192 220 144 160 210 224 240 220 192 192 220]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_>C?<O?0??C?<O?0??C?<O?0??C?<G? ') ; yourself); yourself]
+!
+
+padLockBlack12x12Icon
+    "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 padLockBlack12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#padLockBlack12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class padLockBlack12x12Icon'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?0C??F$?<TEO<S1O<@@O2**#2UUS2TES2VES2UUS<@@O????') ; colorMapFromArray:#[0 0 0 63 63 63 127 127 127 255 255 255]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C0@_ C?@N\@?0G? _>A?8G? _>@?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+padLockBlue12x12Icon
+    "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 padLockBlue12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#padLockBlue12x12Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class padLockBlue12x12Icon'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?0C??F$?<TEO<S1O<@@O2**#2UUS2TES2VES2UUS<@@O????') ; colorMapFromArray:#[0 0 0 128 128 255 212 212 255 255 255 255]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C0@_ C?@N\@?0G? _>A?8G? _>@?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+padLockGray12x12Icon
+    "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 padLockGray12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#padLockGray12x12Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class padLockGray12x12Icon'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?0C??F$?<TEO<S1O<@@O2**#2UUS2TES2VES2UUS<@@O????') ; colorMapFromArray:#[0 0 0 128 128 128 212 212 212 255 255 255]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C0@_ C?@N\@?0G? _>A?8G? _>@?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+padLockGreen12x12Icon
+    "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 padLockGreen12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#padLockGreen12x12Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class padLockGreen12x12Icon'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?0C??F$?<TEO<S1O<@@O2**#2UUS2TES2VES2UUS<@@O????') ; colorMapFromArray:#[0 0 0 128 255 128 212 255 212 255 255 255]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C0@_ C?@N\@?0G? _>A?8G? _>@?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+padLockRed12x12Icon
+    "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 padLockRed12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#padLockRed12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class padLockRed12x12Icon'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?0C??F$?<TEO<S1O<@@O2**#2UUS2TES2VES2UUS<@@O????') ; colorMapFromArray:#[0 0 0 255 128 128 255 212 212 255 255 255]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C0@_ C?@N\@?0G? _>A?8G? _>@?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-14x14'!
+
+bookmarks14x14
+    "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 bookmarks14x14 inspect
+     ImageEditor openOnClass:self andSelector:#bookmarks14x14
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary bookmarks14x14'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@GA0@@@@@@@@@@@@@@BPDABP@@@@@@@@@@@@@UJ"(U@@@@@@@@@@@BJB<WE2<(@ @@@@@!!H"L]LA0\LA4#H"D@@@<HDB$.
+I2\.JQ@HC0@@@@@TA!!(KB1(FE@@@@@@@@B4,IQ$YIR0-@@@@@@@@F0TRA@PRAQ,@@@@@@@@ML2X HBX3CP@@@@@@@ALLL!!XVL 0S@@@@@@@@M@8@@@@$C#P@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[204 180 130 228 201 132 205 197 179 206 217 231 255 237 92 245 219 101 254 243 126 206 180 127 233 208 130 204 197 178 206 213 221 255 231 79 241 217 97 210 175 98 205 176 116 204 182 135 255 255 185 206 210 213 255 235 81 215 180 85 231 204 105 206 176 115 203 180 133 255 253 181 206 208 209 255 225 70 255 235 98 204 174 114 255 244 145 239 223 167 205 205 199 207 219 236 237 212 92 206 176 111 225 196 126 234 211 152 205 202 194 255 233 73 253 241 103 255 239 125 202 179 132 255 254 167 249 243 190 206 218 234 244 218 87 204 172 107 255 245 144 224 197 133 251 244 184 207 218 232 217 178 74 254 238 111 207 175 107]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@LC@0^CA8L_87?;_?,?<1?#G>L_81?#FNL@@0@a') ; yourself); yourself]
+!
+
+ledDarkRed10x11
+    "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 ledDarkRed10x11 inspect
+     ImageEditor openOnClass:self andSelector:#ledDarkRed10x11
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledDarkRed10x11'
+        ifAbsentPut:[(Depth8Image new) width: 10; height: 11; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+B@@OAP@@AP<@B@@I@!!L#H1LBBP@NAA41MST1GPPNA ("JRD!!JRHJA DRFA0 HA0XD DCCQ,''J2,+G04CA04-LCH3L2<MA00QNSX8NC\9DP0@EC@:OC0;L!!X@
+@@@YJCP4JA$@@@ @@A@KB1@@@@ b') ; colorMapFromArray:#[46 12 10 56 11 10 60 1 0 60 10 10 62 1 0 64 39 40 68 37 40 72 33 35 76 94 60 80 59 60 82 18 20 86 89 95 88 63 65 90 0 0 90 74 75 90 75 80 90 93 95 92 0 0 92 7 5 92 52 50 94 45 45 94 97 100 96 45 45 96 100 105 98 15 15 98 56 60 98 101 105 104 8 10 104 24 25 104 56 55 104 108 110 106 8 10 106 24 25 106 47 45 106 48 50 106 68 70 106 109 115 106 110 115 108 111 115 110 9 10 110 28 30 110 58 60 110 113 120 112 9 10 112 116 120 114 0 0 114 118 125 116 0 0 118 0 0 118 86 85 120 0 0 122 0 0 122 20 20 126 103 105 127 4 5 127 6 5 127 12 10 127 15 15 127 35 35 127 41 40 127 52 50]; mask:((Depth1Image new) width: 10; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O0A? O?@?<C?0O?@?<C?0G>@O0@^@@@a') ; yourself); yourself]
+!
+
+ledGreen14x14
+    "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 ledGreen14x14 inspect
+     ImageEditor openOnClass:self andSelector:#ledGreen14x14
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledGreen14x14'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K @+A0@@A2,@K"8.K"8@DPDUK2<U@QD@K"8.@B(BIS)CP3(%@"(@K"8@B ,#LBX&LBLKB @.K @CBP8R
+D1 RC $C@@@.@@PEC1PYF1,PAPP@K"8@CP ZG2\)KA0FCP@.K @(CB41MCX2KP0(@B8.@@@]E#]AQS,WHP@@@B8.@C .G"@$H"88@B8@K"8.@@@5L3L5@@@.
+@@@.K"8.@@@@@@@@K"8.K @a') ; colorMapFromArray:#[24 86 20 32 110 0 36 116 0 40 108 20 48 114 20 60 172 0 72 172 0 76 128 80 76 172 0 76 174 10 80 134 80 80 156 40 88 164 0 92 144 70 96 188 30 104 200 20 108 200 20 116 158 120 116 198 50 120 202 50 120 206 20 124 180 100 124 198 0 124 200 0 124 202 50 124 208 20 124 214 0 128 210 20 128 214 0 132 174 90 132 196 60 132 218 0 132 218 40 136 176 90 136 198 60 136 206 100 136 224 60 140 204 110 140 208 100 140 220 0 144 178 130 144 222 0 148 182 150 148 182 160 148 224 0 148 230 0 152 188 120 156 206 140 156 216 120 156 234 0 164 236 0 172 178 190 176 240 30 180 186 190 184 244 40 184 244 70 188 194 200 192 200 210 192 234 170 192 248 90 196 202 210 208 216 220 212 218 230 212 220 230 216 222 230 216 255 120 220 226 240 220 248 210 224 232 240 224 255 130]; mask:((ImageMask new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?@G>@?<C?0O?L?<C?0O?@_8A? A8@@@@@a') ; yourself); yourself]
+!
+
+ledGrey14x14
+    "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 ledGrey14x14 inspect
+     ImageEditor openOnClass:self andSelector:#ledGrey14x14
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledGrey14x14'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@0PD@0H@@@@@@@@@APXGB@ GA T@@@@@@@$JB00MCP0KB $@@@@@C1@QD!!LTD!!DPC0@@@@@VE1 Y
+F!!,YGA\V@@@@@A8_HBD"H2L$G18@@@@@I"\(JR(+J2 ,I @@@@@-K"<RLCD2K283@@@@@@@5M#\8NS(6N0@@@@@@@C0=O#=@PS4<@@@@@@@@@@ADL3MD@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[170 170 170 235 235 235 179 179 179 123 123 123 83 83 83 154 154 154 105 105 105 178 178 178 203 203 203 179 179 179 111 111 111 197 197 197 226 226 226 241 241 241 230 230 230 132 132 132 151 151 151 197 197 197 208 208 208 199 199 199 200 200 200 225 225 225 107 107 107 163 163 163 177 177 177 187 187 187 188 188 188 189 189 189 175 175 175 221 221 221 118 118 118 159 159 159 184 184 184 189 189 189 192 192 192 193 193 193 185 185 185 218 218 218 146 146 146 163 163 163 194 194 194 197 197 197 198 198 198 201 201 201 162 162 162 176 176 176 160 160 160 206 206 206 217 217 217 220 220 220 210 210 210 177 177 177 201 201 201 168 168 168 182 182 182 225 225 225 240 240 240 242 242 242 229 229 229 169 169 169 192 192 192 181 181 181 183 183 183 200 200 200 206 206 206 184 184 184 217 217 217 198 198 198 184 184 184]; mask:((ImageMask new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?CG>@?<3?0O?@?<C?0O?@_81? A8@@@@@a') ; yourself); yourself]
+!
+
+ledRed14x14
+    "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 ledRed14x14 inspect
+     ImageEditor openOnClass:self andSelector:#ledRed14x14
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledRed14x14'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+B@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@@OAP@@AP<@B@ HB@@@BPHSH2LS@ $@B@ H@@8DGSD5MSD]A@8@B@ @A ("JRD!!JRHJA @HB@@AD!! \
+HB@\FAHA@@ H@@LMF2\+J2,_CPL@B@ @A04-LCH3L2<MA0@HB@@LDS$6NC 7NQDL@@ H@@@TLC(<OC,2E @@B@ H@@@YJCP4JA$@@@@HB@ H@@@PB0,P@@@H
+B@ HB@ H@@@@@@@@@@ HB@@a') ; colorMapFromArray:#[92 24 20 112 22 20 120 2 0 120 20 20 124 2 0 128 78 80 136 74 80 144 66 70 152 188 120 160 118 120 164 36 40 172 178 190 176 126 130 180 0 0 180 148 150 180 150 160 180 186 190 184 0 0 184 14 10 184 104 100 188 90 90 188 194 200 192 90 90 192 200 210 196 30 30 196 112 120 196 202 210 208 16 20 208 48 50 208 112 110 208 216 220 212 16 20 212 48 50 212 94 90 212 96 100 212 136 140 212 218 230 212 220 230 216 222 230 220 18 20 220 56 60 220 116 120 220 226 240 224 18 20 224 232 240 228 0 0 228 236 250 232 0 0 236 0 0 236 172 170 240 0 0 244 0 0 244 40 40 252 206 210 255 8 10 255 12 10 255 24 20 255 30 30 255 70 70 255 82 80 255 104 100]; mask:((ImageMask new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?@G>@?<C?0O?H?<C?0O?@_8@?@A8@@@@@a') ; yourself); yourself]
+!
+
+ledYellow14x14
+    "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 ledYellow14x14 inspect
+     ImageEditor openOnClass:self andSelector:#ledYellow14x14
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary ledYellow14x14'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@R@ @@@!!H@@PDA@PD@B \#L3L#A0(@@PDA@ALILC=EQS<0BQL@@PD@AQ,2NSP6NSH[AP@A@P@CIR$,
+K"<,JBTC@@DA@@ $J3D5M3\-I@ @@PD@CRH8N#,<OC !!CP@A@P@OHC4>PTI@OR@P@@DA@@@TJ$MFQ4P*EP@@@PDA@@,QGBX''GQDK@@@A@PDA@@@FA@PF@@@A
+@PDA@PD@@@@@@@@@@@DA@P@a') ; colorMapFromArray:#[144 64 20 152 188 120 168 108 80 172 90 20 172 178 190 180 118 80 180 186 190 184 84 0 184 102 20 188 92 0 188 144 120 188 194 200 192 200 210 196 134 70 196 202 210 200 172 130 200 174 130 200 182 120 204 170 160 204 172 150 208 162 90 208 164 90 208 216 220 212 218 230 212 220 230 216 222 230 220 226 240 224 134 40 224 184 60 224 186 60 224 232 240 228 236 250 236 150 0 236 152 0 236 154 0 236 162 100 240 146 0 240 150 10 244 206 40 244 212 60 248 164 30 248 166 30 252 178 0 252 178 20 252 178 50 252 180 20 252 180 50 252 182 50 252 184 110 252 186 20 252 186 100 252 190 140 255 188 100 255 190 20 255 190 100 255 192 20 255 196 0 255 200 120 255 202 0 255 204 0 255 208 0 255 216 0 255 220 0 255 222 170 255 224 0 255 230 30 255 234 40 255 236 70 255 240 90 255 240 210 255 254 120 255 255 130]; mask:((ImageMask new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?CG>@?<3?0O?@?<C?0O?@_81? A8@@@@@a') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-15x15'!
+
+edit_anchor15x15
+    "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 edit_anchor15x15 inspect
+     ImageEditor openOnClass:self andSelector:#edit_anchor15x15
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary edit_anchor15x15'
+        ifAbsentPut:[(Depth4Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQDQDQDQDQ@QDQD].!!DQDADQD]D8DQDPDQDQ,9 QDQ@QDQDTRQDQDAD1DQAADQDPDQDQDHDQFQ@Q4QD[ QDPDAF;(Q.AD; PD[(QF8DQ%Q@Q69H; R5EDAD$
+B7AVQ^\PDQI%U^W.0Q@QDQI%9GLQDADQDQDQDQDP') ; colorMapFromArray:#[88 113 160 165 174 205 194 198 206 211 212 217 81 99 143 58 78 114 95 108 136 136 148 166 60 84 129 165 173 191 189 196 217 101 122 176 167 170 178 123 144 186 43 63 103]; mask:((Depth1Image new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A0@O@@<@C0BF@HXP1#C&\LX0?/C?<G? G<@@@') ; yourself); yourself]
+!
+
+edit_bold_15x15
+    "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 edit_bold_15x15 inspect
+     ImageEditor openOnClass:self andSelector:#edit_bold_15x15
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary edit_bold_15x15'
+        ifAbsentPut:[(Depth1Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0]; mask:((Depth1Image new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@G>@N\@90C''@O8@90C''@N\A? @@@@@@@@') ; yourself); yourself]
+!
+
+edit_code_15x15
+    "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 edit_code_15x15 inspect
+     ImageEditor openOnClass:self andSelector:#edit_code_15x15
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary edit_code_15x15'
+        ifAbsentPut:[(Depth2Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@P@@@@L@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@D@@@@A@@@@@0@@@@@@@@@B@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@A8@@@@],@@@F; @@A4@@@@[@@@@GX@@@@@@') ; yourself); yourself]
+!
+
+edit_image_15x15
+    "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 edit_image_15x15 inspect
+     ImageEditor openOnClass:self andSelector:#edit_image_15x15
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary edit_image_15x15'
+        ifAbsentPut:[(Depth4Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+Y&Y&Y&Y&Y&A%UUUUUUUUXFUUUWU0UUU YUU5&W]4UVA%U9&Y$WUUXFUW&Y$RUUU"YWUY&W\RUVA%Q7%R\''\TX&Y7]4IHP''Y Y&](I8]6Y&I&Y&ZCY&Y&XF&Y
+&YNI&Y% Y7]7!!8]7]6A"D!!HRD!!HRXFY&Y&Y&Y&Y ') ; colorMapFromArray:#[153 153 153 51 94 9 59 145 19 50 50 50 225 225 225 164 207 242 255 255 255 111 147 26 147 63 49 165 199 47]; mask:((Depth1Image new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'????????????????????????????????????????') ; yourself); yourself]
+!
+
+edit_italic_15x15
+    "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 edit_italic_15x15 inspect
+     ImageEditor openOnClass:self andSelector:#edit_italic_15x15
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary edit_italic_15x15'
+        ifAbsentPut:[(Depth2Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@P@@@@L@@@@@@@@@@ @@B@@@@P@@@@@P@@@D@@D@@D@A@A@@@0@A@@@@@@@B@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@_@@8@G@@\@C @N@A0@G@A>@@@@@@@@@') ; yourself); yourself]
+!
+
+padLockGold15x15Icon
+    "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 padLockGold15x15Icon inspect
+     ImageEditor openOnClass:self andSelector:#padLockGold15x15Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class padLockGold15x15Icon'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+^G!!8]3<0P4MZ$@@@^G!!8^G!!7@C1\K8TLD8<@@G!!8(J@AI1H=NH,[ 6MR@JB (J@*O$0UH)9X[4M;@JB IRP,H3X"IRT%DU-T@BT%S$6N%WVJS$9NN%NL@D9N
+S)%VU2:AVTPGA%TDRFENS"@<(UE&^&X;YRZ"R3QNYG@NL6@!!Q9Z[!!16HG8Y$S64MZ8I*E4FS F8(QWIO''1)1$T@VFG8Y%A2MB@._''9\2@2-?P"4E[DZ\LP._
+D@$NEG1(Y2$BZW6X!!I(PI@*R^UA6C954RU4^\5<@IH%_R$)JR$)JR$)JW8$@') ; colorMapFromArray:#[132 141 152 147 150 154 250 223 1 246 214 0 205 172 133 238 195 0 213 180 146 217 186 150 188 136 0 206 151 0 183 125 9 208 208 202 196 204 214 255 255 210 255 255 219 210 178 65 242 242 235 106 112 117 96 107 126 250 255 255 255 241 0 154 154 151 255 227 0 67 35 0 52 17 0 253 211 0 208 159 0 167 178 193 222 168 0 248 231 45 208 174 26 199 152 26 225 184 36 255 249 75 220 220 215 77 88 108 241 241 235 245 245 239 255 250 109 242 249 255 255 255 142 255 237 1 142 148 162 242 212 1 143 154 176 174 133 0 222 189 144 169 179 192 177 184 193 184 129 0 255 255 194 253 241 60 210 210 205 214 214 209 77 83 92 230 230 225 98 106 114 243 243 238 117 117 114 255 252 115 255 255 255 115 123 147 130 140 156 152 156 159 241 210 0 53 18 0 151 116 0 162 170 184 218 187 150 193 143 4 220 165 0 206 188 46 181 130 21 204 173 44 206 206 201 208 167 44 72 84 108 240 240 234 244 244 238 243 243 237 212 182 79 255 255 126 131 135 141 119 133 159 132 141 163 195 162 126 219 188 133 218 185 135 180 180 176 221 190 150 175 181 191 176 183 196 181 189 201 202 170 38 209 209 204 207 207 202 251 241 74 229 229 224 238 238 233 226 234 245 244 244 237 255 251 113 255 255 124 255 241 2 255 234 3 249 219 0 255 249 29 252 243 30 227 181 0 212 165 5 222 170 0 173 179 194 216 171 19 255 255 198 208 208 203 156 90 7 206 175 50 91 91 95 211 180 71 242 242 237 246 246 241 212 182 80 255 255 123 129 137 152 255 239 8 251 223 0 59 25 0 251 215 0 228 183 0 222 191 149 249 238 43 177 186 197 187 129 0 186 194 206 209 209 203 249 238 67 255 255 211 226 226 221 235 235 229 100 103 111 76 93 127 255 255 112 88 104 139 130 135 148 149 155 158 247 218 0 224 194 126 255 217 0 228 184 0 13 30 68 161 138 32 204 152 0 255 255 53 206 155 18 207 207 201 255 250 72 255 255 82 209 176 59 232 232 227 243 243 236 245 245 240 255 255 115 255 255 251]; mask:((Depth1Image new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C<D_8S?1OOD8\S!!1_?5??W?=_?5??W?=_?5??S?9') ; yourself); yourself]
+!
+
+padLockGoldOpen15x15Icon
+    "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 padLockGoldOpen15x15Icon inspect
+     ImageEditor openOnClass:self andSelector:#padLockGoldOpen15x15Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class padLockGoldOpen15x15Icon'
+        ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+^G!!8]3<0P4MZ$@@@^G!!8^G @@C1\K8TLD8<@@G!!8(J@@I1H=NH,[ 6MR@JB (J@@O$0UH)9X[4M;@JB IRP@@@@"IRT%DU-T@BT%S$4@@@@@S$9NN%NL@D9N
+S)%VU2:AVTPGA%TDRFENS"@<(UE&^&X;YRZ"R3QNYG@NL6@!!Q9Z[!!16HG8Y$S64MZ8I*E4FS F8(QWIO''1)1$T@VFG8Y%A2MB@._''9\2@2-?P"4E[DZ\LP._
+D@$NEG1(Y2$BZW6X!!I(PI@*R^UA6C954RU4^\5<@IH%_R$)JR$)JR$)JW8$@') ; colorMapFromArray:#[132 141 152 147 150 154 250 223 1 246 214 0 205 172 133 238 195 0 213 180 146 217 186 150 188 136 0 206 151 0 183 125 9 208 208 202 196 204 214 255 255 210 255 255 219 210 178 65 242 242 235 106 112 117 96 107 126 250 255 255 255 241 0 154 154 151 255 227 0 67 35 0 52 17 0 253 211 0 208 159 0 167 178 193 222 168 0 248 231 45 208 174 26 199 152 26 225 184 36 255 249 75 220 220 215 77 88 108 241 241 235 245 245 239 255 250 109 242 249 255 255 255 142 255 237 1 142 148 162 242 212 1 143 154 176 174 133 0 222 189 144 169 179 192 177 184 193 184 129 0 255 255 194 253 241 60 210 210 205 214 214 209 77 83 92 230 230 225 98 106 114 243 243 238 117 117 114 255 252 115 255 255 255 115 123 147 130 140 156 152 156 159 241 210 0 53 18 0 151 116 0 162 170 184 218 187 150 193 143 4 220 165 0 206 188 46 181 130 21 204 173 44 206 206 201 208 167 44 72 84 108 240 240 234 244 244 238 243 243 237 212 182 79 255 255 126 131 135 141 119 133 159 132 141 163 195 162 126 219 188 133 218 185 135 180 180 176 221 190 150 175 181 191 176 183 196 181 189 201 202 170 38 209 209 204 207 207 202 251 241 74 229 229 224 238 238 233 226 234 245 244 244 237 255 251 113 255 255 124 255 241 2 255 234 3 249 219 0 255 249 29 252 243 30 227 181 0 212 165 5 222 170 0 173 179 194 216 171 19 255 255 198 208 208 203 156 90 7 206 175 50 91 91 95 211 180 71 242 242 237 246 246 241 212 182 80 255 255 123 129 137 152 255 239 8 251 223 0 59 25 0 251 215 0 228 183 0 222 191 149 249 238 43 177 186 197 187 129 0 186 194 206 209 209 203 249 238 67 255 255 211 226 226 221 235 235 229 100 103 111 76 93 127 255 255 112 88 104 139 130 135 148 149 155 158 247 218 0 224 194 126 255 217 0 228 184 0 13 30 68 161 138 32 204 152 0 255 255 53 206 155 18 207 207 201 255 250 72 255 255 82 209 176 59 232 232 227 243 243 236 245 245 240 255 255 115 255 255 251]; mask:((Depth1Image new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C<D_8Q?1GOD@\PA1_?5??W?=_?5??W?=_?5??S?9') ; yourself); yourself]
+!
+
+smiley_angry
+    "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 smiley_angry inspect
+     ImageEditor openOnClass:self andSelector:#smiley_angry
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_angry'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C 8NC @FA XHB@@NC 8NC 8N@@LC@0,KB0,@C 8NC 8DAP\GA0\G@0,L@@8NC XEA0\IBP,G@ $IC@@NC PKA0\CB0$JBP(EAP4NA HG@0LC@@TI@ @KB00H
+B@,C@0LE@@,CB0@AB0DHB@,C@0LCAPLGA0DEAP(HB@,GA0LCAPTKB0DEAP(HB@DGA0LJ@@4MCP@L@P0HC 4KA0,@B TAB 0@C@XNC  AA0TEB0,EAPDLC@ N
+C 8M@PTKB0TE@P0LA 8NC 8NB@4L@P(LC@XHC 8NC 8NC 8HB@ HB@8NC 8N') ; colorMapFromArray:#[0 0 0 255 28 4 255 32 8 255 92 76 109 8 0 255 48 24 72 4 0 255 108 92 44 4 0 89 60 56 255 24 0 255 68 48 208 24 0 85 8 0 0 0 0]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+!
+
+smiley_biggrin
+    "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 smiley_biggrin inspect
+     ImageEditor openOnClass:self andSelector:#smiley_biggrin
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_biggrin'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ HB@ H@@@@@@@HB@ HB@ HB@@@A@PDA@P@@@ HB@ H@@PDA@PDA@PDA@@HB@ @A@PDA@PDA@PDA@P@B@ @A@P@@@PDA@@@A@P@B@@DA@P@@@PDA@@@A@PD@
+@@DA@PDA@PDA@PDA@PD@@@DA@PDA@PDA@PDA@PD@@@DA@@@@@@@@@@@@@PD@@@DA@@HB@ HB@ H@@PD@@ @A@P@B@ HB@ @A@P@B@ @A@PD@@@@@@@DA@P@B
+@ H@@PDA@PDA@PDA@@HB@ HB@@@A@PDA@P@@@ HB@ HB@ H@@@@@@@HB@ HB') ; colorMapFromArray:#[0 0 0 0 255 0 255 255 255]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+!
+
+smiley_cool
+    "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 smiley_cool inspect
+     ImageEditor openOnClass:self andSelector:#smiley_cool
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_cool'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ @@@@@@@@@@@ HB@ HB@ HB@@@@@@@B@ HB@ HB@ HB@ @@@@@B@ @@@ HB@@@B@ @@@@@@@@@@@@H@@@@@@@@@
+@@HB@@@@@@@@@@@@@ H@@@HB@ @@@ HB@@@B@ H@@@HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ H@@@@B@ @B@ HB@ @B@ @@@@@B@ H@@@@@@@HB@ @@
+@@@@@ HB@ HB@ HB@@@@@@@@@@@B@ HB@ @@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 0 0 255 0]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+!
+
+smiley_eek
+    "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 smiley_eek inspect
+     ImageEditor openOnClass:self andSelector:#smiley_eek
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_eek'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@C@0LC@0@@@@@@@@@@@0LC@0LC@0LC@@@@@@@C@0LC@0LC@0LC@0@@@@@C@0LC@0LC@0LC@0@@@@LC@0@@@0LC@@@C@0L@
+@@LC@0HB@0LC@ HC@0L@@@LC@0LC@0LC@0LC@0L@@@LC@0LC@0LC@0LC@0L@@@LC@0LC@0LC@0LC@0L@@@@C@0LC@0@C@0LC@0@@@@@C@0LC@@@@@0LC@0@@
+@@@@@0LC@0@C@0LC@@@@@@@@@@@C@0LC@0@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 0 48 48 48 255 157 167]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+!
+
+smiley_frown
+    "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 smiley_frown inspect
+     ImageEditor openOnClass:self andSelector:#smiley_frown
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_frown'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ @@@@@@@@@@@ HB@ HB@ HB@@@@@@@B@ HB@ HB@ HB@ @@@@@B@ HB@ HB@ HB@ @@@@HB@ @@@ HB@@@B@ H@
+@@HB@ @@@ HB@@@B@ H@@@HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ H@@@HB@ H@@@@@@@HB@ H@@@@B@ @B@ HB@ @B@ @@@@@B@ HB@ HB@ HB@ @@
+@@@@@ HB@ HB@ HB@@@@@@@@@@@B@ HB@ @@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 0 255 163 0]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+!
+
+smiley_mhmh
+    "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 smiley_mhmh inspect
+     ImageEditor openOnClass:self andSelector:#smiley_mhmh
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_mhmh'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ @@@@@@@@@@@ HB@ HB@ HB@@@@@@@B@ HB@ HB@ HB@ @@@@@B@ @@@ HB@@@B@ @@@@HB@ @@@ HB@@@B@ H@
+@@HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ H@@@@B@ HB@ HB@ HB@ @@@@@B@ H@@@@@@@HB@ @@
+@@@@@ HB@ HB@ HB@@@@@@@@@@@B@ HB@ @@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 0 255 222 0]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+!
+
+smiley_ok
+    "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 smiley_ok inspect
+     ImageEditor openOnClass:self andSelector:#smiley_ok
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_ok'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ HB@ H@@@@@@@HB@ HB@ HB@@@A@PDA@P@@@ HB@ H@@PDA@PDA@PDA@@HB@ @A@PDA@PDA@PDA@P@B@ @A@P@@@PDA@@@A@P@B@@DA@P@@@PDA@@@A@PD@
+@@DA@PDA@PDA@PDA@PD@@@DA@PDA@PDA@PDA@PD@@@DA@PDA@PDA@PDA@PD@@@DA@PDA@PDA@PDA@PD@@ @A@PDA@PDA@P@A@P@B@ @A@PD@@@@@@@DA@P@B
+@ H@@PDA@PDA@PDA@@HB@ HB@@@A@PDA@P@@@ HB@ HB@ H@@@@@@@HB@ HB') ; colorMapFromArray:#[0 0 0 255 255 0 0 0 0]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+!
+
+smiley_smile
+    "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 smiley_smile inspect
+     ImageEditor openOnClass:self andSelector:#smiley_smile
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_smile'
+	ifAbsentPut:[(Depth8Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ HB@ H@@@@@@@HB@ HB@ HB@@@A@PDA@P@@@ HB@ H@@PDA@PDA@PDA@@HB@ @A@PDA@PDA@PDA@P@B@ @A@P@@@PDA@@@A@P@B@@DA@P@@@PDA@@@A@PD@
+@@DA@PDA@PDA@PDA@PD@@@DA@PDA@PDA@PDA@PD@@@DA@PDA@PDA@PDA@PD@@@DA@@DA@PDA@PD@@PD@@ @A@P@A@PDA@P@A@P@B@ @A@PD@@@@@@@DA@P@B
+@ H@@PDA@PDA@PDA@@HB@ HB@@@A@PDA@P@@@ HB@ HB@ H@@@@@@@HB@ HB') ; colorMapFromArray:#[0 0 0 255 255 0 0 0 0]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@_<C?8_?1??O?>??;??/?>??9??G?<O? _<@_@') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-16x16'!
+
+back16x16Icon
+    "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 back16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#back16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class back16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@PX@@@@@@@@@@@@@@@@@@PXE@@@@@@@@@@@@@@@@@PXEAP@@
+@@@@@@@@@@@@@PXEAPTF@ HBA @@@@@@@PXEAPTEAPTEAPP@@@@@@ XEAPTEAPTEAPTD@@@@@@@CA@TEAPTEAPTEA@@@@@@@@@LDAPTEA@PDA@P@@@@@@@@@
+@0PEAP@@@@@@@@@@@@@@@@@CA@T@@@@@@@@@@@@@@@@@@@LD@@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 192 255 255 0 64 64 0 128 128 0 192 192 0 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A @N@A8@O A?<O?1??O?<_?0??A?<C8@G @N@@X@b') ; yourself); yourself]
+!
+
+bottom16x16Icon
+    "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 bottom16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#bottom16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class bottom16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@DQDQD@@@@@@QUY"P@@@@@AEH"M@@@@@@DT"H4@@@@@@Q"H#P@@@QDQAH"MDQDAFD"H"H"H0P@Q!!H"H"H0P@@DXRH"H0P@@@AFD"H0P@@@@@
+Q!!H0P@@@@@@DX0P@@@@@@@A@P@@@@@QDQDQDQDP@ADQDQDQDQ@@b') ; colorMapFromArray:#[0 64 64 0 255 255 0 192 192 0 128 128 0 0 0 255 255 255 192 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O8@? C>@O8@? ??;??''?<O? _<@? A<@C G?<_?0b') ; yourself); yourself]
+!
+
+browseIt16x16Icon
+    "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 browseIt16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#browseIt16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class browseIt16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADQDPXB@@@@D3L0XCT@@@@SL0Y MP@@@BUPY!!@@@@@@@@Y!!E&X@@@@@Y!!E&X@@@@@@@A&X@@@@@@ADFXADR@@@@
+E@XDQDT@@@@ XEUUUP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 0 0 0 255 0 127 127 127 248 252 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@HG?8_?!!?>G?8_?1?>A?0O?8_?!!?>G?8_? P@@@@b') ; yourself); yourself]
+!
+
+bugGrey16x16Icon
+    "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 bugGrey16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#bugGrey16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class bugGrey16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@GA0@NC @GA0\@@@@@@@@G@@ IB ,LA0@G@@@@@@@@C @PDQHRD1P@C @@@@@@@@@WFA$Z@!!,\GP@@@@@@@@@@G2@@HRH[
+H2P@@@@@@@@@I"\(JR(+KB4.I @@@@@@@B<0LSH3MCT6M3 @@@@@@C$:N30=O#=@PTIC\P@@@GEGRD%JR39LST9O@@A1@@AQ@EISUEUVU5!!YV%,@TP@@@@A]
+W%= XVI#YFU&@@@@@@A1W#!!(ZV)+[F5.[7D@@@@@\PAX\&53]GU6]0A1@@@@@G$@@@A;_G1=@@@@^P@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[180 180 180 237 237 237 189 189 189 255 255 255 243 243 243 250 250 250 246 246 246 137 137 137 255 255 255 13 13 13 23 23 23 25 25 25 8 8 8 202 202 202 207 207 207 255 255 255 84 84 84 5 5 5 1 1 1 4 4 4 56 56 56 255 255 255 253 253 253 19 19 19 71 71 71 169 169 169 197 197 197 150 150 150 58 58 58 0 0 0 250 250 250 207 207 207 232 232 232 135 135 135 116 116 116 180 180 180 169 169 169 255 255 255 201 201 201 255 255 255 255 255 255 255 255 255 234 234 234 199 199 199 255 255 255 240 240 240 224 224 224 185 185 185 255 255 255 255 255 255 255 255 255 253 253 253 224 224 224 255 255 255 234 234 234 230 230 230 187 187 187 142 142 142 179 179 179 255 255 255 255 255 255 255 255 255 251 251 251 226 226 226 255 255 255 220 220 220 224 224 224 180 180 180 159 159 159 255 255 255 161 161 161 255 255 255 179 179 179 255 255 255 255 255 255 255 255 255 230 230 230 249 249 249 207 207 207 210 210 210 255 255 255 103 103 103 184 184 184 244 244 244 255 255 255 255 255 255 250 250 250 216 216 216 213 213 213 187 187 187 201 201 201 193 193 193 255 255 255 187 187 187 212 212 212 227 227 227 226 226 226 208 208 208 183 183 183 183 183 183 184 184 184 192 192 192 203 203 203 194 194 194 217 217 217 201 201 201 182 182 182 173 173 173 178 178 178 201 201 201 189 189 189 235 235 235 255 255 255 124 124 124 189 189 189 204 204 204 203 203 203 199 199 199 188 188 188 226 226 226 255 255 255 130 130 130 255 255 255 194 194 194 182 182 182 198 198 198]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@M.A_(E> O<@?0G? _>C?<_?)_>!!?8O?0/=BOD@@@b') ; yourself); yourself]
+!
+
+bugRed16x16Icon
+    "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 bugRed16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#bugRed16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class bugRed16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@JN0A9]0@]PP@@@@@@@@@!!@F\BAB$A!! @!!@@@@@@@@F 6IRRP$[S=UF @@@@@@@DHCPC^EN6.HRH(@@@@@@@A&WP$UZW)+
+EG4K@@@@@@@@W&VKLR0%KS4X 0@@@@@@@G<0G(0[E''Y_FQL@@@@@@E!!>UELL!!41QNC1,MX4@@E(_M&QRGGQKXAH9@F)Z@@AC@E-"TFLW F9FWBX@P0@@L AJ
+ R]/VU]EH!!EM@CH@@@@*BHI0Q3LN_C((K"(@@@BNU @G\PVD\$8F]PAV# @@ZG,@@B=!!S4<+^@@@^6 @@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[165 43 7 6 6 6 10 10 10 18 6 2 18 18 18 171 89 52 167 60 24 184 100 74 173 141 131 188 163 150 187 187 187 213 158 142 254 157 105 214 207 206 153 55 4 237 237 237 245 245 245 165 76 37 181 80 27 169 50 15 145 132 125 143 140 139 192 108 62 220 91 21 188 114 80 193 127 92 163 163 163 212 140 101 253 132 65 197 197 197 253 159 107 212 212 212 230 230 230 108 108 108 160 78 34 254 254 254 1 1 1 169 104 68 172 61 26 198 90 33 168 58 20 20 20 21 153 153 153 175 71 38 196 132 98 230 118 58 192 159 151 212 158 142 248 159 112 253 172 130 228 228 228 162 59 4 243 243 243 125 125 125 164 42 5 133 133 133 192 90 35 177 108 72 171 101 64 149 149 149 188 122 87 205 115 67 254 253 253 47 29 23 57 52 50 194 194 194 201 196 196 81 81 81 227 227 227 164 58 0 165 66 14 176 78 26 0 0 0 4 4 4 164 73 45 202 89 27 195 100 49 176 88 60 170 89 52 166 43 6 234 92 17 240 107 36 253 124 53 253 144 84 252 152 100 208 200 199 98 98 98 163 57 0 112 112 112 186 65 0 127 127 127 166 53 18 171 97 60 178 84 46 177 72 39 202 101 47 219 95 28 173 67 35 209 110 60 249 100 19 237 131 75 240 144 95 216 161 145 206 206 206 225 225 225 106 106 106 240 240 240 118 118 118 165 42 4 3 3 3 189 75 14 202 71 0 185 106 63 168 60 23 173 105 68 254 252 252 218 110 51 193 111 85 248 116 44 191 191 191 216 165 148 205 205 205 91 91 91 102 102 102 156 72 26 147 66 37 164 40 3 168 49 12 191 78 17 182 83 38 166 55 18 178 73 42 174 105 68 155 155 155 159 159 159 214 128 81 48 44 43 71 46 36 199 194 194 253 165 117 254 177 137 231 231 231 238 238 238]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@M,A_(G? _>A?8G? _>C?>_?9_>%?:O?1/=&_&@@@b') ; yourself); yourself]
+!
+
+bugYellow16x16Icon
+    "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 bugYellow16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#bugYellow16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class bugYellow16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@JN0A9]0@]PP@@@@@@@@@!!@F\BAB$A!! @!!@@@@@@@@F 6IRRP$[S=UF @@@@@@@DHCPC^EN6.HRH(@@@@@@@A&WP$UZW)+
+EG4K@@@@@@@@W&VKLR0%KS4X 0@@@@@@@G<0G(0[E''Y_FQL@@@@@@E!!>UELL!!41QNC1,MX4@@E(_M&QRGGQKXAH9@F)Z@@AC@E-"TFLW F9FWBX@P0@@L AJ
+ R]/VU]EH!!EM@CH@@@@*BHI0Q3LN_C((K"(@@@BNU @G\PVD\$8F]PAV# @@ZG,@@B=!!S4<+^@@@^6 @@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[165 154 7 6 6 6 10 10 10 18 17 2 18 18 18 170 171 52 167 160 24 184 177 74 173 170 131 186 188 150 187 187 187 213 208 142 247 254 105 214 213 206 147 153 4 237 237 237 245 245 245 164 165 37 174 181 27 169 158 15 144 145 125 143 143 139 185 192 62 210 220 21 186 188 80 188 193 92 163 163 163 206 212 101 242 253 65 197 197 197 245 253 107 212 212 212 230 230 230 108 108 108 154 160 34 254 254 254 1 1 1 163 169 68 172 163 26 190 198 33 168 162 20 21 20 21 153 153 153 175 167 38 191 196 98 222 230 58 192 188 151 212 207 142 242 248 112 248 253 130 228 228 228 154 162 4 243 243 243 125 125 125 164 153 5 133 133 133 184 192 35 172 177 72 166 171 64 149 149 149 183 188 87 198 205 67 254 254 253 47 46 23 57 57 50 194 194 194 201 199 196 81 81 81 227 227 227 155 164 0 158 165 14 169 176 26 0 0 0 4 4 4 164 156 45 192 202 27 188 195 49 176 169 60 168 170 52 166 155 6 224 234 17 230 240 36 242 253 53 244 253 84 246 252 100 208 206 199 98 98 98 155 163 0 112 112 112 177 186 0 127 127 127 166 157 18 167 171 60 178 176 46 177 169 39 194 202 47 209 219 28 173 164 35 204 209 60 237 249 19 230 237 75 234 240 95 216 211 145 206 206 206 225 225 225 106 106 106 240 240 240 118 118 118 165 155 4 3 3 3 180 189 14 192 202 0 179 185 63 168 161 23 167 173 68 254 253 252 209 218 51 193 187 85 237 248 44 191 191 191 216 213 148 205 205 205 91 91 91 102 102 102 149 156 26 147 143 37 164 153 3 168 158 12 182 191 17 180 182 38 166 159 18 178 168 42 169 174 68 155 155 155 159 159 159 207 214 81 48 47 43 71 70 36 199 197 194 246 253 117 249 254 137 231 231 231 238 238 238]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@M,A_(G? _>A?8G? _>C?>_?9_>%?:O?1/=&_&@@@b') ; yourself); yourself]
+!
+
+centerAdjust16x16Icon
+    "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 centerAdjust16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#centerAdjust16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class centerAdjust16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@AUUUUPP@@@DEUUUUAU@@UPUUUUTD@@@AAUUUUPUP@ETEUUUUA@@@@PUUUUTET@AUAUUUUPUUUUT@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+??????????????????????????????????????????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+colorHistory16x16Icon
+    "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 colorHistory16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#colorHistory16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class colorHistory16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@EUUUUT@@@@@UUUUUP@@@@AUUUUU@@@@@EUUUUTB@@@@UUUUUPH@@@@@@@@@@ @@@@@"H"H"@0@@@BH"H"HC@@@@@@@@@@L@@@@@L3L3L0P@@@
+@3L3L3A@@@@@@@@@@D@@@@@DQDQDP@@@@@QDQDQ@@@@@@@@@@@@b') ; colorMapFromArray:#[1 104 205 255 255 255 255 0 0 0 255 0 0 0 255 255 255 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?<C?0O?@??C?<O?0??0??C?<O?<O?0??C?<C?0O?@?<b') ; yourself); yourself]
+!
+
+configure16x16Icon
+    "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 configure16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#configure16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class configure16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@DH3\@@@@@@@ARH5\@@@@@@@ARM0@@@A\@DPH3\@@@D3LBH3M0@@@!!D3L3L3\@A!!H!!D3L3L7\@T1H"I1D3L7@@T5U2H!!D3L@@@A5UWH!!D0@@
+@@@@L7H!!@@@@@@@@L7H@@@@@@@@@L0@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 88 88 88 220 220 220 128 128 128 195 195 195 48 48 48 160 160 160]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G8@_8@?09?C?>O?8??;?????_?<_?0O?@C<@C0@C@@@b') ; yourself); yourself]
+!
+
+copy16x16Icon
+    "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 copy16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#copy16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class copy16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@* @@@J( @@BBEUP@*)*%@H@Z)$B*&BUP A**$J*X@I@@F**P@A @$@@Z*)@@EUUP@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 0 128 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@C<@O8@?0C?<O?8??3??/?>??;?? O>@?8C? @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+cut16x16Icon
+    "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 cut16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#cut16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class cut16x16Icon'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@E@@W@GR@%HBT IL@X@@@@b') ; colorMapFromArray:#[0 0 0 0 0 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@BH@H @"@CX@E@@\@@ @G@@W@GR@%HBT IL@X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+cut16x16Icon2
+    "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 cut16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#cut16x16Icon2
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class cut16x16Icon2'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@EUP@@A*%@@@Z)$@@FBUP@A**$@@X@I@@F**P@A @$@@Z*)@@EUUP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 0 128 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@C<@O9D?4S?1O?,?:#?.O>P?;#?+ C)@R$AJPD&@L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+delete16x16Icon
+    "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 delete16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#delete16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class delete16x16Icon'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@0@'' LOA N\@_ @<@C0@_@C&@\LC P^@ 0@@@D@@@b') ; colorMapFromArray:#[255 255 255 65 65 65]; yourself]
+!
+
+desktop16x16Icon
+    <resource: #programImage>
+
+    ^self desktop16x16Icon2
+!
+
+desktop16x16Icon2
+    "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 desktop16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#desktop16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class desktop16x16Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@BL#H2L#_!!HSW@LDJB]J@%,#EF<9 %:CW44;JPY S&E-H1Q@]5L.T%EPA8U4X  =_2NAPP)%"A0?]R0I!!2<]F D#WP-6"W!!&UDH0
+G 19CX(AH55#KV]UP3D_"7(NU3M(@RM]J39$U$P2HH1E_CQY^0D#WQ^D!!&$!!C85*VAAGDTXAH54YRBH[# >MZ''4PQ1E+@RL5RBTUH$=OS4=OS4=OS0D#OBH:
+J''H@@@@@@@@@@@@AH3Y1\!!YKV%)ZV%)ZV%)Z@V0$RX@&\D0ENF87_0DA@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[53 53 53 165 184 209 191 203 219 217 221 225 225 228 230 222 226 231 59 101 158 67 116 189 82 134 196 72 125 201 80 118 190 76 115 189 82 141 218 93 152 223 87 149 230 56 122 226 91 156 241 103 168 246 176 189 203 189 200 211 8 51 135 118 198 49 16 82 167 41 81 155 255 255 255 107 153 185 99 137 181 102 158 195 71 118 197 87 142 207 77 136 216 60 122 218 62 126 225 47 112 220 52 136 255 163 179 196 173 187 202 247 62 14 214 219 224 220 224 230 227 229 232 56 98 156 255 218 89 58 102 183 64 118 197 62 107 191 83 123 191 82 137 205 64 123 210 58 119 216 55 120 222 97 160 234 95 159 239 149 151 153 58 58 58 179 195 214 210 218 226 14 57 138 24 178 255 46 89 152 117 120 123 95 132 173 52 100 190 67 118 197 81 118 187 82 118 188 61 119 208 57 116 213 52 113 217 84 148 234 111 155 206 97 162 243 114 178 250 186 198 209 207 215 226 41 142 195 227 230 232 41 84 150 68 109 161 132 133 133 70 117 189 74 119 191 79 120 191 86 125 192 63 118 208 59 114 206 52 111 210 92 154 232 85 150 238 101 165 242 55 55 55 176 193 214 204 211 218 8 52 137 27 70 143 37 80 149 63 105 160 89 125 167 77 129 193 68 109 186 53 106 201 79 120 194 65 117 205 62 112 200 107 149 198 45 106 211 71 137 232 111 155 207 164 180 197 171 189 212 194 206 221 11 55 137 224 227 229 60 124 168 33 110 194 0 0 0 72 123 192 65 117 197 71 113 191 84 121 190 68 116 201 88 147 220 81 143 227 110 154 204 90 154 237 84 150 238 165 181 198 167 186 210 201 209 217 8 51 136 22 66 143 32 75 147 36 80 161 71 121 190 45 101 200 77 132 203 76 120 196 71 116 198 104 144 191 68 131 221 70 135 228 63 129 229 48 112 220]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C??????????????????????????????????0@@@@@b') ; yourself); yourself]
+!
+
+desktopOSX16x16Icon
+    "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 desktopOSX16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#desktopOSX16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary desktopOSX16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width:16; height:16; bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@A)4\ =G60\QZ@@@R!!+G \4Z8:KP4MB(*JP>N#*"(&4=YK<RL0:^ EQEPLV^$D8#HM]]- &<$''3A06JF!!L;O%<V \8>B^-=S$6H7
+Q%]LV-R36@H\&MM=0JW -YD-E8T^Z-T5,TRT!!>\''X2HE2AU)9*D)P#DJ4X/DTM&,]\H,"Q!!K&]:>7#0T''149N@4^+%&*9KI0*5Y\M"#^6#/KK2EI:NSJBH2;
+3G$+[&=,VEV&+YU^J''\3/P02*V,%XX98AEEB,K#"_;($IB9HR@NH"MYR1>D4Y;PK Z_\1!!BVP[%CW444@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[95 79 95 239 239 255 79 64 128 207 207 223 208 192 240 223 143 208 223 208 224 111 80 111 160 112 176 79 47 96 112 95 144 64 48 80 176 192 224 192 127 176 96 48 96 112 95 127 79 79 80 111 79 111 95 64 111 240 224 255 128 95 160 192 112 207 176 191 191 191 96 191 95 63 128 175 175 175 95 79 96 175 175 176 79 63 127 208 160 224 176 111 176 207 207 208 96 64 96 112 80 143 224 176 224 112 64 111 223 223 255 95 111 144 224 223 240 224 175 224 112 80 160 63 48 96 63 32 64 95 96 160 176 111 191 239 143 224 208 208 240 144 96 144 223 224 224 111 80 144 111 128 175 80 48 96 16 15 31 96 95 144 127 111 175 224 191 223 175 112 176 223 175 240 192 160 191 143 96 160 128 96 175 80 64 95 207 175 207 176 176 176 96 63 95 64 64 80 95 79 128 47 47 48 95 79 143 95 47 80 239 160 224 111 95 111 224 224 255 79 63 128 96 80 96 48 31 80 208 112 208 31 16 31 96 47 96 224 239 240 224 176 240 48 32 80 192 192 208 176 95 160 111 48 96 224 207 224 127 95 144 223 143 223 255 240 255 96 64 143 176 95 175 191 191 191 128 112 175 48 32 95 31 15 63 48 48 63 223 223 224 191 192 224 239 191 223 240 192 240 48 47 80 239 224 240 224 208 224 32 16 48 95 64 95 176 112 207 63 16 63 127 128 176 112 112 160 175 144 175 176 176 255 159 159 223 160 127 191 240 239 255 128 111 128 63 48 111 127 96 128 224 143 208 223 208 223 112 79 128 159 144 160 191 207 255 143 79 143 160 160 176 175 96 160 159 80 144 224 224 224 208 191 223 111 47 96 64 63 80 95 63 127 208 207 208 208 144 208 192 111 207 208 159 207 144 80 160 224 223 224 112 64 144 223 224 240 143 96 175 143 95 143 239 223 240 191 191 207 79 63 111 111 48 111 224 144 223 144 80 143 223 144 207 128 80 160 111 95 144 63 63 64 159 95 143 95 64 128 64 48 96 223 224 223 176 176 191 192 207 208 239 224 255 111 63 96 176 128 207 16 16 63 48 16 64 207 175 208 175 160 175 208 175 207 224 159 208 95 79 127 80 79 95 208 160 208 192 208 255 96 79 143 144 96 160 208 159 208 79 48 127 143 95 175 208 207 223 31 0 48 64 63 127 96 64 127 95 47 95 63 48 80 223 175 223 64 47 96 239 239 240 31 15 47 48 47 48 239 223 255 111 80 128 112 63 127 208 191 224 128 96 160 80 64 111 192 111 176 192 128 176 191 96 176 223 160 207 175 127 191 96 48 95 64 64 64 79 64 95 192 111 191 240 224 240 64 32 80 128 80 128 192 207 255 47 32 48 223 144 223 192 112 191 207 160 207 127 80 144 239 224 224 128 64 143 191 112 176 32 31 80 224 224 240 16 15 48 31 31 64 224 191 240 111 79 143 111 95 127 64 63 64 191 176 191 143 111 175 175 95 160 255 207 240 0 0 16 96 80 127 160 128 175 32 16 64 223 223 223 112 64 143 191 128 207 96 79 144]; mask:((Depth1Image new) width:16; height:16; bits:(ByteArray fromPackedString:'@@C?????????????????????????????????????@@@b') ; yourself); yourself]
+!
+
+diff16x16Icon
+    "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 diff16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#diff16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class diff16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 15; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@DA@PDA@PDA@P@@@@@@@@@A@XFA XFA XD@@@@@@@@@@PFA XF@@@@@@@@@@@@@@@DA XF@@XFA P@@@@@@@@@A@XF@@XFA XD
+@@@@@@@@@@PFA @FA XFA@@@@@@@@@@DA X@A XFA P@@@@@@@@@A@XF@@XFA XD@@@@@@@@@@PFA X@A XFA@@@@@@@@@@DA XFA @@@@@@@@@@@@@@A@XF
+A XFA XD@@@@@@@@@@PFA XFA XFA@@@@@@@@@@DA@PDA@PDA@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 129 129 129 0 0 0 194 194 194 132 132 132 198 198 198 255 255 255]; mask:((Depth1Image new) width: 16; height: 15; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A?0G?@_<A?8G?P_=A?4G?P_?A?>G?\_<9?1 @@') ; yourself); yourself]
+!
+
+diff16x16Icon2
+    "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 diff16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#diff16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class diff16x16Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@DA@PDA@PDA@P@@@@@@@@@A@XFA PFA XD@@@@@@@@@@PFA0XD@@@@@@@@@@@@@@@DA XF@@XFA P@@@@@@@@@A@XH@@PFB@XD
+@@@@@@@@@@PFA @DA XFA@@@@@@@@@@DA  @A@XHA P@@@@@@@@@A@XF@@PFA XD@@@@@@@@@@PFA0X@A  FA@@@@@@@@@@DA XFA@@@@@@@@@@@@@@@A@XH
+A PFB@XD@@@@@@@@@@PFA XDA XFA@@@@@@@@@@DA@PDA@PDA@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 129 129 129 0 0 0 194 194 194 132 132 132 198 198 198 255 255 255 248 0 0 0 252 0]; mask:((Depth1Image new) width: 16; height: 15; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A?0G?@_<A?8G?P_=A?4G?P_?A?>G?\_<9?1 @@') ; yourself); yourself]
+!
+
+doIt16x16Icon
+    "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 doIt16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#doIt16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class doIt16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@P@@@@P@@@@T@@@@W@@@@W5P@@W5P@@@EP@@@AP@@@@P@@@@P@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 248 252 128 208 220 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@H@A @N@A0@O@A?0O>A?0O>@C0@N@A0@F@@P@@@@b') ; yourself); yourself]
+!
+
+down16x16Icon
+    "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 down16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#down16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class down16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@EUUUU@@@@@@U&@CT@@@@@AVL3QP@@@@@EX3ME@@@@@@TCL4T@@@UUURL3QUUUAPH3L3L3MAT@TBL3L3MAT@@E@#L3MAT@@@APH3MAT@@@@@
+TBMAT@@@@@@EAAT@@@@@@@AQT@@@@@@@@@T@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[192 255 255 0 64 64 0 255 255 0 192 192 0 128 128 0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O8@? C>@O8@? ??;??''?<O? _<@? A<@C @D@@@@b') ; yourself); yourself]
+!
+
+edit16x16Icon
+    "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 edit16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#edit16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class edit16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 17; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@B (JB (JB (JB (@APT@@@(IBP$IA $IBP$IAPTC@@@JBP$IBPXIBP$IAPTC@0@@B XFA XFA XFAPTC@0L@@@(IBP$IA $I
+APTC@0LD@@@JBP$IBPXIAPTC@0LDB0@@B XFA XFAP C@0LD@ @@@@(IBP$I@@ H@0LD@ @@@@@JBP$IBPTHB@ HB0D@@@@@B XFA @HB@ DA@@A@@@@@@(I
+BP$GB@PDA (I@P@@@@@JBP$G@ ,FB $IBPD@@@@@B @@@P@@@@@@@@@A@@@@@@(IBP$I@@$IBP$I@P@@@@HA@PDA@PDA@PDA@PD@@@@@@@@@@@@@@@@@@@@@
+@@@b') ; colorMapFromArray:#[160 160 160 0 0 0 48 48 48 255 128 0 192 88 0 255 168 88 195 195 195 88 88 88 255 220 168 255 255 255 220 220 220 64 0 0]; mask:((Depth1Image new) width: 16; height: 17; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@?>3??O?<??3??O?<??#?<O?0??C?<O?0??C?<_?0@@@@a') ; yourself); yourself]
+!
+
+editcopy16x16Icon
+    "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 editcopy16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#editcopy16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class editcopy16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUU@@@@@@ATQDUP@@@@@EQDQRT@@@@@U@AEP%@@@@ATQDUUUUT@@EP@QCL5QU@@UDQDIBUEEPAT@@P@ITUATEQDIBH%QUUUU@A@@BUDL3UTIBH"ITQDEUUU
+UUUPA@AE@@@@UDQDQDT@@@AT@D@@QP@@@EQDQDQE@@@@UUUUUUTb') ; colorMapFromArray:#[48 48 48 220 220 220 255 255 192 160 160 160 255 255 255 0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?@C>@O<@?8C?<O?8??3??/??????????@?<C?0O?@?<b') ; yourself); yourself]
+!
+
+editcut16x16Icon
+    "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 editcut16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#editcut16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class editcut16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@4@@@@4@@@@4@@@@4@@@@4@@@@4@@@@4@@@@@$@@@@CP@@@@M@@@@@4@@@@CP@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 220 220 220 128 128 128 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A8A,0O1!!9"OC=8C?@C8@O C?@?^FH<1!!;LC7 F@@@b') ; yourself); yourself]
+!
+
+editpaste16x16Icon
+    "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 editpaste16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#editpaste16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class editpaste16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@Q@@@@@ADQDP@QDQ@AY&XPDPE&XPEFXP@@@AY!!@TY!!DQDQE&DAQ&Y!!H"HQXPEFY&D"H!!TQ@TY&XRL2D%DQQ&Y!!H"HQDQEFY&D#L"Y&DTY&XRH"IRTQQ&
+Y!!H3L#MQEFY&D"IRUUDVY&XRL2L3TPDQDQIRUUUQ@@@@DQDQDQDb') ; colorMapFromArray:#[192 192 0 0 0 0 255 255 255 48 48 48 220 220 220 255 255 192 160 160 160]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@XA??O?>??;??/?>??;??????????????????7??@?<b') ; yourself); yourself]
+!
+
+edittrash16x16Icon
+    "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 edittrash16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#edittrash16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class edittrash16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@0@@@@@@@@N@H@@@@@@QE&Y@Y(@@@C!!!!DVX"H@@@ACNH"DP@@@@H"DP"Q0@@@@ XNDP''@@@@BA 8QB\@@@@HFC!!DI0@@@@ XNDP''@@@@BA 8QB\@@@@H
+FC!!DI0@@@@ XNDP''@@@@@1 8QB\@@@@@@3"D@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 88 88 88 220 220 220 128 128 128 93 93 93 195 195 195 48 48 48 160 160 160]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A8@?>G?<_?0?>C?8O? ?>C?8O? ?>C?8O? ?>A?0A<@b') ; yourself); yourself]
+!
+
+erase16x16Icon
+    <resource: #programImage>
+
+    ^ self erase16x16Icon2
+!
+
+erase16x16Icon1
+    "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 erase16x16Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#erase16x16Icon1
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class erase16x16Icon1'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@8@#0LG!! GL@O @\@C8@\0C!! \BC0DN@@P@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+erase16x16Icon2
+    "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 erase16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#erase16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class erase16x16Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@@@@3@@@C@@@@@0@3@C@A@@@@@ @0@A@@@@@@H@@A@@@@@@@C@C@@@@@@@C@@L@@@@@@C@PHC@@@@@@LP@B@@@@@@
+L@@@@ @@@@@1@@@@@@@@@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[192 0 0 64 0 0 128 0 0 255 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@HCA0_O@_8@?@A8@O A7@FL@0XC@ H@@@@@@@b') ; yourself); yourself]
+!
+
+exec16x16Icon
+    "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 exec16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#exec16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class exec16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@A7@@@@@@A7A9%0]0@@A9A0Q@\I\@@GBR@3@)A0@@A2L8NCI0@@]9@8H# I]0^T@8L@"#AI]2BR"(!!ZJPI0\Q$()XJQE0@GII$"&TI0@GARD)$!!IP\@^P
+E7@G\P%0@G]0^U\G]0@@@@A1I0@@@@@@@@]0@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[160 160 160 88 88 88 128 128 128 255 168 88 195 195 195 255 255 255 93 93 93 0 0 0 255 220 168 220 220 220 255 255 192]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@X@[6C?<O?0_>G?>?''???7?>O?1??''?>N=0C0@F@@@@b') ; yourself); yourself]
+!
+
+exit16x16Icon
+    "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 exit16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#exit16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class exit16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@QDQ@@@@@@DRH"H"@@@@@RH H"H@@@@RH"@"H%@@@AH"HBH"T@@@D"H H"IP@@@RH"@"H%@@@AH"HBH"T@@@@"H H"TC@@@B
+H"H"UP@@@@@EUUT@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 220 220 220 128 128 128 93 93 93 160 160 160]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@G0A?0O? ?>G?<_?1??G?<_?0??C?8G?@G0@@@@@@b') ; yourself); yourself]
+!
+
+fileNew16x16Icon
+    "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 fileNew16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileNew16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileNew16x16Icon'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' @F@@X@A#<FO4X?A#?&O>X?9#?&O>X?9#?&O>X@A0@Db') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@A? G?@_>A?<G?0_?A?<G?0_?A?<G?0_?A?<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fileOpen16x16Icon
+    "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 fileOpen16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileOpen16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileOpen16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'0@@@@0@@@@@@@@@@@@@@@@@@@@@]@@@@M7]0@A7]4@@7P@@@GR**(CR**(@R**(@B**(@@@@@@@@@@@@<@@@@0@a') ; colorMapFromArray:#[0 0 0 255 255 0 128 128 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@\@BJ@@Y0C/? ?>C?8O????;??O?8??C?8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fileSave16x16Icon
+    "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 fileSave16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileSave16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileSave16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'0@@@@0@@@@@D**( AJ**@@R**!!@D**(PAJ**D@R**!!@E@@APAUUUT@T@@A@E@@(PAP@JD@T@B!!@@@@@@@@@@@0@a') ; colorMapFromArray:#[0 0 0 128 128 0 212 208 200 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@A??''?>_?9??''?>_?9??''?>_?9??''?>_?9??#?>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fileclose16x16Icon
+    "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 fileclose16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileclose16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileclose16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"@@H @@@@@BH H"@@@@@@@"H"@@@@@@@@H"@@@@@@@@H"H @@@@@@H"@"H@@@@@
+@"@@H @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 93 93 93 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@O C? _?A?<O?8??#?>O?8??!!?<G?0O>@O @@@b') ; yourself); yourself]
+!
+
+filter16x16Icon
+    "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 filter16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#filter16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary filter16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+H1$YFQ$YFR$YFQ$DLA$DD"D:C 8NC 8NK@8NC 8NKA,@MP$^J2XH@R<CEQXVIPH@@@@5GA8"@A@LER4VKS\@@@@@@CTZG!!  CCHWIP,@@@@@@@@@F10*D0XV
+KS\@@@@@@@@@@@@_BR<LC0,@@@@@@@@@@@@@@CXAHB$@@@@@@@@@@@@@@@@6@R@6@@@@@@@@@@@@@@@@M#P DP@@@@@@@@@@@@@@@CXAD2$@@@@@@@@@@@@@
+@@@.M@L8@@@@@@@@@@@@@@@@MR\ JP@@@@@@@@@@@@@@@@@5JC @@@@@@@@@@@@@@@@@@@H1@@@@@@@@@@@@@@@@@@@@B @@@@@@@@@a') ; colorMapFromArray:#[255 240 0 240 224 20 112 80 20 255 192 0 144 96 20 240 240 220 255 176 30 255 240 255 255 240 20 240 240 50 112 80 30 112 64 20 255 192 20 240 224 220 255 255 255 255 176 60 255 224 0 160 112 0 128 96 30 255 208 20 240 240 210 255 176 20 255 160 30 255 176 50 255 255 30 144 96 0 240 240 60 96 80 50 240 240 80 240 224 210 255 240 100 80 80 30 255 208 0 80 80 60 255 240 50 128 112 60 240 255 240 240 176 50 255 255 20 240 224 30 224 192 20 160 96 0 255 240 60 255 240 80 255 255 240 255 160 50 144 128 20 240 208 20 144 80 0 128 80 20 240 176 30 240 255 255 240 224 0 96 80 20 144 112 20 128 64 0 160 112 20 224 224 220 240 240 240]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?????7?>O?0_>@?0A>@C0@O@@<@C0@O@@<@A0@C@@D@b') ; yourself); yourself]
+!
+
+filterBlue16x16Icon
+    "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 filterBlue16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#filterBlue16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary filterBlue16x16Icon'
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GDQDQDQD@@@B:Y&Y&X@@@@@P)&Y$@@@@@@LL"H@@@@@@@CFL@@@@@@@@AQ @@@@@@@@]]@@@@@@@@A;P@@@@@@@
+@H/@@@@@@@@@ U@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 52 70 80 100 136 150 96 130 150 80 110 130 64 98 120 92 124 140 40 52 60 32 42 50 112 148 170 88 118 130 64 88 100 76 102 120 80 116 130]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@O? _<@? A<@C @N@@8@C @N@@8@@@@@@@@@b') ; yourself); yourself]
+!
+
+finish16x16Icon
+    "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 finish16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#finish16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class finish16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@AD@@@@@@@@@DY@@@AD@@@@P6P@@DP@@@ABM$@@Q@QDQDH#Y@ADAEUVL"H6PDPDT"H"H"M$Q@Q"H"H"H!!ADAFH"H"H!!ADPDHQDRH!!A@Q@QD
+QDH!!A@AD@@@@P!!A@@DP@@@AAA@@@Q@@@@DA@@@AD@@@@Q@@@@@@b') ; colorMapFromArray:#[0 64 64 0 128 128 0 192 192 0 255 255 0 0 0 255 255 255 192 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@NC@<LC87?3_?-??7??_?=?>7?3@>LC00NC@0@b') ; yourself); yourself]
+!
+
+flagRed16x16Icon
+    "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 flagRed16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#flagRed16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class flagRed16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@F@@@@@@@@@FY @@@@@@@FA&@@@@@@Y&APY @@@FXEUPI&@@@@YUUSIBY @@A%T3IBI&@@@@X4QBI&Y @@A$QBI A&@@@@YBY @@Y @@@F
+X@@@A&@@@@@@@@@@Y @@@@@@@@A&@@@@@@@@@@Y @@@@@@@@A&@b') ; colorMapFromArray:#[195 195 195 93 93 93 192 0 0 255 192 192 255 0 0 255 255 255 0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A@@N@A8@?0O?@?>C?8G?0_3@>FA X@@0@C@@F@@Xb') ; yourself); yourself]
+!
+
+formatCode16x16Icon
+    "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 formatCode16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#formatCode16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class formatCode16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@AUUUUPP@@UTEUUUUAP@AUPUUUUTE@@AUAUUUUPUU@ATEUUUUAUT@EPUUUUTE@@@UAUUUUPUUUUT@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+??????????????????????????????????????????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+forward16x16Icon
+    "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 forward16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#forward16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class forward16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@BH@@@@@@@@@IB@@@@@@@@@!!P @@@@@@@B@TH@@@@"H"H@EB@@@BL3PP@AP @@H0@@@@@TH@@$@@@@@@YR@BP@@@@@YR@@HFY&@@YR@@@"
+H"H@YR@@@@@@@ YR@@@@@@@BYR@@@@@@@@IR@@@@@@@@@"@@@@@b') ; colorMapFromArray:#[0 192 192 0 255 255 0 0 0 255 255 255 192 255 255 0 64 64 0 128 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A @G@@^@A<C?8O?0??#??O?8??C?8@_@A8@G@@X@b') ; yourself); yourself]
+!
+
+functionsOnly16x16Icon
+    "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 functionsOnly16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#functionsOnly16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class functionsOnly16x16Icon'
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+QDQDQDQDQDQDQDQDQDQDQDQEITQDQDQDQEA@UDQDQDQDMDQEETEQUDPTQEADQDDEQAQDEDEDEAEADQPTQAEDDTPTQAQDDTPQQAQDEDEDEAEDEDQPQDQAATPT
+QDTUPUETQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDPb') ; colorMapFromArray:#[63 63 95 0 0 0 3 0 2 0 1 0 159 191 191 191 191 191]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@A0@M @!!3"LCH$%:LRH1H$$#@2GN@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+goto16x16Icon
+    "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 goto16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#goto16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class goto16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@E@@@@TD@@@PD@@@PA@@@DA@@@@U@@@E@@@@DD@D@@T@TP@@@PD@@@PD@@@DA@@@AA@@@DE@@@DP@@@AT@@@@a') ; colorMapFromArray:#[64 0 0 0 0 0 0 192 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@C@@>@G0@?@C8@G@C@@^B@0<@G0@>@C8@O@BX@\@A0@b') ; yourself); yourself]
+!
+
+grid16x16Icon
+    "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 grid16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#grid16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class grid16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+H"H"H"H"H"H)$)$)$)$)$"&R&R&R&R&RH"H"H"H"H"H)$)$)$)$)$"&R&R&R&R&RH"H"H"H"H"H)$)$)$)$)$"&R&R&R&R&RH"H"H"H"H"H)$)$)$)$)$"&R
+&R&R&R&RH"H"H"H"H"H)$)$)$)$)$"&R&R&R&R&RH"H"H"H"H"Hb') ; colorMapFromArray:#[32 12 48 32 56 216 248 184 112 40 36 32 32 48 92 40 12 8 8 0 144 24 60 216 88 36 120 248 248 248]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????????????????????????????????????<b') ; yourself); yourself]
+!
+
+gridAlign16x16Icon
+    "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 gridAlign16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#gridAlign16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class gridAlign16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+H"H"H"H"H"H)$)$)$)$)$"&R&R&R&R&RH"H"H"H"H"H)$)$)$)$)\"&R&R&R&RFBH"H"H"H"\KH)$)$)$)]J$"&WFR&R^K&RH"]GH"]+H"H)$*!!9\C$)$"&R
+&$]E&R&RH"H"U@H"H"H)$)$#$)$)$"&R&R&R&R&RH"H"H"H"H"Hb') ; colorMapFromArray:#[32 12 48 32 56 216 248 184 112 40 36 32 32 48 92 40 12 8 8 0 144 24 60 216 88 36 120 248 248 248 32 40 32 32 16 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????????????????????????????????????<b') ; yourself); yourself]
+!
+
+history16x16Icon
+    "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 history16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#history16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class history16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@ADQDQD@@@@@DQDQDP@@@@@QDQDQ@@@@@ADQDQDA@@@@DQDQDPD@@@@@@@@@@P@@@@@QDQDQ@P@@@ADQDQDA@@@@@@@@@@D@@@@@DQDQDPD@@@
+@QDQDQ@P@@@@@@@@@A@@@@@ADQDQD@@@@@DQDQDP@@@@@@@@@@@b') ; colorMapFromArray:#[1 104 205 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?<C?0O?@??C?<O?0??0??C?<O?<O?0??C?<C?0O?@?<b') ; yourself); yourself]
+!
+
+idea16x16Icon
+    "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 idea16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#idea16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class idea16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@BH"H@@@@@@BAUTB@@@@@BA*V @ @@@BAZU%)PH@@@HJUVV*@ @@@ )VQ%(B@@@BA&I T@H@@@@ T H@H@@@@@H@H@H@@@@@@*@ ( @@@@@@HB@ @@@@@@
+@"L"@@@@@@@BNXH@@@@@@@JI\ @@@@@@@!! R@@@@@@@@H"@@@@@b') ; colorMapFromArray:#[255 255 0 48 48 48 0 0 0 220 220 220 255 255 255 255 220 168 255 255 192 160 160 160 88 88 88 128 128 128 255 168 88]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A<@O8A?0O? ?>C?8O? _<@? C>@G0@_@A<@G0@_@@8@b') ; yourself); yourself]
+!
+
+indent16x16Icon
+    <resource:#programImage>
+    ^ self indent16x16Icon1
+
+    "Modified: / 06-04-2011 / 18:37:52 / cg"
+!
+
+indent16x16Icon1
+    "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 indent16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#indent16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class indent16x16Icon1'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@0LC@0LC@0LC@0LC@0LC@0LC@@@@@@@@@@@@@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0L@@@@@@@@@@@@C@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0HC@0LC@@@@
+@@@@@@@@@0LB@ LC@0@@@@@@@@@@@@HB@ HB@0LC@0LC@0LC@0LC@0HB@0LC@@@@@@@@@@@@@0LB@0LC@0@@@@@@@@@@@@LC@0LC@0LC@0LC@0LC@0LC@0@@
+@@@@@@@@@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@@@@@@@@@@@C@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0@a') ; colorMapFromArray:#[0 0 0 220 226 243 0 0 128 0 0 0]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@?8@@@O>@@@BG?L_?8@CG?H_<@@C?@@@@?0@@@@@@b') ; yourself); yourself]
+
+    "Created: / 06-04-2011 / 18:37:36 / cg"
+!
+
+indent16x16Icon2
+    "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 indent16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#indent16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary indent16x16Icon2'
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H@@"H"H@@@@@@BHRH"H"H"@@H!!D"@@@@@@DQDQH"H"H @BHQH @@@@@@H!!H"H"H"H@@"
+H"H@@@@@@BH"H"H"H"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 34 110 181 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@O?8??#?>O?8??''?>O?8??#?>O?8?? @@@@@b') ; yourself); yourself]
+!
+
+leftAdjust16x16Icon
+    "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 leftAdjust16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#leftAdjust16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class leftAdjust16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@AUUUUPP@@@DEUUUUA@@AUPUUUUTD@@@AAUUUUPP@@UTEUUUUA@@@@PUUUUTD@@EUAUUUUPUUUUT@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+??????????????????????????????????????????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+leftDown16x16Icon
+    "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 leftDown16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#leftDown16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class leftDown16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@EUUUUUUT@@@T@@@@@AP@@APL3L3L5@@@E@3MDQDT@@@TCL4UUUP@@ARL3QP@@@@@EL3ME@@@@UUT3L3UUT@@E@#L3MAT@@@APH3MAT@@@@@
+TBMAT@@@@@@EAAT@@@@@@@AQT@@@@@@@@@T@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[192 255 255 0 64 64 0 255 255 0 192 192 0 128 128 0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O? ?>C?8O? ?>C>@O8G?<O? _<@? A<@C @D@@@@b') ; yourself); yourself]
+!
+
+lock16x16Icon
+    "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 lock16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#lock16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class lock16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@]7\@@@@@@@\Z*(@@@@@@]''"G)0@@@@A: @_H@@@@@G2@A< @@@@@]5@G1P@@@@^H!!RJH @@@\3)&E$M5@@A3@DP4L7T@@HN0QDL3]P@@!!+DVZ*)5@@BF
+,QY&*''T@@E*1E&**]P@@U+DVZ*M5@@AS@DP4L7T@@@VBJH"XT@@b') ; colorMapFromArray:#[255 220 168 220 220 220 64 64 0 128 128 0 192 192 0 0 0 0 195 195 195 88 88 88 48 48 48 64 0 0 160 160 160 255 255 255 128 128 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@<@G8@?0C''@N\@90G? ??C?<O?0??C?<O?0??C?<G? b') ; yourself); yourself]
+!
+
+palette16x16Icon
+    "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 palette16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#palette16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class palette16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C 8NC 8NA XFA XNC 8NC 8HC 8FA0$IBP$IA08NC 8NC XGBP$IB04MBP$FC 8NC 8FBP$IBP,MCP$IA08NC 8FBPHA@P$IBP$IBP\NC 8FBP$AA@TIBP$I
+BPX@C 8NA $IBP$HBP$IBP\NC 8NC XI@0@@BP$IBP$IA XNC 8FBP@@@@$IBP$IBP$IA0X@A $IBP$IBP$IA0 HA0$IA XIBP$LC@0IBP @@@ IBPXFBP$I
+C@0LBP$HC 8HBP$FC XIBP(LB $IA0 HA $IA08NA $IBP$IBP$IBP$IBPXNC 8GBP$IBP$IBP$IA XHC 8NC \FA XFA XFA0 HC @a') ; colorMapFromArray:#[0 152 0 15 48 248 16 48 240 32 104 0 48 48 168 79 48 120 143 96 56 160 112 0 170 140 140 172 140 108 239 232 128 240 8 0 240 200 56 255 8 0 255 248 248]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@>@O<C?8O?!!?>O?0?>C?>O?>????3??O_?<??1?>C? b') ; yourself); yourself]
+!
+
+paste16x16Icon
+    "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 paste16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#paste16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class paste16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@FX@@@@@AWTF@FA5\@@G\CL3L0]P@@U0@@@@A7@@A5]WU5]WT@@E]WV**** @@]WU:DQDZ(@AWU5(QDQ(Z@GU5^!!@@F** U5
+]ZDQDQDZA5]W(P@@@A(@@@B!!DQDQF @@@J******@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 0 212 208 200 255 255 255 128 128 0 255 255 0 128 128 128 0 255 255 0 0 255 0 0 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@G G?8??3??O?<??3??O?<??;???????=??0O?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+pipette16x16Icon
+    "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 pipette16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#pipette16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class pipette16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+FQ$[F18^G!!8^G!!8^J"(^G!!\YF1,[G!!8^G!!8^IR (C!!$WFQ([F18^G!!8^IR$*J"TYE1\YF!!,[G!!8YIR *J"$SFQ\WFQ([F1,[IR *J"$TFQ$WE1\YF!!,YFR $
+J" JFQ$YE1\WFQ$YFQ@]JAHCFQ$YFQXWE1\WE1T#I \LFQ$YFQ$UE!!\WE1X&I $YFQ$YFQ$YEQXVFQD&H  YFQ$YFQ$YFQTUEQD&HPPYFQ$YFQ$YFQ,UEQ@''
+H@HYFQ$YFQ$YFQ([FP<&G0DYFQ$YFQ$YFQ$YFP4!!G@@YFQ$YFQ$YE1$WFQ$XBPTYFQ$YFQ$YE1$YE1\WB0XYFQ$YFQ$YFQ$YE1\WE0@a') ; colorMapFromArray:#[48 48 50 48 48 60 64 72 80 80 8 20 80 88 100 88 72 60 96 72 60 96 104 120 96 104 130 112 120 140 120 24 20 120 88 70 128 24 20 128 96 70 136 40 40 136 96 70 136 96 80 136 104 80 144 24 20 144 32 40 144 40 40 144 104 80 144 104 90 144 112 90 144 120 110 152 112 90 152 112 100 152 120 100 152 160 190 160 160 180 168 136 110 168 184 220 176 192 220 184 200 230 192 216 240 200 216 230 208 48 50 208 56 60 216 240 240 224 240 240 240 64 70 240 88 100 240 136 140]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@0@G @>@G8@?@C8@_@C8@^@C0@^@C0@^@C0@N@@0@@b') ; yourself); yourself]
+!
+
+printIt16x16Icon
+    "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 printIt16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#printIt16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class printIt16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@A XFA XFA X@@@@@@@@@@@XEAPTEAPT@@@@@@@@@@@@FAPTEAPT@@P@@@@@@@@@DA TEAPT@@P@@@@@DA@@@A@XEAPT@@PD@
+APT@A@P@@@PFAPT@@PDC@@@@@@@D@@@DA T@@PDC@0DA@P@DA@@@A@X@@PDC@0DA@P@@A@P@@@P@@@@@@@DA@P@G@@PD@@@DA TEAP@A@P@GA0@DA@@@A@XE
+AP@@@P@GA0\@A@P@@@PFAP\@@P@GA0\G@@PD@@@@A \G@@@GA0\GA0@@@@@@@@XFA @FA XFA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 248 252 128 208 220 0 255 255 255 0 255 0 248 252 248 64 64 64 168 228 240]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@?8C? O?@?>C?8O?0?>C?8O? ?>C?8O? ?>C?8@@@b') ; yourself); yourself]
+!
+
+redo16x16Icon
+    "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 redo16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#redo16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class redo16x16Icon'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@O@ACDHB0 GB@<DG0P@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@O@ACDHB0 GB@<DG0P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+redo16x16Icon2
+    "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 redo16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#redo16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class redo16x16Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@L3L@@@@@@CL@@CL@@@@C@@@@@C@@LC@!!L2@@@0H0LSL@L2@@L#LC@@@@L @BL3L@@@@C@@H3L0@@@@L@@#L3@@@@H"H"LCL@@@L3L3L0L3
+@@@@@@@@@CL0@@@@@@@@@3L0@@@@@@@@@3L@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 192 0 0 64 0 0 128 0 0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@G A? O?E?>7''?8G? O>@?8G= ?7@@N@@^@@\@@@@b') ; yourself); yourself]
+!
+
+reload16x16Icon
+    "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 reload16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#reload16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class reload16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@ARH@L@@@@@T"P@@@@@@@@"P@@@@@@@ARP@@@@@@@@BI@@@@@@@AUH"I@@@@@@@T"I@@@@@@@@EI@@@@@@@@@A@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 0 192 0 0 64 0 0 128 0 0 255 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@>@O>A>\G0P>@#8@?9!!?OC9>GO<HOD@<HG 9>A?0A<@b') ; yourself); yourself]
+!
+
+repositoryCVSIcon
+    "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 repositoryCVSIcon inspect
+     ImageEditor openOnClass:self andSelector:#repositoryCVSIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class repositoryCVSIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$\I2X%J20\NS$9NS$9NS$WHA8LDAX[JA\9NS$9NS$9H2D]CA@VF2 7NS$9NS$9NSL*F@,SF"P6MS$9NS$9NS$2G1HLDAX[JCT9NS$9NS$9LQ<RC@<UF2 4
+NS$9NS$9NR8_DP4NEA,(MC$9NS$9NS$-APTEAPTEAPTEAPTEAPT9KPTA@PDA@PDA@PDA@PDENR<E@PDDA@DDB@PHA PAAS$0AP A@0$H@0$CBPLI@PT9L@TI
+@PLIBPXIA $AA DENRHEB DD@ (J@ (J@ PAAS$9AP(JB (JB (JB (JB T9NPTEAPTEAPTEAPTEAPTENS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[104 97 99 245 246 251 25 50 99 40 69 126 47 75 130 69 80 102 34 56 94 78 91 112 242 245 249 237 248 254 227 246 255 249 240 101 252 248 161 252 248 162 251 240 138 251 239 139 251 239 140 249 232 112 249 233 112 246 223 77 246 224 88 246 224 89 246 224 90 185 160 32 243 213 53 117 110 75 237 197 37 240 207 60 194 167 52 249 213 68 249 216 77 240 200 59 251 201 44 251 203 45 199 167 58 191 147 29 226 166 20 186 138 21 188 142 23 188 137 19 242 177 31 141 118 66 226 156 19 183 129 16 178 115 11 178 119 30 177 118 30 180 121 31 180 121 32 175 117 31 175 116 32 175 118 32 185 110 19 184 110 20 229 121 6 170 93 6 90 90 90 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O8A?0G?@_<A?0G?@_<A??7??_?=??7??_?<??3??@@@b') ; yourself); yourself]
+!
+
+repositoryCheckIn
+    "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 repositoryCheckIn inspect
+     ImageEditor openOnClass:self andSelector:#repositoryCheckIn
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class repositoryCheckIn'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@TCP<MB  T@@@@@@@@@@@RG2H)JBP^FQH@@@@@@@@@DB@!!JR $G!!$F@@@@@@@@@@$VGR\#FA\UB0@@@@@@@@@GF2X)JBP^FP,@@@@@@@@@BQ,&
+JR $G!!$K@@@@K"8.K"8.K"8(IA8YB0@@@@@@J2</J2,.JBP^FP,@@@@@K"<,K2<+K" $G!!$L@@@@K"0,K2</J28(IA8YC@@@K"4-K28.K",.JBT^FP0@K",-
+KB8@BQ,.K"LXE1TE@B8/KR8@@AL[I"8#FA\UA@@.K28@@@@@D1LSD1@NDP@@K",.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 128 0 48 152 0 63 184 0 111 248 40 175 152 48 176 96 40 176 104 40 176 128 56 191 128 40 191 128 56 191 136 48 192 120 48 192 128 48 192 144 48 192 144 56 192 152 48 192 152 56 192 160 56 192 168 56 207 160 56 207 176 80 224 120 8 224 152 16 224 160 16 239 192 40 240 176 24 240 192 64 240 200 56 240 200 64 240 208 48 240 208 56 255 200 40 255 200 48 255 208 64 255 216 80 255 224 80 255 224 88 255 224 96 255 232 104 255 240 96 255 240 136 255 248 160 241 241 241 50 155 0 109 255 36 133 255 72 40 124 0 60 186 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@O8A?0G?@_<A?0G?G?<G?0??G?<??77?^_=0?''@@@@@b') ; yourself); yourself]
+!
+
+repositoryCheckOut
+    "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 repositoryCheckOut inspect
+     ImageEditor openOnClass:self andSelector:#repositoryCheckOut
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class repositoryCheckOut'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@TCP<MB  T@@@@@@@@@@@RG2H)JBP^FQH@@@@@@@@@DB@!!JR $G!!$F@@@@@@@@@@$VGR\#FA\UB0@@@@@@@@@GF2X)JBP^FP,@@@@@@@@@BQ,&
+JR $G!!$K@@@@@@@@@@@@@@@(IA8YB0@@@@@@@@DB@ DB@BP^FP,@@@@@@@LC@0@@JR $G!!$L@@@@@@LC@0@\I"$(IA8YC@@@@PHC@ @IF"X)JBT^FP0@@@HC
+@ @@BQX]I2LXE1TE@@@B@ H@@APVGR\#FA\UA@@@@PHB@@@@EALSD1@NDP@@@@DA@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 128 0 48 152 0 63 184 0 111 248 40 175 152 48 176 96 40 176 104 40 176 128 56 191 128 40 191 128 56 191 136 48 192 120 48 192 128 48 192 144 48 192 144 56 192 152 48 192 152 56 192 160 56 192 168 56 207 160 56 207 176 80 224 120 8 224 152 16 224 160 16 239 192 40 240 176 24 240 192 64 240 200 56 240 200 64 240 208 48 240 208 56 255 200 40 255 200 48 255 208 64 255 216 80 255 224 80 255 224 88 255 224 96 255 232 104 255 240 96 255 240 136 255 248 160]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@O8A?0G?@_<A?0G?@?<G?4??W?=??77?__=<?''8@_0@b') ; yourself); yourself]
+!
+
+repositoryGitIcon
+    "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 repositoryGitIcon inspect
+     ImageEditor openOnClass:self andSelector:#repositoryGitIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class repositoryGitIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$\I2X%J20\NS$9NS$9NS$WHA8LDAX[JA\9NS$9NS$9H2D]CA@VF2 7NS$9NS$9NSL*F@,SF"P6MS$9NS$9NS$2G1HLDAX[JCT9NS$9NS$9LQ<RC@<UF2 4
+NS$9NS$9NR8_DP4NEA,(MC$9NS$9NS$-JR$)JR$)JR$)JR$)JR$9KR$A@PDA@PDA@PDA@PD)NR<Y@PDDA@DAA@DDA@PAFS$0FP$CBPDA@PPABPPA@Q$9L@@I
+A $F@0DF@P$F@PD@NRH8@P(D@ (AA (A@ (ANC$9A0(AB (JB (JB (AB \9NPTEAPTEAPTEAPTEAPTENS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[104 97 99 245 246 251 25 50 99 40 69 126 47 75 130 69 80 102 34 56 94 78 91 112 242 245 249 237 248 254 227 246 255 249 240 101 252 248 161 252 248 162 251 240 138 251 239 139 251 239 140 249 232 112 249 233 112 246 223 77 246 224 88 246 224 89 246 224 90 185 160 32 243 213 53 117 110 75 237 197 37 240 207 60 194 167 52 249 213 68 249 216 77 240 200 59 251 201 44 251 203 45 199 167 58 191 147 29 226 166 20 186 138 21 188 142 23 188 137 19 242 177 31 141 118 66 226 156 19 183 129 16 178 115 11 178 119 30 177 118 30 180 121 31 180 121 32 175 117 31 175 116 32 175 118 32 185 110 19 184 110 20 229 121 6 170 93 6 90 90 90 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O8A?0G?@_<A?0G?@_<A??7??_?=??7??_?<??3??@@@b') ; yourself); yourself]
+!
+
+repositoryHGIcon
+    "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 repositoryHGIcon inspect
+     ImageEditor openOnClass:self andSelector:#repositoryHGIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class repositoryHGIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$\I2X%J20\NS$9NS$9NS$WHA8LDAX[JA\9NS$9NS$9H2D]CA@VF2 7NS$9NS$9NSL*F@,SF"P6MS$9NS$9NS$2G1HLDAX[JCT9NS$9NS$9LQ<RC@<UF2 4
+NS$9NS$9NR8_DP4NEA,(MC$9NS$9NS$-JR$)JR$)JR$)JR$)JR$9KR$A@PDA@PDA@PDA@PD)NR<Y@PDD@PDD@PDDA@DAFS$0FP AA@(JA@$CBPDA@Q$9L@@I
+@PXDA@XIA $F@0D@NRH8B DBB (F@P(D@ (ANC$9A0(AB (JB (JB (AB \9NPTEAPTEAPTEAPTEAPTENS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[104 97 99 245 246 251 25 50 99 40 69 126 47 75 130 69 80 102 34 56 94 78 91 112 242 245 249 237 248 254 227 246 255 249 240 101 252 248 161 252 248 162 251 240 138 251 239 139 251 239 140 249 232 112 249 233 112 246 223 77 246 224 88 246 224 89 246 224 90 185 160 32 243 213 53 117 110 75 237 197 37 240 207 60 194 167 52 249 213 68 249 216 77 240 200 59 251 201 44 251 203 45 199 167 58 191 147 29 226 166 20 186 138 21 188 142 23 188 137 19 242 177 31 141 118 66 226 156 19 183 129 16 178 115 11 178 119 30 177 118 30 180 121 31 180 121 32 175 117 31 175 116 32 175 118 32 185 110 19 184 110 20 229 121 6 170 93 6 90 90 90 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O8A?0G?@_<A?0G?@_<A??7??_?=??7??_?<??3??@@@b') ; yourself); yourself]
+!
+
+repositoryIcon
+    "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 repositoryIcon inspect
+     ImageEditor openOnClass:self andSelector:#repositoryIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class repositoryIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$\I2X%J20\NS$9NS$9NS$WHA8LDAX[JA\9NS$9NS$9H2D]CA@VF2 7NS$9NS$9NSL*F@,SF"P6MS$9NS$9NS$2G1HLDAX[JCT9NS$9NS$9LQ<RC@<UF2 4
+NS$9NS$9NR8_DP4NEA,(MC$9NS$9NS$-APTEAPTEAPTEAPTEAPT9KPTA@PDA@PDA@PDA@PDENR<E@PDA@PDA@PDA@PDAAS$0AP A@PDA@PDA@PDA@PT9L@TI
+@PHB@PHB@PHB@PDENRHEB DD@ (B@ (B@ DAAS$9AP(JB (JB (JB (JB T9NPTEAPTEAPTEAPTEAPTENS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[104 97 99 245 246 251 25 50 99 40 69 126 47 75 130 69 80 102 34 56 94 78 91 112 242 245 249 237 248 254 227 246 255 249 240 101 252 248 161 252 248 162 251 240 138 251 239 139 251 239 140 249 232 112 249 233 112 246 223 77 246 224 88 246 224 89 246 224 90 185 160 32 243 213 53 117 110 75 237 197 37 240 207 60 194 167 52 249 213 68 249 216 77 240 200 59 251 201 44 251 203 45 199 167 58 191 147 29 226 166 20 186 138 21 188 142 23 188 137 19 242 177 31 141 118 66 226 156 19 183 129 16 178 115 11 178 119 30 177 118 30 180 121 31 180 121 32 175 117 31 175 116 32 175 118 32 185 110 19 184 110 20 229 121 6 170 93 6 90 90 90 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O8A?0G?@_<A?0G?@_<A??7??_?=??7??_?<??3??@@@b') ; yourself); yourself]
+!
+
+repositoryLog
+    "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 repositoryLog inspect
+     ImageEditor openOnClass:self andSelector:#repositoryLog
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class repositoryLog'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4E@@@@@@@@@@@@@@@@@@DLF @@@@@@@@@@@@@@@A0A@P0E@@@@@@@@@@@@@@@WAP4AB0@C
+@0LC@0\@@@@@E@@ECP@@@1PTFA I@@@@@@@RGA\@@@LXFA XBP@@@@@DC!!TXAA,CEAPTE@$@@@@YA XDA@P[@1 XFA I@@@@B@PDB (JD@LTEAPTBP@@@@ J
+B@ [E!!LCFA XF@$@@@@WC0<OD1LQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[146 146 146 255 218 144 241 241 241 255 255 255 126 186 0 255 157 108 133 255 72 192 192 192 84 124 0 160 160 164 105 155 0 186 126 0 255 255 180 255 206 108 109 255 36 20 62 0 42 62 0 6 6 6 133 133 133 18 18 18 95 95 95 248 248 248 62 62 0 108 108 108 222 222 222 69 69 69 255 255 144 63 93 0 128 128 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@8@G @_@A=>G''8N_#?>O?8??#?>O8@@@@@@@@@b') ; yourself); yourself]
+!
+
+repositoryMCIcon
+    "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 repositoryMCIcon inspect
+     ImageEditor openOnClass:self andSelector:#repositoryMCIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class repositoryMCIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$\I2X%J20\NS$9NS$9NS$WHA8LDAX[JA\9NS$9NS$9H2D]CA@VF2 7NS$9NS$9NSL*F@,SF"P6MS$9NS$9NS$2G1HLDAX[JCT9NS$9NS$9LQ<RC@<UF2 4
+NS$9NS$9NR8_DP4NEA,(MC$9NS$9NS$-JR$)JR$)JR$)JR$)JR$9KR$A@PDA@PDA@PDA@PD)NR<Y@PDD@PDDB@DDA@ AFS$0FP HA@LDA@ D@P$H@Q$9L@@I
+BPPA@PPHA DAB@D@NRH8B (D@P(DB DDA@ ANC$9A0(JB (JB (JB (JB \9NPTEAPTEAPTEAPTEAPTENS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[104 97 99 245 246 251 25 50 99 40 69 126 47 75 130 69 80 102 34 56 94 78 91 112 242 245 249 237 248 254 227 246 255 249 240 101 252 248 161 252 248 162 251 240 138 251 239 139 251 239 140 249 232 112 249 233 112 246 223 77 246 224 88 246 224 89 246 224 90 185 160 32 243 213 53 117 110 75 237 197 37 240 207 60 194 167 52 249 213 68 249 216 77 240 200 59 251 201 44 251 203 45 199 167 58 191 147 29 226 166 20 186 138 21 188 142 23 188 137 19 242 177 31 141 118 66 226 156 19 183 129 16 178 115 11 178 119 30 177 118 30 180 121 31 180 121 32 175 117 31 175 116 32 175 118 32 185 110 19 184 110 20 229 121 6 170 93 6 90 90 90 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O8A?0G?@_<A?0G?@_<A??7??_?=??7??_?<??3??@@@b') ; yourself); yourself]
+!
+
+repositoryP4Icon
+    "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 repositoryP4Icon inspect
+     ImageEditor openOnClass:self andSelector:#repositoryP4Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary repositoryP4Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$\I2X%J20\NS$9NS$9NS$WHA8LDAX[JA\9NS$9NS$9H2D]CA@VF2 7NS$9NS$9NSL*F@,SF"P6MS$9NS$9NS$2G1HLDAX[JCT9NS$9NS$9LQ<RC@<UF2 4
+NS$9NS$9NR8_DP4NEA,(MC$9NS$9NS$-JR$)JR$)JR$)JR$)JR$9KR$A@PDA@PDA@PDA@PD)NR<Y@PDAA@PAB@PAB@ AFS$0FP HB@LIA@ DA@$H@Q$9L@@I
+BP$DA@$HA XFB@D@NRH8B (J@ (JB (FB  ANC$9A0(JB (JB (JB (JB \9NPTEAPTEAPTEAPTEAPTENS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[104 97 99 245 246 251 25 50 99 40 69 126 47 75 130 69 80 102 34 56 94 78 91 112 242 245 249 237 248 254 227 246 255 249 240 101 252 248 161 252 248 162 251 240 138 251 239 139 251 239 140 249 232 112 249 233 112 246 223 77 246 224 88 246 224 89 246 224 90 185 160 32 243 213 53 117 110 75 237 197 37 240 207 60 194 167 52 249 213 68 249 216 77 240 200 59 251 201 44 251 203 45 199 167 58 191 147 29 226 166 20 186 138 21 188 142 23 188 137 19 242 177 31 141 118 66 226 156 19 183 129 16 178 115 11 178 119 30 177 118 30 180 121 31 180 121 32 175 117 31 175 116 32 175 118 32 185 110 19 184 110 20 229 121 6 170 93 6 90 90 90 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O8A?0G?@_<A?0G?@_<A??7??_?=??7??_?<??3??@@@b') ; yourself); yourself]
+!
+
+repositoryPerforceIcon
+    "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 repositoryPerforceIcon inspect
+     ImageEditor openOnClass:self andSelector:#repositoryPerforceIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class repositoryPerforceIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@PHCA@T@@@@@A \H@@@@BP(KC@4NC0@@DADRD0@@@APUE!!\XFQ([GA4^G2@@@@@!!H"L$@BT&I2 )J",,@@@@KR8/LCD2L3P5
+M#\8NP@@@C(;OC4>O4AAP$MDQP@@@@AFQ4!!IR$-LST8@S5@@@@@@TRIRT5QUU%\@VE%Z@@@@@E-\WU9_XFE"@FM$YP@@@@@@@FY''J&!!)Z&-,[V9/@@@@@@@@
+\GE2\7Q5]'']8^P@@@@@@@@@@@@@@@G);@@@@@@@@@@@@@@@@@@A<_P@@@@@@@@@@@@@@@@@@_''<@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 166 144 53 162 134 43 161 134 43 163 134 42 149 116 32 144 140 67 165 134 41 84 61 13 155 131 46 247 203 70 238 189 60 232 178 48 227 174 50 235 185 58 187 145 44 147 149 89 241 206 86 235 183 54 107 78 15 148 120 36 239 191 62 209 157 41 75 52 8 56 39 5 188 142 37 232 182 57 113 86 23 87 91 60 236 207 95 226 178 57 222 171 50 69 50 8 148 117 34 239 192 62 195 146 38 11 6 0 176 156 56 237 186 59 152 122 44 166 147 71 211 158 37 212 165 50 211 161 45 37 26 3 148 120 38 239 192 63 214 167 51 169 132 38 179 159 56 232 201 82 227 176 50 146 118 41 163 121 29 94 67 11 206 174 54 192 144 39 13 9 0 148 121 41 239 191 65 229 181 58 226 176 54 221 171 51 213 164 48 179 141 44 120 91 25 94 68 13 14 14 3 236 199 63 162 122 34 149 118 29 238 191 62 209 158 41 70 52 14 45 35 9 116 105 55 128 100 29 101 74 14 2 1 0 245 202 63 129 99 31 150 117 28 200 150 39 16 9 0 120 120 76 208 170 64 154 111 22 12 7 0 127 112 33 238 192 58 98 76 22 124 95 24 207 164 53 194 147 38 78 74 37 211 184 80 211 158 42 93 68 14 72 57 12 181 171 75 228 179 55 100 78 21 31 23 6 141 121 44 230 181 57 242 192 57 244 192 56 241 192 57 234 191 67 227 179 59 241 189 56 215 166 47 89 65 13 104 76 15 106 78 17 103 79 23 104 80 24 106 79 20 221 176 55 211 163 48 110 85 22 105 78 19 239 199 62 163 122 32 235 188 57 138 100 22 85 64 18 50 38 9]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@>GG<<_?1;?G?<_?!!?6G>8_; _?@?<@C@@L@@0@@@b') ; yourself); yourself]
+!
+
+repositorySVNIcon
+    "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 repositorySVNIcon inspect
+     ImageEditor openOnClass:self andSelector:#repositorySVNIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class repositorySVNIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NS$\I2X%J20\NS$9NS$9NS$WHA8LDAX[JA\9NS$9NS$9H2D]CA@VF2 7NS$9NS$9NSL*F@,SF"P6MS$9NS$9NS$2G1HLDAX[JCT9NS$9NS$9LQ<RC@<UF2 4
+NS$9NS$9NR8_DP4NEA,(MC$9NS$9NS$-JR$)JR$)JR$)JR$)JR$9KR$A@PDA@PDA@PDA@PD)NR<Y@PPD@PPHA@ D@PPAFS$0FP CBP CBPLI@0LD@Q$9L@@I
+BPXIA $FBPXCA D@NRH8B HBB (BB (BB PANC$9A0(JB (JB (JB (JB \9NPTEAPTEAPTEAPTEAPTENS$9NS$9NS$9NS$9NS$9NP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[104 97 99 245 246 251 25 50 99 40 69 126 47 75 130 69 80 102 34 56 94 78 91 112 242 245 249 237 248 254 227 246 255 249 240 101 252 248 161 252 248 162 251 240 138 251 239 139 251 239 140 249 232 112 249 233 112 246 223 77 246 224 88 246 224 89 246 224 90 185 160 32 243 213 53 117 110 75 237 197 37 240 207 60 194 167 52 249 213 68 249 216 77 240 200 59 251 201 44 251 203 45 199 167 58 191 147 29 226 166 20 186 138 21 188 142 23 188 137 19 242 177 31 141 118 66 226 156 19 183 129 16 178 115 11 178 119 30 177 118 30 180 121 31 180 121 32 175 117 31 175 116 32 175 118 32 185 110 19 184 110 20 229 121 6 170 93 6 90 90 90 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'O8A?0G?@_<A?0G?@_<A??7??_?=??7??_?<??3??@@@b') ; yourself); yourself]
+!
+
+repositoryTag
+    "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 repositoryTag inspect
+     ImageEditor openOnClass:self andSelector:#repositoryTag
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class repositoryTag'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH"H"H"@@@JL3L3L3N@@BL3L3L3L8@KJVL3L3L3 K/NT3L3L3N@@BL3L0LC@8@@43L3L3L3 @@ML3L3L3N@@@
+@DQDQDQA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[35 35 35 98 98 98 128 128 66 252 252 128 68 68 68 129 65 65 128 64 2 241 241 241 67 67 67 128 64 64 190 190 66 2 2 2 66 66 66 65 65 3 97 65 3]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@A?8O?1??O?=??1??G?<O?0_?@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+repositoryVersions
+    "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 repositoryVersions inspect
+     ImageEditor openOnClass:self andSelector:#repositoryVersions
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class repositoryVersions'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@#FA(XH0@@@@@@@@@@@@@JABDNA@PJ@@@@@@@@@@@#ABD[HPPDG"L@@@@@@@@@FBDQC1XOB!!8X@@@@@@@@@A(\B08NABD^
+F @@@@@@@@@ZD T$E \[G!! @@@@@@@@ICQLSD2D[A@XV@@@@@@@I@0HJD1LAG X]ER@@@@@@@0$@@1XXF!! VE@0"EP@@@@@@@@LC@@@@@A<U@BHU@@@@@@@C
+@0@@@@@@CQT@E1T@@@@@@0L@@@@@@@@MEP@WH@@@@@LC@@@@@@@@@@4UDB@@@@@C@0@@@@@@@@@@@AT_@@@@@0L@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[186 126 0 74 140 199 95 159 191 63 95 159 180 230 255 79 124 169 146 146 146 160 160 164 241 241 241 63 127 191 120 120 120 89 144 198 217 147 0 82 82 82 235 235 235 192 192 192 155 105 0 222 222 222 74 134 193 79 141 199 62 42 0 124 84 0 95 95 95 255 206 108 57 57 57 159 191 191 0 0 0 255 255 255 90 145 199 31 31 31 144 218 255 69 69 69 93 63 0 248 248 248 255 218 144 108 108 108 162 186 210]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O A?@O>@?8C? O>A?8O?07? X_A >FA<XC1 CF@@b') ; yourself); yourself]
+!
+
+rightAdjust16x16Icon
+    "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 rightAdjust16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#rightAdjust16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class rightAdjust16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@AUUUUPP@@@DEUUUUAUP@@PUUUUTD@@@AAUUUUPUT@@DEUUUUA@@@@PUUUUTEU@@AAUUUUPUUUUT@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+??????????????????????????????????????????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+run16x16Icon
+    "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 run16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#run16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class run16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@AT@@@@@@!!@@EP@AT@@CPRMDT!!P0@@ATQDQDP0@@@CQEMTQD@@@@IEL@EDH@@AEDL@@AQAD@L4QP@@EDL0@@MDD@EDT@@@ADQAEDQ@@@@A
+QDQDQC@@@AP4IDMAP0@@T0@AL@@#@@@@@@D0@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 220 220 220 128 128 128 195 195 195 160 160 160]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A CFLO?0_>A?8G''!!<O''0>G'' _>A?8O?01#@F@@@@b') ; yourself); yourself]
+!
+
+search16x16Icon
+    "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 search16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#search16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class search16x16Icon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@ @ @@@@@@@@@@@@B@B@@@@@@@@PDD@@DBA@@B@@ @@@@@@@P@@D@H@@B@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 212 208 200 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@\\A10GG@>>C;8_?3??/?>??;>?/ >>C;8O @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+search16x16Icon2
+    "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 search16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#search16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary search16x16Icon2'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@HB@@@@@@@@@@@@@@@@@0PEAPXC@@@@@@@@@@@@A0 IB (IB00@@@@@@@@@@ 4NC1@QC1HS@ @@@@@@@APUE!!\X
+FPDZF10@@@@@@@@]G!!< @PD!!H"L$@@@@@@@@IRXEI0DAJB$*I@@@@@@@@@X+K@H-K"<0LSH@@@@@@@D3MCT6M3\8NS(2@@@@@@D;OC4>O4A@PTHB@@@@@@EC
+QDUFQ4!!IN0DW@@@@@@EJR41MS @@@@@@@@@@@@@AS5AQT @@@@@@@@@@@@@@@EMTUP@@@@@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 223 224 248 208 208 248 240 232 248 191 200 240 143 160 208 192 200 240 207 216 248 127 144 200 63 88 168 47 88 184 127 152 200 208 224 248 79 104 200 48 80 160 79 112 176 144 184 240 144 176 240 48 88 168 80 120 208 175 184 216 47 72 168 95 96 176 239 224 248 255 240 224 240 232 240 79 96 168 47 80 160 208 216 240 159 168 200 31 64 160 159 168 224 255 232 248 223 208 248 128 152 216 32 64 160 191 184 208 144 160 184 31 64 168 255 248 248 239 232 248 112 128 200 31 48 160 15 48 160 64 88 168 255 240 240 240 240 248 207 208 248 48 64 144 47 64 160 224 216 240 191 192 240 31 56 168 16 32 144 32 48 160 95 104 200 32 56 144 32 56 136 128 160 216 176 184 224 64 80 144 15 32 136 64 88 176 31 48 136 16 40 144 32 64 136 128 152 200 191 184 224 63 72 136 16 48 128 96 104 168 208 216 248 224 232 248 191 192 224 191 184 216 64 72 120 15 32 104 63 96 184 240 248 248 128 128 184 31 40 80 111 112 144 239 216 248 208 208 224 176 184 200 223 216 224]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'D@@@X@G8@?0G? _>A?8G? _>C?8_?C?8_ A<@C @D@@b') ; yourself); yourself]
+!
+
+searchNext16x16Icon
+    "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 searchNext16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#searchNext16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class searchNext16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@DUUT@@@@@@DT@AE@E@@@@T@@@AUT@@@AP@@@EUP@@@DT@@EUU@@@@AE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@P@@@@@@C@@@C@@@@@@D@A@D@@@@@@@
+@@@@@@@@@C@@@@L@@@@@D@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 0 212 208 200 128 128 128 0 0 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A<@LY@ \BA0LO@X@FL@X0C7 _?A?<G?0^OA8<G#0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+searchPrev16x16Icon
+    "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 searchPrev16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#searchPrev16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class searchPrev16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@UUU@@@@@T@U@@EP@@@AUT@@@AP@@@EUP@@@E@@@@UUT@@EP@@@@@@@@EP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@P@@@@@@@@0@@@0@@@@@AA@@A@@@@
+@@@@@@@@@@@@L@@@@0@@@@@P@@@A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 0 212 208 200 128 128 128 0 0 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@>@&LC PNA@<L@A @1 CF@^<C?8O? ?>C18OG <^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+settings16x16Icon
+    "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 settings16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#settings16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class settings16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@LC@0@@@@@@@@XC"@@@@@@H00^B0@@@@@XC"PN@@@@@@@#E1<G@@@@C"PNF@@RG @@@@ [A0@@H@8OF@@@AQD @A<UH!!T@
+H@8[@@@@@@\YFA WHR@GH@8[@@@@@@@@A14YHR@ H@8[@@@@@@@@@@@GEQTRH@8 A @@@@@@@@@@@@@A@P8 G1 L@@@@@@@@@AXAE $AD1 \D1P@@@@@@AXA
+E $B@P@QD10PA@@@@AXAE (B@QX@@A$SF!!LC@@@AE 4B@QX@@@@@D1PCDP@@@P4B@QX@@@@@@@@CDP@@@@4A@QX@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 47 80 128 95 136 184 111 104 96 111 104 104 112 112 104 112 112 120 127 120 120 127 128 120 127 160 200 127 168 208 128 128 120 128 128 128 128 168 208 143 136 128 143 136 136 159 144 144 159 152 144 159 152 160 160 160 160 160 160 168 175 168 168 175 200 240 176 168 168 176 176 176 191 184 184 192 184 184 192 192 184 192 192 200 207 200 200 208 200 208 208 208 208 223 216 216 224 224 216 224 224 224 239 232 224 240 240 240]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@NA0<OA8=#''''^8_?@?8A? A?@_>C=<_39>G''0L^@@b') ; yourself); yourself]
+!
+
+showCodeCoverage16x16Icon
+    "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 showCoverageCode16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#showCoverageCode16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary showCodeCoverage16x16Icon'
+        ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@AUUUUPZ**UTEUUUUAZ*)UPUUUUTE**)UAUUUUPUU?=TEUUUUAUW?5PUUUUTE***UAUUUUPUUUUT@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 140 247 115 255 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+??????????????????????????????????????????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+snapshot16x16Icon
+    "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 snapshot16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#snapshot16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class snapshot16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@G\0@@@@@0M0\3A7L0@CL3@3LCL3@@@@@@@@@@@@@@@@&Y@@@@@@L@&X&P@@@@@0BX&Y@@@@@CLI"Y$@@@@@@@&Y&P@@@@@@
+@I&P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 0 212 208 200 255 255 255 128 128 0 255 255 0 128 128 128 0 255 255 0 0 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@C G?<??;??/?>??;??/?>??;??/?>??9??@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+sortByLineNumber16x16Icon
+    "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 sortByLineNumber16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#sortByLineNumber16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class sortByLineNumber16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0<C@@@@@@@@@@@@@@@@@@LP@0@@@@@@@@LE@@LE@@@CA@L@@@@@@@@CAP@CAP@@@0TC@@@@@@@C
+APLCAPL@@@LE@0@CAPTEAPTEAPTEAP@CAPL@@@LC@0T@@0TC@0L@@0TC@@@@@@LE@@LE@@@@@@LE@0@CAPTEAPTEAPTEAP@CAPL@@@LCAPLCAPLC@0L@@0TC
+@@@CAP@CAP@@@@@@APDE@PT@@0T@@0T@@@@@@ADEAPTQ@@@@@@@@@@@@@@@@DPTQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[159 191 191 63 63 95 63 63 159 191 191 191 0 1 0 0 0 0 191 159 159 127 63 127 255 255 255 159 63 127 63 127 191 223 191 191 159 95 127 63 95 191 127 159 159 1 1 3 3 0 2 159 159 159]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@G@@\CY0M''A>]?=377CX]?=3?7M >6C8@G@@@@@b') ; yourself); yourself]
+!
+
+sortByName16x16Icon
+    "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 sortByName16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#sortByName16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class sortByName16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8MCP8@@@@@@@@@@0<C@@@MC @MC @@@@@@@@LP@0@@@@@@CP(@@@@@@@@CA@L@@AHMB 4J@@@@@@@@@0TC@@8MC @M
+B @@@@@@@@LE@0@NCP@@CP(@@@@@@@@CAPL@@@(MCP8BB @@@@@@@0TC@@@@@@@@@@@@@@@@@@LE@0@@@@@@@@\GA0\GA0@CAPL@@@@@@@@IA @KA00@@0TC
+@@@@@@@@A @KA00@APDE@PT@@@@@@@@KA00@@ADEAPTQ@@@@@@@KA00@@@X@DPTQ@@@@@@@@C@\@@@XI@@@@@@@@@@@@@@\GA0\GA0@a') ; colorMapFromArray:#[159 191 191 63 63 95 63 63 159 191 191 191 0 1 0 0 0 0 191 159 159 127 63 127 255 255 255 159 63 127 63 127 191 223 191 191 159 95 127 63 95 191 127 159 159 1 1 3 3 0 2 159 159 159 63 159 191]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C8GM \FA78G] ].A7<G@@\C=0M7@.>A38NW@3@C<b') ; yourself); yourself]
+!
+
+start16x16Icon
+    "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 start16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#start16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class start16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@Q@@@@DP@@@Q$@@@@Q@@@QSP@@@AD@@QSI@@@@DP@QSH$QDQ@Q@QSH"M&X4ADQSH"H"H!!PDQ#H"H"H"E@QD@RH"H"HTADA@D"HQDQPDP@
+PAH$QDQ@Q@@D@RP@@@AD@@A@E@@@@DP@@@PD@@@@@@@@@DP@@@@b') ; colorMapFromArray:#[0 64 64 0 128 128 0 192 192 0 255 255 0 0 0 255 255 255 192 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@0LG@0<CG0L?>7?;??/?>??;_?,?>1<CC0LG@@L@b') ; yourself); yourself]
+!
+
+stop16x16Icon
+    "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 stop16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#stop16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class stop16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@"H"H"@@@@@$QDQDP @@@$P3L3L1H@@$P3L3L3LR@$P0@3L0@3D"P3@@L0@CLRICL0@@@CL1H$L3L@@CL3D"P3L0@@L3LRICL0@@@CL1H$L0@CL@@3D"P3
+@CL3@CLR@!!L3L3L3LR@@HSL3L3LR@@@BDQDQDR@@@@@"H"H"@@@b') ; colorMapFromArray:#[255 255 255 128 0 0 0 0 0 192 0 0 255 192 192]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?@_>C?<_?;?????????????????????_?8??A?8C?@b') ; yourself); yourself]
+!
+
+stopPoint16x16
+    "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 stopPoint16x16 inspect
+     ImageEditor openOnClass:self andSelector:#stopPoint16x16
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary stopPoint16x16'
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+L3L3L3L3L3L3L3L3L3L3L3L3L3L0@3L3L3L3@3L@L3L3LCA''U6@3L3L0C+ X/ L3L3@7$QFWL3L3L3WP@MT3L3L3M<DQ13L3L3@N.$J>@3L3L3A''U6@CL3L3
+L@L3@3L3L3L3L3L3L3L3L3L3L3L3L3L3L3L3L3L3L3L3L3L3@@@b') ; colorMapFromArray:#[255 255 255 196 96 86 164 75 67 176 176 176 182 74 66 79 34 26 193 90 78 96 47 37 171 87 78 158 77 70 165 75 67 88 43 32 148 68 60 159 65 56 184 74 65]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@\@C8@_0C? O>@?8A?@C8@G@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+terminal16x16Icon
+    "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 terminal16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#terminal16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'AbstractFileBrowser class terminal16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A@PDA@PDA@PDA@PDA@PDA@PJB (JB (JB (JB (JB PJGQ4\F1,[F!!$YFA WE!!XJB!!4B@ HB@ HB@ HB@ HVB ([@  HB@ HB@ HB@ BE@(JF0HGA0\GA0\G
+A0\G@!!PJB!!(AA!!4FA XFA XFA DQB (Y@PXFGPXFA XFA XADP(JF@@EAQ4EAPTEAPTE@A@JB!! @AA4DAA4]GPPDA@@OB (V@@LC@0LC@0LC@0L@CP(JE @@
+@@@@@@@@@@@@@@0JB!!TTEALQDQDPC0<MCP0KB (TEAHQDQ@PC08MB $KB0(DB (JB (JB (JB (JB (DA@PDA@PDA@PDA@PDA@PDA@@a') ; colorMapFromArray:#[95 96 104 95 96 120 95 104 120 95 120 168 95 128 168 95 128 176 96 136 184 96 144 200 111 144 200 127 120 120 143 136 136 176 176 176 191 184 176 191 184 184 192 184 184 192 192 184 192 192 200 207 200 200 207 200 208 208 200 208 208 208 208 223 208 208 223 216 216 224 224 216 224 224 224 239 232 224 239 232 240 240 240 240 255 240 248 255 248 248]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A??/???????????????????????????????7?>@@@b') ; yourself); yourself]
+!
+
+top16x16Icon2
+    "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 top16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#top16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class top16x16Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+AUUUUUUUUP@EUUUUUUUU@@@@@EAP@@@@@@@EYCT@@@@@@EYBD5@@@@@EYBH!!MP@@@EYBH"HST@@EYBH"H"D5@EABH"H"H!!MPUUUTH"EUUU@@@E@"HU@@@@@@
+TBH!!T@@@@@APH"EP@@@@@EPQDU@@@@@@UUUUT@@@@@@@@@@@@@@b') ; colorMapFromArray:#[192 255 255 0 128 128 0 192 192 0 64 64 0 255 255 0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?1??@N@A<@O8A?0O?!!??O?>??8O8@? C>@O8@? @@@b') ; yourself); yourself]
+!
+
+undent16x16Icon
+    <resource:#programImage>
+    ^ self undent16x16Icon1
+
+    "Modified: / 06-04-2011 / 18:38:05 / cg"
+!
+
+undent16x16Icon1
+    "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 undent16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#undent16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class undent16x16Icon1'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@0LC@0LC@0LC@0LC@0LC@0LC@@@@@@@@@@@@@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0L@@@@@@@@@@@@C@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0HC@0LC@@@@
+@@@@@@@@@0HB@0LC@0@@@@@@@@@@@@HB@ HB@0LC@0LC@0LC@0LC@ HC@0LC@@@@@@@@@@@@@0LB@0LC@0@@@@@@@@@@@@LC@0LC@0LC@0LC@0LC@0LC@0@@
+@@@@@@@@@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@@@@@@@@@@@C@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0@a') ; colorMapFromArray:#[0 0 0 220 226 243 0 0 128 0 0 0]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@?8@@@O>@@@BG?X_?8@FG?H_<@@C?@@@@?0@@@@@@b') ; yourself); yourself]
+
+    "Created: / 06-04-2011 / 18:37:57 / cg"
+!
+
+undent16x16Icon2
+    "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 undent16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#undent16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary undent16x16Icon2'
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H@@"H"H@@@@@@BD"H"H"H"@@DRH"@@@@@@DQDQH"H"H @AD"H @@@@@@HRH"H"H"H@@"
+H"H@@@@@@BH"H"H"H"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 34 110 181 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@O?8??#?>O?8??''?>O?8??#?>O?8?? @@@@@b') ; yourself); yourself]
+!
+
+undo16x16Icon
+    "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 undo16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#undo16x16Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class undo16x16Icon'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@<BLHM@P8AC0DO  @B@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@<BLHM@P8AC0DO  @B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+undo16x16Icon2
+    "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 undo16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#undo16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class undo16x16Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@CL3@@@@@@@3@@@3@@L@@0@@H"H0@2@0@BH3D"LC@0@BL0@3D0L@@BL@@@@1L0@@L@@@@CL3@@@0@@@@L3L"H"H@@@@3L3L3L3@@@CL@@@
+@@@@@CL0@@@@@@@CL0@@@@@@@3L0@@@@@@@3L@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 192 0 0 64 0 0 128 0 0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A8@_8#?3_?/>^? _<A?0G? _?A @N@A0@^@C @@@b') ; yourself); yourself]
+!
+
+up16x16Icon
+    <resource: #programImage>
+
+    ^ self up16x16Icon2
+!
+
+up16x16Icon2
+    "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 up16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#up16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class up16x16Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@F@@@@@@@@@FE @@@@@@@FATX@@@@@@FASIF@@@@@FASL2Q @@@FASL3L$X@@FASL3L3IF@FESL3L3L2Q Y&Y%L3I&Y&@@@FD3L&@@@@@@
+XSL2X@@@@@A!!L3I @@@@@FT"H&@@@@@@Y&Y&X@@@@@@@@@@@@@@b') ; colorMapFromArray:#[255 255 255 192 255 255 0 128 128 0 192 192 0 64 64 0 255 255 0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A@@N@A<@O8A?0O?!!??O?>??8O8@? C>@O8@? @@@b') ; yourself); yourself]
+!
+
+upRight16x16Icon
+    "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 upRight16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#upRight16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class upRight16x16Icon'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@T@@@@@@@@@AU@@@@@@@@@EAP@@@EUUUUT T@@@T@@BL3HE@@APL3L3L2AP@E@3L3L3MAT@TCL3L3MAT@APMDQCMAT@@E@4UUUAT@@@TC
+QPAQT@@@APME@ET@@@@E@4T@T@@@@@UUUP@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[192 255 255 0 64 64 0 255 255 0 192 192 0 128 128 0 0 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@ @C@@NA?<G?8_?1??''?<_?!!?<G3 _LA< G0@@@@b') ; yourself); yourself]
+!
+
+viewDetails16x16Icon
+    "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 viewDetails16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewDetails16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class viewDetails16x16Icon'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@]+X@@@@@]+X@@@@@]+X@@@@@]+X@@@@@@@@b') ; yourself); yourself]
+!
+
+viewNoDetails16x16Icon
+    "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 viewNoDetails16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewNoDetails16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class viewNoDetails16x16Icon'
+	ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@A<@@@@@@A<@@@@@@A<@@@@@@A<@@@@@@@@@b') ; yourself); yourself]
+!
+
+viewTimeDetails16x16Icon
+    "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 viewTimeDetails16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewTimeDetails16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class viewTimeDetails16x16Icon'
+        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@A0@]0A7@O^@<HC? G<@_0@\@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@\@G<@?8C? _?A?<G?0O>@?8A?@A0@@@@@@b') ; yourself); yourself]
+!
+
+zoomIn16x16Icon
+    "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 zoomIn16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#zoomIn16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary zoomIn16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+:)79KI@@@@@@@@@@@@,JO@+.J:->@@@@@@@@@@@L!!Z Z3T"INP*0@@@@@@@L^-+8" ''9SF.Y,@@@@@@@B="Y;R
+8>RW"=W^@@@@@@@@/LVG.K.%3L.L!! @@@@@@@NV*(^FU/;N&"-@@@@@@@@C&''MZ"5;F2 - @@@@@@@CQ&,:]1IGS2+8@@@@@@@C]6=*$@I"M M$@@@@@@@CO
+&]25@@@@@@@@ 0@@@@CC-HRN@@@@@@@@@HL@@@BE)8R6@@@@@@@@ 8NC 8L@0,F(@@@@@@@@@@@@3P@@@@BO@@@@@@@@@@@@@HL@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 1 2 3 7 11 14 18 22 24 15 23 28 15 24 29 16 25 31 37 37 37 30 41 48 29 45 55 31 47 57 37 57 69 41 58 70 45 58 66 57 63 65 45 69 85 48 73 89 67 74 79 55 79 93 72 79 83 55 83 101 55 85 103 75 81 86 61 85 101 57 86 105 58 87 106 61 91 110 86 86 86 60 92 112 85 90 93 69 99 117 70 103 123 92 104 110 78 110 127 79 113 131 110 110 110 97 113 120 86 116 131 109 113 115 113 114 115 85 121 140 95 123 138 100 123 134 110 122 130 96 129 145 120 124 127 93 132 151 126 126 126 103 132 146 101 138 156 132 132 132 105 139 156 102 140 159 113 138 149 134 134 134 135 135 135 127 137 143 130 138 140 111 142 157 129 139 143 108 148 167 108 149 168 108 149 169 108 150 170 141 156 162 150 156 158 155 155 155 163 163 163 164 168 170 164 170 173 172 172 172 174 174 174 188 188 188 195 195 195 202 202 202 203 203 203 204 204 204 210 210 210 211 211 211 215 215 215 225 225 225 227 227 227 229 229 229 232 232 232 235 235 235 236 236 236 243 243 243 247 247 247 250 250 250 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 203 209 224 216 238 252 241 244 246 2 2 2 199 118 74 242 203 145 162 178 206 170 223 253 174 221 252 185 233 251 208 237 242 217 252 252 220 254 254 199 204 222 152 118 144 178 175 180 158 196 228 184 221 233 170 188 219 196 246 255 202 251 253 214 253 252 191 193 219 220 253 253 193 199 219 252 169 69 211 196 161 145 159 196 141 158 204 162 181 214 165 219 254 195 244 253 192 240 253 189 241 255 203 255 255 203 210 227 194 190 196 231 251 253 254 255 255 255 170 66 157 121 143 157 186 217 167 205 233 171 173 202 173 220 251 196 233 245 206 249 255 203 240 253 199 201 222 230 255 255 240 255 255 248 251 251 252 170 69 154 123 141 153 119 144 154 199 233 187 240 252 198 248 253 193 241 254 207 253 253 184 189 220 190 194 223 181 190 214 231 251 252 242 250 254 168 104 70 185 176 155 253 205 132 160 192 219 182 230 246 198 247 252 181 192 218 185 200 226 184 187 218 188 216 229 230 251 252 239 253 253 18 18 18 144 157 174 252 205 132 159 167 195 251 211 149 181 235 252 192 229 237 168 215 252 208 253 254 182 221 242 213 255 255 186 195 216 205 208 225 184 113 69 253 169 62 200 117 75 253 205 131 167 193 213 161 193 223 160 173 211 194 243 251 186 236 255 205 253 253 215 254 253 191 192 218 214 217 225]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@?@G>@_<C?0O?@?<C?0O>A?0O^A8DO@Q8G7@DH@Pb') ; yourself); yourself]
+!
+
+zoomOut16x16Icon
+    "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 zoomOut16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#zoomOut16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary zoomOut16x16Icon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+:)7)KI@@@@@@@@@@@@,JO@+.F:-=<@@@@@@@@@@L!!Q Z3S"INP*0@@@@@@@L^-+8" ''9SF.Y,@@@@@@@B="Y;Q
+8.NW"=S]@@@@@@@@/LVG.K.%3L.L!! @@@@@@@NR*(^BU/;N&",<@@@@@@@C%''MV"5+F2 -\@@@@@@@CP&,6]1IGR2+8@@@@@@@C\6-&$@I"M M @@@@@@@CN
+&].5@@@@@@@@@@@@@@CC-HRN@@@@@@@@@@@@@@BE)8R6@@@@@@@@ 8NC 8L@0,F(@@@@@@@@@@@@@@@@@@BO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 1 2 2 8 12 14 19 21 24 15 23 28 15 24 29 16 25 30 37 37 37 31 41 49 30 45 55 31 47 57 37 57 69 41 58 70 45 59 68 57 63 65 46 70 85 48 74 90 68 75 80 55 79 94 73 79 84 55 83 101 55 85 103 76 82 86 61 85 101 57 86 105 58 87 106 61 91 110 86 86 86 60 92 112 85 90 93 69 99 117 70 104 123 92 103 110 78 110 127 79 113 131 97 112 120 86 116 130 109 113 115 113 115 116 85 121 140 94 123 137 100 123 134 111 123 130 120 124 128 97 130 146 93 132 151 104 131 146 101 138 156 132 132 132 105 139 156 102 140 159 113 138 149 134 134 134 127 137 143 130 137 140 111 142 157 130 139 143 108 148 167 108 149 168 108 149 169 108 150 170 141 156 162 150 155 158 155 155 155 163 168 169 164 170 173 172 172 172 188 188 188 195 195 195 202 202 202 204 204 204 210 210 210 211 211 211 225 225 225 227 227 227 232 232 232 235 235 235 247 247 247 248 248 248 250 250 250 254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 203 209 224 216 238 252 241 244 246 2 2 2 199 118 74 242 203 145 162 178 206 170 223 253 174 221 252 185 233 251 208 237 242 217 252 252 220 254 254 199 204 222 152 118 144 178 175 180 158 196 228 184 221 233 170 188 219 196 246 255 202 251 253 214 253 252 191 193 219 220 253 253 193 199 219 252 169 69 211 196 161 145 159 196 141 158 204 162 181 214 165 219 254 195 244 253 192 240 253 189 241 255 203 255 255 203 210 227 194 190 196 231 251 253 254 255 255 255 170 66 157 121 143 157 186 217 167 205 233 171 173 202 173 220 251 196 233 245 206 249 255 203 240 253 199 201 222 230 255 255 240 255 255 248 251 251 252 170 69 154 123 141 153 119 144 154 199 233 187 240 252 198 248 253 193 241 254 207 253 253 184 189 220 190 194 223 181 190 214 231 251 252 242 250 254 168 104 70 185 176 155 253 205 132 160 192 219 182 230 246 198 247 252 181 192 218 185 200 226 184 187 218 188 216 229 230 251 252 239 253 253 144 157 174 252 205 132 159 167 195 251 211 149 181 235 252 192 229 237 168 215 252 208 253 254 182 221 242 213 255 255 186 195 216 205 208 225 184 113 69 253 169 62 200 117 75 253 205 131 167 193 213 161 193 223 160 173 211 194 243 251 186 236 255 205 253 253 215 254 253 191 192 218 214 217 225]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@?@G>@_<C?0O?@?<C?0O>A?0O^A8@O@A8G7@@H@@b') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-20x20'!
+
+bookmarks20x20
+    "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 bookmarks20x20 inspect
+     ImageEditor openOnClass:self andSelector:#bookmarks20x20
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class bookmarks20x20'
+        ifAbsentPut:[(Depth8Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+??????????????????????????????????????<1S/???????????????????????6BAD/????????????????????<]#I8*?????????????????????3^_
+''U''?????????????????????YI2[_!!C??????????????????16F&)&WLO????????<&Q$YFQ$YETI"V%YI*U$D?OS4=K4YT#9RT$9FP#(6K"(VB_718]U0%
+?4X:^X&H!!8RC G57]GE/ZVU@A_????<*Y''-:]''M2\F5(X%=UK G???????<QSF9,Z6]#WU!!SQBW???????????<VU6E^V%EMRTL"?????????????2%[T$=J
+Q389NB#?????????????M$-HP#,3KB\ZE07??????????145OCP-IA0UC ,JG_??????????GSH+G!!,@?1HOA LSQO???????14!!H1$G?????1@T@ $H????
+????GQ< AO????????<]C@ ]??????<]G_??????????????GQ7??0@a') ; colorMapFromArray:#[143 162 38 146 165 38 153 167 24 155 168 21 149 168 39 149 169 39 156 169 21 151 170 40 151 171 40 156 171 30 159 173 22 160 174 20 156 174 34 154 175 41 162 176 20 159 176 32 156 176 41 156 177 41 157 177 41 159 178 37 159 178 38 163 179 26 158 179 42 163 180 27 159 180 42 162 180 35 166 181 20 160 181 40 161 181 39 160 181 42 165 181 28 162 181 37 161 181 40 162 181 38 161 181 41 168 181 23 162 182 36 161 182 41 161 182 43 168 183 20 163 183 35 162 183 41 162 183 42 170 184 22 169 185 20 169 185 23 164 185 38 164 185 40 164 185 42 164 185 43 171 186 24 171 187 21 172 187 22 170 187 29 168 187 35 165 187 44 171 188 19 173 190 19 168 189 44 174 190 21 174 190 22 170 192 37 176 192 20 170 192 38 171 193 33 171 193 38 177 193 21 176 194 19 174 194 26 172 193 47 172 193 48 178 195 20 179 195 21 179 197 19 180 197 20 180 197 21 176 197 38 181 199 19 177 199 46 183 201 20 179 200 50 184 202 19 185 202 21 184 203 18 180 201 50 183 204 21 181 203 37 184 204 27 185 205 18 181 204 45 187 205 19 187 205 21 183 206 27 187 208 18 189 208 20 189 210 17 186 208 51 191 210 20 190 211 17 190 211 19 187 209 53 191 213 17 190 211 43 193 213 19 193 214 17 194 216 16 192 215 38 195 216 20 196 217 25 196 218 18 196 217 28 196 219 17 198 220 18 199 221 17 200 222 23 201 222 28 201 224 17 200 225 16 203 223 33 203 225 20 202 226 16 202 223 51 204 224 38 204 224 41 203 227 16 204 226 26 203 226 47 204 229 16 206 227 34 203 227 53 206 230 21 207 228 39 208 228 43 207 231 26 207 228 60 209 229 48 209 229 51 210 229 52 209 232 33 210 232 39 209 231 58 211 233 46 212 234 52 213 233 63 213 234 56 214 235 59 214 237 41 215 235 62 215 235 64 215 238 49 217 238 55 217 240 46 218 239 61 219 242 53 220 242 59 222 245 56 223 245 62 224 248 57 224 248 58 224 248 64 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@F@@@G@@@O@@@O@@@O @@_ @???0???0_?? G??@C?<@A?8@A?8@A?<@C?<@C=>@G0>@G O@F@C@') ; yourself); yourself]
+!
+
+browseIt20x20Icon
+    "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 browseIt20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#browseIt20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class browseIt20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3L3L3L@@@@@@@M&Y&Y D@@@@@@CY&Y&@P@@@@@@ATQDPAD@@@@@@@@@@@DS@@@@@@
+@@@@@QL1D @@@@@@@AD3DR@@@@@@@@@@@QH@@@@@@@@@@@D L3L5@@@@@@@BA7]7]@@@@@@@HDQDQDP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 248 252 128 208 220 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@P@_?0@_? @_? @_? @_? @_?<@@?8@A?0@C?? @_? @_? @_? @_? @0@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+copy20x20Icon
+    "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 copy20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#copy20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class copy20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+QDQDQDQDQDQDQDQADQDTQDQDQDQDPTQDDDQDQDQDQDECMAPDQDQDQDQAQDPP@DQDQDQDPTL3P3ADQDQDQDEDQADQDTQDQDQAP3LTQDDDQDQDPTQBECMAPDQD
+QDECL1QDPP@DQDQAP$HTL3P3ADQDPRP"EDQDI@QDQDD@@AP3L3HDQDQDQDPTQBP"ADQDQDQDECL3L QDQDQDQAP$H"HDQDQDQDPRP"H"ADQDQDQD@@@@@@QD
+QDQDQDQDQDQDQDQDQDQDQDQDQDPb') ; colorMapFromArray:#[0 0 0 64 64 64 168 228 240 208 212 208 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@G8@@G<@@G>@@G?@@G?@@G?0@G?8@G?<@G?>@G?>@G?>@G?>@@O>@@O>@@O>@@O>@@O>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+cut20x20Icon
+    "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 cut20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#cut20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class cut20x20Icon'
+	ifAbsentPut:[(Depth1Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@F@@@@@@@@@@@@@@@@@@@@@G0@@]H@@%H@@%H@@$0@@$@@@X@B@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 248]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@PP@@PP@@PP@@PP@@H @@H @@M @@E@@@G@@@B@@@G0@@]H@@%H@@%H@@$0@@$@@@X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+cut20x20Icon2
+    "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 cut20x20Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#cut20x20Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class cut20x20Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@DQDQ@@@@@@@@@AQDPP@@@@@@@@@TL4E@@@@@@@@@EDQA@@@@@@@@@AP3MCL@@@@@@@@TQDP$@@@@@@@@ECL3L @@@@@@@AQDIBH@@@@@@@
+@TL3L2@@@@@@@@EBP"H @@@@@@@AIBH"H@@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 64 64 64 168 228 240 208 212 208 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@_ @@_1A@_9A@_=A@_=A@_<"@_<"@_<6@_<T@_<\@_<H@_<_@@A4 @BT @BT @BS@@BP@@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+debugIt20x20Icon
+    "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 debugIt20x20 inspect
+     ImageEditor openOnClass:self andSelector:#debugIt20x20
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class debugIt20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@@@@@@AP@@@3@@@@@@@E@@@3DS@@@@@@UP@@LSL2@@
+@@AUD@@@L3L @@@ETQUU@3L2@@@@UQEUTCL3H @@@@@EUP@BH @@@@@@AT@@@@@@@@@@@@P@@@@@@@@@@@A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 128 0 0 248 0 0 208 220 0 248 252 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@D@@@L#@@Z_ @9? A7?@C3?@G??@O?> _?>@_;=@C14@C @@G@@@F@@@L@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+doIt20x20Icon
+    "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 doIt20x20 inspect
+     ImageEditor openOnClass:self andSelector:#doIt20x20
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class doIt20x20Icon'
+	ifAbsentPut:[(Depth2Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P@@@@@D@@@@@AP@@@@@W@@@@@E=X@@@A_V@@@@@E @@@@@X@@@@@B@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 248 252 128 208 220 0 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@P@@@0@@A @@C @@G@@@O@@@_<@@?8@A?0@C? @@O@@@N@@@\@@@X@@@0@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+documents20x20Icon
+    "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 documents20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#documents20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class documents20x20Icon'
+        ifAbsentPut:[(Depth8Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E)FG@$J[!!:WWX]PGP@@@@@@@@@@QAA"MR]%PF!!<E39Q@@@@@@@@@@AXJ7.QO8 F
+%IT1 YP0L0@@@@@@@F1''E%IBM8P OC0<OC2S@@@@@@@@ B):@"53$EVB (JBOF,@@@@@@@@H#PH=K@=Y%RL_HY%$F @@@@@@@B<)J@DDM)AUQ7:CFFQV@@@@
+@@@@F7&LN1U^VYUJCE1-YF(@@@@@@@@[^G\@S''JPUXJB (H<PP@@@@@@@E^K@H)MC%&UW5=_W31=@@@@@@@@_1N]XQFE$EVB (JBO@T@@@@@@@@GIX$8]I!!Y
+%U=_W5<<U@@@@@@@@B95II-KCYAU (JB #2O@@@@@@@@K&AL&"IHL ,RD#$9I!!$@@@@@@@BRQYY0RSQ#S0NNT6$Y[0@@@@@@@I1[P6Y6!!''D:@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[121 174 168 117 164 171 112 155 176 142 153 154 145 184 186 154 154 154 161 162 162 87 181 134 86 176 134 84 167 135 83 160 137 200 200 200 159 207 255 73 134 146 70 129 149 67 122 152 94 152 159 124 183 164 238 238 238 122 175 167 252 252 252 136 182 178 108 147 180 145 185 187 93 194 255 160 160 160 168 168 168 87 178 134 85 170 136 163 185 209 78 147 140 154 198 251 213 213 213 202 230 247 126 194 164 199 225 255 125 185 164 122 179 166 242 242 242 105 152 170 115 161 174 113 157 175 109 148 180 106 142 183 147 184 190 148 181 193 87 182 134 86 177 134 179 179 179 187 187 187 197 197 197 207 207 207 74 137 145 86 147 151 68 123 151 66 119 153 124 184 164 237 237 237 241 241 241 119 169 170 255 255 255 114 159 174 136 177 182 130 168 185 141 177 188 159 159 159 149 179 197 183 217 203 85 172 135 96 180 141 99 176 145 137 189 255 73 136 145 116 185 158 205 237 255 125 191 164 125 189 164 123 180 165 122 177 167 120 131 130 88 131 169 85 127 171 110 150 178 141 149 153 151 151 151 162 161 158 166 166 166 87 179 134 86 173 135 186 186 186 101 179 146 211 234 223 194 239 255 71 130 148 69 125 150 227 227 227 125 186 164 123 181 165 117 171 166 120 132 130 254 254 254 114 149 164 151 197 183 107 144 181 144 181 188 153 157 160 163 163 163 170 170 170 86 174 135 146 215 254 81 154 138 201 201 201 108 181 153 217 217 217 70 126 149 66 120 152 125 187 164 124 183 165 120 174 165 119 170 169 118 166 171 116 161 173 110 151 178 106 144 182 145 183 188 156 156 156 27 119 255 87 180 134 86 175 135 185 185 185 194 193 189 173 227 255 209 209 209 71 131 148 85 143 148 67 121 152 65 117 154 123 182 165 122 177 166 119 171 169 117 165 171 111 152 177 140 150 153 149 149 149 159 158 155 140 172 193 88 183 134 174 174 174 182 182 182 190 190 190 102 178 147 75 139 144 72 132 147 216 244 248 125 192 164 125 188 164 238 246 242 122 178 166]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O@@@OG?8OG?8OG?>OG?>OG?>OG?>OG?>OG?>OG?>OG?>OG?>OG?>OG?>OG?>OG?>OG>@O@@@O@@@O') ; yourself); yourself]
+!
+
+dos20x20Icon
+    "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 dos20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#dos20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class dos20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@L3L3L3L3L3L3@CDQDQDQDQDQDP@1H"H"H"H"H#D@LRIDH"H"H"H1@CD$H"IBIBH"LP@1IBH"H"IBH#D@LRP"H"H"IBH1@CD$H"IBH$H"LP
+@1H$P"H"P"H#D@LSL3L3L3L3L1@CDQDQDQDQDQDP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? @@@@@ @@C&L@D)P@D)H@D)D@C&X@@@@@') ; yourself); yourself]
+!
+
+dosWithoutText20x20Icon
+    "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 dosWithoutText20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#dosWithoutText20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class dosWithoutText20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3L3L3L3L3L3L@LQDQDQDQDQDQ@CD"H"H"H"H"LP@1H$P"H"H"H#D@LRP"P"H"P"H1@CD$H"H$H"P"LP
+@1IBH"H"H"P#D@LRP"H"H"H"P1@CD$H"H$H"IBLP@1IBIBH"H$H#D@LRIDH"H"P"H1@CD"H"H"H"H"LP@1L3L3L3L3L3D@@QDQDQDQDQDQ@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@_?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? O?? @@@@@@@@@@@@') ; yourself); yourself]
+!
+
+downArrow20x20Icon
+    "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 downArrow20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#downArrow20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class downArrow20x20Icon'
+        ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H@@@@@H"H"H"H"@"H"HBH"H"H"H HQDR@"H"H"H"HBDQD H"H"H"H"@!!DQHBH"H"H"H HQDR@"H"H"H"HBDQD H"H"
+H@@@@!!DQH@@@@"HBDQDQDQDQHBH"HBDQDQDQD H"H"HBDQDQDR@"H"H"HBDQDQHBH"H"H"HBDQD H"H"H"H"HBDR@"H"H"H"H"HBHBH"H"H"H"H"H@H"H"H"
+H"H"H"H"H"H"H"H"H"H"H"H"H"Hb') ; colorMapFromArray:#[0 0 0 100 128 255 128 128 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@?0E@?0@@?0G@?0@@?0B@?0@@?0@_?? O??MG?>@C?<@A?8C@?0H@_ @@O@@@F@C@@@A@@@@') ; yourself); yourself]
+!
+
+download20x20Icon
+    "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 download20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#download20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class download20x20Icon'
+        ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+H"H"H"H"H"H"H"H"H @@@@@"H"H"H"HBH"H H"H"H"H"@!!DQHBH"H"H"H HQDR@"H"H"H"HBDQD H"H"H"H"@!!DQHBH"H"H"H HQDR@"H"H @@@BDQD @@@B
+H@HQDQDQDQD @"H@HQDQDQDR@BH"H@HQDQDQH@H"H"H@HQDQD @"H"H"H@HQDR@BH"H"H"H@HQH@H"H"@"H"H@H @"H"H@H"H"H@@BH"H"@BH"H"H@H"H"H 
+@"H"H"H"H"H"H@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 100 128 255 128 128 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@?0@@?0E@?0@@?0G@?0@@?0B@?0@_?? _?? O??MG?>@C?<@A?8C@?0H0_ 00O@00F@3???1???0') ; yourself); yourself]
+!
+
+edit20x20Icon
+    "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 edit20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#edit20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class edit20x20Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ HB@ HB@@\F@@HB@ HB@ HB@ HB@ HB@ H@A0XI@@HB@ HB@ HB@ HB
+@ HB@@\FA $@@ HB@ HB@ HB@ HB@ H@A0XI@@HB@ HB@ HB@ @@@@@@@@\FA $@@ HB@ HB@ H@@0LN@00@A0XI@@HB@ HB@ HB@@LC@08N@@\FA $@@@HB
+@ HB@ @C@0@@@0L@A0XI@A@@@ HB@ H@@0L@C 8@@@(FA $@DP@@@ HB@@LC@@8P@@L@B DF@ALCC @B@ @C@0@@@@TC@0@A@P4@@0<C@@H@@@LC@0LC@@LC
+@@@M@@LE@0L@@ @@@@@@C 8C@0L@@@@CC0LC@@HB@ HB@ H@@@@NC @@@1DC@0@@@ HB@ HB@ HB@ @@C LE@0L@@ HB@ HB@ HB@ HB@ H@D@LC@@HB@ HB
+@ HB@ HB@ HB@ H@@@@B@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ @a') ; colorMapFromArray:#[0 0 0 166 126 78 0 255 51 255 255 255 153 153 153 102 102 102 255 204 0 255 255 102 248 3 8 236 152 0 253 202 138 102 102 102 204 204 204 110 74 32 181 181 181 125 125 125 117 117 117 162 162 162 254 12 17 214 214 214]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@F@@@O@@@O @@_ @@_@@_?@@?>@A?>@C??@G?? O?? _?? _?? O??@A?>@@O<@@C8@@A0@@@@@') ; yourself); yourself]
+!
+
+empty1x20Icon
+    "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 empty1x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#empty1x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class empty1x20Icon'
+	ifAbsentPut:[(Depth1Image new) width: 1; height: 20; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@F #L#!!LG 8H@@@@@@@@@@@b') ; colorMapFromArray:#[255 255 255 0 0 0]; mask:((Depth1Image new) width: 1; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+erase20x20Icon
+    "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 erase20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#erase20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class erase20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QDQD@@@@@@@@@EDQAD@@@@@@@@@P3PTD@@@@@@@@@QDDQ@@@@@@@@@@L4L@@@@@@@@A@@Q@@P@@@@@@@T@@@BD@@@
+@@@@ED@@H!!@@@@@@@AP@@@HP@@@@@@@P@BH@D@@@@@@@@@H"H@@@@@@@@@@QDQD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 64 64 64 168 228 240 208 212 208 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@?@@@? @C?2@C?<@A?8@@?8@@?8@@?8@@?8@@?8@@?8@A?8@C0D@C @@A@B@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+erase20x20Icon2
+    "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 erase20x20Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#erase20x20Icon2
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class erase20x20Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QDQD@@@@@@@@@EUUQD@@@@@@@@@UDTUD@@@@@@@@@UUDQ@@@@@@@@@@QEH@@@@@@@@A@@UP@P@@@@@@@U@@@CD@@@
+@@@@EU@@L1@@@@@@@AT@@@LP@@@@@@@P@CL@D@@@@@@@@@L3L@@@@@@@@@@QDQD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[255 0 0 64 64 64 168 172 168 168 228 240 208 212 208 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@?@@@? @C?2@C?<@A?8@@?8@@?8@@?8@@?8@@?8@@?8@A?8@C0D@C @@A@B@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+eraseOverlay20x20
+    "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 eraseOverlay20x20 inspect
+     ImageEditor openOnClass:self andSelector:#eraseOverlay20x20
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class eraseOverlay20x20'
+        ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F@@@@@@@@@@@@XF@@@@@@@@@@@@Y @@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[255 0 0 64 64 64 168 172 168 168 228 240 208 212 208 255 255 255 255 128 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@C B@C0L@A8X@@\0@@O @@G@@@O @@\0@@8X@A0L@C0N@C F@A@B@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+executeMethod20x20Icon
+    "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 executeMethod20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#executeMethod20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'VistaToolbarIconLibrary executeMethod20x20Icon'
+        ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@@EUUUU@0UUUR@@ATQDPCLDQDQ@@@UDQ@L5@@@DP@
+@EQD@3USLPQD@@ATPCMUL1ADQ@@@U@@@@3DDQDP@@EQDQ@LPQDQD@@@&Y&XAA&Y&Y @@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 208 220 0 170 170 170 248 252 128 0 255 127 255 255 255 127 127 127]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@P@@@0@@A @_?? _?? _?? _?? _?? _?? _?? _?? _?? _?? @X@@@0@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fileIn20x20Icon
+    "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 fileIn20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileIn20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileIn20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 21; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@Y&Y&Y&@@@@@@@FL3M&Y @@Y DFA"H"Y&X@DFXA@@Y"Y&Y&@A@@@P@FX&Y&Y @QDQD@M&I%UUX@DP@AA#M"H"H&@ADFD3L3L&Y&Y
+@@@@L3L3M&Y&X@@@@CL3L2YDQF@@@@@@@3X"H"I @@@@@@M&Y&Y&X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 129 129 129 63 63 36 255 0 0 194 194 0 0 127 0 194 194 194]; mask:((Depth1Image new) width: 20; height: 21; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G?0@G?0?7?0???0?7?0?7?0?7?0???0???0_??0@??0@G?0@G?0@G?0J H@P @@R&I R)JP:/JPR(JPR&JP') ; yourself); yourself]
+!
+
+fileIn20x20Icon2
+    "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 fileIn20x20Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#fileIn20x20Icon2
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileIn20x20Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 21; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@G]7]0@@Y&Y&Y&A;.;\@@FL3M&Y ^:*7,FA"H"Y&XG.;-0@@Y"Y&Y&A;**.H@FX&Y&Y ^;.;&0M&I%UUXG.**J$CM"H"H&A;.9,3L3L&Y&Y
+^:"(L3L3M&Y&XG.[&SL3L2YDQFA9.Y&Y@3X"H"I \@@@@@M&Y&Y&X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 129 129 129 63 63 36 255 0 0 194 194 0 0 127 0 194 194 194 64 64 64 168 172 168 168 228 240 208 212 208 255 255 255]; mask:((Depth1Image new) width: 20; height: 21; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G?0?G?0?''?0???0???0???0???0???0???0???0???0???0???0@G?0J H@P @@R&I R)JP:/JPR(JPR&JP') ; yourself); yourself]
+!
+
+fileIn20x20Icon3
+    "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 fileIn20x20Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#fileIn20x20Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileIn20x20Icon3'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 21; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CL3L0@@A&Y&Y&@8"HL@@@Y7]6Y NFZC @@FH"I&XC"H 0@@A&I&Y&@8Y&!!&@@Y"Y&Y
+NH"HR@A6X&DQXC!!&Y&P@]6H"H&@8"D]7]7]2Y&Y NFY'']7]7]6Y&XC!!HQ7]7]7I%UV@4!!DQD@G]"H"I L@@@@@A6Y&Y&X@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 127 0 63 63 36 64 64 64 168 228 240 194 194 0 208 212 208 255 0 0 255 255 255]; mask:((Depth1Image new) width: 20; height: 21; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@C?0?C?0?#?0?3?0?;?0?;?0?;?0?;?0???0???0???0?;?0?;?0@C?0@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+fileNew20x20Icon
+    "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 fileNew20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileNew20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class fileNew20x20Icon'
+        ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+Y&Y&Y&Y&Y&Y&Y&Y&Y&Y%Y&U&YVY&Y&Y&Y%Y%Y%Y&Y&Y!!DQDUYVU&Y&Y&XTQDDEUVY&Y&Y&EDQUUUUUU&Y&Y!!QDPTUUY&Y&Y&XTQDEPTEY&Y&Y&EDQEH%A%Y&
+Y&Y!!QDUDMPY%Y&Y&XTQDP4LFY&Y&Y&EDQCP3A&Y&Y&Y!!QDMCL0Y&Y&Y&XTP4L3LFY&Y&Y&ECP3L3A&Y&Y&Y!!MCL3L0Y&Y&Y&XP@@@@@FY&Y&Y&Y&Y&Y&Y&Y&
+Y&Y&Y&Y&Y&Y&Y&Y&Y&Y&Y&Y&Y&Xb') ; colorMapFromArray:#[0 0 0 64 64 64 168 172 168 168 228 240 248 252 248 255 0 0 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@DQ@@BR@A?T@A?8@A??@A?8@A?<@A?:@A?9@A?8@A?8@A?8@A?8@A?8@A?8@A?8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fileOpen20x20Icon
+    "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 fileOpen20x20 inspect
+     ImageEditor openOnClass:self andSelector:#fileOpen20x20
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileOpen20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CL0@@@@@@@@@@L@@0L@@@@@@@@@@@@3@@@BH"@@@@@CL0@@HQDRH"H @@@@
+@BEUTQDQD @@@@@!!UUUUUUH@@@@@HUT"H"H"H"H@@BERQDQDQDP @@@!!IDQDQDQB@@@@H$QDQDQDH@@@@BH"H"H"H @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[255 255 255 248 252 248 0 0 0 0 0 128 128 128 0 248 252 184]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@8@@AE@@@C@G G@O? @O?0@O?0@O??@O?>@O?<@O?8@O?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fileSave20x20Icon
+    "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 fileSave20x20 inspect
+     ImageEditor openOnClass:self andSelector:#fileSave20x20
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileSave20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L3H"H"H"@@@@@C]7H"QDIB@@@@@7QBH$QBQB@@@@M4P"IDP$P @@@C]DH"H"QDH@@@@7QDQDQDQB@@
+@@M4Y&Y&Y$P @@@C]!!DQDQU$H@@@@7XQDQEQYB@@@@M6DQDUEVP @@@C]!!DQTUU$H@@@@7XQEQUUX"@@@@M6DUEUUVD @@@BH"H"H"H"H@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[255 255 255 248 252 248 0 0 0 64 64 64 168 172 168 168 228 240 96 96 96 208 212 208]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@G?8@G?<@G?>@G?>@G?>@G?>@G?>@G?>@G?>@G?>@G?>@G?>@G?>@G?>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fitImageSizeToView20x20Icon
+    "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 fitImageSizeToView20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#fitImageSizeToView20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fitImageSizeToView20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@DQDQDQDQDP@@@PDQDQDQDQ@P@A@ADQDQDQDP@PD@@PDQDQDPD@@QDQ@ADQDQ@@DQDQD@@@@@@@@@DQDQDPQDQDQ@DQDQDQDDQUUTPADQDQDQAEUUUT@QDQ
+DQDPQEUUQ@DQDQDQDDQFQDPADQDQDQADQ$QD@QDQDQDPL3X3Q@DQDQDQDCL3L3LADQDQD@@@@@@@@@DQDQD@DQDQDP@QDQ@@DADQDQDA@@DA@ADQDQDQDP@P
+@@@QDQDQDQDA@@@ADQDQDQDQD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 0 0 137 0 174 218 230 0 206 0 133 60 36]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+8@A00@@0(@APE@J@C@L@G?>@A?8@A?8@A?8@A?8@A?8@A?8@A?8@A?8@G?>@C@L@E@J@(@AP0@@08@A0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+history20x20Icon
+    "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 history20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#history20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class history20x20Icon'
+	ifAbsentPut:[(Depth2Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J** @@@@IVU @@@@J**"@@@@IVU"@@@@J**"H@@@IVU"H@@@J**"H @@IVU"H @@J**"H @@@@@BH @@@***H @
+@@@@@H @@@B**( @@@@@@@ @@@@J** @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 129 194 194 194 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@G?0@G?0@G?<@G?<@G??@G??@G??0G??0G??0G??0G??0A??0A??0@_?0@_?0@G?0@G?0@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+inspectIt20x20Icon
+    "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 inspectIt20x20 inspect
+     ImageEditor openOnClass:self andSelector:#inspectIt20x20
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class inspectIt20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+"H"H"H"H"H"H"H"H"H @@H"H"H"H"H @M&D@"H"H"H"@M&]&XP"H"H"H FXWY&XH"H"H"@E!!]FY&DH"H"H AEWQFY&BH"H"H@[]$Y&Y "H"H"@.7Y&Y&LH"H
+"HB;Q1DWY "H"H K-D.:]&LH"H"@.4R;)1L@&X"H @@K. @@"@JX"H"HB:BH"H"@JX"H"@(H"H"H"@JX"HB "H"H"H"@JX"@BH"H"H"H"@BH@H"H"H"H"H"H
+"@"H"H"H"H"H"H"H"H"H"H"H"H b') ; colorMapFromArray:#[0 0 0 128 132 128 168 172 168 208 212 208 248 252 248 248 252 128 152 204 216 64 64 64 255 255 255 128 64 64 208 220 0 248 252 0]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@O@@@?0@A?8@A?8@C?<@C?<@C?<@C?<@G?8@O?8@_?<@_?N@C0G@C C G@A0F@@0L@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+inspectLocals20x20Icon
+    "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 inspectLocals20x20 inspect
+     ImageEditor openOnClass:self andSelector:#inspectLocals20x20
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class inspectLocals20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H@@BEDQDQDQDDR@@@$P"H$QDQDP @@H"%&T"DQDWH@@B%&Y&YRDQ\R@@@& VY&X!!E1\ @B%!!DX"FT''E7H@
+@&Y!!Y&Y&HW]2@@I&"F"HY"]7\ @BU(!!&Y&$'']7H@@BY&Y&Y"H"H"@@@%Y&Y&$ @@@@@@@"U&$"L0@@@@@@@BH"@BT0@@@@@@@@@@@BT0@@@@@@@@@@@BT0@@
+@@@@@@@@@BT0@@@@@@@@@@@BH@@b') ; colorMapFromArray:#[255 255 255 248 252 248 0 0 0 128 64 64 0 0 248 168 172 168 152 204 216 168 228 240 112 156 160 208 212 208]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@O??@O??@O??@O??@O??@O??@_??@_??@_??@_??@O??@O?@@G? @A90@@@8@@@\@@@N@@@F@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+leftArrow20x20Icon
+    "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 leftArrow20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#leftArrow20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class leftArrow20x20Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@@HB@ HB@ HB@ HB@ HB@ HB@ @@@ HB@ HB@ HB@ HB@ HB@ H@@ @B@ HB@ HB@ HB@ HB@ HB@@HA
+@@HB@ HB@ HB@ HB@ HB@ @B@PD@@ HB@ HB@ HB@ HB@ H@@ DA@P@@@@@@@@@@@ HB@ HB@@HA@PDA@ HB@ HB@ @B@ HB@ @B@PDA@PDA@PDA@PDB@@HB
+@ H@@ DA@PDA@PDA@PDA@PH@@ HB@ @B@PDA@PDA@PDA@PDA@ @B@ HB@ @B@PDA@PDA@PDA@PDB@@HB@ HB@ @B@PDA@PHB@ HB@ H@@ HB@ HB@ @B@PDA
+@@@@@@@@@@@B@ HB@ HB@ @B@PD@@ HB@ HB@ HB@ HB@ HB@ @B@P@B@ HB@ HB@ HB@ HB@ HB@ @B@@HB@ HB@ HB@ HB@ HB@ HB@ @@@ HB@ HB@ HB
+@ HB@ HB@ HB@ @B@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ @a') ; colorMapFromArray:#[0 0 0 100 128 255 128 128 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@M@B@@@F@J@N@@@^@J@>@@A??@C??@G??OO??@O??@G??@C??@A??E@>@H@^@@@N@@@F@N@B@A@@@@') ; yourself); yourself]
+!
+
+newDirectory20x20Icon
+    "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 newDirectory20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#newDirectory20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newDirectory20x20Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PDA@PDA@P@@@@@@@@@@@@@@@@@A@ HB@ HA@@@@@@@@@@@@@@@@@PHB@ HB@ HA
+@@@@@@@@@@@@@@DA@PDA@PDA@P@@@@@@@@@@@@D@@PHB@ HB@ HB@ HB@@@@@ HB@P@A@ HB@ HB@ HB@ @B@@H@@ HA@@DB@ HB@ HB@ H@@ H@@ H@@ D@
+@PHB@ HB@ HB@@HB@ @B@ H@@P@A@ HB@ HB@ HB@ HB@ HB@ HA@@DB@ HB@ HB@ HB@ HB@ HB@ D@@PHB@ HB@ HB@ HB@ HB@ HB@P@A@ HB@ HB@ HB
+@ HB@ HB@ HA@@DB@ HB@ HB@ HB@ HB@ HB@ D@@PHB@ HB@ HB@ HB@ HB@ HB@P@A@ HB@ HB@ HB@ HB@ HB@ HA@@DA@PDA@PDA@PDA@PDA@PDA@PD@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 0 0 0 0 0 255 255 0]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@DQ@O:R@O9T@_<8@??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? @@@@@@@@') ; yourself); yourself]
+!
+
+paste20x20Icon
+    "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 paste20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#paste20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class paste20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@3L@@@@@@@@@L3&YH3@@@@@@@5T9&RUR@@@@@CUG&UURP2@@@@@5Q2H"H$L @@@@MTQDQDQCH@@@@CUDQCL3L2@@@@@5QDP1DQL @@
+@@MTQDLX SD @@@CUDQCDQD2H @@@5QDP1"HFHH@@@MTQDLQDQXR@@@CUDQCFH"HX @@@5QDP1DVE&H@@@MTQDLX"H!!"@@@@H"H#E!!Y&X @@@@@@@6E&Y&H@
+@@@@@@L"H"H"@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[255 255 255 248 252 248 0 0 0 64 64 64 128 132 128 168 172 168 168 228 240 96 96 96 208 212 208 248 252 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@N@@A?0@C?8@G?<@G?<@G?<@G?<@G?<@G?>@G??@G??@G??@G??@G??@G??@C??@@G?@@G?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+printIt20x20Icon
+    "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 printIt20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#printIt20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class printIt20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@L3L3L3L0@@@@@CDQDQDQL@@@@@@1DQLQDS@@@@@@LQD3DQD @@@@@CDSLQDQH@@@@@@1ND&Y&R@@@@@@L8NY&Y$ @@@@@B"C&Y&YH@
+@@@@JHD3L9&R@@@@@( Q"GLQD @@@B"AFH\1DQH@@@H"H(!!3DQDR@@@@@@JGLQDQD @@@@@B\"H"H"H@@@@@I2@@@@@@@@@@@BH@@@@@@@@@@@H @@@@@@@@
+@@@B@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[255 255 255 248 252 248 0 0 0 64 64 64 128 132 128 168 172 168 168 228 240 208 220 0 248 252 128 32 220 32]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@_?@@_?@@_?@@_?@@_?@@_?@@_?@@_?@@??@A??@C??@G??@@_?@@_?@@8@@@0@@A @@A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+profileIt20x20Icon
+    "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 profileIt20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#profileIt20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary profileIt20x20Icon'
+        ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P@@@@@@@@@@@A@@@@@@@@@@@@DP@@@@@@@@@@@QL@@@@@@@
+@@@AD3DR@3L@@@@@DSLQHCLCL0@@@@@AD L3@3L@@@@@@R@3L0L3L@@@@@H@L3L@@C@@@@@ @CL3L3L0@@@@@@@CL3L3@@@@@@@@@3L3L0@@@@@@@@@CL0@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 248 252 128 208 220 0 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@A@@@C@@@F@@@N@@@^@@@>@@A?<@C??@G?? O?? A??0A??0A7?0A#? CC? BA?@@@\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+redo20x20Icon
+    "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 redo20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#redo20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class redo20x20Icon'
+	ifAbsentPut:[(Depth1Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@<@@ACD@B@,@B@\@B@<@AA<@A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@<@@ACD@B@,@B@\@B@<@AA<@A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+rightArrow20x20Icon
+    "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 rightArrow20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#rightArrow20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class rightArrow20x20Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ H@@ HB@ HB@ HB@ HB@ HB@ HB@ @@@ HB@ HB@ HB@ HB@ HB@ HB@@H@@ HB@ HB@ HB@ HB@ HB@ H@
+@PH@@ HB@ HB@ HB@ HB@ HB@ @A@PH@@ HB@ HB@ H@@@@@@@@@@@DA@PH@@ HB@ HB@ @B@ HB@ HB@PDA@PH@@ HB@ HB@@HA@PDA@PDA@PDA@PH@@ HB
+@ H@@ DA@PDA@PDA@PDA@PH@@ HB@ @B@PDA@PDA@PDA@PDA@ @B@ HB@@HA@PDA@PDA@PDA@PH@@ HB@ H@@ HB@ HB@ DA@PDB@@HB@ HB@ @@@@@@@@@@
+@PDA@ @B@ HB@ HB@ HB@ HB@ @A@PH@@ HB@ HB@ HB@ HB@ HB@@DB@@HB@ HB@ HB@ HB@ HB@ H@@ @B@ HB@ HB@ HB@ HB@ HB@ @@@ HB@ HB@ HB
+@ HB@ HB@ HB@@HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ @a') ; colorMapFromArray:#[0 0 0 100 128 255 128 128 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@D@@@F@H@G@@@G @@G0@O?8AO?<@O?>@O??@O??DO?>DO?<@O?8@@G0@@G @@G@@@F@@@D@J@@@@') ; yourself); yourself]
+!
+
+search20x20Icon
+    "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 search20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#search20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class search20x20Icon'
+	ifAbsentPut:[(Depth2Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@B@@@@@@@@@@@@@@@@@H@H@@@@@@@@@@DAA@@@@PHD@@@B@@ @@@@@@@@@A@@@P@@H@@B@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 212 208 200 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@A10@A10@A10@C;8@C;8@G?<@O?>@O?>@O?>@O;>@O >@O >@O >@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+shell20x20Icon
+    "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 shell20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#shell20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class shell20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@3L3L3L3L3L3L@LQDQDQDQDQDQ@CD"H"H"H"H"LP@1H"H"H"H"H#D@LRIDH"H"H"H1@CD$P"H"H"H"LP@1IDH"H"H"H#D@LRIDH"H"H"H1@CD"QBH"H"H"LP
+@1IDH$QBQDH#D@LRH"H"H"H"H1@CD3L3L3L3L3LP@1DQDQDQDQDQD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? @@@@@ B F82 H%J D%: B%B L$2 ') ; yourself); yourself]
+!
+
+shell20x20WithoutTextIcon
+    "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 shell20x20WithoutTextIcon inspect
+     ImageEditor openOnClass:self andSelector:#shell20x20WithoutTextIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class shell20x20WithoutTextIcon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3L3L3L3L3L3L@LQDQDQDQDQDQ@CD"H"H"H"H"LP@1H"P"H"H"H#D@LRIDP"H"H"H1@CD$IBP"H"H"LP
+@1ICP"H"H"H#D@LRIDP"H"H"H1@CD"MBP"H"H"LP@1IBP$H"H"H#D@LRIDP"H"H"H1@CD"IBH$QBQDLP@1L3L3L3L3L3D@@QDQDQDQDQDQ@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@_?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? O?? @@@@@@@@@@@@') ; yourself); yourself]
+!
+
+shellWithoutText20x20Icon
+    "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 shellWithoutText20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#shellWithoutText20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class shellWithoutText20x20Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3L3L3L3L3L3L@LQDQDQDQDQDQ@CD"H"H"H"H"LP@1H"P"H"H"H#D@LRIDP"H"H"H1@CD$IBP"H"H"LP
+@1ICP"H"H"H#D@LRIDP"H"H"H1@CD"MBP"H"H"LP@1IBP$H"H"H#D@LRIDP"H"H"H1@CD"IBH$QBQDLP@1L3L3L3L3L3D@@QDQDQDQDQDQ@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@_?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? _?? O?? @@@@@@@@@@@@') ; yourself); yourself]
+!
+
+tableViewWidget20x20
+    "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 tableViewWidget20x20 inspect
+     ImageEditor openOnClass:self andSelector:#tableViewWidget20x20
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class tableViewWidget20x20'
+	ifAbsentPut:[(Depth2Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C?O<?0@N,:3+@@?3?O<@@@@@@@@O<?3?@@:3+N,@C?O<?0@@@@@@@@?3?O<@C+N,:0@O<?3?@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O@@@OA#FO@@@OG??/G??/7??/G??/G??/G??/7??/G??/G??/G??/7??/G??/G??/@@@O@@@O@@@O') ; yourself); yourself]
+!
+
+undo20x20Icon
+    "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 undo20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#undo20x20Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class undo20x20Icon'
+	ifAbsentPut:[(Depth1Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@C0@BLH@CPD@C D@C0D@C8H@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@C0@BLH@CPD@C D@C0D@C8H@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+upArrow20x20Icon
+    "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 upArrow20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#upArrow20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class upArrow20x20Icon'
+        ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H@H"H"H"H"H"H H H"H"H"H"H"@!!D H"H"H"H"HBDQD H"H"H"H HQDQD H"H"H"@!!DQDQD H"H"HBDQDQDQD H"
+H HQDQDQDQD H"@@@@HQDR@@@@H"H"HBDQD H"H"H"H"@!!DQHBH"H"H"H HQDR@"H"H"H"HBDQD H"H"H"H"@!!DQHBH"H"H"H H"H"@"H"H"H"H@@@@@H"H"
+H"H"H"H"H"H"H"H"H"H"H"H"H"Hb') ; colorMapFromArray:#[0 0 0 100 128 255 128 128 128]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@J@@@@@F@@@O@@@_ O@?0@A?8@C?<@G?>@O??E_??(@?0@@?0@@?0N@?0A@?0@@?0@@?0K@@@A@@@@') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-22x22'!
+
+backward22x22_3DIcon
+    "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 backward3DIcon inspect
+     ImageEditor openOnClass:self andSelector:#backward3DIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class backward22x22_3DIcon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPUUUUUUUPUUT@EUUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPWUT*%UUPWWR*)UUPWUR*)UUP_5R*)UUP_UJ**UUP_UJ**UUPUUJ**UUPUPJ**UUP
+UR***)UPUTJ**UUPUUP*%UUPUUUAUUUPUUUUUUUPUUUUUUUPUUUUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@O @@O0@@O0@@O0@@O0@@O0@@_8@@_8@@_8@@?<@@?<@@?<@C??@C??@A?>@@_8@@G @@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+close22x22Icon
+    "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 close22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#close22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class close22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@ H@@@@@@@@@@@@B@ @@@@@@@@@@@@HB@ @@@@@@@@@B@ H@@@@@@@@@@@@@@ HB@@@@@@@B@ H@@@@@@@@@@@@@@@@B@ H@@@@B@ H@@@@@@@@@@@@@
+@@@@@@HB@ @B@ H@@@@@@@@@@@@@@@@@@@@@@ HB@ H@@@@@@@@@@@@@@@@@@@@@@@@B@ H@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ @@@@@@@@@@@@@@@@@@
+@@@B@ H@@ HB@@@@@@@@@@@@@@@@@@@B@ H@@@@B@ H@@@@@@@@A@@@@@@@B@ H@@@@@@@HB@ @@@@@@@@@@@@@B@ H@@@@@@@@@@ HB@@@@@@@@@@@@@ H@
+@@@@@@@@@@@B@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 255 255 0 0 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@A C@A0G@@8N@@\\@@N8@@G0@@C B@G0@@N8@@\\@@8N@A0G@A C@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+copy22x22Icon
+    "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 copy22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copy22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class copy22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@AUUUW@@@A???>@@@A???>O@@A???>@@@A???>@@@@@@?>@EUUU\?>@G???8?>@G???8?>@G???8?>@G???8?>@G???8?>IG???8?>@G???8**M
+G???8@@@G???8@@KG???8@@@G???8@@@G???8@@HN***(@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@_?<@_?<@_?<@_?<@_?<@_?<???<???<???<???<???<???<???<???<???<???<??8@??8@??8@??8@??8@??8@') ; yourself); yourself]
+!
+
+copyMenuItem22x22Icon
+    "This resource specification was automatically generated
+     by the ImageEditor of ST/X."
+
+    <resource: #image>
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self copyMenuItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copyMenuItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class copyMenuItem22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O@@@@@@@@@@AUUUW@@@@@@?>@EUUU\?>@G???8?>@G???8?>@G???8?>@G???8**@G???8@@IN***(@@@@@@@@@@M
+@@@@@@@@G???8@@KG???8@@@G???8@@@G???8@@HN***(@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@_?<@_?<???<???<???<???<???<???<???<??8@??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+currentDirectoryIcon
+    "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 currentDirectoryIcon inspect
+     ImageEditor openOnClass:self andSelector:#currentDirectoryIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class currentDirectoryIcon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(nil)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@D@@@@@@@@@@@@@DQ@@@@@@@@@@@@DQDP@@@@@@@@@@DQ@QD@@@@@@@@@DQIBDQ@@@@@@@@DQIDP!!DP@@@@@@DQIDQDHQD@@@@@
+DQIDQDQBDQ@@@@DQIDQDQDP!!DP@@DQIDQDQDQDHQD@D"IDQDQDQDQ@@A@RH$QDQDQDQD@@D@@@QDQDQDQDP@@@@@ADQD@@QDQ@@@@@@DQDP@ADQD@@@@@@QD
+Q@@DQDP@@@@@ADQDQDQDQ@@@@@@DQDQDQDQD@@@@@@QDQDQDQDP@@@@@ADQDQDQDQ@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 192 0 0 64 0 0 73 73 73 192 192 192]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A@@@C @A''0@A/8@A?<@A?>@A??@C?? G??0O??8_??<_??<_??<C?? C?? C?? C?? C?? C?? C?? C?? C?? ') ; yourself); yourself]
+!
+
+cut22x22Icon
+    "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 cut22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#cut22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class cut22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@DQDQDP0AL@@L@@@SL3L3CBL @B0@@AL3L3LL0B@@3@@@D3L3L0KB@@KB@@@SL3L3LL0@CL@@@AL3L3L0KB@,H@@@D3L3L3LL0L0@@@@S
+L3L3L0K@0 @@@AL3L3L3LL3@@@@@D3L3L3L03L@@@@@SL3L3L0CL0@@@@AL3L3L3@,CB@@@@D3L3L3@L0L0@@@@2H"H H"0 KBH @@@@@@KL3@@L3LH@@@@@
+CBCB@@K@K@@@@@@L@LH@@,@L@@@@@@0@0 @B0@0@@@@@CBC@@@C@K@@@@@@@3@@@@@3@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?<@_=\P_=<0_=,0_=50_>5 _>; _?[@_?[@_?.@_?.@_?N@_?[@_>[@_;;8_75<@F1,@D1$@D1$@F ,@C@X@@@@') ; yourself); yourself]
+!
+
+cutMenuItem22x22Icon
+    "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 cutMenuItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#cutMenuItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class cutMenuItem22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@ADP0@@@@L@@@CL3L3CB@@@B0@@@L3L3LL0@@@3@@@@@@@@@KB@@KB@@@QDQDQDL0ACL@@@AL3L3L0KB@,H@@@D3L3L3LL0L0@@@@S
+L3L3L0K@0 @@@AL3L3L3LL3@@@@@D3L3L3L03L@@@@@2H"H"H"CL0@@@@@@@@@@@@,CB@@@@@@@@@@@L0L0@@@@@@@@@H"0 KBH @@@@@@KL3@@L3LH@@@@@
+CBCB@@K@K@@@@@@L@LH@@,@L@@@@@@0@0 @B0@0@@@@@CBC@@@C@K@@@@@@@3@@@@@3@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@A@P@A 0@A 0_=50_>5 _>; _?[@_?[@_?.@_?.@_?.@_?[@@@[@@C;8@G5<@F1,@D1$@D1$@F ,@C@X@@@@') ; yourself); yourself]
+!
+
+debug22x22Icon
+    "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 debug22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#debug22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class debug22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HB@ HB@ @@@@@@@@@@@@@@@@@@@ HBAPTEAPTB@@@@@@@@
+@@@B@ @B@ HEAPTEAPTEAPH@@@@@@@HBAPTE@@HEAPTEAPTEAPTE@ @@@@@B@ TEAP@BAPTEAPTEAPTEAPH@@@@@@@HEAPT@@@@@@@@@@@@@@@@@@@@@@@HB
+APTE@@HBAPTEAPTEAPTE@ @@@@@@@ HB@ @B@ TEAPTEAPTE@ H@@@@@@@@@@@@@@@HBAPTEAPTE@ @@@@@@@@@@@@@@@@@@@@@B@ HB@ @@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 127 127 127 128 0 0 161 161 165 194 194 194 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@BA0@Q''H@L? @E?0@??8Q??<O??<C??<C??<O??<S??<@??8@G?0@L? @Q#X@FA @@@@@@@@@@@@') ; yourself); yourself]
+!
+
+debug22x22IconForBlackBackgound
+    "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 debug22x22IconForBlackBackgound inspect
+     ImageEditor openOnClass:self andSelector:#debug22x22IconForBlackBackgound
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class debug22x22IconForBlackBackgound'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@@@@@@@@FA X@@@@@
+@@@@@@@F@@@@A X@@@XFA @@A @@@@@@@@@@@@XF@@@FA XFA XF@@@@@@@@@@@@@@@@A @FA HB@ HB@ X@@@@@@@@@@@XFA XF@ HBAPTEAPTBA @@A @@
+@@XB@ XB@ HEAPTEA XEAPHF@@@FA HBAPTEA HEA XEAPXFAPTE@ @@@@@B@ XEAPXBAPXFAPTEAPTEAPH@@@@@A HEAPTFA XFA XFA XFA XF@@@FA HB
+A TEA HBAPTEAPTEA XE@ @F@@@F@ HB@ XB@ TEA XEAPXF@ X@@@@@@@@FA XFA HBAPXFAPTE@ X@@@@@@@@@@@@@A XFA XB@ HB@ X@@@@@@@@@@@@@
+A X@@@XFA XFA X@@@@@@@@@@@@@A @@@@XF@@@@A X@A X@@@@@@@@@@@@@A X@@@@@@@@FA @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 127 127 127 128 0 0 161 161 165 194 194 194 255 0 0 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@BA0@Q''H@L? @E?0@??8Q??<O??<C??<C??<O??<S??<@??8@G?0@L? @Q#X@FA @@@@@@@@@@@@') ; yourself); yourself]
+!
+
+delete22x22Icon
+    "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 delete22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#delete22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class delete22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@DQDQDQDQL@@@@@@SL3L3L3L @@@@@AL3L3L3L2@@@@@@D3L3L3L3H@@@H@@SL3L3L3L @@H@@AL3L3L3L2@@@@@@D3L3L3L3@@@@@@@S
+L3L3L0@ @@@ @AL3L3L3@@@@@@@@D3L3L3L@D@@@H@@SL3L3L0@QL3H @AL3L3L3@A@3LB@@D3L3L3L@DC@0H@@2H"H"H @PLC@ @@@@@@@@@A@0LB@@@@@@
+@@@@DC@0H@@@@@@@@@@PLC@ @@@@@@@@@A@0LB@@@@@@@@@@DS@2H@@@@@@@@@HAL3HB@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?<@_?<@_?<P_?<P_?<X_?<X_?<H_?0H_?O<_?XL_?_<_?_<_?_<_?_<_?_<_?_<@@_<@@_<@@_<@@_<@@_<@@G0') ; yourself); yourself]
+!
+
+displayScreen22x22Icon
+    "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 displayScreen22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#displayScreen22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class displayScreen22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y&Y&Y&Y&Y&&P@@A&Y&Y&Y&Y&ZY@@@FXXUUV***)9$0@@Y!!H"H+.AF''&S@@A&,"H"H+DZ^YL@@F
+Z2H"H",Q)9$0@@Y(H"J;-QF''&S@@A&E[.HUQDZ^YL@@FXUUUUUDQ*)$0@@Y!!UUUUTQF*&S@@A&(QF$*$QD^YL@@I&Y&Y&Y&Y&Y$0@@&Y&Y&Y&Y&Y&S@@@@L3
+M)&YL3L3L@@@@@@F&Y$3@@@@@@@@ZY&Y&Y&S@@@@@@A)&Y&Y&YL@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 64 80 96 80 112 112 64 64 64 48 64 80 64 96 96 128 128 128 48 80 80 80 96 96 112 112 112 64 80 80 80 96 112]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@G??0G??0G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8A??8@G<@@??@@??@@@@@@@@@') ; yourself); yourself]
+!
+
+down22x22Icon
+    "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 down22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#down22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class down22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUT@AUUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUP
+UT@*$AUPUV***%UPUU***UUPUUZ*)UUPUUV*%UUPUUU*UUUPUUUYUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@A?>@A?>@@?<@@_8@@O0@@G @@C@@') ; yourself); yourself]
+!
+
+downRight22x22Icon
+    "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 downRight22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#downRight22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class downRight22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPP@EUUUUPR*UUUUUPR*UUUUUPR*UUUUUPR*UUUUUPR*UUUUUPR*UUUUUPR*UUUUUPR*UUUUUPR*UUT%UPR*UUT)UPR*UUT*UPR*P@@*%PR*****)P
+R******PR*****)PR*****%PQUUUU*UPUUUUT)UPUUUUT%UPUUUUTUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_ @@_ @@_ @@_ @@_ @@_ @@_ @@_ @@_ @@_ L@_ N@_ O@_?? _??0_??8_??8_??0_?? @@O@@@N@@@L@') ; yourself); yourself]
+!
+
+editor22x22Icon
+    "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 editor22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#editor22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class editor22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+*******************************("H"H"H"H"J(@**"EUUU%UUUU@@^**HUUUVUUUU@@]:*(!!UUUYUUUT@A7**"FY&Y&Y&X@]7^**HUUUVUU@@]7\Z*(
+!!UUUYU@@]7\R**"EUUU%T@A7]1J**HY&Y&XC]7\Q&**(!!UUU(3M7\Y&***"EUUU#L3L2QJ***HY&Z#L3L6)D***(!!&Y*L3L6Z$R***"EUUP3M&ZEQJ***HUU
+RRY(UUUD***("*)J*****$R***"J)J******QJ***HUUUZUUUUUD***TQDQDQDQDQDR***************(b') ; colorMapFromArray:#[240 160 80 192 80 0 64 0 0 240 208 160 0 0 0 240 240 240 192 192 192 240 128 0 208 208 208 48 48 48 160 160 160]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@G??LG??<G??<G??<G??<G??<G??<G??<G??8G??0G??0G??0G??0G??0G??0G??0G??0G??0O??0@@@@') ; yourself); yourself]
+!
+
+font22x22Icon
+    "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 font22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#font22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class font22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@!!X @@@@@@@!!X @@@6H@@@@@@DP6H@@@Y!!H@@@@@QDY"@@@BY"@@@@ADQBY"@@@FX @@@@@DQCX @@@6H@@@@@QEP6H@@@@ @@@@
+ADUDP @C@@@@@@@DQSH@@@L @@@@@@QEL @@@2@@@@@@ADT2@@@CH@@@@@@DQSH@@@L @@@@@@QEL @@@2@@@@@@QDT2@@@CH@@@@@QDQSH@@@@ @@@@@DQE
+P @@@@@@@@@@@DQ@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 150 150 150 213 213 213 215 48 48 134 54 54 240 240 240]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@G @OG0@O''<@O7>@O<?@A>? A?? A??@A<?@A<>@A<>@A<>@A=>@C?>@G<>@C<\@@8D@@H@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+forward22x22_3DIcon
+    "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 forward22x22_3DIcon inspect
+     ImageEditor openOnClass:self andSelector:#forward22x22_3DIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class forward22x22_3DIcon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPUUUUUUUPUUUUUUUPUUUQUUUPUUTJUUUPUUB*)UUPUP***%UPUQU*%UUPUUT*%UUP_UT*%UUP_UT*%UUP_5R*)UUPWUR*)UUPWWR*)UUPWUJ**UUP
+UUJ**UUPUT***%UPUT***%UPUR***)UPUUUUUUUPUUUUUUUPUUUUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@C@@@O0@@?<@C??@C??@@O0@@O0@@O0@@_8@@_8@@_8@@?<@@?<@A?>@A?>@C??@A??@@@@@@@@@') ; yourself); yourself]
+!
+
+help22x22Icon
+    "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 help22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#help22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class help22x22Icon'
+	ifAbsentPut:[(Depth1Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@O0A@_8@@?<@@8\C@8\A@@\@@@8@@A8@@C0@@G @@G@@@G@@@G@C@@@@@@@@@G@@@G@@@G@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 127 0 127]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@O0@@_8@@?<@@8\@@8\@@@\@@@8@@A8@@C0@@G @@G@@@G@@@G@@@@@@@@@@@G@@@G@@@G@@@@@@@@@@') ; yourself); yourself]
+!
+
+home22x22Icon2
+    "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 home22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#home22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class home22x22Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@D@@@@@@@@@@@@@DQ@@@@@@@@@@@@DQDP@@@@@@@@@@DQ@QD@@@@@@@@@DQH2DQ@@@@@@@@DQH4L!!DP@@@@@@DQH4QCHQD@@@@@
+DQH4QDP2DQ@@@@DQH4QDQDL!!DP@@DQH4QDQDQCHQD@D"H4QBH"ADP0@A@RH#QBH"H QC@@D@@@MDIUUUADL@@@@@@4P%UUTDP0@@@@@CQBUUUPQC@@@@@@MD
+IUUUADL@@@@@@4P%UUTDP0@@@@@CQBUUUPQC@@@@@@MDIUUUADL@@@@@@4P%UUTDP0@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 192 0 0 64 0 0 128 128 128 192 192 192 100 128 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A@@@C @A''0@A/8@A?<@A?>@A??@C?? G??0O??8_??<_??<_??<C?? C?? C?? C?? C?? C?? C?? C?? C?? ') ; yourself); yourself]
+!
+
+keyboardMapping22x22Icon
+    "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 keyboardMapping22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#keyboardMapping22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class keyboardMapping22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@*@@@@@@B%P@@@@@JUT@@@@@)TE@@H@BUTQP@@@ETTQ\@@@JTTU?@@@J$@W<@@@B)U_0@@@@*U?@@@@@J''<@@@
+@@B''0@@@@@@''@@@O@@@D@@@@@@@@@@@K@@@@@@@@@@@@@@@M@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 128 128 128 192 192 192]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@G@@@O @@_0@@?8@A?<@C?>@G??@G?? G??@C?>@A?<@@?8@@_0@@O @@G@@@B@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+languages22x22Icon
+    "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 languages22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#languages22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class languages22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B (JB (@@@@@@@@F <O@@@@@@@@@@@ZJB (GA0\GA0(JB VE @@@@@@@@@@
+F" (JA0\GA0\GB (E!!X@@@@@@@@@@A((JA0\GA0\GA0\JA(Z@@@@@@@@@@@ZJB \GA0\GA0\GB (J@@@@@@@@@@@F" (@@X\G@X@GA0(JB B@@@@@@@@@A((
+J@@FB0,F@@(J@@(J@ @@@@@@@@@ZJB @@@XFB0X@@@TEAPTE@@@@@@@@F" (@ALFA!!4S@0LBAPTEB@@@@@@@@AT@@@@]H2L#GP8QDQLSG2@WE0$@@@@U@@@@
+GQ<_G1<QDQDSD1<_E1\I@@@@A@@@@AL]GRLSD!!HMF1,_G1<_BP@@@@@@@@@SFQ$YFRT%EALSHRP^G $@@@@@@@@@D1$"H"H%IQPSD2D$G"HI@@@@@@@@@AP"
+H!!$"H"H"H"H"H"H"A0@@@@@@@@@PFA LA2H"CBH"I!!$"H 0@@@@@@@@@C@0L@@@GA00GA00LA0\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 0 0 32 32 32 48 48 48 49 48 49 54 54 54 69 69 69 75 67 22 82 82 82 85 14 14 89 89 89 105 105 105 106 88 25 110 19 19 113 19 19 131 129 131 134 122 39 149 25 25 149 26 26 158 27 27 158 140 45 164 161 164 164 161 172 165 43 43 177 161 52 196 175 0 197 194 197 204 36 36 204 75 75 205 36 36 205 113 38 212 66 66 216 81 81 223 72 72 227 202 66 231 120 120 231 123 123 255 129 0 255 238 162 255 251 229 255 255 255]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O \@??>@??>@??>@??>@???0???0???0???8???8???8???89??81??81??81??81??8A9?0A@@@A@@@A@@@') ; yourself); yourself]
+!
+
+left22x22Icon
+    "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 left22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#left22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class left22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUPUTUUUUUPURUUUUUPUJUUUUUPT*P@@@@PR******PJ******P*******PZ******PV*UUUUUPU*UUUUUP
+UZUUUUUPUVUUUUUPUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@A @@C @@G @@O??<_??<???<???<_??<O??<G @@C @@A @@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+leftDown22x22Icon
+    "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 leftDown22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#leftDown22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class leftDown22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPU@@@@@@PUJ****)PUJ****)PUJ****)PUJ****)PUJ)UUUUPUJ)UUUUPUJ)UUUUPUJ)UUUUPUJ)UUUUPUJ)UUUUPUJ)UUUUPUJ)UUUUP@J*@UUUP
+***)UUUPZ**%UUUPV**UUUUPU*)UUUUPUZ%UUUUPUVUUUUUPUUUUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@G??8G??8G??8G??8G??8G??8G8@@G8@@G8@@G8@@G8@@G8@@G8@@??@@??@@_>@@O<@@G8@@C0@@A @@@@@@') ; yourself); yourself]
+!
+
+load22x22Icon
+    "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 load22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#load22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class load22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPUUUUU?UPUUUUW*5PU???>*/PU:****)PUUUUUUZPP@@@@@EPS?????&PS?????%PS?????&PS?????%PT?????9PT?????9PT?????9PT?????9P
+T?????9PT?????9PUO????>PUO????>PUO????>PU:*****PUUUUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@G@@@O G??8O??<O??<_??<???<???<???<???<???<_??<_??<_??<_??<_??<_??<O??<O??<O??<O??<O??<') ; yourself); yourself]
+!
+
+loadFromMethod22x22Icon
+    "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 loadFromMethod22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#loadFromMethod22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class loadFromMethod22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQDQDQDQDQDQDQDQDQDQDQDQD3LQDQDQDQDQDQD2H#DQDQL3L3L3L2H"H3DQD2H"H"H"H"H"DQDQDQDQDQDQDQH!!D@@@@@@@@@@@@QDPL3L3L3L3L3L!!HQ@3
+L3L3L3L3L2DQDCL:(3L3N*L3HRDPL3**(3N*(3L!!DQDCL:*#N*N*L3HQDPL3**(:L:(3L!!DQ@3N*N*(3*#L2DQDCL:(3(3N*L3HQDPL3*#L3L:(3L!!DQ@3N*
+L3L3*#L2DQDPL3*#L3N*(3L!!DQ@3N*L3L3*#L2DQDCL3L3L3L3L3HQDSH"H"H"H"H"H!!DQDQDQDQDQDQDQDb') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170 255 0 0 255 255 0 0 255 0 0 0 255 0 255 255 255 0 255 127 127 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@G@@@O G??8O??<O??<_??<???<???<???<???<???<_??<_??<_??<_??<_??<_??<O??<O??<O??<O??<O??<') ; yourself); yourself]
+!
+
+loadImage22x22Icon
+    "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 loadImage22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#loadImage22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class loadImage22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQDQDQDQDQDQDQDQDQDQDQDQD3LQDQDQDQDQDQD2H#DQDQL3L3L3L2H"H3DQD2H"H"H"H"H"DQDQDQDQDQDQDQH!!D@@@@@@@@@@@@QDPL3L3L3L3L3L!!HQ@3
+L3L3L3L3L2DQDCMDY''\3L3L3HRDPL4Q&]3L3L3L!!DQDCMU&X 3L3L3HQDPL5VY"CL3L3L!!DQ@3QFY7L3L3L2DQDCMDY''\3L3L3HQDPL5VY"CL3L3L!!DQ@3UY
+&HL3L3L2DQDPL4Q&]3L3L3L!!DQ@3QFY7L3L3L2DQDCL3L3L3L3L3HQDSH"H"H"H"H"H!!DQDQDQDQDQDQDQDb') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170 255 0 0 255 255 0 0 255 0 0 0 255 0 255 255 255 0 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@G@@@O G??8O??<O??<_??<???<???<???<???<???<_??<_??<_??<_??<_??<_??<O??<O??<O??<O??<O??<') ; yourself); yourself]
+!
+
+make22x22Icon1
+    "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 make22x22Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#make22x22Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class make22x22Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FA @@@@@@@@@@@@@@@@@@A XF@@@FB (F@@@@A X@@@@@@@@@A (JB XFB (JB XFAP(GA @@@@@@
+@@XJB (JB (JB (JB (JA0X@@@@@@@@A@P(JB (JB (JB (JA0TE@@@@@@XFA XFB (JA0TA@P(JB TEA XF@@XGB (JB (JA0TA@@@AB (JB (JB XFB (J
+B (JB \AAP\A@P(JB (JB (E@PXFA (JB (JAPTEAP\JB (EAPTE@PDA@PDFB (JB (JB (JB (EAPDA@PDA@PDFB (JB (JB (JB (JB \E@PDA@@DFB (J
+B (JB (JB (JB (JB XA@@@BA@(JB HBB (JB (DA@PJB (F@@@@@@DGA0DA@PXJB (F@PDAA XF@P@@@@@A@PDA@PDFB (JA DA@PDA@PD@@@@@@PDA@PDA
+A \JA0XA@@DA@PDA@@@@@@@A@PD@@@DFA XA@@@@@PDA@@@@@@@@@@@@@@@A@PDA@P@@@@@@@@@@@@@@@@@@@@@@@PDA@PD@@@@@@@@@@@@@@@@@@@@@@@@A
+@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 48 48 48 56 59 56 64 68 64 88 92 88 128 128 128 160 160 160 192 192 192 216 219 216 239 244 239 248 252 248]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C@@C''#@G?? G?? G?? _??8???<???<???<???<???<_??8_??0O??0O??0O?70GO# @O @@O @@G@@@@@@') ; yourself); yourself]
+!
+
+make22x22Icon2
+    "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 make22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#make22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class make22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0KC 0KC@@@@@@@@@@@@@@@@@@NC@,NB00LB00KC@0@@@@@@@@@@@@@C 8NC@0NC 0LC 0L@@@@@@@@@@@@
+@@@@C@8NC@0NC 0@@@@@@@@@@@@@@@8NC 8NC@@@C@0NC 0L@@@@@@@@@@@MCP@NC 8@@@8NC@@NC @@@@@@@@@@CP@MC 8NC 8NC@8N@@8@@@@@@@@@@@@L
+CP8NC 8NC 8NC 4@@@@@@@@@@@@@C@4@C @NC @M@@8M@@@@@@@@@@@@@@0@C@4@C 8@CP4@CP@@@@@@@@@@@@@@@@0M@@4M@@4M@@@@@@@@@@@@@@@@@@@L
+CP@NC @MCP@@@@@@@@@@@@@@@@@@@@@@C 8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 48 48 48 56 59 56 64 68 64 88 92 88 128 128 128 160 160 160 192 192 192 216 219 216 239 244 239 248 252 248 88 88 88 184 252 248 0 128 128 0 192 192]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@O0@A?>@C??@C??@C??@G?? G?? G?? G?? C??@C??@C??@@?<@@?<@@G @@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+memory22x22Icon
+    "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 memory22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#memory22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class memory22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@?0@@@@@@@@@@@L;8;!!0@@@@@@@@@VL0W\,@@@@@@@L<T,W]43@@@@@@I,"8Z(R-10@@@@I<,,Z**Q78P@@@L24DZ****E0H@@@
+<,EM7Z**E00P@LTR9M7]7ZE0H50@=RE0C]7]E0BF?0<,E0@@C]Q0HREPBK-0@@@@Q0T?H\@KTA4@@@^-4_=\@@H A@@@^ JOG<@@@ID@P@^ GE3O@@@@AP@D
+R EO:O0@@@@@T@4PT%3,@@@@@@@E4G_58%@@@@@@@@AZ\QGL0@@@@@@@@@@@1<@@@@@@@@@@@@@D@@@@@@@b') ; colorMapFromArray:#[0 0 0 80 80 80 160 160 160 240 240 240 64 64 64 144 144 144 224 224 224 48 48 48 128 128 128 208 208 208 32 32 32 112 112 112 192 192 192 16 16 16 96 96 96 176 176 176]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@A @@G>@@G?@@_? @??0A??0C??8C??8O??<O??<_??8_??8_??0_?? O??@G??@C?<@A?8@@?8@@C @@A@@') ; yourself); yourself]
+!
+
+new22x22Icon
+    "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 new22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#new22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class new22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@AUUUUP@@A????2@@A????2 @A????0@@A?????8@A?????8@A?????8@A?????8@A?????8@A?????8@A?????8@A?????8@A?????8@A?????8@
+A?????8@A?????8@A?????8@A?????8@A?????8@C*****(@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?>@_??@_?? _??0_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8') ; yourself); yourself]
+!
+
+newMenuItem22x22Icon
+    "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 newMenuItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#newMenuItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newMenuItem22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@ADP@@@@@@@@@CL3L3@@@@@@@@@@L3L3L@@@@@@@@@@@@@@@@H@@ @B@@QDQDQDQFAFAJ@@AL3L3L3L3 8N@@@D3L3L3L3L8"B@@@S
+L3L3L3"H"H"H@AL3L3L3L3NH  @@D3L3L3L3NC 8@@@2H"H"H"JBJBJ@@@@@@@@@B@@H@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@_??<_??8_??8_??8_??<_??8_??8_??8_??<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+openBreakpointBrowser22x22Icon
+    "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 openBreakpointBrowser22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#openBreakpointBrowser22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class openBreakpointBrowser22x22Icon'
+        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CDGAP(VF3\@@@@@@@@@@@@@@@@@@@4XMS4>N3@YD4TFA @@@@@@@@@@@A1FP$H@S4=OS1(JQT8F@@@@@@@@
+@A5BP D_G4=OS4=OL@]NS X@@@@@@CL/P$=O@T=OS4=OS4H0H49NA @@@@@%NT=OS1=OS4=OS4=OL@QNS X@@@@@GS9OS4<_S4=OS4=OS4PI@@@@@@@@@A5D
+S4=OS4=OS4=OS4=DC49NA @@@@@]O!!<_G1<A@PDA@PDAQ@=NA X@@@@@G#YOS4=OS4=OS4=OS4PEA @@@@@@@CH''S4=OG4=OS4=OS4<4C@@@@@@@@@@@DSAO
+S0EOS4=OS4=BC$T@@@@@@@@@@ATQM!!<AG1=OS4=BIB0@@@@@@@AVSTDTBAD(N$IBP#P4IB4@@@@@@@AUT5I@D @@E ,PE2X$K#0@@@@@@@AUUEIIJ"H@@@@@
+@@@@@@@@@@@@@@@@UEIIJ2D@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 64 64 64 64 64 64 127 127 127 127 127 175 127 128 175 128 0 0 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 159 159 192 159 160 192 159 160 207 159 160 208 160 64 64 160 64 64 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 161 161 165 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 192 192 208 192 239 255 192 240 255 194 194 194 207 143 95 207 207 191 207 223 239 207 239 240 207 255 255 208 208 223 208 224 239 208 255 255 217 217 217 223 128 63 223 255 255 239 239 240 239 255 255 240 207 144 255 0 0 255 64 64 255 64 64 255 64 64 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@BA0@Q''H@O? @_?0@??8Q??<O??<C??<C??<O??<S??<C??8C??0A?? A??XO?? _O<@?@@@>@@@') ; yourself); yourself]
+!
+
+openBreakpointBrowserIcon
+    <resource:#programImage>
+    ^ self openBreakpointBrowser22x22Icon
+!
+
+paste22x22Icon
+    "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 paste22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#paste22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class paste22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@KLH@@@@@@@@@@@CL3@@@@@@@@@@@CBH"0@@@@@@@@QD,3L3BDQ@@@@@ADQDQDQDQD@@@@@DQDQDQDQDP@@@@@@@@@@DQDQ@ADQDQDQDS@QDQD@D3
+L3L3L3HADQDP@SL3L3L3L DQDQ@AL3L3L3L2@QDQD@D3L3L3L3HADQDP@SL3L3L3L DQDQ@AL3L3L3L2@QDQD@D3L3L3L3HADQDP@SL3L3L3L DQDQ@AL3L3
+L3L2@QDQD@D3L3L3L3HADQDP@SL3L3L3L DQDQ@AL3L3L3L2@@@@@@L"H"H"H"H@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@<@@@<@@??<@??<@??<@??<???<???<???<???<???<???<???<???<???<???<???<???<???<???<??8@??8@') ; yourself); yourself]
+!
+
+pasteMenuItem22x22Icon
+    "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 pasteMenuItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#pasteMenuItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class pasteMenuItem22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@KLH@@@@@@@@@@@CL3@@@@@@@@@@@CBH"0@@@@@@@@QD,3L3BDQ@@@@@ADQDQDQDQD@@@@@DQDQDQDQDP@@@@@@@@@@DQDQ@ADQDQDQDS@QDQD@D3
+L3L3L3HADQDP@SL3L3L3L DQDQ@AL3L3L3L2@QDQD@D3L3L3L3HADQDP@SL3L3L3L DQDQ@CH"H"H"H"@QDQD@@@@@@@@@@ADQDP@@@@@QDQDQDQDQ@@@@@A
+DQDQDQDQD@@@@@DQDQDQDQDP@@@@@QDQDQDQDQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@<@@@<@@??<@??<@??<@??<???<???<???<???<???<???<???<???<???<@??<@??<@??<@??<@??<@@@@@@@@') ; yourself); yourself]
+!
+
+printer22x22Icon
+    <resource:#programImage>
+    ^ self printer22x22Icon1
+!
+
+printer22x22Icon1
+    "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 printer22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#printer22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class printer22x22Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DA@PDA@PDA@PDA@PDA@@@@@@@@@@D@@@@@@@@@@@@@@@@A@@@@@@@@@@@A@@@A@PDA@@@A@PD@@P@@@@@@
+@@@A@@@@@@@@@@@@@@@@@P@@@@@@@@@@@P@A@PD@@PD@@PD@@PDA@P@@@@@@@P@@@@@@@@@@@@@@@@DD@PPA@@@@@PDA@PDA@PDA@PDA@PDD@PPA@P@@@PPD
+A@PDA@PDA@PDA@PD@PPAAPD@@@DA@PDA@PDA@PDA@PDA@PDAAPTA@@@AAPTEAPTEAPTEAPTEAPTE@PTE@P@@@PTEAPTEAPTEAPTB@ HEAPDEAPD@@@DEAPTE
+APTEAPTE@ HBAPTAAPTA@@@AAPTEAPTEAPTEAPTEAPTE@PTA@@@@@PTEAPTEAPTEAPTEAPTEAPDA@@@@@@DA@PDA@PDA@PDA@PDA@PDA@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 255 255 0 0 0 255 255 0 129 129 129 194 194 194 105 133 190]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@??0A?? A?? C??@C??0G??8O??8_??8_??8_??8_??8_??8_??0_?? _??@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+printer22x22Icon2
+    "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 defaultIcon inspect
+     ImageEditor openOnClass:self andSelector:#defaultIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class printer22x22Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+QDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ@@@@@@@@@ADQDQ@QDQDQDQDADQDQDAD@@AD@@PDQDQD
+ADQDQDQDPDQDQDPD@@P@P@P@@DQDPDQDQDQDQ@DAADP@@@@@@@@@DA@DPADQDQDQDQDA@0Q@@@@@@@@@@@@3AD@3L3L3L2H#LCADPCL3L3L3H"L0ADQ@@@@@
+@@@@@@ADQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDPb') ; colorMapFromArray:#[0 0 0 194 194 194 255 255 0 105 133 190 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@??0A?? A?? C??@C??0G??8O??8_??8_??8_??0_?? _??@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+reload22x22Icon
+    "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 reload22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#reload22x22Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class reload22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@UT@@@@@EU@D@@@@UT@@@H@AUP@@@@@EU@@@@@@EU@@@@E@EU@@@@@@EU@@@@@AUUT@@@@@UUP@@@@@EU@@@@@@AT@@@@@@@P@@@@H@@@@@@@@
+@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@G@@@@@@@J@@@@@@@I@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 129 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G<C@_?C@??#A?C3C>@;G<@KG<@CG<@C??$C_?NCO>_CG<?#C9?3A3?;@''??@@?#P@?C\A?COC>CG?<CC?8C@? C') ; yourself); yourself]
+!
+
+removeTab22x22Icon
+    "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 close22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#close22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class removeTab22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@ H@@@@@@@@@@@@B@ @@@@@@@@@@@@HB@ @@@@@@@@@B@ H@@@@@@@@@@@@@@ HB@@@@@@@B@ H@@@@@@@@@@@@@@@@B@ H@@@@B@ H@@@@@@@@@@@@@
+@@@@@@HB@ @B@ H@@@@@@@@@@@@@@@@@@@@@@ HB@ H@@@@@@@@@@@@@@@@@@@@@@@@B@ H@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ @@@@@@@@@@@@@@@@@@
+@@@B@ H@@ HB@@@@@@@@@@@@@@@@@@@B@ H@@@@B@ H@@@@@@@@A@@@@@@@B@ H@@@@@@@HB@ @@@@@@@@@@@@@B@ H@@@@@@@@@@ HB@@@@@@@@@@@@@ H@
+@@@@@@@@@@@B@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 255 255 0 0 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@A C@A0G@@8N@@\\@@N8@@G0@@C B@G0@@N8@@\\@@8N@A0G@A C@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+right22x22Icon
+    "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 right22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#right22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class right22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUPUUUUUIUPUUUUUJUPUUUUUJ%P@@@@@J)PJ******PJ****** J******PJ*****)PEUUUUZ%PUUUUUJUP
+UUUUUIUPUUUUUEUPUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@F@@@G@@@G ???0???8???<???<???8???0@@G @@G@@@F@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+save22x22Icon
+    "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 save22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#save22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class save22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+AL3L3L@PM3L3L0?PML3L3L=PM3L3L0=PML3L3L?PM3L3L0?PML3L3L?PM3L3L0?PML3L3L?PM3L3L0?PML3L3L?PM@@@@@?PO??????PO??????PO??????P
+O=UUUU?PO=???[?PO=5O?Z?PO=6O?Z?PO=6O?Z?PO=0O?Z?P5U***U5P') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???8') ; yourself); yourself]
+!
+
+saveAsMethod22x22Icon
+    "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 saveAsMethod22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveAsMethod22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class saveAsMethod22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@A@0LC@0LC@0@@DCD0LC@0LC@0@3LPLPLD@0LCP0LCLQ@1LCQ@LCQ@L@L1DCDCADPCQDLC@3LPLS@4QDQDPC@CL1@1@0QCQ@QC@0L3DCD0MD@0MD@0@3LPLP
+LDP0LDP0LCL1@1LCQ@LCQ@L@L3DCDC@0LC@0LC@3LPLP@@@@@@@@@CL1@3L3L3L3L3L3L3DCL3L3L3L3L3L3LPL3L3L3L3L3L3L1@3L1DQDQDQDQL3DCL3D3
+L3L3LRL3LPL3LSDPL3L1H#L1@3L1LR@3L3D"L3DCL3D1HCL3LRH3LPL3LS@@L3L1H#L1LQDQH"H"H"DQLQDb') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170 127 127 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???8') ; yourself); yourself]
+!
+
+start22x22Icon
+    "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 start22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#start22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class start22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@N8@@@@@@@@@@@@N<^@@@@@@@@@@@@;.;.;.;.@@@@@@C/G @@@@8^@@@@@N<^@@@@@A@@@@@@;18@@@@@D@@@@@C.;.;.; @P@@@@@N
+<^@@@@@@@@@@@@;18@@@C!!G.@@@@C/G @@@@G>@@@@@N;.;.; @_8@@@@@;18@@@@A? @@@@C/G @@@@G>@@@@@N<^@@@@@_8@@@@@;.;.;.@A? @@@@C/G
+@@@@G>@@@@@N<^@@@@@_8@@@@@;18@@@@@@@@@@@C.; @@@@DQ@@@@C ; 8@@@A&X@@@C 8@8N@@@"H"@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@AC@DAG DAG?<@G N@G N@G N@G?.@G N@G _@G _@G?_@G _@G _@G _@G?_@G ? G!!?0G!!?0G!!.PKQNPT(_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+startNewSystemBrowserIcon22x22
+    "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 startNewSystemBrowserIcon22x22 inspect
+     ImageEditor openOnClass:self andSelector:#startNewSystemBrowserIcon22x22
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class startNewSystemBrowserIcon22x22'
+        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NP(JB (JB (JB (9@@@@@@@@@@@@@@*Q$YFQ$YFQ$YFQB @@@@@@@@@@@@@J$V1,[F1,[F1,[@(@@@@@@@@@@@@@B)E,[F1,[F1,[F0J@@@@@@@@@@@@@@*Q
+[F1,[F1,[F1,B @@@@@@@@@@@@@JNQHRD!!HRD!!HRD (@@@@@@@@@@@@@NP(JB (JB (JB (9@@@@@@@@@@@@@@@@@@@@@@@@QATTIR)P@@@@@@@@@@@@@@@@
+@@@@F2]HVEQ@JBI''@@@@@@@@@@@@@@@@J6&Q XFA UT)FF\JB (JB @@@@@@KFI[B0,H@ LGA TU_9FQ$S$@@@@@L5I1V0,CB@XMCPXMAQLA@PDR@@@@@B1Y
+VT8KB@4NC 8NCPTW@PDAD @@@@@,Y$-CB0XMC0<OC08EGQHRD!!H@@@@@KE%UP0,LC!!DQDQ@OAQ4JB (J@@@@@B5IVT4KB0,KB0,KB0,T@@@@@@@@@@AEMU%M
+B0,KB0,KB0-GF (JB (@@@@@@A=@ST5MS$9NS$9+GF^Q$YD9@@@@@@@$G4%&Y&)1]XV@L#1/[6=/D @@$HI]H1X_M%M&Z&MQL#6B[6=/[1H@#86LWBD@@BTY
+G#P2O%^B[6=/[6<R@@BL[P@@@@@@@@@/K1HRD!!HRD!!HRD @a') ; colorMapFromArray:#[0 0 0 32 223 32 40 255 124 50 255 112 51 255 109 54 229 139 62 255 87 62 255 88 62 255 91 62 255 136 64 64 64 73 255 115 83 255 62 91 255 73 94 255 74 101 255 84 105 255 85 112 255 96 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 170 170 170 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 176 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 183 183 183 190 190 190 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 196 196 196 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 217 217 217 223 32 32 223 128 63 223 192 255 223 223 32 223 223 224 223 255 255 224 224 224 224 224 239 224 239 240 224 255 255 231 207 255 231 208 255 238 191 255 238 192 255 239 159 232 239 191 255 239 223 255 239 224 255 239 239 224 239 239 239 239 239 240 239 255 255 240 207 144 240 239 223 240 240 239 240 255 255 246 176 255 247 175 255 247 207 255 247 239 255 254 160 255 254 191 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??@@??@@??@@??@@??@@??@@??@@@O0@@_<@@??<A??<C??<C??<C??<C??<C??@C??<A??<A??<O??<_O?<LA?<') ; yourself); yourself]
+!
+
+stop22x22Icon
+    "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 stop22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#stop22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class stop22x22Icon'
+	ifAbsentPut:[(Depth1Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A?>@A?>@A?>@A?>@A?>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 0 0 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@?<@A?>@C??@G?? O??0_??8_??8_??8_??8_??8_??8_??8_??8_??8O??0G?? C??@A?>@@?<@@@@@@@@@') ; yourself); yourself]
+!
+
+up22x22Icon
+    "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 up22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#up22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class up22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUURUUUPUUUJ%UUPUUT*)UUPUUR**UUPUUJ**%UPUT***)UPUVU*%UUPUUT*%UUPUUT*%UUP_UT*%UUP_UT*%UUP_5T*%UUPWUT*%UUPWWT*%UUPWUT*%UUP
+UUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUT*%UUPUUTUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@C@@@G @@O0@@_8@@?<@A?>@A?>@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@@O0@') ; yourself); yourself]
+!
+
+upRight22x22Icon
+    "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 upRight22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#upRight22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class upRight22x22Icon'
+	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUT%UPUUUUT)UPUUUUT*UPP@@@@*%PR*****)PR******PR*****)PR*****%PR*UUU*UPR*UUT)UPR*UUT%UPR*UUTUUPR*UUUUUPR*UUUUUPR*UUUUUP
+R*UUUUUPR*UUUUUPR*UUUUUPR*UUUUUPR*UUUUUPYU%UUUUPUUUUUUUP') ; colorMapFromArray:#[255 255 255 0 0 0 0 127 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@L@@@N@@@O@_?? _??0_??8_??8_??0_?? _ O@_ N@_ L@_ @@_ @@_ @@_ @@_ @@_ @@_ @@_ @@_ @@@@@@') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-24x24'!
+
+baseImage24x24Icon
+    "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 baseImage24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#baseImage24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class baseImage24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@BY&H!!DQ&Y&XFX@@@BY&H!!DQ&
+Y&XFX@@@BY&H!!DQ&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@BY&H!!DQ&Y&XFX@@@BY&H!!DQ&Y&XFX@@@BY&H!!DQ&Y&XFX@@@
+A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XF@@@@BY&H!!DQ&Y&XF@@@@BY&H!!DQ&Y&XF@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 255 0 127 127 0 255 0 0 255 255 127 127 127 170 170 170 255 0 0 255 0 255 255 255 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:41:08 / cg"
+!
+
+baseMenu24x24Icon
+    "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 baseMenu24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#baseMenu24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class baseMenu24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QDQDQDQDQ@@@@@@@RH"H"H"H"TE@@@@@R\"H"H''H"TE@@@@@R]7\"]7\"TE@@@@@RH"H"H"
+H"TE@@@@@P@@@@@@@@TE@@@@@QDQDQDQDQTE@@@@@RH"H"H"H"TE@@@@@R\"I2H"H"TE@@@@@R]2I7\''\"TE@@@@@RH"H"H"H"TE@@@@@P@@@@@@@@TE@@@@
+@QDQDQDQDQTE@@@@@RH"H"H"H"TE@@@@@R]2I7H'']2TE@@@@@RH"H"H"H"TE@@@@AUUUUUUUUUTE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127 255 0 0 100 100 100]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:41:06 / cg"
+!
+
+baseWindowSpec24x24Icon
+    "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 baseWindowSpec24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#baseWindowSpec24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class baseWindowSpec24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADQDQDQDQDP@@@@@@@@@@@@@@@@@@@@@AUUUT UUUUH@@@@@AUUUT TQTUH@@@@@APTQT UU
+UUH@@@@@AUUUT TQDUH@@@@@APTQT UUUUH@@@@@AUUUT TUDUH@@@@@APTQT UUUUH@@@@@AUUUT UUUUH@@@@@AUUUT T"H%H@@@@@AUUUT T"H%H@@@@@
+AUUUT T"H%H@@@@@ARH"T T"H%H@@@@@ARH"T T"H%H@@@@@AUUUT UUUUH@@@@@@"H"H H"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 200 200 0 0 127 127 127 127 127]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:41:03 / cg"
+!
+
+bugReporter24x24Icon
+    "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 bugReporter24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#bugReporter24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class bugReporter24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@QDQDQDQDP@@@@@@@@@@@@@@@P@@@@@ADQDQDQDQ@P@@@@@@@@@@@@@A@P@@@@QDQDQDQDPA@P@@@@@@@@@@@@PA@P@@ADQDQDP@
+Q@PA@@@@AADQQ@QD@@P@@@@@ADQDQD@DP@@@@@@@ADEAPTPD@BH"H @@ADPTD@P@H"L3L2@@ADEA@"@"H3L3L3H@@@@BH3LBL3L3L3L @@@BH3LBL3L3L3L
+@@@@H3L@@@@@@@@@@@@BH3LBH3L3L3L @@@@H#HBH#L3L3H @@@@@@@@H"H"H"@@@@@@@@@@@@H"H @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 170 170 170 128 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@??8@??8C??8C??8O??8O??8???8???8???<???0???8???<???>???>???>A??>_??>O??>@[?<@B?8@F_0@H1,@C@0@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:41:01 / cg"
+!
+
+changesBrowser24x24Icon
+    "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 changesBrowser24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#changesBrowser24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class changesBrowser24x24Icon'
+	ifAbsentPut:[(Depth2Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C????@@@@@@@C@@@????3@@@@@@@3@@EUUUT3@@@@@@D3@AUUUUD3@A?5UUD0@AUUUUD0@A]7UUD@@
+AW]7UD@@A]7]U@@@AUUUU@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@_?<@_?<A??<A??<G??<G??<_??<_??<_??<_??0_??0_??@_??@_?<@_?<@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:59 / cg"
+!
+
+class24x24Icon
+    "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 class24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#class24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class24x24Icon'
+        ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQL"H"H"H"LQDQDQDQIDQDQDQCHQDQDQDQI@@@@@@AHQDQDQDQI@@@@@@AHQDQDQDQI@@@@@@AHQDQDQDQH1DQDQDQHQDQ
+DQDQL"H"H"H"LQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDQDQDQDQDQ') ; colorMapFromArray:#[32 223 32 127 127 127 64 64 64 170 170 170 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?? @?? @?? @?? @?? @?? @?? @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+dart24x24Icon
+    "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 dart24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#dart24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary dart24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@A@ L@@@@@@@@@@@@@@@@@@@@@@@@@@@PEA XG@@@@@@@@@@@@@@@@@@@@@@@HBPXJB0,JC@@@@@@@@@@@@@@@@@@@@@4NC0XKB0,KA L@
+@@@@@@@@@@@@@@@@D@(JB0,KB0,KDP<R@@@@@@@@@@@@@@@SEATVEQTUE!!TUEQ\XFP@@@@@@@@@@@A([GA4^G!!8^G!!8^G!!8^G2@@@@@@@@@@@BD"H2P^IRT%
+IRT%IRT%I"\(@@@@@@@@JRD"B0,$G"T%IRT%IRT%IR(+K@@@@@@-K"T"B0,KIA8%IRT%IRT%IR<*J" @@@@!!IRT0H0,KB2P^IRT%IRT%IRX*J"\1@CH.IRT"
+B0,KB0,$G"T%IRT%IRT*J"(3MBT%IQ8"B0,KB0,KIA8%IRT%IRT/J2(,MRT%IQ8"B0,KB0,KB2P^IRT%IRT.J"(3@CX.IQ8"H0,KB0,KB0,$G"T%IRT%J"(3
+@@@7HRT"B0,KB0,KB0,KIA8%IRT%K2,3@@@@NC$"B0XKB0,KB0,KB2P^IRT%K"(3@@@@@B4:B XFA ,KB0,FB0,$G"T%IR(,@@@@@@@;OC4QA XFA XKA ,K
+O!!8%K"(*@@@@@@@@O1@POC4QA XKB0XKB38^J$AA@@@@@@@@@@$PBP$PODHFA XKA )CQDT@@@@@@@@@@@@IDA@PBP%FATHFQ4!!I@@@@@@@@@@@@@@@@BQ@P
+DA@IBP$RDA@;@@@@@@@@@@@@@@@@@D(PDA@PDA@ID@$@@@@@') ; colorMapFromArray:#[0 0 0 176 216 240 48 208 200 15 216 184 144 216 224 48 216 200 0 208 184 31 216 200 191 216 240 95 216 208 0 216 184 0 208 176 16 216 184 143 216 224 32 216 200 0 224 200 80 216 208 15 208 184 79 216 200 47 176 200 0 168 208 0 152 200 0 152 184 0 160 200 16 168 200 112 192 240 95 160 216 0 192 208 15 168 184 0 112 200 0 120 200 0 160 240 31 176 240 0 128 208 0 184 184 0 216 176 0 160 184 0 128 200 0 144 208 0 168 240 15 168 240 32 144 208 0 160 224 0 168 224 15 168 224 95 168 216 0 136 208 0 152 216 0 176 184 16 168 224 47 144 208 15 160 224 47 152 208 15 128 200 31 136 208 16 136 208 16 144 208 0 136 216 31 184 200 160 224 224 63 216 200 32 208 184 0 168 184 111 216 208 0 176 240 31 168 224 31 208 184 15 176 200 79 184 224 143 208 240 79 216 208 16 208 184 47 216 200 112 224 216 96 216 208]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A0@@C8@@O<@@_>@@??@A?? C??0C??8G??<O??>O???_???????????_???O???G???C???A???@???@_?>@O?8@G?8@C?0') ; yourself); yourself]
+!
+
+deleteClass24x24Icon
+    "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 deleteClass24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#deleteClass24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'VistaToolbarIconLibrary deleteClass24x24Icon'
+        ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH @@@@@B@@@@@@@BH"@@
+@@H @@@@@@@@H"H@@BH@@@@@@@@@E"H&X"Y&D@@@@@@@X@H"H @AX@@@@@@@XDP"IDQCX@@@@@@@XDH"H$QCX@@@@@@@XBH$P"QCX@@@@@@@X"H3L2H3X@@@
+@@@@H"Y&Y&I6D@@@@@@BH"@@@@\''@@@@@@@BH @@@@A7@@@@@@@@H@@@@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 255 255 170 170 170 255 0 0 127 127 127 223 223 32 240 240 240 64 64 64 255 128 128]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@A0A@A8F@@<L@@?? @?? @?? @?? @?? @?? @?? A8G@A0C@@ A@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+deleteClassToEnd24x24Icon
+    "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 deleteClassToEnd24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#deleteClassToEnd24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary deleteClassToEnd24x24Icon'
+        ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH @@@@@B@@@@@@@BH"@@
+@@H @@@@@@@@H"H@@BH@@@@@@@@@E"H&X"Y&D@@@@@@@X@H"H @AX@@@@@@@XDP"IDQCX@@@@@@@XDH"H$QCXFY&@@@@XBH$P"QCXFY&@@@@X"H3L2H3X@Y 
+@@@@H"Y&Y&I6D@Y @@@BH"@@@@\''@@@@@@@BH @@@@A7@@@@@@@@H@@@@@@B@FY&@@@@@@@@@@@@@FY&@@@@@@@@@@@@@@Y @@@@@@@@@@@@@@Y @@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 255 255 170 170 170 255 0 0 127 127 127 223 223 32 240 240 240 64 64 64 255 128 128]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@A0A@A8F@@<L@@?? @?? @?? @??/@??/@??&@??&A8G@A0C@@ AO@@@O@@@F@@@F@@@@@@@@') ; yourself); yourself]
+!
+
+desktop24x24Icon
+    <resource: #programImage>
+
+    ^self desktop24x24Icon2
+!
+
+desktop24x24Icon2
+    "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 desktop24x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#desktop24x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class desktop24x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@K^7-;^7-5" (J@&J$EAI*A2KTP@K AD@K^7-;]AI*A2KTP@K AD"BXSD085X3$N@CH2A7-;G!!,[Y:9?*5AP&9.COV>"(#U/@CJ$)WZSSI\JB&@FRYA5#X6M
+^J"(\C&(@G,YRYP"H"H"G0",R$(3R!!0E_S\KV3$7@G-I%BJ2 KIQCB@8HS  H@$IY(E)E :A@A8F%BJ@ F"-HC !!NB@ T%J0&V%)VP9)@A- %2J2ZJ4LNBD!!
+HB@MT%J0&V%)#@9)@A- B"I(TP08HRD!!HB@MT%J0&V&\#@9)@F]LB"IQ,S !!HRD!!HBART+B0&V&\E09)@J9L%1>RHBD!!HRD!!HBART+B0&V&DWP9)@G=L%8JU
+HRE*HRD H@5RT+B0T6&D.&1)@G= %@ \OF)"HRD HEIRT+A: Y2D@F2\@J- +:0%R6)"HRD HEIR,KA> XRD@V2D@EA _ET%R6(!!HS8 CUIR,KA> XRD@V2D
+@E@F^J0%R6(!!HR@ T%IR,KA> XRD@ :D@I-II1@P-FH!!HR@ T%J0,G9> XRD@ :D@I.])(=E]8U-[UYVO3<?O2"E!!QDQ@ 8Q@AJ5Q)9B")5_W5=_W4!!HMCP4
+GQ4]K08]@HNFQZLXJ5=.EAPTEK"!!(ZF!!"8&IF :I@HLC\U]@JWN6-+Z6V%)CP4MCEV9.F 9.@F-+Z35T''8]/[:J"\GA[E%&L@A(ZF 8Z@KV5NP:9(E1D@@B:
+KWH&D08NC 8NC 8N@H:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N') ; colorMapFromArray:#[239 239 240 239 239 255 240 240 255 111 112 128 64 112 191 48 112 208 79 112 191 95 111 176 64 112 208 63 127 223 95 128 207 95 144 223 63 112 223 48 112 224 175 176 191 144 160 207 112 159 208 159 175 191 143 144 207 191 191 207 47 63 95 47 48 80 208 208 224 223 224 240 255 208 64 48 95 176 255 255 255 96 127 176 48 111 208 127 143 160 96 112 176 80 127 208 48 112 223 47 111 223 95 128 208 95 144 224 95 160 240 47 96 208 192 207 208 111 144 208 144 160 176 16 143 191 192 192 208 15 127 191 32 48 80 223 223 224 239 240 240 240 255 255 48 111 191 112 143 160 80 111 176 47 111 207 112 128 160 160 175 176 80 128 207 80 144 223 48 111 223 160 175 191 79 128 223 79 143 240 47 96 223 160 175 208 47 112 223 143 159 176 0 175 224 192 192 207 96 176 31 32 48 64 224 224 224 47 128 191 63 143 191 32 80 175 112 128 144 64 111 191 48 111 207 32 96 208 95 127 191 79 128 207 80 143 223 95 159 224 127 143 191 79 127 223 63 127 224 80 159 240 160 176 208 48 96 207 143 159 191 15 159 208 207 208 208 208 223 224 32 47 64 207 208 224 223 223 223 224 224 240 64 127 191 111 127 144 80 127 191 80 143 207 32 111 223 159 175 176 79 127 207 79 143 223 80 144 224 111 127 191 80 128 223 96 160 240 32 96 223 159 175 208 176 176 191 128 159 191 47 63 80 176 191 223 192 207 224 48 111 144 208 208 223 64 80 111 48 111 176 48 96 176 64 111 176 79 128 176 63 111 191 64 127 207 64 143 224 95 112 176 64 112 207 79 128 208 79 143 224 112 128 191 95 143 223 95 159 240 79 127 208 143 159 207 111 175 255 144 160 191 144 144 175 175 191 223 208 223 223 63 79 95 31 112 175 63 64 95 223 223 240 47 96 176 0 0 0 63 144 208 63 96 176 48 96 191 64 127 208 80 112 191 80 127 207 63 112 208 64 128 223 95 127 207 95 127 208 80 144 240 79 144 240 128 144 207 96 160 255 144 159 176 224 48 0 175 176 208 207 207 208 48 64 95 191 192 223 15 160 240 31 79 160 47 95 175 96 144 176 47 96 191 79 127 191 63 127 208 63 112 207 112 143 191 63 111 207 64 127 223 111 128 191 79 112 207 64 128 224 64 112 223 95 128 223 144 160 208 95 143 224 159 160 176 31 47 64 208 208 208 48 63 95 191 192 207 224 239 240]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>@@@@') ; yourself); yourself]
+!
+
+desktopOSX24x24Icon
+    "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 desktopOSX24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#desktopOSX24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary desktopOSX24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width:24; height:24; bits:(ByteArray fromPackedString:'
+UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU#5UUUUUUUUUUUUUUUUUUUUUU
+UUUUUUVOUUQ02''Y6X&J5-[TYKB0]GQ4,KB0]\GA>UURN(A$Y4]D5VE G)JP5VE G)JP5(7@YUXSFWU4B*06X&"\TEGE1I2\TI7E-CR<*UZZ(*J!!K$9M[6]%R
+^G!!80<NV/;=:TECPUZZ&*JZS$9N9D!!IQ 8M9TUDRD+&94MCPUZ4-WBHD-KSC^[-$R"AJZ8!!Q ;03)P@_UPXF (HVP$IC4=NA1<\+IRU+-;_P3<?UUP$IB ) 
+QDQ*H2MG2<,XFGM3HRF?JR$0US(OIFV.VP-_M43DRYBP20!!^!!$T9!!7.TUUUA_G2,#H3M2\$W$)J:RVZU.K C"UV)UUV"]ETU5MR_GA3N[)I''Y+L(/UU5#UV\
+USP<XQLPU"Y=Q)4^O8A#,7]HPKY?''@DAUUVYAUTZ"5VWDUV*,UV\''EU?UUT21UTNUUT[M%V2+5U(3ETL0T?ROS5)&<C@ZUUZUWIM5);B+36ON<#HS4:E[6>>
+5:_@C 8NUUUW'')9,T5L.O#81")FQ6M"!!,KB0''%UW#5UUUUUUNET8NET8NET8NET8NET8UUVOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
+UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU') ; colorMapFromArray:#[96 64 64 31 16 31 48 32 48 191 80 160 127 64 143 0 32 63 96 64 128 223 192 208 223 143 191 112 95 160 127 95 144 192 80 176 15 0 31 64 48 63 15 15 16 159 112 207 63 32 111 47 32 64 144 96 127 47 31 96 95 64 80 144 79 176 175 95 176 255 160 240 240 175 208 192 176 191 15 47 64 0 47 48 144 95 144 191 160 176 95 48 127 112 79 96 176 112 143 176 128 160 128 79 144 176 96 175 143 96 175 208 144 176 64 32 96 95 63 80 160 47 143 160 80 143 63 32 48 223 159 191 192 175 191 96 63 128 96 96 128 64 47 63 192 111 175 112 112 143 31 15 31 112 95 96 16 16 48 207 191 207 0 47 63 191 80 175 0 0 15 191 95 160 160 144 223 64 176 224 16 31 64 160 176 208 128 127 143 223 143 224 64 31 64 160 143 208 160 95 160 144 80 143 192 96 191 144 79 128 143 80 144 239 159 207 80 16 63 255 176 240 176 112 144 64 48 64 239 144 223 16 32 48 80 111 176 96 143 223 111 79 95 160 112 143 144 111 127 95 111 143 159 159 160 0 0 0 64 32 111 15 0 15 208 191 207 160 79 175 31 0 16 112 80 111 111 63 128 47 32 48 224 144 207 207 80 191 143 79 144 31 31 80 175 159 175 128 64 143 191 127 160 143 96 176 224 112 208 255 207 255 64 64 64 16 15 16 160 79 144 191 128 160 80 96 143 80 48 64 255 176 255 159 207 255 143 127 143 80 63 64 16 32 63 192 128 175 64 47 128 96 32 96 175 159 176 95 31 64 143 96 127 159 111 128 112 80 95 175 95 160 176 128 223 79 32 96 207 191 191 47 16 47 223 144 208 208 143 191 112 64 143 160 111 128 31 31 47 111 111 111 160 95 143 223 111 191 191 143 160 160 95 175 128 112 160 31 47 80 159 64 175 63 31 63 175 175 176 111 111 127 255 176 224 112 96 111 255 192 255 95 63 96 144 127 160 175 64 144 144 111 128 32 32 80 79 48 64 0 32 48 80 63 80 47 47 47 32 16 47 111 95 144 95 112 127 144 63 144 79 63 96 112 96 127 63 47 127 223 207 208 208 192 208 96 79 80 80 48 96 79 79 80 64 48 80 80 64 111 96 96 144 63 47 63 160 95 191 79 63 127 144 95 175 64 95 144 111 96 111 128 95 160 80 112 208 95 32 80 112 64 111 191 160 191 48 16 48 176 127 144 176 64 144 127 95 111 255 191 255 176 111 143 159 112 128 160 47 128 112 111 127 128 80 111 96 96 127 112 127 128 48 95 191 143 95 127 240 159 208 16 15 31 32 32 47 208 143 176 111 111 128 223 112 207 80 79 80 240 160 208 95 128 176 176 79 160 255 144 240 127 80 96 128 96 111 191 176 191 16 0 15 176 112 160 160 80 207 175 96 144 16 31 48 47 47 48 127 127 143 128 95 111]; mask:((Depth1Image new) width:24; height:24; bits:(ByteArray fromPackedString:'@@@@@@@@@@@@????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+documents24x24Icon
+    "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 documents24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#documents24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class documents24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V%)FG@$IB&8^%9]]!!5APGP@@@@@@@@@@QDPPX#T5I6U@ZF!!<E38>
+TP@@@@@@@@@@QDPPX#T5I6U@ZF!!<E38>TP@@@@@@@@@@VE +^9FQO8 F%IRULXFA%C@3L0@@@@@@[F1''E%IRP#^DHB@<OC0<OC2S$0@@@@@@ H@*^ HBKWNP
+UUVB (JB #1+Z0@@@@@@ H@*^ HBKWNPUUVB (JB #1+Z0@@@@@@B@"M@#4=K@=Y%YT#G2D!!&VPZF @@@@@@K2<)J@DAACZPUUUG_(NCFFQVU @@@@@@F1-9
+#C,;EU9Y%YUJCE1\[VQ*Z @@@@@@F1-8]0@@S''JPUUVB (JB #1APP@@@@@@F1-8]0@@S''JPUUVB (JB #1APP@@@@@@U5^K@H*JSP9Y%YU_W5=_W31=_P@@
+@@@@_7<S''VE!!DXVPUUVB (JB #0EAP@@@@@@A0\%"S 8]I!!Y%YU_W5=_W31TU@@@@@@@A0\%"S 8]I!!Y%YU_W5=_W31TU@@@@@@@K"95II.[R06PUUVB (JB
+ #2O#0@@@@@@K"9 SI*ZH$ 2B0,RD#$9NRXYFP@@@@@@$)IE%''A0RSQ#S4<C#%MSZQ%/[0@@@@@@$)IE%''A0RSQ#S4<C#%MSZQ%/[0@@@@@@''I1[P6Y&](Y1
+N#(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[121 174 168 117 164 171 112 155 176 142 153 154 145 184 186 154 154 154 161 162 162 87 181 134 86 176 134 84 167 135 83 160 137 200 200 200 159 207 255 73 134 146 70 129 149 67 122 152 94 152 159 124 183 164 238 238 238 122 175 167 252 252 252 136 182 178 108 147 180 145 185 187 93 194 255 160 160 160 168 168 168 87 178 134 85 170 136 163 185 209 78 147 140 154 198 251 213 213 213 202 230 247 126 194 164 199 225 255 125 185 164 122 179 166 242 242 242 105 152 170 115 161 174 113 157 175 109 148 180 106 142 183 147 184 190 148 181 193 87 182 134 86 177 134 179 179 179 187 187 187 197 197 197 207 207 207 74 137 145 86 147 151 68 123 151 66 119 153 124 184 164 237 237 237 241 241 241 119 169 170 255 255 255 114 159 174 136 177 182 130 168 185 141 177 188 159 159 159 149 179 197 183 217 203 85 172 135 96 180 141 99 176 145 137 189 255 73 136 145 116 185 158 205 237 255 125 191 164 125 189 164 123 180 165 122 177 167 120 131 130 88 131 169 85 127 171 110 150 178 141 149 153 151 151 151 162 161 158 166 166 166 87 179 134 86 173 135 186 186 186 101 179 146 211 234 223 194 239 255 71 130 148 69 125 150 227 227 227 125 186 164 123 181 165 117 171 166 120 132 130 254 254 254 114 149 164 151 197 183 107 144 181 144 181 188 153 157 160 163 163 163 170 170 170 86 174 135 146 215 254 81 154 138 201 201 201 108 181 153 217 217 217 70 126 149 66 120 152 125 187 164 124 183 165 120 174 165 119 170 169 118 166 171 116 161 173 110 151 178 106 144 182 145 183 188 156 156 156 27 119 255 87 180 134 86 175 135 185 185 185 194 193 189 173 227 255 209 209 209 71 131 148 85 143 148 67 121 152 65 117 154 123 182 165 122 177 166 119 171 169 117 165 171 111 152 177 140 150 153 149 149 149 159 158 155 140 172 193 88 183 134 174 174 174 182 182 182 190 190 190 102 178 147 75 139 144 72 132 147 216 244 248 125 192 164 125 188 164 238 246 242 122 178 166]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@G?? G?? G?? G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G??<G?0@@@@@') ; yourself); yourself]
+!
+
+dos24x24Icon
+    "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 dos24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#dos24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class dos24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@L3L3L3L3L3L3@@@@LQDQDQDQDQDQ@@@@LRH"H"H"H"H1@@@@LRH"H"H"H"H1@@@@LRP"H"H"H"H1@@@@LRIBH"H"H"H1@@@@LRH$H"
+H"H"H1@@@@LRH"P"H"H"H1@@@@LRH$H"H"H"H1@@@@LRIBH"H"H"H1@@@@LRP"H"H"H"H1@@@@LRH"H"QDIDP1@@@@LSL3L3L3L3L1@@@@@QDQDQDQDQDQ@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8C??8@@@@@D@@@D@@@\1 @%J@@%I@@%H @\3@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:56 / cg"
+!
+
+fileBrowser24x24Icon
+    "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 fileBrowser24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileBrowser24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3@Y&Y&Y&Y&@@@@@@3@X@@@@@@F@@@@@@3@XN;.;.8F@@@@@@3@XN; @@@@@@@@@@3@XN;
+=/[6=/@@@@3@X@; [6=/[6@@@@3@XAC =/@@A/@@@@3@X@D@[6A/C6@@@@3@X@@P=/[6=/@@@@3@X@@@[6=/[6@@@@3@XO@@=/[6=/@@@@3@XF<@@@@@@@@@
+@@3@XOX@@@@@@@@@@@3@XF=/[6<F@@@@@@3@XO[6=/XF@@@@@@3@X@@@@@@F@@@@@@3@Y&Y&Y&Y&@@@@@@C@Y&Y&Y&Y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@O?? O?? O?? O?? O??<O??<O??<O??<O??<O??<O??<O??<O??<O?? O?? O?? O?? O?? G?? C?? @@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:54 / cg"
+!
+
+fileIn24x24Icon
+    "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 fileIn24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileIn24x24Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileIn24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A&Y&Y&XF@@@@@@@@A#L2Y&XF@@A&Y X@A#L2Y&XF@AA&Y D@A"H"Y&XF@AA&Y DCA&I&Y&XF@AA&Y DC
+M&I%URXF@A@@@3L3L6I%URXF@ADQD3L3L3H"H"XF@AD@@3L3L6I&Y&XF@AD@Y DCM&I$QBXF@AD@Y DCA&I$QBXF@@@@@@@@A&H"H"XF@@@@X@@@A&Y&Y&XF
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 129 129 129 63 63 36 255 0 0 194 194 0 0 127 0 194 194 194]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@?>@@?>_>?>_>?>_>?>_??>_??>_??>_??>_??>_??>_??>O>?>@ ?>@@?>@@@@EPD@HP@@ISD0IT%H]W%HITEHISEH') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:51 / cg"
+!
+
+garbageCollect24x24Icon
+    "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 garbageCollect28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#garbageCollect28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class garbageCollect24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@ADQ@@@@@@@@@@@@@ADQDQ@@@K.;,QF1DQDQDQ@@B;.;.1.0@@DQDQ@@.;@@.;.1@@@ADQ@@.0@@F;.1@2@ADQ@@.0@@.;.1DCHADQ@K.;@@
+DQDQDPL DQB0.0,@DQDP@@@0DQ,K@KB0DQ@BH"H@DQ@@@@@@DQ@P@@@0DP@@@@8N@@@QDSL0D@@@C.;.8@@PL3@ @@@@@NC @@@PLC@ @@@@;.;.@@@PLC@
+@@@@C 8@@@@PLC@ @@B (@@AD@@PLC@ @J*** CA0@@PLC@ @@(J@L3L3@@PLC@ B***(@0L@Q@SLCL @JB CL3L0Q@CH"H@@ADQDLCADQDP@@@Q@ADQD@@@
+@QD@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@O"@@_6@@8>8@0^<@0>^A8@OB4A?EJG?@@G?@EG?@_''?@JG?@?G?@TG?B G?O2''?EO7?_%G?J_''?@JA<@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:47 / cg"
+!
+
+historyBackInTextIcon
+    "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 historyBackInTextIcon inspect
+     ImageEditor openOnClass:self andSelector:#historyBackInTextIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'VistaToolbarIconLibrary class historyBackInTextIcon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%IRT%IRT%IRTS4=OS4=O$$>T%IRT%IRT%IRX&I"X&I"X&I"X&I"X&I"X&I"X&IRT%)ZX%YVV%)ZU%YT@@@@@%)ZV%YT@&IVV%)ZX%YVV%)ZU%P@@@@@@%)ZV
+%YT@&IVV%)ZX%YVV%)ZU%P@@@@@@%YZV%YT@&IVV%)ZX%Y"X&I"X#P@@@@@@@@@@@@@@&IVV%)ZX%YVV%)X@@@BI@@@@@@@@@@BU&IVV%)ZX%YVV@@@@@@@@
+@@@@@E0K@@BU&@BV%)ZX%Y"X&I"X@@@@@@@@S 8F!!XBU&@BV%)ZX%P@@@@@@@@@@@H4#D''4@!!XAO&@AO%YVX%P@@@@@@@@@@#P8]"X8@@@@@@@BD%YVXS9"X
+&I"X@H=<@3^N^(:N]7]7[0B@%T>XS0@@@@@@@@A4@0(6[6<,H!!(5ZPB@%P"X] @@@@@@@@@@!! 4DE6<@@@@@AQF@%P"X\)"X&I"X@@@@@H \@ 0@ HB@ HB@
+%W&XE @@@@@@@@@@@@BOPPD@ A @&@AO%PBXCQAYX@@@@@@@@@@@$%0K B@(&@AO%PBX$I"X&I"X@@@@@@@@@D)JQ4]D&D=O%@BX%D=OS4=O@@@@@@@@@D=O
+S4=O&D=O%@BX%IQOS4=OQ @@@@@@@D=OS4=O&D=O%@BX%IRTS4=OS0@@@@@@#4=OS4=O&IIO%@BX%IRT%D=OS4=OS4=O$$>T%IRT&IRT%IRX&I"X&I"X&I"X
+&I"X&I"X&I"X&IRT%IRT%IRT%IRTS4=OS4=O$$>T%IRT%IRT') ; colorMapFromArray:#[0 146 0 0 150 0 0 158 0 8 150 8 8 170 8 16 150 16 16 154 16 24 154 24 24 158 24 24 162 24 24 182 24 33 154 33 33 211 24 41 158 41 41 162 41 41 166 41 41 174 41 49 162 49 49 166 49 57 166 57 57 199 49 66 178 57 66 190 57 66 227 57 74 199 66 74 203 66 74 227 74 74 231 66 82 174 82 82 182 74 82 190 74 82 203 66 82 207 74 82 215 74 82 231 82 90 182 90 90 207 82 90 211 74 90 211 82 90 215 74 90 215 82 90 223 82 90 227 82 90 231 82 90 235 82 90 235 90 99 211 90 99 215 82 99 215 90 99 219 82 99 219 90 99 223 82 99 223 90 99 227 99 99 235 90 107 195 99 107 211 99 107 223 90 107 227 90 107 235 90 107 235 99 107 235 107 107 239 90 107 239 99 115 142 222 115 186 107 115 211 99 115 227 99 115 235 99 115 235 107 115 239 99 115 239 107 123 190 123 123 195 123 123 239 107 123 239 115 123 239 123 123 243 107 132 199 132 132 239 107 132 239 123 132 243 107 132 243 115 132 243 123 132 247 123 140 203 140 140 215 132 140 243 115 140 243 123 140 243 132 140 247 115 140 247 123 148 199 148 148 243 123 148 243 132 148 247 123 148 247 132 148 251 123 148 251 132 156 203 156 156 243 132 156 243 140 156 251 123 156 251 132 165 251 140 165 251 156 173 170 156 173 215 173 173 235 156 173 251 148 173 251 156 173 251 165 181 239 165 181 251 156 181 251 165 181 251 173 189 215 181 189 247 173 189 251 173 189 255 173 189 255 181 198 223 198 198 251 173 198 255 181 206 227 206 206 243 181 206 255 189 214 207 206 214 211 214 214 255 189 214 255 198 222 219 214 222 219 222 222 223 222 222 227 214 222 227 222 222 231 214 222 251 206 222 255 198 222 255 206 231 227 231 231 239 231 231 255 214 239 235 231 239 235 239 239 243 239 247 239 239 247 239 247 247 243 239 247 243 247 247 247 247 255 255 255 0 0 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O??<H@@DH@@DH@@DK<@DHA@DH@CDK8G4H@_4H@??K;??HA??H@??K8_?H@O$H@G$K8@DH@@DH@@DH@@DH@@DO??<@@@@') ; yourself); yourself]
+!
+
+imageEditor24x24Icon
+    "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 imageEditor24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class imageEditor24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@JB A7\3LQE&Y&XFXJB A7\3LQE&Y&XFXJB A7\3LQE&Y&XFX@@@BY&H!!DQ&Y&XFX@@@BY&H!!DQ&
+Y&XFX@@@BY&H!!DQ&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@BY&H!!DQ&Y&XFXI* BY&H!!DQ&Y&XFX@@@BY&H!!DQ&Y&XFX@(@
+A7\3LQE&Y&XFX@(@A7\3LQE&Y&XFX@(@A7\3LQE&Y&XFXI& BY&H!!DQ&Y&XFXI* BY&H!!DQ&Y&XFXI* @@@@@@@@@@@@@I* @@@@@@@@@@@@@I& @@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 255 0 127 127 0 255 0 0 255 255 127 127 127 170 170 170 255 0 0 255 0 255 255 255 0 100 100 100]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>N??>N??>N??>D??>D??>D??>D??>D??>D??>N??>_??>_??>N??>N??>N??>_??>_??>_??>_@@@_@@@N@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:45 / cg"
+!
+
+installAsWebPage24x24Icon
+    "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 installAsWebPage24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#installAsWebPage24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class installAsWebPage24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"H"H"H"H"H@BYBP@%UUUUUUUU$@BYBP@%UUUUUUUU$@BYBP@%UUUUUUUU$@@@@@@%UU.;.5UU$@@@@@@%U[.;.;
+UU$@@@@@@%V;.;.;-U$@@@@@@%.*.;**.5$@@@@@@%.**;.**5$@@@@@@%.**;***5$@@@@@@%.:*;***5$@@H&P@%.:*;**.5$@@@@@@%V;.;*+-U$@@@$@
+@%U[.;.;UU$@@@$@@%UU.;.5UU$@@@$@@%UUUUUUUU$@@H"P@%UUUUUUUU$@@H&P@%UUUUUUUU$@@H&P@%UUUUUUUU$@@H&P@)&Y&Y&Y&Y$@@H"P@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 200 200 0 0 127 127 191 191 191 255 0 0 240 240 0 255 255 0 100 100 100 0 255 0 0 0 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@??>@??>N??>N??>N??>D??>D??>D??>D??>D??>D??>N??>_??>_??>N??>N??>N??>_??>_??>_??>_??>_??>N@@@@') ; yourself); yourself]
+!
+
+left2Arrow24x24Icon
+    "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 left2Arrow24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#left2Arrow24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class left2Arrow24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%)ZVM3^V%)X7M3\7M3\7%)ZVM3\7M3^V%)ZVM3^V%)X7M3\7]1 @%)ZVM3\7M3^V%)ZVM3^V%)X7M3]&TT01M9ZVM3\7M3^V%)ZVM3^V%)X7$U8,I3TKM9ZV
+M3\7M3^V%)ZVM3^V%)ZQTSL>FSTKM9ZVM3\7M3^V%)ZVM3^V%%H$!!!!%]T#TKM9ZVM3\7M3^V%)ZVM3^V!!RP?"%ZEICTKM9ZVM3\7M3^V%)ZVM3^NS@16^H9L
+CCT5MST5MST5N0$@M3\7M58EHWQ#W T!!]FNW%6=/MCP4H@EEM3^QTUQ\MIEQUE04"FEMIRT"RP<9LCTKM5JG_)\HT(]>%0 (JAQ+#8<ZA2-,#STKM8]2DFQN
+!!7HPYD9 XFAW#4E;^%MG"3TKM8\RVFI !!1IXX&A_W8ROGV!!UK&\^TCTKM7\;#DIP]3.LP%@@\G@_B )UT6\^@#TKM3^PA#5OE)@FOT<VC :S_8A)_UU)ISTK
+M3\7 (L:RS2B 3)IOF,%IWA0H"JTVPDKDQDQDT)%IA,SR&T$F3T5MST5MST5@W$KDQDQDQEJ RPDC$*AICU<B0,KB0,KB0-*DQDQDQDQR L$\X=J@3TK[$)J
+R$)JR$)JDQDQDQDQDQD\A&4UJ#TKR!!DQDQDQDQDQDQDQDQDQDQDQK8MFV#TKR!!DQDQDQDQDQDQDQDQDQDQDQDV:IV3TKR!!DQDQDQDQDQDQDQDQDQDQDQDQEJ
+CQ\KR!!DQDQDQDQDQDQDQDQDQDQDQDQDQR$ 1R!!DQ') ; colorMapFromArray:#[132 239 107 16 150 16 132 239 123 189 215 181 57 199 49 41 166 41 41 158 41 82 231 82 173 251 148 57 166 57 90 211 74 214 211 214 173 235 156 148 199 148 115 239 99 107 235 107 189 251 173 247 243 239 107 211 99 132 247 123 140 247 123 66 227 57 148 247 132 33 154 33 123 195 123 231 255 214 90 231 82 90 227 82 222 227 214 99 223 82 90 207 82 99 215 82 181 251 173 181 239 165 115 239 107 115 227 99 8 150 8 123 239 115 140 247 115 206 243 181 148 247 123 173 170 156 74 231 66 74 227 74 49 166 49 115 142 222 82 203 66 222 231 214 173 251 165 222 223 222 99 223 90 82 182 74 189 255 173 0 146 0 123 243 107 247 243 247 247 239 247 123 239 123 24 162 24 24 154 24 148 251 132 41 174 41 222 251 206 140 215 132 90 235 82 90 235 90 173 251 156 107 239 90 99 219 82 222 219 222 0 158 0 99 211 90 231 227 231 115 235 107 247 239 239 255 255 255 16 154 16 132 243 123 140 243 123 140 243 132 148 243 132 41 162 41 206 227 206 74 203 66 66 178 57 82 207 74 181 251 156 107 235 90 181 251 165 107 235 99 33 211 24 0 150 0 189 247 173 198 251 173 90 182 90 132 243 115 140 243 115 148 251 123 148 243 123 156 251 132 156 243 132 123 190 123 132 199 132 74 199 66 90 215 74 90 215 82 222 219 214 107 239 99 99 227 99 8 170 8 239 235 231 189 255 181 123 239 107 24 182 24 115 211 99 206 255 189 214 255 189 214 255 198 222 255 198 198 223 198 165 251 140 49 162 49 82 215 74 90 223 82 214 207 206 90 211 82 82 190 74 99 219 90 99 215 90 156 203 156 239 235 239 82 174 82 132 243 107 173 215 173 107 195 99 24 158 24 156 251 123 115 186 107 222 255 206 156 243 140 66 190 57 165 251 156 140 203 140 99 235 90 222 227 222 231 239 231 107 227 90 107 223 90 115 235 99 239 243 239 247 247 247 198 255 181]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@0@@A8@@G8@@O8@@_8@@?8@A??>C???O???_???_???_???_???O???G???C???A???@?<@@O8@@G8@@C8@@A8@@@8@') ; yourself); yourself]
+!
+
+leftArrow24x24Icon
+    "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 leftArrow24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#leftArrow24x24Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class leftArrow24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PH@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@A@0D@@@@@@@@@@@@@@@@@@@@@@@@@@@DDAPH@@@@@@@@@@@@@@@@@@@@@@@@@@PX@A0D@@@@@@@@@@@@@@@@@@@@@@@@AB@@IB HK
+@0LA@PDK@@@@@@@@@@@@@@DL@@@MC <P@@@@DPLR@@@@@@@@@@@@@PX@@ALTEP8PDQDVE0\R@@@@@@@@@@@AAADQD1PUEQTNF@$SFP(R@@@@@@@@@@@KB!!P[
+GAPUEQT]GQ4]GP(R@@@@@@@@@@@@D (TG!!0TEA,_G1<[H@(R@@@@@@@@@@@@@AHJC!!< GQ4JB (JB"DK@@@@@@@@@@@@@@@RB 8^B DRD!!HRD!!HK@@@@@@@@
+@@@@@@@@D (]H H@@@@@@@@@@@@@@@@@@@@@@@@@@AHJHPD@@@@@@@@@@@@@@@@@@@@@@@@@@@@K@PH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B0D@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[224 224 224 0 32 64 0 32 96 32 64 96 96 128 160 64 96 128 128 160 192 32 96 128 128 160 160 160 192 224 0 96 128 0 0 0 128 128 160 64 192 192 32 160 192 64 128 192 128 192 224 192 224 224 0 0 32 96 192 224 0 160 192 0 128 192 160 224 224 96 160 192 128 192 192 64 160 192 192 192 192 32 192 192 0 192 224 0 128 160 32 192 224 64 192 224 0 192 192 0 64 96 0 64 128]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@B@@@F@@@N@@@^@@@>@@A??@C??@G??@O??@O??@G??@C??@A??@@>@@@^@@@N@@@F@@@B@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:42 / cg"
+!
+
+leftArrow24x24disabledIcon
+    "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 leftArrow24x24disabledIcon inspect
+     ImageEditor openOnClass:self andSelector:#leftArrow24x24disabledIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class leftArrow24x24disabledIcon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PH@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@A@0D@@@@@@@@@@@@@@@@@@@@@@@@@@@DDAPH@@@@@@@@@@@@@@@@@@@@@@@@@@PX@A0D@@@@@@@@@@@@@@@@@@@@@@@@AB@@IB HK
+@0LA@PDK@@@@@@@@@@@@@@DL@@@FCP8O@@@@D@LQ@@@@@@@@@@@@@PX@@AHND04ODA@TEP\Q@@@@@@@@@@@AAA@PD 8SD1LME $RE0(Q@@@@@@@@@@@KB 8U
+F@8SD1LYFQ$YFP(Q@@@@@@@@@@@@DP(NF!! NC!!T[F1,UE0(Q@@@@@@@@@@@@@ADJCQ,WFQ$JB (JB!!0K@@@@@@@@@@@@@@@QB 4ZB DQDQDQDQDK@@@@@@@@
+@@@@@@@@DP(YGPH@@@@@@@@@@@@@@@@@@@@@@@@@@ADJG@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@K@PH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B0D@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[224 224 224 25 25 25 28 28 28 57 57 57 121 121 121 89 89 89 153 153 153 80 80 80 150 150 150 185 185 185 70 70 70 0 0 0 131 131 131 124 124 124 115 115 115 176 176 176 214 214 214 3 3 3 166 166 166 96 96 96 204 204 204 144 144 144 172 172 172 134 134 134 137 137 137 92 92 92 147 147 147 156 156 156 48 48 48 51 51 51]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@B@@@F@@@N@@@^@@@>@@A??@C??@G??@O??@O??@G??@C??@A??@@>@@@^@@@N@@@F@@@B@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+make24x24Icon3
+    "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 make24x24Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#make24x24Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class make24x24Icon3'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_3MNNRP]_7=?_7=?_7=?_7=?_7=?_7=?_4%QU$05HQ]?_7=?_7=?_7=?_7=?_7=?_7=?_5MYT"<W
+_7=?_7=?_7=?_7=?_7=?_7=?_7=WVEUEF''=?_7=?_7=?_7=?_7=?_7=?_7<6UD=KR"%?_7=?_7=?_7=?_7=?_7=?_7<?ST!!COD)A_7=?_7=?_7=?_7=?_7=?
+_2MGQ#85K")?_7=?_7=?_7=?_7=?_7=?_29BNS@+I"\:FG=?_7=?_7=?_7=?_7=?H#\2KR)?_1%PV"U?_7=?_7=?_7=?_7<_N3%?_7=?_2@[QE,1_7=?_7=?
+_7=?EQ84KG=?_7=?_7<8GDA?_7=?_7=?_7<FCAX(_7=?_7=?_7=?OW=?_7=?_7=?_0<LA0\N_7=?_7=?_7=?_7=?_7=?_7<CE@,GBPQ?_7=?_7=?_7=?_7=?
+_7=?_0HSB \IAW=?_7=?_7=?_7=?_7=?_7=?_1@JA0 E_7=?_7=?_7=?_7=?_7=?_7=?C0,GBPU?_7=?_7=?_7=?_7=?_7=?_7<KB0\IAW=?_7=?_7=?_7=?
+_7=?_7=?CQHKA0 D_7=?_7=?_7=?_7=?_7=?_7=?DP,IBPU?_7=?_7=?_7=?_7=?_7=?_7=?_0(J@ E?_7=?_7=?_7=?_7=?_7=?_7=?_7<E@G=?_7=?_7=?
+_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[9 9 9 11 11 11 31 31 31 32 32 32 33 33 33 34 34 34 34 34 35 35 35 35 35 36 36 36 36 36 37 37 37 38 38 38 39 39 39 39 39 40 40 40 40 41 41 41 42 42 42 44 44 45 45 45 46 47 47 47 48 48 48 51 51 51 65 65 65 88 88 88 89 89 89 98 99 100 101 101 101 103 104 105 104 104 105 111 111 112 113 113 114 117 117 118 119 120 121 120 120 120 121 121 123 123 123 125 125 125 126 125 126 128 129 129 129 129 130 130 131 131 130 133 133 133 138 138 138 139 139 139 142 142 142 144 144 144 145 145 145 147 147 147 148 148 148 147 148 152 149 149 149 151 151 151 152 152 152 154 154 154 155 155 157 156 156 155 157 158 159 158 158 158 159 159 159 160 160 160 161 161 161 160 162 168 164 164 164 166 166 167 166 166 168 168 168 168 169 169 169 170 170 170 171 171 171 172 172 172 173 173 173 177 177 177 178 178 178 178 178 179 180 180 180 183 183 183 186 186 186 187 187 187 188 188 188 191 191 191 193 193 193 196 196 198 197 197 197 201 201 201 202 202 202 203 203 203 203 203 204 206 206 206 214 214 214 216 216 216 223 223 223 238 237 237 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C8@@C>@@@_@@@O @@O0@@O8@@_0@@_<@@>^@A0_@G N@O@D@_@@A>@@C<@@C8@@G0@@O @@?@@@>@@@^@@@L@@@@@@@') ; yourself); yourself]
+!
+
+menuEditor24x24Icon
+    "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 menuEditor24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#menuEditor24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class menuEditor24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GA0@QDQDQDQDQ@@@GA0@RH"H"H"H"TEAWA0@R\"H"H''H"TEAP@@@R]7\"]7\"TEAP@@@RH"H"H"
+H"TEAP@@@P@@@@@@@@TEAP@@@QDQDQDQDQTEAP@@@RH"H"H"H"TEAP@@@R\"I2H"H"TEAP@@@R]2I7\''\"TE@C]0@RH"H"H"H"TE@@@@@P@@@@@@@@TEAP\@
+@QDQDQDQDQTEAP\@@RH"H"H"H"TEAP\@@R]2I7H'']2TE@CM0@RH"H"H"H"TE@C]0AUUUUUUUUUTE@C]0@@@@@@@@@@@@@C]0@@@@@@@@@@@@@CM0@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127 255 0 0 100 100 100]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>N??>N??>N??>D??>D??>D??>D??>D??>D??>N??>_??>_??>N??>N??>N??>_??>_??>_??>_@@@_@@@N@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:40 / cg"
+!
+
+method24x24Icon
+    "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 method24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#method24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary method24x24Icon'
+        ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQL"H"H"H"LQDQDQDQIDQDQDQCHQDQDQDQI@@@@@@AHQDQDQDQI@@@@@@AHQDQDQDQI@@@@@@AHQDQDQDQH1DQDQDQHQDQ
+DQDQL"H"H"H"LQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDQDQDQDQDQ') ; colorMapFromArray:#[223 32 32 127 127 127 64 64 64 170 170 170 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?? @?? @?? @?? @?? @?? @?? @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+methodFinder24x24Icon
+    "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 methodFinder24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#methodFinder24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary methodFinder24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADEQPX
+IR)P@@@@@@@@@@@@@@@@@@@@@A,''RE!!YUD@(H&\@@@@@@@@@@@@@@@@@J6&Q XFA XEUJQ!!''B (JB (9@@@@@@@,X%,KB0 C@ LGA TU_9FQ$S$J@@@@@DX?
+ U,K[F1,[F1,[@X LV1,[AHJ@@@@@CMR\U,K[F1,[F1,[F0ED61,[AHJ@@@@@B1YVT8K[F1,[F1,[F0EE61,[AHJ@@@@@B1&R4LK[F1,[F1,[F0EGQHRD!!HJ
+@@@@@B1YUTLK[F1,[F1,[F0EGP(JB (9@@@@@B5IVT4K[F1,[F1,[F0KE@@@@@@@@@@@@DT5VT4KB0,KB0,KB0-GF @@@@@@@@@@@@@_PD5MST9NS$9NS&,\
+Y0@@@@@@@@@@@@@$G4%&Y&)1\WVE CH<@@@@@@@@@@BP %4#E!!<6T6Y1Z&MQL#4@@@@@@@@@@H>M#E0!!@@@%FQ8&MCH>U0@@@@@@@@@@#8:L[S(0@@@@@@@@
+@@@@@@@@@@@@@@@@#(1-N2<@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 32 223 32 255 40 124 255 51 109 255 51 109 229 54 139 255 62 88 255 62 88 255 62 91 255 62 136 64 64 64 255 72 115 255 83 62 255 91 73 255 94 74 255 101 84 255 105 85 255 112 96 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 170 170 170 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 176 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 183 183 183 190 190 190 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 196 196 196 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 217 217 217 223 32 32 223 128 63 223 192 255 223 223 32 223 223 224 223 255 255 224 224 224 224 224 239 224 239 240 224 255 255 231 207 255 231 208 255 238 191 255 238 192 255 239 159 232 239 191 255 239 223 255 239 224 255 239 239 224 239 239 239 239 239 240 239 255 255 240 207 144 240 239 223 240 240 239 240 255 255 246 176 255 247 175 255 247 207 255 247 239 255 254 160 255 254 191 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O8@@_>@@???A???C???C???C???C???C???C?? C?? A?? A??@O?>@_O<@?@@@>@@@') ; yourself); yourself]
+!
+
+newClassWizardIcon
+    "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 newClassWizardIcon inspect
+     ImageEditor openOnClass:self andSelector:#newClassWizardIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class newClassWizardIcon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@8B@ HB@ HB@ HB@ 8@@@@@@@@@@@@@@@H:^''):^''):^''):S H@@@@@@@@@@@@@@@H:PXFA XFA XFA!!8H@@@@@@@@@@@@@@@H:PXFA XFA XF
+A!!91RF$@@@@@@@@@@@@H:PXFA ZB^G(FA&5/&38@@@@@@@@@@@@HNA8^G!!97,)EXT&KC%DL@@@@@@@@@@@@8B@ HB@!!9%.^-#;''#]V,@@@@@@@@@@@@@@@@@
+@@B5V[C)9^S^V#\@@@@@@@@@@@@@@@@@@@@@TIO&7]_V)5\!!QP@@@@@@@@@@@@@@@@A-W;_!!5=SS6-F"O2 @@@@@@@@@@@@@@GM,7NO_5]OA&&)ILCT@@@@@
+@@@@@@@@@D^]%WY +="IDC,V_P@@@@@@@@@@@@@@@F!!@PV\.X=Q.A0>DFP@@@@@@@@@@@@@@@@@@@@@@H*9VBP@Q 1L@@@@@@@@@@@@@@@@@@@@@P$P2$ 0@
+D(D$@@@@@@@@@@@@@@@@@@@@@BL4@@@K@AP3I@@@@@@@@@@@@@@@@@@@@@@@@@@@I HXLRX@@@@@@@@@@@@@@@@@@@@@@@@@@BPBGR<1@@@@@@@@@@@@@@@@
+@@@@@@@@@@@*@!!<W@@@@@@@@@@@@@@@@@@@@@@@@@@@@JPTJ') ; colorMapFromArray:#[0 0 0 3 3 3 4 4 4 4 8 8 11 16 17 12 12 12 32 223 32 33 4 8 64 64 64 67 27 35 69 69 69 75 80 80 80 93 92 90 19 2 94 95 110 107 120 120 109 13 19 109 107 107 111 110 110 111 115 115 112 112 112 116 117 116 120 76 87 120 120 120 121 121 121 121 132 132 122 120 120 122 122 122 125 57 47 125 125 125 127 127 127 133 133 133 140 70 60 144 32 17 145 28 14 158 75 75 158 158 158 159 36 2 159 159 159 160 34 3 161 79 79 161 161 161 162 162 162 163 59 29 163 63 34 164 164 164 165 76 76 166 166 166 167 46 5 167 167 167 168 46 6 168 168 168 169 89 89 169 91 91 169 171 171 170 86 86 170 170 170 171 79 75 173 90 77 173 125 137 173 173 173 174 85 83 175 49 40 176 68 12 177 50 40 177 67 67 177 111 111 179 70 70 180 72 11 180 117 117 180 180 180 181 26 10 181 28 13 181 80 16 181 179 180 181 186 191 183 70 49 183 88 19 184 69 48 184 186 186 185 55 55 185 183 184 186 56 56 190 50 30 190 52 32 190 104 94 191 87 23 192 94 18 193 37 20 193 38 17 193 88 18 193 108 101 194 81 72 194 85 77 195 165 162 196 67 35 196 92 19 196 144 142 197 68 34 197 99 19 197 147 144 198 80 57 198 81 55 198 128 128 199 96 93 199 102 100 200 105 21 202 136 136 203 82 39 203 107 107 203 109 25 204 83 37 204 85 46 204 102 102 205 88 47 205 104 103 205 172 171 207 111 32 208 116 34 210 44 27 210 44 29 211 86 86 211 93 93 211 138 29 214 83 58 215 201 202 216 87 60 216 142 31 216 183 183 217 217 217 218 66 59 218 218 218 218 225 224 219 65 39 220 134 134 220 140 140 220 188 188 221 141 25 222 168 168 223 32 32 223 157 52 223 170 170 223 223 32 224 136 74 224 160 53 225 125 88 225 214 215 226 139 77 226 165 73 226 167 74 227 133 95 227 143 29 228 151 118 228 157 124 229 149 33 229 159 68 230 185 185 232 162 71 232 187 187 237 201 113 239 203 111 239 236 236 240 177 48 240 190 95 241 154 38 241 192 97 242 195 195 242 200 38 243 203 45 243 236 237 244 202 202 244 212 212 244 215 215 245 211 166 246 182 50 246 204 39 246 215 174 246 218 162 247 202 143 247 224 224 247 226 163 247 228 228 247 241 241 248 224 165 248 233 233 249 228 166 249 230 230 249 244 244 249 245 245 250 228 195 250 247 247 251 232 48 251 239 239 252 215 48 252 249 249 253 245 165 253 247 247 253 249 249 253 251 251 253 252 252 253 253 253 254 229 48 254 233 48 254 247 200 254 248 202 254 253 253 254 254 254 255 214 57 255 233 52 255 239 67 255 240 51 255 241 49 255 242 70 255 245 68 255 246 68 255 246 122 255 248 62 255 248 94 255 249 62 255 249 93 255 249 166 255 251 176 255 252 111 255 253 112 255 254 171 255 254 180 255 255 171 255 255 174 255 255 180 255 255 214 255 255 216 255 255 251 255 255 253 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@O?8@O?8@O?8@O?>@O?>@O?>@O?>@@O>@@G? @O?0@_?0@_? @_? @@?0@@?8@@Y<@@@>@@@_@@@O@@@G') ; yourself); yourself]
+!
+
+newDataSet24x24Icon
+    "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 newDataSet24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#newDataSet24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newDataSet24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QDPDQDADQ@@@@@@@RH D"HAH"TE@@@@@RH D"HAH"TE@@@@@RH D"HAH"TE@@@@@RH D"HA
+H"TE@@@@@P@@@@@@@@TE@@@@@QDPDQDADQTE@@@@@RH D"HAH"TE@@@@@RH D"HAH"TE@@@@@RH D"HAH"TE@@@@@RH D"HAH"TE@@@@@P@@@@@@@@TE@@@@
+@QDPDQDADQLE@0@C@RH D"HAH"T5@0@0@RH D"HAH"TC@0L@@RH D"HAH"TEL3@@@RH D"HAH"L3L3L3AUUPUUTEUUT@L3@@@@@@@@@@@@@C@0L@@@@@@@@@
+@@@0@0@0@@@@@@@@@@L@@0@C') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>Q??>R???T??>8??????>8???T@@BR@@DQ') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:38 / cg"
+!
+
+newFileBrowser24x24Icon
+    "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 newFileBrowser24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#newFileBrowser24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newFileBrowser24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@DQ@@@@@@@@@@@@@ADAD@@@3@Y&Y&Y&@QDADP@@3@X@@@@@@P@@@P@@3@XN;.;.@QDADP@@3@XN; @@@ADAD@@@3@XN;
+=/[0DQ@@@@3@X@; [6=/@@@@@@3@XAC =/@@A/@@@@3@X@D@[6A/C6@@@@3@X@@P=/[6=/@@@@3@X@@@[6=/[6@@@@3@XO@@=/[6=/@@@@3@XF<@@@@@@@@@
+@@3@XOX@@@@@@@@@@@3@XF=/[6<F@@@@@@3@XO[6=/XF@@@@@@3@X@@@@@@F@@@@@@3@Y&Y&Y&Y&@@@@@@C@Y&Y&Y&Y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@8@@A<O??>O???O???O???O??>O??<O??<O??<O??<O??<O??<O??<O??<O?? O?? O?? O?? O?? G?? C?? @@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:36 / cg"
+!
+
+newImage24x24Icon
+    "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 newImage24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#newImage24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newImage24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@BY&H!!DQ&Y&XFX@@@BY&H!!DQ&
+Y&XFX@@@BY&H!!DQ&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@A7\3LQE&Y&XFX@@@BY&H!!DQ&Y&XFX@@@BY&H!!DQ&Y&XFX@@@BY&H!!DQ&Y&XFX@@@
+A7\3LQE&Y&$FZP@IA7\3LQE&Y&ZVZPBPA7\3LQE&Y&XIBP$@BY&H!!DQ&Y&XF&Y@@BY&H!!DQ&Y&&Y&Y&Y@@@@@@@@@@@@&Y@@@@@@@@@@@@@IBP$@@@@@@@@@
+@@BPBPBP@@@@@@@@@@$@BP@I') ; colorMapFromArray:#[0 0 0 0 0 255 0 127 127 0 255 0 0 255 255 127 127 127 170 170 170 255 0 0 255 0 255 255 255 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>Q??>R???T??>8??????>8@@AT@@BR@@DQ') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:31 / cg"
+!
+
+newMenu24x24Icon
+    "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 newMenu24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#newMenu24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newMenu24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QDQDQDQDQ@@@@@@@RH"H"H"H"TE@@@@@R\"H"H''H"TE@@@@@R]7\"]7\"TE@@@@@RH"H"H"
+H"TE@@@@@P@@@@@@@@TE@@@@@QDQDQDQDQTE@@@@@RH"H"H"H"TE@@@@@R\"I2H"H"TE@@@@@R]2I7\''\"TE@@@@@RH"H"H"H"TE@@@@@P@@@@@@@@TE@@@@
+@QDQDQDQDQLE@0@C@RH"H"H"H"T5@0@0@R]2I7H'']2TC@0L@@RH"H"H"H"TEL3@@AUUUUUUUUUL3L3L3@@@@@@@@@@@@L3@@@@@@@@@@@@@C@0L@@@@@@@@@
+@@@0@0@0@@@@@@@@@@L@@0@C') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127 255 0 0 100 100 100]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>Q??>R???T??>8??????>8@@AT@@BR@@DQ') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:29 / cg"
+!
+
+newSystemBrowser24x24Icon
+    "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 newSystemBrowser24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#newSystemBrowser24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newSystemBrowser24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y&@@@@@@@@@@@@@FXFX@@FY&Y&Y#@@A&XFY @FQDQDQB@@A @@A @FQDQDQB@@A&XFY @CH"H"H"@@@FXFX@@@@@@@@@
+@@@@Y&@@@@@@H@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@@@@@A&Y&Y&X0@@@@XBH"A!!DQDQD @@@@@@@@@2H"H"H
+@@@@H@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@@@@@A&Y&Y&X0@@@@XBH"A%UUUUT @@@@@@@@@2H"H"H @@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 255 0 127 127 127 170 170 170 255 0 0 255 255 0 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@8@@A<_?#>_?''?_?''?_?''?_?#>_?!!<@ @8@ @@@ @@@ ??A0??A???A0??@ ??@ @@@ ??A0??A???A0??@@??@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:26 / cg"
+!
+
+newWindowSpec24x24Icon
+    "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 newWindowSpec24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#newWindowSpec24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class newWindowSpec24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADQDQDQDQDP@@@@@@@@@@@@@@@@@@@@@AUUUT UUUUH@@@@@AUUUT TQTUH@@@@@APTQT UU
+UUH@@@@@AUUUT TQDUH@@@@@APTQT UUUUH@@@@@AUUUT TUDUH@@@@@APTQT UUUUH@@@@@AUUUT UUUUH@@@@@AUUUT T"H%H@@@@@AUUUT T"H%H@@@@@
+AUUUT T"H%X@A @FARH"T T"H%I A A ARH"T T"H%HFA X@AUUUT UUUUH@Y&@@@"H"H H"H"Y&Y&Y&@@@@@@@@@@@@Y&@@@@@@@@@@@@@FA X@@@@@@@@@
+@@A A A @@@@@@@@@@X@A @F') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 200 200 0 0 127 127 127 127 127 255 255 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>Q??>R???T??>8??????>8@@AT@@BR@@DQ') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:22 / cg"
+!
+
+new_24x24Icon
+    "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 new_24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#new_24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class new_24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@
+@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@@@@@@@@@@@@FX@@@
+@@@@@@@@@@$FZP@I@@@@@@@@@@BVZPBP@@@@@@@@@@@IBP$@@@@@@@@@@@@F&Y@@@@@@@@@@@@&Y&Y&Y@@@@@@@@@@@@&Y@@@@@@@@@@@@@IBP$@@@@@@@@@
+@@BPBPBP@@@@@@@@@@$@BP@I') ; colorMapFromArray:#[0 0 0 0 0 255 0 127 127 0 255 0 0 255 255 127 127 127 170 170 170 255 0 0 255 0 255 255 255 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DQ@@BR@@AT@@@8@@G?@@@8@@AT@@BR@@DQ') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:20 / cg"
+!
+
+packageIn24x24Icon
+    "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 packageIn24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#packageIn24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class packageIn24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT,KB0,KAE]IRT%IRT%IRT%IRT%IRT%IRT,KB0,KAE]IRT
+%IRT%IRT%IRT%IRT%IRT,KB0,KAEA)RT%IRT%IRT%IRT%IRT%IRT,K@),KAE]IRT%IRT%IRT%IRT%IRTDV(S LT:1\VG!!2Y.%IRT%IRT%IRT%IRT%E(WZC^3
+IBPTL"JT%IRT%IRT%IRT%IRT%IR:AP!!;J>Q8;YRT%IRT%IRT%IRT%IRT%IRT8Q&Y-(= %IRT%IRT%IRT%IRT%IP]UJ\#H6P-#W+''9=+Z^Z@!!%IRT%IRTKD$3
+5:0*9>]MN^_''#$_'')M[(,YRT%IQ7 X"#Y*F;T)(*J._''93?I_>[B2)RT%IPA+\ =FFDJE)\1%]9V:7D''''HS"]YRT%IP ]) \C^UKO+2/"($DM%6EP@CN.YRT
+%IP<*AJ))-%NW11O9[V]$6J.853\)YRT%IR705]01IZ+X$Z*Z72QK2 ZK-MD%IRT%IRTMLE2''+5''6D@K_VVLU>%^ 63*%IRT%IRTP66_[^CK$L3ME]H00DFB
+TQ=Y%IRT%IRT,.0I;N3_;M<N60M,Z]CF7V>R%IRT%IRTRCU3R$*>SMSG@ <;T; [A:JT%IRT%IRT%I.4TE,8"4IX_!!9UCL>F%IRT%IRT%IRT%IRT@PDA@RWU
+/6LP4YRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT') ; colorMapFromArray:#[220 170 60 238 212 149 215 159 53 206 154 55 248 206 99 145 207 140 177 181 168 126 115 98 128 218 120 222 166 61 249 212 116 225 175 64 158 109 29 251 206 88 219 165 60 215 159 52 128 116 97 174 193 173 241 194 77 129 218 121 98 209 89 157 116 45 249 211 118 142 222 137 252 212 110 125 216 119 216 165 58 153 106 27 250 204 86 240 229 207 213 155 51 167 115 31 228 184 77 235 193 90 157 180 156 187 145 62 89 208 81 193 187 180 121 207 115 247 203 93 219 169 60 86 207 77 167 126 53 122 217 115 236 227 207 132 193 128 169 124 40 227 178 66 156 111 33 245 211 123 107 212 99 216 166 74 177 131 52 215 160 56 246 203 92 115 214 108 213 157 53 163 184 162 91 208 83 165 113 30 227 180 69 253 212 106 253 209 92 252 210 102 224 174 63 177 125 36 215 158 52 207 155 59 167 122 45 72 176 65 233 184 71 92 57 7 196 143 49 215 173 93 218 161 56 253 209 91 217 159 54 177 194 176 247 201 83 250 205 87 203 148 50 167 116 32 232 212 151 163 112 30 212 174 102 161 110 29 254 213 105 222 172 62 214 157 52 151 108 38 177 196 177 208 153 51 215 164 57 238 191 79 167 122 39 248 202 84 159 181 158 251 212 112 231 182 69 184 133 47 175 194 174 144 103 39 244 210 125 220 169 60 136 220 131 176 124 36 142 206 138 233 187 78 178 128 37 225 170 65 154 177 153 161 112 30 223 173 63 249 207 98 179 134 49 217 161 56 169 178 167 208 159 56 246 200 83 241 226 190 126 209 120 112 73 12 159 181 157 125 217 118 157 117 51 219 174 76 214 156 51 245 201 92 122 216 115 243 205 111 173 122 34 176 126 37 234 186 75 233 185 72 127 115 97 92 207 83 247 211 119 219 181 98 254 211 98 214 158 53 175 137 64 129 200 123 53 32 3 117 215 110 207 156 58 195 156 74 128 98 47 240 194 81 0 0 0 243 210 129 227 177 66 246 211 122 249 203 85 119 214 112 240 201 102 165 145 115 239 193 82 238 198 99 199 151 53 225 171 65 170 128 44 243 210 128 195 195 195 246 211 121 245 202 95 221 199 159 244 198 80 208 160 72 239 191 75 242 195 78 234 186 71 229 180 68 197 151 65 251 208 99 227 177 65 254 211 95 85 206 76 236 217 172 206 151 55 99 210 90 169 134 80 196 158 81 116 214 109 214 181 116 159 110 29 201 150 51 177 197 177 242 213 143 254 211 94 214 164 58 217 160 55 167 129 71 170 121 36 177 132 49 231 183 73 203 155 55 226 176 65 92 208 83 166 115 31 216 159 53 254 212 104 250 208 100 210 167 74 217 164 62 175 129 46 166 120 42 212 161 56 130 93 31 168 118 32 194 194 194 155 111 39 162 116 35 216 159 54 168 156 140 250 208 99 206 158 69 221 171 61 245 199 81 69 43 5 208 156 56 196 148 52 164 113 30 241 212 143 221 166 60 224 170 65 177 197 175 223 174 64 219 168 59 119 215 112 252 207 89 241 196 87 131 91 25 239 196 90 196 148 50 160 116 42 253 211 103 221 166 61 158 181 156]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@G<@@G<@@G<@@G<@@??@@_>@@O<@@G8@A??8G??<O??<O??<O??<O??<O??8G??8G??8G??8G??0C??@@?<@@@@@') ; yourself); yourself]
+!
+
+packageOpen24x24Icon
+    <resource:#programImage>
+    ^ self packageOpen24x24Icon2
+!
+
+packageOpen24x24Icon1
+    "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 packageOpen24x24Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#packageOpen24x24Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class packageOpen24x24Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OB (JB (JB (J
+B (JB @@@@@@@@@@@@<JA XFA XFA XFA LHC@@@@@@@@@@@C1,FA XFA XFA XFA XIE0(@@@@@@@@[B XFA XFA XFA XFA@T^GA J@@@@@AHJA XFA XF
+A XFA XBA1(_GQ0J@@@@EQ4F@PXFA XFA XFA XEF2$#G (@@@@UC2@ HB@_G!!<_GQ<_G14/L"0 B @@@@@OK2<,KB,+J2$)JR$)GP(%MB<JB @@@@<0MST3
+L3L0LB</K20$EQ(JJ0(PB @@@@<OCP4MCP0LC@0JB (JFQ LB 8TB @@@@@@B!!(ZF!!(ZF!!(ZF!!(ZFQ PC!!@TB @@@@@@C14^G!!8]GQ4]GA,[F1$VEQTTB @@
+@@@@DA8_G!!8\GA0\GA0\F1$VEQTTB @@@@@@D!!8!!HQ<_G1<]GA0\F1$VEQTTB @@@@@@D"D%IRT"H!!4]GQ4]GQ$VEQTJ@@@@@@@@D"\*JBX&I!!8^G!!8^GQ$V
+EQ@@@@@@@@@@D280J"(''I2@ HA8^GQ$VD@@@@@@@@@@@D3P4LS@-KR4%IBD!!H@,J@@@@@@@@@@@@DP,KB0,KB0,KB0,KB0,@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 24 40 4 56 100 4 60 110 24 86 40 36 60 80 44 44 40 48 70 50 88 46 10 108 56 10 108 58 10 112 58 0 116 60 10 124 66 10 124 72 20 132 74 20 132 76 20 140 78 20 140 82 30 144 82 20 144 86 30 148 92 40 152 96 40 152 98 40 160 104 50 164 106 50 172 116 60 180 124 70 180 128 70 188 132 70 192 140 80 196 140 80 196 142 80 196 150 90 200 154 90 204 148 90 204 150 90 204 158 90 204 162 100 208 158 100 208 166 100 212 156 90 212 170 110 216 162 100 216 164 110 216 174 110 216 178 120 220 170 120 220 182 120 220 186 130 224 184 140 228 190 150 228 200 160 244 224 200]; mask:((Depth1Image new) width: 24; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@O?<@_?<@??>A???C???G??>O??<O??<_??<_??<G??<G??<G??<G??<G??8G??0G?? G??@G?>@') ; yourself); yourself]
+!
+
+packageOpen24x24Icon2
+    "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 packageOpen24x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#packageOpen24x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class packageOpen24x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+TUEQTUEQTUEQTTR3TUEQTUEQTUEQTUEQTUEQTUEQTUEQ3;=MTUEQ63]QTUEQTUEQTUEQTUEQTUF3V#V@W%EQFXECTUEQTUEQTUEQTUEQ,08B\7>$%H9^V7M(
+)%EQTUEQTUEQTPZ3W0<4\6"$/+6[Y6"L+MYQTUEQTUEQ/21K*@=[''\4;.:-5''V"XDJCITUEQTUEQG#GQ*A)&4+,0R-<<%QL\!!UW^"UEQTUEQT\,G)47F8K1V
+$!!^/$70:*T#R5UMQTV(8Z%6CP@/T.<]#-;@#B$$T.YX.]4EQTUD8NV,3^!!^0E"H/[:LVX2JF4JGD&UEQTUEQ "Z.2+ZWOT*GJ&OSR)>RXLU0_V%6TUEQTXJ"
+P+5WX)KB"6I;3):*7FE-VBBOTUEQTUER)W I[,!!.6,LECLA\Q%SLO%EQTUEQTUF=/P@X,U#CDZEEEV"P"A=NTUEQTUEQTUE5%*T@I[!!17R$RID_]\%PCTUEQ
+TUEQTUDA!!XV5-[U>^]7]7P$I[P"4TUEQTUEQTUDADA@PDABJ-T^EXVE!!*R64TUEQTUEQTUFMGDIB]GR:DACA0YFQAI24TUEQTUEQTUEQSFWYZF U HAOS2"D
+[M!!QTUEQTUEQTUEQTZ5YY6][)JRLJEA$&%EQTUEQTUEQTUEQTUDMJ0HO\94!!SI+WTUEQTUEQTUEQTUEQTUEQL#X]C40[&))QTUEQTUEQTUEQTUEQTUEQT[H?
+I9*ZTUEQTUEQTUEQTUEQTUEQTUEQTUFZ&%EQTUEQTUEQTUEQ') ; colorMapFromArray:#[240 158 10 244 178 40 255 254 150 188 168 150 255 222 60 156 108 10 252 204 100 255 252 180 212 126 30 255 208 50 204 168 0 184 134 0 232 174 60 212 134 60 255 232 110 255 255 160 255 228 70 148 90 0 252 240 150 248 216 70 228 144 10 255 254 130 212 182 0 192 148 0 248 184 30 252 204 60 255 244 130 180 104 60 255 234 80 248 214 150 252 186 50 208 112 10 196 94 20 255 244 110 220 196 0 200 162 0 248 230 110 236 148 10 255 212 70 180 106 60 255 240 90 240 204 120 255 255 0 252 234 130 255 216 110 212 128 30 255 192 20 228 210 0 208 176 0 255 240 170 204 138 90 255 230 100 255 255 150 255 246 100 216 120 40 248 200 110 252 184 40 255 222 120 244 196 50 255 198 30 188 142 0 216 190 0 200 198 200 204 104 30 255 180 10 180 168 160 255 236 80 232 188 110 255 246 230 236 180 80 240 194 50 228 168 50 255 204 40 196 156 0 224 204 0 255 252 190 220 138 40 255 186 20 180 158 140 255 242 90 248 204 80 0 0 0 252 174 20 200 118 40 212 124 20 255 210 50 212 184 0 184 136 0 232 146 10 236 178 60 255 204 50 255 255 140 255 248 100 248 182 40 252 204 70 255 252 170 220 138 20 255 216 60 220 198 0 216 192 0 208 116 30 244 192 60 255 216 70 255 255 130 255 254 110 208 112 40 252 182 30 255 254 170 204 116 30 255 206 40 180 134 10 248 248 0 224 140 20 228 130 0 255 188 20 255 255 120 255 238 80 248 178 30 204 110 50 200 116 30 252 212 50 255 212 50 180 130 0 224 208 0 232 148 10 212 120 30 255 228 90 255 255 110 255 244 90 248 190 50 244 186 60 255 218 100 252 230 80 255 218 60 220 200 0 232 222 0 216 120 10 220 124 10 255 234 100 252 242 10 255 250 100 232 158 40 236 184 80 184 120 80 244 216 80 255 224 70 228 214 0 184 140 0 248 182 20 236 158 20 255 200 40 204 164 0 255 246 90 208 196 180 204 158 130 255 244 140 212 132 30 255 254 120 204 180 10 224 210 0 248 194 40 220 126 10 255 212 60 212 178 0 255 252 100 248 182 30 228 160 60 255 216 90 255 255 170 255 214 50 164 116 20 168 114 0 248 200 50 212 136 50 255 252 130 196 152 0 200 158 0 240 156 10 204 148 110 255 194 50 188 166 150 255 220 60 180 134 0 232 226 0 224 130 0 252 206 50 255 242 110 204 166 0 208 172 0 248 176 20 252 174 10 255 190 40 252 250 100 255 226 70 236 232 0 152 96 0 208 108 10 220 128 10 255 190 20 212 180 0 216 192 10 224 140 30 252 180 20 255 196 50 188 104 40 255 238 90 228 220 0 252 216 140 224 148 30 255 255 190 255 196 30 220 194 0 192 146 0 232 144 10 228 150 40 176 124 100 180 96 50 255 244 100 156 98 0 252 196 90 240 182 40 212 114 10 255 202 40 188 140 0 200 160 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@C@@@GF@@O''@@?? C??0G??8G??<C??>_??>O??<G???C???A??<A??8A??8A??8A??8A??8@??0@_? @O?@@G>@@C8@@A @') ; yourself); yourself]
+!
+
+packageOut24x24Icon
+    "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 packageOut24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#packageOut24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class packageOut24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(YN%XZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!)*NX9ZF!!(ZF
+!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF$E%TO4*V!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZPO@!!:^%>#%(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!&>''[#</N3,// RF!!(ZF!!(ZF!!(ZF!!(ZF&!!,HVUAP
+TEAPTAH.!!(ZF!!(ZF!!(ZF!!(ZF!!(ZFEC,;[F1Q!!XZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZFDCT@XVF%NHZF!!(ZF!!(ZF!!(ZF!!(YO@* ]EHIVB0.\JBH"/8-G!!(ZF!!(ZFN*0\
+%H= ]:Z5HKB+.JI%R8^:Y(ZF!!(Y0G2T%_G1[\''UDCRMZ@Y.G([)WSXZF!!(XZ!!;Y1\WD%IRT*_CBX.U1''J3DG@8ZF!!(Y>_V^Q+0)@PEN6-(%FY1VCA2EBE8ZF
+!!(ZSER.WA"ZR$)F/B)&HJ4E3E&''A#XZF!!(X6!!L@GWWNSPU]RSA"7\2FJ#I<4!!(ZF!!(ZFD1L>KV$!!K@\''.1$^0LE6BSN*!!(ZF!!(ZF,&I-X&I),*9U/P89Z &@
+Z6,E!!(ZF!!(ZF]@18C@0LC@0L,)83)HE+,;QE!!(ZF!!(ZF+QEH,[DQ_7=?_7>3*Z@OIF"F!!(ZF!!(ZF!!$''B^[1XW%9^OS^ (G,$!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!#IC
+JVP$''XZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZF') ; colorMapFromArray:#[84 202 80 240 202 100 212 174 100 208 160 60 156 180 160 152 108 40 244 198 80 224 174 60 128 218 120 176 126 40 252 208 90 72 180 60 220 166 60 100 144 90 156 112 40 152 106 30 68 174 60 216 160 60 120 208 120 176 132 50 68 164 60 240 192 80 220 168 60 200 150 50 156 118 50 144 104 40 240 212 150 144 206 140 216 166 70 188 146 60 176 138 60 244 206 110 64 168 60 220 170 60 68 44 10 72 130 70 128 116 100 248 212 120 244 200 80 224 176 60 56 34 0 168 130 70 244 212 120 240 194 80 220 172 60 200 152 50 156 178 150 100 210 90 240 212 140 236 186 80 192 188 180 180 128 40 168 122 50 84 204 80 216 182 120 212 156 50 176 182 170 156 112 30 236 228 210 88 208 80 144 208 140 216 156 50 180 134 50 116 214 110 252 210 90 232 182 70 212 162 60 168 156 140 156 172 120 128 98 50 248 206 100 236 194 90 216 162 60 164 146 120 116 216 110 244 202 100 232 188 80 212 168 70 176 194 180 240 230 210 92 208 80 72 176 70 236 186 70 255 212 90 120 214 110 168 120 40 76 186 70 232 184 70 212 158 50 124 216 120 164 174 80 244 214 140 248 208 100 228 176 70 216 158 50 120 216 110 168 126 50 84 200 70 224 170 70 128 200 120 184 134 50 132 92 30 236 218 170 248 204 90 196 196 200 216 164 60 172 122 40 168 116 30 84 206 80 224 172 70 136 220 130 176 196 180 240 226 190 252 212 110 232 212 150 228 178 70 208 152 60 180 188 130 168 122 40 60 154 60 224 166 60 204 148 50 124 218 120 132 94 30 244 210 130 248 200 80 228 184 80 216 160 50 172 122 30 168 118 30 76 188 70 232 186 70 204 156 60 168 178 170 0 0 0 252 208 100 240 198 100 220 182 100 216 166 60 172 128 40 168 124 40 220 200 160 132 194 130 196 152 70 176 198 180 252 204 90 248 202 80 228 180 70 208 158 70 164 184 160 160 182 160 244 196 80 255 214 110 196 158 80 176 194 170 252 210 100 64 164 60 196 194 190 208 154 60 164 116 40 160 110 30 244 202 90 92 58 10 128 210 120 176 124 40 76 180 70 72 178 60 144 222 140 208 160 70 164 112 30 160 116 40 60 152 50 216 174 90 196 144 50 176 130 50 252 206 90 64 166 60 220 162 60 208 156 60 164 114 30 160 112 30 68 172 60 255 212 100 196 156 70 52 32 0 252 212 100 240 196 90 220 174 80 208 154 50 156 116 50 108 212 100 112 74 10 224 172 60 196 148 50 168 134 80]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@A @@C0@@G8@@O<@@_>@@??@@G<@@G<@A??8G??<O??<O??<O??<O??<O??8G??8G??8G??8G??0C??@@C<@@@@@') ; yourself); yourself]
+!
+
+photoAreaIcon
+    "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 photoAreaIcon inspect
+     ImageEditor openOnClass:self andSelector:#photoAreaIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class photoAreaIcon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+QTUEQTT@@@@@@@@@@@@@@@@@@@@@@@@@QTUEQTT@@@@@@@@@@@@@@@@@@@@@@@@@QTT@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QTT@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@QTT@@C !!NC 8NC 8@@@@@@@@@@@@@@@@@@@@NQ]CP4L*@@@@@@@@@@@@@@@AI @@@@ACI!!P.JR$#JR$)JR$)JR$)JR$%I @@@@ACI#<.J2$#H2L#
+H2L#H2L#H2$TI @@@@ACEATTA"L#H2LJB (JB"XJA",+I @@@@ACI!!TTDDH#IS8FJR$)JRX&IPX+I @@@@ACEATKH2L&B"$)IRD JR$)I (+I @@@@ACI#<T
+D@X&J3(5CAX1MST)N"X+I @@@@ACI#<&DB$&HRPVLS01LSTUN"X+I @@@@ACB!!4JD@4&CQ(VOA8^KCDUN"X+I @@@@ACIR8JJ2$&JQ(NKC(1KCDUN"X+I @@
+@@ACIP(\J3,&A#<<LP81LT@:A!!PFI @@@@ACMRT%A X:MR$0C 8NF#(!!MQPFI @@@@ACBST=A XFA#<)LC@0HS(?I XFI @@@@@[BR<)HRD!!HRD:N#(:N#(!!
+N#(:I @@@@@[F1(ZF!!(ZF!!)CL#H2P4PZF!!)D@DUE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DUE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DUE@@@@@@@@@@@@@@@@
+@@@@@@@@@DUEQTUE@@@@@@@@@@@@@@@@@@@@@@@@@DUEQTUE') ; colorMapFromArray:#[143 143 143 162 162 162 23 41 73 195 195 195 212 212 212 222 222 222 236 236 236 242 242 243 255 255 255 138 138 138 161 161 161 179 179 179 37 53 82 208 208 209 72 84 105 235 235 235 243 243 243 254 254 254 123 131 145 158 158 158 178 178 178 193 194 194 39 61 99 92 92 92 221 225 233 240 241 244 122 122 122 135 135 135 155 155 155 168 173 182 169 179 200 77 77 77 219 219 219 229 229 229 239 241 243 248 248 248 133 133 133 153 153 153 174 174 174 190 190 190 205 205 205 216 217 217 100 100 100 240 240 240 85 107 141 152 152 152 171 171 172 187 187 187 202 202 202 44 68 111 98 98 98 237 237 237 247 248 248 150 150 150 161 164 172 186 186 186 201 201 201 215 215 215 215 217 228 238 236 234 74 97 140 145 145 146 167 167 167 184 184 184 192 196 204 85 85 85 225 225 225 108 108 108 116 116 116 25 25 25]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'>@@@>@@@0@@@0@@@3?@@G??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??;@@@C@@@C@@@_@@@_') ; yourself); yourself]
+!
+
+photoIcon
+    "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 photoIcon inspect
+     ImageEditor openOnClass:self andSelector:#photoIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class photoIcon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@C !!NC 8NC 8@@@@@@@@@@@@@@@@@@@@NQ]CP4L*@@@@@@@@@@@@@@@AI @@@@ACI!!P.JR$#JR$)JR$)JR$)JR$%I @@@@ACI#<.J2$#H2L#
+H2L#H2L#H2$TI @@@@ACEATTA"L#H2LJB (JB"XJA",+I @@@@ACI!!TTDDH#IS8FJR$)JRX&IPX+I @@@@ACEATKH2L&B"$)IRD JR$)I (+I @@@@ACI#<T
+D@X&J3(5CAX1MST)N"X+I @@@@ACI#<&DB$&HRPVLS01LSTUN"X+I @@@@ACB!!4JD@4&CQ(VOA8^KCDUN"X+I @@@@ACIR8JJ2$&JQ(NKC(1KCDUN"X+I @@
+@@ACIP(\J3,&A#<<LP81LT@:A!!PFI @@@@ACMRT%A X:MR$0C 8NF#(!!MQPFI @@@@ACBST=A XFA#<)LC@0HS(?I XFI @@@@@[BR<)HRD!!HRD:N#(:N#(!!
+N#(:I @@@@@[F1(ZF!!(ZF!!)CL#H2P4PZF!!)D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[143 143 143 162 162 162 23 41 73 195 195 195 212 212 212 222 222 222 236 236 236 242 242 243 255 255 255 138 138 138 161 161 161 179 179 179 37 53 82 208 208 209 72 84 105 235 235 235 243 243 243 254 254 254 123 131 145 158 158 158 178 178 178 193 194 194 39 61 99 92 92 92 221 225 233 240 241 244 122 122 122 135 135 135 155 155 155 168 173 182 169 179 200 77 77 77 219 219 219 229 229 229 239 241 243 248 248 248 133 133 133 153 153 153 174 174 174 190 190 190 205 205 205 216 217 217 100 100 100 240 240 240 85 107 141 152 152 152 171 171 172 187 187 187 202 202 202 44 68 111 98 98 98 237 237 237 247 248 248 150 150 150 161 164 172 186 186 186 201 201 201 215 215 215 215 217 228 238 236 234 74 97 140 145 145 146 167 167 167 184 184 184 192 196 204 85 85 85 225 225 225 108 108 108 116 116 116]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@C?@@G??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??8@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+redoXP24x24Icon
+    "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 redoXP24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#redoXP24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class redoXP24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A,WEEKUE5-@@@@@@@@@@@@@@@@@@@@@E0>D!!</HQ%@VF4@@@@@
+@E!!BQ&L@@@@@W@HXHBT(KS@2F$U''@@@@@C-RT40@@@A(O1 [FA@OEB\.LR8FV0@@@C)MS4(@@@APDQ,X@%]"VTPPKB</CE,@@C%GRT(@@@@?F1,GV0@@@@AV
+@2H.LP9[@@,8PT(@@F EF1-C@@@@@@@@X#8]J2<MV0(6M4(@@FDKF1-K@@@@@@@@@FT>GB -CP 4MT(@@FPGF1-H@@@@@@@@@@A&O!!,%J"\1L4(@@@@AF1,E
+Z @@@@A)X&I!!VP@WIBX,K4(@@@ANE!!,OU@@@@FT?B0,KB0,UGBD%JT(@@@A[A1,[@V(@@EXQF1,[F1,[F1,^H4(@@@@@P1X[D4,@@E<DD1LSD1LSD1LSD4(@
+@@@@W T[F0%U@@@@@@@@@@@@@@@@@@@@@@@@@D(QF1,BV @@@@@@@@@@@@@@@@@@@@@@@F,=E!!,X@%(@@@@@@@@@@@@@@@@@@@@@@@A @!! [F@IZ@@@@@@@@
+@@@@@@@@@@@@@@@@V HXF05P@@@@@@@@@@@@@@@@@@@@@@@@@E(BDT!!+@@@@@@@@@@@@@@@@@@@@@@@@@@AZOF,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[1 55 156 1 58 159 1 62 163 1 64 165 1 65 166 1 68 169 1 69 170 1 71 172 1 74 174 1 74 175 1 75 176 1 78 179 1 79 180 1 81 182 1 82 182 1 84 185 1 86 187 1 87 188 1 88 189 1 90 191 1 92 193 1 93 194 1 97 198 1 98 199 1 100 201 1 101 201 1 102 203 1 103 204 1 104 205 1 105 206 1 106 207 1 109 210 1 110 211 1 111 212 1 112 213 1 114 215 1 115 216 1 116 217 1 118 219 1 119 219 1 119 220 1 120 221 1 123 223 1 123 224 1 126 226 1 127 227 1 128 228 1 129 229 1 129 230 1 130 231 1 135 236 1 138 240 1 140 242 1 143 245 1 149 251 1 153 255 3 154 255 6 79 179 13 82 179 15 76 172 16 64 158 16 66 161 16 67 162 16 70 164 16 75 169 20 160 255 23 78 172 31 79 166 31 80 167 31 81 168 33 82 171 34 164 255 46 87 167 54 171 255 61 98 171 61 99 171 61 99 172 68 176 255 76 110 176 85 181 255 91 122 180 91 123 181 99 186 255 102 174 242 106 134 185 120 145 189 120 145 190 120 146 190 121 146 191 135 156 194 150 168 196 150 168 198 151 169 198 151 169 199 165 180 201 165 180 203 180 192 205 180 192 207 180 192 208 181 193 208 195 203 212 195 203 213 195 204 212 196 205 213 210 214 216 210 214 217 210 215 217 225 226 219 226 228 222 226 228 223]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@A?@@C?0^G?8^O?<^O?>^O!!?^_@?>_@_>_@O>O!!?>O#?>O3?>G3?>G8@@C<@@C>@@A?@@@?@@@_@@@N@@@@@@@@@@') ; yourself); yourself]
+!
+
+reload24x24Icon
+    "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 reload24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#reload24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class reload24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+\GA0\GA0\GA0\GA0\GA0\GA0[6=/[6=/\GA0\GA0\GA+N <@B0@OJU1+[6=/W@I+\GA0\GA0Z3(MJ4)YV%9RMAXIWF-\B Y+\GA0\GA+C2EXR346K3!!DT%9P
+DQ\JTP-+\GA0\G@_H%\<IBT&KR</NC9YW")QX -+\GA0\FXMTTH4MSX6K"<0NC 9SFI^Z@-+\GA0\@<4U5D4MC-RW$0>NC >O$1EZ@-+\GA0Z05CD DD@0@A
+DCQ^VS8>O#=EZ@-+\GA0N!!$FEA UBD]+Z!!0MR&EEO$UEZ@-+[6=/C0D#L#H\W6-+Z6,MTVELSD5SZ@-+[6=/@SMUU$%%Z6-+[ 1PXVI(ZF!!(Z@-+[6=/Z6-+
+Z6-+Z6-+B @@@@@@@@@@@@E+[0H@@@@@@@@@@@@JZ6-+Z6-+Z6-+Z6-+[0-(ZF!!(ZFI"T@))Z6-+Z5-''Y4@AZ6-+[0-(T5MMT6IQCVM+Z6-,LTEHL0DNZ6-/
+[0-(QTUESFIPCQ9-Z6@SGR@[BQ$(Z6-/[0-(QTUEO4QYW#PP@ @EA0DRP05$Z6-/[0-(QUMEO#8>QEM^VC04MEEWM@1+Z6-/[0-(X&!!SO#8>NC\6OS45MTIQ
+CUQ+Z6=/[0-(U2)!!V#88NC\.K"0,OED"F&-+Z6=/[0-QB!!LQTVISQC8=OS5QVBDLZ6-+[6=/[0XJQ&-OBQ$;VU9^WT(+CR]+Z6-/[6=/[0ENZ6-+Z4<\C@@K
+@@0''Z6-+Z6-/[6=/[6-+Z6-/Z6-+Z6-+Z6-+Z6-+Z6=/[6=/') ; colorMapFromArray:#[0 79 191 15 80 191 15 80 192 15 95 191 16 95 176 16 95 191 16 95 192 31 95 176 31 95 191 31 95 192 31 96 192 31 111 207 32 96 192 32 111 207 47 96 192 47 111 192 47 112 207 47 112 208 47 127 208 48 111 192 48 112 176 48 112 191 48 127 208 63 112 192 63 127 176 63 128 208 64 112 192 64 127 191 79 127 192 79 128 191 79 128 192 79 128 207 79 143 191 79 144 223 79 159 223 80 143 191 80 175 239 80 176 239 80 176 240 95 128 192 95 143 192 95 143 207 95 160 224 95 175 224 95 176 239 95 176 240 95 191 240 95 191 255 95 192 255 96 143 208 96 144 191 96 144 192 96 176 239 96 191 239 96 191 240 96 192 240 96 192 255 96 207 255 111 144 208 111 176 239 111 191 239 111 192 240 111 207 255 111 208 255 112 159 207 112 160 207 112 192 239 112 192 240 112 207 255 112 208 255 127 159 192 127 159 207 127 160 192 127 160 207 127 207 240 127 208 240 127 208 255 127 223 255 128 159 207 128 160 207 128 207 240 128 208 240 128 208 255 128 223 255 143 160 207 143 175 192 143 176 207 143 208 240 143 208 255 143 223 255 143 224 255 144 176 208 144 176 223 144 223 255 144 224 255 159 175 207 159 176 223 159 224 255 159 239 255 160 176 207 160 191 207 160 191 208 160 191 224 160 192 208 160 239 255 175 191 207 175 191 208 176 192 208 176 207 224 191 192 223 192 208 224 240 240 239 240 240 240]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@G>F@_?.@??>A??>C??>C??>C??>G>?>G<O>G8?>@@?>_?@@_?C8_>O8_?_8_??8_??0_??0_?? _??@]?>@X_8@@@@@') ; yourself); yourself]
+!
+
+rightArrow24x24Icon
+    "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 rightArrow24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#rightArrow24x24Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class rightArrow24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PH@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@0PB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PTF@ @@@@@@@@@@@@@@@@@@@@@@@@@@@0\@A@H@@@@@@@@@@@@@@@@A@PDA@PDH@P\I
+@@XB@@@@@@@@@@@@@@@AA0(@@@@@B ,LB @D@ @@@@@@@@@@@@@MB \NB ,ODADRD0(@A H@@@@@@@@@@@@M@@TTEQLQE!!\WD 0K@@PB@@@@@@@@@@@MB <W
+E1\WD!!\WD!!LYDQ(B@@@@@@@@@@@AB <[D10[GQ8QG!!$QF H@@@@@@@@@@@@AA!!(ZF!!(ZE1H^FQDZ@ @@@@@@@@@@@@@A@ HB@ HB@1DYDQ(B@@@@@@@@@@@@
+@@@@@@@@@@@@@QXQF H@@@@@@@@@@@@@@@@@@@@@@@@@@0PZ@ @@@@@@@@@@@@@@@@@@@@@@@@@@@Q(B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0H@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[224 224 224 0 32 64 0 0 0 0 64 96 32 128 160 128 160 192 32 96 128 128 192 192 0 64 64 160 192 192 192 224 224 160 192 224 96 192 224 32 64 96 160 224 224 128 192 224 96 160 192 0 160 192 0 128 192 64 192 192 64 160 192 96 192 192 32 160 192 0 128 160 192 192 192 64 224 224 0 96 128 32 192 192 64 192 224 0 192 224 0 192 192]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@D@@@F@@@G@@@G @@G0@O?8@O?<@O?>@O??@O??@O?>@O?<@O?8@@G0@@G @@G@@@F@@@D@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:15 / cg"
+!
+
+rightArrow24x24disabledIcon
+    "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 rightArrow24x24disabledIcon inspect
+     ImageEditor openOnClass:self andSelector:#rightArrow24x24disabledIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class rightArrow24x24disabledIcon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PH@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@0PB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PTF@ @@@@@@@@@@@@@@@@@@@@@@@@@@@0\@A@H@@@@@@@@@@@@@@@@A@PDA@PDH@P\I
+@@XB@@@@@@@@@@@@@@@AA0(@@@@@B ,LB @D@ @@@@@@@@@@@@@MB \NB ,ODADRAP(@A H@@@@@@@@@@@@M@@TSE@TQEQXVD 0K@@PB@@@@@@@@@@@MB <V
+E!!XVD!!XVD TODQ\B@@@@@@@@@@@AB <PAQ PFQLQD0<QE0H@@@@@@@@@@@@AA!!\WE1\WE!!HSC1DW@ @@@@@@@@@@@@@A@ HB@ HB@1DODQ\B@@@@@@@@@@@@
+@@@@@@@@@@@@@QTQE0H@@@@@@@@@@@@@@@@@@@@@@@@@@0PW@ @@@@@@@@@@@@@@@@@@@@@@@@@@@Q\B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0H@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[224 224 224 25 25 25 0 0 0 48 48 48 102 102 102 153 153 153 80 80 80 172 172 172 44 44 44 182 182 182 214 214 214 185 185 185 166 166 166 57 57 57 204 204 204 176 176 176 144 144 144 115 115 115 96 96 96 134 134 134 163 163 163 124 124 124 92 92 92 70 70 70 156 156 156 137 137 137]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@D@@@F@@@G@@@G @@G0@O?8@O?<@O?>@O??@O??@O?>@O?<@O?8@@G0@@G @@G@@@F@@@D@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+sUnit24x24BaseIcon
+    "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 sUnit24x24BaseIcon inspect
+     ImageEditor openOnClass:self andSelector:#sUnit24x24BaseIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class sUnit24x24BaseIcon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@BH"H"H"H"H"H"H@H"H"H"H"H"H"H0@"H"H"H"H"H"H3@BH"H"H"H"H"H3L@H"H"H"H"H"H3L0@"H"H"H"H"H3L3@BH"H"H"H"H3L3L@H"
+H"H"H"H3L3L0@"H"H"H"H3L3L3@BH"H"H"H3L3L3L@H"H"H"H3L3L3L0@"H"H"H3L3L3L3@BH"H"H3L3L3L3L@H"H"H3L3L3L3L0@"H"H3L3L3L3L3@BH"H3
+L3L3L3L3L@H"H3L3L3L3L3L0@"H3L3L3L3L3L3@BH3L3L3L3L3L3L@H3L3L3L3L3L3L0@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<') ; yourself); yourself]
+!
+
+sUnit24x24DebugIcon
+    "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 sUnit24x24DebugIcon inspect
+     ImageEditor openOnClass:self andSelector:#sUnit24x24DebugIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class sUnit24x24DebugIcon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@A0XB@@@LC@0LC@0LC@0LC@(LC@0LA0@@A0\@C@0LC@0LC@0JB 0BC@0LA0@@A0\@@@0LC@0LC@0LC@0BB 0EAPTEA@\@A @L
+C@0LC@TKC@0L@ (LAP(JAPL@A X@C@0LC@0EAP0LC@,@A@(KB0(EAPD@@@0LC@0LC@@EC@0E@0@EB0,KB TA@@@LC@0LC@0L@@@EAPTE@@TKB0(E@P@@C@0L
+C@0LC@TEB (J@0H@AP(E@PD@@@0KC@0LC@TEB ,KAPTJAPLC@PDA@@@LC@0L@0TEB ,KAPTKB0(E@@DF@@@@B0@@@0TEB ,KAPTKB0,JAPHB@@D@@@@KB0LC
+B ,KAPTKB0,KB LG@PDA@@@KB0,EAP,KAPXKB0,KB T@@@XA@P@@B0,KAPTKAPTKB0,KB0(E@@@@@@D@@@,LB0,HAPTKB0,KB0(E@@\A@PHA@@@LC@0LA PJ
+B0,KB0(E@@\A@PDA@P@@C@0LC@DAB@TEAPTE@@@G@PDA@PD@@@0LC@DA@PDFA XFA X@@PDA@PDA@@@LC@DA@PDA@PDA@PDF@@DA@PDA@P@@C@DA@PDA@PDA
+@PDF@@DA@PDA@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 255 0 44 44 44 52 0 0 100 72 72 108 0 0 110 110 110 148 148 148 152 49 49 208 208 208 209 0 0 248 0 0 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???8???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<') ; yourself); yourself]
+!
+
+sUnit24x24Icon
+    "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 sUnit24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#sUnit24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class sUnit24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@BH"H"H"H"H"H"H@H"H"H"H"H"H"H0@"H"H"H"H"H"H3@BH"H"H"H"H"H3L@H"H"H"H"H!!DCL0@"H"H @@@!!D@L3@BH"H ???1D@L3L@H"
+HQ???1D@L3L0@"H D_?1D@@3L3@BH"@AG1D@<CL3L@H"H@@QD@?0L3L0@"H <@D@??@3L3@BH"C?@@??<CL3L@H"H ?0??<CL3L0@"H"HO??<CL3L3@BH"H3
+@@@CL3L3L@H"H3L3L3L3L3L0@"H3L3L3L3L3L3@BH3L3L3L3L3L3L@H3L3L3L3L3L3L0@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<') ; yourself); yourself]
+!
+
+saveImage24x24Icon
+    "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 saveImage24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveImage24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class saveImage24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DP@@@@@@@@@@@@@@DPL"H"H"H"H"H3D@DPL$QDQDQDQDH1D@DPL$EAQAQAEDH1D@DPL$EAQAPTQDH3D@DPL$EADQ
+PTQDH3D@DPL$EAQAPTDTH3D@DPL$EAQAPTPTH3D@DPL$EAQAPTPTH3D@DPL$EAQAQADTH3D@DPL$QDQDQDQDH3D@DPL"H"H"H"H"H3D@DPL3L3L3L3L3L3D@
+DPL3DQDQDQDQL3D@DPL3D3L3L3D#L3D@DPL3DQ@3L3D"L3D@DPL3D"@3L3D"L3D@DPL3D@@3L3D"L3D@DSDQD"H"H"DQLQD@DP@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170 200 200 200]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??<O??8@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:12 / cg"
+!
+
+shell24x24Icon
+    "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 shell24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#shell24x24Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class shell24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@L3L3L3L3L3L3@@@@LQDQDQDQDQDQ@@@@LRH"H"H"H"H1@@@@LRH$H"H"H"H1@@@@LRIDP"H"H"H1@@@@LRP$IBH"H"H1@@@@LRP4H"
+H"H"H1@@@@LRIDP"H"H"H1@@@@LRH4IBH"H"H1@@@@LRP$IBH"H"H1@@@@LRIDP"H"H"H1@@@@LRH$H"QDIDP1@@@@LSL3L3L3L3L1@@@@@QDQDQDQDQDQ@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8G??8C??8@@@@@H@(@H@(A/L(BIR(AI^(@)P(CIL(@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:09 / cg"
+!
+
+snapshot24x24Icon
+    "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 snapshot24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#snapshot24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class snapshot24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")J>/)BH@@@@@@@@@@@@@[&9?_7<@@D@\CP4MCQ1@
+@@@@@@@@@CEJR$)JR$)%YZ.O"S 8"X>O#8>O#8<A@E9JR$)JR$)JN389B+.;B#$^BEI;L8=?@D&TG6MJR$)JM3\EFA XF@T7,X,!!Z(>/@@,B-QXFR$)PM3@@
+[6=/[0ALULB))8>B@KYN&)</R$*X[66Y!!!!PT!!*M-''I"HZ79X@KYN]QX/R$)YI"Q&P%EQP&X$I%%8^YIX@KYN&)<#R$*>Q44.ZR\''ZTTRE;8C#H4#@KYN]QX#
+R$(FC(:U]JJ"]IVNC Z7[KJ=@KYN]QX#R$)3Y1-H"(*J"$ [Y5>(,B"]@KYN&)<#R$(=O0$  XFA R@IO1Y=!!3QO@KYN]QX#R'' *GTL,+YBP+R2:PWX6IX#A
+@KYN&)<#R&J4+A6E 4YF 723] \G^+''A@@,B&!!X5R%5 DZ@]GQ4]GQ56**)1\+<D@IFS%2%JR!!@PZJV.+*:.+*F****8OG\Z@LEKEY98)!!A$ZE]W+*:.+%]W
+V*)$ZEXO@@2[T6M#T5M0\GB[J6E!!XVDSWGA0\I,L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[199 201 201 152 154 156 116 118 120 201 203 205 135 137 140 238 237 236 141 143 145 190 197 206 217 219 220 84 161 232 134 201 255 110 112 114 152 154 155 255 254 253 201 197 193 135 137 139 180 182 186 168 170 173 101 148 198 132 137 143 49 118 196 219 221 221 137 139 141 179 177 176 255 250 246 255 255 255 135 137 138 91 167 239 195 195 196 190 187 186 217 219 219 115 117 119 145 178 243 137 205 255 179 181 183 143 145 147 170 177 186 189 191 194 153 153 154 133 193 249 217 218 220 132 135 137 142 144 147 134 139 141 140 174 245 233 233 233 108 172 233 143 144 146 216 216 217 153 155 157 249 249 249 190 191 191 213 214 216 142 144 146 188 193 198 214 215 216 179 227 255 224 222 219 255 255 254 216 218 219 180 182 185 137 138 139 217 218 219 213 208 205 169 171 172 188 189 190 125 184 241 144 184 222 251 251 251 108 171 233 184 184 252 180 178 176 125 177 240 105 107 109 213 214 215 196 198 200 215 216 217 94 144 198 117 119 121 139 141 143 212 213 214 149 206 255 191 192 192 132 134 136 213 214 214 223 223 223 184 186 189 183 185 188 144 146 148 193 195 196 181 185 192 234 234 234 133 135 138 186 188 190 155 157 161 138 139 142 184 186 188 129 145 150 198 200 202 131 133 135 181 183 186 234 234 233 67 128 198 213 209 204 182 184 187 134 194 250 211 209 208 206 207 209 198 200 201 158 158 158 177 178 180 176 177 179 133 135 137 182 185 187 182 184 186 138 139 141 122 184 243 121 123 125 140 147 156 185 187 190 204 205 207 203 204 206 187 191 197 182 179 176 89 158 226 192 193 197 238 238 239 148 150 153 252 252 252 142 178 241 146 148 151 175 181 250 241 241 241 89 157 225 58 124 196 192 193 196 207 208 210 179 228 255 128 178 240 212 210 209 200 202 204 230 231 232 94 161 227 205 203 202 158 180 244 107 109 111 234 235 235 113 115 117 109 111 114 123 187 247 254 254 254 118 120 122 210 211 213 174 177 183 178 181 182 134 136 138 176 176 179 140 142 145 221 222 222 154 157 159 142 143 145 145 149 154 121 184 243 174 177 181 147 149 153 166 169 171 188 190 192 230 230 230 194 196 198 248 245 243 181 184 187 223 222 221 145 145 145 159 180 245 147 150 152 147 149 152 193 196 198 215 215 216 226 227 228 221 219 216 163 165 166 177 181 181 111 113 115 199 201 202 179 181 185 201 204 207 143 184 223 135 201 255 242 242 242 141 143 146 163 164 167 190 192 194 231 231 231 138 140 142]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@A>@G3?@_???_???_???_???_???_???_???_???_???_???_???_???_???_???_???_???@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+systemBrowser24x24Icon
+    "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 systemBrowser24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#systemBrowser24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class systemBrowser24x24Icon'
+        ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADQDQDR@@@@@@@@@AL3L3L4@@@@@@@@@AL3L3L4@@@@@@@@@BQDQDQD@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@P@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@@@@QDQDQD @@@@DDQD@UUUUUU@@@@@@@@@@$QDQDP@
+@@@@P@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@P@@@@@@@@@@@@@@@@@@@@QDQDQD @@@@DDQD@VY&Y&Y@@@@@@@@@@$QDQDQ@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 172 170 170 255 0 0 128 128 130 0 255 0 255 255 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@_? @_? @_? @_? @_? @_? @@ @@@ @@@ @@@ ??A0??A???A0??@ ??@ @@@ ??A0??A???A0??@@??@@@@@@@@') ; yourself); yourself]
+!
+
+uiPainter24x24Icon
+    "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 uiPainter24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class uiPainter24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BYBPADQDQDQDQDP@BYBP@@@@@@@@@@@@BYBPAUUUT UUUUH@@@@@AUUUT TQTUH@@@@@APTQT UU
+UUH@@@@@AUUUT TQDUH@@@@@APTQT UUUUH@@@@@AUUUT TUDUH@@@@@APTQT UUUUH@@@@@AUUUT UUUUH@@H&PAUUUT T"H%H@@@@@AUUUT T"H%H@@@$@
+AUUUT T"H%H@@@$@ARH"T T"H%H@@@$@ARH"T T"H%H@@H"PAUUUT UUUUH@@H&P@"H"H H"H"H@@H&P@@@@@@@@@@@@@H&P@@@@@@@@@@@@@H"P@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 200 200 0 0 127 127 127 127 127 255 0 0 240 240 0 255 255 0 100 100 100]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@??>N??>N??>N??>D??>D??>D??>D??>D??>D??>N??>_??>_??>N??>N??>N??>_??>_??>_??>_@@@_@@@N@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:06 / cg"
+!
+
+undoXP24x24Icon
+    "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 undoXP24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#undoXP24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class undoXP24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[U5TR5E\[@@@@@@@@FMFP% @@@@@@F5XPA$!!K1<R
+O%0@@@@@@D1ST#,@@@@@Y4TZL#@-JBT F@I\@@@@@D)OSS(@@@A[A"81K"\TC1@XF1 ?Z@@@@D)IQ3$@@E,LK2<,DDQYX%\BFA,QT@@@@D)AN@,@V081K"HC
+U @@@@A[A1,[O0@@@D(7M )[CR<+GS9"@@@@@@@@P1,[AV @@D(5M@ MKR \O&T@@@@@@@@@R1,[B6D@@D(3LR\*IQ,>Y @@@@@@@@@@RA,[A6P@@D(/KBX$
+E0AYXVI"ZP@@@@A*AQ,[@P@@@D()IRD\EP,KB0,KO6T@@@ATC1,VS @@@D(#G!!,[F1,[F1,[DUX@@F(AF1,GV0@@@D(SD1LSD1LSD1LSAE<@@D,SF1YC@@@@
+@@@@@@@@@@@@@@@@@@@@UP$[F0U^@@@@@@@@@@@@@@@@@@@@@@AZ@!!,[DT(@@@@@@@@@@@@@@@@@@@@@@E(BFA,VOV,@@@@@@@@@@@@@@@@@@@@@V HXF1 B
+X@@@@@@@@@@@@@@@@@@@@@@@T@4[F@IZ@@@@@@@@@@@@@@@@@@@@@@@@Z4 Q@%(@@@@@@@@@@@@@@@@@@@@@@@@@@F,<V @@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[1 55 156 1 58 159 1 62 163 1 64 165 1 65 166 1 68 169 1 69 170 1 71 172 1 74 174 1 74 175 1 75 176 1 78 179 1 79 180 1 81 182 1 82 182 1 84 185 1 86 187 1 87 188 1 88 189 1 90 191 1 92 193 1 93 194 1 97 198 1 98 199 1 100 201 1 101 201 1 102 203 1 103 204 1 104 205 1 105 206 1 106 207 1 109 210 1 110 211 1 111 212 1 112 213 1 114 215 1 115 216 1 116 217 1 118 219 1 119 219 1 119 220 1 120 221 1 123 223 1 123 224 1 126 226 1 127 227 1 128 228 1 129 229 1 129 230 1 130 231 1 135 236 1 138 240 1 140 242 1 143 245 1 149 251 1 153 255 3 154 255 6 79 179 13 82 179 15 76 172 16 64 158 16 66 161 16 67 162 16 70 164 16 75 169 20 160 255 23 78 172 31 79 166 31 80 167 31 81 168 33 82 171 34 164 255 46 87 167 54 171 255 61 98 171 61 99 171 61 99 172 68 176 255 76 110 176 85 181 255 91 122 180 91 123 181 99 186 255 102 174 242 106 134 185 120 145 189 120 145 190 120 146 190 121 146 191 135 156 194 150 168 196 150 168 198 151 169 198 151 169 199 165 180 201 165 180 203 180 192 205 180 192 207 180 192 208 181 193 208 195 203 212 195 203 213 195 204 212 196 205 213 210 214 216 210 214 217 210 215 217 225 226 219 226 228 222 226 228 223]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@? ^C?0^G?8^O?<^_?<^?!!<_?@>_>@>_<@>_?!!<_?1<_?3<_?38@@G8@@O0@@_0@@? @@?@@@>@@@\@@@@@@@@@') ; yourself); yourself]
+!
+
+upArrow24x24Icon
+    "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 upArrow24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#upArrow24x24Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class upArrow24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PH@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@A@0PE@@@@@@@@@@@@@@@@@@@@@@@@@@DFA0 DAP@@@@@@@@@@@@@@@@@@@@@@@P$@A0(HA@T@@@@@@@@@@@@@@@@@@@@AB0@@C@4N
+C0PE@@@@@@@@@@@@@@@@@@DF@@@LB@ MD@<DAP@@@@@@@@@@@@@@@PLGDQHHD1LHE@8UA@H@@@@@@@@@@@@AE!!\XA@<SD1LHEPPYF DB@@@@@@@@@@D\@Q0A
+GA4OD1LJEPD\@Q0A@ @@@@@@@@@@@@@@@!!8^C1T_A@T@@@@@@@@@@@@@@@@@@@@@E @GHATRA@T@@@@@@@@@@@@@@@@@@@@@E @GDQT_A@T@@@@@@@@@@@@@
+@@@@@@@@@P@!!H!!TJA@T@@@@@@@@@@@@@@@@@@@@@@P\#IATTA@T@@@@@@@@@@@@@@@@@@@@@@QXXFPPDF H@@@@@@@@@@@@@@@@@@@@@@ TEAPTE@ H@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[224 224 224 0 32 64 0 0 0 96 128 160 0 96 128 0 0 32 128 160 192 192 224 224 0 160 192 128 128 160 32 192 192 128 160 160 96 192 224 0 192 224 32 192 224 32 160 192 64 224 224 160 192 224 64 192 192 0 128 192 0 192 192 0 128 160 32 64 96 64 96 128 32 96 128 0 64 128 0 64 96 192 192 192 0 32 96 32 128 192 128 192 224 64 192 224 128 192 192 160 224 224 96 192 192 96 160 192 64 160 192]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@F@@@O@@@_ @@?0@A?8@C?<@G?>@O??@_?? @?0@@?0@@?0@@?0@@?0@@?0@@?0@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+
+    "Modified: / 06-02-2007 / 19:40:02 / cg"
+!
+
+windowInspectIcon
+    "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 windowInspectIcon inspect
+     ImageEditor openOnClass:self andSelector:#windowInspectIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class windowInspectIcon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@E!!0[E1LOC@(HA TDA@PDA@PD@@@@@@@@GDP;L" $HA(UCP$IBP$IBP$N@@@@@@@@HTL9J2X#G1 RB0\GA0\GA0\N@@@@@@@@I7)4Y&U$X5YUUEQT
+UEQTUEPN@@@@@@@@NHZF!!(ZF!!(ZF!!(ZF!!(ZF!!(XN@@@@@@@@M8ZJ"(*J"(ZJ"(*J"(*J!!(XN@@@@@@@@M(ZJ!!(ZF!!#*F!!(*F!!(X:!!(XN@@@@@@@@MXY.O#5A
+S5]5!!(*F!!(X:!!(XN@@@@@@@@MDYQ\''1=^V5RSHNF!!(X:!!(XN@@@@@@@@VHQST5MST5M8T4FCN#(:!!(XN@@@@@@AY G!!8^G!!8^G!!8^F4>!!(ZF!!(XN@@@@@GA,
+#G!!ST5MST5MST81-WS(:#8XN@@@@@E=7K7!!S^G!!8^G!!8^G!!-OH:F#8XN@@@@@E%=K''!!S^G!!8^G!!8^G"BPH:F#8XN@@@@@E&BKW!!S^G!!8^G!!8^G"BRH:F#8XN
+@@@@@E%=KG!!S^G!!8^G!!8^G"BRH>F#8XN@@@@@E)3J''!!S^G!!8^G!!8^G"BOXZF#8XB@@@@@F=!!JW!!S^G!!8^G!!8^G!!1QX>O#8XN@@@@@@AJ[W!!8^G!!8^G!!8^G!!G
+ 8ZF!!(XN@@@@@@ANR''NB!!''!!8^G!!8"59)!!(ZF!!(XN@@BT#W=MO4)"^HJI!!XE6W&(NC 8NC 8C@INQ$G9K@@AOP$%PXE9+^0@@@@@@@@@@$9JP"F]\@@@@@@@@
+@@@@@@@@@@@@@@@@$)BHZE,@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 0 7 66 194 12 59 167 23 89 204 27 95 206 32 101 209 36 106 255 36 107 211 39 109 255 41 113 214 45 115 255 45 119 216 48 118 255 50 87 176 50 125 219 52 90 178 53 127 212 54 123 255 54 131 221 55 95 181 57 127 255 57 149 229 58 137 224 63 132 255 66 113 193 66 135 255 67 149 229 68 157 232 69 117 196 72 122 199 72 141 255 75 144 255 77 163 236 78 131 206 80 149 255 84 153 255 87 145 215 88 157 255 91 168 235 93 161 255 94 154 222 96 157 223 96 165 255 97 159 225 98 160 225 98 162 226 99 163 227 100 165 228 101 166 229 101 170 255 102 167 230 103 169 231 104 170 232 105 172 233 105 174 234 106 175 235 112 180 255 116 116 120 117 186 255 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 132 200 255 139 207 255 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 149 184 255 153 188 255 157 192 255 159 159 192 159 160 192 159 160 207 159 160 208 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 162 196 255 166 200 255 170 204 255 174 208 255 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 181 215 255 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 225 255 192 192 208 192 239 255 192 240 255 207 143 95 207 207 191 207 223 239 207 239 240 207 255 255 208 208 223 208 224 239 208 255 255 212 211 224 217 217 217 223 128 63 223 255 255 237 236 242 239 239 240 239 255 255 240 207 144 245 244 247 247 246 249 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@???@???@???@???@???@???@???@???@???@???A???C???C???C???C???C???C???C???A???A???O???_O<@?@@@>@@@') ; yourself); yourself]
+!
+
+windowInspectIcon2
+    "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 windowInspectIcon2 inspect
+     ImageEditor openOnClass:self andSelector:#windowInspectIcon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class windowInspectIcon2'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@AXVE1LOC@(HA TDA@PDA@PD@@@@@@@@@A0\L" $HA(UCP$IBP$IBP$N@@@@@@@@@BD!!J2X#G1 RB0\GA0\GA0\N@@@@@@@@@B\''Y&U$X5YUUEQT
+UEQTUEPN@@@@@@@@@C 8!!(ZF!!(ZF!!(ZF!!(ZF!!(XN@@@@@@@@@C\7"(*J"(ZJ"(*J"(*J!!(XN@@@@@@@@@CX6!!(ZF!!#*F!!(*F!!(X:!!(XN@@@@@@@@@CT5O#5A
+S5]5!!(*F!!(X:!!(XN@@@@@@@@@DYQ\''1=^V5RSHNF!!(X:!!(XN@@@@@@@@VHQST5MST5M8T4FCN#(:!!(XN@@@@@@AYJW!!8^G!!8^G!!8^F4>!!(ZF!!(XN@@@@@GA,
+JW!!ST5MST5MST81-WS(:#8XN@@@@@E=7JW!!S^G!!8^G!!8^G!!-OH:F#8XN@@@@@E%=JW!!S^G!!8^G!!8^G"BPH:F#8XN@@@@@E&BJW!!S^G!!8^G!!8^G"BRH:F#8XN
+@@@@@E%=JW!!S^G!!8^G!!8^G"BRH>F#8XN@@@@@E)3JW!!S^G!!8^G!!8^G"BOXZF#8XN@@@@@F=!!JW!!8^G!!8^G!!8^G!!1QP8NC 8N@@@@@@AJ[R%8^G!!8^G!!8^G!!G
+@@@@@@@@@@@@@@ANR''L)JR$)JR$)"59)@@@@@@@@@@BT#W=MO4)"^HJI!!XE6W&(@@@@@@@@@@INQ$G9K@@AOP$%PXE9+^0@@@@@@@@@@$9JP"F]\@@@@@@@@
+@@@@@@@@@@@@@@@@$)BHZE,@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 0 0 7 66 194 12 59 167 23 89 204 27 95 206 32 101 209 36 106 255 36 107 211 39 109 255 41 113 214 45 115 255 45 119 216 48 118 255 50 87 176 50 125 219 52 90 178 53 127 212 54 123 255 54 131 221 55 95 181 57 127 255 57 149 229 58 137 224 63 132 255 66 113 193 66 135 255 67 149 229 68 157 232 69 117 196 72 122 199 72 141 255 75 144 255 77 163 236 78 131 206 80 149 255 84 153 255 87 145 215 88 157 255 91 168 235 93 161 255 94 154 222 96 157 223 96 165 255 97 159 225 98 160 225 98 162 226 99 163 227 100 165 228 101 166 229 101 170 255 102 167 230 103 169 231 104 170 232 105 172 233 105 174 234 106 175 235 112 180 255 116 116 120 117 186 255 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 132 200 255 139 207 255 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 149 184 255 153 188 255 157 192 255 159 159 192 159 160 192 159 160 207 159 160 208 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 162 196 255 166 200 255 170 204 255 174 208 255 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 181 215 255 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 225 255 192 192 208 192 239 255 192 240 255 207 143 95 207 207 191 207 223 239 207 239 240 207 255 255 208 208 223 208 224 239 208 255 255 212 211 224 217 217 217 223 128 63 223 255 255 237 236 242 239 239 240 239 255 255 240 207 144 245 244 247 247 246 249 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@O??@O??@O??@O??@O??@O??@O??@O??@_??@???A???C???C???C???C???C???C???C???A??@A??@O?>@_O<@?@@@>@@@') ; yourself); yourself]
+!
+
+workspace24x24Icon
+    "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 workspace24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#workspace24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class workspace24x24Icon'
+        ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A&Y&Y&Y&Y&Y&Y&Y @@@@@@@@@@@@@@@@@QDQDQDQDQDQDQAP@TPDQDQ@Q@PQDQ@ @TPDQDQ@
+P@@QDQ@ @P@D@@Q@Q@PQDQ@ @PPDA@Q@Q@PQDQ@ @P@D@@Q@Q@@QDQ@ @QDQDQDQDQD1DQ@ @QDQDQDQDQD3DQ@ @QDQDQDQDQD3LQ@ @QDQDQDQDQD3DQ@G
+@QDQDQDQDQDQLQ@ @QDQDQDQDQDQLQ@ @QDQDQDQDQDQDQAP@@@@@@@@@@@@@@@@ARH"H"H"H"H"H%AP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 0 0 0 255 0 127 127 127 0 127 127 127 0 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-28x28'!
+
+bug28x28Icon
+    "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 bug28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#bug28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class bug28x28Icon'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUUT@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O?0@@@@@@?*+@@@@C3>**,@@@O*N***
+0@@C:#***,@@@N(@@@@@@@O*O***0@@@>3>**<@@@@@O??0@@@@@@C?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 192 192 192 255 0 0 128 0 0]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0L@@@#F0@@F_1@@@/>@@A/?0@@??>@G??? BG??8@A??>@G??? @???8@@[?<@@@/>@@@Y?D@@H1,@@@0L@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+bugReporter28x28Icon
+    "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 bugReporter28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#bugReporter28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class bugReporter28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@EUUUUUUUU@@@@@@@@@@@@@@@@@@T@@@@@@@@EUUUUUUUUAP@@@@@@@@@@@@@@@@TE@@@@@@@ADQDQDQDQAPT@@@@@@@@@
+@@@@@@DEAP@@@@@ADQDQDQDQ@PTE@@@@@@@@@@@@@@DAAP@@@@@DQDQDQDQD@PDE@@@@@@@@@@@@@@PA@P@@@@@DQDQDQ@ADA@D@@@@@@@PQDTPDQ@@D@@@@
+@@@@ADQDQD@DP@@@@@@@@@@DPTEAQ@P@H"H"@@@@@@QDEA@D@BH#L3L @@@@ADEA@"@"H3L3L3H@@@@@@@H#L0H3L3L3L2@@@@@@@"L3@#L3L3L3H@@@@@@@
+H3L@@@@@@@@@@@@@@@H#L0H#L3L3L2@@@@@@@BH2@"H3L3L2H@@@@@@@@@@@H"H"H"@@@@@@@@@@@@@@@"H"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 170 170 170 128 0 0 255 0 0 255 255 255 127 127 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@??8@@O?>@@O?? @C??8@C??>@@??? @???8@O??>@O??? C??? C???8@???8@O???@C???D@???8@O???@C???8@???>@O??? @G??8@_??>@C??? @A/
+?0@@B?8@@A''<P@@#F0@@C@0@@@@@@@@a') ; yourself); yourself]
+!
+
+bugReporterIcon
+    <resource:#programImage>
+    ^ self bugReporter28x28Icon
+!
+
+changesBrowser28x28Icon
+    "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 changesBrowser28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#changesBrowser28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class changesBrowser28x28Icon'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@B****@@@@@@@@@ @@@B****H@@@@@@@@"@@@C????H @@@@@@@2H@@C????L"@@@@@@@3H@@AUUUUL2@@@@@@@SL@@AUUUUD3@@@_=UUQL@
+@@EUUUTS@@@A]7UUD@@@@U7]5Q@@@@E7]5T@@@@AUUUU@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH@@@@@@@@LB@L@@@@@@@@@@@@@@@@J@@@@@@@@@@@
+@@@@@@@H@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@??8@@O?>@@O?? @C??8@C??>@@??? @???8@O??>@O??? C??? C???8@???8@O??>@C??>@@??? @O?? @C??8@@??8@@O?>@@@@@@@@@@@@@Z.$7LH+-
+YDBJ+TQ@#.=WHH*+UABJ*5PPZ*$7X@@a') ; yourself); yourself]
+!
+
+copy28x28Icon
+    "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 copy28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#copy28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class copy28x28Icon'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@O????8@@@C****)@@@@:****P@@@N****$@@@C****)@@@@:****P@@@@@@**$C????>J*)@:****R**PN****$**$C****)J*
+)@:****R**PN****$**$C****)J*)@:****R**PN****$**$C****)J*)@:****QUUPN****$@@@C****)@@@@:****P@@@N****$@@@C****)@@@@:****Q
+@@@IUUUUT@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@???@@O??0@C??<@@???@@O??0@C??<@@???A????0_???<G????A????0_???<G????A????0_???<G????A????0_???<G????A????0_?? @G??
+8@A??>@@_?? @G??8@A??>@@_?? @@@a') ; yourself); yourself]
+!
+
+cut28x28Icon
+    "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 cut28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#cut28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class cut28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@DQDQDQDQDQDS@@@@@@@SL3L3L3L<L3H@@@0@@AL3L3L3L303L @@C@@@D3L3L3L3OLL2@@CL@@@SL3L3L3L303H@@L@@@AL3L3L3
+L3OLL @L0@@@D3L3L3L3L302@@0@@@@SL3L3L3L3OLH@3@@@@AL3L3L3L3L<0 CL@@@@D3L3L3L3L3OB@L@@@@@SL3L3L3L3L<H@0@@@@AL3L3L3L3L33L3@
+@@@@D3L3L3L3L3L<3@@@@@@SL3L3L3L3L33L@@@@@AL3L3L3L3L3OL0@@@@@D3L3L3L3L3L<3@@@@@@SL3L3L3L3L33L@@@@@AL3L3L3L3L33@3@@@@@L"H"
+H"H"H"3B@,0@@@@@@@@@@@CL3@@@CL3@@@@@@@@@C@C@@@@@0@0@@@@@@@@L@L@@@@C@C@@@@@@@@@0@0@@@@L@L@@@@@@@@C@C@@@@@0@0@@@@@@@@L@L@@
+@@C@C@@@@@@@@@CL@@@@@@3@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+_??8@G??>@A???!!@_??8PG??>LA???"@_??9 G??>PA???,@_??;@G??> A???(@_??>@G???@A???0@_??<@G???@A???0@_??>@G???0A???'' @@R@$@@D
+ I@@AHBP@@R@$@@D I@@@0A @@@@@@@a') ; yourself); yourself]
+!
+
+delete28x28Icon
+    "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 delete28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#delete28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class delete28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADQDQDQDQDQL@@@@@@@D3L3L3L3L3L @@@@@@@SL3L3L3L3L2@@@@@@@AL3L3L3L3L3H@@@@@@@D3L3L3
+L3L3L @@@B@@@SL3L3L3L3L2@@@B@@@AL3L3L3L3L3H@@@@@@@D3L3L3L3L3L @@@@@@@SL3L3L3L3L2@@@@@@@AL3L3L3L3L3@@@@@ @@D3L3L3L3L0@@@@
+@@@@@SL3L3L3L3@P@@@@H@@AL3L3L3L3LADSL3H @@D3L3L3L3L0DQL3L"@@@SL3L3L3L3@Q@3L0H@@AL3L3L3L3LADC@3@ @@D3L3L3L3L0DPLCLB@@@2H"
+H"H"H"@Q@0L0H@@@@@@@@@@@@ADC@3@ @@@@@@@@@@@@DPLCLB@@@@@@@@@@@@@Q@0L0H@@@@@@@@@@@@ADC@3@ @@@@@@@@@@@@DPLCLB@@@@@@@@@@@@@Q
+D0L2H@@@@@@@@@@@@ DSL3HB@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@C??>@@??? @O??8PC??>D@???!!@O??8XC??>F@???  O??8HC??>B@????0O?? LC????@????0O???<C????@????0O???<C????@????0@@A?<@@@
+_?@@@G?0@@A?<@@@_?@@@G?0@@@_0@@a') ; yourself); yourself]
+!
+
+desktop28x28Icon
+    "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 desktop28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#desktop28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class desktop28x28Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@XFA ]FA XFA4]FA XFA XGQ4]@@@@@@@@@@@@FA XGQ4]FA XFA XFA XGQ4]GQ XFA XF@@@@A XGP,RB!! QFA ]GQ4]GQ4XGQ XFA XFA @@@@XFA D
+A@PDC@LKC!!HQDQ XFA4]GR@]HA X@@@]FA ]C@4DCPPMAA( HB@]GQ XDQ QFB@]F@@@GQ4XF@PDC@PGA@4SHA8^HA8 G"@^HA$ GQ @@A4]FA4MCPPMA@4D
+EA8 HA8 G"@ HA8^HA4X@@@]GQ4XA@PGA@ DB@\^GQ8^GQ8^HA4^GR@XF@@@FA XG!!PMA04HCP MF!!8^G"@^HA8 G"@]GQ @@A XGQ8^CP$MBP4ICQPZGA(\
+F!!8^G!!8 GQ ]@@@XFA4YFPPLBP0DC@$TD1LZD1(YF!!$^GQ4XGP@@GQ4]F!!(MBP0ICP0MCAPWD1(WF!!(WG"@]FA4@@A4XGQLOC@0DC@PLA@0LCAPOEALWE!!8]
+GQ ]@@@]FA$LA0PG@00CC@LLA@PLA00LE@<^GQ4XF@@@FA SD@4LA00CC@LL@00LA04GCP0THB@XFA @@A XFA4YA LL@0,CB0LKC@LG@00GEA4 FA4]@@@X
+FA XFA4]FQLK@0LF@ LF@0XCA1L]GQ ]GP@@FA XGQ4]GQ4]GQ4]FQ$K@0,CA0LZGR@XGQ4@@A XFA4XFA4]GQ4]FA XGQ4YFP,KFQ4XGQ4]@@@@FA4]FA X
+FA ]GR@]GQ4]GQ4]GR@]GQ ]GP@@@@@]FA4QFA XFA XGQ XGQ4 GQ4]HA4XFA4@@@@@@A4XGQ4]GQ4]GQ4]FADXFA4]HB@]DQD]@@@@@@@QFA4]FA4]GQ4]
+GQ4]FA4XFADXDQDQ@@@@@@@@GQD]GQ4]HA4 GR@ GR@]GQ4XGQ4QDP@@@@@@@A4XDQ4]GQ4]GR@]GQ4]HA QFA ]DP@@@@@@@@@]@A QFA ]GR@]HB@]FADX
+FA QGQ4@@@@@@@@@GQ4XDQ4QFA QFADQDQD]GQ QDQ4@@@@@@@@@@A4@@@@@@@@@@@@@@@@@@@@XDQD]@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 0 0 0 0 102 0 0 153 0 0 204 0 0 255 0 51 153 0 51 204 0 51 255 51 0 204 51 51 102 51 51 153 51 51 204 51 51 255 51 102 153 51 102 204 51 102 255 102 102 102 102 102 153 102 102 204 102 102 255 102 153 51 102 153 204 102 153 255 153 153 153 153 153 204 153 153 255 153 204 204 153 204 255 204 204 204 204 204 255 204 255 255 255 255 255]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+G?@@@A??<@@_???@G???8A???>@???? O???8C???>@???? O???8C???>A???? _???8G???<A????@_???0G???<@_???@C???0@G??<@G??>@C??? @??
+?0@O??8@A??<@@O?>@@@?>@@@@@@@@@a') ; yourself); yourself]
+!
+
+dos28x28Icon
+    "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 dos28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#dos28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class dos28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H"H"H"H @#L3L3L3L3L3L3L3L3@BMDQDQDQDQDQDQDQBL@H4QDQDQDQDQDQDQDH0@#QDQDQD
+QDQDQDQDP#@BMDEDQDQDQDQDQDQBL@H4QAQDQDQDQDQDQDH0@#QDPTQDQDQDQDQDP#@BMDQDEDQDQDQDQDQBL@H4QDEDQDQDQDQDQDH0@#QDEDQDQDQDQDQD
+P#@BMDEDQADQHQDTDQEBL@H4QDQDQDQDQDQDQDH0@#QDQDQDQDQDQDQDP#@BL"H"H"H"H"H"H"H"L@@3L3L3L3L3L3L3L3L0@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 194 222 222 222 125 125 125 194 194 194]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G???>@???? @@@@@@@P@@@@D@@@@GLX@@BT
+(@@@%I@@@IRH@@A3L@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+extract28x28Icon
+    "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 extract28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#extract28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class extract28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CL3L3L0@@@@@@@@@@@@MDP4QC@@@@@@UUTE@@@3L3L3L@@B@AAUUPD@@CQDMDP0
+@@H DEUU@P@@L3L3L2H"H"HPUUTA@@@4QCQDH"H"H"@@@@D@@CL3L3L"H"H"DQDQDP@@MDP4QC@@@"@Q@@@A@@@3L3L3L@@B@AD@UPD@@CQDMDP0@@@@DPAU
+@P@@L3L3L3@@@@@@@@@@@@@4QCQDL@@@@@@@@@@@@CL3L3L0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 129 129 129 255 0 0 255 255 255 105 133 190 194 194 194]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@A?<@@@_?A?8G?0_>A?<W? _?G?8G???>A???? _???8G?1?>A?<W? _?A?8G?0O>A?<@@@_?@@@G?0@@@@@@@@@@@@@@@@@@@@D@A@MED3PD*:
+UNA9D%Q@P)ITPCQZL6@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+fileBrowser28x28Icon
+    "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 fileBrowser28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileBrowser28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@CLA&Y&Y&Y&X@@@@@@@@L0F@@@@@@A @@@@@@@@3@XN;.;.8F@@@@@@@@CLA ;.@@@@@@@@@@@@@L0FC.8O[6=/[0@@@@@@3@X@
+; [6=/[6@@@@@@CLA DNC6<@@F<@@@@@@L0F@A@F= [0= @@@@@@3@X@@P=/[6=/@@@@@@CLA @@A/[6=/X@@@@@@L0FC0@O[6=/[0@@@@@@3@XF<@@@@@@@
+@@@@@@CLA = @@@@@@@@@@@@@L0FA/[6=/A @@@@@@@@3@XO[6=/XF@@@@@@@@CLA @@@@@@X@@@@@@@@L0FY&Y&Y&Y @@@@@@@@C@Y&Y&Y&Y&@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C @b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A??<@@_??@@G??0@A??<@@_??8@G??>@A??? @_??8@G??>@A??? @_??8@G??>@A??? @_??@@G??0@A??<@@_??@@G??0@@??<@@G??@@@@@@@G.P=0AAD
+HP@PQBD@GDP8 AADHD@PQBA@DN^=0@@a') ; yourself); yourself]
+!
+
+fileIn28x28Icon
+    "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 fileIn28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileIn28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class fileIn28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A&Y&Y&Y&@@@FY&A @@@FL3L&Y&X@@PY&XA@@@@X3L2Y&Y @AA&Y D@
+@0A"H"I&Y&@@DFY&@P@CLFY"Y&Y&X@@P@@@3L3L3Y&I%UUI @ADQDSL3L3L6X&UUT&@@DP@@L3L3L6Y"H"H"X@@Q@FXA@@L0Y&I&Y&Y @AD@Y D@@0A&X&QD
+P&@@@@@@@@@@@FY"YDQBX@@@@F@@@@@@Y&H"H"I @@@@@@@@@@A&Y&Y&Y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 129 129 129 63 63 36 255 0 0 194 194 0 0 127 0 194 194 194]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@_?0_>G?<G?!!??A?8_?0_>W?<G?''??A????0_???<G????A?9??0_>W?<C?!!??@B@_?0@@G?<@@A??@@@@@@@@@@@@U@D@@HP@@@BT0S@@%R
+EH@]W!!R@BU@T @%LEH@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+garbageCollect28x28Icon
+    "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 garbageCollect28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#garbageCollect28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class garbageCollect28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQD@@@.;.1D[DQDQD@@QDP@@.;.;,[,@@ADP@ADQ@@.;@@.;.1@@@A@@DQD@B;@@@[.;DCH@D@@QDP@K,@@K.;,Q@2@P@ADQ@K.;@@DQDQDPL @@DQDKB;B0
+@QDQ@@@C@@@QD[B0B0,ADP@"H"@@@ADQ@@@@@@DQ@P@@@0@@DQ@@@@C 8@@ADQL3@@@Q@@@@;.;.@@DCL0H@@@@@@@@NC @@@PLC@ @@@@@@C.;.8@@A@0LB
+@@@@@@@@8N@@@@DC@0H@@@@@B (@@AD@@PLC@ @@@@****@LG@@A@0LB@@@@@JB CL3L0@DC@0H@@@B***(@0L@Q@SLCL @@@@(J@L3L3AD@L"H @@@@@QDQ
+C@0QDQD@@@DP@@@ADQD@@@@QD@@@@@@@@ @B@ @B@@HB@ H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@H@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@H@@@H@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@G1@@@C>0@@A1=0@@XO^@@FG30@C0@^@AZ@? @)P?8@@@O>@@B#? @C<?8@@TO>@@_#? @B ?8@E@O>@G9S? @)>?8@?JO>@EO3? @APO @@@@@@]7]7\DUU
+UDAEUUQ@U7]5\EUUUTAUUUU@]U]W\@@a') ; yourself); yourself]
+!
+
+help28x28Icon1
+    "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 help28x28Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#help28x28Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class help28x28Icon1'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@E@@@@@@J*(D@@@@@***)P@@@@@@J*E@@@@K.,J(T@@@;.>8*E@@@K.:;"(T@@J;..;JE@@K; N;"!!P@C+ B;,(T@@/ @K.JE@@N,@C.2E@@B>@@.3!!
+P@@@@@.8!!T@@@@@+.1P@@@@@/.1P@@@@@N.0P@@@@@N>2D@@@@@B:8!!@@@@@@;8(P@@@@@K+H@@@@@@@@BA@@@@@@J*HP@@@@@@@JD@@@@@C/"!!@@@@@@.,(
+@@@@@@N>H@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 63 79 96 255 255 0 255 255 255]; mask:((ImageMask new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@?8@@@??@@@_?8@@O??@@G??8@C??>@@???0@_??<@O???@C>O?0@?C?<@O0?>@C<O? @?C?8@@C?8@@A?<@@@_>@@@O? @@C?8@@@?>@@@O>@@@C?8@@@_
+>@@@O? @@C?8@@@?<@@@O>@@@C?@@@@a') ; yourself); yourself]
+!
+
+help28x28Icon2
+    "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 help28x28Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#help28x28Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class help28x28Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@@@@3H@@@@@@@@@@@@@@@@CL2@@@@@@@@@@@@@@@@L3L @@@@@@@@@@@@@@@3L3@@@@@@@@@@@@@BLCL3
+L0@@@@L3@@@@@CL0L3L3@@H3L3L0@@A@L3@3L3LBH#L3L3A@@D@3LCL3L0H"L3L3LD@@PCL0L3L3@"D3L1L0P@A@L3@3L3LBH!!L1L3A@@D@3LCL3L0H"HQL3
+LD@@PCL0L3L3@"H#D3L0P@A@L3@3L3LBH"D1L3A@A@L3LBL3L0H"D3LSLD@D@3L0H#L3@"D#L3D0P@PCL3LBH#LBHRL3L3A@A@L3L3@"H0H"H3L3LD@D@3L3
+L H"@"H#L3L0P@PCL3L"@"HBH"L3L3A@A@H"H"H H H"H#L2HD@D@@H"H"HB@"H"H"H@P@ADP@H"H HBH"H @DQ@@@@DP@@"H@H"H@Q@@@@@@@@@Q@@B@ @D
+P@@@@@@@@@@@AD@@Q@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 128 92 192 192 192 253 253 253 191 191 0]; mask:((ImageMask new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@X@@@@G @@@A<@@@@_ @@@G<@@@G?@\@C?9? C????A????0_???<G????A????0_???<G????A????0????<O????C????0????<O????C????0????<O??
+??C????0O???8@_?? @@?? @@A?@@@@a') ; yourself); yourself]
+!
+
+help28x28Icon3
+    "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 help28x28Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#help28x28Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class help28x28Icon3'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@0@@@@@@@@E0@@@@@@@AW@@@@@@@@U\@@@@@@@EU@@@@@@CQUT@@U@@ATUU@5UP@HUEUS=UWHBEQUT?UUR@!!TUUO5UT HUEUS=UUHBEQUT?5U
+R@!!TUUO=UT HUEUS?UUHH5QUT?5URBETMUO=UT !!UTMS?UUHHUU<4?5URBEU_3O=UT  @W?C?U@HH?0O<?0O2B@?<CLC?0 J ??@?<B(@B O??0(@@@@(C<B
+ @@@@@J@(@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 253 253 253 191 191 0 192 192 192]; mask:((ImageMask new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@X@@@@G @@@A<@@@@_ @@@G<@@@G?@\@C?9? C????A????0_???<G????A????0_???<G????A????0????<O????C????0????<O????C????0????<O??
+??C????0O???8@_?? @@?? @@A?@@@@a') ; yourself); yourself]
+!
+
+history28x28Icon
+    "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 history28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#history28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class history28x28Icon'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@0@@@@@@@@@B**(@@@@@@%YV@@@@@@J**"@@@@@BU%X @@@@@***H @@@@IVU"H@@@@B**("H@@@@%YVH"@@@@J**"H @@@@@@@"H@@@@B**("@@
+@@@@@@H @@@@@***H@@@@@@@@B@@@@@@J** @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 0 129 194 194 194 255 255 255]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@C?8@@@?>@@@O?8@@C?>@@@??8@@O?>@@C??8@@??>@@O?? @C??8@@??>@@C?? @@??8@@C?>@@@?? @@C?8@@@?>@@@@@@@H@H@@BDB@@@<M3IHITI
+KRBT"R$ %D$)8IVD2B@@@@G @@@@@@@a') ; yourself); yourself]
+!
+
+home28x28Icon
+    "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 home28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#home28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class home28x28Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@DA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HCA@H@@@@@@@@@@@@@@@@@@@@@@@@@A@D@@@H@@0LD@ @@@@@@@@@@@@@@@@@@@@@@@@HA@@H@
+@0TEAPPA@@@@@@@@@@@@@@@@@@@@@@@D@PH@@0XFA XGB@D@@@@@@@@@@@@@@@@@@@@@BP$@@0PDA@PDA@XD@P@@@@@@@@@@@@@@@@@@@@H@@0PDAP(CAPPD
+A PA@@@@@@@@@@@@@@@@@@H@@0PDAP(@@@LEA@PDA@D@@@@@@@@@@@@@@@H@APPDAP@@@@@@@@TDA@XD@P@@@@@@@@@@@@HCA0PDAP@@@@@@@@@@APPDA@PA
+@@@@@@@@@@HCAPPDAPL@@@@@@@@@@@LEA@PFA@D@@@@@@@@@@ HKA L@@@@LCP8O@@@@APXB@ D@@@@@@@@@@@@@@P\C@@@MDADRD0<@@@LF@ @@@@@@@@@@
+@@@@@@HG@0@@EATVE1\N@@@CA H@@@@@@@@@@@@@@@@AA0L@@A QFQ([C @@@0\B@@@@@@@@@@@@@@@@@P\C@@@XE!!0]F08@@@LG@ @@@@@@@@@@@@@@@@DG
+@0@@FAHWGQ,N@@@CA0H@@@@@@@@@@@@@@@@AA0L@@A ^E14[C @@@0\B@@@@@@@@@@@@@@@@@P\C@@@_GA4 F08@@@LG@ @@@@@@@@@@@@@@@@DG@0@@G2D[
+F2HN@@@CA0H@@@@@@@@@@@@@@@@AA0TC@1<"H"H"C LCARLB@@@@@@@@@@@@@@@@C0DA@PDA@PDA@PDA@PDAC0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[224 224 224 0 0 0 32 32 32 192 192 192 64 64 64 160 160 160 96 96 96 128 128 128 96 64 96 64 32 64 224 192 224 32 0 0 160 96 64 128 64 32 96 32 0 64 0 0 160 128 128 224 192 192 192 160 160 160 64 32 128 96 96 224 224 192 224 192 160 192 128 64 128 64 64 224 160 128 192 128 32 160 64 0 192 128 96 192 96 0 192 160 128 96 32 32 192 64 0 160 96 32 128 32 0 128 96 128]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@C0@@@@<@@@@O@@X@C0@O@@<A''8@O@[?@C0G?8@<A??@O@_?8C0O??@<G??8OC???C1???8<O??<O@??<C0O??@<C??0O@??<C0O??@<C??0O@??<C0O?
+?@<C??0O@??<C0@@@@<@@@@O@@@@C0@a') ; yourself); yourself]
+!
+
+imageEditor28x28Icon
+    "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 imageEditor28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class imageEditor28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@M7]7]7]7]7]7]@@@@@@@@@@@@@@@@@@@@@@@@@"H"H"HDQEUVY @@@@@BH"H3L QDUUY&@@@@@@HA@#L2ADQUU&X@@@@@@"H"H"HH
+"I&W]0@@@@@BL3L3L "H&Y]7@@@@@@H"H"H"BH"Y%7\@@@@@@#L3L3HDQEUVY @@@@@BH"H"H QDUUY&@@@@@@H3L3L2ADQUU&X@@@@@@"H"H"HH"I&W]0@@
+@@@BL#L3L "H&Y]7@@@@@@H2L3L2BH"Y%7\@@@@@@"H"H"HBH"H"H @@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@0@0@0L@L@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+???8@O??>@C??? @???8@O??>PC???&@???90O??>^C???''0???90O??>TC???  ???8HO??>AC??? P???8@O??>@C??? @???8@@@@@@@@@@@@;[7/@D>%
+J@AJ)P @RK5.@D"%J@AH)R @:JW/@@@a') ; yourself); yourself]
+!
+
+menuEditor28x28Icon
+    "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 menuEditor28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#menuEditor28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class menuEditor28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@DQDQDQDQDQDQD@@@@@@@@@@@@@@@@@@@@@@@@@QH"H DQHQD"H @@@@@ATBH"@RHBH H"@@@@@@H@H"HAT%UUUUT@@@@@@%H"H D%
+IRT%IP@@@@@BUQIU@UIRT%IR@@@@@@IRHBHAIRT%IRT@@@@@@%H"H ERT%IRT @@@@@BUQIU@RT%IRT%@@@@@@IRHBHAT%IRT%H@@@@@@%H"H D%IRT%IP@@
+@@@BUQIU@UIRT%IR@@@@@@H"HBHAIRT%IRT@@@@@@"H"H IRT%IRT @@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@APT@@@@@@@@@@@@@@@@@T@@@@@@@@@@@@@@@@@@@@@@@@@T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T@T@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+???8@O??>@C??? @???8@O??>PC???&@???90O??>^C???''0???90O??>TC???  ???8HO??>AC??? P???8@O??>@C??? @???8@@@@@@@@@@@@6=D$@O(Y
+I@B*GRP@"9T$@H(WI@BJD2P@"=D<@@@a') ; yourself); yourself]
+!
+
+paste28x28Icon
+    "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 paste28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#paste28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class paste28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@!!DR@@@@@@@@@@@@@@@BDQH@@@@@@@@@@@@@@@DQDP@@@@@@@@@@@@@AD"H"D@@@@@@@@@ADQBDQDQDRQDP@@@@@@DQDHQDQDQIDQ@@@@@@@QD
+QDQDQDQDQD@@@@@@ADQDQDQDQDQDP@@@@@@@@@@@@@ADQDQ@@DQDQDQDQDQDLDQDQD@@P3L3L3L3L3L QDQDP@ACL3L3L3L3L2ADQDQ@@DL3L3L3L3L3HDQD
+QD@@P3L3L3L3L3L QDQDP@ACL3L3L3L3L2ADQDQ@@DL3L3L3L3L3HDQDQD@@P3L3L3L3L3L QDQDP@ACL3L3L3L3L2ADQDQ@@DL3L3L3L3L3HDQDQD@@P3L3
+L3L3L3L QDQDP@ACL3L3L3L3L2ADQDQ@@DL3L3L3L3L3HDQDQD@@P3L3L3L3L3L QDQDP@ACL3L3L3L3L2ADQDQ@@DL3L3L3L3L3HDQDQD@@P3L3L3L3L3L
+@@@@@@@2H"H"H"H"H"@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 0 127 127 127 127 170 170 170 255 255 255]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@C8@@@@>@@@@O @@O??<@C???@@???0@O??<@C???A????0_???<G????A????0_???<G????A????0_???<G????A????0_???<G????A????0_???<G??
+??A????0_???<G????A???@@_??0@@@a') ; yourself); yourself]
+!
+
+reloadFromFile28x22Icon
+    "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 reloadFromFile28x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#reloadFromFile28x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class reloadFromFile28x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@TEAPTEAPTEAP@@@@@@@@LC@0L@@0@@
+@@@@@@@E@PDAAPDA@PT@@@@@@ @C@0LC@@H@@@@@A@@@APTEAPTEAPTE@@@@@@H@@0LC@0@B@@@@@@PD@@TA@PDE@PDAAP@@@@@B@@LC@0L@A@PDA@PDA@PE
+APTEAPTEAPT@@@@@@ @@@@@@@@HDA@PDA@PDA@DA@PTA@PDE@@@@@@HB@ HB@ HDA@PDA@PDA@TEAPTEAPTEAP@@@@@B@ @@@@@@@ @@@@@DA@@E@PDAAPDA
+@PT@@@@@@ H@@@LC@@H@@@@@A@@@APTEAPTEAPTE@@@@@@HB@@@C@0@B@@@@@@@@@@TA@PDE@PDAAP@@@@@@@@@@@@@@@@@@@@@@@@@EAPTEAPTEAPT@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 105 133 190 129 129 129 194 194 194 255 0 0 255 255 255]; mask:((Depth1Image new) width: 28; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@?>A?8O? _>C?8G?"?>A?8?? _???8G???>A???? _>O?8G?"?>A?8O? O>C?8@@@?>@@@@@@@@@@@@@@@@$@@@@G@@@@@@@@a') ; yourself); yourself]
+!
+
+reloadTextFromFile28x22Icon
+    "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 reloadTextFromFile28x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#reloadTextFromFile28x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class reloadTextFromFile28x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@TEAPTEAPTEAP@@@@@@@@LC@0L@@0@@
+@@@@@@@E@PDAAPDA@PT@@@@@@ @C@0LC@@H@@@@@A@@@APTEAPTEAPTE@@@@@@H@@0LC@0@B@@@@@@PD@@TA@PDE@PDAAP@@@@@B@@LC@0L@A@PDA@PDA@PE
+APTEAPTEAPT@@@@@@ @@@@@@@@HDA@PDA@PDA@DA@PTA@PDE@@@@@@HB@ HB@ HDA@PDA@PDA@TEAPTEAPTEAP@@@@@B@ @@@@@@@ @@@@@DA@@E@PDAAPDA
+@PT@@@@@@ H@@@LC@@H@@@@@A@@@APTEAPTEAPTE@@@@@@HB@@@C@0@B@@@@@@@@@@TA@PDE@PDAAP@@@@@@@@@@@@@@@@@@@@@@@@@EAPTEAPTEAPT@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 105 133 190 129 129 129 194 194 194 255 0 0 255 255 255]; mask:((Depth1Image new) width: 28; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@?>A?8O? _>C?8G?"?>A?8?? _???8G???>A???? _>O?8G?"?>A?8O? O>C?8@@@?>@@@@@@@@@@@@@@@@$@@@@G@@@@@@@@a') ; yourself); yourself]
+!
+
+sUnit28x28Icon
+    "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 sUnit28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#sUnit28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class sUnit28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O??C???????C?<O?0@@??<O??????<O?0??@@@@@@@@@@@@@@@@@@@@@BH"H"H"
+H"H"H#L3L0@@H"H"H"H"H"H#L3L3@@@"H"H"H"H"H#L3L3L@@BH"H"H"H"H#L3L3L0@@H"H"H"H@@@L1L3L3@@@"H"H"HO??<A@3L3L@@BH"H"HO???1@3L3
+L0@@H"H"HO???1@@L3L3@@@"H"H <_?1@O@3L3L@@BH"H"C0G1@O<CL3L0@@H"H"HO@A@O?0L3L3@@@"H"H ?0@O??@3L3L@@BH"H#LO<O??@3L3L0@@H"H#
+L3C???@3L3L3@@@"H#L3L0@@@3L3L3L@@BH#L3L3L3L3L3L3L0@@H#L3L3L3L3L3L3L3@@@#L3L3L3L3L3L3L3L@@CL3L3L3L3L3L3L3L0@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G??
+?>A???? _???8G???>@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+saveImage28x28Icon
+    "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 saveImage28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveImage28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class saveImage28x28Icon'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UPSL3L0A@ET7L3L0?PAUML3L3OT@US\3L3C5@ET43L3L?PAUM3L3LO4@USSL3L3=@ET7L3L0?PAUML3L3O4@US\3L3C=@ET43L3L?PAUM@@@@O4@US?????=
+@ET?UUUU?PAUO7??6?4@US=T?=+=@ET?ZO?Z?PAUO4C?6/4@U]U**)WU@ET@@@@@@@AUUUUUUUUU%Y%UUUTE%%UUUUTU)UEUUUUEUUUUUUVYUUTEUTUUUUDU
+AUUUUUUQUPUUVUUUUUTU%P@a') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C??>@@@@@@@@@@@@;*9R<H*(
+W)BJ*E:@S.9R,B)HT)@*REJP:$9R<@@a') ; yourself); yourself]
+!
+
+saveTextToFile28x22Icon
+    "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 saveTextToFile28x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveTextToFile28x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class saveTextToFile28x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3L3L3L@@@@@@@@@@@@CQDMDP0
+@@@@@EUUAP@@L3L3L3@@@ @PUUTA@@@4QCQDL@@BHAAUUPD@@CL3L3L"H"H"DEUU@P@@MDP4QCH"H"H @@@A@@@3L3L3H"H"H!!DQDQD@@CQDMDP0@@H DP@@
+@P@@L3L3L3@@@ @Q@ETA@@@4QCQDL@@@@AD@UPD@@CL3L3L0@@@E@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 129 129 129 255 0 0 255 255 255 105 133 190 194 194 194]; mask:((Depth1Image new) width: 28; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@G?0@@A?<G? _?A?8G?1_>A?<_? _???8G???>A???? _?G?8G?1_>A?<G? _?@?8G?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+saveToFile28x22Icon
+    "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 saveToFile28x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveToFile28x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class saveToFile28x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3L3L3L@@@@@@@@@@@@CQDMDP0
+@@@@@EUUAP@@L3L3L3@@@ @PUUTA@@@4QCQDL@@BHAAUUPD@@CL3L3L"H"H"DEUU@P@@MDP4QCH"H"H @@@A@@@3L3L3H"H"H!!DQDQD@@CQDMDP0@@H DP@@
+@P@@L3L3L3@@@ @Q@ETA@@@4QCQDL@@@@AD@UPD@@CL3L3L0@@@E@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 129 129 129 255 0 0 255 255 255 105 133 190 194 194 194]; mask:((Depth1Image new) width: 28; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@G?0@@A?<G? _?A?8G?1_>A?<_? _???8G???>A???? _?G?8G?1_>A?<G? _?@?8G?0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+search28x28Icon
+    "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 search28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#search28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class search28x28Icon'
+	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@J @@@@H@@B(@@@@B@@@*@@@@@@@@@@@@@@@@@@@@@@@H@@B@@@@@B@@@ @@@@@ @@H@@@@@@@@@@@
+@@AT@D@P@@@@U@B@D@@@@EP@ A@@@@AT@H@P@@@@*@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P@@@@@P@@H@@@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[40 40 80 212 208 200 255 255 255]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@_A<@@G0_@@A<G0@@_A<@@G0_@@O>?8@C?/>@@?;? @O>?8@G???0O???>C???? ????8O???>C???? ??/?8O?;?>C?>?? ?8@?8O>@
+O>C? C? ?8@?8O>@O>@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+shell28x28Icon
+    "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 shell28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#shell28x28Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class shell28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L3L3L3L3L3L3L3L3L0@1DQDQDQDQDQDQDQDQ@CD"H"H"H"H"H"H"H#D@LRH"H"H"H"H"H"H"LP@1H"P"H"
+H"H"H"H"H1@CD"QDH"H"H"H"H"H#D@LRP$IBH"H"H"H"H"LP@1ICP"H"H"H"H"H"H1@CD"QDH"H"H"H"H"H#D@LRH4IBH"H"H"H"H"LP@1IBP$H"H"H"H"H"
+H1@CD"QDH"H"H"H"H"H#D@LRH$H"QDP$QDIDQBLP@1H"H"H"H"H"H"H"H1@CD3L3L3L3L3L3L3L3D@@QDQDQDQDQDQDQDQDP@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 125 125 125 194 194 194 222 222 222 0 0 194]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G???>A???? _???8G???>@???? @@@@@@A@E@@@PAP@@7&T@@QJ
+U@@BR=P@@T(T@@YI%@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+systemBrowserClassHistory28x28Icon
+    "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 systemBrowserClassHistory28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#systemBrowserClassHistory28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class systemBrowserClassHistory28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@ADQDQDQG0@@@@@@@@@@D"H"H"H.@@@@@@@@@@@RH"H"H"8@@@@@@@@@@O;.;.;.; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@
+@@@@@@@@@@@@@@C @@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@DQ@@@QG0@@@@@P;.;.@SL@@CL>@@@@@@@@@@@O; @@;.8@@@@@8@@@@@@@@@@@
+@@@@@@C @@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@DQ@@@QG0@@@@@P;.;.@VX@@FY.@@@@@@@@@@@O8@@@C.8@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C @@@@8@8@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@8@8@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+??0^@O?<O0C??FF@??1!! O?<XXC??CF@@ @C@@H@A @B@>7 A0O[8@_?6>@G@=/ @ O[8@H@@@@B@<O A0O[8@_??>@G@;7 @@NY8@@@@@@@@@@@%]7/TITI
+JUBUBR%P=H$/TIQIJRBTRR$ %\'')P@@a') ; yourself); yourself]
+!
+
+uiPainter28x28Icon
+    "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 uiPainter28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class uiPainter28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@DQDQDQDQDQDQD@@@@@@@@@@@@@@@@@@@@@@@@@3H"H DQHQD"H @@@@@CLBH"@RHBH H"@@@@@@H@H"HAT%UUUUT@@@@@@%H"H D%
+IRT%IP@@@@@BUSMU@UIRT%IR@@@@@@IRLBHAIRT%IRT@@@@@@%H"H ERT%IRT @@@@@BUSMU@RT%IRT%@@@@@@IRLBHAT%IRT%H@@@@@@%H"H D%IRT%IP@@
+@@@BUSMU@UIRT%IR@@@@@@H"LBHAIRT%IRT@@@@@@"H"H IRT%IRT @@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T@AP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@T@@@AP@E@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+???8@O??>@C??? @???8@O??>PC???&@???90O??>^C???''8???90O??>TC???  ???8HO??>A#??? X???8@O??>@C??? @???8@@@@@@@@@@@@>QN@@H$Q
+@@BADP@@.QD@@H$Q@@BIDP@@>_N@@@@a') ; yourself); yourself]
+!
+
+workspace28x28Icon
+    "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 workspace28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#workspace28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class workspace28x28Icon'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@M7]7]7]7]7]7]7]@@@@@@@@@@@@@@@@@@@@@@@QDQDQDQDQDQDQ@0@@@AUPUUUUAUAQDQDB@@@@EUAUUUTE@@DQDPH@@@@P@E@@UP
+UPTQDQ@ @@@AAPTEAUAUAQDQDB@@@@D@AP@ETET@DQDPH@@@@QDQDQDQDQEADQ@ @@@ADQDQDQDQDTPQDB@@@@DQDQDQDQDQQDDPH@@@@QDQDQDQDQEDDQ@
+@@@ADQDQDQDQDQEADB@@@@DQDQDQDQDQDTDPH@@@@QDQDQDQDQDQDQ@0@@@@@@@@@@@@@@@@@@@@@@L"H"H"H"H"H"H0L@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@L@@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@L@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+????@O???0C???<@????@O???0C???<@????@O???0C???<@????@O???0C???<@????@O???0C???<@????@O???0C???<@????@@@@@@@@@@@@ //R@HJJ
+T BB"%P@$(/X@IJJU@BR"%H@[O)R@@@a') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-28x28-XP'!
+
+eraseXP28x28Icon
+    "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 eraseXP28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#eraseXP28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class eraseXP28x28Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GNB!!GL@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A="H"F[0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^(VE!!XM/@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@A8^7-;_F<@@@@@@@@@@@@@ H%3@@@@@@@@@@@@@GQ5]WU6ZP@@@@@@@@A%_8^B@@@@@@@@@@@@@@@@[WA0\GE)@@@@@@A)
+_(E9@@@@@@@@@@@@@@@@@@A$Y&Y&Y5(@@@A.]7]2@@@@@@@@@@@@@@@@@@@@@E%GQ4]HV A([F1-@@@@@@@@@@@@@@@@@@@@@@@@R3(:N#-IVE!!$@@@@@@@@
+@@@@@@@@@@@@@@@@@@ALLB</K3)J@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C\(JB *SP@@@@@@@@@@@@@@@@@@@@@@@@@@S2,%IRD!!HRX?@@@@@@@@@@@@@@@@
+@@@@@@@@O"H\GA04H1,[GS8@@@@@@@@@@@@@@@@@@@@@LQ(WE1\5@@@_E!!XXO @@@@@@@@@@@@@@@@@@IALSD1L-@@@@@B@SD1T=@@@@@@@@@@@@@@@@E@4M
+CP4-@@@@@@@@G!!DQD#0@@@@@@@@@@@@@B0$IBP,2@@@@@@@@@@@,C 8PO@@@@@@@@@@@K PDA@\6@@@@@@@@@@@@@B\JB <8@@@@@@@@@@@B@@H3@@@@@@@@
+@@@@@@@@K XCA#X@@@@@@@@@NR$9@@@@@@@@@@@@@@@@@@@8APDH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CXLFP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[209 43 1 210 43 1 211 55 15 212 43 1 212 44 1 212 55 15 214 55 15 214 56 15 214 68 29 215 44 1 216 44 1 217 56 15 217 91 57 218 44 1 218 45 1 218 56 15 219 56 15 220 45 1 221 57 15 222 45 1 222 81 43 223 57 15 224 46 1 225 46 1 225 58 15 225 140 112 226 58 15 227 47 1 228 47 1 228 58 15 228 118 85 229 95 58 229 118 85 230 47 1 230 70 29 230 83 44 230 131 99 231 47 1 231 59 15 231 165 140 232 47 1 232 190 168 233 59 15 233 107 72 233 166 140 233 166 141 233 190 168 234 48 1 234 60 15 234 166 142 234 190 168 234 201 182 235 154 128 235 166 142 235 201 182 236 120 86 236 201 182 236 214 196 237 49 1 237 60 15 237 201 182 237 202 182 237 202 184 238 203 184 238 227 210 238 236 222 238 236 223 238 236 224 238 237 222 238 237 223 238 237 224 239 49 1 239 61 15 239 85 44 239 133 100 239 167 142 239 179 156 239 203 184 239 227 210 239 227 213 239 236 223 239 237 223 239 237 224 239 238 223 239 238 224 239 238 225 239 238 226 239 238 227 240 49 1 240 155 128 240 203 184 240 227 213 240 237 223 240 238 223 240 238 226 240 239 226 240 239 227 240 239 228 240 240 226 240 240 227 241 121 86 241 227 213 242 49 1 242 61 15 242 121 86 242 203 184 242 227 213 242 229 214 243 49 1 243 121 86 243 167 142 243 205 185 244 50 1 244 62 15 244 121 86 244 206 185 245 86 44 246 50 1 246 62 15 247 50 1 247 86 44 247 122 86 247 134 101 248 51 1 248 63 15 248 122 86 249 75 29 249 98 58 249 147 114 250 51 1 250 111 72 251 63 15 251 99 58 252 51 1 252 63 15 253 52 1 254 52 1 255 52 1]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@A8@@@@_@@@@G8@@@@?@C @G8C0@@?A8@@G8<@@@?^@@@G?@@@@? @@@G8@@@G?@@@C?8@@A>_@@@?C8@@_ _@@O0C8@G8@_@@<@
+C8@N@@^@@@@C @@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+redoXP28x28Icon
+    "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 redoXP28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#redoXP28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class redoXP28x28Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[E1QR5Q][P@@@@@@@@@@@@@@@@@@@@@@@@@@WC8RG2<!!
+FTAX[P@@@@@@VDIFX0@@@@@@@@@@W@HXHBT(KS@2F$U''@@@@@C-RT40@@@@@@@@@ZC<XF1 PC1P''K#D.A%,@@@@:ST=J@@@@@@@@@E@QF1 BU6IYQA@,K2<L
+V0@@NT]IR @@@@@@@@@?F1,GV0@@@@AV@2H.LP9[@@,8PT(@@@@@@@A(AQ,[P0@@@@@@@FH>GR,/CU,JM#]J@@@@@@@@XP,[F4,@@@@@@@@@YS8\JB4MBCP5
+R @@@@@@@FPGF1-H@@@@@@@@@@A&O!!,%J"\1L4(@@@@@@@@@@Q,[AV(@@@@@ZVI"XU$@E2P&KB=J@@@@@@@@@D8VF0=T@@@@YS<KB0,KB1T\HRT)R @@@@@@
+@@A[A1,[@V(@@EXQF1,[F1,[F1,^H4(@@@@@@@@@@DLVF1MK@@A_AALSD1LSD1LSD1MJ@@@@@@@@@@A^AQ,[BUT@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D(Q
+F1,BV @@@@@@@@@@@@@@@@@@@@@@@@@@@@A+OQX[F@IZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F@BFA,X@%(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V HXF05P
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AZ@!!EHZ0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E(<Z0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[1 55 156 1 58 159 1 62 163 1 64 165 1 65 166 1 68 169 1 69 170 1 71 172 1 74 174 1 74 175 1 75 176 1 78 179 1 79 180 1 81 182 1 82 182 1 84 185 1 86 187 1 87 188 1 88 189 1 90 191 1 92 193 1 93 194 1 97 198 1 98 199 1 100 201 1 101 201 1 102 203 1 103 204 1 104 205 1 105 206 1 106 207 1 109 210 1 110 211 1 111 212 1 112 213 1 114 215 1 115 216 1 116 217 1 118 219 1 119 219 1 119 220 1 120 221 1 123 223 1 123 224 1 126 226 1 127 227 1 128 228 1 129 229 1 129 230 1 130 231 1 135 236 1 138 240 1 140 242 1 143 245 1 149 251 1 153 255 3 154 255 6 79 179 13 82 179 15 76 172 16 64 158 16 66 161 16 67 162 16 70 164 16 75 169 20 160 255 23 78 172 31 79 166 31 80 167 31 81 168 33 82 171 34 164 255 46 87 167 54 171 255 61 98 171 61 99 171 61 99 172 68 176 255 76 110 176 85 181 255 91 122 180 91 123 181 99 186 255 102 174 242 106 134 185 120 145 189 120 145 190 120 146 190 121 146 191 135 156 194 150 168 196 150 168 198 151 169 198 151 169 199 165 180 201 165 180 203 180 192 205 180 192 207 180 192 208 181 193 208 195 203 212 195 203 213 195 204 212 196 205 213 210 214 216 210 214 217 210 215 217 225 226 219 226 228 222 226 228 223]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@A?@@@@?<G @_?!!8@O?<^@C??'' @>G=8@_@?>@G0G? A<@?8@O!!?>@C8?? @?O?8@G3?>@A>@@@@O0@@@C>@@@@_0@@@C<
+@@@@_@@@@C @@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+undoXP28x28Icon
+    "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 undoXP28x28Icon inspect
+     ImageEditor openOnClass:self andSelector:#undoXP28x28Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class undoXP28x28Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F5]UD-QWF0@@@@@@@@@@@@@X4YBV@@@@@@@
+[U!!@FRD/G1H>W@@@@@@@@@@@@D1ST#,@@@@@Y4TZL#@-JBT F@I\@@@@@@@@@@AJS44:@@@@V0X.LR8''E@<PFA,XO6 @@@@@@@@@R$%GNP@@V00/K20PQE%"
+U0HXF1EP@@@@@@@@@D)AN@,@V081K"HCU @@@@A[A1,[O0@@@@@@@@AJM3XJV04/J14>X @@@@@@@DL[F0U(@@@@@@@@R#T4B@4-JA0>YP@@@@@@@@AKF1,K
+XP@@@@@@@D(3LR\*IQ,>Y @@@@@@@@@@RA,[A6P@@@@@@@AJK20&IA\@VVE"X&$@@@@@Z T[F0D@@@@@@@@@R"$%HQ0UB0,KB0,?YP@@@EPOF1YN@@@@@@@@
+@D(#G!!,[F1,[F1,[DUX@@F(AF1,GV0@@@@@@@@AJD1LSD1LSD1LSD0Q_@@AKD1,VP0@@@@@@@@@@@@@@@@@@@@@@@@@@@@AUBQ,[AU8@@@@@@@@@@@@@@@@@
+@@@@@@@@@@AZ@!!,[DT(@@@@@@@@@@@@@@@@@@@@@@@@@@@AZ@!! [E#5+@@@@@@@@@@@@@@@@@@@@@@@@@@AZ@!! [F@I @@@@@@@@@@@@@@@@@@@@@@@@@@@@
+T@4[F@IZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F-HDPIZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Z31Z@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[1 55 156 1 58 159 1 62 163 1 64 165 1 65 166 1 68 169 1 69 170 1 71 172 1 74 174 1 74 175 1 75 176 1 78 179 1 79 180 1 81 182 1 82 182 1 84 185 1 86 187 1 87 188 1 88 189 1 90 191 1 92 193 1 93 194 1 97 198 1 98 199 1 100 201 1 101 201 1 102 203 1 103 204 1 104 205 1 105 206 1 106 207 1 109 210 1 110 211 1 111 212 1 112 213 1 114 215 1 115 216 1 116 217 1 118 219 1 119 219 1 119 220 1 120 221 1 123 223 1 123 224 1 126 226 1 127 227 1 128 228 1 129 229 1 129 230 1 130 231 1 135 236 1 138 240 1 140 242 1 143 245 1 149 251 1 153 255 3 154 255 6 79 179 13 82 179 15 76 172 16 64 158 16 66 161 16 67 162 16 70 164 16 75 169 20 160 255 23 78 172 31 79 166 31 80 167 31 81 168 33 82 171 34 164 255 46 87 167 54 171 255 61 98 171 61 99 171 61 99 172 68 176 255 76 110 176 85 181 255 91 122 180 91 123 181 99 186 255 102 174 242 106 134 185 120 145 189 120 145 190 120 146 190 121 146 191 135 156 194 150 168 196 150 168 198 151 169 198 151 169 199 165 180 201 165 180 203 180 192 205 180 192 207 180 192 208 181 193 208 195 203 212 195 203 213 195 204 212 196 205 213 210 214 216 210 214 217 210 215 217 225 226 219 226 228 222 226 228 223]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@? @G ?<@A8_? @^O?<@G''??@A;>G0@_?@>@G? O A?0C8@_?!!<@G?<_@A??O0@_?38@@@A>@@@@?@@@@_0@@@O8@@@C
+<@@@@>@@@@G@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-32x32'!
+
+desktop32x32Icon
+    <resource:#programImage>
+    ^ self desktop32x32Icon2
+!
+
+desktop32x32Icon1
+    "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 desktop32x32Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#desktop32x32Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class desktop32x32Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*7 G>W@@B3.+*:.+*:.+*:.+*:.+*:.+*:DHA?%89"##VTAY$"
+#3F3.+*:.+*:.+*:.(@O%6T@#$1LAP.YNZ(B"V\$IBROP'':&.+*:&I\[@JQ#SIPK&P5PBQ$Y$W&T,QXV*S\7M8=U_)>:.#J,B9$9NR@FFSBQ+IR1E+*:.+*:
+.+(V]#P7#5U>'';*:R3$7MCP]$[F:.+*:.+*:.+*:.+*:.+(P\#Q7UW:_.+*LHA4]GU._!!8^G!!8^G!!8^G!!39PMB^G!!8\P\#AVNI>:.(07W5>F+(^G!!8^G-KD
+RE=HHC$ $Y2G!!8^VJ1P8'';*:#BB"F)FG!!8^GW4 7TC::.''@VE 6Q''H^G!!8\+!!BF2@K*$HA)2&8NC 8M_.+*:.+)0E!!X*CYF\ 8NCT3= $ \:@JQ''[8BC 8NC
+ 5>:.+*:\AXVJ"*A$Y2[%+!!Y[PN''*0QS#F]I 8NC 8NCW;*:.''@VE"(*I8FQWE2QCT9>G)N((G:PM:2C 8NC 8M_.+)0E!!X*J"^/]#A(O" $LF2ZZ+U8,9A''
+^8NC 8NC 5>:\AXVJ"(''XS@(O(E(LDT5"C,.NKL@^&]; 8NC 8NCW7@VE"(*I7D<ZHF-.K!!=&8NHDW"3.+):_A^C 8NC 8M_E!!X*J"]D(6&8.DEQ 8NC 7J]
+R+N:.''*)]BT%IRT%IU<VJ"(''I2A_+)ZA$P %IRT%]@98,;*:^*$WIRT%IRT%W2(*I2\SO%=_Y06QBBT%IRU\C''"3.+)?#4&\''I2\''I1_J"\''D38>TA47Y9DH
+''I2\Y(TN^KN:.)!!7E92\''I2\''E<''I1L>O#8MY3]P$P"\''HH+!!P98,;*:C268''I2\''I2\W2\SO#8>CP6ATEBQBI2\L8VEC''"3.+(OKR.\''I2\''I1_O#8>O 4
+M55FK8(#''FZH"H N^KN:. <-.I2\''I2\''E=_W5>K\2<XYBLL''I2BQV9.[ 98,;*:."5ERXJ\''I2\,A0ASP #T)2\''I1QS8=WV$AXZ7"3.+*:P2-WWEQRT%IR
+CEIRT%ITY#V%U5]@C!!D)&"18_ B:.+*MEU]WJ9URT%IR%T<3.U]ZD!!DTJ[T.^CX8O[L@.+*:.%)5V%)Z(W,5)U]ZPE QZ9(,W'' 6_%N3@@B:.+*:.+*:P7U@
+PDA@PAHN!!BZ5KE8_NC5S,0@@@K*:.+*:.+*:.+*LU1IXDXR6(B98M )S,;N_.+*:.+*:.+*:.+*:.+*:.)9DQ21^^C!!>T;L@@K*:.+*:.+*:.+*:.+*:.+*:
+.+*:@KM>[UN3@JZ:.+*:.+*:.+*:.+*:.+*:.+*:.+*:. @a') ; colorMapFromArray:#[80 128 180 208 192 110 96 176 220 144 32 30 144 96 100 144 208 220 96 176 240 176 32 20 255 224 140 128 192 240 192 192 180 160 208 240 255 240 180 176 224 255 16 64 130 192 192 220 208 224 240 32 64 130 0 48 140 208 224 255 48 64 130 16 96 190 240 240 255 80 160 210 240 208 100 80 160 220 48 160 255 96 128 180 176 208 180 80 176 255 160 128 130 160 144 140 128 208 255 160 80 100 176 240 255 255 224 160 144 192 255 255 255 210 64 80 100 208 240 255 176 208 255 64 80 110 224 240 255 16 112 210 112 112 110 32 96 190 112 112 130 192 192 130 64 144 220 128 144 160 80 112 180 80 144 210 96 192 255 112 160 210 160 160 160 112 192 255 176 176 180 160 224 255 192 176 180 32 64 110 80 112 110 192 192 210 192 224 255 80 112 130 0 64 160 48 128 190 80 96 130 16 80 180 112 128 140 32 112 210 144 192 180 96 96 130 80 192 255 96 160 210 160 160 140 80 112 190 96 144 210 240 208 130 144 160 190 144 176 210 144 208 255 192 208 210 255 240 190 208 208 210 224 224 210 80 96 110 48 80 130 0 80 180 16 48 140 80 128 160 0 64 180 32 128 220 48 128 210 112 192 210 128 128 130 64 176 255 144 48 50 112 160 190 96 128 190 80 128 210 255 224 130 112 128 190 176 208 210 128 192 255 128 176 240 128 112 60 80 80 80 48 80 110 64 112 140 208 192 210 0 96 190 16 128 220 240 255 255 144 128 100 48 144 220 144 176 160 64 144 210 16 96 210 48 128 220 48 112 210 144 144 140 112 176 220 112 144 190 128 176 210 96 144 220 160 192 210 192 192 190 144 160 210 192 208 220 160 208 255 240 240 210 255 255 220 48 64 110 0 112 210 32 144 220 255 255 240 0 96 210 64 160 220 224 208 110 128 192 190 48 96 180 16 64 180 80 128 190 64 128 210 64 96 180 96 160 220 208 80 30 160 16 20 144 192 220 192 208 190 160 192 220 128 144 210 176 192 220 192 240 255 80 96 100 240 240 220 255 240 210 16 64 140 208 208 220 240 240 240 112 96 100 0 80 190 48 176 255 16 16 0 64 112 180 64 128 190 255 240 255 208 96 30 144 16 20 80 144 220 128 208 240 192 48 20 128 176 220 112 176 240 176 208 220 144 192 240 224 240 210 192 224 240 208 176 180 224 224 220 224 240 240 96 96 100 80 80 100 224 224 240 32 128 210 32 112 190 255 255 255]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@A?@@@??8@_??>G????#????8????>O????#????8?????O????;????????????????????>?????O????3????<?????O????3????<?????O??
+??3????<_????G????!!????0_???@G??<@A??8@@_>@@@C8@@@@b') ; yourself); yourself]
+!
+
+desktop32x32Icon2
+    "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 desktop32x32Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#desktop32x32Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class desktop32x32Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N@@BN#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N
+#(:N#(8@@H:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N# @@-;^7-;^7VJB (BX*PTD&(GH-Q@@.@DRHI!!LNMVL9@@@2L ];^18[F6^._:-PTI.[ 8LO
+,6,=UI>G[6>"(#T@@CJ$)WZSSI\JB&@FRYA5#X6M]WU4^G DAE:(*J!!0NP@@A4^PA)\JB (J%G18$YF''$S@0^J**_G%$ST46XW@9@@A;FT&TH"H"H!!<H+D)J
+L4(\AYV)$)I=_VUNS#\KV3$@@G.P+9 " HA(TYT\GA0\AR@IBZ6VN&U>Y&X#S4=[C @@^4&TH+J@,%DLHC !!NB@ BP&0,G9>Y&ZY XFAZQXN@@@^A)P" HA(
++R@8HS  HEIR,KA:_#.Y&XFAIF%)VP8@@A- %2J2ZJ4LNBD!!HB@MT%J0,G9>&Y&Y XE)ZV&LC @@F6@JH&!!QCC !!HRD H@5RT+B0_'':Y&XFA V%)''H0N@@A''
+S@("T[D8HRD!!HR@ T%J0,G)>N9&Y XFAZV&\E08@@J9L%1>RHBD!!HRD!!HBART+B0_'':Z&Y&A V%)ZXQ]C @@_42W )T!!HV(!!HR@ CUIR,KA>_)&YT8FAZV%)
+!!K),@@A?XIPHGC1*X"D!!HBART%J0^''8;&Y&A XE)ZY2D@F0@@J- +:0%R6)"HRD HEIR,KA>_)*Y&XFAZV%)!!HPA[@@@TFA<URUKZ"D!!O"@MT%J0,G9>&Y%S
+ XE)ZV&D!!@E,@@APA''",IT-*HRD HEIRT+B0_'':Y&XFA V%)''HRD@ 8@@I-II1@P-FH!!HR@ T%J0,G9>&)&Y XE)ZV&D!!HPBC @@&96&#4U7!!V5-U%X?O3<?
+JHVE!!XVE!!QDQDQDQDPHN@@@R-TZ^P(*]W5=_W5=HRCP4MCP4LSD]GQ4]GQ4]K08@@HNFQZLXJ5=.EAPTEK"!!(ZF!!(ZF!!(X.K"X&I"X$ZC @@ 0M1U4@)\;Z6
+-+YZV$MCP4MCP20UEV9.[&9.[!!(N@@A+Z6,=UI>G[6>"(''A0V1YY#A]]W[(@@PHB@!!(ZF 8@@KV5NP:9(E1D@@B:KWH&D08NC 8NC 8NC 8NC 8NC @@#(:N
+#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N@@BN#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(8@@H:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N#(:N
+# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[239 239 240 239 239 255 240 240 255 111 112 128 64 112 191 48 112 208 79 112 191 95 111 176 64 112 208 63 127 223 95 128 207 95 144 223 63 112 223 48 112 224 175 176 191 144 160 207 112 159 208 159 175 191 143 144 207 191 191 207 47 63 95 47 48 80 208 208 224 223 224 240 255 208 64 48 95 176 255 255 255 96 127 176 48 111 208 127 143 160 96 112 176 80 127 208 48 112 223 47 111 223 95 128 208 95 144 224 95 160 240 47 96 208 192 207 208 111 144 208 144 160 176 16 143 191 192 192 208 15 127 191 32 48 80 223 223 224 239 240 240 240 255 255 48 111 191 112 143 160 80 111 176 47 111 207 112 128 160 160 175 176 80 128 207 80 144 223 48 111 223 160 175 191 79 128 223 79 143 240 47 96 223 160 175 208 47 112 223 143 159 176 0 175 224 192 192 207 96 176 31 32 48 64 224 224 224 47 128 191 63 143 191 32 80 175 112 128 144 64 111 191 48 111 207 32 96 208 95 127 191 79 128 207 80 143 223 95 159 224 127 143 191 79 127 223 63 127 224 80 159 240 160 176 208 48 96 207 143 159 191 15 159 208 207 208 208 208 223 224 32 47 64 207 208 224 223 223 223 224 224 240 64 127 191 111 127 144 80 127 191 80 143 207 32 111 223 159 175 176 79 127 207 79 143 223 80 144 224 111 127 191 80 128 223 96 160 240 32 96 223 159 175 208 176 176 191 128 159 191 47 63 80 176 191 223 192 207 224 48 111 144 208 208 223 64 80 111 48 111 176 48 96 176 64 111 176 79 128 176 63 111 191 64 127 207 64 143 224 95 112 176 64 112 207 79 128 208 79 143 224 112 128 191 95 143 223 95 159 240 79 127 208 143 159 207 111 175 255 144 160 191 144 144 175 175 191 223 208 223 223 63 79 95 31 112 175 63 64 95 223 223 240 47 96 176 0 0 0 63 144 208 63 96 176 48 96 191 64 127 208 80 112 191 80 127 207 63 112 208 64 128 223 95 127 207 95 127 208 80 144 240 79 144 240 128 144 207 96 160 255 144 159 176 224 48 0 175 176 208 207 207 208 48 64 95 191 192 223 15 160 240 31 79 160 47 95 175 96 144 176 47 96 191 79 127 191 63 127 208 63 112 207 112 143 191 63 111 207 64 127 223 111 128 191 79 112 207 64 128 224 64 112 223 95 128 223 144 160 208 95 143 224 159 160 176 31 47 64 208 208 208 48 63 95 191 192 207 224 239 240]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@G????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''??
+??9????>_????''????9????>_???? @@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+error32x32Icon
+    "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 error32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#error32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class error32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@A@PDA@PDA@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@PDA@PDA@PDA@PDA@@@@@@@@@@@@@@@@@@@@@@@A@PDA@PDA@PDA@PDA@PDA@P@@
+@@@@@@@@@@@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@@@@@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@@@@@A@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@P@@@@@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@@@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@@@DA@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@@PDA@PHB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@PDA@P@A@PDA@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HA@PDA@@DA
+@PDB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ DA@PD@@PDA@PHB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@PDA@P@A@PDA@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HA
+@PDA@@DA@PDB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ DA@PD@@PDA@PHB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@PDA@P@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@@@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@DA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@P@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@@@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@PD@@@@@@@@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@@@@@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@@@@@@
+@@@@@PDA@PDA@PDA@PDA@PDA@PD@@@@@@@@@@@@@@@@@@@@@@@DA@PDA@PDA@PDA@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@PDA@PDA@PD@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@A?0@@A??@@A??<@@??? @_??<@O??? G???<C???? ????8_????G????3????>?????/????;????>?????/????;????>?????/????9????<_????C??
+?? ????8G???<@???>@G???@@??? @G??0@@_?0@@A?0@@@@@@@b') ; yourself); yourself]
+!
+
+warn32x32Icon
+    "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 warn32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#warn32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class warn32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PDA@P@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@A@PDA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PDA@PDA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@PDA@PD@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PDA@PDA@PD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@PDA@PDA@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PDA
+@PHB@PDA@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@PDA@ HA@PDA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PDA@PHB@ HA@PDA@@@@@@@@@@@@@@@@@@@@@@@@
+@@@A@PDA@ LC@ DA@PD@@@@@@@@@@@@@@@@@@@@@@@@@@PDA@PHC@0LC@ DA@PD@@@@@@@@@@@@@@@@@@@@@@@@A@PDA@ LC@0LB@PDA@P@@@@@@@@@@@@@@
+@@@@@@@@@PDA@PHB@0LC@0HB@PDA@P@@@@@@@@@@@@@@@@@@@@@A@PDA@ HC@0LC@ HA@PDA@@@@@@@@@@@@@@@@@@@@@PDA@PHB@ LC@0LB@ HA@PDA@@@@
+@@@@@@@@@@@@@@@A@PDA@ HB@0LC@0HB@ DA@PD@@@@@@@@@@@@@@@@@@PDA@PHB@ HC@0LC@ HB@ DA@PD@@@@@@@@@@@@@@@@A@PDA@ HB@ LC@0LB@ HB
+@PDA@P@@@@@@@@@@@@@@@PDA@PHB@ HB@0LC@0HB@ HB@PDA@P@@@@@@@@@@@@@A@PDA@ HB@ HB@0LB@ HB@ HA@PDA@@@@@@@@@@@@@PDA@PHB@ HB@ HB
+@ HB@ HB@ HA@PDA@@@@@@@@@@@A@PDA@ HB@ HB@ LC@ HB@ HB@ DA@PD@@@@@@@@@@PDA@PHB@ HB@ HC@0LC@ HB@ HB@ DA@PD@@@@@@@@A@PDA@ HB
+@ HB@ LC@0LB@ HB@ HB@PDA@P@@@@@@@PDA@PHB@ HB@ HB@ LC@ HB@ HB@ HB@PDA@P@@@@@A@PDA@ HB@ HB@ HB@ HB@ HB@ HB@ HA@PDA@@@@@PDA
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@a') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@F@@@@A @@@@<@@@@O@@@@G8@@@A>@@@@?0@@@O<@@@G? @@A?8@@@??@@@O?0@@G?>@@A?? @@??<@@O??@@G??8@A??>@@???0@O??<@G??? A???8@??
+??@O???0G???>A???? ????<O????G????9????>??????????<b') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-misc'!
+
+DirectoryUp22x22Icon
+    "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 DirectoryUp22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#DirectoryUp22x22Icon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class DirectoryUp22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(8 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LC@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LC@0LC@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LC@0LC
+@0L@@@@@@@@@@@@@@@@@@@@@@@@@@@LC@0LC@0LC@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@0LC@@@@@@@@@@@@@@@@@@@@@@@@@@HB@ H@@0LC@0@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@LC@0L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@0LC@@@@@@@@@@@@@@@@@@@@@@@@@@HB@ H@@0LC@0@@@ HB@ HB@ HB
+@ @@@@@@@@@B@ HB@@LC@0L@@@HB@ HB@ HB@ H@@@@@@@@@@ HB@ @C@0LC@@@@@@@@@@@@@@@B@@@@@@@@@@HB@ H@@0LC@0LC@0LC@0LC@0@@@ @@@@@@
+@@@B@ HB@@LC@0LC@0LC@0LC@0L@@@H@@@@@@@@@@ HB@ @C@0LC@0LC@0LC@0LC@@@B@@@@@@@@@@HB@ H@@0LC@0LC@0LC@0LC@0@@@ @@@@@@@@@B@ HB
+@@@@@@@@@@@@@@@@@@@@@@H@@@@@@@@@@ HB@ @@@@@@@@@@@@@@@@@@@@@B@@@@@@@@@@HB@ HB@ HB@ HB@ HB@ HB@ HB@ @@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 0 0 255 255 0 255 0 0]; mask:((ImageMask new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@0@@@@^@@@@O0@@@G>@@@C?0@@A?>@@@??0@@_?>@@G?8@@C???>@???? O???8C???>@???? O???8C???>@???? O???8C???>@???? O???8C??
+?>@???? @@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+desktop30x30Icon
+    "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 desktop30x30Icon inspect
+     ImageEditor openOnClass:self andSelector:#desktop30x30Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class desktop30x30Icon'
+	ifAbsentPut:[(Depth8Image new) width: 30; height: 30; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+.+*:.+*:.+*:.+*:.+*:.+*3T788,5MST5N^.+*:.+*:.+*:.+*:.+*_,;MSB#Z3T788,5MST5MS@K*:.+*:.+*: @>3T34@,;MSB#Z3T788^E8,Q4QS@JZ:
+&I\[@KMS_#X@T348,;MSB#Y8K*B6!!AEXD%^L@@B:+C48M AS_#Y8T348G58,-RZDC!!I@PDA@PGUC@@B:^C48M''!!S_#Y8W"2ZZ1EXPE)W)SU;%YVU%WUZ@@B:
+^C4=NG .-R$TDQIZU;$3S9URT%IRT%IRT!!VM@@B:^G ,&!!DNPE]W)SU&UEIRT%HLT%IRT%IRT"-C@I>:U5]WPH>OS5F\T%IRT%HH""@ $YF\!!8^G!!2.DH[H@
+U5^O 8NC 8MRT%HH"%APO#8VCYF\ 8NCT3= $ \:U5]/ 8NC 8M_RC]PO+)0E!!X*CYF\&9Z8VV4C):,DU5^O 8NC 8M_.+*:\AXVJ"('' YE\WIDMS''8^$:"
+U5^O 8NC 8M_.+)0E!!X*J"^/]#A(O" $LF2ZZ+T@U5^O 8NC 8M_.''@VE"(*I6D0JC:AZCAEMX ;@@@@U5^O 8NC 8M_\AXVJ"(''\S1( Z68.G6[ 8 Q@@@@
+U5^O 8NC 8M_E!!X*J"]D(6&8.DEQ 8NC 7J]@@B:U5^OIRT%IRU_E"(*I2\ W::V YDHIRT%IWPN@@B:U5^OIRT%IRU_J"(''I1L>W5=''CYDHIRVCIU0N@@B:
+U5^O''I2\''I1_J"\''D38>TA47Y9DH''I2C 8TN@@B:U5^O''I2\''I1_I1L>O#8MCXEPTIDH''I2B 8TN@@B:U5^8''I2\''I1_O#8>O 5_M5=FK8(#''I2C 8TN@@B:
+KR4+''I2\''I1_O#9_"7L/FFP#CI2\ %EQ[&8N@@B:KR68T%J\''I1_W5=MBBMRT%IRCEEO#5]ZPE!!+@@B:P4L+T%IRT%IRCEIRT%ITY#V%U5]@C!!D)&"18@@B:
+#X4UT%IRT%IRT)UOL;%WV!!HQEB&5K'' 6NC58@@B:V%)5%YVU^3V%U5)@VAE+&"1^^CY>T;L6NC4@@K*:P4M5PDA@PAHN!!BZ5KE8_NC5S,3Y>T;L@@K*:.+*:
+#H1WD!!FD-*@.^CXJT;N3''35S,0@@@K*:.+*:.+*:'')9DQ598NG9S,3XJT;N3'';*:.+*:.+*:.+*:.+*:''+N3_%N3NG9S,0@@.+*:.+*:.+*:.+*:.+*:.+*:
+') ; colorMapFromArray:#[80 128 180 208 192 110 96 176 220 144 32 30 144 96 100 144 208 220 96 176 240 176 32 20 255 224 140 128 192 240 192 192 180 160 208 240 255 240 180 176 224 255 16 64 130 192 192 220 208 224 240 32 64 130 0 48 140 208 224 255 48 64 130 16 96 190 240 240 255 80 160 210 240 208 100 80 160 220 48 160 255 96 128 180 176 208 180 80 176 255 160 128 130 160 144 140 128 208 255 160 80 100 176 240 255 255 224 160 144 192 255 255 255 210 64 80 100 208 240 255 176 208 255 64 80 110 224 240 255 16 112 210 112 112 110 32 96 190 112 112 130 192 192 130 64 144 220 128 144 160 80 112 180 80 144 210 96 192 255 112 160 210 160 160 160 112 192 255 176 176 180 160 224 255 192 176 180 32 64 110 80 112 110 192 192 210 192 224 255 80 112 130 0 64 160 48 128 190 80 96 130 16 80 180 112 128 140 32 112 210 144 192 180 96 96 130 80 192 255 96 160 210 160 160 140 80 112 190 96 144 210 240 208 130 144 160 190 144 176 210 144 208 255 192 208 210 255 240 190 208 208 210 224 224 210 80 96 110 48 80 130 0 80 180 16 48 140 80 128 160 0 64 180 32 128 220 48 128 210 112 192 210 128 128 130 64 176 255 144 48 50 112 160 190 96 128 190 80 128 210 255 224 130 112 128 190 176 208 210 128 192 255 128 176 240 128 112 60 80 80 80 48 80 110 64 112 140 208 192 210 0 96 190 16 128 220 240 255 255 144 128 100 48 144 220 144 176 160 64 144 210 16 96 210 48 128 220 48 112 210 144 144 140 112 176 220 112 144 190 128 176 210 96 144 220 160 192 210 192 192 190 144 160 210 192 208 220 160 208 255 240 240 210 255 255 220 48 64 110 0 112 210 32 144 220 255 255 240 0 96 210 64 160 220 224 208 110 128 192 190 48 96 180 16 64 180 80 128 190 64 128 210 64 96 180 96 160 220 208 80 30 160 16 20 144 192 220 192 208 190 160 192 220 128 144 210 176 192 220 192 240 255 80 96 100 240 240 220 255 240 210 16 64 140 208 208 220 240 240 240 112 96 100 0 80 190 48 176 255 16 16 0 64 112 180 64 128 190 255 240 255 208 96 30 144 16 20 80 144 220 128 208 240 192 48 20 128 176 220 112 176 240 176 208 220 144 192 240 224 240 210 192 224 240 208 176 180 224 224 220 224 240 240 96 96 100 80 80 100 224 224 240 32 128 210 32 112 190 255 255 255]; mask:((Depth1Image new) width: 30; height: 30; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@A>@@@G? @@??8@A??>@G??? O???8G???>A????8_????G????1????<_???>G???>A???? _???8G???>A???? _???8G???>A???? _???8G??
+?>A???? _???0G??? A??>@@_?<@@G?@@@@<@@@@') ; yourself); yourself]
+!
+
+documents26x26Icon
+    "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 documents26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#documents26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class documents26x26Icon'
+        ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E)ZQ!!0IBP).
+G)^WWX]PTA4@@@@@@@@@@@@@QDPPX#T5I6U@ZF!!<E38>TP@@@@@@@@@@@@ADQAA"MST''YTA(ZG0WO#9Q@@@@@@@@@@@@@E!!XJ7.Q$S>HA)RT%SFA YP0L3L@
+@@@@@@@@[F1''E%IRP#^DHB@<OC0<OC2S$0@@@@@@@@B@ B):@ H-\9AUUXJB (JBOF-+@@@@@@@@@HB@J''(B@"53$EUU (JB (H<Z6,@@@@@@@@@B@"M@#4=
+K@=Y%YT#G2D!!&VPZF @@@@@@@@@/K2$(@PDDM)AUUT]> 8LXYEYV@@@@@@@@@A,[^X0;N1U^VYVUR 1\WF5$Z&(@@@@@@@@@F1-8]0@@S''JPUUVB (JB #1A
+PP@@@@@@@@@[F7!!7@@AN\)AUUXJB (JBODEA@@@@@@@@@E]W"0BJ"$4NVYVUW5=_W5<<_W4@@@@@@@@@_7<S''VE!!DXVPUUVB (JB #0EAP@@@@@@@@@GA2VI
+NC!!4&E&U%U=_W5=_OEQT@@@@@@@@@@\GIX$8NGRXVYVUW5=_W5<<UEP@@@@@@@@@K"95II.[R06PUUVB (JB #2O#0@@@@@@@@@.K&AL&)("RCHKB1HRNS$9
+I!!$Y@@@@@@@@@IJRQYY0\D$4X4=O@89ST6$Y[6<@@@@@@@@@$)IE%''A0RSQ#S4<C#%MSZQ%/[0@@@@@@@@B\''E-CY&Y6!!''D:N @@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[121 174 168 117 164 171 112 155 176 142 153 154 145 184 186 154 154 154 161 162 162 87 181 134 86 176 134 84 167 135 83 160 137 200 200 200 159 207 255 73 134 146 70 129 149 67 122 152 94 152 159 124 183 164 238 238 238 122 175 167 252 252 252 136 182 178 108 147 180 145 185 187 93 194 255 160 160 160 168 168 168 87 178 134 85 170 136 163 185 209 78 147 140 154 198 251 213 213 213 202 230 247 126 194 164 199 225 255 125 185 164 122 179 166 242 242 242 105 152 170 115 161 174 113 157 175 109 148 180 106 142 183 147 184 190 148 181 193 87 182 134 86 177 134 179 179 179 187 187 187 197 197 197 207 207 207 74 137 145 86 147 151 68 123 151 66 119 153 124 184 164 237 237 237 241 241 241 119 169 170 255 255 255 114 159 174 136 177 182 130 168 185 141 177 188 159 159 159 149 179 197 183 217 203 85 172 135 96 180 141 99 176 145 137 189 255 73 136 145 116 185 158 205 237 255 125 191 164 125 189 164 123 180 165 122 177 167 120 131 130 88 131 169 85 127 171 110 150 178 141 149 153 151 151 151 162 161 158 166 166 166 87 179 134 86 173 135 186 186 186 101 179 146 211 234 223 194 239 255 71 130 148 69 125 150 227 227 227 125 186 164 123 181 165 117 171 166 120 132 130 254 254 254 114 149 164 151 197 183 107 144 181 144 181 188 153 157 160 163 163 163 170 170 170 86 174 135 146 215 254 81 154 138 201 201 201 108 181 153 217 217 217 70 126 149 66 120 152 125 187 164 124 183 165 120 174 165 119 170 169 118 166 171 116 161 173 110 151 178 106 144 182 145 183 188 156 156 156 27 119 255 87 180 134 86 175 135 185 185 185 194 193 189 173 227 255 209 209 209 71 131 148 85 143 148 67 121 152 65 117 154 123 182 165 122 177 166 119 171 169 117 165 171 111 152 177 140 150 153 149 149 149 159 158 155 140 172 193 88 183 134 174 174 174 182 182 182 190 190 190 102 178 147 75 139 144 72 132 147 216 244 248 125 192 164 125 188 164 238 246 242 122 178 166]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@C??0@@??<@@O??@@C??>@@??? @O??8@C??>@@??? @O??8@C??>@@??? @O??8@C??>@@??? @O??8@C??>@@??? @O??8@C??>@@??
+? @O? @@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+fileOpenIcon
+    <resource: #programImage>
+
+    ^ self loadFromFileIcon
+!
+
+greenThumbUnknownSmallIcon
+    "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 greenThumbUnknownSmallIcon inspect
+     ImageEditor openOnClass:self andSelector:#greenThumbUnknownSmallIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary greenThumbUnknownSmallIcon'
+        ifAbsentPut:[(Depth2Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@B @@@@(U@@@!!E@@@*IP@@J)P@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 76 76 76 153 153 153]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@C @_8A?0O?@?8C?@O8@@@@@a') ; yourself); yourself]
+!
+
+greenThumbUpIcon
+    "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 greenThumbUpIcon inspect
+     ImageEditor openOnClass:self andSelector:#greenThumbUpIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class greenThumbUpIcon'
+        ifAbsentPut:[(Depth4Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@A)<@@@@@@@@G( @@@@@@@@^/@@@@@@@@A9@@@@@@@@C)$@@@@@@@A)+<>]BM]0BZ(->&E''3&@I**J&DN];@@VZ*''G^DV] C%&Y8AY7,@@MQU
+P]8QY6@@@MSPE''XP@@@@@CL0!!''X@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 64 0 77 242 77 0 128 0 0 160 32 8 215 50 50 173 50 45 210 45 0 32 0 40 247 40 77 242 118 0 64 32 22 105 22 18 141 18 13 178 13 45 210 86]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G@@>@C8@O @<@G?<??;??/?>??;??O?<?? ?>@?0') ; yourself); yourself]
+!
+
+greenThumbUpSmallIcon
+    "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 greenThumbUpSmallIcon inspect
+     ImageEditor openOnClass:self andSelector:#greenThumbUpSmallIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class greenThumbUpSmallIcon'
+        ifAbsentPut:[(Depth2Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@P@@@@D@@@@A@@L@@P@B@@U*@@@UZ@@@UV @@EV @@@@@@B@@@@B@b') ; colorMapFromArray:#[0 0 0 0 255 0 0 127 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C@@N@@8@C @_8A?0O?@?8C?@O8@@@@@a') ; yourself); yourself]
+!
+
+greyThumbRightIcon
+    "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 greyThumbRightIcon inspect
+     ImageEditor openOnClass:self andSelector:#greyThumbRightIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary greyThumbRightIcon'
+        ifAbsentPut:[(Depth4Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@LC\@@@@@@CA2M0@@@@@0\#]&@@@@@GH7I7T@@@@@L2\#L@@@@@AWH3@&@@@@@@L2X#P@@@@@IV@#E0@@@@@ T7E2@GQ0@BY''EF]DDT@@A''
+\QPT]7L@@F]1DTL@@@@@A''PQL@@@@@@FM4P@@@@@') ; colorMapFromArray:#[0 0 0 224 224 224 64 64 64 128 128 128 192 192 192 32 32 32 96 96 96 160 160 160]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A8@_0G?@?<C?0O?@?<C?0O?\??;??''?>_?0?0C>@') ; yourself); yourself]
+!
+
+greyThumbUpIcon
+    "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 greyThumbUpIcon inspect
+     ImageEditor openOnClass:self andSelector:#greyThumbUpIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class greyThumbUpIcon'
+        ifAbsentPut:[(Depth4Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@ @@4\@@@@@@@@GE@@@@@@@@@\W@@@@@@@@A4@@@@@@@@@4P@@@@@@H@4E2]FAV]0AAEF\SH7X3@DDQPSHC]2@@]ADWI#H#\0@7]7LBM7H@@FY7
+YVL"M3@@@FY T7L @@@@@BH T7L@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 224 224 224 64 64 64 128 128 128 192 192 192 32 32 32 96 96 96 160 160 160]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G@@>@C8@O @<@G?<??;??/?>??;??O?<?? ?>@?0') ; yourself); yourself]
+!
+
+hideToolBarIcon
+    <resource: #programImage>
+
+    ^ self hideToolbar8x24Icon
+
+    "Created: / 18-02-2007 / 14:52:15 / cg"
+!
+
+hideToolbar24x8Icon
+    "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 hideToolbar24x8Icon inspect
+     ImageEditor openOnClass:self andSelector:#hideToolbar24x8Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hideToolbar24x8Icon'
+	ifAbsentPut:[(Depth2Image new) width: 24; height: 8; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@J@B(@* @HPB%@"D@AP@U@ET@@@@@ @J@@B$@*PH)@BT@IPA%@@T@AP@E') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 24; height: 8; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@XFA TEAPLC@0@@@@A XFAPTE@0LC') ; yourself); yourself]
+!
+
+hideToolbar8x24Icon
+    "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 hideToolbar8x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#hideToolbar8x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hideToolbar8x24Icon'
+	ifAbsentPut:[(Depth2Image new) width: 8; height: 24; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@(@BD@AP@@@@@)@BT(AR$@JP@%J@T)@BT(JR$!!IPTEJB )HRT%AR$@IR EJP@%') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 8; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@FAPL@@FAPL@XE@0@@XE@0A TC@@A TC') ; yourself); yourself]
+!
+
+hideToolbarIcon
+    "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 hideToolbarIcon inspect
+     ImageEditor openOnClass:self andSelector:#hideToolbarIcon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hideToolbarIcon'
+	ifAbsentPut:[(Depth2Image new) width: 10; height: 26; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@HB @HBD@D@T@@@@(@@@!!@@@ELB @HBD@A@T@@@@(B@@!!@@@ELB @@BD@@@T@H@@(@@@!!@@@EHB @HBD@N@T@@@@(B@@!!@@@EB@@@C') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 10; height: 26; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@@@@@a') ; yourself); yourself]
+!
+
+hideToolbarIcon10x26
+    "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 hideToolbarIcon inspect
+     ImageEditor openOnClass:self andSelector:#hideToolbarIcon
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hideToolbarIcon10x26'
+	ifAbsentPut:[(Depth2Image new) width: 10; height: 26; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@HB @HBD@D@T@@@@(@@@!!@@@ELB @HBD@A@T@@@@(B@@!!@@@ELB @@BD@@@T@H@@(@@@!!@@@EHB @HBD@N@T@@@@(B@@!!@@@EB@@@C') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 10; height: 26; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@@@@@a') ; yourself); yourself]
+
+    "Created: / 18-02-2007 / 14:52:07 / cg"
+!
+
+hideToolbarIconH14
+    "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 hideToolbarIconH14 inspect
+     ImageEditor openOnClass:self andSelector:#hideToolbarIconH14
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hideToolbarIconH14'
+	ifAbsentPut:[(Depth2Image new) width: 10; height: 14; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@B @@BD@@@T@@@@(@@@!!@@@E@B @@BD@@@T@@@@(@@@!!@@@E@@@@@') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 10; height: 14; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@@@@@a') ; yourself); yourself]
+!
+
+hideToolbarIconH20
+    "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 hideToolbarIconH20 inspect
+     ImageEditor openOnClass:self andSelector:#hideToolbarIconH20
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hideToolbarIconH20'
+	ifAbsentPut:[(Depth2Image new) width: 10; height: 20; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@B @@BD@@@T@@@@(@@@!!@@@E@B @@BD@@@T@@@@(@@@!!@@@E@B @@BD@@@T@@@@(@@@!!@@@E@@@@@') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 10; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@@@@@a') ; yourself); yourself]
+!
+
+hideToolbarIconH26
+    "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 hideToolbarIconH26 inspect
+     ImageEditor openOnClass:self andSelector:#hideToolbarIconH26
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hideToolbarIconH26'
+	ifAbsentPut:[(Depth2Image new) width: 10; height: 26; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@HB @HBD@D@T@@@@(@@@!!@@@ELB @HBD@A@T@@@@(B@@!!@@@ELB @@BD@@@T@H@@(@@@!!@@@EHB @HBD@N@T@@@@(B@@!!@@@EB@@@C') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 10; height: 26; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@0@B @F@@C@@J@@X@@@@@a') ; yourself); yourself]
+!
+
+languages20x12Icon
+    "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 languages20x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#languages20x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class languages20x12Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+L0X3IRT%IRT3A X3IRT%IRT3L0XLL0XFL2T%ISLFA#L%IRT%L20FA2T%L3LFL2T%L0XFL2T%L3LFA0\GIRT%CCLFA 03A X3CCLFA \GA0\3L3L3L3L3L3LF
+A#L3L3LFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA X3L3L3L3L3L3LFA XFA XFA XFA"T%ISLFA @JB (JB (JB (JB (J
+ISLFA#LJB (JB (JB (JB (JB (3A"0JB (JB (JB (JB (JB (JB XJB (JB (JB (JB (JB (JB (J') ; colorMapFromArray:#[168 208 173 255 223 137 255 226 146 255 228 151 255 230 164 168 107 144 255 0 0 0 0 0 226 232 173 255 224 143 255 204 0 255 229 162 167 167 205 137 185 173 70 78 154 255 225 143 255 227 151 255 232 163 137 78 144 70 107 158 70 78 148 255 224 142 255 226 149 255 229 159 255 232 173 255 255 238 198 232 173 255 224 141 255 227 150 255 228 157 255 232 171 70 133 163 70 78 146 255 224 140 255 226 147 255 228 155 255 231 168 0 0 99 70 78 145 255 223 138 255 227 148 255 227 153 255 232 168 226 159 148 255 63 63 70 78 144 255 224 139 255 225 145 255 228 152 255 231 166 198 133 144 255 255 255]; yourself]
+!
+
+loadFromFileIcon
+    <resource: #programImage>
+
+    ^ self load22x22Icon
+!
+
+loadImageFromFileIcon
+    <resource: #programImage>
+
+    ^ self loadFromFileIcon
+!
+
+redThumbDownIcon
+    "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 redThumbDownIcon inspect
+     ImageEditor openOnClass:self andSelector:#redThumbDownIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class redThumbDownIcon'
+        ifAbsentPut:[(Depth4Image new) width: 15; height: 15; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@L3@!!;\@@@C6<J^7(@@H=-5*<Z);\@@]UUDJ^;(@@MH3N:<Z);\@H3MC^ F;(@@#MO$7);8WB@\#'')K0#;,@@AH @@@@@@@@B2@@@@@@@@@K
+NP@@@@@L@@,4@@@@@@T@A2$@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 191 20 1 255 44 33 255 131 65 255 84 65 255 88 33 160 40 0 184 67 40 32 27 0 223 99 33 64 22 0 223 52 33 128 13 0 224 56 0 112 16 31 152 35 8]; mask:((ImageMask new) width: 15; height: 15; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?@?>O?8??3??O?>??;??/?>_?0<@C8@O @>@A0@') ; yourself); yourself]
+!
+
+redThumbDownSmallIcon
+    "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 redThumbDownSmallIcon inspect
+     ImageEditor openOnClass:self andSelector:#redThumbDownSmallIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class redThumbDownSmallIcon'
+        ifAbsentPut:[(Depth2Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@B@@@@@@EV @@AUZ@@@EV C@@U*@@@A@@@@@P@@@@D@@@@A@@@@@@@@ b') ; colorMapFromArray:#[0 0 0 255 0 0 127 0 0 255 255 255]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@? C?@O>@?<A?0G>@N@@8@C @L@@@a') ; yourself); yourself]
+!
+
+redoIcon
+    <resource: #programImage>
+
+    View styleSheet name = #winXP ifTrue:[
+	^ self redoXP28x28Icon
+    ].
+    ^ self redo20x20Icon
+!
+
+saveToFileAsIcon
+    <resource: #programImage>
+
+    ^ self save22x22Icon
+!
+
+saveToFileIcon
+    <resource: #programImage>
+
+    ^ self save22x22Icon
+!
+
+smallBugIcon
+    "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 smallBugIcon inspect
+     ImageEditor openOnClass:self andSelector:#smallBugIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smallBugIcon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@3@@@@@@@@@@@3LS@@@@@@@@@@LSL2@@
+@@@@@@@3LSL @@@@@@@@D3L2@@@@@@@@@CLSH @@@@@@@@@BH @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 128 0 0 248 0 0]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@#@@B_ @A? @O?@@C?@@G?@@G> @G>@@C=@@A4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+smiley_veryAngry
+    "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 smiley_veryAngry inspect
+     ImageEditor openOnClass:self andSelector:#smiley_veryAngry
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class smiley_veryAngry'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+3L3L3L3L3L3K/L2;.;3L.<,[.9X36;,[27(&H$QM6''/K(+IDQDR=*<V3HDQDPD6526I@ADP@SZ/KL  @P@ M><,4BHQD"@7;22Q@ADP@S_/K5DQDQDS-*<2=
+Q@@@AM6<3K7PQDS 6+3L2=7]7]6+3L3L.???*;3L3L3L.;.<3L0b') ; colorMapFromArray:#[0 0 0 254 42 0 255 253 19 255 254 147 255 234 0 150 150 150 255 255 199 254 109 3 255 0 0 255 255 235 254 157 0 69 69 69 248 244 251 255 201 0 255 229 0 255 180 0]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A#87??_?=??7??_?=??7??_?=??3?>O?8_?@?8@>@b') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools'!
+
+addBufferIcon
+    <resource: #programImage>
+
+    ^ self addBuffer16x16Icon2
+!
+
+browseItIcon
+    <resource: #programImage>
+
+    ^ self browseIt20x20Icon
+!
+
+bug2_25x25Icon
+    "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 bug2_25x25Icon inspect
+     ImageEditor openOnClass:self andSelector:#bug2_25x25Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class bug2_25x25Icon'
+	ifAbsentPut:[(Depth4Image new) width: 25; height: 25; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@O0@@@@@@@@@@@AV( @@@@@@CL3 P@3D@DU @@@@@@@DX(@@P@QAX@@@@@@@Z"!!ATQIDET@ @@@@@B@(XQ7Q%UP@@@@@@B@VHBWH''QE@@
+@@@@@@APAFABH''R@@C@@@H E@DQDABI4 @@A@@D@)$Q7]*AGPH@@@@@EDVQGH$Q4Y!!D@@0,@ AYD\"QBI4@XB@@H@ETTQ2IDH"]A(AT@BCMP!!GH$P"H''XX"@
+@@@ATAP"QRH"]@DQB@@@@@@TIDH"H''P@TX@@@@@@"4P"H"]@F@@@@@D@@@"WH"I4@P@@@@@@@@@@"4QDP@D@@@@@C0@@@@!!UEUTH@@@@@@@@@@@@@@@UB@@@
+@@@C@@@@@@@QTH@@@@@@A0@@@@@A @@@@@@@@@L@@@@@@@@@@@@C@@@@@@@@@@@@@@@@@@@@@P@a') ; colorMapFromArray:#[0 0 0 148 148 148 248 0 0 255 255 255 108 0 0 110 110 110 52 0 0 209 0 0 208 208 208 100 72 72 44 44 44 152 49 49]; mask:((ImageMask new) width: 25; height: 25; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@O @@FG<@@G#?@@C;? @@7?0@@\?8@@C?>@@M?? @G??8@A??<@@???P@O??<@B??>@A/?? @C??8@@??0@@G?0@@@?<@@@G?@@@@C0@@@C(@@@A
+@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+bugIcon
+    <resource: #programImage>
+
+    ^ self bug28x28Icon
+!
+
+closeIndicatorInTree
+    <resource: #programImage>
+
+    ^ self closeIndicatorInTree9x9Icon
+
+    "Created: / 19-12-2010 / 09:03:52 / cg"
+!
+
+copyIcon
+    <resource: #programImage>
+
+    ^ self copy20x20Icon
+!
+
+cutIcon
+    <resource: #programImage>
+
+    ^ self cut20x20Icon
+!
+
+debugItIcon
+    <resource: #programImage>
+
+    ^ self debugIt20x20Icon
+
+    "Created: / 20-02-2007 / 15:46:24 / cg"
+!
+
+deleteIcon
+    <resource: #programImage>
+
+    ^ self delete16x16Icon
+!
+
+doItIcon
+    <resource: #programImage>
+
+    ^ self doIt20x20Icon
+!
+
+downIcon
+    <resource:#programImage>
+    ^ self down22x22Icon
+!
+
+downRightIcon
+    <resource:#programImage>
+    ^ self downRight22x22Icon
+!
+
+inspectItIcon
+    <resource: #programImage>
+
+    ^ self inspectIt20x20Icon
+
+    "Created: / 20-02-2007 / 15:44:34 / cg"
+!
+
+leftDownIcon
+    <resource:#programImage>
+    ^ self leftDown22x22Icon
+!
+
+openIndicatorInTree
+    <resource: #programImage>
+
+    ^ self openIndicatorInTree9x9Icon
+
+    "Created: / 19-12-2010 / 09:04:06 / cg"
+!
+
+printItIcon
+    <resource: #programImage>
+
+    ^ self printIt20x20Icon
+!
+
+profileItIcon
+    <resource: #programImage>
+
+    ^ self profileIt20x20Icon
+!
+
+removeTabEnteredIcon
+    <resource: #programImage>
+
+    ^ self removeTabIcon
+!
+
+removeTabIcon
+    <resource: #programImage>
+
+    ^ self removeTab22x22Icon
+!
+
+undoIcon
+    <resource: #programImage>
+
+    ^ self undo16x16Icon2
+!
+
+upIcon
+    <resource:#programImage>
+    ^ self up22x22Icon
+!
+
+upRightIcon
+    <resource:#programImage>
+    ^ self upRight22x22Icon
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-ChangeSetDiffTool & TextDiffTool'!
+
+mergeDiff3AToMergedArrow30x30
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeDiff3AToMergedArrow30x30.xpm"
+
+    "
+     self mergeDiff3AToMergedArrow30x30 inspect
+     ImageEditor openOnClass:self andSelector:#mergeDiff3AToMergedArrow30x30
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeDiff3AToMergedArrow30x30'
+        ifAbsentPut:[(Depth8Image new) width: 30; height: 30; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@@@@@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA
+@@@@@@@@@@@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@@@@@@@@@A@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@@@@@@@@@@@@DA@PDA@PDA@PDA@PDA@PDA
+@PDA@PD@@@@@@@@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@@@@@@@@@@PDA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@@@@@@@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@DA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@@@@@@@DA@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PD@@@@@@@@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@@@@@@A@PDA@PDA@PDA@PDA
+@PDA@PDA@PDA@PDA@@@@@@@A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@P@@@@@@@PDA@PDA@PDA@PDA
+') ; colorMapFromArray:#[0 0 0 0 0 0]; mask:((ImageMask new) width: 30; height: 30; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O0@@@C?@@@@?<@@@O? @@C?>@@@A? @@@G<@@@@? @@@G<@@@@?
+@@@@G0@@@A>@@@@O @@@C8@@@@>@@@@G0@@@A<@@') ; yourself); yourself]
+!
+
+mergeDiff3BToMergedArrow30x30
+    "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 mergeDiff3BToMergedArrow30x30 inspect
+     ImageEditor openOnClass:self andSelector:#mergeDiff3BToMergedArrow30x30
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeDiff3BToMergedArrow30x30'
+        ifAbsentPut:[(Depth1Image new) width: 30; height: 30; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((ImageMask new) width: 30; height: 30; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@_@@@@G0@@@A<@@@@_@@@@G0@@@A<@@@@_@@@@G0@@@A<@@@@_@@@@G0@@@A<@@@@_@@O0G0@C?!!<@@?>_@@O??0@C??<@@@??@@@C?0@@@_<@@@C?@@@@_
+0@@@G<@@@@?@@@@O0@@@C<@@@@?@@@@O0@@@@@@@') ; yourself); yourself]
+!
+
+mergeDiff3BaseToAArrow30x30
+    "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 mergeDiff3BaseToAArrow30x30 inspect
+     ImageEditor openOnClass:self andSelector:#mergeDiff3BaseToAArrow30x30
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeDiff3BaseToAArrow30x30'
+        ifAbsentPut:[(Depth1Image new) width: 30; height: 30; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@L@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((ImageMask new) width: 30; height: 30; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@G @@@C<@@@@?@@@@O0@@@C<@@@@?@@@@O8@@@C?@@@@?8@@@O?@@@C?<@@@??<@@O??0@C=?<@@?G?@@O0_0@C<@\@@?@@@@O0@@@C<@@@@?@@@@O
+0@@@C<@@@@?@@@@O0@@@C<@@@@?@@@@O0@@@C<@@') ; yourself); yourself]
+!
+
+mergeDiff3BaseToBArrow30x30
+    "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 mergeDiff3BaseToBArrow30x30 inspect
+     ImageEditor openOnClass:self andSelector:#mergeDiff3BaseToBArrow30x30
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeDiff3BaseToBArrow30x30'
+        ifAbsentPut:[(Depth1Image new) width: 30; height: 30; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@D@@@@A@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((ImageMask new) width: 30; height: 30; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@?@@@@O0@@@C<@@@@?@@@@G0@@@A<@@@@_ @@@C<@@@@?@@@@G8@@@@? @@@O<@@@A?<@@@O?0@@@?<@@@G?@@@@O0@@@@\@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+mergeMerge24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeMerge24x24.xpm"
+
+    "
+     self mergeMerge24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeMerge24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeMerge24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+RD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HE0-HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HJ$T&RD!!HRD!!HRD!!HRD!!H
+RD!!HRD!!HRD!!HK$YFPA=HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HK$]FQ4\<E$!!HRD!!HRD!!HRD!!HRD!!HRD!!HNT]GQ4]GQ2 HRD!!HRD!!HRD!!HRD!!HRD!!HN$]GQ4]GQ4]D
+I$!!HRD!!HRD!!HRD!!HRD!!HN4]GQ4]GQ4]GO %HRD!!HRD!!H@D!!HRD!!HK$]GQ4]GQ4L]RD!!HRD!!HR@T1ED!!HRD!!HK$]GQ4]GI0MHRD!!HRD AH$EBFD!!HRD!!HK$]G
+Q34JRD!!HRD!!HRAD4P$IBF4!!HRD!!HJ4]@ET!!HRD!!HRD PL4IBP$IBHD!!HRD!!HJQ9HRD!!HRD!!HCCEBP$IBP$IBF4!!HRD!!H@$!!HRD!!HRD [M$IBP$IBP$IBF4!!H
+RD!!HRD!!HRD!!HRD DH4EBP$IBP$IBHD!!HRD!!HRD!!HRD!!HRD!!HR@<2P$IBP$IBF4!!HRD!!HRD!!HRD!!HRD!!HRD!!HD#UBP$IBF4!!HRD!!HRD!!HRD!!HRD!!HRD!!HR@T!!
+PTIBF4!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HA2QBFD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD MC$!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!H
+RD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!H') ; colorMapFromArray:#[46 37 13 60 47 16 38 49 22 47 60 27 75 59 19 72 57 20 72 58 20 79 63 22 56 72 33 57 73 33 62 79 35 63 81 36 84 66 23 84 68 23 85 68 23 91 73 24 98 78 27 107 86 30 110 89 30 115 92 31 115 93 31 66 85 38 69 86 39 72 93 42 115 93 32 117 94 32 117 95 32 118 94 32 118 95 32 79 101 46 84 107 49 84 109 48 117 96 32 140 112 38 147 118 41 148 119 40 154 124 43 100 128 57 101 129 58 103 132 60 116 149 67 117 150 67 123 158 71 124 158 71 125 160 72 124 160 73 127 162 72 126 162 73 170 137 47 171 138 47 189 152 52 200 161 54 217 174 58 220 177 60 226 181 62 231 186 63 232 187 63 128 163 74 128 164 73 130 165 74 133 170 77 138 176 79 147 189 85 149 191 86 150 190 86 233 187 64 234 188 64 157 201 91 161 206 93 162 207 93 164 210 95 165 211 95 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@F@@@G@@@G0@@G<@@G?@@G? @G?0DG?@\G>A<G8C<G O<F@?<DA?<@A?<@@_<@@G<@@C<@@@<@@@L@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+mergeMerge32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeMerge32x32.xpm"
+
+    "
+     self mergeMerge32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeMerge32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeMerge32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&HAX&I"X&I"X&I"X&I"X&I"X&I"X&I"
+X&I"X&I"X&I"X#P*@&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"OFEWE&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&H>XVE!!PQQ"X&I"X&I"X&I"
+X&I"X&I"X&I"X&I"X&I"X#9!!XVE!!WSHNX&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"P&E!!XVE!!XU01CFI"X&I"X&I"X&I"X&I"X&I"X&I"X&IBXVE!!XVE!!XVEY
+GVI"X&I"X&I"X&I"X&I"X&I"X&I"X$U!!XVE!!XVE!!XVE!!PQQ"X&I"X&I"X&I"X&I"X&I"X&I"Q6E!!XVE!!XVE!!XVE!!WSDLX&I"X&I"X&I"X&I"X&I"X&IGXVE!!
+XVE!!XVE!!XVE[G&I"X&I"X&I"X&H@X&I"X&I"X$U!!XVE!!XVE!!XVE_LP1"X&I"X&I"X&HYRRM"X&I"X&I"P&E!!XVE!!XVE!!P ="X&I"X&I"X&HIN5YZH6I"X&I"
+X&IBXVE!!XVE!!VAY"X&I"X&I"X&HDKEIZV%(+X&I"X&I"X$E!!XVE!!W28CX&I"X&I"X&I"F45ZV%)ZV"1"X&I"X&I"OVE!!XSLLX&I"X&I"X&I"FT!!ZV%)ZV%)Z
+JVI"X&I"X&H=XTHTX&I"X&I"X&I"AC%TV%)ZV%)ZV%(5X&I"X&I"X#L\X&I"X&I"X&I"X"IPV%)ZV%)ZV%)ZV#]"X&I"X&I"@VI"X&I"X&I"X UJV%)ZV%)Z
+V%)ZV%)ZM6I"X&I"X&I"X&I"X&I"X&I"X!!)MU%)ZV%)ZV%)ZV%(7X&I"X&I"X&I"X&I"X&I"X&I"X&H TE)ZV%)ZV%)ZV#]"X&I"X&I"X&I"X&I"X&I"X&I"
+X&HGN%QZV%)ZV%)ZKFI"X&I"X&I"X&I"X&I"X&I"X&I"X&I"FT-ZV%)ZV%()X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X!!=NV%)ZV"Y"X&I"X&I"X&I"X&I"
+X&I"X&I"X&I"X&I"X X!!TU)VIVI"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&HIM5P#X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"DAE"X&I"X&I"
+X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"
+X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X&I"X @a') ; colorMapFromArray:#[29 23 8 22 28 13 26 34 14 29 35 17 43 35 11 41 33 12 49 40 13 55 43 15 56 45 15 56 46 15 32 41 18 33 40 19 32 42 18 33 42 19 36 45 21 37 47 21 57 46 16 59 47 16 38 48 21 38 49 22 39 49 23 45 58 25 46 58 27 63 51 18 64 53 18 65 53 18 72 57 20 75 60 20 52 67 30 57 72 33 62 81 35 88 71 24 91 73 25 99 80 27 105 85 29 110 88 29 111 88 30 112 90 30 113 92 31 116 92 31 116 93 31 117 93 31 68 87 40 113 91 32 115 93 32 117 95 32 75 96 43 76 97 44 77 97 44 77 98 45 78 100 44 88 112 51 93 121 55 120 96 32 121 96 32 121 98 33 122 99 33 126 101 35 128 102 34 144 115 39 109 139 62 109 140 63 110 141 64 111 142 64 111 143 64 113 144 64 112 144 65 114 145 65 114 146 66 116 148 66 116 148 67 116 150 68 170 136 46 171 137 46 175 140 47 184 148 50 191 153 52 194 156 53 208 167 57 216 173 59 217 174 59 219 176 60 223 179 61 228 184 62 229 184 63 231 186 63 232 187 63 133 170 76 138 177 80 139 178 80 234 188 64 153 195 88 155 198 89 157 201 91 158 202 91 160 205 92 163 209 94 165 211 95 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@H@@@@C @@@@<@@@@O0@@@C?@@@@?<@@@O? @@C?>@@@??8@@O?<@HC?>@N@?>@O O>@O8C?@G>@?@G? O@G?8C@C?>@ C?? @@_?8@@A?>@@@
+O? @@@?8@@@C>@@@@_ @@@A8@@@@F@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeMergeExternal24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeMergeExternal24x24.xpm"
+
+    "
+     self mergeMergeExternal24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeMergeExternal24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeMergeExternal24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUT@@@@A@@@@@@@A@@@@@@@A@@@@@EUUUPLIBP$IBP$IBP$IBP$IBP$IBP$IBPEUUPLIBP$IBP$IBP$JB $IBP(I
+BP$IBPEUUPLFA XFA XFA XFA XFA XFA XFA QUUP]TUD%LUEQTUEQTUEQTUEQTUEQTU@!!UUP]TUC0YJ45TUEQTUEQTUEQTUEQTU@!!UUP]TUC0*J!!\/UEQT
+UEQTUEQTUEQTU@!!UUP]TUC0*J"(&GDUTUEQTUEQTUEQTU@!!UUP]TUCD*J"(*J!! ]R%QTUEQTUEQTU@!!UUP]TUCD*J"(*J"(*B4ATUEQTST1TU@!!UUP]TUCD*
+J"(*J" ^PUQTUED.ECYTU@!!UUP]TUCD*J"(*H3%QUEQTO!!TOISQTU@!!UUP]TUCD*J!!(,SEQTUD [CBT%ISQTU@!!UUP]TUC0&G4]TUEQNH"PQDRT%ISQTU@!!U
+UP]TUD@=UEQTUDPRDRT%DRT%ISMTU@!!UUP]TUEQTUEQTUEP4D!!D%IRT%ISQTU@!!UUP]TUEQTUEQTUEQTS24VIRT%ISQTU@!!UUP]TUEQTUEQTUEQTUEQFH@4%
+ISQTU@!!UUP]TUEQTUEQTUEQTUEQTUDH!!C3QTU@!!UUP]TUEQTUEQTUEQTUEQTUEQQL3=TU@!!UUP]QUEQQTUEQUEEQTUEQUEEQTUQTTP!!UUUTEAPTEAPTEAPTE
+APTEAPTEAPTEAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU') ; colorMapFromArray:#[31 31 31 37 37 37 44 44 44 46 46 46 48 48 48 70 70 70 77 77 77 93 93 93 98 98 98 101 101 101 102 102 102 117 141 80 208 168 62 214 174 62 226 181 62 226 182 63 229 184 63 231 186 63 157 134 70 153 132 74 166 140 70 163 140 78 187 154 65 134 161 93 145 183 87 144 178 92 149 187 91 158 142 101 131 148 103 133 147 110 134 154 104 140 157 115 161 144 98 166 148 96 160 149 120 143 173 98 192 159 68 234 188 64 153 194 90 155 197 90 160 204 93 164 210 95 165 211 95 151 164 132 153 167 130 172 161 129 175 166 144 162 170 151 168 175 158 168 175 159 177 170 151 180 172 150 177 171 152 178 171 153 177 171 154 178 172 154 178 172 155 172 181 159 169 175 160 170 175 160 170 175 161 171 177 161 181 176 161 189 186 175 190 193 187 191 194 186 197 194 183 192 196 186 200 198 192 201 204 196 210 208 200 214 216 210 221 219 216 219 220 216 221 223 220 226 225 222 229 230 227 240 241 240 242 242 241 244 244 243 250 250 250 251 251 251 252 252 252 254 254 254 255 255 255 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O??<_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>O??<@@@@') ; yourself); yourself]
+!
+
+mergeMergeExternal32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeMergeExternal32x32.xpm"
+
+    "
+     self mergeMergeExternal32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeMergeExternal32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeMergeExternal32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2@PHB@ HB@ HB@ HB@ HB@ HB@ HB@ HB
+@ HB@GI2\''HEC0<OC0<OC0<OC0<OC0<OC0<OC0<OC0<OC0<E\''I2\ TOC0<OC0<OC0<OC0<OC0<OC0<OC0<OC0<OC0U2\''I2@ \GA0\GA0\GA0\GA0\GA0\G
+A0\GA0\GA0\G@''I2\''HHVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU$O\''I2\!!I1\WEUY7E1\WE1\WE1\WE1\WE1\WE1\WE1\UA2\''I2TF51\RX]TV-1\WE1
+\WE1\WE1\WE1\WE1\WE1TGI2\''HR\WE1I4=LGE]1\WE1\WE1\WE1\WE1\WE1\WEP\''I2\!!I1\WD%S4=OP2A!!\WE1\WE1\WE1\WE1\WE1\UA2\''I2D''E1\RUO
+S4=OS18+Y7E1\WE1\WE1\WE1\WE1TGI2\''HR\WE1H$=OS4=OS44[TV51\WE1\WE1\WE1\WEP\''I2\!!I1\WD!!S4=OS4=OS4=DCE51\WE1\WE1\WE1\UA2\''I2
+D''E1\REOS4=OS4=OS4=@DV51\WE1\V@Q\WE1TGI2\''HR\WE1HT=OS4=OS4=AG6I1\WE1\VPWKS=1\WEP\''I2\!!I1\WD!!S4=OS4=KB511\WE1\V%GKD%IO7E1
+\UA2\''I2D''E1\RUOS4=OFR))\WE1\WEXESEIR$$?\WE1TGI2\''HR\WE1HT=OF!!A%\WE1\WE^E#AJR$)JR#-1\WEP\''I2\!!I1\WD%PP)_\WE1\WE&FB9IRT)J
+R$)JO7E1\UA2\''I2D''E1\P%T[''E1\WE-T1P2RT)JR$)JR$$7\WE1TGI2\''HR\WE1\WE1\WE1\WEXO3MIRT%JR$)JRS]1\WEP\''I2\!!I1\WE1\WE1\WE1\WE+
+RCYIRT)JR$)IN7E1\UA2\''I2D''E1\WE1\WE1\WE1\WE1X4T/R$)JR#P;\WE1TGI2\''HR\WE1\WE1\WE1\WE1\WE1\U,ULT%IR#=1\WEP\''I2\!!I1\WE1\WE1
+\WE1\WE1\WE1\V5VD3H4O7E1\UA2\''I2D''E1\WE1\WE1\WE1\WE1\WE1\WE''Q20=\WE1TGI2\''HR\WE1\WE1\WE1\WE1\WE1\WE1\WE1XA!!1\WEP\''I2\!!I1
+\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\UA2\''I2AP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MA''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2
+\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\''I2\ @a') ; colorMapFromArray:#[24 24 24 26 26 26 41 41 41 42 42 42 53 53 53 55 55 55 60 60 60 75 75 75 90 90 90 100 107 89 105 116 87 105 120 81 109 126 85 97 97 97 101 101 101 102 102 102 115 124 101 126 121 106 127 127 127 139 118 64 142 122 66 141 123 77 139 124 84 128 118 90 134 123 97 113 138 75 123 153 77 116 139 81 120 139 91 124 149 86 125 154 80 118 129 101 119 130 100 122 139 97 123 139 97 123 139 98 123 140 99 124 140 99 123 139 100 124 141 100 125 141 100 121 128 110 126 133 115 127 137 112 156 130 59 175 144 57 178 147 62 194 158 62 208 168 61 219 176 61 227 182 62 228 183 62 232 187 63 159 133 64 159 133 65 147 129 82 147 129 83 147 130 84 147 131 85 148 131 84 148 131 85 148 131 86 151 132 84 148 132 86 130 160 84 139 175 84 139 176 82 142 178 87 149 191 87 143 131 100 141 133 113 145 136 114 151 144 124 233 187 64 234 188 64 151 194 88 158 202 92 162 208 94 164 209 94 165 211 95 138 138 138 139 145 128 139 145 130 158 153 138 154 159 146 156 159 151 162 157 141 162 165 156 175 171 162 175 175 175 176 171 162 177 172 163 175 178 170 179 182 174 198 196 191 199 200 196 207 206 201 211 212 210 216 217 215 221 220 218 223 222 221 226 227 226 232 231 230 238 238 238 239 239 238 242 242 242 246 246 246 247 247 247 249 249 249 250 250 250 252 252 252 253 253 253 254 254 254 255 255 255 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@????<O????C????0????<O????C????0????<O????C????0????<O????C????0????<O????C????0????<O????C????0????<O????C??
+??0????<O????C????0????<O????C????0????<@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeNext24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeNext24x24.xpm"
+
+    "
+     self mergeNext24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeNext24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeNext24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQA \GA0\GA0\GA0\FDQDQDQDQDQDQDQDQBQ@PDA@P
+DA@PDA@IDQDQDQDQDQDQDQDQDP8PDA@PDA@PD@8QDQDQDQDQDQDQDQDQDPTPDA@PDA@PD@TQDQDQDQDQDQDQDQDQDQDKDA@PDA@PB1DQDQDQDQDQDQDQDQDQ
+DQDBDA@PDA@P@!!DQDQDQDQDQDQDQDQDQDQDQB!!@PDA@JDQDQDQDQDQDQDQDQDQDQDQDQ@P<PD@<ADQDQDQDQDQDQDQDQDQDQDQDQDP PD@ QDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDLCADQDQDQDQDQDQDQDQDQDQDQDQDQDQDC@1DQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ
+DQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQ') ; colorMapFromArray:#[0 41 72 0 43 72 0 52 88 0 60 101 0 63 108 0 63 109 0 67 115 0 71 120 0 75 129 0 76 129 0 98 167 0 112 190 0 121 207 0 124 214 0 125 214 0 132 226 0 136 232 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@??@@??@@_>@@_>@@O<@@O<@@G8@@G8@@C0@@A @@A @@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+mergeNext32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeNext32x32.xpm"
+
+    "
+     self mergeNext32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeNext32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeNext32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^
+G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^
+G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8@@0LC@0LC
+@0LC@0LC@0LC@0@^G!!8^G!!8^G!!8^G!!8^G!!8RGQ4]GQ4]GQ4]GQ4]GQ4RG!!8^G!!8^G!!8^G!!8^G!!8^G T\GQ4]GQ4]GQ4]GQ4]G@T^G!!8^G!!8^G!!8^G!!8^G!!8^
+G!!@]GQ4]GQ4]GQ4]GQ4OG!!8^G!!8^G!!8^G!!8^G!!8^G!!8^@Q(]GQ4]GQ4]GQ4]F H^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^B14]GQ4]GQ4]GQ4LG!!8^G!!8^G!!8^G!!8^
+G!!8^G!!8^G!!8^E14]GQ4]GQ4]E18^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8HGQ4]GQ4]GQ4HG!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8TGQ4]GQ4]D!!8^G!!8^G!!8^
+G!!8^G!!8^G!!8^G!!8^G!!8^G T\GQ4]GQ0EG!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G <\GQ4]C18^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^@Q(]GQ AG!!8^
+G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^B!!4]B!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^E!!X^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8G
+A18^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^
+G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^
+G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^
+G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G!!8^G @a') ; colorMapFromArray:#[0 20 32 0 27 47 0 27 48 0 30 52 0 33 56 0 33 57 0 34 57 0 38 65 0 41 69 0 51 87 0 52 87 0 54 91 0 53 92 0 68 115 0 68 116 0 70 119 0 71 121 0 89 152 0 90 153 0 94 160 0 94 161 0 102 174 0 103 174 0 111 189 0 119 205 0 121 208 0 123 210 0 132 225 0 132 226 0 136 232 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A??>@@O??@@C??0@@_?8@@G?>@@@??@@@G? @@A?8@@@O<@@@C?@@@@_ @@@G8@@@@<@@@@F@@@@A
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeNextConflict24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeNextConflict24x24.xpm"
+
+    "
+     self mergeNextConflict24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeNextConflict24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeNextConflict24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,DADQDQDQDQDQDQ@P
+KB0,KB0,KB0,KB0,I",+J2,+J2,+J2,UKB0,KB0,KB0,KB0,@B(+J2,+J2,+J2$,KB0,KB0,KB0,KB0,KAP+J2,+J2,+J1H,KB0,KB0,KB0,KB0,KB0(J2,+
+J2,+I20,KB0,KB0,KB0,KB0,KB0PJ2,+J2,+C"0,KB0,KB0,KB0,KB0,B!!\KCQLSD1LLBQ\VKB0,KB0,KB0,KB0,FBT%IRT%IRT%IRTYKB0,KB0,KB0,KB0,
+KBD%IRT%IRT%IRH,KB0,KB0,KB0,KB0,K@X%IRT%IRT%IP(,KB0,KB0,KB0,KB0,KB0^IRT%IRT%G"0,KB0,KB0,KB0,KB0,KB0CIRT%IRT%AB0,KB0,KB0,
+KB0,KB0,KB0,F2T%IRT\KB0,KB0,KB0,KB0,KB0,KB0,@RL%IRPBKB0,KB0,KB0,KB0,KB0,KB0,KA$%IQ(,KB0,KB0,KB0,KB0,KB0,KB0,KB0!!HR0,KB0,
+KB0,KB0,KB0,KB0,KB0,KB0EA"0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,
+KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,KB0,') ; colorMapFromArray:#[0 37 62 87 14 0 92 14 0 104 16 0 108 17 0 118 18 0 120 18 0 123 19 0 125 19 0 121 20 3 125 20 0 120 20 4 94 42 48 93 44 50 0 51 87 0 52 89 0 54 91 0 56 96 0 62 107 91 56 72 0 65 111 0 74 127 128 20 0 132 20 0 143 22 0 146 23 0 149 24 0 184 29 0 189 29 0 208 33 0 210 33 0 228 36 0 230 36 0 231 36 0 236 37 0 247 39 0 250 39 0 255 40 0 0 79 136 0 111 189 0 114 195 0 123 210 0 125 215 0 136 232 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@??@@??@@?>@@_>@@O<@@O<@@??@@??@@_>@@_>@@O<@@O<@@G8@@G8@@C0@@A @@A @@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+mergeNextConflict32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeNextConflict32x32.xpm"
+
+    "
+     self mergeNextConflict32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeNextConflict32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeNextConflict32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEA
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPQ4]GQ4]GQ4]GQ4]GQ4]GQ5APTEAPTEAPTEAPTEAPTEANTA@PDA@PDA@PDA@
+PDA@NDEAPTEAPTEAPTEAPTEAPTDQO4A@PDA@PDA@PDA@PC8OPTEAPTEAPTEAPTEAPTEAPTD7PDA@PDA@PDA@PDA@H4EAPTEAPTEAPTEAPTEAPTEAPP<=PDA@
+PDA@PDA@PC0NPTEAPTEAPTEAPTEAPTEAPTEAPRI@PDA@PDA@PDA@HTEAPTEAPTEAPTEAPTEAPTEAPTEACS-@PDA@PDA@PC-APTEAPTEAPTEAPTEAPTEAPTEA
+PTEAG4A@PDA@PDA@G$EAPTEAPTEAPTEAPTEAPTEAPTDHB@ GD2@ HB@ HAHGB@ H@DEAPTEAPTEAPTEAPTEAPR\6M#X6M#X6M#X6M#X6M"%APTEAPTEAPTEA
+PTEAPTEACCP6M#X6M#X6M#X6M#X5CDEAPTEAPTEAPTEAPTEAPTEAICX6M#X6M#X6M#X6M"YAPTEAPTEAPTEAPTEAPTEAPTDDLCX6M#X6M#X6M#X2ADEAPTEA
+PTEAPTEAPTEAPTEAPTDZM#X6M#X6M#X6M!!-APTEAPTEAPTEAPTEAPTEAPTEAPTD-M#X6M#X6M#X.@TEAPTEAPTEAPTEAPTEAPTEAPTEAPQX6M#X6M#X6M!!]A
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPR 6M#X6M#X*PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEABCP6M#X6M@1APTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAGCX6
+M#X$PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTDAK3X6L@QAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTDXM#XYPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEA
+PTEAPTD+KDEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPQPUPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEA
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEA
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPP@a') ; colorMapFromArray:#[35 6 0 45 6 0 47 7 0 50 8 0 52 8 0 53 8 0 50 10 5 50 11 6 58 9 0 58 10 0 61 9 0 62 9 0 62 10 0 0 26 47 0 29 50 0 32 53 0 33 55 0 35 60 41 36 50 40 37 53 65 11 0 69 10 0 73 11 0 78 12 0 88 13 0 94 14 0 98 15 0 104 16 0 124 19 0 0 37 64 0 45 77 0 48 82 40 49 72 0 58 99 0 61 104 0 73 124 128 20 0 130 20 0 135 21 0 164 26 0 171 28 0 174 28 0 180 28 0 189 29 0 198 31 0 202 32 0 209 33 0 224 35 0 229 36 0 230 36 0 235 37 0 245 38 0 247 39 0 248 39 0 255 40 0 0 78 133 0 92 156 0 96 165 0 112 191 0 116 198 0 125 214 0 128 218 0 132 226 0 134 228 0 136 232 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@C??0@@??<@@O??@@A?? @@_?8@@C?<@@@?>@@@G? @@O?? @C??0@@??<@@G?>@@A?? @@O?0@@A?<@@@_>@@@C?@@@@?0@@@G
+8@@@A>@@@@O@@@@A @@@@X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeNextConflictAutoAdvance24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeNextConflictAutoAdvance24x24.xpm"
+
+    "
+     self mergeNextConflictAutoAdvance24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeNextConflictAutoAdvance24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeNextConflictAutoAdvance24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@LS(:N#(:N#(:N#(1PDA@PDA@PDA@PDA@D3<?O3<?O3<?O38QPDA@PDA@PDA@PDA@PCD?O3<?O3<?O2=@
+PDA@PDA@PDA@PDA@P@8;O3<?O3<?N09@PDA@PDA@PDA@PDA@PD@WN#(:N#(:E$A@PDA@PDA@PDA@PDA@KCP4MSX6M#X5MCP*PDA@PDA@PDA@PDA@ES<?O#<?
+O3<?O#<TPDA@PDA@PDA@PDA@PC\?O3<?O3<?O3Q@PDA@PDA@PDA@PDA@PAD>O3<?O3<?N1A@PDA@PDA@PDA@PDA@PD@-O#<?O38?KDA@PDA@PDA@PDA@PDA@
+PD@ANS(:N#(9@DA@PDA@PDA@PDA@PDA@F"H"HR@ HB@!!H"H[PDA@PDA@PDA@PDA@BR$)JR$)JR$)JR$KPDA@PDA@PDA@PDA@PA8)JR$)JR$)JQ=@PDA@PDA@
+PDA@PDA@P@\(JR$)JR$)J@]@PDA@PDA@PDA@PDA@PD@XJR$)JR$)FTA@PDA@PDA@PDA@PDA@PD@BIR$)JR$%ADA@PDA@PDA@PDA@PDA@PDA@CB$)JR$MPDA@
+PDA@PDA@PDA@PDA@PDA@PBL)JRQ@PDA@PDA@PDA@PDA@PDA@PDA@P@$)JP)@PDA@PDA@PDA@PDA@PDA@PDA@PD@\GTA@PDA@PDA@PDA@PDA@PDA@PDA@PD@C
+ATA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@') ; colorMapFromArray:#[0 31 55 0 33 57 69 11 0 71 12 0 73 11 0 78 12 0 82 12 0 82 13 0 95 14 0 95 15 0 96 15 0 105 16 0 119 19 0 126 20 0 0 44 74 0 44 75 0 45 78 0 47 81 0 47 82 0 49 85 0 56 95 0 61 103 0 65 110 0 66 112 147 24 0 153 24 0 158 25 0 163 26 0 169 27 0 174 27 0 178 27 0 182 28 0 190 37 12 192 33 5 201 32 0 207 33 0 213 33 0 240 38 0 243 38 0 250 39 0 251 39 0 255 40 0 0 78 133 0 81 138 0 81 139 0 85 144 0 90 155 0 92 155 0 91 156 0 91 157 0 97 165 0 97 166 0 98 167 0 99 169 0 100 170 0 101 172 0 111 189 0 113 192 0 118 201 0 132 226 0 133 227 0 134 229 0 135 231 0 136 232 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@??@@??@@_>@@_>@@O<@@??@@??@@_>@@_>@@O<@@O<@@??@@??@@_>@@_>@@O<@@O<@@G8@@C0@@C0@@A @@A @@@@@') ; yourself); yourself]
+!
+
+mergeNextConflictAutoAdvance32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeNextConflictAutoAdvance32x32.xpm"
+
+    "
+     self mergeNextConflictAutoAdvance32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeNextConflictAutoAdvance32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeNextConflictAutoAdvance32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+V%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)Z@RT)JR$)JR$)JR$)JR$)JRTAV%)ZV%)ZV%)ZV%)ZV%)ZI5!!YVU%YVU%YVU%YVU%YJE)Z
+V%)ZV%)ZV%)ZV%)ZV%(OUE%YVU%YVU%YVU%YVUHOV%)ZV%)ZV%)ZV%)ZV%)ZV%(#VU%YVU%YVU%YVU%YH5)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)NVU%YVU%YVU%Y
+VT5ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV!!MXVU%YVU%YVU%XD5)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV"5TUEQTUEQTUB1ZV%)ZV%)ZV%)ZV%)ZV%)ZV%(LQT!!HQ$-K
+R4-KR4-KQ$!!HK@1ZV%)ZV%)ZV%)ZV%)ZV%(%VU%YVU%YVU%YVU%YVU$$V%)ZV%)ZV%)ZV%)ZV%)ZV%)PVU%YVU%YVU%YVU%YS5)ZV%)ZV%)ZV%)ZV%)ZV%)Z
+V"EYVU%YVU%YVU%YVU$SV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV$-YVU%YVU%YVU%YRE)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZDUYYVU%YVU%YVUTQV%)ZV%)ZV%)ZV%)Z
+V%)ZV%)ZV%)ZJ5%YVU%YVU%YJ%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%(NSUAPTEAPTD0LV%)ZV%)ZV%)ZV%)ZV%)ZV%)Z@"86M#X5MCP4MCP4MSX6M#@CV%)Z
+V%)ZV%)ZV%)ZV%)ZF$MCP4MCP4MDQDQDP4MCGE)ZV%)ZV%)ZV%)ZV%)ZV%)ZNTMCP4MCP4QDQDQCP3)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%(XP4MCP4MCQDQDQDMC
+FE)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%(2P4MCP4MDQDQDQCMZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV $?P4MCP4QDQDQ@BU)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV!!=CP4MC
+QDQDQBAZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZAC-CP4MDQDP<A%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZFTMCP4MCP11ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)Z
+V%)ZM4MCP4L9V%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%(UP$MCP1!!ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%(0P4L1V%)ZV%)ZV%)ZV%)ZV%)ZV%)Z
+V%)ZV%)ZV%)ZV X=O %ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV!!4^V%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV QZV%)ZV%)ZV%)ZV%)Z
+V%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV @a') ; colorMapFromArray:#[0 17 27 0 17 29 41 7 0 42 6 0 51 8 0 51 9 0 53 8 0 54 10 0 57 9 0 59 9 0 59 10 0 0 20 33 0 20 34 0 20 35 0 21 36 0 23 41 0 32 53 0 32 55 0 36 61 0 36 62 0 37 63 67 11 0 68 10 0 70 10 0 71 11 0 86 13 0 89 15 0 93 14 0 94 14 0 106 16 0 111 18 0 114 18 0 123 19 0 0 40 68 0 45 78 0 46 78 0 52 87 0 54 93 0 55 94 0 59 99 0 58 100 0 62 106 0 65 111 0 70 120 0 72 122 0 72 123 134 21 0 139 22 0 140 22 0 148 23 0 151 24 0 158 25 0 159 31 10 160 27 3 166 26 0 182 29 0 189 30 0 191 30 0 193 30 0 226 35 0 230 36 0 235 37 0 239 37 0 241 38 0 244 38 0 250 39 0 252 40 0 254 40 0 255 40 0 0 75 128 0 83 141 0 85 145 0 87 147 0 90 154 0 91 154 0 91 155 0 98 167 0 101 172 0 102 175 0 104 177 0 109 185 0 109 186 0 116 198 0 116 199 0 118 201 0 130 222 0 132 226 0 135 230 0 135 231 0 136 232 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@G??8@@??<@@O??@@A?? @@O?0@@C?<@@@_>@@A??>@@O??@@A?? @@_?8@@C?<@@@??@@@G? @@A?8@@G??8@@??<@@G?>@@A?? @@O?0@@C?<@@@_
+>@@@G? @@@?0@@@G8@@@A>@@@@O@@@@C0@@@@X@@@@B@@@@@@@@b') ; yourself); yourself]
+!
+
+mergePrev24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergePrev24x24.xpm"
+
+    "
+     self mergePrev24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergePrev24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergePrev24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+EQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTU
+EQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTH
+BATUEQTUEQTUEQTUEQTUEQTUEQTUEQTPDATUEQTUEQTUEQTUEQTUEQTUEQTUEP4TE@4UEQTUEQTUEQTUEQTUEQTUEQTU@!!LTEALCEQTUEQTUEQTUEQTUEQTU
+EQTUC!!PTEAPNEQTUEQTUEQTUEQTUEQTUEQTFEAPTEAPTAQTUEQTUEQTUEQTUEQTUEQTOEAPTEAPTC1TUEQTUEQTUEQTUEQTUEP(TEAPTEAPTE@(UEQTUEQTU
+EQTUEQTU@QHTEAPTEAPTEADAEQTUEQTUEQTUEQTUB1PTEAPTEAPTEAPKEQTUEQTUEQTUEQTUAP\GA0\GA0\GA0\EEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTU
+EQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTU
+EQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTU') ; colorMapFromArray:#[0 38 64 0 38 65 0 46 78 0 46 80 0 54 91 0 55 91 0 54 92 0 56 96 0 61 104 0 65 110 0 66 111 0 78 134 0 79 134 0 80 136 0 98 167 0 117 201 0 126 216 0 128 218 0 129 220 0 134 229 0 136 232 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A @@A @@C0@@G8@@G8@@O<@@O<@@_>@@??@@??@@??@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+mergePrev32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergePrev32x32.xpm"
+
+    "
+     self mergePrev32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergePrev32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergePrev32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!B (!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRDYFRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!C"@ CRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HPP\HB@[@2D!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!D"@ HB@RHRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HP ^HB@ HA8FHRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!E"@ HB@ HAT!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HP, HB@ HB@ H@,!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HRD@F"@ HB@ HB@ F @!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HP< HB@ HB@ HB@ C2D!!HRD!!HRD!!HRD!!HRD!!HRD!!HRDCGR@ HB@ HB@ HB@\
+@2D!!HRD!!HRD!!HRD!!HRD!!HRD!!HQP HB@ HB@ HB@ HB@THRD!!HRD!!HRD!!HRD!!HRD!!HRDHG"@ HB@ HB@ HB@ HA8HHRD!!HRD!!HRD!!HRD!!HRD!!HQ  HB@ HB@ 
+HB@ HB@ HA\!!HRD!!HRD!!HRD!!HRD!!HRD!!BP$IBP$IBP$HBP$IBP$IBRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!
+HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HP@a') ; colorMapFromArray:#[0 26 45 0 30 52 0 30 53 0 30 54 0 32 54 0 34 58 0 35 58 0 34 59 0 35 60 0 37 64 0 39 69 0 43 72 0 43 73 0 53 90 0 54 92 0 57 96 0 57 97 0 73 124 0 73 125 0 75 129 0 76 130 0 94 160 0 94 161 0 95 162 0 99 168 0 109 187 0 117 200 0 125 213 0 126 216 0 127 217 0 134 228 0 134 229 0 136 232 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F@@@@A @@@@<@@@@_ @@@G8@@@C?@@@@?0@@@_>@@@O?0@@C?<@@A?? @@_?8@@O??@@C?
+?0@@??<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergePrevConflict24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergePrevConflict24x24.xpm"
+
+    "
+     self mergePrevConflict24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergePrevConflict24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergePrevConflict24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0
+LC@0LC@0LC@0LC@0LC@0LC@MB#@0LC@0LC@0LC@0LC@0LC@0LC@0LC@$H3@0LC@0LC@0LC@0LC@0LC@0LC@0LA8(JA00LC@0LC@0LC@0LC@0LC@0LC@0@2 (
+JBXBLC@0LC@0LC@0LC@0LC@0LC@0HB (JB _LC@0LC@0LC@0LC@0LC@0LC@GJB (JB (AC@0LC@0LC@0LC@0LC@0LC@"JB (JB (HS@0LC@0LC@0LC@0LC@0
+LA((JB (JB (J@40LC@0LC@0LC@0LC@0@BT(JB (JB (JBPALC@0LC@0LC@0LC@0GB (JB (JB (JB [LC@0LC@0LC@0LC@0B 4EC!!\WE1\OAP0JLC@0LC@0
+LC@0LC@0LC@SK2</K2</ES@0LC@0LC@0LC@0LC@0LC@,K2</K2</KC@0LC@0LC@0LC@0LC@0LA /K2</K2</K1$0LC@0LC@0LC@0LC@0DB4/K2</K2</K28Q
+LC@0LC@0LC@0LC@0JR</K2</K2</K2<*LC@0LC@0LC@0LC@0D1PVE!!XVE!!XVE!!XSLC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0
+LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0') ; colorMapFromArray:#[74 11 0 75 12 0 96 15 0 100 15 0 108 17 0 109 21 4 110 20 4 112 18 0 117 18 0 118 18 0 119 18 0 124 19 0 123 20 0 126 20 0 82 44 55 81 46 57 0 38 66 0 41 70 0 52 89 0 53 91 0 54 91 0 55 96 0 56 96 79 61 83 0 65 111 0 66 112 128 20 0 147 23 0 152 24 0 153 24 0 157 24 0 184 29 0 190 30 0 219 35 0 222 35 0 234 37 0 238 37 0 242 38 0 251 39 0 253 40 0 255 40 0 0 79 133 0 83 141 0 117 199 0 118 202 0 127 217 0 129 220 0 136 232 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@A @@A @@C0@@G8@@G8@@O<@@O<@@_>@@??@@??@@??@@O<@@O<@@_>@@??@@??@@??@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+mergePrevConflict32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergePrevConflict32x32.xpm"
+
+    "
+     self mergePrevConflict32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergePrevConflict32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergePrevConflict32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEA
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPQ\VPTEA
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAKB-APTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPQ,5MQ)APTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTDH
+LCT5K0MAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPRT5MST5H4EAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTDUMST5MST2BTEAPTEAPTEAPTEAPTEAPTEAPTEA
+PTEAPR$5MST5MST''PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTDYMST5MST5MSTXPTEAPTEAPTEAPTEAPTEAPTEAPTEA@R85MST5MST5MR4BPTEAPTEAPTEAPTEA
+PTEAPTEAPTD]MST5MST5MST5MQ1APTEAPTEAPTEAPTEAPTEAPTEABCD5MST5MST5MST5L@!!APTEAPTEAPTEAPTEAPTEAPTD&MST5MST5MST5MST5IDEAPTEA
+PTEAPTEAPTEAPTEAESH5MST5MST5MST5MST2BTEAPTEAPTEAPTEAPTEAPTD*MST5MST5MST5MST5MST(PTEAPTEAPTEAPTEAPTEA@@ HB@TQHB@ HB@ D TH
+B@!!APTEAPTEAPTEAPTEAPTEAPTEAG$A@PDA@PDA@G4EAPTEAPTEAPTEAPTEAPTEAPTEAPP(:PDA@PDA@PD@;CDEAPTEAPTEAPTEAPTEAPTEAPTEAHTA@PDA@
+PDA@PD@"PTEAPTEAPTEAPTEAPTEAPTEAPP0<PDA@PDA@PDA@PC4NPTEAPTEAPTEAPTEAPTEAPTEAM$A@PDA@PDA@PDA@PC]APTEAPTEAPTEAPTEAPTEAPQ@?
+PDA@PDA@PDA@PDA@O1AAPTEAPTEAPTEAPTEAPTEANDA@PDA@PDA@PDA@PDA@NTEAPTEAPTEAPTEAPTEAPTDKB0,KB0,KB0,KB0,KB00LPTEAPTEAPTEAPTEA
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEA
+PTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPP@a') ; colorMapFromArray:#[36 6 0 52 7 0 50 8 0 54 8 0 50 10 5 50 11 6 56 9 0 58 9 0 59 9 0 62 9 0 0 30 50 0 31 54 0 32 53 0 32 55 0 34 57 0 36 61 0 36 62 41 36 50 40 36 53 64 11 0 66 10 0 67 11 0 69 10 0 74 11 0 76 12 0 83 13 0 92 14 0 100 15 0 102 16 0 112 18 0 0 46 81 0 49 85 40 49 72 0 60 102 0 65 110 131 20 0 135 21 0 140 22 0 145 23 0 170 27 0 174 27 0 182 28 0 187 29 0 202 31 0 211 33 0 214 33 0 221 35 0 232 36 0 238 37 0 242 38 0 249 39 0 250 39 0 252 40 0 255 40 0 0 78 133 0 82 141 0 100 171 0 104 178 0 118 201 0 120 207 0 129 220 0 131 224 0 135 230 0 135 231 0 136 232 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@@@@F@@@@C0@@@A>@@@@_ @@@O<@@@C?@@@A?8@@@??@@@O?0@@G?>@@A?? @@??<@@O??@@G??0@@G? @@C?<@@@?
+?@@@_?8@@G?>@@C??0@@??<@@O??@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeUsingA24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingA24x24.xpm"
+
+    "
+     self mergeUsingA24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingA24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingA24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+APTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAPTEAPTEAPTE
+APTEAPTEAPPDA@PDAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAP@@@@TEAPTEAPTEAPTEAPPDA@PDAPTEAP@@
+@@TEAPTEAPTEAPTEAPPDA@PDAPTEAP@@@@@EAPTEAPTEAPTEAPPDA@PDAPTE@@@E@@@EAPTEAPTEAPTEAPPDA@PDAPTE@@@EAP@EAPTEAPTEAPTEAPPDA@PD
+APTE@@TEAP@@APTEAPTEAPTEAPPDA@PDAPT@@@TEAP@@APTEAPTEAPTEAPPDA@PDAPT@@@TEAPT@@@TEAPTEAPTEAPPDA@PDAP@@@@@@@@@@@@TEAPTEAPTE
+APPDA@PDAP@@APTEAPT@@@TEAPTEAPTEAPPDA@PD@ @@APTEAPTE@@@EAPTEAPTEAPPDA@PD@P@EAPTEAPTE@@@EAPTEAPTEAPPDA@PDAPTEAPTEAPTEAPTE
+APTEAPTEAPPDA@PDAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAPTEAPTEAPTEAPTEAPTEAPPDA@PDAPTEAPTE
+APTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTE') ; colorMapFromArray:#[0 0 0 18 23 10 70 90 40 165 211 94 165 211 95 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_@@@_@@@_@@@_@@@_@@@_C @_C @_C0@_F0@_FP@_DX@_LX@_LL@__<@_XL@_8F@_0F@_@@@_@@@_@@@_@@@_@@@@@@@') ; yourself); yourself]
+!
+
+mergeUsingA32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingA32x32.xpm"
+
+    "
+     self mergeUsingA32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingA32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingA32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@LC@0LC@0PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PC@ HB@ HBA@PDA@PDA@PDA@PDA@PDA@PD
+A@PDA@PDA@LB@ HB@ HDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@0HB@ HB@ PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PC@ HB@ HBA@PDA@PDA@PDA@PD
+A@PDA@PDA@PDA@PDA@LB@ HB@ HDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@0HB@ HB@ PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PC@ HB@ HBA@PDA@PD
+A@@@@@PDA@PDA@PDA@PDA@PDA@LB@ HB@ HDA@PDA@PD@@@@A@PDA@PDA@PDA@PDA@PD@0HB@ HB@ PDA@PDA@@@@@@@A@PDA@PDA@PDA@PDA@PC@ HB@ HB
+A@PDA@PD@@@D@@@DA@PDA@PDA@PDA@PDA@LB@ HB@ HDA@PDA@@@@@P@@@PDA@PDA@PDA@PDA@PD@0HB@ HB@ PDA@PD@@@DA@P@@@PDA@PDA@PDA@PDA@PC
+@ HB@ HBA@PDA@P@@@PDA@@@A@PDA@PDA@PDA@PDA@LB@ HB@ HDA@PD@@@@A@PD@@@@A@PDA@PDA@PDA@PD@0HB@ HB@ PDA@P@@@PDA@PD@@@DA@PDA@PD
+A@PDA@PC@ HB@ HBA@PD@@@@A@PDA@P@@@PDA@PDA@PDA@PDA@LB@ HB@ HDA@P@@@@@@@@@@@@@@@PDA@PDA@PDA@PD@0HB@ HB@ PDA@@@@@@@@@@@@@@@
+A@PDA@PDA@PDA@PC@ HB@ HBA@P@@@@DA@PDA@PD@@@@A@PDA@PDA@PDA@LB@ HB@ HDA@@@A@PDA@PDA@PD@@@DA@PDA@PDA@PD@0HB@ HB@ PD@@@DA@PD
+A@PDA@P@@@PDA@PDA@PDA@PC@ HB@ HB@P@@@@PDA@PDA@PDA@@@@@PDA@PDA@PDA@LB@ HB@ HDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@0HB@ HB@ PD
+A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PC@ HB@ HBA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@LB@ HB@ HDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PD@0HB
+@ HB@ PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PC@ HB@ HBA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PC@0LC@0LDA@PDA@PDA@PDA@PDA@PDA@PDA@PD
+A@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@PDA@@a') ; colorMapFromArray:#[0 0 0 96 122 55 165 211 95 165 211 96 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@C<@@@A?@@@@_0@@@G<@@@A?@@@@_0@@@G<@@@A?@\@@_0G@@G<C8@A?@6@@_0] @G<FL@A?A#@@_088@G<LF@A?GA @_1?<@G<_?@A?N@8@_3@F@G<0
+A A?<@\@_0@@@G<@@@A?@@@@_0@@@G<@@@A?@@@@O0@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeUsingAAll24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingAAll24x24.xpm"
+
+    "
+     self mergeUsingAAll24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingAAll24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingAAll24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*1L8MC,;N34=OS5@PDAHPD!!HRD!!IRQZ+*2>O#9NS%Y"X(I"!!(ZF!!)*V&)*&**T*+*3RN#8>S$9VX&I"!!&JF!!(ZV%
+)*Z&*T&+*3RI#8>O$9NU%Y"X(ZB!!(ZF&)*Z&*T"+*2:I"X&O#9VU&9"U&9. (JF!!(ZZ&)$^+*2:G"X>O#8>U%SPAEF*[&:B!!(ZF&)$&+*3RF!!8&I"X>O#00F
+@U"[(JB!!(ZF&(T&+*2:F!!H&I#8&OVPD8@RBX&JB (JB!!(TB+*2:F!!(ZG!!8>NF !!\D05%&IV (JB!!(TB+*2>F_XZF"X%.AQ1$R0ET&I2X&:B!!(TB+*2U=_G2F
+!!H%N@T>O^@T[^Y"X%ZB!!(DB+*295_G6D!!HPOB%6I#1 HVYVX&I" &36+*29<_G5=!!FDAGFE+Z44APIRU%Y"U&36+*2Y7]71=_Q<A@PDA@PDADV^U%YV[&36+
+*2Y5]7]=]P$NSD=PT5LY@UZU%YVU%S6+*2Y5]WU7UPD/[XZD!!H%]@Q:G$9NU%S.+*2U1]WE7E0UW_W6D!!HRIC0- #8>S%S.+*2E1\WU7X%-(_W2F!!(RDZVA&
+"X>O$3.+*2Y1\WE1]W]<_G5=!!''6D!!H&O#8:O#3.+*2U/[7E1]WU7_G1<_G2F!!HZI#8&O#3&+*2E,[611\WE5]7U<_XY<_XZF!!8&O#3.+*1@!!IRH&H2X&I"X.
+K"8/K"8.MB8/MAF+*:.+*:.+*:.+*:.+*:.+*:.+*:.+*:.+') ; colorMapFromArray:#[0 0 0 1 1 0 1 2 1 4 5 2 5 6 3 6 6 3 7 8 4 7 9 4 9 11 5 13 16 7 15 18 8 18 21 10 20 23 11 24 28 13 29 35 16 31 37 17 31 41 18 37 43 20 36 44 20 37 44 20 38 45 21 39 45 21 43 47 22 44 54 24 46 55 26 48 57 27 54 65 30 59 69 32 64 76 35 64 77 35 69 81 37 69 84 40 77 89 42 74 95 43 76 96 43 76 96 44 77 96 44 77 97 44 78 97 45 80 99 44 80 98 45 81 98 45 81 99 45 80 99 46 80 100 46 81 100 46 82 100 46 83 102 47 84 100 46 84 100 47 84 102 46 86 102 47 87 102 47 86 101 48 85 102 48 87 102 48 86 103 48 88 102 48 88 103 48 89 103 48 89 104 48 90 105 49 91 105 49 90 106 49 92 105 49 92 106 49 93 106 49 93 106 50 94 106 50 94 107 51 95 107 51 95 108 51 96 108 51 97 109 52 98 109 52 98 115 54 99 119 55 102 119 56 102 122 56 107 128 59 108 129 59 109 130 59 109 131 59 110 131 60 112 131 61 118 145 66 125 147 69 129 158 72 134 156 73 139 165 78 143 168 78 139 172 78 145 171 80 145 172 80 146 174 81 147 175 81 148 175 82 151 181 83 149 183 83 152 182 84 158 186 87 157 184 88 159 190 88 164 194 90 160 196 89 167 200 92 173 201 95 173 206 96 167 213 96 173 209 97 175 208 97 168 212 96 169 213 96 171 214 97 172 214 97 173 215 98 174 215 98 175 215 98 175 216 98 175 216 99 178 210 98 180 210 98 176 216 99 176 217 99 177 217 99 178 217 100 178 218 100 179 218 100 180 218 100 180 219 101 181 219 101 182 219 101 182 220 101 183 220 101 183 220 102 185 219 102 185 220 102 185 221 102 185 221 103 186 221 103 186 222 103 187 222 103 188 222 103 188 223 104 189 223 104 190 223 104 190 224 104 191 224 104 191 224 105 192 225 105 193 225 105 193 225 107 194 225 107 194 226 107 195 226 107 196 226 107 196 227 107 197 227 107 198 227 107 198 228 107 199 228 108 200 229 108 201 229 108 201 229 109 202 230 109 203 230 109 204 231 110 205 231 110 206 232 111 207 232 111 209 233 111 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>@@@@') ; yourself); yourself]
+!
+
+mergeUsingAAll32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingAAll32x32.xpm"
+
+    "
+     self mergeUsingAAll32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingAAll32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingAAll32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
++J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+J0@"H"K#X:N%9^N%9^W%9:"%:J")JR$)J"(
+*J"+*0B,+@BF"H.M#X:N#)^W%)^W'')Z"''JJ")JR$*J"(*J"+@J2,@HVE!!X"H#X6M#)^V%)ZV''):Y''*R$(*R((*"(*J @+J0@^(VE"8"H#X6N#(:V%)ZV%):Y
+''):")I:((*"(*@B,+@BE!!XZF"H"K"8:N#)"V%)^V''):Y():$(:N"*J"(@J2,@G&E!!XZF"H.M#(:N#'')LSHJV&Y:Y''):#(:J"*J @+J0@^XU9"H"H"H"H"H:N
+PP8@CIZW%*JW():#)JJ(*@B,+@A9]8!!9]8"E"H"J"(H/@@@@OIZV%92\''):")I:(@J2,@G]9^XE9"HZF"H"HQBD@FP@\#)^W%92W''):"(*P@+J0@]W]7]8U9
+!!XZF"HX8@@T5A U*%)^V''I:^''):"( B,+@A7]7]7^XU:!!XVESR(@G$X$@B:U%YVU'')Z^''*J"@J2,@F95]7]9^W):!!XUBD0@:!!"<@D)VU%Y2V'')Z^'')8@+J0@
+]V9.]7]9^''*F!!#@@B8ZMO@<@RX:N%)ZW'')Z"%0B,+@A.]WU.]7]:^'')FI @%"HYJI0@%#)VV%)^W%)Z"@J2,@F9.]V97]7]9^S I@D^E#XX1@@%:#)"U%YVX
+&I0@+J0@[F9.]V9.]7%]J0@Q!!XVE!!S(W@CRJ%)JU%YVX&@B,+@A)[&9.[''U5]4@[@@$WE1\WE00@F(6N#)"U%Y"X@J2,@FY&[F9.]V95L0@@@@@@@@@@@@@@
+SX6J#)VU%Y @+J0@Y&Y)ZV9.]T,(@A!!USUUUUUX:H@@)#X6N#)VU%PB,+@A&Y&Y)[&9)M1D@L'']9^XVE]7T,@ABH#X6N#)VU@J2,@FI&X&Y)[&X-@@U]]WU9
+]7&E!!S(G@DNM"86M#)T@+J0@X&I&Y&Y)O2@@GV95]W%7^W^EQRH@HH.H#X6N# B,+@A"X&I"Y&Y[S$9)[''].^W]7^'')7UUU+!!XZH"H:N@J2,@E%"X&Y"Y&Y)
+ZV%.[''].]7]:]7):!!W*E!!X"H#X8@+J0@X&I"X&I"ZVY)ZV%.[''].^W]7^''*E!!XVE!!XVF#PB,+@AYWE9"X&Y$X&Y)[&%.[''].]7]:^'')9!!XVE!!X6H@J2,@E%"
+W%1"X&I&Y&Y)ZV%.[''U.]7]7^XU9!!XVE!!XT@+J0@VU1\W%1]X&I"ZVY)[&9.[&97]W]7^W)9!!XVE!!PB,+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,+J2,+@@a') ; colorMapFromArray:#[0 0 0 1 1 0 1 1 1 3 3 2 3 4 1 5 7 3 7 8 4 9 11 5 10 11 5 11 13 6 11 14 6 12 15 7 14 17 8 16 19 8 17 19 9 17 20 9 20 23 11 22 27 12 26 30 14 30 36 16 30 36 17 31 36 17 30 37 17 31 37 17 34 42 19 38 44 21 39 46 22 46 55 25 48 56 26 49 60 27 50 59 28 51 62 28 52 61 29 56 67 31 58 69 32 62 73 34 65 76 35 67 79 36 70 83 39 73 86 39 75 92 42 84 99 47 85 101 47 90 108 50 93 111 51 94 117 53 98 114 54 101 118 55 105 126 58 109 128 60 110 132 61 115 138 64 119 140 66 125 146 68 127 149 69 127 156 72 130 154 72 132 157 73 135 158 72 133 157 74 135 157 74 134 159 74 136 159 74 131 160 73 133 160 74 138 163 75 136 163 76 140 166 78 146 171 80 146 175 80 148 173 82 148 177 81 149 178 82 154 181 85 159 186 87 154 188 86 168 196 92 168 199 94 164 201 92 164 202 92 169 200 92 169 204 94 170 204 94 171 204 94 171 205 94 171 205 95 172 205 95 172 206 95 172 207 95 166 211 95 167 213 95 170 210 95 167 213 96 172 209 96 168 212 96 168 213 96 169 213 96 170 213 97 171 214 97 172 214 97 172 215 98 173 215 98 174 215 98 175 215 98 175 216 98 175 216 99 179 210 98 181 215 100 176 216 99 176 217 99 177 217 99 178 217 99 178 217 100 178 218 100 179 218 100 181 217 101 180 218 100 180 219 101 181 219 101 182 219 101 182 220 101 183 220 101 183 220 102 185 216 102 187 218 102 188 217 102 185 220 102 185 221 102 185 220 103 185 221 103 187 220 103 186 221 103 186 222 103 187 222 103 188 222 103 189 222 103 188 223 104 189 223 104 190 223 104 190 224 104 191 224 104 191 224 105 192 224 105 192 225 105 193 225 105 193 225 107 194 224 106 194 225 107 194 226 107 195 226 107 196 226 107 196 227 107 197 227 107 198 227 107 198 228 107 198 228 108 199 228 108 200 228 108 200 229 108 201 229 108 201 229 109 202 229 109 202 230 109 203 230 109 204 230 109 204 231 110 205 231 110 206 232 110 207 232 111 208 233 111 209 233 112 210 234 112 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@G????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''??
+??9????>_????''????9????>_????''????9????>_???? @@@@@b') ; yourself); yourself]
+!
+
+mergeUsingB24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingB24x24.xpm"
+
+    "
+     self mergeUsingB24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingB24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingB24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC
+@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0L@@@@@@@@C@0LC@0LC@0LC@0HB@ HB@0L@@@LC
+@@@@@0LC@0LC@0LC@0HB@ HB@0L@@0LC@0L@@@LC@0LC@0LC@0HB@ HB@0L@@0LC@0L@@@LC@0LC@0LC@0HB@ HB@0L@@0LC@0@@@0LC@0LC@0LC@0HB@ HB
+@0L@@@@@@@@@@0LC@0LC@0LC@0HB@ HB@0L@@@LC@0@@@0LC@0LC@0LC@0HB@ HB@0L@@0LC@0L@@@LC@0LC@0LC@0HB@ HB@0L@@0LC@0L@@@LC@0LC@0LC
+@0HB@ HB@0L@@0LC@0L@@@LC@0LC@0LC@0HB@ HB@0L@@@LC@@@@@@LC@0LC@0LC@0HB@ HB@0L@@@@@@@@C@0LC@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC
+@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@0LC@0LC
+@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC') ; colorMapFromArray:#[0 0 0 242 181 13 243 181 13 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_@@@_@@@_@@@_@@@_@@@_O0@_L8@_HL@_HL@_HX@_O8@_LX@_HL@_HL@_HL@_L<@_O0@_@@@_@@@_@@@_@@@_@@@@@@@') ; yourself); yourself]
+!
+
+mergeUsingB32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingB32x32.xpm"
+
+    "
+     self mergeUsingB32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingB32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingB32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ HB@ LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LB@ DA@PHB@0LC@0LC@0LC@0LC@0LC@0LC
+@0LC@0LC@0HB@ DA@PHC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@ DA@PDA@PLC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LB@PDA@PDA@0LC@0LC@0LC@0LC
+@0LC@0LC@0LC@0LC@0HA@PDA@PDC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@ DA@PDA@PLC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LB@ HA@PDA@0LC@@@@
+@@@@@@@@@0LC@0LC@0LC@0LC@0HA@ DA@PDC@0L@@@@@@@@@@@@@@0LC@0LC@0LC@0LC@ DA@PDA@PLC@0@@@0LC@0LC@@@@@0LC@0LC@0LC@0LB@PDA@PDA
+@0LC@@@C@0LC@0L@@@@C@0LC@0LC@0LC@0HA@PDA@PDC@0L@@@LC@0LC@0@@@@LC@0LC@0LC@0LC@ DA@PDA@PLC@0@@@0LC@0LC@@@@@0LC@0LC@0LC@0LB
+@ DA@PDA@0LC@@@C@0LC@0@@@@LC@0LC@0LC@0LC@0HB@ DA@PDC@0L@@@@@@@@@@@@C@0LC@0LC@0LC@0LC@ DA@PDA@PLC@0@@@@@@@@@@@@@C@0LC@0LC
+@0LC@0LB@PDA@PDA@0LC@@@C@0LC@0L@@@@C@0LC@0LC@0LC@0HA@PDA@PDC@0L@@@LC@0LC@0L@@@LC@0LC@0LC@0LC@ DA@PDA@PLC@0@@@0LC@0LC@0@@
+@0LC@0LC@0LC@0LB@ HA@PDA@0LC@@@C@0LC@0LC@@@C@0LC@0LC@0LC@0HA@ DA@PDC@0L@@@LC@0LC@0@@@@LC@0LC@0LC@0LC@ DA@PDB@ LC@0@@@@@@
+@@@@@@@@@0LC@0LC@0LC@0LB@PDA@PDB@0LC@@@@@@@@@@@@@0LC@0LC@0LC@0LC@0HA@PDA@PDC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@ DA@PDA@PLC
+@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LB@ DA@PDA@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0HB@ DA@PDC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@ HB
+@PDA@PLC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LB@PHA@PDA@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LB@ HB@ HC@0LC@0LC@0LC@0LC@0LC@0LC@0LC
+@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0@a') ; colorMapFromArray:#[0 0 0 243 181 13 243 181 14 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@C<@@@A?@@@@_0@@@G<@@@A?@@@@_0@@@G<@@@A?G?@@_1?8@G<XG@A?FA0@_1 \@G<XG@A?FC @_1?0@G<_>@A?FA0@_1 L@G<XC@A?F@0@_1 \@G<_
+?@A?G?@@_0@@@G<@@@A?@@@@_0@@@G<@@@A?@@@@O0@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeUsingBAll24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingBAll24x24.xpm"
+
+    "
+     self mergeUsingBAll24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingBAll24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingBAll24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+6-+Z6-+Z6-+Z6-+Z6-+Z6-+Z6-+Z6-+Z6 89NS$?O3<?RD!!GQ4]MST5MTEAPT ?Z6#N.,[F7-;;A0\SH2,3N4MKU5]_X6EKZ6">.++F7-;^>/,GD2L+L3,?R
+4-_W6EKZ6#N&+*:.,;^:.+;A1L#J3L/O5]WU55CZ6">$)*".++N7.+*>1LSH2,/K4MCU5UCZ6">^)J".+&D@@@@@A!!A.2L3L3\?O5UCZ6">Y(ZF&*E0@MVI#
+O0$A[\#L2<7O347Z6".X(:N#)%0@Z;F7-74@H+?H2</N34/Z6""U&I&#)%0@Z;F1-9,@H[WH2L#K3$/Z6""R$)"#(5\@YI*\ AHA[K2?1L#H24_Z6""R#9JY
+(5\@@@@@@@P9!![*</;?H24_Z6""K#9JU&E\@OF%)XADAW;":/K?D2D_Z6!!:K"8>R%U\@Y:N$+*$JA7:8.+2>1D_Z6!!:F"8*O%UP@Y:N#(*8S@F>7-;:>/#?Z
+6!!:C!!(*O#5P@YI"#(:HH@721-;^7/#?Z6!!:C 8ZK"5L@G59^OP4@HG>.,;N;/$CZ6!!]4 8ZF"5L@@@@@AP0>^Z".++N3-3?Z6!!]4]GVF!!8E0]7Y:^G.](:"&
++*:1-3''Z6!!]3]GU5!!H^K"8>R%I&Y(ZF$*J*1,S''Z6!!Q2\7Q5 8ND"8.K$)JY&Y&#)*Z.+#_Z6!!Q2\''M4]WVC 8.K"9JR&Y&#(:Z(*S''Z6 ,TE1\WFQ8^G!!8%
+IR (J",/J3L3L0;Z6-+Z6-+Z6-+Z6-+Z6-+Z6-+Z6-+Z6-+Z') ; colorMapFromArray:#[0 0 0 5 5 1 6 5 2 9 8 2 13 11 3 16 14 3 18 15 5 26 23 7 33 29 7 32 29 9 38 33 9 49 36 3 51 43 10 53 45 11 50 44 12 51 50 20 57 51 17 65 57 16 71 63 18 73 63 17 113 85 7 113 86 9 113 86 10 114 87 10 114 88 11 114 88 12 114 89 12 114 89 13 114 90 13 114 90 14 114 91 15 100 83 17 103 89 23 98 88 27 99 89 29 114 91 16 115 92 16 115 92 17 115 94 17 115 94 18 115 94 19 115 95 19 115 95 20 115 96 20 115 96 21 115 97 21 115 97 22 115 98 23 116 98 23 116 98 24 116 99 24 116 99 26 116 100 27 113 99 28 115 101 30 116 101 28 116 101 29 116 102 29 116 103 30 117 103 31 121 103 26 123 104 25 126 106 26 117 104 32 117 105 32 117 105 33 117 105 34 117 106 34 117 106 35 117 107 35 117 107 36 117 108 36 117 108 37 117 109 37 117 109 38 117 109 39 117 111 40 118 112 41 118 113 43 118 113 44 118 114 45 118 115 46 118 116 47 134 108 20 134 109 21 134 110 22 134 111 23 134 112 25 134 113 26 134 114 27 135 114 29 135 115 30 135 116 30 135 117 31 138 116 26 134 118 34 136 118 32 137 120 33 140 123 36 140 124 38 147 127 33 153 128 28 153 128 29 153 130 30 152 130 33 152 131 34 154 134 36 154 135 37 159 142 43 156 141 46 158 144 47 188 166 47 194 157 29 243 185 18 243 186 20 244 188 22 244 190 24 244 191 26 197 162 33 205 168 33 205 170 37 201 171 43 214 177 37 214 179 41 197 172 48 194 173 53 205 181 53 215 186 50 211 186 53 236 190 34 245 193 28 245 194 30 245 194 31 222 197 58 245 196 32 245 196 33 245 197 35 245 198 35 246 198 35 246 199 36 246 199 37 246 200 37 246 200 38 246 201 39 246 201 40 246 202 41 246 203 41 246 203 42 246 204 43 247 204 43 247 205 44 247 205 45 247 206 46 247 207 47 237 206 55 229 204 61 236 206 57 240 203 48 247 208 48 247 208 49 247 209 49 247 209 50 245 210 52 248 210 51 248 211 52 248 212 53 248 212 54 248 213 54 248 213 55 246 213 58 248 214 56 248 214 57 248 215 57 249 216 58 249 216 59 249 217 59 249 217 60 249 218 61 249 218 62 249 219 62 249 219 63 241 219 70 249 220 64 249 221 65 250 222 66 250 222 67 250 223 68 250 224 69 250 225 70 250 225 71 250 226 71 250 226 72 250 227 73 251 227 73 250 227 75 251 228 74 251 228 75 251 229 75 250 229 77 251 230 76 251 230 77 251 231 79 251 232 79 252 233 81 252 234 81 252 235 83 252 235 84 252 236 85 252 237 85 252 238 87 252 238 88 253 240 89 253 240 90 253 241 91 253 241 92 253 243 94 253 244 96 254 246 98 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>@@@@') ; yourself); yourself]
+!
+
+mergeUsingBAll32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingBAll32x32.xpm"
+
+    "
+     self mergeUsingBAll32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingBAll32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingBAll32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8.H@*J&,-KR4.+2<0,GA1,''I3-CR4=[X6-+Z
+7=?!!8PC"8 B%*J&)-KR4.+*<0,GF1,''N3-CS4=[X6-+Z7=?!!@NK"@JN#*J")-KR8/K2<0LKD1L''I3,?R4-#Z6-+Z6-<@8.H@(JN(*J&)+KR4-K2<0LCD1L''I
+3,?R4-WU6-+]7PC"8 B[(JB%*J&)-KR4-K2<0LKB1L''K4MCR4-WX6-+Z@NK"@I. (JB(*J&)%WU7]7%9^:?D2\SK3,;R4-WX6-(@8.H@&9.\''9>%)Z!!VEP@@
+@@@@BQ8/.\''I2]CR4-#X6@C"8 BR&92Z'':V%*EXZ@A(''JBDM@@@Q,L''I3-CR4-OX@NK"@IJR&)*\''I2%U!!(@Q:&5.''06B0@11\''N3,;R4= @8.H@#)JX&I2\
+''JUPF AF-KR5.'',2@BGB2\SK3,;S4 C"8 BN$)JR&I*\''EHX@DZ)-J25,3P@HLKB1L''I3,?R@NK"@H.N$)JX&I2\TA @Q*&)+KQ$K @+/LKB0,''I2<<@8.H@
+"8.K$)JR&I!!PF@@7Y&]#O#@CAVV</\KB1L''D3 C"8 BH"8.K$)JX&D,U@@@@@@@@@BAX.+*</\KD1L/K@NK"@HRH"8.N#)JRR1(@D2X&JA(J@B&T.+2</LGA
+1\$@8.H@ ("H"H.N$)IHE AB''9>_($X-@A*4-K*</[7A2PC"8 A?_8RH"H:K$$ Z@C>_''9>_)T8I@EF1-K*</LCA@NK"@GM? 8"H"H.KRAX@PY*Z''9>%T1(@
+M[F4.+*<0L@@8.H@\(M?_8"H"8-HD0@?&)*_''9=OBP@>(+R4-K"<0@C"8 A/\''Q?_8"H"C0S@C&P&).XP"0@@6"(*[R4.KR<@NK"@FE/\7M? 8"DN1L@DBL#
+H1@I@@@3*J")*[R4-K0@8.H@XF=/\7M? 8P:D@@@@@@@AP0*P9>_*J&)*[R4-@C"8 A"X&I/\''I?_75)ZV%,[&9>$I*\''I2''*J&)*[R4@NK"@E=_W6=/\''=?
+ (ZF#8*K#9BZ&I*\''I>%)Z"),:$@8.H@WU= XV=/_7=?_8RF"H>O#9BX$I*Z''92%)ZV)-@C"8 A\WVA XVE"X''=?_8ZF"H&O$IBP&)*Z''I>%)Z")@NK"@E%\
+WFA XFI"\''=2 8RD!!(>O#9BP&)*\''I2%)ZT@8.H@VU1\WFA X&I"\''JC 8RF!!("K#9BP&)*\''I>%)PC"8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@NK"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8.K"8 @a') ; colorMapFromArray:#[0 0 0 1 1 0 3 3 1 4 3 1 5 5 1 7 6 2 9 8 2 10 9 2 11 9 2 10 10 3 13 11 3 17 15 5 23 19 4 30 27 8 31 28 9 33 27 5 33 27 6 34 29 7 35 30 7 38 31 6 38 31 7 35 31 9 38 32 7 37 32 9 38 32 8 38 33 8 38 33 9 39 34 9 36 32 10 37 33 10 38 35 12 42 37 11 40 37 12 44 40 13 46 41 12 48 40 9 48 40 10 51 43 11 51 44 12 50 44 13 52 46 14 54 48 14 62 53 13 73 66 20 81 69 18 83 73 20 93 83 25 101 92 30 106 93 27 105 95 31 109 98 30 123 106 28 117 105 32 130 114 32 140 126 40 147 127 34 144 127 36 170 141 31 178 144 27 184 151 29 184 151 31 184 152 31 158 138 40 170 142 32 170 143 33 170 143 34 170 145 36 175 149 38 171 148 40 171 149 41 171 150 42 171 150 43 185 154 33 185 154 34 185 155 35 185 156 37 185 157 37 186 158 39 177 155 42 180 155 40 186 159 40 181 160 46 186 160 41 186 160 43 186 161 43 187 162 43 187 163 45 184 161 46 191 169 51 243 183 15 243 184 17 243 185 18 243 185 19 243 186 20 244 187 21 244 188 22 244 189 23 244 190 25 244 191 26 204 178 50 203 180 54 203 183 57 216 187 50 216 188 51 219 190 52 230 187 35 230 188 36 230 189 37 230 189 39 231 190 40 231 191 42 245 192 28 245 193 28 245 193 29 245 194 30 245 194 31 245 195 31 216 192 56 217 192 57 217 193 59 217 194 60 217 195 62 219 196 60 217 196 62 220 197 61 238 192 35 236 198 45 245 196 32 245 196 33 245 197 34 245 197 35 246 198 35 246 198 36 246 199 36 246 199 37 246 200 37 246 200 38 246 201 39 246 201 40 246 202 40 246 202 41 246 203 42 246 204 43 247 204 43 247 205 44 247 205 45 247 206 46 247 207 47 228 203 60 233 205 59 243 206 50 247 208 48 247 208 49 247 209 49 247 209 50 248 210 51 248 211 52 248 211 53 248 212 53 248 212 54 248 213 54 248 213 55 243 211 57 248 214 56 248 214 57 248 215 57 248 215 58 249 216 58 249 216 59 249 217 60 249 218 61 249 218 62 249 219 62 249 219 63 249 220 63 235 214 69 237 217 73 246 219 66 249 220 64 248 220 65 249 221 65 250 222 66 250 222 67 250 223 67 250 223 68 240 220 74 250 224 69 250 225 70 250 225 71 250 226 71 250 226 72 250 227 73 251 227 73 251 228 74 251 228 75 251 229 75 251 229 76 251 230 76 251 230 77 251 231 78 251 231 79 251 232 79 251 232 80 251 233 80 252 233 81 252 234 81 252 234 82 252 235 83 252 235 84 252 236 84 252 236 85 252 237 86 252 238 87 252 238 88 252 239 88 253 240 89 253 240 90 253 241 91 253 242 92 253 242 93 253 243 94 253 244 96 254 245 96 254 246 97 254 247 99 254 248 101 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@G????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''??
+??9????>_????''????9????>_????''????9????>_???? @@@@@b') ; yourself); yourself]
+!
+
+mergeUsingBase24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingBase24x24.xpm"
+
+    "
+     self mergeUsingBase24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingBase24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingBase24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+EAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAHRD!!LREAPTEAPTEAPTEAPTEAPTEAPTEAHRD!!HREAPTEAPTEAPTEAPTEAPTEAPTEAHRD!!HREAPTEAPTEAPTEAPT
+EAPTEAPTEAHRD!!HREAPTEAPTEAPTEAPTEAPTEAPTEALRD!!HREAPTEAPTEAPTEAPTEAPTEAPTEALH@@@@@@@@EAPTEAPTEAPTEAPTEAPTEALG@@TI@ @@@APT
+EAPTEAPTEAPTEAPTEAHG@@0REAPT@@@TEAPTEAPTEAPTEAPTEAHG@@0REAPT@@@TEAP@@@@@@APTEAPTEAHG@@,QEAP@@APTEAP@EAPT@@@TEAPTEALG@@@@
+@@@@@APTEAPTEAPTE@@@EAPTEALG@@XK@1P@@APTEAPT@@@@@@@@EAPTEALG@@0REAPT@@@TE@@@@APTE@@@EAPTEALG@@0REAPT@@@TE@@@EAPTE@@@EAPT
+EALG@@0REAPT@@@TE@@@EAPTE@@@EAPTEALG@@TI@ @@@@@TE@@@EAPT@@@@EAPTEALG@@@@@@@@@APTEAP@@@@@E@@@EAPTEALPC <NEAPTEAPTEAPTEAPT
+EAPTEAPTEALRD!!HREAPTEAPTEAPTEAPTEAPTEAPTEALRD!!HREAPTEAPTEAPTEAPTEAPTEAPTEAHRD!!HREAPTEAPTEAPTEAPTEAPTEAPTEAHRD!!HREAPTEAPT
+EAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPT') ; colorMapFromArray:#[0 0 0 25 48 63 25 49 63 30 57 72 33 63 81 37 70 91 40 76 98 41 79 101 42 81 104 46 90 116 50 95 122 50 98 126 51 99 128 66 128 165 67 129 166 70 134 173 77 149 191 79 152 196 83 160 206 83 161 206 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_@@@_@@@_@@@_@@@_@@@_8@@_<@@_F@@_FO _LH0_<@X_,G8_F\X_FXX_FXX_>X8_<OX_@@@_@@@_@@@_@@@_@@@@@@@') ; yourself); yourself]
+!
+
+mergeUsingBase32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingBase32x32.xpm"
+
+    "
+     self mergeUsingBase32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingBase32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingBase32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+E1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1TUEQTUEQ\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\UE!!XVE!!XVE1\WE1\WE1\WE1\WE1\WE1\W
+E1\WE1\WE1TVE!!XVE!!XWE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WEQXVE!!XVE!!\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\UE!!XVE!!XVE1\WE1\WE1\WE1\W
+E1\WE1\WE1\WE1\WE1TVE!!XVE!!XWE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WEQXSDQDQDQ@WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\UE!!@H@@@@@@@@@@@W
+E1\WE1\WE1\WE1\WE1\WE1\WE1TVD@$@B@0C@@@@@@@WE1\WE1\WE1\WE1\WE1\WE1\WEQXPBP@NE!!\WE1\@@@@WE1\WE1\WE1\WE1\WE1\WE1\UE!!@I@@8V
+E1\WE0@@@A\WE1\WE1\WE1\WE1\WE1\WE1TVD@$@C!!XWE1\W@@@@E1\WE1\@@@@@@@@WE1\WE1\WEQXPBP@NE!!\WE1\@@@@WE1\W@@@@@@@@@@@WE1\WE1\U
+E!!@I@@4QDA\W@@@@E1\WE1\@E1\WE1\@@@@WE1\WE1TVD@$@@@@@@@@@@A\WE1\WE1\WE1\WE1\@@A\WE1\WEQXPBP@EC@L@@@@@@A\WE1\WE1\W@@@@@@@@
+@A\WE1\VE!!@I@@8VE1\WE0@@@A\WE1\@@@@@@@@@@@@@E1\WE1TVD@$@C!!XWE1\WE0@@E1\WE0@@@A\WE1\@@@@WE1\WEQXPBP@NE!!\WE1\W@@@@E1\@@@@W
+E1\WE0@@@A\WE1\UE!!@I@@8VE1\WE1\@@@@WE0@@E1\WE1\W@@@@E1\WE1TVD@$@C!!XWE1\W@@@@E1\W@@@@E1\WE0@@@@@WE1\WEQXPBP@DB L@@@@@@@@W
+E1\W@@@@@@@@@@@@@A\WE1\UE <E@@@@@@@@@@@WE1\WE1\W@@@@@@@W@@@@E1\WE1TVEAHRD!!HWE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WEQXVE!!XVE!!\W
+E1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\UE!!XVE!!XVE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1TVE!!XVE!!XWE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WEQXV
+E!!XVE!!\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\UE!!XVE!!XVE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\UEQTUEQTWE1\WE1\WE1\WE1\WE1\WE1\WE1\W
+E1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE1\WE0@a') ; colorMapFromArray:#[0 0 0 8 16 20 9 17 21 9 17 22 11 21 27 11 21 28 11 22 29 12 23 29 12 22 30 13 24 32 16 31 40 17 32 42 17 33 42 43 83 107 50 96 123 62 119 153 62 120 154 72 139 179 77 149 192 80 154 198 81 157 202 84 159 205 83 160 206 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@C<@@@A?@@@@_0@@@G<@@@A?@@@@_0@@@G>@@@A?>@@@_?0@@G<N@@A?C @@_08O0G<NG>A?''AA0_? @LG?<@?!!?C!!?8_0X\NG<GNC!!?A3@8_088^G?>
+G?!!?>@>8_0@@@G<@@@A?@@@@_0@@@G<@@@A?@@@@O0@@@@@@@@@b') ; yourself); yourself]
+!
+
+mergeUsingBaseAll24x24
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingBaseAll24x24.xpm"
+
+    "
+     self mergeUsingBaseAll24x24 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingBaseAll24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingBaseAll24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+5-[V5-[V5-[V5-[V5-[V5-[V5-[V5-[V5!!9ST5MVV%)ZV%9^W&I"X&Q$[V5-[2GV5$.=/\GC1\WI2L''I3L3N3<?R4-OU5V7V5$&=/\GA0<WE2\#I3L3N3,?O
+4-KR5V7V5$&9.<F=0\GG1<_H2\''L3,;O3=KR46;V5$&9.[.=/\F>0<_G2\''I3L3N3=KQ4&7V5$YY@@@@@@8 _\OG1<#I2<3N3,?O4&/V5$YY@CQ)ZULW@8OC
+1\#H2\/L3L?O36KV5$YY@G*9.[6N@COC0<_G2L''K3L;N36/V5$IU@G*4.K&(@CCC09@(EPLSI8/L3&KV5$IQ@F&Z&(0#@8F=/'',/^XI0GANU3&KV5#5M@@@@
+@@@IQKGA/+7D1<WH. Y&3E7V5$IM@D6D!!GH#@6^=/[% F 8C@0@13FGV5#5M@G^/-KR4FAVV/R(BMHFG!!0(-2VGV5#1M@GV,+KR4I BJ.P *+,GC/0@-2E7V
+5#1M@GV++KJ-E0ZM.@ //[?A^P@-1U+V5#)A@CI2]FT_@B:''.RHQ_:9?DPX)1%7V5#)A@@@@@@([SYR4-I %B X]^@8)1U+V5#&Y"H&R$96]+J>2-KV5&(>&
+.9*U05+V5#* (ZF$)J&+*:>/-KR7.[&9.<F;0U+V5#Z\(JF!!(*R)*Z2/+[R4-[V9.[7A0T7V5#Z\(ZF!!(ZR)*Z&++J24-KR4.[&9/EOV5!!,6M3$:N#(;N3-B
+P#5FP$YIRT%MT1;V5-[V5-[V5-[V5-[V5-[V5-[V5-[V5-[V') ; colorMapFromArray:#[0 0 0 1 1 2 2 3 3 2 4 5 3 4 5 3 5 6 3 6 7 4 6 8 5 7 9 6 10 11 6 10 12 7 11 13 7 12 14 8 13 15 9 14 16 9 15 19 9 16 19 10 16 20 11 17 20 11 18 21 11 19 23 13 20 23 15 23 29 14 24 29 17 28 33 18 31 39 20 32 38 17 32 41 23 35 41 22 36 44 23 37 45 23 41 50 25 40 48 29 43 48 30 49 59 30 50 60 30 50 61 31 51 61 32 53 65 36 56 65 36 57 67 39 63 76 41 64 76 41 65 77 42 66 77 42 66 78 40 67 83 43 69 82 43 70 84 46 72 84 41 72 89 46 73 88 47 77 93 49 78 94 39 74 97 40 75 97 40 77 97 41 77 98 43 78 98 44 79 98 44 79 99 45 80 99 46 80 100 46 81 100 47 81 100 45 83 104 46 83 104 47 84 105 50 82 99 48 82 101 49 83 101 50 83 102 50 84 102 51 84 102 52 85 103 52 86 103 53 86 103 49 84 104 48 84 105 49 85 106 50 86 106 51 87 107 53 86 104 54 87 104 55 87 105 51 88 107 55 88 105 53 88 107 52 88 108 53 88 108 56 89 105 57 89 105 57 90 106 58 90 106 60 91 107 61 92 107 57 92 110 61 92 108 62 94 108 63 94 109 63 95 109 55 94 116 63 96 113 59 98 118 60 102 125 62 102 124 63 102 124 64 95 109 65 96 109 65 96 111 66 97 111 67 98 111 65 101 119 67 107 127 63 106 129 60 105 130 60 105 131 61 107 133 62 107 133 63 108 133 66 107 128 68 108 128 67 111 136 70 112 133 67 112 136 71 114 136 71 114 137 70 114 138 71 115 139 72 116 138 76 118 139 74 119 141 69 117 144 69 118 145 80 127 151 82 129 153 74 134 169 76 136 171 83 137 166 92 141 165 86 142 173 85 143 174 89 143 173 89 146 177 95 150 179 95 152 182 82 147 184 84 149 185 91 155 190 102 157 183 96 158 191 98 159 191 94 157 192 87 159 201 95 160 194 95 160 195 86 162 207 91 161 200 92 161 201 88 164 208 89 165 209 91 166 210 92 167 211 94 168 211 95 170 212 97 160 194 101 165 199 99 166 203 104 169 204 97 171 213 98 172 214 99 173 215 101 174 215 103 175 214 108 175 211 102 175 216 109 176 211 109 177 213 102 176 216 104 177 217 105 178 218 107 178 218 107 179 219 108 180 219 110 181 220 111 183 221 115 179 212 113 183 220 113 184 222 114 185 223 115 186 223 117 185 220 116 185 221 117 187 224 119 189 224 118 188 225 118 189 225 120 190 226 121 191 226 123 192 227 124 193 228 126 194 229 126 195 229 127 196 230 129 197 230 130 198 231 131 199 232 133 200 233 134 202 234 136 203 234 137 204 235 139 205 236 140 206 237 142 208 238 0 0 0]; mask:((ImageMask new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>@@@@') ; yourself); yourself]
+!
+
+mergeUsingBaseAll32x32
+"      Loaded from: /home/jv/work/icons/merge-tool-icons/mergeUsingBaseAll32x32.xpm"
+
+    "
+     self mergeUsingBaseAll32x32 inspect
+     ImageEditor openOnClass:self andSelector:#mergeUsingBaseAll32x32
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary mergeUsingBaseAll32x32'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+VE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@VE @ST5OS4=OTEEPTUEQTUIRT%ITUEQTUUUU
+U%YVU0AXV@AMST5OS4=OTEAQTUEQT%IRT%MTUEQUUUUUUUYV@E!!X@D1LST5OS4=OS5AQTUEQTUIST5MTUEQTUUUUUUX@VE @SD1MST5OS4=PS5APTUEQT%ER
+T%MTUEQTUUUUU AXV@AJSD1MST5OS4=OTEAQTUEQTUMRT5MTUEUUUUUU@E!!X@D)BLSD1L#H2MT-PS5APTUERTUEST%MTUEQUUUT@VE @R#DI@@@@@@@BBQUA
+S5APTUEQTUIRT%ITUEQUUPAXV@AJLP$@A0,KC@X@@@]GTEAQTUEQT%IRT%ISUEQU@E!!X@D$1BP@&SD1MSRHD@AUPTEAPTUERT%IRT%QTUEP@VE @RSDI@BYJ
+R$1MSQT@B$=OTEEQS$@5MTART%QTU@AXV@AILP @I$)JSD=LG@@IS4=OPRXTB P@AQD/T%IT@E!!X@DX1B@@&R$)LR#$T@AAOS4<5B @GC 8F@@@''T%P@VE @
+RC@I@A(0LSD*E0@AM$5OS3<^QUEPT$8[@@UQT AXV@AFL@$@@@@@@@@@A3IJS45OS49PTEANT$TQ@CMR@E!!X@C80B@@GB04MB@D@B3]MST5OSB<!!F1\VF@0@
+H%H@VE @Q"8H@BUIRD%JM1H@A45MSS<\A@@@@@@@@@@[T AXV@@>L@ @IT!!IRT)JLPD@JD1LH @AF3YKTD,U@A-Q@E!!X@C80B@@%RD!!IRT$1BP@WR$\T@A)O
+S5EONAH@FUD@VE @O"4H@BUFRD!!IR"(A@A5JQAD@H$5MS$<)@ @YTPAXV@@>KP @HC,;N3\*D0@AM4)JE@@KP$5GJ <@@A%Q@E!!X@C8+B@@GB0,KBPD@@A5J
+R$(,@0@EC0<CAAD@FU@@VE @OR4E@@@@@@@AAP<.RT%JR$(.DPTAAAMDDP@[T@AXV@@=O#4>O#9FQ$YFQ$%IRT%JR$)JSD1MST5OST=P@E!!X@C0=OS8>O#9F
+Q$YFQ$!!IRT)JR$)LR$1MST5OS4<@VE @OS0=OS4>O#8>Q$YFQ$%IR$%JR$)JST1LST5MS0AXV@@:OS0=OS4>O#9FQ$YFRT!!IRT)JR$)MSD1MST5O@E!!X@C(<
+OC4=OS4>O#8>Q$YFQ$!!IRT)JR$)LSD)MST4@VE @N#(<OS0=OS8>O#9FQ$YFRD!!IRT%IR$)JSD5MSPAXV@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@E!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XVE!!XV@@a') ; colorMapFromArray:#[0 0 0 4 7 9 5 9 10 8 12 15 9 14 17 10 17 21 14 22 26 15 24 29 15 26 33 17 28 34 20 32 38 22 36 44 25 38 45 23 39 48 27 43 51 28 47 57 30 50 60 32 50 60 33 54 64 35 58 70 39 62 75 43 69 82 47 73 86 47 76 92 50 78 93 51 80 95 47 79 98 52 83 98 54 87 105 53 89 109 60 95 112 63 96 114 55 96 120 62 100 121 64 102 122 66 106 127 59 103 129 60 104 129 65 108 131 75 114 135 71 115 139 76 120 143 75 124 150 70 127 159 74 126 154 70 126 160 75 129 159 85 132 156 77 131 161 81 134 163 84 136 164 90 139 162 89 142 169 93 145 171 92 148 178 92 154 188 100 156 186 97 159 192 85 162 207 93 161 201 87 163 208 90 165 210 94 169 212 101 163 195 106 165 193 106 168 199 100 165 200 103 169 205 107 172 205 112 173 204 99 173 214 109 174 209 102 175 216 103 176 217 107 180 219 114 180 214 112 183 221 114 185 223 120 185 218 117 188 224 121 190 226 125 194 228 129 197 231 131 199 232 134 201 233 138 205 236 143 208 238 144 209 238 0 0 0]; mask:((ImageMask new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@G????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''????9????>_????''??
+??9????>_????''????9????>_????''????9????>_???? @@@@@b') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-FileBrowser'!
+
+changesBrowserIcon
+    <resource: #programImage>
+
+    ^ self changesBrowser24x24Icon
+!
+
+copyFileIcon
+    <resource: #programImage>
+
+    ^ self copy20x20Icon
+!
+
+cutFileIcon
+    <resource: #programImage>
+
+    ^ self cut20x20Icon2
+!
+
+deleteFileIcon
+    <resource: #programImage>
+
+    ^ self erase20x20Icon
+!
+
+desktopIcon
+    <resource: #programImage>
+
+    "/ ^ self desktop28x28Icon
+    ^ self desktop24x24Icon
+!
+
+diffIcon
+    <resource: #programImage>
+
+    ^ self diff16x16Icon2
+!
+
+directoryBookmarks20x20Icon
+    "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 directoryBookmarks20x20Icon inspect
+     ImageEditor openOnClass:self andSelector:#directoryBookmarks20x20Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class directoryBookmarks20x20Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 20; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@X&I"X&I"X&I"X&I"X&I"X&I"X A"X&I"X&I"X&I"B0,KB0,KB6I"@FI"X&I"X&I"X&HKW5=_W5<KX&H@X&H@@@@@@@@@
+X -_W5=_W0-"X A"X A#X6M#X0A"B5=_W5=_B6I"@FH@X6M#X6M#X0@KW5=_W5<KX&H@@@@@@@@@@@@@@@-_W5=_W0,@@@@@X6M#X6M#X6M#B5=_W5=_B6L@
+@@A#X6M#X6M#X6LKW5=_W5<KX0@@@FM#X6M#X6M#X0-_W5=_W0-#@@@@X6M#X6M#X6M#B5=_W5=_B6L@@@A#X6M#X6M#X6LKW5=_W5<KX0@@@FM#X6M#X6M#
+X0-_W5=_W0-#@@@@X6M#X6M#X6M#B5< B1=_B6L@@@A#X6M#X6M#X6LKW0-#B5<KX0@@@FM#X6M#X6M#X0,KX6M#B0-#@@@@X6M#X6M#X6M#B6M#X6M#B6L@
+@@A#X6M#X6M#X6M#X6M#X6M#X0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 71 169 0 71 170 0 74 172 0 78 174 0 83 177 0 100 189 0 106 193 0 107 193 0 112 196 0 118 201 0 122 205 0 128 208 0 128 209 0 132 212 0 133 212 0 137 215 0 138 215 0 141 218 0 144 220 18 78 164 19 80 169 19 81 168 20 79 165 22 138 207 23 81 167 23 91 173 23 138 207 26 92 173 39 141 229 41 141 229 42 134 204 43 135 204 43 142 209 48 144 209 51 192 255 59 166 231 59 195 255 61 166 231 61 166 232 66 198 255 72 171 234 73 200 255 74 172 234 75 172 234 82 204 255 84 176 236 87 177 237 88 178 238 89 207 255 97 209 255 98 182 239 100 182 239 101 183 240 104 213 255 109 187 241 111 156 203 112 216 255 113 188 243 121 191 244 121 221 255 123 193 245 125 194 245 126 221 255 131 196 246 135 197 247 136 198 248 136 226 255 140 200 248 140 228 255 144 202 250 146 203 250 148 203 250 149 232 255 150 233 255 151 189 220 153 205 252 153 206 252 154 207 252 156 194 223 159 209 253 160 237 255 162 209 253 163 238 255 168 241 255 173 243 255 174 243 255 181 201 223 182 206 226 183 248 255 186 249 255 191 251 255 195 252 255 201 220 238 201 255 255 202 216 231 210 226 242 211 229 247 255 0 0 226 226 111]; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@A?@@A?@G=?@G=?@O??@_??0_??0_??0_??0_??0_??0_??0_??0_??0_??0_??0_??0_??0') ; yourself); yourself]
+!
+
+directoryBookmarksIcon
+    <resource: #programImage>
+
+    ^ self directoryBookmarks20x20Icon
+!
+
+directoryUpIcon
+    <resource: #programImage>
+
+    ^ self upArrow20x20Icon
+!
+
+documentsIcon
+    <resource: #programImage>
+
+    ^ self documents26x26Icon
+
+    "Created: / 25-10-2010 / 09:21:23 / cg"
+!
+
+dosShellTerminalIcon
+    <resource: #programImage>
+
+    ^ self dosWithoutText20x20Icon
+!
+
+editApplicationIcon
+    <resource: #programImage>
+
+    ^ self editIcon
+!
+
+editFileIcon
+    <resource: #programImage>
+
+    ^ self edit20x20Icon
+!
+
+editIcon
+    <resource: #programImage>
+
+    ^ self edit20x20Icon
+!
+
+encodingLockIcon
+    <resource: #programImage>
+
+    ^ self padLockRedMiniIcon
+!
+
+fileContents14x17Icon
+    "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 fileContents14x17Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileContents14x17Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class fileContents14x17Icon'
+	ifAbsentPut:[(Depth8Image new) width: 14; height: 17; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@APTEAPTEAPTEAP@@@@@E@@@@AP@@@@TE@@@@@@TEAPTEAPTEAPT@@@@@APT@@@T@@@TEAP@@@@@EAPTE
+APTEAPTE@@@@@@T@@@@E@@TEAPT@@@@@APTEAPTEAPTEAP@@@@@E@@T@AP@@@@TE@@@@@@TEAPTEAPTEAPT@@@@@AP@@@@T@@@@EAP@@@@@EAPTEAPTEAPTE
+@@@@@@T@AP@E@@@@APT@@@@@APTEAPTEAPTEAP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 105 133 190 129 129 129 194 194 194 255 0 0 255 255 255]; mask:((Depth1Image new) width: 14; height: 17; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A?>G?8_?!!?>G?8_?!!?>G?8_?!!?>G?8_?!!?>G?8_? @@@@a') ; yourself); yourself]
+!
+
+fileContentsIcon
+    <resource: #programImage>
+
+    ^ self fileContents14x17Icon
+!
+
+fileImageContents14x17Icon
+    "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 fileImageContents14x17Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileImageContents14x17Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class fileImageContents14x17Icon'
+        ifAbsentPut:[(Depth8Image new) width: 14; height: 17; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ HB@ HB@@@@@@HA0\GA0\GA0 H@@@@@@\GA0\IA0$GA0 @@@@@A0\GA0\GA0\GB@@@@@@GA0\G
+A0\GA0\H@@@@@@\GA0$GA0\GA0 @@@@@A0\GA0\GA0\GB@@@@@@HA0\GA0\IA0\H@@@@@@\GA0\GA0\GA0 @@@@@B@\GA0XGA0 HB@@@@@@HB@ HA  HB@ H
+@@@@@@ HB@ FB@ HB@ @@@@@BP$IBPXIBP$IBP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 105 133 190 129 129 129 194 194 194 255 0 0 255 255 255 133 60 36 0 206 0 174 218 230 0 137 0]; mask:((Depth1Image new) width: 14; height: 17; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A?>G?8_?!!?>G?8_?!!?>G?8_?!!?>G?8_?!!?>G?8_? @@@@a') ; yourself); yourself]
+!
+
+fileImageContentsIcon
+    <resource: #programImage>
+
+    ^ self fileImageContents14x17Icon
+
+    "Created: / 01-06-2010 / 17:35:40 / cg"
+!
+
+fileInIcon
+    <resource: #programImage>
+
+    ^ self fileIn20x20Icon3
+!
+
+fitImageSizeToViewIcon
+    <resource: #programImage>
+
+    ^ self fitImageSizeToView20x20Icon
+!
+
+hexToggle14x17Icon
+    "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 hexToggle14x17Icon inspect
+     ImageEditor openOnClass:self andSelector:#hexToggle14x17Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class hexToggle14x17Icon'
+	ifAbsentPut:[(Depth8Image new) width: 14; height: 17; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@APTEAPTEAPTEAP@@@@@E@@@@AP@@@@TE@@@@@@TEAP@E@@TEAPT@@@@@APT@@@T@@@TEAP@@@@@EAPT@
+AP@EAPTE@@@@@@T@@@@E@@TEAPT@@@@@APTEAPTEAPTEAP@@@@@E@@@@AP@@@@TE@@@@@@T@AP@E@@T@APT@@@@@AP@@@@T@@@@EAP@@@@@E@@T@AP@E@@TE
+@@@@@@T@AP@E@@@@APT@@@@@APTEAPTEAPTEAP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 105 133 190 129 129 129 194 194 194 255 0 0 255 255 255]; mask:((Depth1Image new) width: 14; height: 17; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A?>G?8_?!!?>G?8_?!!?>G?8_?!!?>G?8_?!!?>G?8_? @@@@a') ; yourself); yourself]
+!
+
+hexToggleIcon
+    <resource: #programImage>
+
+    ^ self hexToggle14x17Icon
+!
+
+historyBackIcon
+    <resource: #programImage>
+
+    ^ self leftArrow20x20Icon
+!
+
+historyBackInGlobalListIcon
+    <resource: #programImage>
+
+    ^ self left2Arrow24x24Icon
+
+    "Created: / 02-07-2011 / 18:41:50 / cg"
+!
+
+historyForwardIcon
+    <resource: #programImage>
+
+    ^ self rightArrow20x20Icon
+!
+
+historyIcon
+    <resource: #programImage>
+
+    ^ self history20x20Icon
+!
+
+homeIcon
+    <resource: #programImage>
+
+    ^ self home28x28Icon
+!
+
+homeIcon2
+    <resource: #programImage>
+
+    ^ self home22x22Icon2
+!
+
+makeIcon
+    <resource: #programImage>
+
+    ^ self make22x22Icon2
+!
+
+newDirectoryIcon
+    <resource: #programImage>
+
+    ^ self newDirectory20x20Icon
+!
+
+newFileIcon
+    <resource: #programImage>
+
+    ^ self fileNew20x20Icon
+
+    "Created: / 31-03-2011 / 10:57:39 / cg"
+!
+
+pasteFileIcon
+    <resource: #programImage>
+
+    ^ self paste20x20Icon
+!
+
+printerIcon
+    <resource: #programImage>
+
+    ^ self printer22x22Icon
+!
+
+reloadIcon
+    <resource: #programImage>
+
+    ^ self reload24x24Icon
+!
+
+reloadTextFromFileIcon
+    <resource: #programImage>
+
+    ^ self reloadTextFromFile28x22Icon
+!
+
+saveAsToFile32x22Icon
+    "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 saveAsToFile32x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveAsToFile32x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class saveAsToFile32x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 32; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L3L3L3@@@@@@@@@@@@@@@CQDMDP0@@@@@EUUAP@@@@@3L3L3L@@B@AAUUPD@@@@@MDP4QC@@@"@P
+UUTA@@@@@CL3L3L"H"H"DEUU@P@@@@@4QCQDL"H"H"@@@@D@@@@@L3L3L2H"H"HQDQDQ@@@@@CQDMDP0@@H DP@@@P@@@@@3L3L3L@@B@AD@UPD@@@@@MDP4
+QC@@@@@Q@ETA@@@@@CL3L3L0@@@E@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 129 129 129 255 0 0 255 255 255 105 133 190 194 194 194]; mask:((Depth1Image new) width: 32; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@G?0@@A?<G? _?A?8G?1_>A?<_? _???8G???>A???? _?G?8G?1_>A?<G? _?@?8G?0@@@@@@@@@@@@@C''RX\9BT)IPL%K"S@)L $I13FG\@@@@@@@@a') ; yourself); yourself]
+!
+
+saveImageToFileAsIcon
+    <resource: #programImage>
+
+    ^ self saveToFileAsIcon
+!
+
+saveTextToFileIcon
+    <resource: #programImage>
+
+    ^ self saveTextToFile28x22Icon
+!
+
+searchFileIcon
+    <resource: #programImage>
+
+    ^ self search20x20Icon
+!
+
+searchIcon
+    <resource: #programImage>
+
+    ^ self search20x20Icon
+!
+
+shellTerminalIcon
+    <resource: #programImage>
+
+    OperatingSystem isMSDOSlike ifTrue:[
+	^ self dosShellTerminalIcon
+    ].
+    ^ self unixShellTerminalIcon
+!
+
+stxHomeIcon
+    "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 stxHomeIcon inspect
+     ImageEditor openOnClass:self andSelector:#stxHomeIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class stxHomeIcon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(nil )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@D@@@@@@@@@@@@@DQ@@@@@@@@@@@@DQDP@@@@@@@@@@DQ@QD@@@@@@@@@DQIBDQ@@@@@@@@DQICP!!DP@@@@@@DQICL4HQD@@@@@
+DQICL3MBDQ@@@@DQIFX3L3P!!DP@@DQICY#L3L6HQD@D"ICM&L3M&M@@A@RH$L3Y#M&L4@@D@@@P3L6L6L3P@@@@@ACL3Y&L3M@@@@@@DL3L6L3L4@@@@@@P3
+L6X3L3P@@@@@ACL6L6L3M@@@@@@DM&L3M#L4@@@@@@Q&L3L3X3P@@@@@A&YDQDQ$Q@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 192 0 0 64 0 0 73 73 73 192 192 192 100 128 255 0 200 48]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A@@@C @A''0@A/8@A?<@A?>@A??@C?? G??0O??8_??<_??<_??<C?? C?? C?? C?? C?? C?? C?? C?? C?? ') ; yourself); yourself]
+!
+
+unixShellTerminalIcon
+    <resource: #programImage>
+
+    ^ self shellWithoutText20x20Icon
+!
+
+viewDetailsIcon
+    <resource: #programImage>
+
+    ^ self viewDetails16x16Icon
+!
+
+viewNoDetailsIcon
+    <resource: #programImage>
+
+    ^ self viewNoDetails16x16Icon
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-ImageEditor'!
+
+loadImageFromMethodIcon
+    <resource: #programImage>
+
+    ^ self loadFromMethodIcon
+!
+
+newImageIcon
+    <resource: #programImage>
+
+    ^ self newImage24x24Icon
+!
+
+saveImageAsMethodAsIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethodAsIcon
+!
+
+saveImageAsMethodIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethodIcon
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-Launcher'!
+
+displayScreenIcon
+    <resource: #programImage>
+
+    ^ self displayScreen22x22Icon
+!
+
+editorIcon
+    <resource: #programImage>
+
+    ^ self editor22x22Icon
+!
+
+fontIcon
+    <resource: #programImage>
+
+    ^ self font22x22Icon
+!
+
+garbageCollectIcon
+    <resource: #programImage>
+
+    ^ self garbageCollect24x24Icon
+    "/ ^ self garbageCollect28x28Icon
+!
+
+helpIcon1
+    <resource: #programImage>
+
+    ^ self help28x28Icon1
+!
+
+helpIcon2
+    <resource: #programImage>
+
+    ^ self help28x28Icon2
+!
+
+helpIcon3
+    <resource: #programImage>
+
+    ^ self help28x28Icon3
+!
+
+imageEditorIcon
+    <resource:#programImage>
+    ^ self imageEditor24x24Icon
+
+    "Created: / 31-03-2011 / 11:07:30 / cg"
+!
+
+keyboardMappingIcon
+    <resource: #programImage>
+
+    ^ self keyboardMapping22x22Icon
+!
+
+languagesIcon
+    <resource: #programImage>
+
+    "/ ^ self languages20x12Icon
+    ^ self languages22x22Icon
+!
+
+memoryIcon
+    <resource: #programImage>
+
+    ^ self memory22x22Icon
+!
+
+projectBuilderIcon
+    <resource: #programImage>
+
+"/    ^ self packageOpen24x24Icon
+    ^ self packageIn24x24Icon
+
+    "Modified: / 01-02-2012 / 15:09:43 / cg"
+!
+
+saveImageIcon
+    <resource: #programImage>
+
+    ^ self saveImage24x24Icon
+    "/ ^ self saveImage28x28Icon
+!
+
+startChangesBrowserIcon
+    <resource: #programImage>
+
+    ^ self changesBrowser24x24Icon
+    "/ ^ self changesBrowser28x28Icon
+!
+
+startFileBrowserIcon
+    <resource: #programImage>
+
+    ^ self fileBrowser24x24Icon
+    "/ ^ self fileBrowser28x28Icon
+!
+
+startImageEditorIcon
+    <resource: #programImage>
+
+    ^ self imageEditor24x24Icon
+    "/ ^ self imageEditor28x28Icon
+!
+
+startMenuEditorIcon
+    <resource: #programImage>
+
+    ^ self menuEditor24x24Icon
+    "/ ^ self menuEditor28x28Icon
+!
+
+startNewFileBrowserIcon
+    <resource: #programImage>
+
+    ^ self newFileBrowser24x24Icon
+!
+
+startNewSystemBrowserIcon
+    <resource: #programImage>
+
+    ^ self newSystemBrowser24x24Icon
+!
+
+startSystemBrowserIcon
+    <resource: #programImage>
+
+    ^ self systemBrowser24x24Icon
+"/    ^ SystemBrowser defaultIcon
+!
+
+startSystemBrowserOnHistoryClassIcon
+    <resource: #programImage>
+
+    ^ self systemBrowserClassHistory28x28Icon
+!
+
+startUIPainterIcon
+    <resource: #programImage>
+
+    ^ self uiPainter24x24Icon
+    "/ ^ self uiPainter28x28Icon
+!
+
+startWorkspaceIcon
+    <resource: #programImage>
+
+    ^ self workspace24x24Icon
+    "/ ^ self workspace28x28Icon
+!
+
+stxHelpIcon
+    <resource: #programImage>
+
+    ^ self helpIcon2
+!
+
+stxSettings24x24Icon
+    <resource: #programImage>
+
+    ^ self stxSettings24x24Icon1
+!
+
+stxSettings24x24Icon1
+    "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 stxSettings24x24Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#stxSettings24x24Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class stxSettings24x24Icon1'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GA0@@@@@@@@@@@@@GA0@@@@@@@@@@@EAWA0BH"H"H"H"H@EAP@@BH"I*H"H"H@EAP@@BH"I&H"H
+"X@EAP@@BH"I&H"H&H@EAP@@BH"H&("I"H@EAP@@BH"H"X"X"H@EAP@@BH"H"Z&H"H@EAP@@BH"H"I"H"H@E@C]0BH"H"Y"H"H@E@@@@BH"H&H&H"H@EAP\@
+BH")"H"("H@EAP\@BH*X"H"("H@EAP\@BI&H"H"I"H@E@CM0BH"H"H"H"H@E@C]0@@@@@@@@@@@E@C]0@@@@@@@@@@@@@C]0@@@@@@@@@@@@@CM0@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127 255 0 0 100 100 100 25 25 25 0 204 51 0 168 39]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@N@@@N_?<N_?<D_?<D_?<D_?<D_?<D_?<D_?<N_?<__?<__?<N_?<N_?<N_?<__?<__?<_@@@_@@@_@@@N@@@@') ; yourself); yourself]
+!
+
+stxSettings24x24Icon2
+    "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 stxSettings24x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#stxSettings24x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class stxSettings24x24Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EAP@@@@@@@@@@@@@EAPB;.;.;.;.;,FA%APB;.;.;.;.;,FA @@B;.1F;.;.;,FA @@B;.1F;.;
+,[,FA @@B;.1F;.;F;,FA @@B;.;D[.1.;,FA @@B;.;,[,[.;,FA @@B;.;,QF;.;,FA @@B;.;.1.;.;,F@IUPB;.;,Q.;.;,F@@@@B;.;F;F;.;,FA T@
+B;,Q.;,[.;,FA T@B;D[.;,[.;,FA T@B1F;.;.1.;,F@I%PB;.;.;.;.;,F@IUPB;.;.;.;.;,F@IUP@@@@@@@@@@@@@IUP@@@@@@@@@@@@@I%P@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 0 127 127 0 168 39 0 204 51 25 25 25 100 100 100 127 127 127 170 170 170 255 0 0 255 255 0 255 255 255 184 231 231]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@N@@@N_?<N_?<D_?<D_?<D_?<D_?<D_?<D_?<N_?<__?<__?<N_?<N_?<N_?<__?<__?<_@@@_@@@_@@@N@@@@') ; yourself); yourself]
+!
+
+systemBrowserIcon
+    <resource: #programImage>
+
+    ^ self systemBrowser24x24Icon
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-MenuEditor'!
+
+copyMenuItemIcon
+    <resource: #programImage>
+
+    ^ self copyMenuItem22x22Icon
+!
+
+cutMenuItemIcon
+    <resource: #programImage>
+
+    ^ self cutMenuItem22x22Icon
+!
+
+newMenuIcon
+    <resource: #programImage>
+
+    ^ self newMenu24x24Icon
+!
+
+pasteMenuItemIcon
+    <resource: #programImage>
+
+    ^ self pasteMenuItem22x22Icon
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-SystemBrowser'!
+
+addBreakPointIcon2
+    "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 addBreakPointIcon2 inspect
+     ImageEditor openOnClass:self andSelector:#addBreakPointIcon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class addBreakPointIcon2'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 21; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'****/??>/:+>/%V>.TA..P@..P@..@@./ B>/:+>/??>/:+>/**>.)V..%U..%U..UU./%V>/:+>/??>****') ; colorMapFromArray:#[255 0 0 63 63 63 0 0 0 127 127 127]; mask:((Depth1Image new) width: 12; height: 21; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0') ; yourself); yourself]
+!
+
+addBuffer13x11Icon1
+    "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 addBuffer13x11Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#addBuffer13x11Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class addBuffer13x11Icon1'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@;.;.;.; @N???/??8@C.;.;.;.@@Y&Y&Y&XP@FY&Y&Y&D@A&Y&Y&Y!!@@Y&Y&Y&XP@FY&Y&Y&D@@QDQDQDQ@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??#?>O?8??#?>O?8??#?>O?8??#?>@@a') ; yourself); yourself]
+!
+
+addBuffer16x16Icon2
+    "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 addBuffer16x16Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#addBuffer16x16Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class addBuffer16x16Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@ADQDPDQDQ@@D3L>@SL38@@SL38AL3O @@@@@@@@@@@@L3L3L3L3L@@3L3L3L3L0@CL3L6L3X3A L3L3M#M#M @3L3L3X6M @@@@@@@FY @@@@
+@@Y&Y&Y&@@@@@@Y&Y&@@@@@@A Y&@@@@@@A Y&A @@@@A @F@@Xb') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 192 192 192 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??;??/?>??;??/?>??;????>??;?? G?@C @U@BR@QDb') ; yourself); yourself]
+!
+
+breakpointBlueDisabled
+    ^ self breakpointBlueDisabled9x9
+!
+
+breakpointBlueEnabled
+    ^ self breakpointBlueEnabled9x9
+!
+
+breakpointRedDisabled
+    ^ self breakpointRedDisabled9x9
+!
+
+breakpointRedEnabled
+    ^ self breakpointRedEnabled9x9
+!
+
+padLockBlackMiniIcon
+    <resource: #programImage>
+
+    ^ self padLockBlack12x12Icon
+!
+
+padLockBlueMiniIcon
+    <resource: #programImage>
+
+    ^ self padLockBlue12x12Icon
+!
+
+padLockGrayMiniIcon
+    <resource: #programImage>
+
+    ^ self padLockGray12x12Icon
+!
+
+padLockGreenMiniIcon
+    <resource: #programImage>
+
+    ^ self padLockGreen12x12Icon
+!
+
+padLockRedMiniIcon
+    <resource: #programImage>
+
+    ^ self padLockRed12x12Icon
+!
+
+removeBreakPointIcon2
+    "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 removeBreakPointIcon2 inspect
+     ImageEditor openOnClass:self andSelector:#removeBreakPointIcon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class removeBreakPointIcon2'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 21; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'****/??>/:+>/**>.)V..%U..%U..UU./%V>/:+>/??>/:+>/%V>.TA..P@..P@..@@./ B>/:+>/??>****') ; colorMapFromArray:#[0 255 0 63 63 63 0 0 0 127 127 127]; mask:((Depth1Image new) width: 12; height: 21; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0') ; yourself); yourself]
+!
+
+tracepointBlue
+    ^ self tracepointBlue9x9
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-SystemBrowser-classIcons'!
+
+abstractClassIcon
+    "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 abstractClassIcon inspect
+     ImageEditor openOnClass:self andSelector:#abstractClassIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary abstractClassIcon'
+        ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@EBIA@@@@@BH"H @@@AH"H"H!!@@ABH#L"I@@@H"L@L"H@@BH#@CH"@@ABH#L"I@@@D"H"H"D@@@@"H"H@@@@@EBIA@@@b') ; colorMapFromArray:#[214 177 82 229 207 148 204 159 42 226 201 136 207 165 55]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O0A? O?@?<C30OO@?<C?0G>@O0@@a') ; yourself); yourself]
+!
+
+announcementClassIcon
+    "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 announcementClassIcon inspect
+     ImageEditor openOnClass:self andSelector:#announcementClassIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary announcementClassIcon'
+        ifAbsentPut:[(Depth8Image new) width:12; height:12; bits:(ByteArray fromPackedString:'
+@A@C@PDA@PDA@P4@C1P9N3,;N3,;N1XI@#(8M#H/KB$$IS,KA#,4LR8+JBP!!G3,NA#,0KR,''H2D^GC,N@#(6J"X"HA4ZF3,LC1P:N3,;KQ$6N1XI@A@B@PDR
+N3,7D (@@@@@@@@HL1HDEP@@@@@@@ALQAQ\@@@@@@@@@MP\X@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 88 135 184 90 136 185 92 138 186 93 139 186 95 140 187 108 149 192 110 151 193 111 151 194 112 152 194 117 156 196 123 160 199 125 162 200 133 167 203 137 170 205 139 172 206 147 177 209 153 182 212 157 184 213 163 189 216 169 193 218 173 196 220 180 201 223 181 202 224 190 208 227 208 227 253 208 228 253 209 228 252 209 228 253 211 230 253 212 230 253 213 230 253 214 231 253 215 232 253 217 233 253 218 233 253 219 234 253 220 234 253 220 235 253 221 235 254 221 236 254 222 236 254 223 236 254 224 237 254 225 238 254 226 238 254 227 239 254 228 239 254 229 240 254 230 240 254 230 241 254 231 238 245 232 241 254 233 239 246 233 242 254 239 243 248 240 246 254 251 252 253 253 254 254 255 255 255]; mask:((Depth1Image new) width:12; height:12; bits:(ByteArray fromPackedString:'_>????????????????=?;0_OC0<\C0@O') ; yourself); yourself]
+!
+
+applicationDefinitionClassIcon
+    <resource: #programImage>
+
+    ^ self smallGrayPackageIcon
+!
+
+autoloadedClassBrowserIcon
+    "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 autoloadedClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#autoloadedClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary autoloadedClassBrowserIcon'
+        ifAbsentPut:[(Depth2Image new) width:13; height:11; bits:(ByteArray fromPackedString:'UUUUXEUUUTAY?=% V_?YPE''?6TAZUU%@V**)PE)UVTAZU=%@U%_YPEUUUT@b') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width:13; height:11; bits:(ByteArray fromPackedString:'_?A?<G?0_?A?<G?0_?A?<G?0_?@?<@@a') ; yourself); yourself]
+!
+
+containerClassBrowserIcon
+    "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 containerClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#containerClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary containerClassBrowserIcon'
+        ifAbsentPut:[(Depth4Image new) width:13; height:11; bits:(ByteArray fromPackedString:'@QDP@ADQ@@DQD@@QDP@AD@@@@AD@@Q@@@@@Q@@DP@@@@DP@AD@@@@AD@@Q@@@@@Q@@DP@@@@DP@AD@@@@AD@@QDP@ADQ@@DQD@@QDP@b') ; colorMapFromArray:#[0 0 0 0 127 127]; mask:((Depth1Image new) width:13; height:11; bits:(ByteArray fromPackedString:'^OA8<F@0XCA LF@0XCA LF@0^OA8<@@a') ; yourself); yourself]
+!
+
+dart13x11Icon
+    "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 dart13x11Icon inspect
+     ImageEditor openOnClass:self andSelector:#dart13x11Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary dart13x11Icon'
+        ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@H @@@@@@@BH @@@@@@H2H@@@@HH!!H2@@@@@BH!!H0@@@@@BH!!H @@@@@@@BH @@@@@@@BI@@@@@@@@DQ@@@@@@@@DP@AP@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 57 93 0 115 187 127 185 221 238 191 43]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'F@@\@C0@?@C<@G8@A0@C @G@@L@@H@@a') ; yourself); yourself]
+!
+
+dartClassBrowserIcon
+    <resource: #programImage>
+
+    ^ self dart12x12Icon
+"/    ^ self dart13x11Icon
+!
+
+enumTypeBrowserIcon
+    "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 enumTypeBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#enumTypeBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class enumTypeBrowserIcon'
+	ifAbsentPut:[(Depth2Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'(@@@NJ@@@C" @@@@(@@@@J(@J BB@B@@  @ NJ@@@@B @@@@(@@@@J@@@@@b') ; colorMapFromArray:#[0 0 0 127 127 127 255 0 0 255 255 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@F60[[@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+errorClassBrowserIcon
+    "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 errorClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#errorClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class errorClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@BH@@@@@@@@"@@@@@@@BH"@@@@@@@"H @@@@@@H"H@@@@@@BH"@@@@@@@"H @@@@@@@"@@@@@@@@@@@@@@@@@BH@@@@@@@@"@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A @F@@<@C0@O@@<@C0@F@@@@A @F@@@a') ; yourself); yourself]
+!
+
+exceptionClassBrowserIcon
+    "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 exceptionClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#exceptionClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class exceptionClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@BH@@@@@@@@"@@@@@@@BH"@@@@@@@"H @@@@@@H"H@@@@@@BH"@@@@@@@"H @@@@@@@"@@@@@@@@@@@@@@@@@BH@@@@@@@@"@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 110 110 110]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A @F@@<@C0@O@@<@C0@F@@@@A @F@@@a') ; yourself); yourself]
+!
+
+guiApplicationDefinitionClassIcon
+    <resource: #programImage>
+
+    ^ self smallGreenPackageIcon
+!
+
+javascriptClassBrowserIcon
+    <resource: #programImage>
+
+    ^ self javascript12x12Icon
+!
+
+libraryDefinitionClassIcon
+    <resource: #programImage>
+
+    ^ self smallYellowPackageIcon
+!
+
+nameSpaceBrowserIcon
+    "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 nameSpaceBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#nameSpaceBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class nameSpaceBrowserIcon'
+	ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@AO8C?DS:"?1D:(/<QN*J?DS*"/1D:(+<QN*J/DR*"+1AJ(*!!@DJJA@@T@E@@@UT@@@a') ; colorMapFromArray:#[0 0 0 190 190 0 194 194 194 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@G#1??7??_?=??7??_?=??7??O?8_?@?8@>@b') ; yourself); yourself]
+!
+
+notificationClassBrowserIcon
+    "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 notificationClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#notificationClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class notificationClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@BH@@@@@@@@"@@@@@@@BH"@@@@@@@"H @@@@@@H"H@@@@@@BH"@@@@@@@"H @@@@@@@"@@@@@@@@@@@@@@@@@BH@@@@@@@@"@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 0 127 255]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A @F@@<@C0@O@@<@C0@F@@@@A @F@@@a') ; yourself); yourself]
+!
+
+queryClassBrowserIcon
+    "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 queryClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#queryClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class queryClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@BH@@@@@@@@"@@@@@@@BH"@@@@@@@"H @@@@@@H"H@@@@@@BH"@@@@@@@"H @@@@@@@"@@@@@@@@@@@@@@@@@BH@@@@@@@@"@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 61 173 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A @F@@<@C0@O@@<@C0@F@@@@A @F@@@a') ; yourself); yourself]
+!
+
+sharedPoolBrowserIcon
+    "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 sharedPoolBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#sharedPoolBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class sharedPoolBrowserIcon'
+        ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@H"H"H"H @BH"H"H"H@@"H"H"H"@@H"H"H"H @BH"H"H"H@@"H"H"H"@@H"H"H"H @BH"H"H"H@@"H"H"H"@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 0 127 255]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A?<G?0_?A?<G?0_?A?<G?0_?@@@@@a') ; yourself); yourself]
+!
+
+smallGrayPackageIcon
+    "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 smallGrayPackageIcon inspect
+     ImageEditor openOnClass:self andSelector:#smallGrayPackageIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class smallGrayPackageIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@ADP@@DQ@@DPDP@Q@P@AD@DQD@D@@ADQDQDQ@@@@HRH D@@@@@D@@ @@@@H!!H H@@@@BHRHB@@@@@"D"@ @@@@H!!H @@@@@@@P@@@@@b') ; colorMapFromArray:#[0 0 0 132 0 132 153 153 153]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'NGA,4F^PO?@_8C? O>@?8C? O<@? @@a') ; yourself); yourself]
+!
+
+smallGreenPackageIcon
+    "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 smallGreenPackageIcon inspect
+     ImageEditor openOnClass:self andSelector:#smallGreenPackageIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class smallGreenPackageIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@BH @@H"@@H H @"@ @BH@H"H@H@@BH"H"H"@@@@D!!DPH@@@@@H@@P@@@@DRDPD@@@@AD!!DA@@@@@QHQ@P@@@@DRDP@@@@@@@ @@@@@b') ; colorMapFromArray:#[0 0 0 0 255 0 132 0 132]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'NGA,4F^PO?@_8C? O>@?8C? O<@? @@a') ; yourself); yourself]
+!
+
+smallOrangePackageIcon
+    "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 smallOrangePackageIcon inspect
+     ImageEditor openOnClass:self andSelector:#smallOrangePackageIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class smallOrangePackageIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@ADP@@DQ@@DPDP@Q@P@AD@DQD@D@@ADQDQDQ@@@@HRH D@@@@@D@@ @@@@H!!H H@@@@BHRHB@@@@@"D"@ @@@@H!!H @@@@@@@P@@@@@b') ; colorMapFromArray:#[0 0 0 132 0 132 255 139 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'NGA,4F^PO?@_8C? O>@?8C? O<@? @@a') ; yourself); yourself]
+!
+
+smallYellowPackageIcon
+    "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 smallYellowPackageIcon inspect
+     ImageEditor openOnClass:self andSelector:#smallYellowPackageIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class smallYellowPackageIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@ADP@@DQ@@DPDP@Q@P@AD@DQD@D@@ADQDQDQ@@@@HRH D@@@@@D@@ @@@@H!!H H@@@@BHRHB@@@@@"D"@ @@@@H!!H @@@@@@@P@@@@@b') ; colorMapFromArray:#[0 0 0 132 0 132 255 255 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'NGA,4F^PO?@_8C? O>@?8C? O<@? @@a') ; yourself); yourself]
+!
+
+startableClassBrowserIcon
+    "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 startableClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#startableClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class startableClassBrowserIcon'
+	ifAbsentPut:[(Depth2Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'**J*NJ*"*#"*!!J(@*!!T*@J(DJ B*DR(@*!!T*NJ(*J B*O2(@*+.*@J*** @b') ; colorMapFromArray:#[0 0 0 127 127 127 255 0 0 255 255 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@ @B@@\@C8@O @>@C8@H @>@A0@G@@@a') ; yourself); yourself]
+!
+
+testCaseClassIcon
+    "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 testCaseClassIcon inspect
+     ImageEditor openOnClass:self andSelector:#testCaseClassIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class testCaseClassIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@H @@@@@@@"D@@@@@@@HP@@@@@ @"D@@@@@H HP@@@@@AH"D@@@@@@AHP@@@@@@@A@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 56 142 51]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@C@@\@A AN@F0@_@@8@A@@@@@@a') ; yourself); yourself]
+!
+
+testCaseErrorIcon
+    <resource: #programImage>
+
+    ^ self ledGrayedRed10x11
+"/    ^ self ledDarkRed10x11
+"/    ^ self redThumbDownSmallIcon
+!
+
+testCaseFailedIcon
+    <resource: #programImage>
+
+    ^ self ledRed10x11
+"/    ^ self testCaseErrorIcon
+!
+
+testCasePassedIcon
+    <resource: #programImage>
+
+    ^ self ledGreen10x11
+"/    ^ self greenThumbUpSmallIcon
+!
+
+testCaseSkippedIcon
+    <resource: #programImage>
+
+    ^ self ledGrey10x11
+    "/ ^ self greenThumbUnknownSmallIcon
+!
+
+visualStartableClassBrowserIcon
+    "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 visualStartableClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#visualStartableClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class visualStartableClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A@P@@@@9&XPE&XP@NY!!C E&D@C&DN; E!!@@9!!@N@AXP@NXP8N@VD@C&DN; E!!@@9!!A&XAXP@NXPY&@VD@C1DVI!!DQ@@@@D"HP@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??#?>O?8??#?>O?8??#?>O?8??#?>@@a') ; yourself); yourself]
+!
+
+warningClassBrowserIcon
+    "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 warningClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#warningClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class warningClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@BH@@@@@@@@"@@@@@@@BH"@@@@@@@"H @@@@@@H"H@@@@@@BH"@@@@@@@"H @@@@@@@"@@@@@@@@@@@@@@@@@BH@@@@@@@@"@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 127 0]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A @F@@<@C0@O@@<@C0@F@@@@A @F@@@a') ; yourself); yourself]
+!
+
+webServiceClassBrowserIcon
+    "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 webServiceClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#webServiceClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class webServiceClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@ADQD@@@@@DQDQD@@@@QDQDQD@@ACMDP3MD@@P3MDP3M@@DL3QCL3P@ADL4P3L4@@QCMDL3Q@@@QDQCMD@@@@QDQDP@@@@@QDQ@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C8@_0C? _?A?<G?0_?A?<C? G<@O @@a') ; yourself); yourself]
+!
+
+windowClassBrowserIcon
+    "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 windowClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#windowClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'GenericToolbarIconLibrary class windowClassBrowserIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 11; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@;.;.;.8P@N??????D@C/?????1@@;?????<P@N??????D@C/?????1@@;?????<P@N??????D@@QDQDQDQ@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 13; height: 11; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??#?>O?8??#?>O?8??#?>O?8??#?>@@a') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-SystemBrowser-java'!
+
+javaClassBrowserIcon
+    "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 javaClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary javaClassBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+VU%YVU\OF@4YC5]YVU%YVU%YVP$MO4YFQ#<ABU%YVU%YVP$[R5YTUUQRQ0(IVU%YVU\MRUAXVE!!XVD=H@U]YVU$GPEEXVEMMS%!!LR$@PVU%YASYBVDMAPTEE
+QDP>AU%YVPDVI5 (EALSEA\\H@1YVU$EGQ)XJQ8"H!!H.C"PEVU%YDBD3M5 /I!!=XOR4*@E%YVU\JLC(4VE!!XMS02B%]YVU%YDP,#NC$;NS 1@!!EYVU%YVU$Q
+ERT+KB,%EQEYVU%YVU%YVU\F@0PCBE]YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVU%YVP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[108 168 129 51 130 77 54 131 79 64 137 88 66 139 90 70 143 94 84 152 106 90 155 112 92 156 113 130 179 146 36 118 62 46 124 70 51 129 75 57 134 80 88 156 109 93 158 113 99 162 119 129 178 144 162 201 174 45 124 68 46 125 69 47 125 70 48 126 70 51 129 73 75 146 96 74 144 94 119 174 135 50 128 71 54 132 74 59 135 79 63 137 82 142 189 154 62 136 79 62 136 80 62 135 80 70 142 87 71 143 88 82 150 98 107 167 122 143 190 154 195 221 201 226 239 229 82 150 96 86 154 100 86 153 100 93 156 106 171 207 179 188 216 194 84 151 97 87 153 100 88 153 100 94 156 106 218 234 221 230 241 232 82 150 94 241 247 242 96 160 105 124 178 132 121 174 129 133 184 140 140 188 147 240 247 241 89 153 97 104 164 111 97 160 103 96 158 102 158 198 161 220 234 221 103 162 106 109 166 112 119 174 120 128 179 128 123 177 122 121 174 119 135 184 133 129 179 125 225 239 224 145 190 140 179 210 176 188 217 185 190 218 187 159 199 154 160 199 155 187 216 183 194 220 191 198 222 195 176 208 171 201 208 199 255 255 255 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?<_?0?>A?0C>@@@@@@@@@b') ; yourself); yourself]
+!
+
+javaExceptionBrowserIcon
+    "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 javaExceptionBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaExceptionBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class javaExceptionBrowserIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+D!!HRD!!HC@@DRD!!HRD!!HRD!!HRD!!HR@0@AD!!HRD!!HRD!!HRD!!HRD L@@QHRA $IA!!HRD!!HRD!!HC@@DRD $EAP$RD!!HRD!!HR@0@AD!!HIAPTID!!HRD!!HRD L@@QHR
+B ,KB!!HRD!!HR@0HB@@HRD  PD@ RD!!HRD LA@@HRD!!HLDQDLD!!HRD!!HRD!!HRD!!HRA0<OA1HRD!!HRD!!HRD!!HRD!!HNC!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HR
+D!!HRD!!HRA $IA!!HRD!!HRD!!HRD!!HRD $MA@$RD!!HRD!!HRD!!HRD!!HNCPPND!!HRD!!HRD!!HRD!!HRA 8NA!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD @@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[40 98 150 81 128 170 110 150 185 194 211 226 255 223 95 255 234 145 228 221 192 218 204 156 184 149 37 190 156 40 188 153 39 255 226 134 180 143 35 255 223 127 170 130 30 207 167 62 254 215 119 254 207 108 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A0@G@@\<A30GO@\<G30^O@@<@A @@@@<@C0@O@@<@@@b') ; yourself); yourself]
+!
+
+javaPrivateClassBrowserIcon
+    "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 javaPrivateClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaPrivateClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class javaPrivateClassBrowserIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+XVE!!XQHWHAX!!E1I!!XVE!!XVE!!XQ@VPD]GQ4@JDFE!!XVE!!XQ@$SE]UU%USRALPXVE!!XQHVR%E XFA XEAIB!!I!!XVDNPUI XEQNS6AMR4DXXVE!!CC%CXDQBP$IF
+QTT?CFE!!XP(^K6@1GA,[GA<%JQU!!XVDLI"I L"\+J1$4F" QXVE!!FB(7N&@5K%)ZV%)ZV%)!!XRLSM#48XFAYWE1\WE1YXVE!!C1P,N30>V51^W%9\V6E!!XVDO
+GR43L@HGA TFA0I!!XVE!!XQHMB0$CW54@@E<AXVE!!XVE!!XVE!!AE!!XVE!!XAFE!!XVE!!XVE!!XP HB@ HB@!!!!XVE!!XVE!!XVE!!XVE!!XVE!!XP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[231 96 97 200 41 48 200 48 52 200 41 49 200 29 44 242 77 92 241 77 92 245 118 128 200 25 42 152 195 167 51 130 77 64 137 88 70 143 94 84 152 106 90 155 112 126 179 144 129 181 146 155 198 169 205 226 212 36 118 62 46 124 70 51 129 75 57 134 80 93 158 113 99 162 119 162 201 174 166 204 178 45 124 68 46 125 69 47 125 70 48 126 70 51 129 73 75 146 96 74 144 94 119 174 135 216 233 221 50 128 71 54 132 74 59 135 79 63 137 82 155 198 166 62 136 79 62 136 80 62 135 80 70 142 87 82 150 98 107 167 122 143 190 154 164 203 173 195 221 201 226 239 229 86 154 100 171 207 179 188 216 194 84 151 97 94 156 106 218 234 221 82 150 94 241 247 242 96 160 105 124 178 132 121 174 129 167 204 172 89 153 97 104 164 111 97 160 103 96 158 102 158 198 161 220 234 221 103 162 106 109 166 112 119 174 120 128 179 128 123 177 122 121 174 119 135 184 133 129 179 125 225 239 224 145 190 140 179 210 176 188 217 185 190 218 187 159 199 154 160 199 155 187 216 183 194 220 191 198 222 195 176 208 171 231 147 139 201 67 60 201 71 62 201 62 58 246 146 142 231 96 96 245 124 124 237 131 131 255 255 255 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?>_?8??!!?>C?8@? C>@@@b') ; yourself); yourself]
+!
+
+javaPrivateEnumBrowserIcon
+    "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 javaPrivateEnumBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaPrivateEnumBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'GenericToolbarIconLibrary class javaPrivateEnumBrowserIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+QDQDQC\#F1PZH3]DQDQDQDQDQB0TI"@ HBXRKDQDQDQDQB0PJ#D1LSD1I 0,QDQDQC\TJR%BP$IBP#H D#]DQDP!!IBP$P$H6K2<''IBP%QDQDFQ0"H$IBKRH"
+H"T FTQDQAHOCP5BP$IBP" SE!!EDQDPYEQTUP$H0NC JL3L5QDQDIQX\GDIBB30<OC0<OC1DQC\LG!!9BP$L<O#8>O#8;QDQDJ04XK"89OS9@PD@>OTQDQDP+
+C!!4 BPHGA TFA0IDQDQDQC\_E3PCPS<@@DDAQDQDQDQDQDQDAC(:N#(:BDQDQDQDQDQDQ@ HB@ HB@!!DQDQDQDQDQDQDQDQDQDQDQ@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[231 96 97 200 41 48 200 48 52 200 41 49 200 29 44 242 77 92 241 77 92 245 118 128 200 25 42 217 201 182 219 204 186 230 219 206 140 89 32 142 92 36 142 93 37 143 93 38 144 94 39 144 95 40 145 96 41 146 97 43 147 99 45 147 100 47 148 101 48 149 103 50 152 107 56 153 108 57 154 109 60 155 111 62 158 115 67 158 116 68 159 117 69 160 118 71 161 119 73 163 123 77 165 125 81 165 126 81 166 127 83 169 131 88 170 133 91 176 141 102 178 144 106 180 147 110 185 154 119 186 156 122 187 157 124 190 161 129 194 167 137 199 174 146 204 182 157 206 184 160 209 188 165 212 193 172 213 195 174 214 196 176 216 199 180 225 211 196 226 213 199 231 220 208 231 147 139 201 67 60 201 71 62 201 62 58 246 146 142 231 96 96 245 124 124 237 131 131 255 254 254 255 255 255 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?>_?8??!!?>C?8@? C>@@@b') ; yourself); yourself]
+!
+
+javaPrivateInterfaceBrowserIcon
+    "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 javaPrivateInterfaceBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaPrivateInterfaceBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class javaPrivateInterfaceBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+TUEQTTPVCP,NE$QQTUEQTUEQTS<KD!!TUEQHKO5EQTUEQTS<3OQ-GQ4\[OSL?TUEQTRD,NQ1PTEAPB!!0;KBEQTUDVD3 8FEAPBS 8NAPYTUEQC4XLC@1PTDLL
+CCT5C5EQTR<(J"\''TE@ I2\*IB9QTUDOKR,&I%APPT@^GQ5BTUEQFSH0LTUPTD)JR$)JR$)QTRH#M#)PTEAJSD1LSD1ITUEQF"TQOC0_R41NS$9LR5EQTUDZ
+JS\PO HGA TFA0IQTUEQTTPWMA<CS44@@D<ATUEQTUEQTUEQAD!!HRD!!HBEEQTUEQTUEQTP HB@ HB@!!QTUEQTUEQTUEQTUEQTUEQTP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[231 96 97 200 41 48 200 48 52 200 41 49 200 29 44 242 77 92 241 77 92 245 118 128 200 25 42 197 188 224 215 209 233 112 94 176 111 93 174 114 96 177 113 95 176 115 97 177 117 100 177 120 102 180 125 108 184 125 108 183 130 114 185 143 128 194 151 136 198 149 135 197 158 145 203 156 143 201 159 146 203 165 153 207 168 156 208 168 156 207 167 155 205 171 160 209 174 164 209 220 215 236 226 222 240 85 66 159 90 71 159 93 74 164 90 72 159 89 71 158 92 73 160 94 75 164 93 74 161 93 75 161 97 79 167 96 79 166 97 79 166 98 80 167 98 80 165 96 79 162 101 83 168 101 84 169 108 91 173 107 91 172 111 94 174 117 100 178 131 116 188 137 122 191 134 120 187 139 125 191 138 124 190 142 128 193 154 142 199 161 149 204 167 156 207 174 165 210 181 172 216 185 176 218 204 198 228 94 78 161 105 89 172 174 165 212 231 147 139 201 67 60 201 71 62 201 62 58 246 146 142 231 96 96 245 124 124 237 131 131 255 255 255 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?>_?8??!!?>C?8@? C>@@@b') ; yourself); yourself]
+!
+
+javaProtectedClassBrowserIcon
+    "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 javaProtectedClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaProtectedClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class javaProtectedClassBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+X6M#X0(PE 8WD@)#X6M#X6M#X0\NM34=OS\@A6M#X6M#X0\\P$5KSD-IO ,GX6M#X0(NPD]"X&I"X$X?@@)#X6LEND!!"X$)DQVICPS QX6M#@2<:X#,9NS$<
+LSD6@6M#X0@UIVH(D1HRD1 _I 5#X6LCGQ)"JQ8!!HP<(T%HHX6M#DR@-LFH+IA%"T$9NT&M#X1,KKCP.X&I"T5APTD=TX6M#A 0"L#L5VUUZV%)ZUUE#X6LF
+EBL*I5!!_XVE!!XU=WX6M#X0(D@PHIW&A XFAVX6M#X6M#X6M#X6M\XFA]X6M#X6M#X6M#X6M#X5-[X6M#X6M#X6M#X6M#X6M#X6M#X0@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[51 130 77 64 137 88 66 139 90 70 143 94 84 152 106 90 155 112 126 179 144 129 181 146 155 198 169 180 212 191 205 226 212 36 118 62 46 124 70 51 129 75 57 134 80 79 149 101 93 158 113 99 162 119 45 124 68 46 125 69 47 125 70 48 126 70 75 146 96 74 144 94 83 151 103 109 168 126 119 174 135 216 233 221 50 128 71 59 135 79 63 137 82 144 191 156 62 136 80 62 135 80 70 142 87 82 150 98 107 167 122 143 190 154 150 194 161 164 203 173 195 221 201 226 239 229 86 154 100 188 216 194 84 151 97 94 156 106 218 234 221 82 150 94 241 247 242 84 151 94 96 160 105 124 178 132 121 174 129 167 204 172 89 153 97 104 164 111 97 160 103 96 158 102 158 198 161 220 234 221 109 166 112 119 174 120 128 179 128 123 177 122 121 174 119 135 184 133 129 179 125 225 239 224 145 190 140 179 210 176 188 217 185 190 218 187 159 199 154 160 199 155 187 216 183 194 220 191 198 222 195 176 208 171 255 242 176 255 233 145 255 234 145 183 147 37 190 156 40 187 152 39 187 153 39 255 230 152 174 135 31 179 141 34 178 141 34 184 147 36 255 222 125 167 126 28 170 129 29 170 130 30 174 135 32 254 219 140 254 222 150 254 207 108 255 255 255 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?<_?8??1??C?8@O@@X@@@b') ; yourself); yourself]
+!
+
+javaProtectedEnumBrowserIcon
+    "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 javaProtectedEnumBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaProtectedEnumBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class javaProtectedEnumBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+Q4]GQ4P-IQ4$KTQGQ4]GQ4]GQ3\]LB(*J#@\M4]GQ4]GQ3\ZMS4=OS4=LAX7Q4]GQ4P]L3MFQ$YFQ#8*GDQGQ4\+K"8.Q$YCN3,1K"8/Q4]GH2X,KDYFNB0,
+KB<*H4]GQ10YE1]FQ$YFQ#H?PQ-GQ4\#G!!8^Q$X<MCPUA@QBQ4]GK1<&I$YFNRYCA@@@AD]GQ4PVJB!!FQ$YFAPHB@ DFQ4]GM!!\"N#)EB0\LC@0LA0MGQ4\6
+FB\*E@(QD1LSD1DIQ4]GQ4P)HBE@DAHRD!!HHQ4]GQ4]GQ4]GQ4\ND!!HOQ4]GQ4]GQ4]GQ4]GQ04MQ4]GQ4]GQ4]GQ4]GQ4]GQ4]GQ0@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 242 176 255 233 145 255 234 145 183 147 37 190 156 40 187 152 39 187 153 39 255 230 152 174 135 31 179 141 34 178 141 34 184 147 36 255 222 125 167 126 28 170 129 29 170 130 30 174 135 32 254 219 140 254 222 150 254 207 108 217 201 182 219 204 186 140 89 32 142 92 36 142 93 37 143 93 38 144 94 39 144 95 40 145 96 41 147 99 45 147 100 47 148 101 48 149 103 50 151 104 53 152 107 56 153 108 57 154 109 60 155 111 62 158 115 67 158 116 68 159 117 69 160 118 71 161 119 73 163 123 77 165 125 81 165 126 81 166 127 83 169 131 88 170 133 91 176 141 102 178 144 106 180 147 110 182 150 114 185 154 119 186 156 122 187 157 124 190 161 129 192 164 133 194 167 137 199 174 146 204 182 157 206 184 160 209 188 165 211 192 170 213 194 173 212 193 172 214 196 176 216 199 180 225 211 196 231 220 208 255 254 254 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?<_?8??1??C?8@O@@X@@@b') ; yourself); yourself]
+!
+
+javaProtectedInterfaceBrowserIcon
+    "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 javaProtectedInterfaceBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaProtectedInterfaceBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class javaProtectedInterfaceBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+U%YVU#4MA@HECS5VU%YVU%YVU# BBP0LC@$BNEYVU%YVU# -M1I@PD@RM248U%YVU!!0&L1QUUUUU@QP5I!!1VU%XMB#H2C5UU@CH2L ,PU%YVA#<C@0MUUS0C
+@2</A%YVU"$"IBD!!UUTYHRDUD2!!VU%XFI2T HEUUN"@VQTT;U%YVDB0*J39UUQ(9QTEAQUYVU!!4^LCQUUUUUQ$MCP4IGU%YVDQ<HM#XWSD!!MST5MRDQVU%XQ
+H3DGF4-RUEQTUEIJU%YVU#4NK"\XTUMST5MIU%YVU%YVU%YVU%YOT5MPU%YVU%YVU%YVU%YVU$9NU%YVU%YVU%YVU%YVU%YVU%YVU @@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[197 188 224 215 209 233 112 94 176 111 93 174 114 96 177 113 95 176 115 97 177 117 100 177 120 102 180 125 108 184 125 108 183 130 114 185 143 128 194 151 136 198 149 135 197 158 145 203 156 143 201 159 146 203 165 153 207 167 155 207 168 156 208 168 156 207 167 155 205 171 160 209 178 167 213 174 164 209 177 167 212 183 173 216 220 215 236 226 222 240 85 66 159 93 74 164 90 72 159 89 71 158 92 73 160 94 75 164 93 74 161 93 75 161 97 79 167 96 79 166 97 79 166 98 80 167 98 80 165 96 79 162 101 83 168 101 84 169 108 91 173 107 91 172 111 94 174 117 100 178 131 116 188 137 122 191 134 120 187 139 125 191 138 124 190 142 128 193 161 149 204 169 159 207 174 165 210 181 172 216 185 176 218 204 198 228 94 78 161 105 89 172 174 165 212 255 242 176 255 233 145 255 234 145 183 147 37 190 156 40 187 152 39 187 153 39 255 230 152 174 135 31 179 141 34 178 141 34 184 147 36 255 222 125 167 126 28 170 129 29 170 130 30 174 135 32 254 219 140 254 222 150 254 207 108 255 255 255 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?<_?8??1??C?8@O@@X@@@b') ; yourself); yourself]
+!
+
+javaPublicClassBrowserIcon
+    "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 javaClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^self javaClassBrowserIcon
+
+    "Created: / 23-10-2011 / 14:41:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+javaPublicEnumBrowserIcon
+    "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 javaPublicEnumBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaPublicEnumBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class javaPublicEnumBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+LC@0LB8ZD@ OF"80LC@0LC@0LBTHGQXVE!!4FIS@0LC@0LBTDH2,+J2,+GP@%LC@0LB8HHRD/K2</K20VA"80LC@WF1,[K2<-JR$_F1,\LC@0C!!DYFR</I!!$Y
+FQ0VC#@0L@XC@PD/K2</K2@GB T0LC@NBP$IK2<*H"H[BP$NLC@0G@(QDR</I1DQDQDQG#@0LB8@D1L/K2</K20V@B80LC@0I@DMJB (JB ]A2P0LC@0LC@$
+@!!HVEQXR@"P0LC@0LC@0LB8TB00KFB80LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0L@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[140 89 32 142 92 36 142 93 37 143 93 38 144 94 39 144 95 40 145 96 41 146 97 43 147 99 45 147 100 47 148 101 48 149 103 50 151 104 53 152 107 56 153 108 57 154 109 60 155 111 62 158 115 67 158 116 68 159 117 69 160 118 71 161 119 72 161 119 73 163 123 77 164 124 79 165 125 81 165 126 81 166 127 83 169 131 88 170 133 91 175 139 100 176 141 102 178 144 106 180 147 110 182 150 114 185 154 119 186 156 122 187 157 124 190 161 129 192 164 133 194 167 137 199 174 146 204 182 157 206 184 160 209 188 165 216 199 180 225 211 196 255 254 254 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?<_?0?>A?0C>@@@@@@@@@b') ; yourself); yourself]
+!
+
+javaPublicInterfaceBrowserIcon
+    "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 javaPublicInterfaceBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaPublicInterfaceBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class javaPublicInterfaceBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+P4MCP38NAPLFC#9CP4MCP4MCP3,CB 4MCP(CN4MCP4MCP3,.N!!UAPTDUN"8;P4MCP1$%M!!YBP$IB@!!X8IQ%CP4LNB3T5DTIB@CT5MP0RP4MCA4@DA@QBP#4D
+AC@0A4MCP2  H!!<_P$HWG1<"GB]CP4LGI"P^G$IBOA8_H"LGP4MCD"4*J3=BP!! ?J2,,EDMCP1([L3]BP$IB@S\2F1%CP4MCD14INS$9NS$1JQMCP4MCP4LS
+HSPHB@ 4HQMCP4MCP4MCP38OK2X/DC9CP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP4MCP0@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[197 188 224 197 189 222 215 209 233 112 94 176 111 93 174 114 96 177 113 95 176 115 97 177 117 100 177 120 102 180 125 108 184 125 108 183 130 114 185 143 128 194 151 136 198 149 135 197 152 138 199 158 145 203 156 143 201 159 146 203 162 150 204 165 153 207 168 156 208 174 164 209 177 167 212 220 215 236 226 222 240 85 66 159 90 71 159 93 74 164 90 72 159 89 71 158 92 73 160 94 75 164 93 74 161 92 74 160 93 75 161 97 79 167 96 79 166 97 79 166 98 80 167 100 82 168 98 80 165 96 79 162 100 82 167 101 83 168 101 84 169 108 91 173 107 91 172 108 92 172 113 96 177 111 94 174 117 100 178 131 116 188 137 122 191 134 120 187 139 125 191 138 124 190 142 128 193 161 149 204 174 165 210 185 176 218 204 198 228 94 78 161 105 89 172 174 165 212 255 255 255 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?<_?0?>A?0C>@@@@@@@@@b') ; yourself); yourself]
+!
+
+javaRuntimeExceptionBrowserIcon
+    "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 javaRuntimeExceptionBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaRuntimeExceptionBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class javaRuntimeExceptionBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+D1LSD1LMB ,SD1LSD1LSD1LSD1LSCP(KD1LSD1LSD1LSD1LSD04JB1LSB@8NBALSD1LSD1LMB ,SD08OC08SD1LSD1LSCP(KD1LND!!DND1LSD1LSD04JB1LS
+D@@@DALSD1LSCP0LB 0SD0DB@0DSD1LSD04KB 0SD1LGAPPGD1LSD1LSD1LSD1LSA 8NA!!LSD1LSD1LSD1LSD1LGA1LSD1LSD1LSD1LSD1LSD1LSD1LSD1LS
+D1LSD1LSBP8NBQLSD1LSD1LSD1LSD08QDP8SD1LSD1LSD1LSD1LGDQDGD1LSD1LSD1LSD1LSB@\GBALSD1LSD1LSD1LSD1LSD1LSD0@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[244 120 123 200 39 47 244 102 111 243 103 111 243 88 99 242 87 99 233 164 170 200 25 42 242 197 202 244 208 212 40 98 150 81 128 170 110 150 185 194 211 226 201 71 62 246 146 142 201 58 56 246 136 134 246 135 135 255 255 255]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A0@G@@\<A30GO@\<G30^O@@<@A @@@@<@C0@O@@<@@@b') ; yourself); yourself]
+!
+
+javaUndeclaredClassBrowserIcon
+    "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 javaUndeclaredClassBrowserIcon inspect
+     ImageEditor openOnClass:self andSelector:#javaUndeclaredClassBrowserIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary javaUndeclaredClassBrowserIcon'
+        ifAbsentPut:[(Depth8Image new) width:16; height:16; bits:(ByteArray fromPackedString:'
+@@@@@@DB@0PE@ D@@@@@@@@@@@XDA0 HB@\IA @@@@@@@@XJB00MC 4OB1@F@@@@@@DDDQH@@@@@@ALTBPD@@@@UE!!\@@A YF @[GAX]@@@@G!!< @BD"H"H#
+IBP%G @@@@$&I0@(JR(*JR,,KR8@@@@^K3@@LSH3L3P5M#\^@@@@GS 9N @;OC4@O#=@PP@@@@DPP#AC@@@@QDT%D@D@@@@@Q$]HRT)KR$%LSTX@@@@@@@AF
+S$<%TBUOS$X@@@@@@@@@@@EQT%MRU@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 255 255 205 205 205 134 134 134 119 119 119 105 105 105 118 118 118 161 161 161 140 140 140 152 152 152 101 101 101 98 98 98 158 158 158 194 194 194 209 209 209 212 212 212 182 182 182 87 87 87 152 152 152 206 206 206 205 205 205 155 155 155 131 131 131 135 135 135 182 182 182 204 204 204 171 171 171 197 197 197 233 233 233 164 164 164 138 138 138 116 116 116 124 124 124 182 182 182 228 228 228 133 133 133 143 143 143 138 138 138 128 128 128 97 97 97 172 172 172 211 211 211 95 95 95 94 94 94 100 100 100 102 102 102 108 108 108 100 100 100 106 106 106 153 153 153 234 234 234 109 109 109 107 107 107 186 186 186 193 193 193 130 130 130 115 115 115 108 108 108 132 132 132 244 244 244 205 205 205 144 144 144 171 171 171 244 244 244 132 132 132 124 124 124 146 146 146 125 125 125 227 227 227 236 236 236 169 169 169 159 159 159 95 95 95 114 114 114 135 135 135 157 157 157 164 164 164 127 127 127 102 102 102 96 96 96 124 124 124 127 127 127 127 127 127 110 110 110 112 112 112 132 132 132]; mask:((ImageMask new) width:16; height:16; bits:(ByteArray fromPackedString:'C>@_<C?8_?1??G?<_?1??G?<_?0?>A?0C>@@@@@@@@@b') ; yourself); yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-UIPainter'!
+
+copyWidgetIcon
+    <resource: #programImage>
+
+    ^ self copy22x22Icon
+!
+
+cutWidgetIcon
+    <resource: #programImage>
+
+    ^ self cut22x22Icon
+!
+
+deleteWidgetIcon
+    <resource: #programImage>
+
+    ^ self delete22x22Icon
+!
+
+gridAlignIcon
+    <resource: #programImage>
+
+    ^ self gridAlign16x16Icon
+!
+
+gridIcon
+    <resource: #programImage>
+
+    ^ self grid16x16Icon
+!
+
+loadFromMethodIcon
+    <resource: #programImage>
+
+    ^ self loadFromMethod22x22Icon
+!
+
+moveWidgetDownIcon
+    <resource: #programImage>
+
+    ^ self down22x22Icon
+!
+
+moveWidgetDownRightIcon
+    <resource: #programImage>
+
+    ^ self downRight22x22Icon
+!
+
+moveWidgetLeftDownIcon
+    <resource: #programImage>
+
+    ^ self leftDown22x22Icon
+!
+
+moveWidgetUpIcon
+    <resource: #programImage>
+
+    ^ self up22x22Icon
+!
+
+newWindowSpecIcon
+    <resource: #programImage>
+
+    ^ self newWindowSpec24x24Icon
+!
+
+pasteWidgetIcon
+    <resource: #programImage>
+
+    ^ self paste22x22Icon
+!
+
+saveAsMethodAsIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethod22x22Icon
+!
+
+saveAsMethodIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethod22x22Icon
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-tools-misc'!
+
+errorIcon
+    <resource: #programImage>
+
+    ^ self error32x32Icon
+!
+
+newDataSetIcon
+    <resource: #programImage>
+
+    ^ self newDataSet24x24Icon
+!
+
+newRowIcon
+    <resource: #programImage>
+
+    ^ self newMenuItem22x22Icon
+!
+
+removeRowIcon
+    <resource: #programImage>
+
+    ^ self cutMenuItem22x22Icon
+!
+
+warnIcon
+    <resource: #programImage>
+
+    ^ self warn32x32Icon
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-versions'!
+
+versionA12x12
+    "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 versionA12x12 inspect
+     ImageEditor openOnClass:self andSelector:#versionA12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionA12x12'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<+KR8/LCD2L3<?O3<?J"T%IRX''JB0?O3<?O18 HRD!!H2P)O3<?O3<RE1\[F14_H#<?O3<?A@LLD1DQE!!0?O3<?
+O0HPCP(FB@TNO3<?O3<GF!!$XEQPMBS<?O3<?@@<NC ,KB0D?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O0@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[118 148 84 116 158 86 107 162 80 106 167 47 110 163 75 107 168 48 106 169 57 115 166 71 109 170 51 104 171 73 109 172 60 111 170 74 112 173 54 107 176 55 115 173 77 124 173 71 114 177 65 124 176 50 127 172 85 123 176 58 111 180 59 113 182 61 127 179 53 129 181 55 125 185 58 127 186 59 129 187 51 135 186 52 134 184 81 136 187 53 141 183 81 138 188 54 145 187 46 148 190 49 150 189 73 158 193 53 154 195 54 162 195 47 165 198 50 169 202 54 171 204 56 171 202 80 168 203 102 191 213 121 193 221 91 201 229 99 203 231 101 208 231 109 215 239 123 217 242 134 226 244 137 235 253 145 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@O<@?0C?@O<@?0C?@O<@?0@@@@@@@@@b') ; yourself); yourself]
+!
+
+versionA16x16
+    "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 versionA16x16 inspect
+     ImageEditor openOnClass:self andSelector:#versionA16x16
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionA16x16'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DLQ;_W7F1<#R4-_T5]WZG2[%9._&:>/,;^;/<OG2<<T 7;Z:/K6<0LGA8NK#9N)9F-6(+*:1-[V5*;V>/;?"^A''P^*J#+[B0*KF7-;F+02 X2(2R%9^ ^*N%
+(:Z0+]0''E<&H H*J")JU%)ZU)9^''IQY-SFQ$"H"@ XFJ$)JR''"PRM$A@QU]XT5NB (RD Y0#B3\,LR9@QDQERT%WVE!!1H 1-TC$9LSD1K#8.QDUE[BDN[51[
+VT=OO#T>K"8.KC8^CGY&YV!!"W%1[T%APTC)+GAON+I*X&I.[Z&%)W%9^\A4U6M;O3,;L3G]7]''I3]WT[@ADOBP$IBP$EAPTB@ ,V@P@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[30 49 18 35 64 22 53 108 28 58 107 28 59 107 28 57 108 28 59 108 29 59 109 29 59 110 30 60 109 29 61 110 30 60 106 33 63 106 37 62 106 38 59 103 43 67 108 28 70 87 32 70 101 35 64 106 35 69 106 34 68 106 35 70 100 40 68 108 41 77 112 43 82 115 39 86 118 39 94 121 45 75 117 54 71 126 50 72 123 50 74 126 50 103 117 41 98 124 43 80 129 54 87 133 53 98 132 47 106 136 45 111 140 47 109 131 49 119 146 52 124 150 50 111 167 50 106 171 49 108 170 50 108 170 51 109 171 51 107 169 52 105 171 53 106 170 52 106 169 54 108 170 52 111 171 53 108 172 53 111 173 55 107 162 63 107 167 62 108 170 57 105 173 56 107 175 56 107 175 57 109 174 57 109 175 57 109 173 58 108 170 60 112 171 53 114 170 52 112 172 53 115 173 52 114 172 54 117 173 52 116 172 53 118 173 53 117 173 54 120 174 53 120 174 54 121 175 54 121 174 56 108 176 54 108 176 55 107 177 56 108 177 56 109 178 57 111 179 59 125 177 50 124 176 51 126 178 51 123 176 53 124 176 54 124 177 54 112 177 58 113 179 58 113 179 59 118 179 58 117 180 57 118 181 56 116 181 58 119 182 58 117 178 62 117 183 60 126 179 56 125 178 58 123 185 57 127 186 57 121 184 60 121 184 61 122 185 60 125 185 61 108 172 64 116 174 67 115 168 69 113 172 69 118 174 76 113 176 70 125 179 65 123 183 70 123 183 71 124 184 71 125 182 74 125 183 74 124 184 72 131 155 47 138 159 53 146 189 44 146 165 61 144 168 60 146 169 61 130 182 48 131 182 50 131 182 51 132 183 49 129 178 52 131 178 53 132 179 53 131 180 52 129 181 54 131 182 54 131 183 54 134 184 51 133 184 53 134 185 54 139 187 48 136 186 50 142 187 50 136 185 53 138 185 52 136 186 53 139 187 52 138 187 53 141 187 53 142 187 54 140 188 52 143 188 52 130 188 56 131 189 56 133 190 56 128 187 61 135 184 63 129 188 60 141 188 60 146 188 48 145 188 51 144 189 51 147 189 50 148 190 49 150 190 50 151 191 50 151 191 51 145 189 56 154 192 45 152 193 46 158 196 44 159 197 47 137 193 55 150 192 50 154 192 49 152 193 50 152 193 51 157 194 48 156 194 49 158 196 48 159 197 48 159 197 49 166 198 43 160 195 49 160 198 48 167 199 51 169 199 49 170 198 51 170 199 53 171 199 53 163 200 48 165 200 50 174 203 57 175 203 58 175 203 59 168 202 63 141 159 72 149 167 68 147 172 66 149 174 71 152 173 75 129 179 70 138 184 65 130 187 75 131 187 75 131 188 74 134 190 73 137 187 72 146 188 65 149 191 64 154 174 81 154 175 81 154 175 89 158 174 89 128 181 87 156 176 87 144 186 87 160 175 91 163 176 89 139 193 75 158 196 67 157 193 69 145 196 77 168 201 69 177 204 64 177 207 68 183 208 69 186 211 72 190 214 79 190 218 95 193 221 77 194 221 80 195 221 81 196 223 86 194 218 92 197 224 89 201 226 93 205 227 99 206 229 104 207 230 110 210 233 115 215 236 118 220 239 126 226 243 131]; yourself]
+!
+
+versionA24x24
+    "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 versionA24x24 inspect
+     ImageEditor openOnClass:self andSelector:#versionA24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionA24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@",2L3T8MCP:O#(<OC0<O349M3,7M#XEG.[4;/G1<_O6=/W7>_''9>?/;?O3=??80G>O$9>#(:N#):^''/;^;0<OK5=?_8>O(0FMSH2</M3\7Q3]GW5=_W6-3!!
+8.K+9^0/G]''J,<C@0LCH0LCS2L#H2MOU6MWW7.(1GKB1.*65.LGA0\GA0\GA0\GN2\CH4>@.F:2/)Z6-+Z65.K.8.++@0LC@0LB=4=4-F96#(JJ#+Z6-+Z6-
++Z6;.;.;.;::1=X,FX.Z(I2\''I2#(:J"+Z6-+Z6-+Z6-.]@,FXVF&X&I&Y&Y&ZF!!(:N"(*N#+:>-+<H*E7A(!!(RD!!HRO&Y&Y&Y&Y&Y2\(:F );P)E%YJXGE9
+^W6D!!HR@"X&I"Y&Y$)&Y&[P''D4%AQ6A Y6=/]&=/]''ZC 8NC 8&I%JP&E$%AT4!!HT6E*\WE/[6=/[6=6]''6@!!I,$EDI]S5=PT5MSU5]\XVA''Y6]''Z&==Z'',(
+E$%-YE=_UT9KR4!!HSEATU6E!!Y6)*ZG,%DDY4X65.X6Q_W55]T5APT5MSSD1SUFX"B4VH[F13YV9$YFQ$YVE#W5]ST5MSSE("C5J*%YFN!!8I<\61,[&9.[&Q$
+YFQ$WVH#D5F2$I^X%YVQ$YFQ[G13\7M.[&Q2WU("DU/C*9:^%9^W&IVX&I"U$YE:^''),^E$!!EWW_6=KR3LR</K2<)*Z&)*Z&)*Z*-8D @4BJZ6-;W&Y&W&Y^
+W%9^W%9^W%9Q_$PZ@@PFCP(IC@8NC@8LC@0LC@$IBP$LCP A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 10 4 0 21 0 16 31 1 26 46 7 30 55 9 45 56 0 33 62 1 24 66 0 34 64 12 18 70 0 25 68 0 26 66 19 26 69 0 33 68 0 28 71 1 31 69 15 29 69 22 39 68 8 29 72 1 34 70 9 29 72 10 39 69 16 36 72 11 36 73 20 51 72 6 46 74 15 42 74 27 50 77 10 54 76 18 57 78 12 64 79 15 63 83 10 51 88 34 47 90 28 54 97 35 48 99 35 64 98 30 58 101 38 73 99 25 77 102 29 66 107 37 81 105 25 85 109 29 88 109 44 90 114 34 94 117 29 96 118 21 102 118 23 102 119 32 100 122 26 111 123 45 108 125 38 108 129 34 112 128 34 116 127 49 116 129 57 111 133 38 113 132 59 112 135 47 119 132 60 116 134 54 116 135 62 114 137 49 118 136 56 118 148 84 103 159 57 102 161 65 103 165 45 116 158 86 112 160 79 107 162 80 111 165 47 106 167 47 110 163 75 108 165 62 105 167 56 107 168 48 108 169 49 101 171 50 104 171 42 106 169 57 115 166 71 113 166 77 109 170 51 107 170 58 101 172 59 117 165 84 110 171 52 110 169 72 108 169 79 104 171 73 122 166 72 111 172 53 109 172 60 111 170 74 105 174 53 118 171 53 112 173 54 106 173 75 111 174 62 107 176 55 114 175 56 115 173 77 120 174 56 119 174 64 108 178 57 122 175 57 124 173 71 116 177 58 114 177 65 110 179 58 124 176 50 127 172 85 123 176 58 112 180 51 111 180 59 120 176 73 133 171 85 125 177 51 118 179 59 116 179 67 124 178 60 121 180 53 119 178 81 113 182 61 127 179 53 130 175 87 133 178 53 129 180 45 122 178 95 115 184 63 135 179 55 129 181 55 134 177 83 128 181 63 122 183 63 124 181 77 131 182 47 138 176 90 136 178 77 124 184 56 132 183 48 119 186 57 131 183 57 127 185 49 125 185 58 139 182 50 133 184 49 132 184 58 127 186 59 134 185 50 129 187 51 128 187 60 135 186 52 134 186 60 134 184 81 136 187 53 141 183 81 131 189 53 142 186 53 139 188 45 138 188 54 145 187 46 144 187 55 144 185 76 148 189 37 130 191 71 140 190 56 147 189 47 146 189 56 129 192 79 137 193 49 145 187 85 148 190 49 131 193 73 147 190 58 151 186 86 153 189 58 138 192 73 156 190 40 150 189 73 151 192 51 140 194 75 137 194 89 153 194 53 151 194 62 154 195 44 158 193 53 142 196 77 157 196 35 154 195 54 161 194 45 162 195 47 156 197 47 156 194 79 146 198 72 141 200 73 164 197 49 158 199 49 157 199 58 165 198 50 160 200 50 164 198 59 167 199 41 149 201 75 171 197 51 161 201 41 166 200 52 166 197 83 173 199 53 152 204 78 169 202 54 167 201 93 171 204 56 171 202 80 177 203 58 172 205 57 168 203 102 177 205 68 158 210 83 184 204 69 176 206 84 181 208 71 165 211 93 181 209 80 188 209 73 191 211 76 181 214 105 189 216 78 193 215 95 191 213 121 189 220 65 193 219 73 194 221 84 193 221 91 199 220 92 198 221 100 202 222 86 203 224 96 199 226 88 205 226 98 201 229 99 205 228 106 203 231 101 206 230 115 208 231 109 206 234 104 212 235 113 221 237 124 215 239 123 220 242 120 217 242 134 226 244 137 226 247 146 235 253 145 241 254 154]; yourself]
+!
+
+versionAB12x12
+    "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 versionAB12x12 inspect
+     ImageEditor openOnClass:self andSelector:#versionAB12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionAB12x12'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=FS%AQUEUVV''=?_7=?O",+J284NT!!?_7=?_1<"H2L#JB$<_7=?_7<SFA \GA8 IE]XVU-RA@LMEAHRE15LST=O
+T0HQC (FB@TOQ4%IR$,GF1(YE!!TNBTEBP4ME@A@OC0,KB0D;OS4?NG=?_7=?L3D*IRX&I21?_7=?_4@:N#X1LR4!!_7=?_7=DMS\2L"<0C@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[118 148 84 116 158 86 107 162 80 106 167 47 110 163 75 107 168 48 106 169 57 115 166 71 109 170 51 104 171 73 109 172 60 111 170 74 184 149 76 112 173 54 107 176 55 115 173 77 124 173 71 114 177 65 124 176 50 127 172 85 123 176 58 111 180 59 113 182 61 127 179 53 129 181 55 125 185 58 127 186 59 129 187 51 135 186 52 134 184 81 136 187 53 141 183 81 138 188 54 214 165 59 145 187 46 148 190 49 150 189 73 234 173 0 235 174 0 231 176 0 158 193 53 154 195 54 238 177 1 162 195 47 224 175 69 240 179 7 165 198 50 236 178 58 233 180 49 243 181 13 234 181 50 242 181 31 169 202 54 232 185 42 242 186 19 232 186 53 226 187 61 171 204 56 245 188 0 233 190 16 171 202 80 236 192 0 168 203 102 237 193 0 243 193 28 237 199 6 240 201 0 244 204 0 240 196 94 231 202 64 191 213 121 244 210 3 193 221 91 250 215 0 247 218 0 239 214 66 245 222 0 241 225 0 201 229 99 245 228 5 203 231 101 208 231 109 233 227 112 247 234 74 215 239 123 217 242 134 226 244 137 255 248 86 255 249 95 255 251 104 235 253 145 253 255 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@O<@?0C?@O?8??#?>O?8?? G>@_8A? b') ; yourself); yourself]
+!
+
+versionABBase12x12
+    "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 versionABBase12x12 inspect
+     ImageEditor openOnClass:self andSelector:#versionABBase12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionABBase12x12'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+_7=?_4!!QU51]YF!!@_7=?_7<+H"T''KCQPN''=^Y6)+[&=0]A\_H!!!!?T30<OC=FSF@EA 4C_281L#H2NC%O@PDB@G<\H2L)JR4/L7E2\7U,B $TGQ,[HR)%Y&%)
+[P ZEQDLC0,VW6E!!X&LNJBX$HA8UDEYXVU%[AA$VE!!HRD ]NT%ITR7=?_7=?QTL;MSX6M35?_7=?_5UMST%CP380_7=?_7=ZQ4)DQDEBD0@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[45 133 171 11 149 204 25 153 208 65 148 187 118 148 84 42 161 216 46 163 218 116 158 86 107 162 80 106 167 47 110 163 75 107 168 48 106 169 57 55 168 224 115 166 71 109 170 51 104 171 73 109 172 60 111 170 74 184 149 76 112 173 54 107 176 55 115 173 77 61 175 225 96 168 202 124 173 71 114 177 65 124 176 50 127 172 85 123 176 58 111 180 59 65 178 228 113 182 61 127 179 53 80 177 228 129 181 55 125 185 58 92 179 225 127 186 59 93 180 226 129 187 51 135 186 52 134 184 81 75 186 235 95 181 227 136 187 53 141 183 81 138 188 54 214 165 59 145 187 46 148 190 49 150 189 73 102 188 234 234 173 0 235 174 0 231 176 0 158 193 53 154 195 54 116 191 219 238 177 1 162 195 47 224 175 69 240 179 7 165 198 50 149 189 203 236 178 58 233 180 49 243 181 13 234 181 50 242 181 31 169 202 54 232 185 42 137 196 220 242 186 19 232 186 53 226 187 61 171 204 56 245 188 0 233 190 16 171 202 80 114 203 242 126 201 229 236 192 0 168 203 102 237 193 0 243 193 28 237 199 6 133 208 236 240 201 0 244 204 0 240 196 94 231 202 64 146 211 240 148 213 243 191 213 121 244 210 3 193 221 91 250 215 0 247 218 0 239 214 66 161 220 245 245 222 0 241 225 0 201 229 99 170 224 243 245 228 5 203 231 101 208 231 109 233 227 112 247 234 74 215 239 123 217 242 134 226 244 137 255 248 86 255 249 95 255 251 104 235 253 145 253 255 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?@O<O?0??C?<O?8??#?>O?8?? G>@_8A? b') ; yourself); yourself]
+!
+
+versionABase12x12
+    "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 versionABase12x12 inspect
+     ImageEditor openOnClass:self andSelector:#versionABase12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionABase12x12'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+_7=?_4UIR41MTEIC_7=?_7<5KB<1M#5HPG=NTUMTUUYWVBD)KBI?R$EAPTIDQ$<PDQ N_3 :N3,;O#=GB (MBG<&KR43L3\9O@LEBPE?EQP^I2T%J3PGA P@
+_1L$G10WF!!X C@0K@''<YL#@.J" _F7=?_7=?C2L HA4]GQI?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_7=?_0@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[16 117 155 0 123 166 48 114 148 9 133 194 0 137 204 17 135 197 0 141 202 0 143 204 45 133 171 29 139 201 11 149 204 33 143 199 39 146 202 25 153 208 65 148 187 118 148 84 42 161 216 46 163 218 116 158 86 107 162 80 106 167 47 110 163 75 107 168 48 106 169 57 55 168 224 115 166 71 109 170 51 104 171 73 109 172 60 111 170 74 112 173 54 107 176 55 115 173 77 61 175 225 96 168 202 124 173 71 114 177 65 124 176 50 127 172 85 123 176 58 111 180 59 65 178 228 113 182 61 127 179 53 80 177 228 129 181 55 125 185 58 92 179 225 127 186 59 93 180 226 129 187 51 135 186 52 134 184 81 75 186 235 95 181 227 136 187 53 141 183 81 138 188 54 145 187 46 148 190 49 150 189 73 102 188 234 158 193 53 154 195 54 116 191 219 162 195 47 165 198 50 149 189 203 169 202 54 137 196 220 171 204 56 171 202 80 114 203 242 126 201 229 168 203 102 133 208 236 146 211 240 148 213 243 191 213 121 193 221 91 161 220 245 201 229 99 170 224 243 203 231 101 208 231 109 215 239 123 217 242 134 226 244 137 235 253 145 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?@O<O?0??C?<O?0??C?<O<@?0@@@@@@@@@b') ; yourself); yourself]
+!
+
+versionB12x12
+    "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 versionB12x12 inspect
+     ImageEditor openOnClass:self andSelector:#versionB12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionB12x12'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?O20+KR0.K3@)O3<?O3<&H2T%I2 (
+J#<?O3<?HQ0_HBH"H2P?O3<?O1\VFQ([GA0^O3<?O3<G@ $TEQTVD#<?O3<?C 0E@ LCA@X?O3<?O1 SD1@LC@ AO3<?O3<]C1DMCP(K@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[184 149 76 214 165 59 234 173 0 235 174 0 231 176 0 238 177 1 224 175 69 240 174 37 240 179 7 232 184 6 236 178 58 233 180 49 243 181 13 234 181 50 242 181 31 232 185 42 242 186 19 232 186 53 226 187 61 245 188 0 233 190 16 236 192 0 237 193 0 248 191 29 243 193 28 242 197 9 237 199 6 240 201 0 244 204 0 240 196 94 231 202 64 246 206 0 244 210 3 249 210 32 250 215 0 247 218 0 239 214 66 245 222 0 246 223 0 241 225 0 245 228 5 233 227 112 247 234 74 255 245 52 255 248 86 254 251 69 255 249 95 255 251 104 253 255 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@_8A? G>@_8A? G>@_8A? b') ; yourself); yourself]
+!
+
+versionB16x16
+    "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 versionB16x16 inspect
+     ImageEditor openOnClass:self andSelector:#versionB16x16
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionB16x16'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+GRP H"L%]GU6;N;.:^/*@]#$8^K#9^_(<OG2</S6=Q0-4\KM3\/Q4=SU5]_ 9.<\KLV5.++B.++B0,KB3<?UF2:7(:N2-[V8.LR81LSB2!!$/*).['':N!!([J/
++;J5-\$XJ:&O#)R[&9:#&9>_(ZGHCB).SIFV$X*L"8:'')9"[6  )\C]FQ49KR8VE!!XVT%-$II7@6LS9DQD9NT$-LSH):BRY1MS(8NC 7OC0<P5EN^0\(\&Y"
+W$Y^W$A@MSD1LW\FJLY[ZF](X&I"W59UT5M8AQ?F%5ZW%6)*Y5%YY''I"^PL!!7-7G1<]=_W6C XFA_HPD@!!\MCQTQDQDQEQTUEP<K@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[64 38 12 86 84 25 102 69 21 120 84 22 113 81 27 127 87 25 126 89 26 127 93 27 127 97 27 129 97 24 128 100 24 140 102 31 129 106 25 151 107 17 150 107 19 151 106 22 153 104 19 153 104 20 153 105 20 152 106 21 153 104 22 152 104 23 153 104 23 150 108 28 134 114 25 135 117 24 135 126 31 136 124 25 131 125 41 137 131 31 191 150 12 189 151 23 188 183 31 181 147 49 189 184 35 191 185 39 189 182 42 191 185 42 194 141 30 195 141 31 193 146 18 198 145 22 199 151 21 203 159 23 205 181 12 205 189 9 205 174 16 204 169 23 233 174 1 234 175 0 235 174 1 234 174 3 236 174 1 236 175 1 233 173 4 233 175 4 234 173 11 234 174 10 235 174 11 236 175 10 233 176 1 234 177 0 233 176 3 234 177 2 238 176 2 233 177 5 237 176 5 234 180 4 234 180 6 235 182 6 236 183 7 237 187 3 234 191 2 235 190 3 237 188 1 236 191 1 239 189 2 233 185 6 235 187 6 236 185 4 235 189 4 233 183 11 236 188 9 240 176 4 241 176 4 240 178 6 247 190 2 247 190 3 247 191 3 246 184 7 247 184 7 244 187 6 240 178 8 241 179 9 242 180 10 242 180 11 242 180 12 242 181 12 242 181 13 243 182 12 243 183 14 243 183 15 245 183 13 247 187 9 244 184 10 245 185 11 245 189 9 246 189 11 243 186 12 242 184 15 241 186 15 235 175 21 236 174 25 239 177 23 243 183 21 244 190 18 192 186 48 193 186 55 193 187 60 228 175 33 229 174 34 229 180 39 234 189 35 233 184 39 239 188 38 245 188 35 244 189 35 245 189 35 244 186 36 244 187 38 243 188 38 244 188 36 227 184 63 233 193 0 234 194 0 234 194 1 235 194 2 236 192 1 236 195 0 235 197 0 234 196 3 237 199 2 239 198 2 239 198 7 240 192 2 240 192 3 240 195 3 241 195 3 240 199 1 240 196 3 242 194 6 247 193 6 243 200 1 241 202 1 242 203 0 243 203 0 243 202 1 242 203 1 241 203 3 243 204 0 243 205 1 242 207 0 244 204 0 244 205 0 245 206 0 244 207 0 240 200 4 240 200 5 243 200 4 243 198 13 243 204 12 242 208 1 243 208 1 243 209 1 244 211 1 246 210 0 246 211 0 246 210 1 244 209 2 247 213 0 246 212 1 247 215 0 247 214 1 245 209 7 248 213 1 244 217 0 245 217 0 247 216 0 246 218 0 246 219 0 247 219 0 245 220 0 246 221 0 245 222 0 246 223 3 249 216 0 248 217 0 246 215 9 245 196 21 246 192 31 240 208 30 242 214 30 244 221 25 243 225 2 243 225 3 245 225 3 246 224 2 246 225 3 244 226 5 245 225 7 247 227 6 246 227 7 246 229 16 246 230 27 245 229 31 248 231 29 204 194 42 237 195 38 239 203 37 246 195 32 246 195 33 247 199 35 247 202 59 249 233 33 250 235 45 253 242 37 253 242 41 253 244 43 253 243 47 252 244 47 252 238 54 252 244 55 254 245 61 186 188 69 178 178 77 187 189 75 193 187 66 192 187 68 193 187 68 251 237 68 255 246 71 255 247 81 255 248 85 255 248 88 254 250 100 252 246 110 255 251 107]; yourself]
+!
+
+versionB24x24
+    "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 versionB24x24 inspect
+     ImageEditor openOnClass:self andSelector:#versionB24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionB24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+GB$/KB00K2</MC 8NCX6M#X6LSL5L!!<BN?S0;.;0=_W8>OS4>_'';>?/;?/;<?=<QPN_(:N#(:N#*9>/.<OC3<?O4<//6>>0SO=7U5MSU5]WU5]/[7^C 8.K%
+9N''-:^LSO-SG2,3R3=KR4-KR4-WU5M/[7-/^8.XWOM":2\#H2L#J2,+J3MKS4-KT5MS\5^DTN,J5-KR8.++I2\''I2\#I2L+L4=SR5MDRN\Z+*:.++;R8.K*:
+.,''I2\''I.,3H4L4RM;.])ZV+*:.+,KB0-["8.KR:,L#I1<DRK*2](*J%)ZV+*:.+*:.+*:./*;*8.+XOJ9^V%(*J")2!!)Y6")ZV%*:.%)Z.%/J8IJ''][\8JR
+%)2E!!X"H"H>]''Y2"(ZF\,ZPIJE9JS%-; '')1\XVE"H"H"H"H''JFJ)(8GI5YGQ4YMS&A;^(E1!!XVE!!XVE!!X*M%W4KHU1JQ$YIRT9ST5- Y''I;\7NE!!XVM^7XM
+HVQJRT%JR$)JR$)MST9ST5M&\&5:_&$IH6!!#X6MZUEQIRTYFRT%IRT%ISD5SVUTHIHY#X6M#X6M#X6M#UEQIRT%FRT%ISDPHI)&G G!!8[6=#X6M#X6M#X5)T
+T$-KR$PLH)&R HB@ HB@^G!!8Z6M#X6M#X5)#YTDEHJ"V%(.@"8.@ H.K"W%.[&9/X6-+_$HDI\CK1K&3,;N)(9*Z&)*W%9FW&)^Y''$LDG*6L 7A<_G1''X&]''
+Y6]*Z&E*]FIP,#4C@QTYFQ$[F!!(ZF!!(ZF!!(ZF!!(ZE!!4YF08@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[16 1 1 42 14 1 27 26 0 53 26 0 61 33 0 66 33 3 61 38 0 66 37 0 67 38 0 64 40 0 65 41 0 68 42 0 75 40 0 67 43 3 78 42 0 66 46 0 70 53 0 58 57 0 71 55 0 64 58 0 69 57 0 92 53 0 97 53 1 69 62 0 97 57 0 99 58 0 103 57 0 100 59 0 73 70 2 108 62 3 122 94 29 118 117 35 156 120 13 164 117 27 154 124 0 162 121 17 164 122 3 152 123 35 161 124 3 171 123 23 174 125 13 140 134 30 170 127 12 174 131 19 146 144 16 151 143 18 175 136 24 152 144 20 148 146 20 145 145 39 143 145 55 142 148 41 155 146 23 147 148 50 154 147 44 177 143 17 155 148 35 176 148 22 179 150 8 164 156 44 179 155 15 184 149 76 178 160 0 180 168 13 179 167 27 214 165 59 211 168 52 212 170 69 218 169 63 230 171 12 234 173 0 232 172 16 229 175 0 235 174 0 233 173 19 240 173 0 228 175 16 231 176 0 232 177 0 236 176 0 221 176 52 235 175 22 242 175 3 233 178 0 238 177 1 224 175 69 240 174 37 239 178 4 234 180 2 233 179 23 240 179 7 236 181 5 242 176 40 241 180 10 239 179 28 237 182 9 232 184 6 236 178 58 233 180 49 243 181 13 244 178 43 236 182 29 234 185 9 234 181 50 242 181 31 227 182 66 233 181 59 240 184 15 235 182 51 235 186 12 247 184 0 245 183 18 232 185 42 233 189 0 236 187 15 238 188 0 235 183 61 243 187 0 224 186 68 240 185 33 242 186 19 249 186 0 239 189 0 237 188 18 232 186 53 226 187 61 236 187 33 234 191 0 245 188 0 233 190 16 240 190 0 235 187 45 246 189 0 236 192 0 242 187 36 244 188 23 232 194 0 251 188 4 237 193 0 247 190 3 234 188 64 243 192 1 230 190 64 233 196 0 248 191 6 251 188 28 244 193 4 239 195 2 235 197 0 237 194 25 245 194 8 248 191 29 240 196 6 243 193 28 249 192 31 246 195 11 242 197 9 237 199 6 242 193 52 243 198 0 239 200 0 245 199 0 238 200 11 251 194 34 232 197 61 240 201 0 242 198 32 241 202 0 242 198 45 255 197 21 243 203 0 244 204 0 247 201 21 240 196 94 231 202 64 245 205 0 240 207 0 243 204 22 238 199 88 253 201 25 246 206 0 241 208 0 233 204 66 247 207 1 243 209 0 255 203 28 244 210 3 247 207 28 242 209 27 246 211 0 245 211 7 247 212 0 247 205 71 234 210 61 246 212 10 248 213 0 254 208 33 243 215 0 249 210 32 243 215 12 245 216 0 250 215 0 246 217 0 255 210 49 247 218 0 239 214 66 242 220 0 243 221 0 246 218 21 237 218 58 245 222 0 250 221 0 246 223 0 241 225 0 242 226 0 247 225 0 250 222 28 243 227 1 248 226 4 245 228 5 250 227 8 246 229 10 248 232 17 233 227 112 247 231 36 243 230 59 249 233 39 243 231 79 249 234 53 251 235 41 247 234 74 251 241 48 253 242 34 254 239 70 254 243 37 253 243 50 248 239 110 255 242 73 255 245 52 255 247 55 255 246 66 255 248 68 253 247 93 255 248 78 255 248 86 254 251 69 253 248 102 255 249 87 252 251 78 255 249 95 255 251 97 255 251 104 253 251 119 255 252 106 253 255 115 255 254 130]; yourself]
+!
+
+versionBBase12x12
+    "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 versionBBase12x12 inspect
+     ImageEditor openOnClass:self andSelector:#versionBBase12x12
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionBBase12x12'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+_7=?_3@7O$MER4<)_7=?_7<\FQ([GQ<6H7=?_7=?D!!DSEQXXFQ]?_7=?_0TJC@4NC1HK_7=?_7<@@PXGB@ IAG=?_7=?@%QSUUQVU5!!Q_7=?_0MMRT1LS%AP
+T''=?_7<PQ4ADQ$!!HRT)?_7=?_3(9OC4?PDAB_7=?_7<&HB 5NC 9L7=?_7=?K"0$HBD!!H"U?_7=?_3,4MCD,KB\^_7=?_7=AK3H-KR(+E@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 126 187 4 132 193 17 135 197 0 143 204 45 133 171 0 146 201 7 146 208 13 147 209 11 149 204 25 153 208 31 155 211 65 148 187 33 156 212 38 159 214 42 161 216 46 163 218 83 160 206 51 169 218 55 168 224 67 167 217 184 149 76 58 173 223 61 175 225 96 168 202 65 178 228 80 177 228 92 179 225 93 180 226 75 186 235 95 181 227 214 165 59 102 188 234 234 173 0 235 174 0 231 176 0 116 191 219 238 177 1 224 175 69 240 174 37 240 179 7 232 184 6 149 189 203 236 178 58 233 180 49 243 181 13 234 181 50 242 181 31 232 185 42 137 196 220 242 186 19 232 186 53 226 187 61 245 188 0 233 190 16 114 203 242 126 201 229 236 192 0 237 193 0 248 191 29 243 193 28 242 197 9 237 199 6 133 208 236 240 201 0 244 204 0 240 196 94 231 202 64 146 211 240 246 206 0 148 213 243 244 210 3 249 210 32 250 215 0 247 218 0 239 214 66 161 220 245 245 222 0 246 223 0 241 225 0 170 224 243 245 228 5 233 227 112 247 234 74 255 245 52 255 248 86 254 251 69 255 249 95 255 251 104 253 255 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?@O<@?0C?@O<@?8C? O>@_8A? G>@_8A? b') ; yourself); yourself]
+!
+
+versionBase16x16
+    "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 versionBase16x16 inspect
+     ImageEditor openOnClass:self andSelector:#versionBase16x16
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionBase16x16'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+ARP!!HRL%I"\0LSL4L#X5@TK.;^70</O4=_[6>_+;=1AA9NC^7.W%9._(:^3.<^($PMGL4=OU5=[V6=/\7^S!!HC:>0<OC0L''I3,?Q4-_W108/,J6-+[R9.+.<
+0L''E3LXMK)& (:Z''):^,,[R6/+;AB212$YZU"9^\(:N%)::.''00TN$=)]XVD"(*R_Y&Y&Y8JD3(:N4Q_U6=5]WU5^IF]BQIHR$-EP4QHTV)+Y&&DT@\+Y55Z
+VUUUU4YFR$]MUS0FJ&>CU6Y,U6Y]U6!!(S%T<@!!->^H*C"''=?_6=_U6Y&OPH(/*>##X2Q^W!!=^72J$3<DBB$-G!!(_GA(WGQ\VE!!TQ@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[9 43 68 33 57 70 7 65 94 8 66 94 16 64 93 42 74 91 6 68 101 6 73 103 20 72 106 16 78 107 20 84 116 31 89 119 21 87 120 36 90 117 40 98 124 56 108 127 71 107 120 14 100 138 3 102 154 5 103 153 6 109 158 10 107 152 12 107 152 15 105 154 14 106 154 15 105 156 15 105 158 15 109 158 18 106 159 17 108 157 17 110 159 22 108 158 44 103 129 49 108 132 49 109 133 50 111 135 57 105 128 54 112 136 61 113 138 61 117 141 40 111 154 38 114 157 1 108 160 9 108 162 5 114 162 25 114 163 20 120 166 30 127 172 66 118 141 71 120 142 77 120 137 74 120 140 76 120 141 80 119 130 82 122 134 9 129 179 1 128 189 1 131 191 2 130 191 5 130 191 9 128 184 19 132 182 37 132 177 35 135 183 44 144 188 67 151 191 95 152 181 5 131 192 2 134 195 7 132 193 3 133 198 5 133 197 6 133 196 6 134 198 7 135 199 9 133 195 9 134 196 9 133 198 8 134 199 1 137 198 15 138 193 15 136 197 12 137 199 2 135 200 3 135 200 5 133 200 3 136 201 1 139 202 5 136 202 7 137 202 6 138 203 4 140 201 0 138 204 0 139 205 0 140 205 0 142 204 0 143 204 2 143 204 1 140 207 0 141 207 3 143 207 5 142 205 5 140 207 9 138 203 13 139 201 10 143 204 20 137 199 18 140 201 3 144 206 6 144 205 7 144 205 5 144 206 4 145 206 7 145 207 13 145 203 8 145 205 8 147 207 10 147 206 15 144 206 11 149 207 13 148 207 15 149 207 13 150 207 17 147 203 18 147 205 19 148 207 20 152 207 4 146 209 4 147 209 6 146 208 10 146 208 10 147 209 14 146 208 11 148 210 10 149 210 11 149 210 15 149 208 13 148 210 13 151 210 14 153 211 12 152 212 14 155 213 17 144 210 19 149 209 16 150 209 19 151 208 21 150 208 24 146 208 22 152 208 20 152 211 18 152 212 20 154 213 25 153 208 28 155 209 29 155 211 30 155 210 31 155 213 36 142 192 41 150 196 51 157 206 33 157 210 33 157 213 35 157 213 33 158 213 35 159 215 37 158 214 25 160 213 40 162 213 41 162 213 40 161 214 41 160 215 47 164 213 47 165 214 46 166 215 45 163 218 43 167 223 49 162 215 53 163 215 49 166 215 48 163 216 50 164 216 48 164 220 60 166 218 60 167 221 62 167 220 51 169 218 52 170 219 55 171 220 57 171 221 61 168 221 61 169 223 59 173 223 61 173 223 73 162 207 66 170 220 68 169 220 69 171 221 73 172 223 87 170 213 96 180 220 67 173 224 64 174 224 66 175 226 77 175 224 76 174 225 77 174 225 65 177 227 65 177 228 68 179 229 70 176 230 70 180 230 79 176 225 82 177 227 81 178 227 85 179 228 82 180 228 81 180 231 86 180 230 87 181 231 88 182 232 89 184 233 92 191 236 97 189 230 99 190 230 98 190 232 108 195 231 98 194 235 103 193 233 99 193 237 104 192 232 110 194 232 120 196 234 123 199 237 123 204 241 141 212 233 131 207 244 134 213 244 134 214 245 137 211 243 139 211 242 140 216 245 145 219 246 145 218 247 146 219 248 148 220 248 154 222 248 158 224 249 176 227 238 160 226 250 168 229 251 179 232 248 182 236 250]; yourself]
+!
+
+versionBase24x24
+    "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 versionBase24x24 inspect
+     ImageEditor openOnClass:self andSelector:#versionBase24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'SVN::IconLibrary class versionBase24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@!!LNDADQE!!XVF!!0_H2D$H2@ H18"H!!8AO=SZ6]''\7^C"8.[&9.#*;N?2;_W6>]HXU^''.;.;.<OS4=OS4=?_8>O#;?O;=?>\RTMOM3L3K2<3M3<?Q5=/^8^W)
+9.[1:=T]Q<N:.[&8.K?A/\GA1LSG1<+J5-#$7<8VR*:.,+N6-+&9.[2<0LC@0LC@0<#B4L$ON:J*****+:.+*;N1-[V5-;.;0LB=1+8VN*J\)JF!!)JR#*J"+
+*:6-,[V5-+&9/;@MNIBQ$)JY$)JY''):^(:N#*J"/)+J/-I4LNXNK#H.N!!)JT$)JR%).[&Y.&)*J&*YLTM6&H"H"H"H.N#(:N#9BP$IZV&*JZ&8(UMU5,\8E9
+ V=2^XRH"8.K"8:O#9*V%''4UMT%HV6I1\WE1\W9/^XNC (NH"H.K#G@YM$EAP45_W&11[7E1^GM8\7M: (M3"VLULDMCRDMAP45[V6I"X&I"[F1,X''91_5 K
+LDMQUEEMRDMCPUQTW6!!+]&I,[HE5[D0KLU)ST5M(W5)TTT5MTUEQUE)SW6-SYC4JL65ST5MST5MST5MSS$9NS$9HQD9DRC8JLVI1[FI"X&I WE1ST5M[ZF!!_
+UEQNS30GLFI,\V11\W!!,X&I"Y&I!!W%9^T5MSWS0HLH]:^&93[798[G9/\V1,X&I!!WFA\Y30EMIF,%9RK_G%9\&=/[6=1[&91[GV@]DHDJ9>6+)2P"8"A!!7=?
+_7=?_7=?\7Q.^4@CA"X-I2\''I2</JR$)JR (JB (K"4,J"T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[1 10 28 0 14 26 0 23 36 0 29 57 1 32 55 0 32 58 0 34 61 3 34 57 0 35 56 0 36 63 0 37 64 0 41 63 3 45 67 0 47 68 5 46 69 6 47 70 0 50 72 0 51 73 15 48 60 17 47 65 9 49 72 0 51 79 0 53 74 0 53 75 25 47 61 2 53 81 13 51 74 1 55 77 4 57 79 15 55 72 23 55 68 7 59 81 19 58 76 12 61 83 25 59 67 21 60 77 23 61 79 5 67 94 6 75 114 0 78 122 0 80 124 0 80 130 0 82 120 25 76 110 0 84 122 17 80 119 0 85 123 20 80 125 2 85 129 0 86 135 0 88 137 0 90 139 26 85 125 1 97 141 22 92 137 9 99 143 16 104 142 31 100 139 22 107 145 26 109 147 16 117 155 0 123 166 22 117 161 73 108 128 48 114 148 0 126 187 40 118 156 0 128 189 0 128 196 0 129 190 0 130 191 31 124 162 0 131 192 0 132 187 32 125 163 0 131 198 20 129 172 4 132 193 0 133 200 3 134 189 57 122 156 9 133 194 0 135 202 0 137 204 13 134 196 66 123 152 0 138 199 0 138 206 41 130 168 0 139 207 17 135 197 0 140 201 0 140 208 16 137 192 0 141 202 20 136 198 0 141 209 0 142 203 0 143 204 45 133 171 23 137 199 0 144 205 0 144 211 23 139 194 26 138 200 0 146 201 2 145 206 29 139 201 7 146 208 31 140 202 5 148 203 0 150 210 52 138 176 13 147 209 0 151 211 11 149 204 33 143 199 18 146 214 36 142 204 0 152 212 17 148 210 0 153 213 15 150 205 33 146 195 0 154 214 47 143 187 21 149 211 39 146 202 41 145 208 24 150 212 22 152 207 25 153 208 28 152 214 28 154 209 1 162 216 47 150 207 31 155 211 45 152 202 65 148 187 33 156 212 32 159 208 35 158 213 38 159 214 40 160 215 42 161 216 55 158 208 40 163 211 73 155 194 44 162 217 42 164 213 46 163 218 28 168 223 44 165 214 47 166 215 49 165 221 62 163 214 51 166 222 87 159 193 50 168 217 83 160 206 64 165 215 51 169 218 55 168 224 53 170 219 67 167 217 58 170 227 68 168 218 56 172 221 58 173 223 80 168 213 71 170 220 60 174 224 62 173 229 61 175 225 64 174 231 74 172 223 96 168 202 63 176 226 75 173 224 76 174 225 85 173 218 65 178 228 78 175 226 67 180 229 77 178 222 80 177 228 82 178 229 70 182 231 83 179 230 81 181 226 105 176 211 92 179 225 85 181 233 93 180 226 84 184 228 75 186 235 95 181 227 87 183 234 94 184 223 98 184 230 89 188 232 106 188 222 102 188 234 100 190 229 101 191 230 104 193 232 116 191 219 105 194 233 107 196 235 114 196 229 149 189 203 102 199 244 137 196 220 135 198 215 113 202 241 128 199 234 114 203 242 126 201 229 134 199 228 130 201 236 128 203 231 131 205 234 134 204 240 117 209 242 133 208 236 128 209 243 143 208 238 145 209 239 123 215 247 133 213 247 146 211 240 161 210 223 148 213 243 144 214 250 156 215 239 155 218 235 158 217 241 163 217 235 142 223 255 161 220 245 149 223 252 154 223 246 170 220 246 151 225 254 153 227 255 170 224 243 176 225 238 161 230 253 163 232 255 181 231 244 166 235 255 172 236 253 190 240 253 184 242 254 193 243 255 193 248 253]; yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'image specs-widgets'!
+
+colonBitmap
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self colonBitmap inspect
+     ImageEditor openOnClass:self andSelector:#colonBitmap
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class colonBitmap'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@D@@P@A@@D@@@@@@P@@@P@A@@D@@@D@@@@A@@@A@@D@@@D@@@@A@@D@@@@@@@D@@P@@@@D@@@@B@@@@@P@@@@D@@P@B@ H@@P@A
+@@@@@P@@@ HB@@@A@@@@@P@A@@@B@@@A@@D@@@@A@@@@@@@@@@D@@@@A@@@A@@D@@P@@@P@@@@@A@@D@@P@A@@@@@@D@@@D@@P@A@@@A@@@@@P@@@@@@@@@A
+@@@@@P@A@@@B@@@A@@D@@@@A@@@B@ H@@@D@@@@A@@D@@ HB@@D@@P@@@@D@@@@B@@@@@P@@@@D@@P@@@@@@@P@A@@@@@P@@@P@A@@@A@@@@@P@@@P@A@@D@
+@@D@@@@@@P@A@@D@@P@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led0
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led0 inspect
+     ImageEditor openOnClass:self andSelector:#led0
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led0'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@@@@@ @B@ HB@ HB@@H@@@HB@@HB@ HB@@HB@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@ @@@@@@@ HB
+@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@@@@@@@@@@HB@@@B@@@A@@D@@P@@@ @@@@@A@@D@@P@A@@@@@@H@@@D@@P@A@@@B@@@B@ @@@@@@@@@B
+@ @@@ HB@@@@@@@B@ H@@@HB@ @@@@@@@ HB@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@ @@@@@@@ HB@@@B@ @B@ HB@ @B@ @@@ @B@ HB@ HB
+@@H@@@@B@ HB@ HB@ H@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led1
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led1 inspect
+     ImageEditor openOnClass:self andSelector:#led1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led1'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@D@@P@A@@D@@@@@@P@@@P@A@@D@@@H@@@@A@@@A@@D@@@HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB
+@@@@@P@@@@@@@@HB@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@@HB@@@A@@@A@@D@@P@@@ @@@@@A@@D@@P@A@@@@@@D@@@D@@P@A@@@B@@@@@P@@@@@@@@@B
+@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@ HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB@@@@@P@@@P@A@@@B@ @@@P@@@P@A@@D@
+@@H@@@@@@P@A@@D@@P@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led2
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led2 inspect
+     ImageEditor openOnClass:self andSelector:#led2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led2'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@@@@@P@B@ HB@ HB@@H@@@@A@@HB@ HB@@HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB
+@@@@@P@@@@@@@@HB@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@@HB@@@A@@HB@ HB@ H@@ @@@@HB@ HB@ HB@ @@@@H@@ HB@ HB@ @A@@@B@ @@@@@@@@@A
+@@@@@ HB@@@@@@@A@@D@@@HB@ @@@@@@@@D@@@@B@ H@@@@@@@D@@P@@@ HB@@@@@@@@@P@@@@HB@ @@@@@@@P@A@@@B@ @B@ HB@ @A@@@@@ @B@ HB@ HB
+@@D@@@@B@ HB@ HB@ H@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led3
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led3 inspect
+     ImageEditor openOnClass:self andSelector:#led3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led3'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@@@@@P@B@ HB@ HB@@H@@@@A@@HB@ HB@@HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB
+@@@@@P@@@@@@@@HB@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@@HB@@@A@@HB@ HB@ H@@ @@@@HB@ HB@ HB@ @@@@D@@ HB@ HB@ @B@@@@@P@@@@@@@@@B
+@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@ HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB@@@@@P@B@ HB@ @B@ @@@P@B@ HB@ HB
+@@H@@@@B@ HB@ HB@ H@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led4
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led4 inspect
+     ImageEditor openOnClass:self andSelector:#led4
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led4'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@D@@P@A@@D@@@@@@ @@@P@A@@D@@@H@@@HB@@@A@@D@@@HB@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@ @@@@@@@ HB
+@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@@@@@@@@@@HB@@@B@@HB@ HB@ H@@ @@@@HB@ HB@ HB@ @@@@D@@ HB@ HB@ @B@@@@@P@@@@@@@@@B
+@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@ HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB@@@@@P@@@P@A@@@B@ @@@P@@@P@A@@D@
+@@H@@@@@@P@A@@D@@P@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led5
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led5 inspect
+     ImageEditor openOnClass:self andSelector:#led5
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led5'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@@@@@ @B@ HB@ HB@@D@@@HB@@HB@ HB@@D@@@@B@ H@@@@@@@D@@P@@@ HB@@@@@@@@@P@@@@HB@ @@@@@@@P@A
+@@@B@ H@@@@@@@@A@@@@@ HB@@@@@@@A@@D@@@HB@@@@@@@@@@D@@@@B@@HB@ HB@ H@@P@@@@HB@ HB@ HB@ @@@@D@@ HB@ HB@ @B@@@@@P@@@@@@@@@B
+@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@ HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB@@@@@P@B@ HB@ @B@ @@@P@B@ HB@ HB
+@@H@@@@B@ HB@ HB@ H@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led6
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led6 inspect
+     ImageEditor openOnClass:self andSelector:#led6
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led6'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@@@@@ @B@ HB@ HB@@D@@@HB@@HB@ HB@@D@@@@B@ H@@@@@@@D@@P@@@ HB@@@@@@@@@P@@@@HB@ @@@@@@@P@A
+@@@B@ H@@@@@@@@A@@@@@ HB@@@@@@@A@@D@@@HB@@@@@@@@@@D@@@@B@@HB@ HB@ H@@P@@@@HB@ HB@ HB@ @@@@H@@ HB@ HB@ @B@@@B@ @@@@@@@@@B
+@ @@@ HB@@@@@@@B@ H@@@HB@ @@@@@@@ HB@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@ @@@@@@@ HB@@@B@ @B@ HB@ @B@ @@@ @B@ HB@ HB
+@@H@@@@B@ HB@ HB@ H@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led7
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led7 inspect
+     ImageEditor openOnClass:self andSelector:#led7
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led7'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@@@@@P@B@ HB@ HB@@H@@@@A@@HB@ HB@@HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB
+@@@@@P@@@@@@@@HB@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@@HB@@@A@@@A@@D@@P@@@ @@@@@A@@D@@P@A@@@@@@D@@@D@@P@A@@@B@@@@@P@@@@@@@@@B
+@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@ HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB@@@@@P@@@P@A@@@B@ @@@P@@@P@A@@D@
+@@H@@@@@@P@A@@D@@P@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+led8
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led8 inspect
+     ImageEditor openOnClass:self andSelector:#led8
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led8'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@PDA@PDA@PDA@@@@@P@A@PDA@PDA@@D@@@DA@@DA@PDA@@DA@@@A@PD@@@@@@@DA@P@@@PDA@@@@@@@A@PD@@@DA@P@@@@@@@PDA
+@@@A@PD@@@@@@@DA@P@@@PDA@@@@@@@A@PD@@@DA@@@@@@@@@@DA@@@A@@DA@PDA@PD@@P@@@@DA@PDA@PDA@P@@@@D@@PDA@PDA@P@A@@@A@P@@@@@@@@@A
+@P@@@PDA@@@@@@@A@PD@@@DA@P@@@@@@@PDA@@@A@PD@@@@@@@DA@P@@@PDA@@@@@@@A@PD@@@DA@P@@@@@@@PDA@@@A@P@A@PDA@P@A@P@@@P@A@PDA@PDA
+@@D@@@@A@PDA@PDA@PD@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0]; yourself]
+!
+
+led9
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self led9 inspect
+     ImageEditor openOnClass:self andSelector:#led9
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class led9'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 23; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@@@@@ @B@ HB@ HB@@H@@@HB@@HB@ HB@@HB@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@ @@@@@@@ HB
+@@@B@ H@@@@@@@HB@ @@@ HB@@@@@@@B@ H@@@HB@@@@@@@@@@HB@@@B@@HB@ HB@ H@@ @@@@HB@ HB@ HB@ @@@@D@@ HB@ HB@ @B@@@@@P@@@@@@@@@B
+@ @@@P@A@@@@@@@B@ H@@@@A@@@@@@@@@ HB@@@A@@D@@@@@@@HB@ @@@@D@@@@@@@@B@ H@@@D@@P@@@@@@@ HB@@@@@P@B@ HB@ @B@ @@@P@B@ HB@ HB
+@@H@@@@B@ HB@ HB@ H@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 128 0 0 255 0 0]; yourself]
+!
+
+meterBitmaps
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self meterBitmaps inspect
+     ImageEditor openOnClass:self andSelector:#meterBitmaps
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class meterBitmaps'
+        ifAbsentPut:[(Depth8Image new) width: 260; height: 27; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@
+@@@@@@@@@@@@@@(@@@@@@@@@@@@@@@@@@@@@@@@@B @@@@@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@@@@@@@@@@@@@(@@@@@@@@@@@@@@@@@@@@@@@@@
+B @@@@@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@@@@@@@@@@@@@(@@@@@@@@@@@@@@@@@@@@@@@@@H0@@@@@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@
+@@@@@@@@@@@@@@(@@@@@@@@@@@@@@@@@@@@@@@@@H0@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@(@APTEAPT@@@@@@@TEAPTEAP@@
+B @EAPTEAPT@@@@EAPTEAPTE@@@J@@TEAPTE@@@@@@@EAPTEAPT@@@(@APTEAPT@@@@@@@@EAPTEAP@@B @EAPTEAPTEAPT@@@TEAPTE@@@J@@TEAP@@@@@@
+@@@@@@TEAPT@@@(@APTEAPT@@@@@@@@EAPTEAP@@B @EAPT@@@@@@@@@@@@@@@TE@@@#@@TEAPTE@@@@@@@EAPTEAPT@@@(@APTEAPT@@@@@@@TEAPTEAP@@
+B @EAPTEAPT@AP@EAPTEAPTE@@@#@@TEAPTEAP@E@@TEAPTEAPT@@BL@APTEAPTE@@T@APTEAPTEAP@@B @OC0<EEQP+BR,TG@TOB0<KAP@J@@,KB0,KAQ0[
+A@,KB0,KB0,@@@(@C0,OAP,JH LCF10EB0,OB0T@B TKC0,EEQPCCP4+C!!0EB0<KAP@J@@<KC0,OB0<EEP(AB0,KB0<@@@(@C0,K@RH+J0LI@0L[C0,OB0T@
+B TKC0,KAPP+CP4"@P,KB0<KAP@J@@,KERL#H2L#H2L#H2L\B0,@@BLEC0<OAP,AEBH_EB@KB0,OB0T@B @OC0,EC0(_J2HTG@TKB0<KAP@J@@,EB0,EB0,K
+AP,KB0,EB0,@@BLEB0TKB0TKB0,EB0,KB0TKB0T@H0@KAP,KAP,KB0TKB0,KAP,K@@@JB0<OB1PHFQ$YFQ$RG0<OC0<E@@(EC0<OC0<OHQ$YB ,OC0<OC0T@
+B TOC0,AG!!$YFQ$YD!!<KC0<OAP@JAP<OB1PHFQ$YFQ$YB@(KC0<E@@(EC0<OC0<OB2L*FQ$IB0<OC0T@B TOC1TBFQ$YFQ$YFQ$_B0<OAP@JAP<OC1TIFQ$Y
+FQ$YF"@KC0<E@@(EC1PRFQ$YFQ$YFQ$YFQ$"C0T@H0TOC0,JHQ$YFQ$YFQL B0<OAP@JB0<OB08BFQ$YFQ$RJ0<OC0<E@@(EC0<OC0<KC0,KC0,OC0<OC0T@
+H0TOC0<OC0,OB0,OB0<OC0<OAP@#AP<OC0<OB0<KB0<KC0<OC0<E@@(KG@<+FQ$YFQ$YFQ$YD1TUEPT@B ,\EQTOEP$YFQ$IC1TUEQTUAP@JB10OEA$YFQ$Y
+FQ$YFP$UEQTE@@(KG@<"FQ$YFQ$YFQ$YFQPOG@T@B ,\EQ0UG@<#BA$YFQ$NC10UAP@JB10OB!!$YFQ$YFQ$YFP4OEQTE@@(KGAT\JQ$YFQ$YFQ$YC@(UEPT@
+B!!X\D!!$YFQ$YFQ$YFQ$YFQH\@@@#B2PU@1$YFQ$YFQ$YFP0JEQTE@@(KEQTCFQ$YFQ$YFQ$YF!!TUEPT@B ,\EQTOC0<OC0<OC1TUEQTUAP@#B10UEP<OC0<O
+C0<OEQTUEQTE@BLKGATUC0<OC0<OC0<UEQTUEPT@B <\EA$YFQ$HF"(YFQ$YCQ0 AP@JC2@\H0$HFQ$YFQL\GB@ HB@E@@(OG@DRFQ$Y@!!(*FQ$YFQ<\H@T@
+B <\@QHYFQ$SF2H*FQ$YFPP\AP@JC2@ GB@\HB(YFQ$YFP$UHB@E@@(OHATCFQ$RHQ8!!HRDSAA0 H@T@B < EP4YFQ$HBR,ZFQ$YD D\AP@JC10CD!!$YFQ$Y
+FQ$YFQ$YD10E@BLOEQ,YFQ$YF",I@!!$YFQHDG@T@B <\J1$YFQ$!!D18YFQ$YCQ0 B0@JC2@\H10\GA0\GA0\GB@ HB@E@BLOHA0#GA0\GA0\GA0\HB@ H@T@
+H0< HBL\GA0\GA0\GA0 HB@ AP@JEPDHFQ$YHRL\HB,YFQ$YF2@K@@(OH10MFQ$YFQ$YIR@ H2@ H@,@B!!T H!!$YFPH#GB@ZFQ$YB@D B0@JER@[FQ$YG!!0\
+I DHFQ$YH"@K@@(UH2@#H10IFQ$YFQ$YD10FH0,@B!!T#HBDYFQ8 HB@ HA0 H2@#B0@JER@DFQ$YD (UGA0IFQ$YEB@K@@(UH10DH",+H",_F!!$YFQHDH@,@
+H1T#HQ$YFP$UGATABA$YFR, B0@JC0(YFQ$YCR@\GBHYFQ$YEB@K@@(OH0DA@PDA@PDA@R@ H2@ H@,@H1T#@PDA@PDA@PDAHB@#HB@ B0@#C2LA@PDA@PDA
+@PD HBL HB@K@@(U@1$YFP0DH0DAH1(YFQ$^H0,@B!!0AH18YFQ$YFQ$ZH0DA@PDAB0@JGBLIFQ$YJ2@AH0(RFQ$YF2LK@@(\@Q,YFQ$TH0DAH1LYFQ$CH0,@
+B!!0A@PD#H!!$YFQHYFQ$SH0DAB0@JG@DJD!!$Y@2@AH0DA@PDA@PDK@@(\H0$YFQ$CHBL#H2LMD!!8D@P,@B!!TD@PD H2@#G@(HFQ$YF2LAB0@#EP(YFQ$YB"LA
+@RLMFQ$YBRLK@@(UBQ$YFR(A@PDAH1LYFQ$SH0,@B!!0AH0DA@PD#@PD#H0DA@PDAB0@#EPD#@PDA@RLA@RL#@PDA@PDK@BL\@PDA@PDAH0DA@RLA@PDA@P,@
+B"@*FQ$YCPPJB (JC 0YFQHTB0@JH@8JF1(!!BA$YFQ8DB (JB (O@@( B"HYFP0NB (JB  YFQ$+A@<@B"@JC!!LBCP(JB (DJ!!$YFPLDC0@JH@8JB LYFQ$*
+BQ$YFQ(DB (O@@( B"HYFQ$[B!!<"F0(JB (NB <@B"@TCA$YD!!<"@0L"C PNB (JC0@JH@8JB (JB (TBA$YFP4DB (O@BL C HYFQ$TB (JAA8YFQ$CA@<@
+B!!0^FQ$YBPPJB (JC!!HYFP NB0@JH@8JB (JB (JB (JB (JB (O@BL C (+J2,+J2,+J2,+J2,JB <@H2@NB (JB (JB (JB (JB (JC0@JAAHYFQ$+G1<_
+G1<[J!!$YFPLO@@(DA1<[F1PIFQ$YJ!!,_G1<_G1T@B P"F1(BBQ<_G1<"D!!$YFP$[EP@JABH_F1<[G1<_G1LYFQ$RH!!<U@@(DH!!,"D!!$YFRHIFQ$YHQ,_G1T@
+B P_D1$YD!!LLFQ$YJ L[G1<_EP@J@P$YFQ$RCA$YFQ$RD1,[G1<U@@(DA1<_G1<_F0HYFQ$LG1<_G1T@H0P[F!!$YFRD_G1,CD!!$YD"H_EP@JAB(YFQ$IF1<_
+G1<_D!!$YFRHU@@(DA1<[F1P_G1<_G1<_G1<_G1T@H0P[G!!HRD!!HRD!!HRD!!HRD!!8_EP@#A@\_F1,TG1<_G1<_G1<_G1<U@@("FQ$YD!!(ZF!!(ZF!!LHFQ$YJ!!0@
+B!!,^F"TZD2DYFQ$HD2TZF!!(ZG@@JG18ZD1LSF!!(ZD0HYFQ$LF!!( @@(_G!!LZD1(SHP0YFQ$YBA(ZF!!0@B!!<ZF!!HYFQ$!!D2(YFQ$BD1(ZG@@JG1(HFQ$YFQ$Y
+FQ$YFP SF!!(\@@(]@!!$YFQ$YFQ$YFQ$YD!!8ZF"@@B!!<^F!!(ZF!!L*FQ$YFQ8SF!!(ZG@@#G18ZBA$YFQHRD!!$YFQH^F!!( @@([BA$YFP SF!!(ZD2(YFQ$YG!!0@
+B!!,^F"TZHRDZF!!(ZD2TZF!!(ZG@@#G18^FQ$YFQ$YFQ$YFQ$YG!!( @BL[G!!(%F"D!!F!!(ZF!!L%F!!(ZF!!0@A@8YFQ$HG1<_G1<_F18YFQ$SC0@JABH_G1<[BQ$Y
+FRD[G1<_G1<U@@(DH!!<_G1<_KA,SFQ$YFPL_G1T@B P"G1<_G1,!!FQ$YFQHSF1<_EP@JABHBFQ$YG!!,[CQ$YFRD[G1<U@@(DG2DYFQ$YD!!HYFQ$YFQ8_G1T@
+B D^FQ$YFQ$R@  YFQ$YCB,_EP@JA@\_G1<_H 0YFQ$MF1<_G1<U@BLDH!!,^FQ$YFQ$YFQ$YCBH_G1T@B PSFQ$YFQL[F1<IFQ$YFQ$CC0@JABH_G1<[G1<_
+G1<[G1<_G1<U@BLDH!!8RFQ$YFQ$YFQ$YD!!H^G1T@H0P"G1<_F1<_G1<_F1<_G1<_EP@JAA$YFP TEAPTEAPNF!!$YFP4K@@(#EAPTE@8CFQ$YHP8TEAPTE@<@
+B"LTEAPTE@8THQ$YFQ$ZC!!PTC0@JH1,TEAPTC"HHFQ$YFQ$^C!!PO@@( F!!$YFPHTE@8IFQ$YF 8TE@<@B"LTJ1$YC@$[EA<!!FQ$YFR,NC0@JHA(YFQ$YBA<T
+C"HRFQ$YF 8O@@(#F1PTE@8MFQ$Y@ 8TEAPTE@<@H0DN@1$YFQ$YFQ$YFQ$YBA,TC0@JH1P*FQ$YFPH!!J!!$YFQ$YFRHO@@(#EAPTE@8TEAPTE@8TEAPTE@<@
+H2LTG!!$YFQ$YFQ$YFQ$YD!!8TC0@#H1PTEAPNEAPTEAPNEAPTEAPO@@(AFQ$YC@8JC (NB PZFQ$YBP,@B"@NB (JABHYFQ$^B (JB (JC0@JH08NB 8DEB(Y
+FQ$YHP8JB 8O@@( C (JB (NB 8_BQHYFQ$CB <@B"LLFQ$HF0(JB"HYFQ$ZA@(JC0@JE08JH LTA@(JB 8BFQ$YF (O@@(\CQ$YFQ$CA@(NABHRFQ$HC <@
+B"@NB (JB HYFQ$CB (JB 8JC0@#HA,LFQ$YG!!<NE@$LFQ$YD0(O@@(#B!!,LFQ$YFQ$YFQ$YFQ$YF0,@B"@NB (JB (JB (JB (JB (JC0@#H@8DG!!8^G!!8^
+G!!8^G!!8^A@(O@BL C (JB (JB (JB (JB (JB <@B"@HFQ$YC DDA@PD@RDYFQ$_AP@JH@PDA@PAH!!$YFQ(AA@PDA@PK@@(\A@PD@Q<LFQ$YD LD@PPDA@,@
+B"@DAAPN@PPDA@D#@1$YFR(DB0@JH1$YFP0!!J"(*BA$YFP0*F (K@@(\A@8[A@DDA@PD@RHYFQ$!!@P,@B!!TCFQ$YC@PDA@PD@RDYFQHJB0@JH@PDA@D_FQ$Y
+B@PDA@PDA@PK@BLUBQ$YFRDA@PPDH1,LFQ$HA@,@B!!0J@QPBFQ$YFQ$YBAHYFQHJB0@JH@PDA@PDA@PDA@PAA@PDA@PK@BL A@PDA@PDA@PDA@PDA@PDA@,@
+H2@DA@PDA@PDA@PD@PPDA@PDB0@JERDYFQ$IH0DA@PDACA$YFP(K@@(U@PDA@RL_FQ$YF"L#@PDA@P,@B!!0A@RLIFQ$YFP0TH@DA@PDAB0@JG@DIFQH[H0DA
+@RLNFQ$YB@DK@@(\D!!$YFQ$YFQ$YFQ$YFQ$YH T@B!!TNCA$ZH0DA@PD#EA$YFQ8AB0@JEQ,YFQ$)@PDA@PD#F!!$YD PK@@(U@PDAH2(YFQ$MH@DA@PDA@P,@
+H1T^FQ$YG2LAA@DAH18YFQ$JB0@JG@D#H0DTCRD!!CQ,DCA$YJ DK@@(U@PDA@PDA@PDA@PDA@PDA@P,@H1TA@PDA@PDA@PDA@PDA@PDAB0@#EPDA@PDA@PDA
+@PDA@PDA@PDK@@(OBQ$YFPH#H2L#HBHYFQ$BH0,@B!!TAH2L#HA,YFQ$SHBL#H2L#B0@JEPD G1$YFQ$^B!!0#H2L#H2LK@@(OB!!$YFP AHBL#HB,YFQ$B@PT@
+B <"BA$YFQ$YFQ$YFQ$YFQ$TAP@JC2HYFQ$THBL#H10IFQ$YF"@K@@(UA@0YFP0AH2L#H2LBFQ$L@PT@B!!TAH2LNFQ$YFQ, H2L#H2L#B0@#C1(YFQ$"GBL#
+H2L HQ$YFPPE@@(UH1P*D0D\H2L GBHYFQ$SH@,@B!!TAH2L#HBLA@PDAHBL#H2L#B0@#ERL#H2L#H2L#H2L#H2L#H2LE@BLUH2L#H2L#H2L#H2L#H2L#H0,@
+B <DD!!$YFR,\GATJCA$YFPL\AP@JC2@ HB@\F1$YFQ( HB@ HB@E@@(OH@(RFQ$RJ2@ H2L#HB@ H@,@B <DD!!$YFQ(#HA0NCA$YFQ8 B0@JER@#EBH"H"H"
+D1$YFRD[C"@K@@(OEA$YFPH#GA0\F1HYFQ$_G@T@B <\H!!$YFP4\GA0\CQ$YFQ8 B0@JC2L GB,YFQ$YAB@ HB@ H2@V@BLKBQ$YFPHAGB@\GBHYFQ$HH0,@
+B <#BA$Y@ D$HA0ABA$YFQP AP@JC2@ HB@\H!!,[F2H HB@ HB@E@BLOHB@ HA0 GB@\GB@ HB@ H@,@H0< HB@ GB@\HA0\HB@ HB@ AP@JC1T_FQ$YFQ("
+BP0YFQ$HH10K@@(OHB@ GA0NFQ$YD1T\HB@ H@T@B <\F!!$YFP0!!J"(*@  BBR@ AP@JC10CFQ$YFP ^HQ$YFQ$YEATE@@(OHA0\EQTUEP<[FQ$Y@0,\H@T@
+B < J!!$YFP IBQ(YFQ$YG!!0\B0@JC2@ BA$YFQ8NC"DYFQ$YEATE@@(OHA0UCQ$YFP0#GB@ HB@ HB\@H0,DFQ$YFP "AAP^FQ$YFP$UAP@JC2@*FQ$YBA, 
+E@HYFQ$MGA0K@@(OHB@ GA0NFQ$YD1T\HB@ H@T@H0< HB@\GB@ HB@ EQ0 HB@ AP@#C2@ HA0\HB@ HB@UGB@ HB@E@@(OGA0!!FQ$YFQ$YFQ$YD PUG@T@
+B ,\GA0\EP(YFQ$MEQ0\GA0\AP@JB0DYFQ$YFQ$YFQ$YFQ$YH <E@@(OGB@BFQ$YFQ$YFQ$YFR,UG@T@B ,\GA0\GA0\EQ,YFQ$CC10\AP@JB1TDD!!$YFQ$Y
+FQ$YFPH#EQ0E@@(OGATTFQ$YFQ$YFQ$YFPLUG@T@B ,\GATZFQ$Y@!!0\GA0\GA0\AP@#C1T_FQ$YFQ$YFQ$YFQ$!!HA0E@@(OEQPYFQ$YFQHYFQ$YBBLUG@T@
+B ,\GA0\EP(YFQ$MEQ0\GA0\AP@#B10\GA0UGA0\GA0UGA0\GA0E@BLKGA0\GAT\GA0\GAT\GA0\G@T@B ,\ER@ZFQ$YFQ$YFP JC1TUAP@JB1TUEQTUH@0Y
+FRHKEQTUEQTE@@(KEP4YFQ$YFQ$YFQ$YFQ$_C0T@B ,UC2LZD!!$YFQ$YFR(TC1TUAP@JB10UEQTUEQTO@Q$YFQPOEQTE@@(KG@<AG!!HYFQ$YFQHMH@<UEPT@
+B ,UEP<T@!!$YFQ$YFP0_C1TUAP@JB1TUC2HYFQ$+C1TUEQTUEQTE@BLKEP<T@!!$YFQ$YFQ$R@1TUEPT@B ,UC1PHFQ$YFQ$YFR(AC1TUAP@JB1TUEQTUH@0Y
+FRHKEQTUEQTE@BLKEQTUEQTUEQTUEP,UEQTUEPT@H0,UEQTUEQTUEQTUB1TUEQTUAP@JAQTOC0<DBP0YD!!8[G@,UEQTE@@(EEP<OC0<KAA(IEP<OC0<OC0T@
+B ,OC0D[H"H"H"H"F1,_C!!0OAP@JAQTUC0<#F0LSBQ<DEP,UC1TE@@(KC1TOEQTUEQTKG00SC0<OEPT@B TUC0,OH1,ICPLTH@<OEQTUAP@JAQTUEP,UC 4)
+BAL[H@,OEQTE@@(EEQTOC0LLBQTOC1TOEP<UC0T@H0,UC0,UAB,!!@ HMF2LKC0<UAP@JB1TOB10ND1HRD!!(NEP,UEQTE@@(EEP<OC0<KAA(IEP<OC0<OC0T@
+H0TUC0<OC0<OC0<OC0<OC0<OAP@#AQTOC0<OC0<OC0<OC0<OC0<E@@(EC0<OC0,KER@\C0TOC0<OC0T@B TOC0<OC0<KB0,KC0<OC0<O@@@JAP<OB0TEAPTE
+APTKAP,EC0<E@@(EC0<OC0,KAP,EAP,KC0<OC0@@B TOC0<OC0<OC0<KEP,OC0<O@@@JAP<OC0<KAPTKAQ KC0<OC0<@@@(EC0<OC1@KAQTQB0TKC0<OC0T@
+B TOC0<OB1TKB0<OC0<OC0<O@@@#AP<OC0<KB0,UC0,EB0<OC0<E@@(EC0<OB0,KGB@\B0TOC0<OC0T@B TOC0<OC0<KB0,KC0<OC0<O@@@#AP<OC0<OB0,U
+C0,OC0<OC0<E@BLEC0<OC0<KB1TOB0<OC0<OC0@@B @KB0,KB0,EAPTKB0,KB0,K@@@J@@,KB0,KB0,KJ@,KB0,KB0,@@@(@B0,KB0,KB0,KB0,KB0,KB0@@
+B @KB0,KB0,KB0,KB0,KB0,K@@@J@@,KB0,KB0,KB0,KB0,KB0,@@@(@B0,KB0,KB0,KB0,KB0,KB0@@B @KB0,KB0,KB0TKB0,KB0,K@@@J@@,KB0,''E ,K
+B0,KB0,KB0,@@BL@B0,KB0,KB0TKB0,KB0,KB0@@B @KB0,KB0,EAP,KB0,KB0,K@@@J@@,KB0,KB0,KJ@,KB0,KB0,@@BL@B0,KB0,KB0TKB0,KB0,KB0@@
+H0@KB0,KB0,KAP,KB0,KB0,K@@@NEA<_F1<[G1<_G1<[G1<[G1<A@@8NG1,[F1,[F1,[F1,[F1,[G0D@C!!P_F1<[G1,_F1<[KA<[G1,_@P@NEA<[G1,_F1<[
+G1,_F1<[G1<A@@8TG1,_F1,[F1,_F1,_F1<[G0D@C!!P_F1<[G1<[G1,_F1<[F1,_@P@NEA<[G14_F1<]G14_G1,_G1<A@@8TG1,[F1<[G1,_F1,[F1,[G0D@
+@PPNC (NC (NC (NC 8JC 8NG@@NEA<_G1<[G1<_F1<[G1<[G1<A@@8NG1,[F1,[F1,[F1,[F1,[G0D@@PPNC (NC (NC (NC 8JC 8NG@@AA@8NB 8NB 8N
+B 8NC (NC 8\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+') ; colorMapFromArray:#[0 0 0 66 66 66 206 206 206 140 140 140 74 74 74 8 8 8 49 49 57 123 115 115 214 214 214 148 148 148 82 82 82 16 16 16 222 222 222 156 156 156 90 90 90 24 24 24 22 22 22 25 25 25 231 231 231 165 165 165 99 99 99 33 33 33 8 16 8 57 49 57 8 8 16 239 239 239 173 173 173 107 107 107 41 41 41 109 109 109 181 181 181 115 115 115 49 49 49 189 189 189 123 123 123 57 57 57 41 33 33 173 165 165 33 33 41 16 8 16 16 16 8 197 197 197 198 198 198 132 132 132 115 107 107]; yourself]
+! !
+
+!GenericToolbarIconLibrary class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/GenericToolbarIconLibrary.st,v 1.205 2014-05-06 20:23:45 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/GenericToolbarIconLibrary.st,v 1.205 2014-05-06 20:23:45 cg Exp $'
+!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
+
+GenericToolbarIconLibrary initialize!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HVScrollableView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,65 @@
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+
+ScrollableView subclass:#HVScrollableView
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Basic'
+!
+
+!HVScrollableView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+!
+
+documentation
+"
+    This class is now void; all horizontal scroll functionality is
+    now contained in ScrollableView.
+    It remains here, for backward compatibility with applications using
+    it.
+
+    Please see the documentation and examples in my superclass, ScrollableView
+
+    [author:]
+        Claus Gittinger
+"
+
+! !
+
+!HVScrollableView class methodsFor:'defaults'!
+
+defaultHorizontalScrollable
+    ^ true
+
+
+! !
+
+!HVScrollableView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/HVScrollableView.st,v 1.28 2000-02-18 14:29:44 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HorizontalMiniScroller.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,60 @@
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+"{ Package: 'stx:libwidg' }"
+
+MiniScroller subclass:#HorizontalMiniScroller
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!HorizontalMiniScroller class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    like a scroller, but taking less screen space.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!HorizontalMiniScroller methodsFor:'initialization'!
+
+initialize
+    orientation := #horizontal.
+    super initialize.
+
+    "Created: 17.4.1996 / 14:01:26 / cg"
+! !
+
+!HorizontalMiniScroller class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/HorizontalMiniScroller.st,v 1.10 2005-05-11 16:36:04 stefan Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HorizontalPanelView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1547 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+PanelView subclass:#HorizontalPanelView
+	instanceVariableNames:'reverseOrderIfOKAtLeft'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!HorizontalPanelView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a View which arranges its child-views in a horizontal row.
+    All real work is done in PanelView - only the layout computation is
+    redefined here.
+
+    The layout is controlled the instance variables: 
+	horizontalLayout and verticalLayout
+    in addition to 
+	horizontalSpace and verticalSpace.
+
+    HorizontalSpace and verticalSpace control the spacing between elements;
+    they default to some 1mm.
+
+    The horizontal layout can be any of:
+
+	#left           arrange elements at left
+	#leftSpace      arrange elements at the left, start with spacing
+	#fixLeft        same as #left, but do not reduce spacing in case of no fit
+	#fixLeftSpace   same as #leftSpace, but do not reduce spacing in case of no fit
+	#right          arrange elements at the right
+	#rightSpace     arrange elements at the right, start with spacing
+	#center         arrange elements in the center
+	#spread         spread elements evenly
+	#spreadSpace    spread elements evenly with spacing at the ends
+	#fit            like #spread, but resize elements for tight packing
+	#fitSpace       like #fit, with additional spacing at the far ends
+	#leftFit        like #left, but extend the last (rightMost) element to the right
+	#leftSpaceFit   like #leftSpace, but extend the last (rightMost) element to the right
+	#rightFit       like #right, but extend the first (leftMost) element to the left
+	#rightSpaceFit  like #rightSpace, but extend the first (leftMost) element to the left
+
+	#leftMax        like corresponding non-Max layouts,
+	#leftSpaceMax   but resize all components to width of widest components
+	#rightMax
+	#rightSpaceMax
+	#centerMax
+	#spreadMax
+	#spreadSpaceMax
+
+    the vertical layout can be:
+
+	#top            place element at the top
+	#topSpace       place element at the top, offset by verticalSpace
+	#center         place it horizontally centered
+	#bottom         place it at the bottom
+	#bottomSpace    place it at the bottom, offset by verticalSpace
+	#fit            resize elements vertically to fit this panel
+	#fitSpace       like #fit, but with spacing
+
+	#topMax         like #top, but resize all views vertically to max height
+	#topSpaceMax    like #topSpace, but resize all views vertically to max height
+	#bottomMax      like #bottom, but resize all views vertically to max height
+	#bottomSpaceMax like #bottomSpace, but resize all views vertically to max height
+	#centerMax      like #center, but resize all views vertically to max height
+
+    The defaults is #center for both directions.
+    The layout is changed by the messages #verticalLayout: and #horizontalLayout:.
+    For backward compatibility (to times, where only hLayout existed), the simple
+    #layout: does the same as #horizontalLayout:. 
+    Do not use this old method; it will vanish and currently outputs a warning.
+
+    The panel assumes, that the elements do not resize themselfes, after it
+    became visible. This is not true for all widgets (buttons, labels or
+    inputFields may like to change). 
+    If you have changing elements, tell this to the panel
+    with 'aPanel elementsChangeSize:true'. In that case, the panel will react
+    to size changes of its elements, and reorganize things.
+
+    By combining Horizontal- and VerticalPanels (i.e. place a hPanel into a
+    vPanel), most layouts should be implementable.
+    However, iff none of these layout/space combinations is exactly what you need 
+    in your application, create a subclass, and redefine the setChildPositions 
+    method there.
+
+    TODO: for completeness, support #fixRight, #fixRightSpace,
+	  #rightFit, #rightSpaceFit layouts
+
+    CAVEAT: this class started with #left and no vertical alignments;
+    as time went by, more layouts were added (by users requests)
+    and now, many layout combinations are possible.
+    Reflecting this, the setup should be changed to use different selectors 
+    for space-on/off, max-resize and alignment
+    (i.e. having more and more layout symbols makes things a bit confusing ...)
+
+    [see also:]
+	VerticalPanelView
+	VariableVerticalPanel VariableHorizontalPanel
+	Label
+
+    [author:]
+	Claus Gittinger
+
+    [author:]
+	Claus Gittinger
+"
+!
+
+examples
+"
+    These examples show the effect of various horizontalLayout and
+    verticalLayout settings. Try them all. Especially, notice the
+    differences between the xxx and xxxSpace layouts and the effect of
+    setting different values for the spacing.
+    Try resizing the view and see how the elements get rearranged.
+
+    Most of the examples below place 3 buttons onto a panel; 
+    Of course, you can put any other view into a panel ... the last examples show this.
+    (The fit layouts are especially useful to be used with SelectionInListViews;
+     you can combine multiple labels & editFields with a selectionInListView, which
+     is expanded to fill the remaining area of the view)
+
+    example: default layout (center)
+	centers components
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'default: center'.
+
+	p := HorizontalPanelView in:v.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: same (default center layout) with different sized elements
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'default: center'.
+
+	p := HorizontalPanelView in:v.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'but1' in:p. b1 font:(b1 font size:8).
+	b2 := Button label:'b2' in:p.      b2 font:(b1 font size:24).
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: horizontal default (center); vertical centerMax
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'vL=centerMax'.
+	p := HorizontalPanelView in:v.
+	p verticalLayout:#centerMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'but1' in:p. b1 font:(b1 font size:8).
+	b2 := Button label:'b2' in:p.      b2 font:(b1 font size:24).
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: horizontal default (center); vertical topMax
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'vL=topMax'.
+	p := HorizontalPanelView in:v.
+	p verticalLayout:#topMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'but1' in:p. b1 font:(b1 font size:8).
+	b2 := Button label:'b2' in:p.      b2 font:(b1 font size:24).
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: horizontal default (center); vertical topSpaceMax
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'vL=topSpaceMax'.
+	p := HorizontalPanelView in:v.
+	p verticalLayout:#topSpaceMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'but1' in:p. b1 font:(b1 font size:8).
+	b2 := Button label:'b2' in:p.      b2 font:(b1 font size:24).
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: horizontal default (center); vertical bottomMax
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'vL=bottomMax'.
+	p := HorizontalPanelView in:v.
+	p verticalLayout:#bottomMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'but1' in:p. b1 font:(b1 font size:8).
+	b2 := Button label:'b2' in:p.      b2 font:(b1 font size:24).
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: horizontal default (center); vertical bottomSpaceMax
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'vL=bottomSpaceMax'.
+	p := HorizontalPanelView in:v.
+	p verticalLayout:#bottomSpaceMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'but1' in:p. b1 font:(b1 font size:8).
+	b2 := Button label:'b2' in:p.      b2 font:(b1 font size:24).
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: left-layout (vertical is default -> center)
+	fills left-to-right; no spacing before leftMost component
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=left; vL=default (center)'.
+
+	p horizontalLayout:#left.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: left starting with spacing (vertical is default -> center)
+	fills left-to-right; spacing before leftMost component
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=leftSpace; vL=center'.
+
+	p horizontalLayout:#leftSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: leftFit-layout (vertical is default -> center)
+	fills left-to-right; resizes the rightMost component to fit
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=leftFit; vL=center'.
+
+	p horizontalLayout:#leftFit.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: leftSpaceFit-layout (vertical is default -> center)
+	fills left-to-right; 
+	starts with spacing & resizes the rightMost component to fit with spacing
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=leftSpaceFit; vL=center'.
+
+	p horizontalLayout:#leftSpaceFit.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: right-layout (vertical is default -> center)
+	right-to-left
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=right; vL=center'.
+
+	p horizontalLayout:#right.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: right with initial spacing (vertical is default -> center)
+	right-to-left with spacing after last component
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=rightSpace; vL=center'.
+
+	p horizontalLayout:#rightSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: rightFit-layout (vertical is default -> center)
+	right-to-left; resize the leftMost component to fit
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=rightFit; vL=center'.
+
+	p horizontalLayout:#rightFit.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: rightSpaceFit with initial spacing (vertical is default -> center)
+	right-to-left; start with spacing & resize the leftMost to fit
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=rightSpaceFit; vL=center'.
+
+	p horizontalLayout:#rightSpaceFit.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit-layout (vertical is default -> center)
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	p horizontalLayout:#fit.
+	v label:'hL=fit; vL=center'.
+
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: full fit i.e. no spacing (vertical is default -> center)
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	p horizontalLayout:#fit.
+	p horizontalSpace:0.
+	v label:'hL=fit hS=0; vL=center'.
+
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit with spacing (vertical is default -> center)
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fitSpace; vL=center'.
+
+	p horizontalLayout:#fitSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: spread-layout (vertical is default -> center)
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	p horizontalLayout:#spread.
+	v label:'hL=spread; vL=center'.
+
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: spread with spacing (vertical is default -> center)
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=spreadSpace; vL=center'.
+
+	p horizontalLayout:#spreadSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: spread with spacing; vertical fit
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=spreadSpace; vL=fit'.
+
+	p horizontalLayout:#spreadSpace.
+	p verticalLayout:#fit.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: spread with spacing; vertical fit with spacing
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=spreadSpace; vL=fitSpace'.
+
+	p horizontalLayout:#spreadSpace.
+	p verticalLayout:#fitSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit - top
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fit; vL=top'.
+
+	p horizontalLayout:#fit.
+	p verticalLayout:#top.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit with initial spacing
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fitSpace; vL=top'.
+
+	p horizontalLayout:#fitSpace.
+	p verticalLayout:#top.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit with initial spacing in both directions
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fitSpace; vL=fitSpace'.
+
+	p horizontalLayout:#fitSpace.
+	p verticalLayout:#fitSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit without spacing in both directions
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fit hS=0; vL=fit'.
+
+	p horizontalLayout:#fit.
+	p verticalLayout:#fit.
+	p horizontalSpace:0.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit with initial spacing; top with spacing
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fitSpace; vL=topSpace'.
+
+	p horizontalLayout:#fitSpace.
+	p verticalLayout:#topSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit - top without spacing
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fit; vL=top'.
+
+	p horizontalLayout:#fit.
+	p verticalLayout:#top.
+	p horizontalSpace:0.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit - bottom with spacing and bottomSpace
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fitSpace; vL=bottomSpace'.
+
+	p horizontalLayout:#fitSpace.
+	p verticalLayout:#bottomSpace.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: fit no horizontal space - bottom with spacing and bottomSpace
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=fit; vL=bottomSpace'.
+
+	p horizontalLayout:#fit.
+	p verticalLayout:#bottomSpace.
+	p horizontalSpace:0.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'button2' in:p.
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+    example: leftMax - vertical default
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=leftMax; vL=default'.
+
+	p horizontalLayout:#leftMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'b2' in:p.
+	b3 := Button label:'but3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: leftSpaceMax - vertical default
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=leftSpaceMax; vL=default'.
+
+	p horizontalLayout:#leftSpaceMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'b2' in:p.
+	b3 := Button label:'but3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: rightMax - vertical default
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=rightMax; vL=default'.
+
+	p horizontalLayout:#rightMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'b2' in:p.
+	b3 := Button label:'but3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: rightSpaceMax - vertical default
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=rightSpaceMax; vL=default'.
+
+	p horizontalLayout:#rightSpaceMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'b2' in:p.
+	b3 := Button label:'but3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: centerMax - vertical default
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=centerMax; vL=default'.
+
+	p horizontalLayout:#centerMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'b2' in:p.
+	b3 := Button label:'but3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: spreadMax - vertical default
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=spreadMax; vL=default'.
+
+	p horizontalLayout:#spreadMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'b2' in:p.
+	b3 := Button label:'but3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: spreadSpaceMax - vertical default
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=spreadSpaceMax; vL=default'.
+
+	p horizontalLayout:#spreadSpaceMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'button1' in:p.
+	b2 := Button label:'b2' in:p.
+	b3 := Button label:'but3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: maximize elements in both directions and center
+									[exBegin]
+	|v p b1 b2 b3|
+
+	v := StandardSystemView new.
+	v label:'hL=centerMax; vL=centerMax'.
+
+	p := HorizontalPanelView in:v.
+	p horizontalLayout:#centerMax.
+	p verticalLayout:#centerMax.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	b1 := Button label:'but1' in:p. b1 font:(b1 font size:8).
+	b2 := Button label:'b2' in:p.      b2 font:(b1 font size:24).
+	b3 := Button label:'button3' in:p.
+	v extent:300 @ 100.
+	v open
+									[exEnd]
+
+
+    example: placing hPanels into a vPanel
+									[exBegin]
+	|v vP hP1 hP2 hP3 b1 b2 b3 b4 b5 b6 b7 b8 b9|
+
+	v := StandardSystemView new.
+	vP := VerticalPanelView in:v.
+	vP origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+	vP verticalLayout:#fit;
+	   verticalSpace:0;
+	   horizontalLayout:#fit.
+
+	hP1 := HorizontalPanelView in:vP.
+	hP1 horizontalLayout:#fitSpace;
+	    verticalLayout:#center.
+	b1 := Button label:'button1' in:hP1.
+	b2 := Button label:'button2' in:hP1.
+	b3 := Button label:'button3' in:hP1.
+
+	hP2 := HorizontalPanelView in:vP.
+	hP2 horizontalLayout:#fitSpace;
+	    verticalLayout:#center.
+	b4 := Button label:'button4' in:hP2.
+	b5 := Button label:'button5' in:hP2.
+	b6 := Button label:'button6' in:hP2.
+
+	hP3 := HorizontalPanelView in:vP.
+	hP3 horizontalLayout:#fitSpace;
+	    verticalLayout:#center.
+	b7 := Button label:'button7' in:hP3.
+	b8 := Button label:'button8' in:hP3.
+	b9 := Button label:'button9' in:hP3.
+
+	v extent:300 @ 300.
+	v open
+									[exEnd]
+
+    example: a browser like table, the two left tables have a fix width,
+	     while the rightmost list extends to the far right.
+									[exBegin]
+	|v p l1 l2 l3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView in:v.
+	v label:'hL=leftFit hS=0; vL=fit'.
+
+	p horizontalLayout:#leftFit.
+	p horizontalSpace:0.
+	p verticalLayout:#fit.
+	p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+
+	l1 := ScrollableView for:FileSelectionList in:p.
+	l1 stayInDirectory:true.
+	l1 ignoreParentDirectory:true.
+	l1 directory:'/'.
+	l1 action:[:selection | l2 directory:(l1 selectedPathname)].
+
+	l2 := ScrollableView for:FileSelectionList in:p.
+	l2 stayInDirectory:true.
+	l2 directory:nil.
+	l2 ignoreParentDirectory:true.
+	l2 action:[:selection | l3 directory:(l2 selectedPathname)].
+
+	l3 := ScrollableView for:FileSelectionList in:p.
+	l3 directory:nil.
+	l3 ignoreParentDirectory:false.
+	v extent:400 @ 300.
+	v open
+									[exEnd]
+
+
+    trouble example: self-resizing elements may cause trouble
+									[exBegin]
+	|v p l1 l2 l3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:v.
+
+	l1 := (Label label:'one' in:p) level:-1.
+	l2 := (Label label:'two' in:p) level:-1.
+	l3 := (Label label:'three' in:p) level:-1.
+
+	v extent:400 @ 300.
+	v open.
+
+	(Delay forSeconds:5) wait.
+
+	l1 label:'oneone'.
+	l2 label:'twotwo'.
+	l3 label:'threethree'.
+									[exEnd]
+
+
+    fixed trouble example: tell the panel that this situation may happen
+									[exBegin]
+	|v p l1 l2 l3|
+
+	v := StandardSystemView new.
+	p := HorizontalPanelView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:v.
+	p elementsChangeSize:true.
+
+	l1 := (Label label:'one' in:p) level:-1.
+	l2 := (Label label:'two' in:p) level:-1.
+	l3 := (Label label:'three' in:p) level:-1.
+
+	v extent:400 @ 300.
+	v open.
+
+	(Delay forSeconds:5) wait.
+
+	l1 label:'oneone'.
+	l2 label:'twotwo'.
+	l3 label:'threethree'.
+									[exEnd]
+"
+! !
+
+!HorizontalPanelView methodsFor:'accessing'!
+
+horizontalLayout
+    "return the horizontal layout as symbol.
+     the returned value is one of
+	#left           arrange elements at the left
+	#leftSpace      arrange elements at the left, start with spacing
+	#fixLeft        same as #left, but do not reduce spacing in case of no fit
+	#fixLeftSpace   same as #leftSpace, but do not reduce spacing in case of no fit
+	#right          arrange elements at the right
+	#rightSpace     arrange elements at the right, start with spacing
+	#center         arrange elements in the center
+	#spread         spread elements evenly
+	#spreadSpace    spread elements evenly with spacing at the ends
+	#fit            like #spread, but resize elements for tight packing
+	#fitSpace       like #fit, with additional spacing at the far ends
+	#leftFit        like #left, but resize the last element to fit
+	#leftSpaceFit   like #leftSpace, but resize the last element to fit
+	#rightFit       like #right, but resize the first element to fit
+	#rightSpaceFit  like #rightSpace, but resize the first element to fit
+      the default is #center
+      See the class documentation for  the meanings.
+    "
+
+    ^ hLayout
+
+    "Modified: 17.8.1997 / 15:21:26 / cg"
+!
+
+horizontalLayout:aSymbol
+    "change the horizontal layout as symbol.
+     The argument, aSymbol must be one of:
+	#left           arrange elements at the left
+	#leftSpace      arrange elements at the left, start with spacing
+	#fixLeft        same as #left, but do not reduce spacing in case of no fit
+	#fixLeftSpace   same as #leftSpace, but do not reduce spacing in case of no fit
+	#right          arrange elements at the right
+	#rightSpace     arrange elements at the right, start with spacing
+	#center         arrange elements in the center
+	#spread         spread elements evenly
+	#spreadSpace    spread elements evenly with spacing at the ends
+	#fit            like #spread, but resize elements for tight packing
+	#fitSpace       like #fit, with additional spacing at the far ends
+	#leftFit        like #left, but resize the last element to fit
+	#leftSpaceFit   like #leftSpace, but resize the last element to fit
+	#rightFit       like #right, but resize the first element to fit
+	#rightSpaceFit  like #rightSpace, but resize the first element to fit
+
+	#leftMax        like non-Max layouts, resizing components to
+	#leftSpaceMax   the width of the widest component
+	#rightMax
+	#rightSpaceMax
+	#centerMax
+	#spreadMax
+	#spreadSpaceMax
+      the default (if never changed) is #center.
+      See the class documentation for the meanings.
+    "
+
+    (hLayout ~~ aSymbol) ifTrue:[
+	hLayout := aSymbol.
+	self layoutChanged
+    ]
+
+    "Modified: 17.8.1997 / 15:21:16 / cg"
+!
+
+layout:something
+    "OBSOLETE compatibility interface. Will vanish.
+     leftover for historic reasons - do not use any more.
+     In the meantime, try to figure out what is meant ... a kludge"
+
+    <resource:#obsolete>
+
+    something isLayout ifTrue:[^ super layout:something].
+
+    self obsoleteMethodWarning:'use #horizontalLayout:'.
+    ^ self horizontalLayout:something
+
+    "Modified: 31.8.1995 / 23:07:33 / claus"
+!
+
+reverseOrderIfOKAtLeft
+    "return the reverseOrderIfOKAtLeft flag.
+     This can be set for OK-Cancel like panels, where the OK Button should
+     be positioned on the left for some viewStyles."
+
+    ^ reverseOrderIfOKAtLeft 
+!
+
+reverseOrderIfOKAtLeft:aBoolean
+    "set/clear the reverseOrderIfOKAtLeft flag.
+     This can be set for OK-Cancel like panels, where the OK Button should
+     be positioned on the left for some viewStyles."
+
+    reverseOrderIfOKAtLeft := aBoolean
+!
+
+verticalLayout
+    "return the vertical layout as a symbol.
+     the returned value is one of
+	#top            place element at the top
+	#topSpace       place element at the top, offset by verticalSpace
+	#center         place it horizontally centered
+	#bottom         place it at the bottom
+	#bottomSpace    place it at the bottom, offset by verticalSpace
+	#fit            resize elements vertically to fit this panel
+	#fitSpace       like #fit, but with spacing
+
+	#topMax         like #top, but resize all views vertically to max height
+	#topSpaceMax    like #topSpace, but resize all views vertically to max height
+	#bottomMax      like #bottom, but resize all views vertically to max height
+	#bottomSpaceMax like #bottomSpace, but resize all views vertically to max height
+	#centerMax      like #center, but resize all views vertically to max height
+      the default is #center
+      See the class documentation for  the meanings.
+    "
+
+    ^ vLayout
+!
+
+verticalLayout:aSymbol
+    "change the vertical layout as a symbol.
+     The argument, aSymbol must be one of:
+	#top            place element at the top
+	#topSpace       place element at the top, offset by verticalSpace
+	#center         place it horizontally centered
+	#bottom         place it at the bottom
+	#bottomSpace    place it at the bottom, offset by verticalSpace
+	#fit            resize elements vertically to fit this panel
+	#fitSpace       like #fit, but with spacing
+
+	#topMax         like #top, but resize all views vertically to max height
+	#topSpaceMax    like #topSpace, but resize all views vertically to max height
+	#bottomMax      like #bottom, but resize all views vertically to max height
+	#bottomSpaceMax like #bottomSpace, but resize all views vertically to max height
+	#centerMax      like #center, but resize all views vertically to max height
+      the default (if never changed) is #center
+      See the class documentation for  the meanings.
+    "
+
+    (vLayout ~~ aSymbol) ifTrue:[
+	vLayout := aSymbol.
+	self layoutChanged
+    ]
+! !
+
+!HorizontalPanelView methodsFor:'focus handling'!
+
+subviewsInFocusOrder
+
+    subViews isEmptyOrNil ifTrue:[ ^ #() ].
+    
+    (reverseOrderIfOKAtLeft == true
+    and:[Dialog defaultOKButtonAtLeft]) ifTrue:[
+        ^ subViews reversed
+    ].
+    ^ subViews
+! !
+
+!HorizontalPanelView methodsFor:'layout'!
+
+setChildPositions
+    "(re)compute position of every child whenever childs are added or
+     my size has changed"
+
+    |xpos space sumOfWidths numChilds l wEach wInside hL vL resizeToMaxV 
+     resizeToMaxH maxHeight maxWidth m2 subViews restWidth y2 bw|
+
+    subViews := self subViewsToConsider.
+    (numChilds := subViews size) == 0 ifTrue:[^ self].
+
+    reverseOrderIfOKAtLeft == true ifTrue:[
+        (Dialog defaultOKButtonAtLeft) ifTrue:[
+            subViews := subViews reversed.
+        ]
+    ].
+
+"/    self extentChangedFlag ifTrue:[
+"/        ext := self computeExtent.
+"/        width := ext x.
+"/        height := ext y.
+"/    ].
+
+    space := horizontalSpace.
+
+    bw := self borderWidth.
+    m2 := margin * 2.
+    wInside := width - m2 + (bw*2) - subViews last borderWidth.
+
+    hL := hLayout.
+    vL := vLayout.
+
+    resizeToMaxH := false.
+    (hL endsWith:'Max') ifTrue:[
+        resizeToMaxH := true.
+        wEach := maxWidth := subViews
+                                inject:0 
+                                into:[:maxSoFar :child |
+                                        maxSoFar max:child widthIncludingBorder
+                                ].
+        hL := (hL copyButLast:3) asSymbol.
+    ].
+
+    numChilds == 1 ifTrue:[
+        (hL == #leftFit or:[hL == #rightFit]) ifTrue:[
+            hL := #fit
+        ].
+        (hL == #leftSpaceFit or:[hL == #rightSpaceFit]) ifTrue:[
+            hL := #fitSpace
+        ].
+    ].
+
+    hL == #fitSpace ifTrue:[
+        "
+         adjust childs extents and set origins.
+         Be careful to avoid accumulation of rounding errors
+        "
+        wEach := (wInside - ((numChilds + 1) * space)) / numChilds.
+        xpos := space + margin - bw.
+    ] ifFalse:[
+        hL == #fit ifTrue:[
+            "
+             adjust childs extents and set origins.
+             Be careful to avoid accumulation of rounding errors
+            "
+            wEach := (wInside - ((numChilds - 1) * space)) / numChilds.
+            xpos := margin - bw.
+        ] ifFalse:[
+            l := hL.
+
+            "
+             compute net width needed
+            "
+            resizeToMaxH ifTrue:[
+                sumOfWidths := subViews inject:0 into:[:sumSoFar :child | sumSoFar + maxWidth + (child borderWidth*2)].
+            ] ifFalse:[
+                sumOfWidths := subViews inject:0 into:[:sumSoFar :child | sumSoFar + child widthIncludingBorder].
+
+                "/ adjust - do not include width of last(first) element if doing a fit
+                (hL == #leftFit or:[hL == #leftSpaceFit]) ifTrue:[
+                    sumOfWidths := sumOfWidths - subViews last widthIncludingBorder.
+                ] ifFalse:[
+                    (hL == #rightFit or:[hL == #rightSpaceFit]) ifTrue:[
+                        sumOfWidths := sumOfWidths - subViews first widthIncludingBorder.
+                    ]
+                ].
+            ].
+
+            restWidth := width - sumOfWidths "- (numChilds-1*space)".
+
+            ((l == #center) and:[numChilds == 1]) ifTrue:[l := #spread].
+            (l == #spread and:[numChilds == 1]) ifTrue:[l := #spreadSpace].
+
+            "
+             compute position of leftmost subview and space between them;
+             if they do hardly fit, leave no space between them 
+            "
+            ((sumOfWidths > (width - m2)) 
+            and:[l ~~ #fixLeftSpace and:[l ~~ #fixLeft]]) ifTrue:[
+                xpos := margin.
+                space := 0
+            ] ifFalse: [
+                l == #fixLeftSpace ifTrue:[
+                    l := #leftSpace
+                ] ifFalse:[
+                    l == #fixLeft ifTrue:[
+                        l := #left
+                    ]
+                ].
+                ((l == #right) or:[l == #rightSpace
+                or:[l == #rightFit or:[l == #rightSpaceFit]]]) ifTrue:[
+                    xpos := restWidth - (space * (numChilds - 1)).
+"/
+"/                    bw == 0 ifTrue:[
+"/                        xpos := xpos + space 
+"/                    ].
+"/
+                    (l == #rightSpace   
+                    or:[l == #rightSpaceFit]) ifTrue:[
+                        xpos >= space ifTrue:[
+                            xpos := xpos - space
+                        ]
+                    ].
+                    xpos := xpos - margin.
+
+                    xpos < 0 ifTrue:[
+                        space := space min:(restWidth // (numChilds + 1)).
+                        xpos := restWidth - (space * numChilds).
+                    ]
+                ] ifFalse:[
+                    (l == #spread) ifTrue:[
+                        numChilds == 1 ifTrue:[
+                            space := (restWidth - m2).
+                        ] ifFalse:[
+                            space := (restWidth - m2) // (numChilds - 1).
+                        ].
+                        xpos := margin.
+                        (space == 0) ifTrue:[
+                            xpos := restWidth // 2
+                        ]
+                    ] ifFalse:[
+                      (l == #spreadSpace) ifTrue:[
+                        space := (restWidth - m2) // (numChilds + 1).
+                        xpos := space + margin.
+                        (space == 0) ifTrue:[
+                            xpos := restWidth // 2
+                        ]
+                      ] ifFalse:[
+                        ((l == #left) or:[l == #leftSpace
+                        or:[l == #leftFit or:[l == #leftSpaceFit]]]) ifTrue:[
+                            (l == #left or:[l == #leftFit]) ifTrue:[                
+                                numChilds == 1 ifTrue: [
+                                    space := space min:(restWidth - m2).
+                                ]ifFalse:[
+                                    space := space min:(restWidth - m2) // (numChilds - 1).
+                                ].
+                            ] ifFalse:[                                                      
+                                space := space min:(restWidth - m2) // (numChilds "+ 1").
+                            ].
+                            (hL == #fixLeft or:[hL == #fixLeftSpace]) ifTrue:[
+                                space := space max:horizontalSpace.
+                            ] ifFalse:[
+                                space := space max:0.
+                            ].
+                            (l == #leftSpace or:[l == #leftSpaceFit]) ifTrue:[
+                                xpos := space + margin.
+                            ] ifFalse:[
+                                "/
+                                "/ if the very first view has a 0-level AND
+                                "/ my level is non-zero, begin with margin
+                                "/
+                                true "(margin ~~ 0 and:[subViews first level == 0])" ifTrue:[
+                                    xpos := margin
+                                ] ifFalse:[
+                                    xpos := 0
+                                ]
+                            ]
+                        ] ifFalse:[
+                            "center"
+                            xpos := (restWidth - ((numChilds - 1) * space)) // 2.
+                            xpos < 0 ifTrue:[
+                                space := restWidth // (numChilds + 1).
+                                xpos := (restWidth - ((numChilds - 1) * space)) // 2.
+                            ]
+                        ]
+                      ]
+                    ]
+                ]
+            ].
+        ].
+    ].
+
+    resizeToMaxV := false.
+    (vL endsWith:'Max') ifTrue:[
+        resizeToMaxV := true.
+        maxHeight := subViews inject:0 into:[:maxSoFar :child | maxSoFar max:child heightIncludingBorder].
+        vL := (vL copyButLast:3) asSymbol.
+    ].
+
+    "
+     now set positions
+    "
+
+    subViews keysAndValuesDo:[:index :child |
+        |ypos advance bwChild hChild newHChild|
+
+        hChild := child heightIncludingBorder.
+        bwChild := child borderWidth.
+
+        elementsChangeSize ifTrue:[
+            "to avoid a recursion when we change the elements size"
+            child removeDependent:self.
+        ].
+        resizeToMaxV ifTrue:[
+            child height:(hChild := maxHeight - (bwChild  * 2)).
+        ].
+
+        vL == #top ifTrue:[
+            ypos := margin
+        ] ifFalse:[
+            vL == #topSpace ifTrue:[
+                ypos :=  margin + verticalSpace
+            ] ifFalse:[
+                vL == #bottom ifTrue:[
+                    ypos := height - margin - child heightIncludingBorder
+                ] ifFalse:[
+                    vL == #bottomSpace ifTrue:[
+                        ypos := height - margin 
+                                - verticalSpace - child heightIncludingBorder.
+                    ] ifFalse:[
+                        vL == #fitSpace ifTrue:[
+                            ypos := verticalSpace.
+                            newHChild := height - ((verticalSpace + bwChild) * 2).
+                            ypos := ypos + margin.
+                            newHChild := newHChild - m2.
+                        ] ifFalse:[
+                            vL == #fit ifTrue:[
+                                newHChild := height - (bwChild * 2).
+                                "/
+                                "/ if the view has a 0-level AND
+                                "/ my level is non-zero, begin with margin
+                                "/
+                                true "(level ~~ 0 and:[child level == 0])" ifTrue:[
+                                    ypos := margin.
+                                    newHChild := newHChild - m2.
+                                ] ifFalse:[
+                                    ypos := 0. 
+                                ].
+                            ] ifFalse:[
+                                "centered"
+                                ypos := margin + ((height - m2 - hChild) // 2).
+                            ]
+                        ]
+                    ]
+                ]
+            ]
+        ].
+        newHChild notNil ifTrue:[
+            child height:newHChild
+        ].
+
+        (ypos < 0) ifTrue:[ypos := 0].
+
+        y2 := ypos + child height - 1.
+
+        (hL == #fit 
+         or:[hL == #fitSpace
+         or:[resizeToMaxH]]) ifTrue:[
+"/cg: removed this (OLD) piece of code,
+"/ which prevents resizing of label-like things if their sizeFixed
+"/ is set to true (I dont remember why I ever added this)
+
+"/            child sizeFixed ifTrue:[
+"/                d := wEach - (child widthIncludingBorder) // 2.
+"/                child origin:(xpos truncated + d @ ypos)
+"/            ] ifFalse:[
+                child origin:(xpos truncated @ ypos)
+                      corner:(xpos + wEach - bwChild - 1) truncated @ y2.
+"/            ].
+            advance := wEach.
+        ] ifFalse:[
+            child origin:(xpos @ ypos).
+            advance := child widthIncludingBorder
+        ].
+
+        index == numChilds ifTrue:[
+            |x|
+
+            (hL == #leftFit or:[hL == #leftSpaceFit]) ifTrue:[
+                x := width - margin - 1 - (bwChild * 2) + bw.
+                hL == #leftSpaceFit ifTrue:[
+                    x := x - space
+                ].
+                child corner:(x @ y2)
+            ].
+        ].
+        index == 1 ifTrue:[
+            (hL == #rightFit or:[hL == #rightSpaceFit]) ifTrue:[
+                xpos := margin + 0 + (bwChild * 2) - bw.
+                hL == #rightSpaceFit ifTrue:[
+                    xpos := xpos + space
+                ].
+                advance := restWidth.
+                child origin:(xpos @ (child origin y))
+                      corner:((xpos+advance) @ (child corner y))
+            ].
+        ].
+
+        xpos := xpos + advance + space.
+        elementsChangeSize ifTrue:[
+            "reinstall dependency that we removed above"
+            child addDependent:self.
+        ].
+    ].
+
+    "Modified: / 04-09-1995 / 18:43:10 / claus"
+    "Modified: / 10-10-2007 / 13:49:10 / cg"
+! !
+
+!HorizontalPanelView methodsFor:'queries'!
+
+preferredExtent
+    "return a good extent, one that makes subviews fit"
+
+    |sumOfWidths maxHeight maxWidth m2 subViews|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    subViews := self subViewsToConsider.
+    (subViews size == 0) ifTrue:[
+        ^ super preferredExtent.
+        "/ ^ horizontalSpace @ verticalSpace].
+    ].
+
+    "compute net height needed"
+
+    sumOfWidths := 0.
+    maxHeight := 0.
+    maxWidth := 0.
+
+    subViews do:[:child |
+        |childsPreference|
+
+        "/ better to use component's preferredExtent ...
+
+"/        child realized ifTrue:[
+"/            childsPreference := child extent.
+"/        ] ifFalse:[
+            childsPreference := child preferredExtent.
+"/        ].
+        sumOfWidths := sumOfWidths + childsPreference x.
+        maxHeight := maxHeight max:childsPreference y.
+        maxWidth := maxWidth max:childsPreference x.
+
+        "/ ... instead of actual extent
+"/        sumOfWidths := sumOfWidths + child widthIncludingBorder.
+"/        maxHeight := maxHeight max:(child heightIncludingBorder).
+"/        maxWidth := maxWidth max:(child widthIncludingBorder).
+    ].
+"/    self borderWidth ~~ 0 ifTrue:[
+"/        sumOfWidths := sumOfWidths + (horizontalSpace * 2).
+"/        maxHeight := maxHeight + (verticalSpace * 2).
+"/    ].
+
+    (hLayout == #fit 
+    or:[hLayout == #fitSpace
+    or:[hLayout endsWith:'Max']]) ifTrue:[
+        sumOfWidths := maxWidth * subViews size.
+        self borderWidth ~~ 0 ifTrue:[
+            sumOfWidths := sumOfWidths + (horizontalSpace * 2).
+        ].
+        hLayout == #fitSpace ifTrue:[
+            "/ care for spacing ...
+            sumOfWidths := sumOfWidths + (horizontalSpace * (subViews size + 1)).
+        ].
+    ] ifFalse:[
+        sumOfWidths := sumOfWidths + ((subViews size - 1) * horizontalSpace).
+        ((hLayout == #leftSpace) or:[hLayout == #rightSpace]) ifTrue:[
+            sumOfWidths := sumOfWidths + horizontalSpace
+        ] ifFalse:[
+            ((hLayout == #center) or:[hLayout == #spread]) ifTrue:[
+                sumOfWidths := sumOfWidths + (horizontalSpace * 2)
+            ]
+        ].
+    ].
+
+    ((vLayout == #topSpace) 
+    or:[vLayout == #bottomSpace]) ifTrue:[
+        maxHeight := maxHeight + verticalSpace
+    ] ifFalse:[
+        ((vLayout == #fitSpace) 
+        or:[vLayout == #center
+        or:[vLayout == #centerSpace]]) ifTrue:[
+            maxHeight := maxHeight + (verticalSpace * 2)
+        ]        
+    ].
+
+    m2 := margin * 2.
+    ^ (sumOfWidths + m2) @ (maxHeight + m2)
+
+    "Modified: / 17.1.1998 / 00:18:38 / cg"
+! !
+
+!HorizontalPanelView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/HorizontalPanelView.st,v 1.62 2013-04-25 13:10:39 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/HorizontalPanelView.st,v 1.62 2013-04-25 13:10:39 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HorizontalScrollBar.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,59 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+ScrollBar subclass:#HorizontalScrollBar
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!HorizontalScrollBar class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this class implements horizontal scrollbars with scroller and
+    2 step-scroll buttons. When moved or stepped, it performs a
+    predefined action.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!HorizontalScrollBar methodsFor:'initialization'!
+
+initialize
+    orientation := #horizontal.
+    super initialize
+
+! !
+
+!HorizontalScrollBar class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/HorizontalScrollBar.st,v 1.29 1999-07-07 18:53:37 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HorizontalScroller.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,61 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+"{ Package: 'stx:libwidg' }"
+
+Scroller subclass:#HorizontalScroller
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!HorizontalScroller class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Actually simply a scroller which preinitializes itself to have
+    a horizontal orientation.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!HorizontalScroller methodsFor:'initialization'!
+
+initialize
+    orientation := #horizontal. 
+    super initialize.
+
+    "Modified: / 7.3.1999 / 00:01:08 / cg"
+! !
+
+!HorizontalScroller class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/HorizontalScroller.st,v 1.17 2005-05-11 16:36:28 stefan Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/InfoBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,456 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+DialogBox subclass:#InfoBox
+	instanceVariableNames:'formLabel textLabel'
+	classVariableNames:'InfoBitmap'
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!InfoBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+
+!
+
+documentation
+"
+   Historic note:
+        originally, ST/X had separate classes for the various entry methods;
+        there were YesNoBox, EnterBox, InfoBox and so on.
+        In the meantime, the DialogBox class (and therefore its alias: Dialog)
+        is going to duplicate most funcionality found in these classes.
+
+        In the future, those existing subclasses' functionality is going to
+        be moved fully into Dialog, and the subclasses will be replaced by dummy
+        delegators. (They will be kept for backward compatibility, though).
+
+
+
+    this class implements a pop-up box to show an information message.
+    It has a single ok-Button, which closes the box.
+    Also entering return has (by default) the same effect as pressing
+    the ok-button.
+    InfoBox is a superclass of some other boxes - see WarningBox, YesNoBox etc.
+    most of them simply redefine the icon shown in the upper left or
+    add buttons.
+
+    [instance variables:]
+
+        formLabel        <Label>        shows a bitmap (warning, question-mark)
+
+        textLabel        <Label>        shows the boxes text
+
+
+    [author:]
+        Claus Gittinger
+"
+
+!
+
+examples
+"
+    Notice, the preferred use is via the DialogBox class messages,
+    such as 
+                                                                        [exBegin]
+        Dialog information:'Time to go home'
+                                                                        [exEnd]
+    these (DialogBox) mesages are compatible with VW and should therefore
+    be used for portability.
+
+    Direct use of InfoBox is only required for highly specialized boxes.
+
+
+
+    InfoBoxes are created with:
+
+        aBox := InfoBox title:'some title'.
+
+    and shown with:
+
+        aBox showAtPointer
+    or
+        aBox open
+
+    The default box shows 'yes' in its button; this can be changed with:
+
+        aBox okText:'some string'.
+
+    the boxes bitmap-image can be changed with:
+
+        aBox image:aForm
+
+
+    Since this type of information is pretty common, a convenient information
+    method has been added to Object.
+    Thus, you can use:
+                                                                        [exBegin]
+        self information:'hello world'
+                                                                        [exEnd]
+
+    everwhere in your program.
+    for ST-80 compatibility, you can also use:
+                                                                        [exBegin]
+        Dialog information:'hello world'
+                                                                        [exEnd]
+
+
+
+    standard box:
+                                                                        [exBegin]
+        |box|
+
+        box := InfoBox title:'hello world '.
+        box open
+                                                                        [exEnd]
+
+
+    changing the buttons label:
+                                                                        [exBegin]
+        |box|
+
+        box := InfoBox title:'hello world '.
+        box okText:'wow'.
+        box open
+                                                                        [exEnd]
+
+
+    changing the icon:
+
+                                                                        [exBegin]
+        |box|
+
+        box := InfoBox title:'hello world '.
+        box image:(Image fromFile:'libtool/bitmaps/SBrowser.xbm' inPackage:'stx:libtool').
+        box okText:'wow'.
+        box open
+                                                                        [exEnd]
+
+    or even:
+                                                                        [exBegin]
+        |box|
+
+        box := InfoBox title:'hello garfield '.
+        box image:((Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages') magnifiedTo:200@100).
+        box okText:'wow'.
+        box open
+                                                                        [exEnd]
+
+
+    If you plan to use boxes as in the last example, you may want to
+    keep the box around for reuse (since the image magnification takes some time).
+                                                                        [exBegin]
+        |box|
+
+        box := InfoBox title:'hello garfield '.
+        box image:((Image fromFile:'garfield.gif' inPackage:'stx:goodies/bitmaps/gifImages') magnifiedTo:200@100).
+        box okText:'wow'.
+        box open.
+
+        box title:'hello again'.
+        box open
+                                                                        [exEnd]
+
+"
+! !
+
+!InfoBox class methodsFor:'instance creation'!
+
+title:titleString
+    "create a new infoBox with title, aTitleString"
+
+    ^ (self new) title:titleString
+
+    "
+     (InfoBox title:'hello') open
+    "
+
+    "Modified: / 22-12-2010 / 19:30:50 / cg"
+!
+
+title:titleString label:labelString 
+    "create a new infoBox with label, labelString"
+
+    ^ (self new) title:titleString label:labelString 
+
+    "
+     (InfoBox title:'hello' label:'Attention' ) open
+    "
+
+    "Created: / 22-12-2010 / 19:31:03 / cg"
+! !
+
+!InfoBox class methodsFor:'defaults'!
+
+defaultLabel
+    "return the boxes default window title."
+
+    ^ 'Info'
+
+    "Created: 23.4.1996 / 17:12:33 / cg"
+!
+
+iconBitmap
+    "return the bitmap shown as icon in my instances.
+     This is the default image; you can overwrite this in a concrete
+     instance with the #image: message"
+
+    <resource: #style (#'infoBox.icon' #'infoBox.iconFile')>
+
+    InfoBitmap isNil ifTrue:[
+        InfoBitmap := self iconBitmapFromStyle:'infoBox.icon' orStyleFile:'infoBox.iconFile' orFilename:'bitmaps/Information.xbm'.
+    ].
+    ^ InfoBitmap
+
+    "Modified: / 26.10.1997 / 17:02:51 / cg"
+!
+
+iconBitmapFromStyle:styleName orStyleFile:styleFile orFilename:fileName
+    "return the bitmap shown as icon in my instances.
+     This is the default image; you can overwrite this in a concrete
+     instance with the #image: message"
+
+    |img imgFileName|
+
+    img := self styleSheet at:styleName.
+    img isNil ifTrue:[
+        imgFileName := StyleSheet at:styleFile default:fileName.
+        img := Smalltalk imageFromFileNamed:imgFileName forClass:self.
+    ].
+    img notNil ifTrue:[
+        img := img onDevice:Display
+    ].
+    ^ img
+
+    "Modified: / 26.10.1997 / 17:02:51 / cg"
+! !
+
+!InfoBox class methodsFor:'styles'!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables.
+     Here, the cached infoBitmap is simply flushed."
+
+    InfoBitmap := nil
+
+    "Modified: 1.4.1997 / 14:44:50 / cg"
+! !
+
+!InfoBox methodsFor:'accessing'!
+
+form:aFormOrImage
+    "historical leftover - define a form to be displayed left of the title"
+
+    <resource:#obsolete>
+
+    self image:aFormOrImage
+!
+
+formLabel
+    "return the formLabel = can be used to change its appearance"
+
+    ^ formLabel
+!
+
+image:aForm
+    "define a form to be displayed left of the title
+     - usually left as defaulted:
+        an exclamation-mark here, warn-sign in warningBox,
+        others in other subclasses."
+
+    formLabel label:aForm.
+    formLabel forceResize.
+    shown ifTrue:[self resize]
+!
+
+textLabel
+    "return the textLabel = can be used to change its appearance"
+
+    ^ textLabel
+!
+
+title
+    "return the boxes title string"
+
+    ^ textLabel label
+
+    "Created: / 22-12-2010 / 19:27:43 / cg"
+!
+
+title:aString
+    "set the boxes label string"
+
+    aString ~= textLabel label ifTrue:[
+        textLabel label:aString.
+        textLabel forceResize.
+        shown ifTrue:[self resize]
+    ]
+
+    "Created: / 22-12-2010 / 19:27:16 / cg"
+!
+
+title:aString label:windowLabel
+    "set the boxes label string"
+
+    self label:windowLabel.
+    aString ~= textLabel label ifTrue:[
+        textLabel label:aString.
+        textLabel forceResize.
+        shown ifTrue:[self resize]
+    ]
+
+    "Created: / 22-12-2010 / 19:32:12 / cg"
+! !
+
+!InfoBox methodsFor:'initialization'!
+
+initFormBitmap
+    "setup the bitmap shown in the upper left -
+     extracted into a separate method for easier redefinition
+     in subclasses"
+
+    formLabel label:(self class iconBitmap)
+!
+
+initFormLabel
+    "setup the icon shown in the infoBox.
+     Can be redefined in subclasses."
+
+    |mm|
+
+    mm := ViewSpacing.
+
+    formLabel := Label in:self.
+    formLabel name: 'formLabel'.
+    formLabel borderWidth:0.
+    formLabel origin:(mm @ mm).
+
+    "Created: / 16-11-1995 / 18:32:32 / cg"
+    "Modified: / 22-04-1996 / 18:15:37 / cg"
+    "Modified (format): / 28-02-2012 / 18:20:23 / cg"
+!
+
+initialize
+    |mm sep|
+
+    super initialize.
+    self addOkButton.
+
+"/    label := 'Info'.
+
+    mm := ViewSpacing.
+
+    self initFormLabel.
+    self initFormBitmap.
+
+    textLabel := Label label:'Information' in:self.
+    textLabel name: 'textLabel'.
+    textLabel borderWidth:0.
+    textLabel origin:[(mm + formLabel widthIncludingBorder + mm) @ mm].
+
+    yPosition := textLabel corner y.
+    formLabel notNil ifTrue:[yPosition := yPosition max:(formLabel corner y)].
+    yPosition := yPosition + ViewSpacing.
+
+    (styleSheet at:'infoBoxSeparator' default:false) ifTrue:[
+        sep := Separator in:self.
+        sep origin:[0.0 @ ((formLabel bottom max:textLabel bottom) + mm)].
+        sep extent:(1.0 @ sep preferredHeight).
+        yPosition := yPosition max:(sep corner y).
+        yPosition := yPosition + ViewSpacing.
+    ].
+
+    "
+     |b|
+
+     b := InfoBox new.
+     b title:'hello'.
+     b open
+    "
+
+    "Modified: / 29-07-2011 / 12:31:29 / cg"
+! !
+
+!InfoBox methodsFor:'queries'!
+
+beepWhenOpening
+    ^ UserPreferences current beepForInfoDialog
+
+    "
+     Dialog information:'hello'
+     Dialog warn:'hello'
+     Dialog error:'hello'
+    "
+!
+
+preferredExtent 
+    "return my preferred extent"
+
+    |w h mm|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    mm := ViewSpacing.
+
+    w := ((margin + mm) * 2) + 
+         formLabel widthIncludingBorder + 
+         mm + textLabel width.
+
+    w := w max:(okButton preferredWidth + (mm * 2)).
+    w := w max:self maxPreferredWidthOfAddedComponents.
+
+    h := (mm * 6)
+         + ((formLabel heightIncludingBorder) max:(textLabel height))
+         + ((addedComponents ? #()) inject:0 into:[:sum :thisComponent | sum + thisComponent preferredHeight])
+         + okButton heightIncludingBorder.
+
+    (styleSheet at:'infoBoxSeparator' default:false) ifTrue:[
+        h := h + (ViewSpacing * 3)
+    ].
+
+    ^ w @ h
+
+    "Modified: 1.4.1997 / 14:53:35 / cg"
+! !
+
+!InfoBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/InfoBox.st,v 1.52 2014-01-16 14:33:19 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/InfoBox.st,v 1.52 2014-01-16 14:33:19 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Label.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1968 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+View subclass:#Label
+	instanceVariableNames:'logo labelWidth labelHeight labelOriginX labelOriginY adjust
+		hSpace vSpace bgColor fgColor etchedFgColor fixSize labelMsg
+		converter labelChannel'
+	classVariableNames:'DefaultForegroundColor DefaultBackgroundColor'
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!Label class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    This class implements labels, which are views to display a string or image.
+    The Label will try to do its best to make its contents fit into the
+    view. The contents can be a String, a collection of Strings (i.e.
+    a StringCollection) or a Form/Image. 
+
+    The contents is drawn in fgColor/bgColor, which can be changed using:
+
+        aLabel foregroundColor:aColor
+        aLabel backgroundColor:aColor
+
+    When a label is assigned a contents, it will resize itself to fit
+    the required size. This resizing can be suppressed by setting the
+    fixsize attribute to true using:
+
+        aLabel sizeFixed:true
+
+    This can be used, if resizing of the label is not wanted.
+    However, in this case you have to make certain that the size is big enough
+    to hold any changed logos later. (usually, you create the label first with
+    the longest string first to have it compute its size, then set the fixSize 
+    attribute to avoid resizing later).
+    Be careful when placing self-resizing labels into panels - by default,
+    panels do not react on the size change - leading to ugly looking geometry.
+    (but you can tell the panel to watch for changes with #elementsCHangeSize:)
+
+    The placement of the contents within the label is controlled by
+    the adjust attribute, it can be set with:
+
+        aLabel adjust:how
+
+    where how is one of the symbols left, #right, #center, #centerEach,
+    #centerLeft, #centerRight, #leftRight or #rightLeft 
+    (see the comment in Label>>adjust:). The default is #center.
+
+    model-less operation (ok for static labels):
+      if no model is set, the labels contents is set with:
+
+        aLabel label:aStringOrImage
+
+      and stays constant unless changed by new calls to #label:.
+
+
+    model operation (ST-80 style):
+      labels with a model, aspectMsg and labelMsg react to 
+      changes of the aspect, and send a labelMsg-message 
+      to the model in order to aquire a new labelString or image.
+      The model should send 'self changed:aspectMsg' if it thinks the label 
+      should change and return a string or image from the labelMsg-message.
+
+        label model:aModel.
+        label aspect:aspectSymbol.
+        label labelMessage:labelSymbol.
+
+        model sends #changed:aspectSymbol
+        ---> label will redraw its label from value of model perform:labelSymbol
+
+      Having a labelSymbol different from the aspectSymbol allows for two labels
+      to react on the same aspect-change, but use different messages when asking
+      the model for a new label contents. By default, the labelMsg is nil,
+      so the label does NOT update its shown contents.
+      The aspectMsg defaults to #value.
+
+
+
+    channel operation (new ST/X style):
+
+      the label will react on changes of the token found in the
+      channels: foregroundChannel, backgroundChannel and labelChannel.
+      These are valueHolders and can be shared between labels.
+
+
+        
+    [Instance variables:]
+
+        logo                <Object>        the logo, can be a Form, String or Text
+        labelWidth          <Integer>       the width of the logo in device units
+        labelHeight         <Integer>       the height of the logo in device units
+        labelOriginX        <Integer>       the x-position of the logo withing the Label
+        labelOriginY        <Integer>       the y-position of the logo withing the Label
+        adjust              <Symbol>        controls how the logo is positioned within the
+                                            label. Can be one of:#left,#right,#center,
+                                            #centerLeft or #centerRight (see comment in adjust:)
+        hSpace              <Integer>       number of horizontal pixels around logo
+        vSpace              <Integer>       number of vertical pixels around logo
+
+        bgColor             <Color>         background color
+        fgColor             <Color>         foreground color
+
+        fixSize             <Boolean>       if true, a change of the logo change will not
+                                            resize the label; otherwise, its size is adjusted.
+                                            default:false.
+
+        labelMsg            <Symbol>        if non-nil, this is sent to the model to
+                                            aquire the labelString or labelImage.
+                                            If nil, the label stays as is
+
+    [styleSheet parameters:]
+
+      labelForegroundColor    <Color>         color to draw foreground pixels (i.e. the string)
+      labelBackgroundColor    <Color>         color to draw background pixels
+      labelFont               <Font>          font to use for textual labels
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        Panel HorizontalPanel VerticalPanel
+        TextView EditTextView
+        Button
+        InfoBox WarningBox
+"
+!
+
+examples
+"
+    Notice, that Buttons and others inherit from Label; 
+    therefore, the following geometry examples apply to all subclasses too.
+
+
+    simple (default position is 0@0):
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l label:'hello world'.
+
+        top open
+                                                                        [exEnd]
+
+
+    simple with emphasis:
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 100).
+
+        l := Label in:top.
+        l level:-1.
+        l label:('hello world - this is text in a label ' asText 
+                        emphasizeFrom:7 to:11 with:#italic;
+                        emphasizeFrom:23 to:26 with:#bold).
+        top open
+                                                                        [exEnd]
+
+
+    there is also a creation message which sets the label:
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label label:'hello world' in:top.
+
+        top open
+                                                                        [exEnd]
+
+
+    placement:
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l label:'hello world'.
+        l origin:50@100.
+
+        top open
+                                                                        [exEnd]
+
+
+    level:
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l level:5.
+        l label:'hello world'.
+        l origin:50@100.
+
+        top open
+                                                                        [exEnd]
+
+
+    another level:    
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l level:-1.
+        l label:'hello world'.
+        l origin:50@100.
+
+        top open
+                                                                        [exEnd]
+
+
+    colors & font:    
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l level:-1.
+        l font:(Font family:'Times' size:18).
+        l foregroundColor:Color yellow.
+        l backgroundColor:Color red.
+        l label:'hello world'.
+        l origin:50@100.
+
+        top open
+                                                                        [exEnd]
+
+
+    border & colors:    
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l level:0.
+        l borderWidth:1.
+        l borderColor:Color red.
+        l foregroundColor:Color green darkened.
+        l backgroundColor:Color green lightened.
+        l label:'hello world'.
+        l origin:50@100.
+
+        top open
+                                                                        [exEnd]
+
+
+    different adjusts (resize to see):    
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 250).
+        top label:'make me smaller'.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l label:'default - #centered'.
+        l origin:0.1@40.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#left.
+        l label:'#left adjust'.
+        l origin:0.1@70.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#right.
+        l label:'#right adjust'.
+        l origin:0.1@100.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#centerLeft.
+        l label:'#centerLeft adjust with a long text'.
+        l origin:0.1@130.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#centerRight.
+        l label:'#centerRight adjust with a long text'.
+        l origin:0.1@160.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#leftRight.
+        l label:'#leftRight adjust with a long text'.
+        l origin:0.1@190.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#rightLeft.
+        l label:'#rightLeft adjust with a long text'.
+        l origin:0.1@220.
+        l width:0.8.
+
+        top open
+                                                                        [exEnd]
+
+
+    center vs. centerEach adjust (only with multiline labels):    
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(300 @ 250).
+        top label:'resize me'.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l label:'this labels logo
+consists of multiple lines 
+with #center adjust'.
+        l origin:0.1@0.1.
+        l corner:0.9@0.9.
+        l adjust:#center.
+
+        top open.
+
+        top := StandardSystemView new.
+        top extent:(300 @ 250).
+        top label:'resize me'.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l label:'this labels logo
+consists of multiple lines 
+with #centerEach adjust'.
+        l origin:0.1@0.1.
+        l corner:0.9@0.9.
+        l adjust:#centerEach.
+
+        top open
+
+                                                                        [exEnd]
+
+    fitting-adjust (resize to see):
+    Warning: #fit is experimental and should not be used.
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label origin:0.25 @ 0.25 corner:0.75@0.75 in:top.
+        l label:'stretch'.
+        l level:-1.
+        l adjust:#fit.
+
+        top open
+                                                                        [exEnd]
+
+    or:
+    Warning: #fit is experimental and should not be used.
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label origin:0.25 @ 0.25 corner:0.75@0.75 in:top.
+        l label:(Image fromFile:'bitmaps/SBrowser.xbm').
+        l level:-1.
+        l adjust:#fit.
+
+        top open
+                                                                        [exEnd]
+
+
+    just a reminder, that instead of doing placement manually
+    as in ...:    
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l borderWidth:1.
+        l label:'default - centered'.
+        l origin:0.1@70.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#left.
+        l label:'left adjust'.
+        l origin:0.1@100.
+        l width:0.8.
+
+        l := Label in:top.
+        l borderWidth:1.
+        l adjust:#right.
+        l label:'right adjust'.
+        l origin:0.1@130.
+        l width:0.8.
+
+        top open
+                                                                        [exEnd]
+
+
+    ... it is much easier, to use a geometry handler, such as
+    a VerticalPanel. Try:
+                                                                        [exBegin]
+        |top panel l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        panel := VerticalPanelView 
+                        origin:0.1 @ 0.0 
+                        corner:0.9 @ 1.0 
+                            in:top.
+
+        panel horizontalLayout:#fit.
+        panel verticalLayout:#center.
+
+        l := Label in:panel.
+        l borderWidth:1.
+        l label:'default - centered'.
+
+        l := Label in:panel.
+        l borderWidth:1.
+        l adjust:#left.
+        l label:'left adjust'.
+
+        l := Label in:panel.
+        l borderWidth:1.
+        l adjust:#right.
+        l label:'right adjust'.
+
+        top open
+                                                                        [exEnd]
+
+
+    labels with bitmaps or images:
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l level:-1.
+        l label:((Image fromFile:'bitmaps/garfield.gif') magnifyBy:0.2 @ 0.2).
+        l origin:50@100.
+
+        top open
+                                                                        [exEnd]
+
+
+     that even works with #fit:
+                                                                        [exBegin]
+        |top l|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l adjust:#fit.
+        l level:-1.
+        l label:(Image fromFile:'bitmaps/garfield.gif').
+        l origin:0.2@0.2 corner:0.8@0.8.
+
+        top open
+                                                                        [exEnd]
+
+
+     notice, that Buttons inherit from Label; thus:
+                                                                        [exBegin]
+        |top b|
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        b := Button in:top.
+        b adjust:#fit.
+        b label:(Image fromFile:'bitmaps/garfield.gif').
+        b origin:0.2@0.2 corner:0.8@0.8.
+        b action:[Transcript showCR:'wow'].
+
+        top open
+                                                                        [exEnd]
+
+
+     Channel operation (controlling fg, bg and labelText via ValueHolders)
+     -----------------
+                                                                        [exBegin]
+        |top panel logoChannel fgChannel bgChannel l b|
+
+        top := StandardSystemView new.
+        top extent:(450 @ 200).
+
+        panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+        l := Label in:panel.
+        l level:-1.
+        l label:'change my colors'.
+        l origin:50@100.
+        l sizeFixed:true.
+
+        fgChannel := Color blue asValue.
+        bgChannel := Color grey asValue.
+        logoChannel := 'change me' asValue.
+
+        b := Toggle label:'change fg' in:panel. b showLamp:false; onLevel:-2.
+        b pressAction:[fgChannel value:Color red].
+        b releaseAction:[fgChannel value:Color blue].
+
+        b := Toggle label:'change bg' in:panel.
+        b pressAction:[bgChannel value:Color yellow].
+        b releaseAction:[bgChannel value:Color grey].
+
+        b := Toggle label:'change text' in:panel.
+        b pressAction:[logoChannel value:'wow'].
+        b releaseAction:[logoChannel value:'not bad' ].
+
+        l labelChannel:logoChannel.
+        l foregroundChannel:fgChannel.
+        l backgroundChannel:bgChannel.
+
+        top open
+                                                                        [exEnd]
+
+
+       multiple labels on one channel:
+                                                                        [exBegin]
+        |l1 l2 b conv|
+
+        l1 := Label label:'label1'.
+
+        l2 := Label label:'label2'.
+
+        b := Button label:'change'.
+        conv := (ConvertedValue new
+                            conversion:[:input | 
+                                        input ifTrue:[
+                                            Color red
+                                        ] ifFalse:[
+                                            Color blue
+                                        ]]).
+        conv value:false.
+
+        b controller pressChannel:conv.
+        l1 foregroundChannel:conv.
+        l2 foregroundColor:Color white; backgroundChannel:conv.
+
+        b open.
+        l1 open.
+        l2 open.
+                                                                        [exEnd]
+        
+
+     MVC operation 
+     -------------
+
+       model provides the label):
+       (have to use a plug to simulate a model which responds to
+        the #someAspect message):
+        |top l model|
+
+        model := Plug new.
+        model respondTo:#someAspect with:['models labelString'].
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l model:model; labelMessage:#someAspect.
+
+        top open
+        ...
+
+        model changed:#someAspect
+        ...
+
+
+    concrete example (track a counters value):
+      (here, the default aspect #value is used both to notify the label about
+       changes and to aquire a new value from the model).
+                                                                        [exBegin]
+        |top l model|
+
+        model := ValueHolder new.
+        model value:'0'.
+        [
+            1 to:20 do:[:i |
+                (Delay forSeconds:1) wait.
+                model value:i printString
+            ].
+            top destroy
+        ] fork.
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l level:-1.
+        l model:model; labelMessage:#value.
+
+        top open
+                                                                        [exEnd]
+
+
+      with a printConverter:
+                                                                        [exBegin]
+        |top l model|
+
+        model := Date today asValue.
+        [
+            1 to:50 do:[:i |
+                (Delay forSeconds:1) wait.
+                model value:(model value addDays:1) 
+            ].
+            top destroy
+        ] fork.
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label in:top.
+        l level:-1.
+        l converter:(PrintConverter new initForDate).
+        l model:model; labelMessage:#value.
+
+        top open
+                                                                        [exEnd]
+
+
+       model changes aspect after a while; two labels on the same model:
+                                                                        [exBegin]
+        |top l model|
+
+        model := Plug new.
+        model respondTo:#labelValue1 with:['models labelString1'].
+        model respondTo:#labelValue2 with:['models labelString2'].
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
+        l model:model; aspect:#someAspect; labelMessage:#labelValue1.
+        l := Label origin:0.0@0.5 corner:1.0@1.0 in:top.
+        l model:model; aspect:#someAspect; labelMessage:#labelValue2.
+
+        top open.
+
+        (Delay forSeconds:5) wait.
+        model respondTo:#labelValue1 with:['new string1'].
+        model respondTo:#labelValue2 with:['new string2'].
+
+        model changed:#someAspect 
+                                                                        [exEnd]
+
+
+      plugged MVC operation (getBlock returns the label): 
+                                                                        [exBegin]
+        |top l model|
+
+        model := PluggableAdaptor new
+                        getBlock:[:m | 'hello']
+                        putBlock:nil
+                        updateBlock:nil.
+
+        top := StandardSystemView new.
+        top extent:(200 @ 200).
+
+        l := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
+        l model:model; labelMessage:#value.
+
+        top open.
+                                                                        [exEnd]
+
+
+      use different label-selectors to access fields of a complex model:
+                                                                        [exBegin]
+        |top panel model|
+
+        model := Plug new.
+        model respondTo:#field1 with:['value1'].
+        model respondTo:#field2 with:['value2'].
+        model respondTo:#field3 with:['value3'].
+        model respondTo:#field4 with:['value4'].
+
+        top := StandardSystemView new.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        panel elementsChangeSize:true.
+
+        panel addSubView:((Label on:model) labelMessage:#field1).
+        panel addSubView:((Label on:model) labelMessage:#field2).
+        panel addSubView:((Label on:model) labelMessage:#field3).
+        panel addSubView:((Label on:model) labelMessage:#field4).
+
+        top extent:(200 @ 200).
+        top open.
+
+        (Delay forSeconds:5) wait.
+
+        model respondTo:#field2 with:['new value2'].
+        model changed:#value  
+                                                                        [exEnd]
+
+
+      same as above, using default aspects in the label, and an adaptor
+      to translate aspects:
+                                                                        [exBegin]
+        |top panel model v1|
+
+        model := Plug new.
+        model respondTo:#field1 with:[v1].
+        model respondTo:#field1: with:[:arg | v1 := arg. model changed:#field1].
+        model respondTo:#field2 with:['value2'].
+        model respondTo:#field2: with:[:arg |].
+        model respondTo:#field3 with:['value3'].
+        model respondTo:#field3: with:[:arg |].
+        model respondTo:#field4 with:['value4'].
+        model respondTo:#field4: with:[:arg |].
+
+        top := StandardSystemView new.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        panel elementsChangeSize:true.
+
+        panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field1)) labelMessage:#value).
+        panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field2)) labelMessage:#value).
+        panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field3)) labelMessage:#value).
+        panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field4)) labelMessage:#value).
+
+        top extent:(200 @ 200).
+        top open.
+
+        (Delay forSeconds:5) wait.
+
+        model field1:'new value1'.
+                                                                        [exEnd]
+
+
+      use an adapter to access fields of a complex model:
+                                                                        [exBegin]
+        |top l panel model|
+
+        model := #('one' 'two' 'three') asValue.
+
+        top := StandardSystemView new.
+
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        panel elementsChangeSize:true.
+
+        panel addSubView:((Label on:(ProtocolAdaptor
+                                        subjectChannel:model
+                                        accessPath:#(1))) labelMessage:#value).
+        panel addSubView:((Label on:(ProtocolAdaptor
+                                        subjectChannel:model
+                                        accessPath:#(2))) labelMessage:#value).
+        panel addSubView:((Label on:(ProtocolAdaptor
+                                        subjectChannel:model
+                                        accessPath:#(3))) labelMessage:#value).
+
+        top extent:(200 @ 200).
+        top open.
+
+        (Delay forSeconds:5) wait.
+
+        model value:#('oneone' 'twotwo' 'threethree').
+                                                                        [exEnd]
+"
+! !
+
+!Label class methodsFor:'instance creation'!
+
+form:aForm
+    "return a new Label showing a form.
+     OBSOLETE: you should now use #label: for both text and bitmap labels."
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'use #label:'.
+    ^ (self onDevice:Screen current) label:aForm
+
+    "Modified: 16.6.1997 / 11:47:38 / cg"
+!
+
+form:aForm in:aView
+    "return a new Label showing a form.
+     OBSOLETE: you should now use #label:in: for both text and bitmap labels."
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'use #label:in:'.
+    ^ (self in:aView) label:aForm
+
+    "Modified: 16.6.1997 / 11:47:57 / cg"
+! !
+
+!Label class methodsFor:'defaults'!
+
+defaultExtent
+    "return the default extent of my instances.
+     The value returned here is usually ignored, and
+     the value from preferredExtent taken instead."
+
+    ^ 16 @ 16
+
+    "Modified: 22.4.1996 / 23:36:11 / cg"
+!
+
+defaultForegroundColor
+    "return the default foregroundColor of my instances."
+
+    ^ DefaultForegroundColor
+
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'label.foregroundColor' #'label.backgroundColor'
+                       #foregroundColor #backgroundColor
+                       #'label.font')>
+
+    DefaultForegroundColor := StyleSheet colorAt:#'label.foregroundColor'.
+    DefaultForegroundColor isNil ifTrue:[
+        "/ fallBack: comon value
+        DefaultForegroundColor := StyleSheet colorAt:#'foregroundColor' default:Color black.
+    ].
+    DefaultBackgroundColor := StyleSheet colorAt:#'label.backgroundColor'.
+    DefaultBackgroundColor isNil ifTrue:[
+        "/ fallBack: comon value
+        DefaultBackgroundColor := StyleSheet colorAt:#'backgroundColor'.
+    ].
+    DefaultFont := StyleSheet fontAt:#'label.font'.
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: / 31.10.1997 / 14:53:48 / cg"
+! !
+
+!Label class methodsFor:'menu specs'!
+
+middleButtonMenu
+    "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:Label andSelector:#middleButtonMenu
+     (Menu new fromLiteralArrayEncoding:(Label middleButtonMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Copy Label Text'
+            itemValue: copyLabelText
+            enabled: isTextLabel
+          )
+         )
+        nil
+        nil
+      )
+! !
+
+!Label methodsFor:'accessing-channels'!
+
+labelChannel
+    "return the labelChannel - or nil"
+
+    ^ labelChannel.
+
+    "Created: / 16.12.1995 / 15:50:18 / cg"
+    "Modified: / 31.10.1997 / 14:43:14 / cg"
+!
+
+labelChannel:aValueHolder
+    "set the labelChannel - a valueHolder holding a string or image
+     which is shown as my logo"
+
+    |prev|
+
+    prev := labelChannel.
+    labelChannel := aValueHolder.
+    self setupChannel:aValueHolder for:nil withOld:prev.
+    self getLabelFromLabelChannel.
+
+    "Modified: / 31.10.1997 / 14:37:02 / cg"
+! !
+
+!Label methodsFor:'accessing-colors'!
+
+backgroundColor
+    "return the background color"
+
+    ^ bgColor 
+!
+
+backgroundColor:aColor
+    "set the background color"
+
+    aColor ~~ bgColor ifTrue:[
+        bgColor := aColor.
+        bgColor notNil ifTrue:[
+            bgColor := bgColor onDevice:self graphicsDevice.
+            self class == Label ifTrue:[
+                super viewBackground:bgColor
+            ].
+        ].
+        self invalidateRepairNow:true
+    ]
+
+    "Modified: / 15.1.1998 / 00:14:10 / stefan"
+    "Modified: / 6.6.1998 / 20:01:56 / cg"
+!
+
+etchedForegroundColor
+    "return the etched foreground color (or nil)"
+
+    ^ etchedFgColor
+!
+
+etchedForegroundColor:aColor
+    "set the etched foreground color"
+
+    aColor ~~ etchedFgColor ifTrue:[
+        etchedFgColor := aColor.
+        etchedFgColor notNil ifTrue:[
+            etchedFgColor := etchedFgColor onDevice:self graphicsDevice.
+        ].
+        self invalidateRepairNow:true
+    ].
+!
+
+foregroundColor
+    "return the foreground color"
+
+    ^ fgColor
+!
+
+foregroundColor:aColor
+    "set the foreground color"
+
+    aColor ~~ fgColor ifTrue:[
+        fgColor := aColor onDevice:self graphicsDevice.
+        self invalidateRepairNow:true
+    ].
+
+    "Modified: / 15.1.1998 / 00:14:22 / stefan"
+    "Modified: / 6.6.1998 / 20:02:02 / cg"
+!
+
+foregroundColor:fg backgroundColor:bg
+    "set the colors to be used for drawing"
+
+    (fgColor ~~ fg or:[bgColor ~~ bg]) ifTrue:[
+        fgColor := fg onDevice:self graphicsDevice.
+        bgColor := bg onDevice:self graphicsDevice.
+        self class == Label ifTrue:[
+            super viewBackground:bgColor
+        ].
+        self invalidateRepairNow:true
+    ].
+
+    "Modified: / 15.1.1998 / 00:14:36 / stefan"
+    "Modified: / 6.6.1998 / 20:02:07 / cg"
+!
+
+viewBackground:aColor
+    "for labels, the viewBackground is forced to be the same as
+     the backgroundColor"
+
+    super viewBackground:aColor.
+    self class == Label ifTrue:[
+        self backgroundColor:aColor
+    ].
+
+    "Modified: / 6.6.1998 / 20:02:22 / cg"
+! !
+
+!Label methodsFor:'accessing-contents'!
+
+form:aForm
+    "set the labels form; adjust extent if not already realized.
+     OBSOLETE: you should now use #label: for both strings and images"
+
+    <resource:#obsolete>
+
+    self label:aForm
+!
+
+label
+    "return the labels string or image"
+
+    ^ logo
+!
+
+label:aStringOrFormOrImage
+    "set the labelString or image; 
+     adjust extent if not already realized and not fixedSize;
+     also redraw"
+
+    self label:aStringOrFormOrImage redraw:true
+
+    "Modified: / 13-10-2010 / 12:17:36 / cg"
+!
+
+label:aStringOrFormOrImage redraw:doRedraw
+    "set the labelString or image; adjust extent if not already realized and
+     not fixedSize"
+
+    |newLogo numberOfLines|
+
+    newLogo := aStringOrFormOrImage.
+    newLogo isString ifTrue:[
+        numberOfLines := 1 + (newLogo occurrencesOf:(Character cr)).
+        (numberOfLines ~~ 1) ifTrue:[
+            newLogo := newLogo asStringCollection
+        ]
+    ] ifFalse:[
+        newLogo isStringCollection ifTrue:[
+            numberOfLines := newLogo size.
+            (numberOfLines <= 1) ifTrue:[
+                newLogo := newLogo asString
+            ]
+        ]
+    ].
+
+    (aStringOrFormOrImage ~~ logo) ifTrue:[
+        "/
+        "/ avoid recompute of size, if its an image with
+        "/ the same size
+        "/
+        aStringOrFormOrImage isImageOrForm ifTrue:[
+            logo notNil ifTrue:[
+                logo isImageOrForm ifTrue:[
+                    logo extent = aStringOrFormOrImage extent ifTrue:[
+                        logo := aStringOrFormOrImage.
+                        doRedraw ifTrue:[ self invalidateRepairNow:true ].
+                        ^ self
+                    ]
+                ]
+            ]
+        ] ifFalse:[
+            "/ any change ?
+            (logo isString  
+             and:[ newLogo isString
+             and:[ newLogo = logo
+             and:[ logo emphasis = newLogo emphasis]]]) ifTrue:[
+                ^ self
+            ]
+        ].
+        "/ do not check using #isString here;
+        "/ we allow for non-strings to be used as logo as well (it must understand displayOn:).
+        newLogo isNumber ifTrue:[
+            logo := newLogo asString
+        ] ifFalse:[
+            logo := newLogo.
+        ].
+        doRedraw ifTrue:[ 
+            self newLayout.
+            self repairDamage 
+        ].
+    ]
+
+    "Created: / 13-10-2010 / 12:16:34 / cg"
+!
+
+label:newLabel suppressResize:suppress
+    "change the label and optionally suppress a resize operation"
+
+    |wasFix|
+
+    wasFix := fixSize. 
+    suppress ifTrue:[
+        fixSize := true.
+    ].
+    here label:newLabel.
+    fixSize := wasFix
+
+    "Modified: / 29.10.1997 / 15:50:01 / cg"
+!
+
+labelString:aString
+    "for ST-80 compatibility: same as #label:
+     set the label-string; adjust extent if not already realized and not fixedSize"
+
+    self label:aString
+!
+
+labelWidth
+    "return the logos width in pixels"
+
+    ^ labelWidth
+!
+
+logo:something
+    "set the labels form or string.
+     OBSOLETE: the old version used #form: for images and #label: for strings.
+               you should now use #label: for any."
+
+    <resource:#obsolete>
+
+    self label:something
+! !
+
+!Label methodsFor:'accessing-layout'!
+
+adjust
+    "return the adjust symbol. See #adjust: for an explanation."
+
+    ^ adjust
+!
+
+adjust:how
+    "set the adjust, how which must be one of
+
+     #left        -> left adjust logo
+     #right       -> right adjust logo
+     #center      -> center logo
+     #centerEach  -> like #center, but if its a multiline logo,
+                     center each line individually.
+
+     #centerRight -> center logo if it fits; 
+                     BUT, if it does not fit, right adjust the logo
+                     (use with filenames, where the interesting part is
+                      at the right if the label is too small)
+
+     #centerLeft  -> center logo if it fits; 
+                     BUT, if it does not fit, left adjust the logo
+                     (use with strings where the interesting part is at the
+                      left if the label is too small)
+
+     #leftRight   -> left adjust logo if it fits
+                     BUT, if it does not fit, right adjust the logo
+                     (use with filenames, where the interesting part is
+                      at the right if the label is too small)
+
+     #rightLeft   -> right adjust logo if it fits
+                     BUT, if it does not fit, left adjust the logo
+                     (use with strings where the interesting part is at the
+                      left if the label is too small)
+
+     See examples in the documentation category.
+    "
+
+    (adjust ~~ how) ifTrue:[
+        adjust := how.
+        self newLayout
+    ]
+
+    "Modified: 13.4.1996 / 11:17:58 / cg"
+!
+
+font:aFont
+    "set the font - if I'm not realized and not fixedSize, adjust my size.
+     CAVEAT: with the addition of Text objects,
+             this method is going to be obsoleted by a textStyle
+             method, which allows specific control over
+             normalFont/boldFont/italicFont parameters."
+
+    (aFont notNil and:[aFont ~~ gc font]) ifTrue:[
+        super font:aFont.
+        self newLayout
+    ]
+
+    "Modified: 22.5.1996 / 12:36:29 / cg"
+!
+
+horizontalSpace:aNumber
+    "set the number of pixels by which the logo
+     is horizontally inset from the border"
+
+    hSpace := aNumber.
+    self newLayout
+!
+
+layout:something
+    "OBSOLETE compatibility interface. Will vanish.
+     for protocol compatibility: alias for #adjust:.
+     Please use #adjust:, since #layout: conflicts with a method
+     in VW (which has a completely different meaning).
+     In future versions of ST/X, #layout: will behave the VW way.
+     In the meantime, try to figure out what is meant ... a kludge"
+
+    <resource:#obsolete>
+
+    something isSymbol ifFalse:[^ super layout:something].
+
+    self obsoleteMethodWarning:'use #adjust:'.
+    self adjust:something
+
+    "Modified: 31.8.1995 / 23:08:13 / claus"
+!
+
+sizeFixed
+    "return the fix-size attribute"
+
+    ^ fixSize
+!
+
+sizeFixed:aBoolean
+    "set/clear the fix-size attribute. 
+     If true, the receiver will not change its size when the labelString/logo
+     changes. If false (the default), it will resize itself to make the logo
+     fit."
+
+    fixSize := aBoolean
+!
+
+verticalSpace:aNumber
+    "set the number of pixels by which the logo
+     is vertically inset from the border"
+
+    vSpace := aNumber.
+    self newLayout
+! !
+
+!Label methodsFor:'accessing-mvc'!
+
+addModelInterfaceTo:aDictionary
+    "see comment in View>>modelInterface"
+
+    super addModelInterfaceTo:aDictionary.
+    aDictionary at:#labelMessage put:labelMsg
+!
+
+converter:aConverter
+    "set the printConverter;
+     that one is asked to convert the models value to a printed
+     representation (if non-nil). If nil, the model is supposed to
+     return a string or bitmap image."
+
+    converter := aConverter
+!
+
+labelMessage 
+    "return the symbol used to aquire the labelString/image from the model
+     when the aspect changes.
+     The default is nil, which means: leave the label unchanged."
+
+    ^ labelMsg
+!
+
+labelMessage:aSymbol 
+    "set the symbol used to aquire the labelString/image from the model.
+     The default is nil, which means: leave the label unchanged."
+
+    labelMsg ~~ aSymbol ifTrue:[
+	labelMsg := aSymbol.
+	self getLabelFromModel
+    ]
+!
+
+model:aModel
+    super model:aModel.
+    labelMsg notNil ifTrue:[
+        self getLabelFromModel.
+    ]
+! !
+
+!Label methodsFor:'change & update'!
+
+getLabelFromLabelChannel
+    self label:(labelChannel value).
+!
+
+update:something with:aParameter from:changedObject
+    "the MVC way of changing the label ..."
+
+    changedObject notNil ifTrue:[
+        changedObject == labelChannel ifTrue:[
+            self getLabelFromLabelChannel.
+            ^ self
+        ].
+
+        changedObject == model ifTrue:[
+            something == aspectMsg ifTrue:[
+                self getLabelFromModel.
+                ^ self.
+            ]
+        ].
+    ].
+    ^ super update:something with:aParameter from:changedObject
+
+    "Modified: / 31.10.1997 / 14:32:02 / cg"
+    "Modified: / 30.3.1999 / 13:57:26 / stefan"
+! !
+
+!Label methodsFor:'event handling'!
+
+sizeChanged:how
+    "sent whenever size is changed by someone else - recompute the
+     logos position within the View."
+
+    |prevX prevY|
+
+    super sizeChanged:how.
+
+    prevX := labelOriginX.
+    prevY := labelOriginY.
+    self computeLabelOrigin.
+    shown ifTrue:[
+        (adjust == #fit
+        or:[labelOriginX ~~ prevX 
+        or:[labelOriginY ~~ prevY 
+        or:[how ~~ #smaller]]]) ifTrue:[
+            "/ self clear.
+            self invalidate.
+            "/ self redrawEdges
+        ]
+    ]
+
+    "Modified: / 28.4.1998 / 17:07:57 / cg"
+! !
+
+!Label methodsFor:'focus handling'!
+
+wantsFocusWithButtonPress
+    self class == Label ifTrue:[^ false].
+    ^ super wantsFocusWithButtonPress
+
+
+! !
+
+!Label methodsFor:'initialization & release'!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    super fetchDeviceResources.
+
+    fgColor := fgColor onDevice:self graphicsDevice.
+    bgColor := bgColor onDevice:self graphicsDevice.
+
+    "Created: / 13.1.1997 / 23:34:30 / cg"
+    "Modified: / 15.1.1998 / 00:13:46 / stefan"
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    super initStyle.
+
+    DefaultBackgroundColor notNil ifTrue:[
+        bgColor := DefaultBackgroundColor
+    ] ifFalse:[
+        bgColor := viewBackground.
+    ].
+    DefaultForegroundColor notNil ifTrue:[
+        fgColor := DefaultForegroundColor
+    ] ifFalse:[
+        fgColor := self blackColor.
+    ].
+    self class == Label ifTrue:[
+        self borderWidth:0.
+    ]
+
+    "Modified: / 31-10-1997 / 14:57:23 / cg"
+    "Modified (comment): / 05-10-2011 / 15:51:09 / az"
+!
+
+initialize
+    |currentFont|
+
+    super initialize.
+
+    currentFont := gc createFontOnDevice.
+    self initialHeight:(currentFont height + currentFont descent).
+    adjust := #center.
+    labelOriginX := labelOriginY := 0.
+    labelWidth := labelHeight := 0.
+    logo := nil.
+    fixSize := false.
+    hSpace := (self horizontalPixelPerMillimeter:0.5) rounded.
+    vSpace := (self verticalPixelPerMillimeter:0.25) rounded
+!
+
+recreate
+    "after snapin or a migration, labels dimensions may have changed due to
+     different font parameters"
+
+    super recreate.
+    gc createFontOnDevice.
+    self computeLabelSize.
+    self computeLabelOrigin
+!
+
+release
+    labelChannel notNil ifTrue:[
+        labelChannel removeDependent:self.
+        labelChannel := nil.
+    ].
+    super release
+! !
+
+!Label methodsFor:'menu'!
+
+copyLabelText
+    |text|
+
+    text := logo asString.
+    self setClipboardText:text.
+!
+
+middleButtonMenu
+    |m|
+
+    m := super middleButtonMenu.
+    m isNil ifTrue:[
+        m := self yellowButtonMenu.
+        m isNil ifTrue:[
+            "/ not a customized menu
+            self class == Label ifTrue:[
+                m := self class middleButtonMenu
+            ]
+        ].
+    ].
+    ^ m
+! !
+
+!Label methodsFor:'others'!
+
+rawLabelSizeOf:aLogo
+    "compute the extent needed to hold aLogo; aForm or aString"
+
+    |logoUsed numberOfLines w h textHeight textWidth bounds|
+
+    logoUsed := aLogo.
+    aLogo isString ifTrue:[
+        numberOfLines := 1 + (aLogo occurrencesOf:(Character cr)).
+        (numberOfLines ~~ 1) ifTrue:[
+            logoUsed := aLogo asStringCollection
+        ]
+    ] ifFalse:[
+        (aLogo isStringCollection) ifTrue:[
+            numberOfLines := aLogo size.
+            (numberOfLines <= 1) ifTrue:[
+                logoUsed := aLogo asString
+            ]
+        ]
+    ].
+
+    numberOfLines isNil ifTrue:[
+        "logoUsed is neither a String nor a StringCollection"
+        (logoUsed respondsTo:#preferredBounds) ifTrue:[
+            bounds := logoUsed preferredBounds.
+            w := bounds width.
+            h := bounds height.
+        ] ifFalse:[
+            w := logoUsed widthOn:self.
+            h := logoUsed heightOn:self.
+        ].
+
+"/        b := logoUsed bounds.
+"/        labelWidth := b right.
+"/        labelHeight := b bottom.
+        logoUsed isImageOrForm ifFalse:[
+            w := w + (hSpace * 2).
+            h := h + (vSpace * 2).
+        ].
+        ^ w@h
+    ].
+
+    logoUsed isString ifTrue:[
+        "/ a string or Text
+        textHeight := logoUsed heightOn:self.
+        textWidth := logoUsed widthOn:self.
+    ] ifFalse:[
+        "/ a StringCollection
+        textHeight := (gc font height) * numberOfLines.
+
+        textWidth := 0.
+        logoUsed do:[:line |
+            |thisWidth|
+
+            line notNil ifTrue:[
+                thisWidth := line asString widthOn:self.
+                textWidth := textWidth max:thisWidth
+            ]
+        ].
+    ].
+
+    w := textWidth + (hSpace * 2).
+    h := textHeight + (vSpace * 2).
+    ^ w@h
+
+    "Modified: / 05-12-2011 / 22:35:44 / cg"
+! !
+
+!Label methodsFor:'private'!
+
+computeLabelOrigin
+    "(re)compute the origin of the label whenever label, font or view-size changes"
+
+    |x y a|
+
+    labelHeight isNil ifTrue:[^ self].
+
+    adjust == #fit ifTrue:[
+        labelOriginX := labelOriginY := margin.
+        ^ self
+    ].
+
+    "if it does not fit, should we make the origin visible,
+     or the center ?
+     (for text, the center seems better. 
+      For images, I dont really know ...)
+     The commented code below makes the origin visible
+   "
+"/    (labelHeight < height) ifTrue:[
+"/        y := (height - labelHeight) // 2
+"/    ] ifFalse:[
+"/        y := 0
+"/    ].
+
+    "always center vertically"
+    y := (height - labelHeight) // 2.
+
+    labelOriginY := y.
+
+    a := adjust.
+    a == #centerEach ifTrue:[a := #center].
+
+    (width < labelWidth) ifTrue:[
+        ((a == #centerRight) or:[a == #leftRight]) ifTrue:[
+            a := #right
+        ] ifFalse:[
+            ((a == #centerLeft) or:[a == #rightLeft]) ifTrue:[
+                a := #left
+            ].
+        ]
+    ] ifFalse:[
+        ((a == #centerRight) or:[a == #centerLeft]) ifTrue:[
+            a := #center
+        ] ifFalse:[
+            a == #leftRight ifTrue:[
+                a := #left
+            ] ifFalse:[
+                a == #rightLeft ifTrue:[
+                    a := #right
+                ]
+            ]
+        ]
+    ].
+
+    (a == #center) ifTrue:[
+        " center text/form in button "
+        x := (width - labelWidth) // 2.
+    ] ifFalse:[
+        (a == #left) ifTrue:[
+            x := margin
+        ] ifFalse:[
+            "/ #right
+            x := width - labelWidth - margin
+        ]
+    ].
+    labelOriginX := x
+
+    "Modified: 13.5.1996 / 10:55:17 / cg"
+!
+
+computeLabelSize
+    "compute the extent needed to hold the logo"
+
+    |ext|
+
+    logo isNil ifTrue:[^ self].
+
+    ext := self rawLabelSizeOf:logo.
+    labelWidth := ext x.
+    labelHeight := ext y.
+!
+
+getLabelFromModel
+    "ask my model for the label to show.
+     Here, we use labelMsg (instead of aspectMsg). 
+     This allows multiple labels to react on the same aspect, 
+     but show different labels when changed 
+     (also, since labelMsg defaults to nil, constant labels
+      which have a nil labelMsg will not try to aquire a labelString)."
+
+    |val|
+
+    (model notNil 
+    and:[labelMsg notNil]) ifTrue:[
+	val := model perform:labelMsg.
+	converter notNil ifTrue:[
+	    val := converter printStringFor:val
+	].
+	self label:val.
+    ].
+!
+
+newLayout
+    "recompute position/size after a change
+     - helper for form:/font: etc."
+
+    self computeLabelSize.
+
+    fixSize ifFalse:[
+        self resize.
+    ] ifTrue:[
+        self computeLabelOrigin.
+    ].
+    self invalidate
+
+    "Modified: / 6.6.1998 / 19:23:45 / cg"
+! !
+
+!Label methodsFor:'queries'!
+
+isTextLabel
+    ^ logo isString
+!
+
+preferredExtent
+    "return my preferred extent - this is the minimum size I would like to have"
+
+    |ext|
+
+    "/ If I have an explicit preferredExtent...
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+    "/ If I have a cached preferredExtent value...
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+    "/ If I have a frozen extent value...
+    fixSize ifTrue:[
+        ^ self extent
+    ].
+
+    logo isNil ifTrue:[
+        self label:''
+    ].
+    ext := self rawLabelSizeOf:logo.
+
+    ^ (margin + ext x + margin + hSpace) @ (margin + ext y + margin + vSpace)
+
+    "Modified: 19.7.1996 / 20:44:41 / cg"
+!
+
+redrawsFull
+    ^ true
+
+    "Created: 7.2.1997 / 16:41:41 / cg"
+! !
+
+!Label methodsFor:'redrawing'!
+
+clearInsideWith:bg
+    |cutOff mustClear|
+
+    cutOff := margin * 2.
+
+    mustClear := true.
+
+    (logo notNil and:[logo isImageOrForm]) ifTrue:[
+	(labelOriginX == 0 and:[labelOriginY == 0]) ifTrue:[
+	    logo width >= (width - cutOff) ifTrue:[
+		logo height >= (height - cutOff) ifTrue:[
+		    "no need to clear before - avoid flicker"
+		    mustClear := false
+		]
+	    ]
+	].
+    ].
+
+    mustClear ifTrue:[
+	self paint:bg.
+	self fillRectangleX:margin y:margin
+		      width:(width - cutOff)
+		     height:(height - cutOff).
+    ].
+!
+
+drawImageLogo:imageOrForm x:x y:y opaque:opaque
+    (opaque not or:[imageOrForm mask notNil]) ifTrue:[
+        self displayForm:imageOrForm x:x y:y 
+    ] ifFalse:[
+        self displayOpaqueForm:imageOrForm x:x y:y 
+    ]
+!
+
+drawOtherLogo:something x:x y:y opaque:opaque
+    something displayOn:self x:x y:y opaque:opaque
+!
+
+drawStringLogo:aString x:x y:y
+    self displayString:aString x:x y:y
+!
+
+drawWin95FocusFrame
+    |m1 m2|
+
+    m1 := margin + 1.
+    m2 := margin + margin + 2.
+    self
+        displayDottedRectangleX:m1
+        y:m1
+        width:(width - m2)
+        height:(height - m2).
+
+    "Created: / 17.9.1998 / 14:16:46 / cg"
+    "Modified: / 29.4.1999 / 21:49:22 / cg"
+!
+
+drawWith:fg and:bg
+    "redraw my label with fg/bg - this generic method is also used by subclasses
+     (especially Button) to redraw the logo in different colors."
+
+    self drawWith:fg and:bg clearInside:true etchedFg:etchedFgColor.
+!
+
+drawWith:fg and:bg clearInside:doClear etchedFg:etchedFg
+    "redraw my label with fg/bg - this generic method is also used by subclasses
+     (especially Button) to redraw the logo in different colors."
+
+    |x y scaleH scaleV nW nH hSep vSep m2 ascent currentTransformation|
+
+    doClear ifTrue:[self clearInsideWith:bg].
+
+    self paint:fg on:bg.
+    logo notNil ifTrue:[
+        m2 := margin * 2.
+        hSep := hSpace*2.
+        vSep := vSpace*2.
+
+        x := labelOriginX.
+        y := labelOriginY.
+
+        logo isImageOrForm ifTrue:[
+            adjust == #fit ifTrue:[
+                "/
+                "/ change scale to make the logo fit exactly
+                "/
+                scaleH := ((width - hSep) / (logo width)) asFloat.
+                scaleV := ((height - vSep) / (logo height)) asFloat.
+                scaleH <= 0 ifTrue:[scaleH := Float epsilon].
+                scaleV <= 0 ifTrue:[scaleV := Float epsilon].
+                self scale:(scaleH @ scaleV).
+                x := currentTransformation applyInverseScaleX:x.
+                y := currentTransformation applyInverseScaleY:y.
+            ].
+
+            logo := logo onDevice:self graphicsDevice.
+"/            self background:bg.
+            self drawImageLogo:logo x:x y:y opaque:doClear.
+        ] ifFalse:[
+            x := x + hSpace.
+            y := y + vSpace.
+
+            level < 0 ifTrue:[
+                x := x + 1.
+                y := y + 1
+            ].
+
+            ascent := logo ascentOn:self.
+            y := y + ascent.
+
+            adjust == #fit ifTrue:[
+                "/
+                "/ change scale to make the logo fit exactly
+                "/
+                scaleH := ((width - m2 - hSep) / (labelWidth - hSpace)) asFloat.
+                scaleV := ((height - m2 - vSep) / (labelHeight - vSpace)) asFloat.
+                scaleH <= 0 ifTrue:[scaleH := Float epsilon].
+                scaleV <= 0 ifTrue:[scaleV := Float epsilon].
+
+                self scale:(scaleH min:scaleV).
+                currentTransformation := gc transformation.
+                x := currentTransformation applyInverseScaleX:x.
+                ascent ~~ 0 ifTrue:[
+                    y := y - ascent + (currentTransformation applyScaleY:ascent).
+                ].
+                y := currentTransformation applyInverseScaleY:y.
+                scaleH < scaleV ifTrue:[
+                    nH := labelHeight * scaleH.
+                    "/ now, center vertically
+                    y := y + ((height - nH - m2 - vSep) / scaleH / 2).
+                ].
+                scaleV < scaleH ifTrue:[
+                    "/ now, center horizontally
+                    nW := labelWidth * scaleV.
+                    x := x + ((width - nW - m2 - hSep) / scaleV / 2) 
+                ].
+            ].
+
+            logo isString ifTrue:[
+"/                doClear ifTrue:[
+"/                    self displayOpaqueString:logo x:x y:y
+"/                ] ifFalse:[
+"/                    self displayString:logo x:x y:y
+"/                ]
+                etchedFg notNil ifTrue:[
+                    self paint:etchedFg.
+                    self drawStringLogo:logo x:x+1 y:y+1.
+                    self paint:fg.
+                ].
+                self drawStringLogo:logo x:x y:y
+            ] ifFalse:[
+                (logo isStringCollection) ifTrue:[
+                    logo do:[ :line | 
+                        |wThis str|
+
+                        adjust == #centerEach ifTrue:[
+                            wThis := line asString widthOn:self.
+                            x := (width - wThis) // 2.
+                        ].
+                        str := line printString.
+"/                        doClear ifTrue:[
+"/                            self displayOpaqueString:str x:x y:y.
+"/                        ] ifFalse:[
+"/                            self displayString:str x:x y:y.
+"/                        ].
+                        etchedFg notNil ifTrue:[
+                            self paint:etchedFg.
+                            self drawStringLogo:str x:x+1 y:y+1.
+                            self paint:fg.
+                        ].
+                        self drawStringLogo:str x:x y:y.
+                        y := y + (gc font height)
+                    ]
+                ] ifFalse:[
+                    "/ anything
+                    self drawOtherLogo:logo x:x y:y opaque:doClear
+                ]
+            ].
+        ].
+
+        adjust == #fit ifTrue:[
+            self scale:1
+        ].
+    ]
+
+    "Modified: / 6.9.1998 / 22:35:53 / cg"
+!
+
+redraw
+    "redraw my label"
+
+    shown ifTrue:[
+        self clear.
+        self drawWith:fgColor and:bgColor
+    ]
+! !
+
+!Label methodsFor:'resizing'!
+
+forceResize
+    "resize myself to make text fit into myself. Here, this is done even if
+     fixSize is set."
+
+    |prevFixSize|
+
+    logo notNil ifTrue:[
+        prevFixSize := fixSize.
+        fixSize := false.
+        self extent:self preferredExtent.
+        self computeLabelOrigin.
+        "/ this seems the only one which might depend on my contents.
+        layout isLayout ifTrue:[
+            layout isAlignmentOrigin ifTrue:[
+                self containerChangedSize.
+            ]
+        ].
+        fixSize := prevFixSize.
+    ]
+!
+
+forceResizeHorizontally
+    "resize myself horizontally to make text fit into myself. 
+     Here, this is done even if fixSize is set."
+
+    |prevFixSize|
+
+    logo notNil ifTrue:[
+        prevFixSize := fixSize.
+        fixSize := false.
+        self width:self preferredWidth.
+        self computeLabelOrigin.
+        fixSize := prevFixSize.
+    ]
+!
+
+resize
+    "resize myself to make text fit into myself.
+     but only do so, if I am not fixedSize and I have NOT been 
+     given a relative extent or an extend computation block."
+
+    (logo notNil 
+    and:[fixSize not
+    and:[relativeExtent isNil
+    and:[extentRule isNil
+    and:[relativeCorner isNil 
+    and:[cornerRule isNil]]]]]) ifTrue:[
+	self forceResize
+    ] ifFalse:[
+	self computeLabelOrigin
+    ]
+! !
+
+!Label class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/Label.st,v 1.153 2014-02-18 16:46:07 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/Label.st,v 1.153 2014-02-18 16:46:07 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ListSelectionBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,500 @@
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+EnterBox subclass:#ListSelectionBox
+	instanceVariableNames:'panel list selectionList selectionChangeCallback useIndex
+		searchJob'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!ListSelectionBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1990 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this class implements boxes for selection from a list. It offers
+    both an ok- and abort-buttons. The ok-button, if pressed will
+    evaluate the okAction (see EnterBox>>action).
+    see examples for typical uses.
+
+    Notice, for file selections there is a specialized FileSelectionBox,
+    which supports matchPatterns, changing directory etc.
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples 
+"
+    simple:
+                                                                        [exBegin]
+        |box|
+
+        box := ListSelectionBox new.
+        box title:'select something:'.
+        box list:#('foo' 'bar' 'baz').
+        box okAction:[:sel | Transcript show:'the selection was:' ; showCR:sel].
+        box showAtPointer
+                                                                        [exEnd]
+
+    with index (instead of list-entry) and without an enterField:
+                                                                        [exBegin]
+        |box|
+
+        box := ListSelectionBox new.
+        box title:'select something:'.
+        box list:#('foo' 'bar' 'baz').
+        box useIndex:true.
+        box okAction:[:sel | Transcript show:'the selection was:' ; showCR:sel].
+        box showAtPointer
+                                                                        [exEnd]
+
+
+    with a default:
+                                                                        [exBegin]
+        |box|
+
+        box := ListSelectionBox new.
+        box title:'select something:'.
+        box list:#('foo' 'bar' 'baz').
+        box okAction:[:sel | Transcript show:'the selection was:' ; showCR:sel].
+        box initialText:'foo'.
+        box showAtPointer
+                                                                        [exEnd]
+
+
+    opening the box modeless (a stand-by box):
+    (in this case, the default ok- and abortActions do not hide the box;
+     therefore, we have to set those explicitely)
+                                                                        [exBegin]
+        |box|
+
+        box := ListSelectionBox new.
+        box title:'select something:'.
+        box list:#('foo' 'bar' 'baz').
+        box abortText:'close'.
+        box okText:'apply'.
+        box okAction:[:sel | Transcript show:'the selection was:' ; showCR:sel].
+        box abortAction:[:dummy | box hide].
+        box openModeless
+                                                                        [exEnd]
+
+    showing fileNames:
+                                                                        [exBegin]
+        |box|
+
+        box := ListSelectionBox new.
+        box title:'select something:'.
+        box list:('.' asFilename directoryContents).
+        box okAction:[:sel | Transcript show:'the selection was:' ; showCR:sel].
+        box showAtPointer
+                                                                        [exEnd]
+
+
+"
+! !
+
+!ListSelectionBox class methodsFor:'instance creation'!
+
+title:titleString okText:okText abortText:abortText list:aList action:aBlock
+    "create and return a new listSelectionBox with list already defined"
+
+    |newBox|
+
+    newBox := self 
+                title:titleString okText:okText abortText:abortText
+                action:aBlock.
+    newBox list:aList.
+    ^ newBox
+! !
+
+!ListSelectionBox class methodsFor:'defaults'!
+
+defaultExtent
+    "return the default extent of my instances.
+     The value returned here is usually ignored, and
+     the value from preferredExtent taken instead."
+
+    ^ (Screen current pixelPerMillimeter * (80 @ 100)) rounded
+
+    "Modified: 5.7.1996 / 13:53:46 / cg"
+!
+
+listViewType
+    "return the type of listView 
+     - for easier redefinition in subclasses"
+
+    ^ SelectionInListView
+! !
+
+!ListSelectionBox methodsFor:'accessing'!
+
+contents
+    "return my contents"
+
+    enterField isNil ifTrue:[
+        ^ selectionList selectionValue
+    ].
+    ^ super contents
+
+    "Created: 26.2.1996 / 20:05:47 / cg"
+!
+
+initialSelection:selected
+    "select some item in the list"
+
+    
+    selectionList selection:selected
+!
+
+initialText:someString selected:selected
+    "in addition to showing the initial text; optionally also select it in the list"
+
+    super initialText:someString selected:selected.
+    selected ifTrue:[
+        selectionList setSelectElement:someString
+    ].
+
+    "Modified: 26.5.1996 / 15:03:37 / cg"
+!
+
+list:aList
+    "set the list to be displayed in selection list"
+
+    list := aList.
+    selectionList list:aList
+
+    "Modified: / 03-08-2011 / 12:30:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selectionChangeCallback:aBlock
+    "allows special actions to be hooked in, when the selection changes"
+
+    selectionChangeCallback := aBlock.
+!
+
+selectionIndex
+    ^ selectionList selection
+
+    "Created: 14.10.1996 / 16:28:50 / cg"
+!
+
+selectionList
+
+    ^selectionList
+! !
+
+!ListSelectionBox methodsFor:'accessing-behavior'!
+
+useIndex:aBoolean
+    aBoolean ifTrue:[
+        self noEnterField
+    ].
+    useIndex := aBoolean
+! !
+
+!ListSelectionBox methodsFor:'accessing-components'!
+
+listView
+    "return the listView component"
+
+    ^ selectionList
+
+    "Created: 26.10.1995 / 17:08:32 / cg"
+!
+
+panelView
+    ^ panel
+
+    "Created: / 22-03-2012 / 10:30:16 / cg"
+! !
+
+!ListSelectionBox methodsFor:'accessing-look'!
+
+noEnterField
+    "suppress the enterField - now only existing items are selectable;
+     the default is to present an enterField."
+
+    enterField destroy.
+    enterField := nil
+
+    "Created: 26.10.1995 / 17:12:38 / cg"
+    "Modified: 12.5.1996 / 21:49:14 / cg"
+!
+
+useComboBoxWithList:list
+    "change the enterField to be a ComboList"
+
+    self addEnterField:(ComboBoxView new).
+    enterField leaveAction:[:key | self okPressed].
+    enterField list:list.
+! !
+
+!ListSelectionBox methodsFor:'initialization'!
+
+beLiveSearchBox
+
+    enterField delegate:(
+        KeyboardForwarder 
+            toView:selectionList 
+            condition:[:type :key :view|(key == #CursorUp) or:[key == #CursorDown]]
+            filter:[:key | (key == #CursorUp) or:[key == #CursorDown]]
+        ).
+
+    searchJob := BackgroundJob 
+                named: 'List Selection Box Search Job'
+                on: [self filterList].
+
+    enterField immediateAccept: true.
+    enterField model: ValueHolder new.
+    enterField model onChangeSend: #restart to: searchJob.
+
+    "Created: / 03-08-2011 / 12:27:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+initialize
+    |space2 halfSpace v vbw|
+
+    super initialize.
+
+    useIndex := false.
+    "/ label := resources string:'Select or Enter'.
+    label := resources string:'Please Select'.
+
+    "need more space than an enterBox"
+
+    "self height:(height + (font height * 5)).  "
+
+    space2 := 2 * ViewSpacing.
+    halfSpace := ViewSpacing // 2.
+
+    panel := VerticalPanelView in:self.
+    panel horizontalLayout:#fit.
+    panel verticalLayout:#topFit.
+
+    v := HVScrollableView for:(self class listViewType) in:panel.
+    v horizontalScrollable:true; horizontalMini:true; autoHideHorizontalScrollBar:true.
+
+"/ old:
+"/    v origin:[0.0
+"/              @
+"/              (enterField origin y + enterField height + ViewSpacing)]
+"/      extent:[1.0
+"/              @ 
+"/              (height
+"/               - ViewSpacing - labelField heightIncludingBorder
+"/               - ViewSpacing - enterField heightIncludingBorder
+"/               - buttonPanel heightIncludingBorder - ViewSpacing
+"/               - space2)
+"/             ].
+
+"/ new:
+    panel origin:[enterField notNil ifTrue:[
+                0.0 @ (enterField origin y + enterField height + ViewSpacing)
+              ] ifFalse:[
+                0.0 @ (labelField origin y + labelField height + ViewSpacing)
+              ]
+             ]
+      corner:(1.0 @ 1.0).
+    panel bottomInset:(buttonPanel preferredHeight + ViewSpacing).
+
+    vbw := v borderWidth.
+    v
+        leftInset:halfSpace+vbw;
+        rightInset:halfSpace+vbw.
+
+    selectionList := v scrolledView.
+    self makeTabable:selectionList.
+
+    "self updateList."
+
+    "I am interested in what is done in the selectionList
+     (could also create a SelectionInList-model and catch its changes ...)"
+    selectionList action:[:lineNr | self selectionChanged].
+    selectionList doubleClickAction:[:lineNr | self doubleClick].
+
+    selectionList doNotRequestFocusOnPointerEnter:true.
+
+    enterField removeDependent:self. "dont want preferredExtent-changes"
+
+    enterField immediateAccept:true.
+    enterField acceptAction:
+                    [:text | |string index|
+                        enterField notNil ifTrue:[
+                            string := enterField contents.
+                            "/ find the first list-entry, starting with entered text
+                            index := (selectionList list ? #()) findFirst:[:line | (line ? '') string startsWith:string string].
+                            index ~~ 0 ifTrue:[
+                                selectionList scrollToLine:index "/ makeLineVisible:index.
+                            ].
+                        ].
+                    ].
+
+    "
+     mhm: the lists keyboard functions are disabled,
+     and input passed to the enterfield (except cursor keys)
+    "
+    selectionList delegate:(
+        KeyboardForwarder 
+            toView:enterField 
+            condition:#noFocus
+            filter:[:key | (key ~~ #CursorUp) and:[key ~~ #CursorDown]]
+        )
+
+    "Modified (format): / 22-03-2012 / 10:30:03 / cg"
+!
+
+postRealize
+    "update the list now.
+     This was not done in #initialize to allow settings to be changed before,
+     in case list-updating is a slow operation - such as reading a directory"
+
+    super postRealize.
+    self updateList.
+
+    "Modified: 12.5.1996 / 21:50:50 / cg"
+    "Created: 24.7.1997 / 18:22:19 / cg"
+!
+
+updateList
+    "setup contents of list; 
+     nothing done here but typically redefined in subclasses."
+
+    ^ self
+
+    "Modified: 12.5.1996 / 21:51:10 / cg"
+! !
+
+!ListSelectionBox methodsFor:'private'!
+
+filterList
+
+    | pattern filteredList |
+
+    pattern := enterField model value.
+    pattern isEmptyOrNil ifTrue:[
+        filteredList := list.        
+    ] ifFalse:[
+        filteredList := list select:[:each|each asString startsWith: pattern].
+    ].
+    self sensor pushUserEvent: #list: for: selectionList withArgument: filteredList
+
+    "Created: / 03-08-2011 / 12:27:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ListSelectionBox methodsFor:'queries'!
+
+preferredExtent
+    "return my preferred extent - thats the minimum size 
+     I like to have, to make everything visible"
+
+    |wWanted hWanted eH mm bw|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    mm := ViewSpacing.
+
+    wWanted := mm + labelField width + mm.
+    (wWanted > width) ifFalse:[
+        wWanted := width
+    ].
+    bw := buttonPanel preferredWidth.
+    bw > wWanted ifTrue:[
+        wWanted := bw.
+    ].
+
+    enterField notNil ifTrue:[
+        eH := enterField height + mm
+    ] ifFalse:[
+        eH := 0
+    ].
+    hWanted := mm + labelField height +
+               eH +
+               mm + selectionList height +
+               mm + buttonPanel preferredHeight +
+               mm - (mm * 2).
+
+    (hWanted < height) ifTrue:[
+        hWanted := height
+    ].
+    ^ (wWanted @ hWanted)
+
+    "Modified: 19.7.1996 / 20:44:52 / cg"
+! !
+
+!ListSelectionBox methodsFor:'user actions'!
+
+actionArgument
+    useIndex ifTrue:[
+        ^self selectionIndex.
+    ].
+    ^ super actionArgument
+!
+
+doubleClick
+    "doubleClick on an entry is select & ok"
+
+    enterField notNil ifTrue:[
+        enterField contents:(selectionList selectionValue).
+    ].
+    self okPressed
+
+    "Modified: 26.2.1996 / 20:05:45 / cg"
+!
+
+selectionChanged
+    "selections in list get forwarded to enterfield"
+
+    enterField notNil ifTrue:[
+        enterField contents:(selectionList selectionValue)
+    ].
+    selectionChangeCallback notNil ifTrue:[
+        selectionChangeCallback value:selectionList selection
+    ].
+
+    "Modified: 26.10.1995 / 17:20:06 / cg"
+! !
+
+!ListSelectionBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ListSelectionBox.st,v 1.62 2012-03-22 09:52:46 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/ListSelectionBox.st,v 1.62 2012-03-22 09:52:46 cg Exp $'
+! !
--- a/ListView.st	Tue May 13 23:20:31 2014 +0100
+++ b/ListView.st	Sun May 18 09:45:08 2014 +0100
@@ -9,8 +9,6 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 "
-'From Smalltalk/X, Version:6.2.3.0 on 08-05-2014 at 10:09:59'                   !
-
 "{ Package: 'stx:libwidg' }"
 
 View subclass:#ListView
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ListViewController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,65 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+Controller subclass:#ListViewController
+	 instanceVariableNames:''
+	 classVariableNames:''
+	 poolDictionaries:''
+	 category:'Interface-Support'
+!
+
+!ListViewController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ListViewController.st,v 1.2 1995-11-11 16:21:22 cg Exp $'
+!
+
+documentation
+"
+    a very simple controller: only handles some keys to pageup/down
+    the view.
+"
+! !
+
+!ListViewController methodsFor:'event processing'!
+
+keyPress:key x:x y:y
+    "a key was pressed - handle page-keys here"
+
+    (key == #Prior)    ifTrue: [^ view pageUp].
+    (key == #Next)     ifTrue: [^ view pageDown].
+
+    (key == #Ctrlb) ifTrue:[^ view pageUp].
+    (key == #Ctrlf) ifTrue:[^ view pageDown].
+    (key == #Ctrld) ifTrue:[^ view halfPageDown].
+    (key == #Ctrlu) ifTrue:[^ view halfPageUp].
+
+    (key == #ScrollUp) ifTrue:[^ view scrollUp].
+    (key == #ScrollDown) ifTrue:[^ view scrollDown].
+
+    super keyPress:key x:x y:y
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Make.proto	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,183 @@
+# $Header: /cvs/stx/stx/libwidg/Make.proto,v 1.92 2013-12-05 09:21:51 stefan Exp $
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: stx_libwidg.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# The Makefile as generated by this Make.proto supports the following targets:
+#    make         - compile all st-files to a classLib
+#    make clean   - clean all temp files
+#    make clobber - clean all
+#
+# This file contains definitions for Unix based platforms.
+# It shares common definitions with the win32-make in Make.spec.
+
+#
+# position (of this package) in directory hierarchy:
+# (must point to ST/X top directory, for tools and includes)
+TOP=..
+INCLUDE_TOP=$(TOP)/..
+
+# subdirectories where targets are to be made:
+SUBDIRS=
+
+
+# subdirectories where Makefiles are to be made:
+# (only define if different from SUBDIRS)
+# ALLSUBDIRS=
+
+REQUIRED_SUPPORT_DIRS=
+
+# if your embedded C code requires any system includes,
+# add the path(es) here:,
+# ********** OPTIONAL: MODIFY the next lines ***
+# LOCALINCLUDES=-Ifoo -Ibar
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libview
+
+
+# if you need any additional defines for embedded C code,
+# add them here:,
+# ********** OPTIONAL: MODIFY the next lines ***
+# LOCALDEFINES=-Dfoo -Dbar -DDEBUG
+LOCALDEFINES=
+
+LIBNAME=libstx_libwidg
+STCLOCALOPT='-package=$(PACKAGE)' -I. $(LOCALINCLUDES) $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -headerDir=. $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
+
+
+# ********** OPTIONAL: MODIFY the next line ***
+# additional C-libraries that should be pre-linked with the class-objects
+LD_OBJ_LIBS=
+LOCAL_SHARED_LIBS=
+
+
+# ********** OPTIONAL: MODIFY the next line ***
+# additional C targets or libraries should be added below
+LOCAL_EXTRA_TARGETS=
+
+OBJS= $(COMMON_OBJS) $(UNIX_OBJS)
+
+
+
+all:: preMake classLibRule postMake
+
+pre_objs::  
+
+
+
+
+
+
+
+# add more install actions here
+install::
+
+# add more install actions for aux-files (resources) here
+installAux::
+
+# add more preMake actions here
+preMake::
+
+# add more postMake actions here
+postMake:: cleanjunk
+
+# build all mandatory prerequisite packages (containing superclasses) for this package
+prereq:
+	cd ../libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd ../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+
+
+
+# build all packages containing referenced classes for this package
+# they are nor needed to compile the package
+references:
+
+
+cleanjunk::
+	-rm -f *.s *.s2
+
+clean::
+	-rm -f *.o *.H
+
+clobber:: clean
+	-rm -f *.so *.dll
+
+
+# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)ButtonController.$(O) ButtonController.$(H): ButtonController.st $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)DialogBox.$(O) DialogBox.$(H): DialogBox.st $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)EditTextViewCompletionSupport.$(O) EditTextViewCompletionSupport.$(H): EditTextViewCompletionSupport.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)EnterFieldGroup.$(O) EnterFieldGroup.$(H): EnterFieldGroup.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)FramedBox.$(O) FramedBox.$(H): FramedBox.st $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GenericToolbarIconLibrary.$(O) GenericToolbarIconLibrary.$(H): GenericToolbarIconLibrary.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Label.$(O) Label.$(H): Label.st $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ListView.$(O) ListView.$(H): ListView.st $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ListViewController.$(O) ListViewController.$(H): ListViewController.st $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)MenuEvent.$(O) MenuEvent.$(H): MenuEvent.st $(INCLUDE_TOP)/stx/libview/WidgetEvent.$(H) $(INCLUDE_TOP)/stx/libview/WindowEvent.$(H) $(INCLUDE_TOP)/stx/libview/Event.$(H) $(INCLUDE_TOP)/stx/libbasic/MessageSend.$(H) $(INCLUDE_TOP)/stx/libbasic/Message.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ObjectView.$(O) ObjectView.$(H): ObjectView.st $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PanelView.$(O) PanelView.$(H): PanelView.st $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PopUpMenu.$(O) PopUpMenu.$(H): PopUpMenu.st $(INCLUDE_TOP)/stx/libview/PopUpView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PullDownMenu.$(O) PullDownMenu.$(H): PullDownMenu.st $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)RadioButtonGroup.$(O) RadioButtonGroup.$(H): RadioButtonGroup.st $(INCLUDE_TOP)/stx/libview2/ValueHolder.$(H) $(INCLUDE_TOP)/stx/libview2/ValueModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ScrollBar.$(O) ScrollBar.$(H): ScrollBar.st $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ScrollableView.$(O) ScrollableView.$(H): ScrollableView.st $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Scroller.$(O) Scroller.$(H): Scroller.st $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SelectionInList.$(O) SelectionInList.$(H): SelectionInList.st $(INCLUDE_TOP)/stx/libview2/ValueHolder.$(H) $(INCLUDE_TOP)/stx/libview2/ValueModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VariablePanel.$(O) VariablePanel.$(H): VariablePanel.st $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VariablePanelController.$(O) VariablePanelController.$(H): VariablePanelController.st $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)stx_libwidg.$(O) stx_libwidg.$(H): stx_libwidg.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Button.$(O) Button.$(H): Button.st $(INCLUDE_TOP)/stx/libwidg/Label.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)CheckLabel.$(O) CheckLabel.$(H): CheckLabel.st $(INCLUDE_TOP)/stx/libwidg/Label.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)EnterBox.$(O) EnterBox.$(H): EnterBox.st $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)FontPanel.$(O) FontPanel.$(H): FontPanel.st $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)HVScrollableView.$(O) HVScrollableView.$(H): HVScrollableView.st $(INCLUDE_TOP)/stx/libwidg/ScrollableView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalPanelView.$(O) HorizontalPanelView.$(H): HorizontalPanelView.st $(INCLUDE_TOP)/stx/libwidg/PanelView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalScrollBar.$(O) HorizontalScrollBar.$(H): HorizontalScrollBar.st $(INCLUDE_TOP)/stx/libwidg/ScrollBar.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalScroller.$(O) HorizontalScroller.$(H): HorizontalScroller.st $(INCLUDE_TOP)/stx/libwidg/Scroller.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)InfoBox.$(O) InfoBox.$(H): InfoBox.st $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)MiniScroller.$(O) MiniScroller.$(H): MiniScroller.st $(INCLUDE_TOP)/stx/libwidg/Scroller.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)MultiColumnPanelView.$(O) MultiColumnPanelView.$(H): MultiColumnPanelView.st $(INCLUDE_TOP)/stx/libwidg/PanelView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)MultiSelectionInList.$(O) MultiSelectionInList.$(H): MultiSelectionInList.st $(INCLUDE_TOP)/stx/libwidg/SelectionInList.$(H) $(INCLUDE_TOP)/stx/libview2/ValueHolder.$(H) $(INCLUDE_TOP)/stx/libview2/ValueModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)OptionBox.$(O) OptionBox.$(H): OptionBox.st $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PopUpListController.$(O) PopUpListController.$(H): PopUpListController.st $(INCLUDE_TOP)/stx/libwidg/ButtonController.$(H) $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SelectionInListView.$(O) SelectionInListView.$(H): SelectionInListView.st $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SequenceView.$(O) SequenceView.$(H): SequenceView.st $(INCLUDE_TOP)/stx/libwidg/ScrollableView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TextView.$(O) TextView.$(H): TextView.st $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ToggleController.$(O) ToggleController.$(H): ToggleController.st $(INCLUDE_TOP)/stx/libwidg/ButtonController.$(H) $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VariableHorizontalPanel.$(O) VariableHorizontalPanel.$(H): VariableHorizontalPanel.st $(INCLUDE_TOP)/stx/libwidg/VariablePanel.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VariableHorizontalPanelController.$(O) VariableHorizontalPanelController.$(H): VariableHorizontalPanelController.st $(INCLUDE_TOP)/stx/libwidg/VariablePanelController.$(H) $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VariableVerticalPanel.$(O) VariableVerticalPanel.$(H): VariableVerticalPanel.st $(INCLUDE_TOP)/stx/libwidg/VariablePanel.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VariableVerticalPanelController.$(O) VariableVerticalPanelController.$(H): VariableVerticalPanelController.st $(INCLUDE_TOP)/stx/libwidg/VariablePanelController.$(H) $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VerticalPanelView.$(O) VerticalPanelView.$(H): VerticalPanelView.st $(INCLUDE_TOP)/stx/libwidg/PanelView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)WorkspaceCompletionSupport.$(O) WorkspaceCompletionSupport.$(H): WorkspaceCompletionSupport.st $(INCLUDE_TOP)/stx/libwidg/EditTextViewCompletionSupport.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)XPToolbarIconLibrary.$(O) XPToolbarIconLibrary.$(H): XPToolbarIconLibrary.st $(INCLUDE_TOP)/stx/libwidg/GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ArrowButton.$(O) ArrowButton.$(H): ArrowButton.st $(INCLUDE_TOP)/stx/libwidg/Button.$(H) $(INCLUDE_TOP)/stx/libwidg/Label.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)EditTextView.$(O) EditTextView.$(H): EditTextView.st $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Query.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(STCHDR)
+$(OUTDIR)EnterBox2.$(O) EnterBox2.$(H): EnterBox2.st $(INCLUDE_TOP)/stx/libwidg/EnterBox.$(H) $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)FileSelectionList.$(O) FileSelectionList.$(H): FileSelectionList.st $(INCLUDE_TOP)/stx/libwidg/SelectionInListView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalMiniScroller.$(O) HorizontalMiniScroller.$(H): HorizontalMiniScroller.st $(INCLUDE_TOP)/stx/libwidg/MiniScroller.$(H) $(INCLUDE_TOP)/stx/libwidg/Scroller.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ListSelectionBox.$(O) ListSelectionBox.$(H): ListSelectionBox.st $(INCLUDE_TOP)/stx/libwidg/EnterBox.$(H) $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)MenuView.$(O) MenuView.$(H): MenuView.st $(INCLUDE_TOP)/stx/libwidg/SelectionInListView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PopUpList.$(O) PopUpList.$(H): PopUpList.st $(INCLUDE_TOP)/stx/libwidg/Button.$(H) $(INCLUDE_TOP)/stx/libwidg/Label.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)RadioButtonController.$(O) RadioButtonController.$(H): RadioButtonController.st $(INCLUDE_TOP)/stx/libwidg/ToggleController.$(H) $(INCLUDE_TOP)/stx/libwidg/ButtonController.$(H) $(INCLUDE_TOP)/stx/libview/Controller.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Toggle.$(O) Toggle.$(H): Toggle.st $(INCLUDE_TOP)/stx/libwidg/Button.$(H) $(INCLUDE_TOP)/stx/libwidg/Label.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)VistaToolbarIconLibrary.$(O) VistaToolbarIconLibrary.$(H): VistaToolbarIconLibrary.st $(INCLUDE_TOP)/stx/libwidg/XPToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libwidg/GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)WarningBox.$(O) WarningBox.$(H): WarningBox.st $(INCLUDE_TOP)/stx/libwidg/InfoBox.$(H) $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)CheckToggle.$(O) CheckToggle.$(H): CheckToggle.st $(INCLUDE_TOP)/stx/libwidg/Toggle.$(H) $(INCLUDE_TOP)/stx/libwidg/Button.$(H) $(INCLUDE_TOP)/stx/libwidg/Label.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ClickMenuView.$(O) ClickMenuView.$(H): ClickMenuView.st $(INCLUDE_TOP)/stx/libwidg/MenuView.$(H) $(INCLUDE_TOP)/stx/libwidg/SelectionInListView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)EditField.$(O) EditField.$(H): EditField.st $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)FileSelectionBox.$(O) FileSelectionBox.$(H): FileSelectionBox.st $(INCLUDE_TOP)/stx/libwidg/ListSelectionBox.$(H) $(INCLUDE_TOP)/stx/libwidg/EnterBox.$(H) $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)RadioButton.$(O) RadioButton.$(H): RadioButton.st $(INCLUDE_TOP)/stx/libwidg/Toggle.$(H) $(INCLUDE_TOP)/stx/libwidg/Button.$(H) $(INCLUDE_TOP)/stx/libwidg/Label.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TextCollector.$(O) TextCollector.$(H): TextCollector.st $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Windows8ToolbarIconLibrary.$(O) Windows8ToolbarIconLibrary.$(H): Windows8ToolbarIconLibrary.st $(INCLUDE_TOP)/stx/libwidg/VistaToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libwidg/XPToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libwidg/GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)YesNoBox.$(O) YesNoBox.$(H): YesNoBox.st $(INCLUDE_TOP)/stx/libwidg/WarningBox.$(H) $(INCLUDE_TOP)/stx/libwidg/InfoBox.$(H) $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)FileSaveBox.$(O) FileSaveBox.$(H): FileSaveBox.st $(INCLUDE_TOP)/stx/libwidg/FileSelectionBox.$(H) $(INCLUDE_TOP)/stx/libwidg/ListSelectionBox.$(H) $(INCLUDE_TOP)/stx/libwidg/EnterBox.$(H) $(INCLUDE_TOP)/stx/libwidg/DialogBox.$(H) $(INCLUDE_TOP)/stx/libview/ModalBox.$(H) $(INCLUDE_TOP)/stx/libview/StandardSystemView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Workspace.$(O) Workspace.$(H): Workspace.st $(INCLUDE_TOP)/stx/libwidg/TextCollector.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)CodeView.$(O) CodeView.$(H): CodeView.st $(INCLUDE_TOP)/stx/libwidg/Workspace.$(H) $(INCLUDE_TOP)/stx/libwidg/TextCollector.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+
+# ENDMAKEDEPEND --- do not remove this line
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Make.spec	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,200 @@
+# $Header: /cvs/stx/stx/libwidg/Make.spec,v 1.21 2013-12-05 09:21:48 stefan Exp $
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: stx_libwidg.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# This file contains specifications which are common to all platforms.
+#
+
+# Do NOT CHANGE THESE DEFINITIONS
+# (otherwise, ST/X will have a hard time to find out the packages location from its packageID,
+#  to find the source code of a class and to find the library for a package)
+MODULE=stx
+MODULE_DIR=libwidg
+PACKAGE=$(MODULE):$(MODULE_DIR)
+
+
+# Argument(s) to the stc compiler (stc --usage).
+#  -headerDir=. : create header files locally
+#                (if removed, they will be created as common
+#  -Pxxx       : defines the package
+#  -Zxxx       : a prefix for variables within the classLib
+#  -Dxxx       : defines passed to to CC for inline C-code
+#  -Ixxx       : include path passed to CC for inline C-code
+#  +optspace   : optimized for space
+#  +optspace2  : optimized more for space
+#  +optspace3  : optimized even more for space
+#  +optinline  : generate inline code for some ST constructs
+#  +inlineNew  : additionally inline new
+#  +inlineMath : additionally inline some floatPnt math stuff
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCLOCALOPTIMIZATIONS=+optinline +inlineNew
+# STCLOCALOPTIMIZATIONS=+optspace3
+STCLOCALOPTIMIZATIONS=+optinline
+
+
+# Argument(s) to the stc compiler (stc --usage).
+#  -warn            : no warnings
+#  -warnNonStandard : no warnings about ST/X extensions
+#  -warnEOLComments : no warnings about EOL comment extension
+#  -warnPrivacy     : no warnings about privateClass extension
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCWARNINGS=-warn
+# STCWARNINGS=-warnNonStandard
+# STCWARNINGS=-warnEOLComments
+STCWARNINGS=-warnNonStandard
+
+COMMON_CLASSES= \
+	ButtonController \
+	DialogBox \
+	EditTextViewCompletionSupport \
+	EnterFieldGroup \
+	FramedBox \
+	GenericToolbarIconLibrary \
+	Label \
+	ListView \
+	ListViewController \
+	MenuEvent \
+	ObjectView \
+	PanelView \
+	PopUpMenu \
+	PullDownMenu \
+	RadioButtonGroup \
+	ScrollBar \
+	ScrollableView \
+	Scroller \
+	SelectionInList \
+	VariablePanel \
+	VariablePanelController \
+	stx_libwidg \
+	Button \
+	CheckLabel \
+	EnterBox \
+	FontPanel \
+	HVScrollableView \
+	HorizontalPanelView \
+	HorizontalScrollBar \
+	HorizontalScroller \
+	InfoBox \
+	MiniScroller \
+	MultiColumnPanelView \
+	MultiSelectionInList \
+	OptionBox \
+	PopUpListController \
+	SelectionInListView \
+	SequenceView \
+	TextView \
+	ToggleController \
+	VariableHorizontalPanel \
+	VariableHorizontalPanelController \
+	VariableVerticalPanel \
+	VariableVerticalPanelController \
+	VerticalPanelView \
+	WorkspaceCompletionSupport \
+	XPToolbarIconLibrary \
+	ArrowButton \
+	EditTextView \
+	EnterBox2 \
+	FileSelectionList \
+	HorizontalMiniScroller \
+	ListSelectionBox \
+	MenuView \
+	PopUpList \
+	RadioButtonController \
+	Toggle \
+	VistaToolbarIconLibrary \
+	WarningBox \
+	CheckToggle \
+	ClickMenuView \
+	EditField \
+	FileSelectionBox \
+	RadioButton \
+	TextCollector \
+	Windows8ToolbarIconLibrary \
+	YesNoBox \
+	FileSaveBox \
+	Workspace \
+	CodeView \
+
+
+
+
+COMMON_OBJS= \
+    $(OUTDIR_SLASH)ButtonController.$(O) \
+    $(OUTDIR_SLASH)DialogBox.$(O) \
+    $(OUTDIR_SLASH)EditTextViewCompletionSupport.$(O) \
+    $(OUTDIR_SLASH)EnterFieldGroup.$(O) \
+    $(OUTDIR_SLASH)FramedBox.$(O) \
+    $(OUTDIR_SLASH)GenericToolbarIconLibrary.$(O) \
+    $(OUTDIR_SLASH)Label.$(O) \
+    $(OUTDIR_SLASH)ListView.$(O) \
+    $(OUTDIR_SLASH)ListViewController.$(O) \
+    $(OUTDIR_SLASH)MenuEvent.$(O) \
+    $(OUTDIR_SLASH)ObjectView.$(O) \
+    $(OUTDIR_SLASH)PanelView.$(O) \
+    $(OUTDIR_SLASH)PopUpMenu.$(O) \
+    $(OUTDIR_SLASH)PullDownMenu.$(O) \
+    $(OUTDIR_SLASH)RadioButtonGroup.$(O) \
+    $(OUTDIR_SLASH)ScrollBar.$(O) \
+    $(OUTDIR_SLASH)ScrollableView.$(O) \
+    $(OUTDIR_SLASH)Scroller.$(O) \
+    $(OUTDIR_SLASH)SelectionInList.$(O) \
+    $(OUTDIR_SLASH)VariablePanel.$(O) \
+    $(OUTDIR_SLASH)VariablePanelController.$(O) \
+    $(OUTDIR_SLASH)stx_libwidg.$(O) \
+    $(OUTDIR_SLASH)Button.$(O) \
+    $(OUTDIR_SLASH)CheckLabel.$(O) \
+    $(OUTDIR_SLASH)EnterBox.$(O) \
+    $(OUTDIR_SLASH)FontPanel.$(O) \
+    $(OUTDIR_SLASH)HVScrollableView.$(O) \
+    $(OUTDIR_SLASH)HorizontalPanelView.$(O) \
+    $(OUTDIR_SLASH)HorizontalScrollBar.$(O) \
+    $(OUTDIR_SLASH)HorizontalScroller.$(O) \
+    $(OUTDIR_SLASH)InfoBox.$(O) \
+    $(OUTDIR_SLASH)MiniScroller.$(O) \
+    $(OUTDIR_SLASH)MultiColumnPanelView.$(O) \
+    $(OUTDIR_SLASH)MultiSelectionInList.$(O) \
+    $(OUTDIR_SLASH)OptionBox.$(O) \
+    $(OUTDIR_SLASH)PopUpListController.$(O) \
+    $(OUTDIR_SLASH)SelectionInListView.$(O) \
+    $(OUTDIR_SLASH)SequenceView.$(O) \
+    $(OUTDIR_SLASH)TextView.$(O) \
+    $(OUTDIR_SLASH)ToggleController.$(O) \
+    $(OUTDIR_SLASH)VariableHorizontalPanel.$(O) \
+    $(OUTDIR_SLASH)VariableHorizontalPanelController.$(O) \
+    $(OUTDIR_SLASH)VariableVerticalPanel.$(O) \
+    $(OUTDIR_SLASH)VariableVerticalPanelController.$(O) \
+    $(OUTDIR_SLASH)VerticalPanelView.$(O) \
+    $(OUTDIR_SLASH)WorkspaceCompletionSupport.$(O) \
+    $(OUTDIR_SLASH)XPToolbarIconLibrary.$(O) \
+    $(OUTDIR_SLASH)ArrowButton.$(O) \
+    $(OUTDIR_SLASH)EditTextView.$(O) \
+    $(OUTDIR_SLASH)EnterBox2.$(O) \
+    $(OUTDIR_SLASH)FileSelectionList.$(O) \
+    $(OUTDIR_SLASH)HorizontalMiniScroller.$(O) \
+    $(OUTDIR_SLASH)ListSelectionBox.$(O) \
+    $(OUTDIR_SLASH)MenuView.$(O) \
+    $(OUTDIR_SLASH)PopUpList.$(O) \
+    $(OUTDIR_SLASH)RadioButtonController.$(O) \
+    $(OUTDIR_SLASH)Toggle.$(O) \
+    $(OUTDIR_SLASH)VistaToolbarIconLibrary.$(O) \
+    $(OUTDIR_SLASH)WarningBox.$(O) \
+    $(OUTDIR_SLASH)CheckToggle.$(O) \
+    $(OUTDIR_SLASH)ClickMenuView.$(O) \
+    $(OUTDIR_SLASH)EditField.$(O) \
+    $(OUTDIR_SLASH)FileSelectionBox.$(O) \
+    $(OUTDIR_SLASH)RadioButton.$(O) \
+    $(OUTDIR_SLASH)TextCollector.$(O) \
+    $(OUTDIR_SLASH)Windows8ToolbarIconLibrary.$(O) \
+    $(OUTDIR_SLASH)YesNoBox.$(O) \
+    $(OUTDIR_SLASH)FileSaveBox.$(O) \
+    $(OUTDIR_SLASH)Workspace.$(O) \
+    $(OUTDIR_SLASH)CodeView.$(O) \
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.init	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,27 @@
+#
+# DO NOT EDIT
+#
+# make uses this file (Makefile) only, if there is no
+# file named "makefile" (lower-case m) in the same directory.
+# My only task is to generate the real makefile and call make again.
+# Thereafter, I am no longer used and needed.
+#
+# MACOSX caveat:
+#   as filenames are not case sensitive (in a default setup),
+#   we cannot use the above trick. Therefore, this file is now named
+#   "Makefile.init", and you have to execute "make -f Makefile.init" to
+#   get the initial makefile.  This is now also done by the toplevel CONFIG
+#   script.
+
+.PHONY: run
+
+run: makefile
+	$(MAKE) -f makefile
+
+#only needed for the definition of $(TOP)
+include Make.proto
+
+makefile: mf
+
+mf:
+	$(TOP)/rules/stmkmf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MenuEvent.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,199 @@
+"{ Package: 'stx:libwidg' }"
+
+WidgetEvent subclass:#MenuEvent
+	instanceVariableNames:'menu itemIndex item itemLabel itemValue menuReceiver'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Menus'
+!
+
+MenuEvent subclass:#MenuEnterItemEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuEvent subclass:#MenuHideEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuEvent subclass:#MenuLeaveItemEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuEvent subclass:#MenuSelectItemEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+MenuEvent subclass:#MenuShowEvent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:MenuEvent
+!
+
+!MenuEvent class methodsFor:'documentation'!
+
+documentation
+"
+    Internal menu events.
+    These have been added very lately to support capture & replay inside st/x applications.
+    They are used internally within a menu-widget instead of direct message sends, thus
+    allowing interception and synthetization.
+
+    Due to some historic leftover, there are two mechanisms for menus:
+        1) the (very) old MenuView (which inherits from SelectionInListView)
+        2) the new MenuPanel.
+
+    The menuView uses simple text and values and it is basically index-based.
+    The menuPanel uses instances of MenuItem which contain the action information.
+
+    The menuView should go away, as soon as someone finds time to convert all leftover uses
+    of it in the system (mostly popupMenus in text views).
+"
+! !
+
+!MenuEvent class methodsFor:'instance creation'!
+
+enterMenuItem:itemOrNil index:index text:textOrNil value:valueOrNil inMenu:aMenu menuReceiver:menuReceiver
+    |ev|
+
+    ev := (MenuEnterItemEvent basicNew).
+    ev item:itemOrNil index:index text:textOrNil value:valueOrNil menu:aMenu menuReceiver:menuReceiver.
+
+    ev selector:#processMenuEnterItemEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 16:19:14 / cg"
+!
+
+hideMenu:aMenu
+    |ev|
+
+    ev := (MenuHideEvent basicNew).
+    ev menu:aMenu.
+
+    ev selector:#processHideMenuEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 12:30:16 / cg"
+!
+
+leaveMenuItem:itemOrNil index:index text:textOrNil value:valueOrNil inMenu:aMenu menuReceiver:menuReceiver
+    |ev|
+
+    ev := (MenuLeaveItemEvent basicNew).
+    ev menu:aMenu.
+    ev item:itemOrNil index:index text:textOrNil value:valueOrNil menu:aMenu menuReceiver:menuReceiver.
+
+    ev selector:#processMenuLeaveItemEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 16:19:01 / cg"
+!
+
+selectMenuItem:itemOrNil index:indexOrNil text:textOrNil value:valueOrNil inMenu:aMenu menuReceiver:menuReceiver
+    |ev|
+
+    ev := (MenuSelectItemEvent basicNew).
+    ev item:itemOrNil index:indexOrNil text:textOrNil value:valueOrNil menu:aMenu menuReceiver:menuReceiver.
+
+    ev selector:#processMenuSelectItemEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 16:18:34 / cg"
+!
+
+showMenu:aMenu
+    |ev|
+
+    ev := (MenuShowEvent basicNew).
+    ev menu:aMenu.
+
+    ev selector:#processShowMenuEvent:.
+    ev arguments:(Array with:ev).
+    ^ ev
+
+    "Created: / 29-06-2011 / 12:30:05 / cg"
+! !
+
+!MenuEvent methodsFor:'accessing'!
+
+item
+    "attention: only menuPanels return something useful here;
+     menuview will return nil"
+
+    ^ item
+
+    "Modified: / 29-06-2011 / 12:41:28 / cg"
+!
+
+itemIndex
+    "the index (1..) of the menu item"
+
+    ^ itemIndex
+
+    "Modified: / 29-06-2011 / 12:41:47 / cg"
+!
+
+itemLabel
+    "the item's label text. Might be nil or non-string (image or labelAndIcon)"
+
+    ^ itemLabel
+
+    "Modified: / 29-06-2011 / 12:42:18 / cg"
+!
+
+itemValue
+    "the item's value. That is completely up to the menu-widget's user."
+
+    ^ itemValue
+
+    "Modified: / 29-06-2011 / 12:42:46 / cg"
+!
+
+menu
+    "the item's menu; either a menuPanel or a menuView"
+
+    ^ menu
+
+    "Modified: / 29-06-2011 / 12:43:00 / cg"
+!
+
+menuReceiver
+    ^ menuReceiver
+! !
+
+!MenuEvent methodsFor:'instance creation'!
+
+item:itemArgOrNil index:indexArgOrNil text:textArgOrNil value:valueArgOrNil menu:aMenu menuReceiver:menuReceiverArg
+    item := itemArgOrNil.
+    itemIndex := indexArgOrNil.
+    itemLabel := textArgOrNil.
+    itemValue := valueArgOrNil.
+    menu := receiver := aMenu.
+    menuReceiver := menuReceiverArg.
+
+    "Created: / 29-06-2011 / 16:18:08 / cg"
+! !
+
+!MenuEvent class methodsFor:'documentation'!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/MenuEvent.st,v 1.3 2013-06-21 13:40:23 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MenuView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,3013 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SelectionInListView subclass:#MenuView
+	instanceVariableNames:'selectors args receiver enableFlags disabledFgColor
+		disabledEtchedFgColor onOffFlags subMenus subMenuShown superMenu
+		checkColor lineLevel lineInset masterView needResize
+		hideOnRelease sizeFixed shortKeys maxShortKeyStringLen actions
+		checkOnImage checkOffImage blockOfSubMenuShown
+		delayedSubmenuHideOrShowAction lastMousePoint'
+	classVariableNames:'DefaultCheckColor DefaultViewBackground DefaultForegroundColor
+		DefaultBackgroundColor DefaultDisabledForegroundColor
+		DefaultDisabledEtchedForegroundColor
+		DefaultHilightForegroundColor DefaultHilightBackgroundColor
+		DefaultHilightLevel DefaultHilightStyle DefaultHilightFrameColor
+		DefaultLineLevel DefaultLineInset DefaultShadowColor
+		DefaultLightColor ShowAcceleratorKeys DefaultCheckOnImage
+		DefaultCheckOffImage'
+	poolDictionaries:''
+	category:'Views-Menus'
+!
+
+!MenuView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Notice:
+        MenuView is going to be obsoleted - use Menu & MenuItem,
+        and display them in a MenuPanel for new applications.
+
+    a menu view used for both pull-down-menus and pop-up-menus (and also,
+    for nonModal menus, such as the OldLaunchers click-menu).
+    the action to be performed can be defined either as:
+
+    1) action:aBlockWithOneArg
+       which defines a block to be called with the line number (1..n)
+       of the selected line.
+
+    2) selectors:selectorArray [args: argArray] [receiver:anObject]
+       which defines the messages to be sent to the model or
+       receiver. Giving an explicit receiver overrides the model.
+
+    It is also possible to define both actionBlock and selectorArray.
+
+    The wellknown popups are created by wrapping a MenuView into an instance of
+    PopUpMenu (read the description of popupmenu).
+
+    menu entries starting with '\c' are check-entries.
+    menu entries starting with '\b' are checkBox-entries.
+    menu entries starting with '\t' are thumbUp/Down-entries.
+    menu entries conisting of '-' alone, are separating lines.
+    menu entries conisting of '=' alone, are double separating lines.
+
+
+    StyleSheet defaults:
+
+        menuFont                    font to use for menus
+
+        menuViewBackground          view background (should be same as menuBackgroundColor)
+        menuForegroundColor         foreground color
+        menuBackgroundColor         background color
+
+        menuShadowColor             shadow color for 3D effects
+        menuLightColor              lightColor for 3D effects
+        menuHilightForegroundColor  hilighted items foregroundColor
+        menuHilightBackgroundColor  hilighted items backgroundColor
+
+        menuHilightFrameColor       frame arounf hilighted items (or nil, if none)
+                                    defaults to selectionHilightFrameColor
+        menuHilightLevel            3D level of selected items
+        menuHilightStyle            #openwin or nil (special kludge)
+        menuSeparatingLineLevel     3D level of sep. lines
+        menuSeparatingLineInset     left/right inset of sep. lines
+        menuDisabledForegroundColor foreground color of disabled items
+        menuCheckColor              color to use for check marks
+        menuFont                    font to use
+
+    other values and some defaults are inherited via SelectionInListViews
+    styles (i.e. look for selectionForegroundColor ...)
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        PopUpMenu PullDownMenu
+        ClickMenuView
+        LineMenu PatternMenu
+"
+!
+
+examples
+"
+    See real examples in PopUpMenu & PullDownMenu
+
+    Examples:
+	Notice: normally, menuviews are wrapped into either a popup-
+	menu or pulldown-menu.
+	But they can also be used stand-alone as in the following examples:
+
+									[exBegin]
+	|m|
+	m := MenuView
+		labels:#('foo'
+			 'bar'
+			 'baz')
+		selectors:#(
+			    #foo
+			    #bar
+			    #baz)
+		receiver:nil.
+	m open
+									[exEnd]
+
+									[exBegin]
+	|m|
+	m := MenuView
+		labels:#('foo'
+			 'bar'
+			 'baz')
+		selectors:#foo:
+		args:#(1 2 3)   
+		receiver:nil.
+	m open
+									[exEnd]
+"
+! !
+
+!MenuView class methodsFor:'instance creation'!
+
+forMenu:aTopMenu
+    "create and return a new menuView, which will be contained in
+     aTopMenus superView"
+
+    aTopMenu isNil ifTrue:[
+	^ self new
+    ].
+    ^ self in:(aTopMenu superView).
+
+    "Created: 5.6.1996 / 11:29:27 / cg"
+!
+
+labels:labels
+    "create and return a new MenuView. The parent view,
+     selectors and receiver should be set later."
+
+    ^ self labels:labels selectors:nil args:nil receiver:nil 
+!
+
+labels:labels selector:aSelector args:argArray receiver:anObject for:aTopMenu
+    "create and return a new MenuView
+     - receiverObject gets message aSelector with argument from
+       argArray for ALL entries"
+
+    "OBSOLETE protocol: labels:selectors:args:receiver: knows how to handle a
+     single symbol-arg for selectors ..."
+
+    ^ self labels:labels selectors:aSelector args:argArray receiver:anObject in:(aTopMenu superView)
+!
+
+labels:labels selector:aSelector args:argArray receiver:anObject in:aTopMenu
+    "create and return a new MenuView
+     - receiverObject gets message aSelector with argument from
+       argArray for all entries"
+
+    "OBSOLETE protocol: labels:selectors:args:receiver: knows how to handle a
+     single symbol-arg for selectors ..."
+
+    ^ self labels:labels selectors:aSelector args:argArray receiver:anObject in:aTopMenu
+!
+
+labels:labels selectors:selArray
+    "create and return a new MenuView. The parent veiw
+     and receiver should be set later."
+
+    ^ self labels:labels selectors:selArray args:nil receiver:nil 
+!
+
+labels:labels selectors:selArray accelerators:shorties
+    "create and return a new MenuView. The parent veiw
+     and receiver should be set later."
+
+    ^ self labels:labels selectors:selArray accelerators:shorties args:nil receiver:nil 
+!
+
+labels:labels selectors:selArray accelerators:shorties args:argArray receiver:anObject
+    "create and return a new MenuView. The parent view
+     should be set later."
+
+    ^ (self new) 
+	labels:labels
+	selectors:selArray
+	accelerators:shorties 
+	args:argArray 
+	receiver:anObject
+!
+
+labels:labels selectors:selArray accelerators:shorties args:argArray receiver:anObject for:aTopMenu
+    "create and return a new MenuView for a topMenu"
+
+    ^ self labels:labels selectors:selArray accelerators:shorties args:argArray receiver:anObject in:(aTopMenu superView)
+
+    "Created: 5.6.1996 / 16:51:46 / cg"
+!
+
+labels:labels selectors:selArray accelerators:shorties args:argArray receiver:anObject in:aView
+    "create and return a new MenuView in aView
+     - receiverObject gets message from selectorArray with argument
+       from argArray"
+
+    ^ (self in:aView) 
+	labels:labels 
+	selectors:selArray
+	accelerators:shorties 
+	args:argArray
+	receiver:anObject
+!
+
+labels:labels selectors:selArray accelerators:shorties receiver:anObject
+    "create and return a new MenuView. The parent view
+     should be set later."
+
+    ^ self labels:labels selectors:selArray accelerators:shorties args:nil receiver:anObject
+!
+
+labels:labels selectors:selArray args:argArray
+    "create and return a new MenuView. The parent view
+     should be set later."
+
+    ^ self labels:labels selectors:selArray args:argArray
+!
+
+labels:labels selectors:selArray args:argArray receiver:anObject
+    "create and return a new MenuView. The parent view
+     should be set later."
+
+    ^ (self new) 
+	labels:labels
+	selectors:selArray
+	args:argArray 
+	receiver:anObject
+!
+
+labels:labels selectors:selArray args:argArray receiver:anObject for:aTopMenu
+    "create and return a new MenuView for a topMenu"
+
+    ^ self labels:labels selectors:selArray args:argArray receiver:anObject in:(aTopMenu superView)
+!
+
+labels:labels selectors:selArray args:argArray receiver:anObject in:aView
+    "create and return a new MenuView in aView
+     - receiverObject gets message from selectorArray with argument
+       from argArray"
+
+    ^ (self in:aView) 
+	labels:labels 
+	selectors:selArray
+	args:argArray
+	receiver:anObject
+!
+
+labels:labels selectors:selArray receiver:anObject
+    "create and return a new MenuView. The parent view
+     should be set later."
+
+    ^ self labels:labels selectors:selArray args:nil receiver:anObject
+!
+
+labels:labels selectors:selArray receiver:anObject for:aTopMenu
+    ^ self labels:labels selectors:selArray args:nil receiver:anObject for:aTopMenu
+!
+
+labels:labels selectors:selArray receiver:anObject in:aView
+    "create and return a new MenuView in aView
+     - receiverObject gets message from selectorArray without argument"
+
+    ^ self labels:labels selectors:selArray args:nil receiver:anObject in:aView
+! !
+
+!MenuView class methodsFor:'defaults'!
+
+showAcceleratorKeys
+    ^ ShowAcceleratorKeys ~~ false
+
+    "Created: 2.3.1996 / 14:52:34 / cg"
+    "Modified: 2.3.1996 / 14:54:58 / cg"
+!
+
+showAcceleratorKeys:aBoolean
+    ShowAcceleratorKeys := aBoolean
+
+    "Created: 2.3.1996 / 14:52:43 / cg"
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'menu.foregroundColor'     #'menu.backgroundColor'
+                       #'menu.viewBackground'
+                       #'menu.shadowColor'         #'menu.lightColor'
+                       #'menu.hilightForegroundColor' #'menu.hilightBackgroundColor'
+                       #'menu.hilightFrameColor'   #'selection.hilightFrameColor'
+                       #'menu.hilightLevel'        #'menu.hilightStyle'
+                       #'menu.separatingLineLevel' #'menu.separatingLineInset'
+                       #'menu.disabledForegroundColor' 
+                       #'menu.checkColor' #'menu.checkOnImage' #'menu.checkOffImage'
+                       #'menu.font' #'menu.showAccelerators')>
+
+    DefaultViewBackground := StyleSheet colorAt:#'menu.viewBackground'.
+    DefaultForegroundColor := StyleSheet colorAt:#'menu.foregroundColor'.
+    DefaultBackgroundColor := StyleSheet colorAt:#'menu.backgroundColor'.
+    DefaultShadowColor := StyleSheet colorAt:#'menu.shadowColor'.
+    DefaultLightColor := StyleSheet colorAt:#'menu.lightColor'.
+    DefaultHilightForegroundColor := StyleSheet colorAt:#'menu.hilightForegroundColor'.
+    DefaultHilightBackgroundColor := StyleSheet colorAt:#'menu.hilightBackgroundColor'.
+    DefaultHilightFrameColor := StyleSheet colorAt:#'menu.hilightFrameColor' 
+                                default:(StyleSheet colorAt:#'selection.hilightFrameColor').
+    DefaultHilightLevel := StyleSheet at:#'menu.hilightLevel'.
+    DefaultHilightStyle := StyleSheet at:#'menu.hilightStyle'.
+    DefaultLineLevel := StyleSheet at:#'menu.separatingLineLevel'.
+    DefaultLineInset := StyleSheet at:#'menu.separatingLineInset'.
+    DefaultDisabledForegroundColor := StyleSheet colorAt:#'menu.disabledForegroundColor' default:nil.
+    DefaultDisabledForegroundColor isNil ifTrue:[
+        DefaultDisabledForegroundColor := StyleSheet colorAt:#'selection.disabledForegroundColor' default:Color darkGray.
+        DefaultDisabledForegroundColor isNil ifTrue:[
+            DefaultDisabledForegroundColor := StyleSheet colorAt:#'button.disabledForegroundColor' default:Color darkGray.
+        ]
+    ].
+    DefaultDisabledEtchedForegroundColor := StyleSheet colorAt:#'menu.disabledEtchedForegroundColor'.
+    DefaultDisabledEtchedForegroundColor isNil ifTrue:[
+        DefaultDisabledEtchedForegroundColor := StyleSheet colorAt:#'button.disabledEtchedForegroundColor'.
+    ].
+    DefaultCheckColor := StyleSheet colorAt:#'menu.checkColor'.
+    DefaultCheckOnImage := StyleSheet at:#'menu.checkOnImage'.
+    DefaultCheckOffImage := StyleSheet at:#'menu.checkOffImage'.
+    DefaultFont := StyleSheet fontAt:#'menu.font'.
+    ShowAcceleratorKeys := StyleSheet at:#'menu.showAccelerators' default:true.
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: / 19.5.1998 / 22:02:30 / cg"
+! !
+
+!MenuView methodsFor:'accessing-behavior'!
+
+action
+    ^ actionBlock
+
+    "Created: 25.5.1996 / 15:11:51 / cg"
+!
+
+disable:indexOrName
+    "disable an entry"
+
+    self setEnable:indexOrName to:false
+!
+
+disableAll
+    "disable all entries"
+
+    self disableAll:selectors
+
+    "Created: 23.12.1995 / 16:56:05 / cg"
+!
+
+disableAll:collectionOfIndicesOrNames
+    "disable an collection of entries"
+
+    collectionOfIndicesOrNames do:[:entry |
+	self disable:entry
+    ]
+!
+
+enable:indexOrName
+    "enable an entry"
+
+    self setEnable:indexOrName to:true 
+!
+
+enableAll:collectionOfIndicesOrNames
+    "enable an collection of entries"
+
+    collectionOfIndicesOrNames do:[:entry |
+	self enable:entry
+    ]
+!
+
+hideOnRelease:aBoolean
+    hideOnRelease := aBoolean
+!
+
+isEnabled:indexOrName
+    "return true, if the item at anIndexOrName is enabled"
+
+    |index|
+
+    enableFlags isNil ifTrue:[^ true].
+    indexOrName isNumber ifTrue:[ ^ enableFlags at: indexOrName ].
+
+    index := self indexOf:indexOrName.
+    index ~~ 0 ifTrue:[
+        ^ enableFlags at:index
+    ].
+    "ask submenus for convenience"
+    (indexOrName isNumber not and:[subMenus notNil]) ifTrue:[
+        subMenus do:[:m |
+            m notNil ifTrue:[
+                (m isEnabled:indexOrName) ifTrue:[^ true].
+            ]
+        ]
+    ].
+    ^ false
+!
+
+setEnable:indexOrName to:aBoolean
+    "enable/disable an entry"
+
+    |index|
+
+    enableFlags isNil ifTrue:[
+        aBoolean ifTrue:[ ^ self ].
+        enableFlags := Array new: list size
+    ].
+
+    index := self indexOf:indexOrName.
+    index ~~ 0 ifTrue:[
+        (enableFlags at:index) ~~ aBoolean ifTrue:[
+            enableFlags at:index put:aBoolean.
+            shown ifTrue:[
+                self redrawLine:index
+            ]
+        ]
+    ] ifFalse:[
+        "try submenus for convenience"
+        (indexOrName isNumber not and:[subMenus notNil]) ifTrue:[
+            subMenus do:[:m |
+                (m notNil and:[m isBlock not]) ifTrue:[
+                    m setEnable:indexOrName to:aBoolean
+                ]
+            ]
+        ]
+    ]
+! !
+
+!MenuView methodsFor:'accessing-items'!
+
+accelerators:collectionOfShortKeys
+    "set the accelerator keys collection.
+     You should pass translated symbolic keys - the menu will automatically
+     show the untranslated original key sequences."
+
+    shortKeys := collectionOfShortKeys copy.
+    maxShortKeyStringLen := nil.
+    shown ifTrue:[
+	self resize
+    ] ifFalse:[
+	needResize := true
+    ].
+
+    "Created: 28.2.1996 / 17:15:31 / cg"
+    "Modified: 30.4.1996 / 15:55:14 / cg"
+!
+
+actionAt:indexOrName
+    "return an individual action"
+
+    |i|
+
+    i := self indexOf:indexOrName.
+    (actions notNil and:[i ~~ 0]) ifTrue:[^ actions at:i ifAbsent:nil].
+    ^ nil
+
+    "Created: 24.3.1996 / 17:17:22 / cg"
+!
+
+actionAt:indexOrName put:aBlock
+    "set an individual action"
+
+    |i|
+
+    i := self indexOf:indexOrName.
+    i ~~ 0 ifTrue:[
+	actions isNil ifTrue:[
+	    actions := OrderedCollection new.
+	].
+	i > actions size ifTrue:[
+	    actions grow:i
+	].
+	actions at:i put:aBlock
+    ]
+
+    "Created: 24.3.1996 / 17:18:15 / cg"
+!
+
+actions
+    ^ actions 
+!
+
+actions:aCollectionOfActionBlocks
+    "set all actions"
+
+    actions := aCollectionOfActionBlocks
+
+    "Created: 5.7.1996 / 11:33:09 / cg"
+!
+
+addItemList:list after:itemNameOrSelector
+    self addItemList:list resources:nil after:itemNameOrSelector
+!
+
+addItemList:list resources:resources after:itemNameOrSelector
+    self 
+        addLabels:(list collect:[:row | row at:1])
+        selectors:(list collect:[:row | row at:2 ifAbsent:nil])
+        accelerators:(list collect:[:row | row at:3 ifAbsent:nil])
+        resources:resources
+        after:itemNameOrSelector
+!
+
+addLabel:aLabel selector:aSelector
+    "add another label/selector pair at the end"
+
+    self addLabel:aLabel selector:aSelector after:nil
+
+    "Modified: 28.2.1996 / 17:54:11 / cg"
+!
+
+addLabel:aLabel selector:aSelector after:aLabelOrSelectorOrNumber 
+    "insert another label/selector pair at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    self 
+	addLabels:(Array with:aLabel)
+	selectors:(Array with:aSelector)
+	after:aLabelOrSelectorOrNumber
+
+    "
+     |v1 v2 v3 v4|
+
+     v1 := CodeView new open.
+
+     v2 := CodeView new open.
+     v2 middleButtonMenu:
+	(v2 editMenu addLabel:'new entry' selector:#foo after:#pasteSelection; yourself).
+
+     v3 := CodeView new open.
+     v3 middleButtonMenu:
+	(v3 editMenu addLabel:'new entry' selector:#foo after:#others; yourself).
+
+     v4 := CodeView new open.
+     v4 middleButtonMenu:
+	(v4 editMenu addLabel:'new entry' selector:#foo after:1; yourself).
+    "
+
+    "Modified: 28.2.1996 / 18:04:35 / cg"
+!
+
+addLabel:aLabel selector:aSelector arg:anArg
+    "add another label/selector/argument trio.
+     OBSOLETE"
+
+    |idx|
+
+    idx := list size + 1.
+    self addLabel:aLabel selector:aSelector.
+    args at:idx put:anArg
+
+    "Modified: 28.2.1996 / 18:08:39 / cg"
+!
+
+addLabel:aLabel selector:aSelector before:aLabelOrSelectorOrNumber 
+    "insert another label/selector pair at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    self 
+	addLabels:(Array with:aLabel)
+	selectors:(Array with:aSelector)
+	before:aLabelOrSelectorOrNumber
+
+    "
+     |v1 v2 v3 v4 v5|
+
+     v1 := CodeView new open.
+
+     v2 := CodeView new open.
+     v2 middleButtonMenu:
+	(v2 editMenu addLabel:'new entry' selector:#foo before:'paste'; yourself).
+
+     v3 := CodeView new open.
+     v3 middleButtonMenu:
+	(v3 editMenu addLabel:'new entry' selector:#foo before:#pasteOrReplace; yourself).
+
+     v4 := CodeView new open.
+     v4 middleButtonMenu:
+	(v4 editMenu addLabel:'new entry' selector:#foo before:#again; yourself).
+
+     v5 := CodeView new open.
+     v5 middleButtonMenu:
+	(v5 editMenu addLabel:'new entry' selector:#foo before:1; yourself).
+
+     Notice: v2 above is an example on how NOT to do it - it will not work with nationalized menus
+    "
+
+    "Modified: 28.2.1996 / 18:04:00 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors
+    "add more labels and selectors at the END"
+
+    self addLabels:moreLabels selectors:moreSelectors after:nil
+
+    "Modified: 28.2.1996 / 17:46:50 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors accelerators:shorties
+    "add more labels and selectors at the END"
+
+    self addLabels:moreLabels selectors:moreSelectors accelerators:shorties after:nil
+
+    "Modified: 28.2.1996 / 17:46:50 / cg"
+    "Created: 28.2.1996 / 17:47:17 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors accelerators:shorties after:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the END.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    |idx|
+
+    aLabelOrSelectorOrNumber isNil ifTrue:[
+	idx := list size + 1
+    ] ifFalse:[
+	idx := (self indexOf:aLabelOrSelectorOrNumber) + 1.
+	idx == 1 ifTrue:[
+	    idx := list size + 1
+	]
+    ].
+
+    ^ self 
+	addLabels:moreLabels 
+	selectors:moreSelectors 
+	accelerators:shorties
+	before:idx
+
+    "Created: 28.2.1996 / 17:48:24 / cg"
+    "Modified: 4.3.1996 / 23:26:02 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors accelerators:shorties before:aLabelOrSelectorOrNumber 
+    self 
+        addLabels:moreLabels
+        selectors:moreSelectors
+        accelerators:shorties
+        resources:nil
+        before:aLabelOrSelectorOrNumber
+!
+
+addLabels:moreLabels selectors:moreSelectors accelerators:shorties resources:resources after:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the END.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    |idx|
+
+    aLabelOrSelectorOrNumber isNil ifTrue:[
+        idx := list size + 1
+    ] ifFalse:[
+        idx := (self indexOf:aLabelOrSelectorOrNumber) + 1.
+        idx == 1 ifTrue:[
+            idx := list size + 1
+        ]
+    ].
+
+    ^ self 
+        addLabels:moreLabels 
+        selectors:moreSelectors 
+        accelerators:shorties
+        resources:resources
+        before:idx
+
+    "Created: 28.2.1996 / 17:48:24 / cg"
+    "Modified: 4.3.1996 / 23:26:02 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors accelerators:shorties resources:resources before:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber. 
+     If such an item is not found, insert the new items at the beginning.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    |idx oldSize
+     i     "{ Class: SmallInteger }" 
+     nMore "{ Class: SmallInteger }"|
+
+    list isNil ifTrue:[
+        list := OrderedCollection new.
+"/        ^ self addLabels:moreLabels selectors:moreSelectors resources:resources
+    ].
+    "
+     be user friendly - allow both label or selector
+     to be passed
+    "
+    aLabelOrSelectorOrNumber isNil ifTrue:[
+        idx := 1
+    ] ifFalse:[
+        idx := self indexOf:aLabelOrSelectorOrNumber.
+        (idx between:2 and:(list size + 1)) ifFalse:[
+            "add to beginning"
+            idx := 1
+        ]
+    ].
+
+    nMore := moreLabels size.
+    self assert:moreSelectors size == nMore.
+
+    oldSize := list size.
+
+    list := list asOrderedCollection.
+    i := idx.
+    moreLabels do:[:aLabel |
+        |l|
+
+        resources notNil 
+            ifTrue:[l := resources string:aLabel]
+            ifFalse:[l := aLabel].
+
+        "/ remove ampersands
+        l := MenuPanel
+                processAmpersandCharactersFor:l 
+                withAccessCharacterPosition:nil.
+
+        "/ wrong: needed for accelerators.
+        "/ l := self labelWithoutDoubleAmpersands:l.
+        list add:l beforeIndex:i. i := i + 1.
+    ].
+
+    selectors := (selectors ? #()) asOrderedCollection.
+    i := idx.
+    moreSelectors do:[:sel |
+        selectors add:sel beforeIndex:i. i := i + 1.
+    ].
+
+    enableFlags := (enableFlags ? #()) asOrderedCollection.
+    i := idx.
+    nMore timesRepeat:[
+        enableFlags add:true beforeIndex:i. i := i + 1.
+    ].
+
+    subMenus notNil ifTrue:[
+        subMenus := subMenus asOrderedCollection.
+        i := idx.
+        i >= subMenus size ifTrue:[
+            subMenus grow:i-1
+        ].
+        nMore timesRepeat:[
+            subMenus add:nil beforeIndex:i. i := i + 1.
+        ].
+    ].
+    args notNil ifTrue:[
+        args := args asOrderedCollection.
+        i := idx.
+        i >= args size ifTrue:[
+            args grow:i-1
+        ].
+        nMore timesRepeat:[
+            args add:nil beforeIndex:i. i := i + 1.
+        ]
+    ].
+    actions notNil ifTrue:[
+        actions := actions asOrderedCollection.
+        i := idx.
+        i >= actions size ifTrue:[
+            actions grow:i-1
+        ].
+        nMore timesRepeat:[
+            actions add:nil beforeIndex:i. i := i + 1.
+        ]
+    ].
+    onOffFlags notNil ifTrue:[
+        onOffFlags := onOffFlags asOrderedCollection.
+        i := idx.
+        i >= onOffFlags size ifTrue:[
+            onOffFlags grow:i-1
+        ].
+        nMore timesRepeat:[
+            onOffFlags add:nil beforeIndex:i. i := i + 1.
+        ]
+    ].
+    shortKeys isNil ifTrue:[
+        shortKeys := OrderedCollection new:oldSize.
+        shortKeys grow:oldSize
+    ].
+    shortKeys := shortKeys asOrderedCollection.
+    i := idx.
+    shorties isNil ifTrue:[
+        nMore timesRepeat:[
+            shortKeys add:nil beforeIndex:i. i := i + 1.
+        ]
+    ] ifFalse:[
+        maxShortKeyStringLen := nil.
+        shorties do:[:sel |
+            shortKeys add:sel beforeIndex:i. i := i + 1.
+        ]
+    ].
+
+    shown ifTrue:[
+        self resize
+    ] ifFalse:[
+        needResize := true
+    ].
+
+    "
+     |v1 v2 v3 v4 v5 m|
+
+
+     v1 := CodeView new open.
+     v1 contents:'original menu'.
+
+     v2 := CodeView new open.
+     v2 contents:'before copy'.
+     m := v2 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:#copySelection 
+        accelerators:#(Copy Cut Paste).
+     v2 middleButtonMenu:m.
+
+     v3 := CodeView new open.
+     v3 contents:'before again '.
+     m := v3 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:#again.
+     v3 middleButtonMenu:m.
+
+     v4 := CodeView new open.
+     v4 contents:'at beginning '.
+     m := v4 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2' '-') 
+        selectors:#(foo bar nil) 
+        before:1.
+     v4 middleButtonMenu:m.
+
+     v5 := CodeView new open.
+     v5 contents:'at end '.
+     m := v5 editMenu.
+     m
+        addLabels:#('-' 'new entry1' 'new entry2') 
+        selectors:#(nil foo bar).
+     v5 middleButtonMenu:m.
+    "
+
+    "Created: / 28-02-1996 / 17:49:44 / cg"
+    "Modified: / 15-02-2012 / 18:54:54 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors after:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the END.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    ^ self 
+	addLabels:moreLabels 
+	selectors:moreSelectors 
+	accelerators:nil
+	after:aLabelOrSelectorOrNumber
+
+    "Modified: 28.2.1996 / 17:47:52 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors before:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the beginning.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    self 
+	addLabels:moreLabels 
+	selectors:moreSelectors 
+	accelerators:nil 
+	before:aLabelOrSelectorOrNumber 
+
+    "
+     |v1 v2 v3 v4 m|
+
+
+     v1 := CodeView new open.
+
+     v2 := CodeView new open.
+     m := v2 editMenu.
+     m
+	addLabels:#('new entry1' 'new entry2') 
+	selectors:#(foo bar) 
+	before:'paste'.
+     v2 middleButtonMenu:m.
+
+     v3 := CodeView new open.
+     m := v3 editMenu.
+     m
+	addLabels:#('new entry1' 'new entry2') 
+	selectors:#(foo bar) 
+	before:#again.
+     v3 middleButtonMenu:m.
+
+     v4 := CodeView new open.
+     m := v4 editMenu.
+     m
+	addLabels:#('new entry1' 'new entry2') 
+	selectors:#(foo bar) 
+	before:1.
+     v4 middleButtonMenu:m.
+    "
+
+    "Modified: 28.2.1996 / 17:49:30 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors resources:resources
+    "add more labels and selectors at the END"
+
+    self addLabels:moreLabels selectors:moreSelectors resources:resources after:nil
+
+    "Modified: 28.2.1996 / 17:46:50 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors resources:resources accelerators:shorties
+    "add more labels and selectors at the END"
+
+    self addLabels:moreLabels selectors:moreSelectors accelerators:shorties resources:resources after:nil
+
+    "Modified: 28.2.1996 / 17:46:50 / cg"
+    "Created: 28.2.1996 / 17:47:17 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors resources:resources after:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the END.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    ^ self 
+        addLabels:moreLabels 
+        selectors:moreSelectors 
+        accelerators:nil
+        resources:resources
+        after:aLabelOrSelectorOrNumber
+
+    "Modified: 28.2.1996 / 17:47:52 / cg"
+!
+
+addLabels:moreLabels selectors:moreSelectors resources:resources before:aLabelOrSelectorOrNumber 
+    "insert more labels/selectors at some place.
+     Being very friendly here, allowing label-string, selector or numeric
+     index for the argument aLabelOrSelectorOrNumber.
+     If such an item is not found, insert the new items at the beginning.
+
+     To be independent of the entries label, we recommend you use the selector
+     as index; in systems which translate strings for national variants,
+     this makes your code easier to maintain."
+
+    self 
+        addLabels:moreLabels 
+        selectors:moreSelectors 
+        accelerators:nil 
+        resources:resources
+        before:aLabelOrSelectorOrNumber 
+
+    "
+     |v1 v2 v3 v4 m|
+
+
+     v1 := CodeView new open.
+
+     v2 := CodeView new open.
+     m := v2 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:'paste'.
+     v2 middleButtonMenu:m.
+
+     v3 := CodeView new open.
+     m := v3 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:#again.
+     v3 middleButtonMenu:m.
+
+     v4 := CodeView new open.
+     m := v4 editMenu.
+     m
+        addLabels:#('new entry1' 'new entry2') 
+        selectors:#(foo bar) 
+        before:1.
+     v4 middleButtonMenu:m.
+    "
+
+    "Modified: 28.2.1996 / 17:49:30 / cg"
+!
+
+addSeparatingLine
+    "add a separating line at the END"
+
+    self addLabel:'-' selector:nil
+
+    "Modified: 28.2.1996 / 17:50:08 / cg"
+!
+
+addSeparatingLineAfter:aLabelOrSelectorOrNumber
+    "add a separating line after an item"
+
+    self addLabel:'-' selector:nil after:aLabelOrSelectorOrNumber
+
+    "Modified: 28.2.1996 / 17:50:14 / cg"
+!
+
+args
+    "return the argument array"
+
+    ^ args
+!
+
+args:anArray
+    "set the argument array"
+
+    args := anArray copy
+
+    "Modified: 30.4.1996 / 15:55:03 / cg"
+!
+
+argsAt:indexOrName put:something
+    "set an individual selector"
+
+    |i|
+
+    i := self indexOf:indexOrName.
+    i ~~ 0 ifTrue:[args at:i put:something]
+!
+
+checkFlags 
+    "return an array filled with the check-mark flags.
+     Non check-menu items have a nil entry in this array."
+
+    ^ onOffFlags
+!
+
+checkFlags:aCollectionOfBooleansOrNils
+    onOffFlags := aCollectionOfBooleansOrNils
+!
+
+checkToggleAt:indexOrName
+    "return a check-toggles boolean state.
+     If the item is not a check-item, return nil."
+
+    |index|
+
+    index := self indexOf:indexOrName.
+    index == 0 ifTrue:[^ nil].
+    onOffFlags isNil ifTrue:[^ nil].
+    index > onOffFlags size ifTrue:[^ nil].
+    ^ onOffFlags at:index
+
+    "Modified: 22.4.1996 / 10:51:54 / cg"
+!
+
+checkToggleAt:indexOrName put:aBoolean
+    "set/clear a check-toggle"
+
+    |index|
+
+    index := self indexOf:indexOrName.
+    index == 0 ifTrue:[
+"/        'no item: ' print. indexOrName printNL.
+	^ self
+    ].
+
+    onOffFlags isNil ifTrue:[
+	onOffFlags := Array new:(list size)
+    ].
+    onOffFlags at:index put:aBoolean.
+    shown ifTrue:[
+	self redrawLine:index
+    ]
+
+    "Modified: 6.3.1996 / 16:31:43 / cg"
+!
+
+hasItems
+    "return true, if I have items"
+
+    ^ list notEmptyOrNil
+!
+
+indexOf:indexOrName
+    "return the index of the label named:aName or , if its a symbol
+     the index in the selector list. 
+     If indexOrName is not a valid item, return 0."
+
+    indexOrName isSymbol ifTrue:[
+	^ selectors indexOf:indexOrName
+    ].
+    indexOrName isString ifTrue:[
+	^ list indexOf:indexOrName
+    ].
+    indexOrName isNil ifTrue:[^ 0].
+
+    (indexOrName respondsTo:#string) ifTrue:[
+	^ list indexOf:indexOrName asString
+    ].
+    ^ indexOrName
+
+    "Modified: 27.4.1996 / 15:25:16 / cg"
+!
+
+labelAt:indexOrName put:aString
+    "change the label at index to be aString"
+
+    |i nItems|
+
+    i := self indexOf:indexOrName.
+    i == 0 ifTrue:[^ self].
+    list at:i put:aString.
+
+    "create onOff flags, if this label has a check-mark"
+    (self isCheckItem:aString) ifTrue:[
+	nItems := list size.
+	onOffFlags isNil ifTrue:[
+	    onOffFlags := Array new:nItems
+	] ifFalse:[
+	    [onOffFlags size < nItems] whileTrue:[
+		onOffFlags := onOffFlags copyWith:nil 
+	    ]
+	].
+	onOffFlags at:i put:false
+    ].
+    shown ifTrue:[
+	self resize
+    ] ifFalse:[
+	needResize := true
+    ]
+!
+
+labels
+    "return the menu-labels"
+
+    ^ list
+!
+
+labels:text
+    "set the labels to the argument, text"
+
+    |l nItems|
+
+    (text isString) ifTrue:[
+        l := text asStringCollection
+    ] ifFalse:[
+        l := text copy
+    ].
+    "/ wrong: needed for accelerators.
+    "/ l := l collect:[:s | self labelWithoutDoubleAmpersands:s].
+"/    self list:l 
+    self setList:l expandTabs:false.
+    nItems := list size.
+    enableFlags := Array new:nItems withAll:true.
+    onOffFlags := Array new:nItems.
+
+    text notNil ifTrue:[
+        text keysAndValuesDo:[:index :line |
+            (self isCheckItem:line) ifTrue:[
+                onOffFlags at:index put:false
+            ].
+        ].
+    ].
+    shown ifTrue:[
+        self resize
+    ] ifFalse:[
+        needResize := true
+    ]
+
+    "Modified: / 06-10-2011 / 16:45:57 / cg"
+!
+
+labels:text selectors:selArray accelerators:shorties args:argArray receiver:anObject
+    "set all relevant stuff"
+
+    self labels:text selectors:selArray args:argArray receiver:anObject.
+    shortKeys := shorties copy.
+
+    "Created: 28.2.1996 / 18:56:38 / cg"
+    "Modified: 30.4.1996 / 15:54:48 / cg"
+!
+
+labels:text selectors:selArray args:argArray receiver:anObject
+    "set all relevant stuff"
+
+    self labels:text.
+    selArray isSymbol ifTrue:[
+	selectors := Array new:(text size) withAll:selArray
+    ] ifFalse:[
+	selectors := selArray copy.
+    ].
+    args := argArray copy.
+    receiver := anObject
+
+    "Modified: 14.5.1996 / 15:30:10 / cg"
+!
+
+menuPerformer:someone
+    "set the menuPerformer of the message.
+     This also sets the menuPerformer in all subMenus."
+
+    menuPerformer := someone.
+    subMenus notNil ifTrue:[
+        subMenus do:[:aMenu |
+            (aMenu notNil and:[aMenu isBlock not]) ifTrue:[
+                aMenu menuPerformer:someone
+            ]
+        ]
+    ]
+
+    "Created: 21.1.1997 / 15:42:00 / cg"
+!
+
+receiver
+    "return the receiver of the message"
+
+    ^ receiver
+!
+
+receiver:anObject
+    "set the receiver of the message.
+     This also sets the receiver in all subMenus."
+
+    receiver := anObject.
+    subMenus notNil ifTrue:[
+        subMenus do:[:aMenu |
+            (aMenu notNil and:[aMenu isBlock not]) ifTrue:[
+                aMenu receiver:anObject
+            ]
+        ]
+    ]
+
+    "Modified: 21.1.1997 / 15:41:32 / cg"
+!
+
+remove:indexOrName
+    "remove the label at index"
+
+    |i|
+
+    i := self indexOf:indexOrName.
+    i == 0 ifTrue:[^ self].
+    list := list asOrderedCollection removeIndex:i.
+    selectors := selectors asOrderedCollection removeIndex:i.
+    enableFlags notNil ifTrue:[ enableFlags := enableFlags asOrderedCollection removeIndex:i ].
+    subMenus notNil ifTrue:[
+        subMenus := subMenus asOrderedCollection removeIndex:i.
+    ].
+    shortKeys notNil ifTrue:[
+        shortKeys := shortKeys asOrderedCollection removeIndex:i.
+        maxShortKeyStringLen := nil.
+    ].
+    shown ifTrue:[
+        self resize
+    ] ifFalse:[
+        needResize := true
+    ]
+
+    "Modified: 28.2.1996 / 18:27:57 / cg"
+!
+
+selectorAt:indexOrName
+    "return an individual selector"
+
+    |i|
+
+    i := self indexOf:indexOrName.
+    i ~~ 0 ifTrue:[^ selectors at:i].
+    ^ nil
+!
+
+selectorAt:indexOrName put:aSelector
+    "set an individual selector"
+
+    |i|
+
+    i := self indexOf:indexOrName.
+    i ~~ 0 ifTrue:[selectors at:i put:aSelector]
+!
+
+selectors
+    "return the selector array"
+
+    ^ selectors
+!
+
+selectors:anArray
+    "set the selector array"
+
+    selectors := anArray copy
+
+    "Modified: 30.4.1996 / 15:54:07 / cg"
+!
+
+someMenuItemLabeled:aLabel
+    "find a menu item.
+     Currently, in ST/X, instances of MenuItem are only created as dummy"
+
+    |idx|
+
+    idx := self indexOf:aLabel.
+    idx ~~ 0 ifTrue:[
+	^ MenuItem new menu:self index:idx
+    ].
+    subMenus notNil ifTrue:[
+	subMenus do:[:aMenu |
+	    |item|
+
+	    aMenu notNil ifTrue:[
+		(item := aMenu someMenuItemLabeled:aLabel) notNil ifTrue:[
+		    ^ item
+		]
+	    ]
+	].
+    ].
+    ^ nil
+! !
+
+!MenuView methodsFor:'accessing-look'!
+
+font:aFont
+    "adjust size for new font.
+     CAVEAT: with the addition of Text objects,
+             this method is going to be obsoleted by a textStyle
+             method, which allows specific control over
+             normalFont/boldFont/italicFont parameters."
+
+    super font:aFont.
+    preferredExtent := nil.
+    shown ifTrue:[
+        self resize
+    ] ifFalse:[
+        needResize := true
+    ]
+
+    "Modified: 22.5.1996 / 12:36:37 / cg"
+! !
+
+!MenuView methodsFor:'accessing-misc'!
+
+masterView
+    "return the popup-masterview I am contained in."
+
+    ^ masterView
+!
+
+masterView:aPopUpView
+    "set the popup-masterview I am contained in."
+
+    masterView := aPopUpView
+!
+
+selection:index
+    "set the selection"
+
+    super selection:(self validateSelection:index)
+
+    "Modified: / 29-11-2010 / 19:53:36 / cg"
+!
+
+setSelection:index
+    super setSelection:(self validateSelection:index)
+
+    "Created: / 25-05-1996 / 12:27:33 / cg"
+    "Modified: / 29-11-2010 / 19:53:31 / cg"
+!
+
+sizeFixed:aBoolean
+    sizeFixed := aBoolean
+
+    "Created: 9.2.1996 / 01:12:40 / cg"
+!
+
+superMenu
+    "ret the menu I am contained in 
+     - need this to hide main menus when a submenu performed its action"
+
+    ^ superMenu
+!
+
+superMenu:aMenu
+    "set the menu I am contained in 
+     - need this to hide main menus when a submenu performed its action"
+
+    superMenu := aMenu
+!
+
+validateSelection:index
+    |sel line|
+
+    sel := index.
+    sel notNil ifTrue:[
+        line := self listAt:index.
+        (self isGraphicItem:line) ifTrue:[
+            "
+             not really selectable, but a separating line
+            "
+            sel := nil
+        ]
+    ].
+    ^ sel
+
+    "Created: / 29-11-2010 / 18:51:24 / cg"
+! !
+
+!MenuView methodsFor:'accessing-submenus'!
+
+subMenuAt:indexOrName
+    "return a submenu, or nil"
+
+    |i|
+
+    subMenus isNil ifTrue:[^ nil].
+    i := self indexOf:indexOrName.
+    i == 0 ifTrue:[^ nil].
+    ^ subMenus at:i
+!
+
+subMenuAt:indexOrName put:aPopUpMenu
+    "define a submenu"
+
+    |i newSubMenus|
+
+    i := self indexOf:indexOrName.
+    i == 0 ifTrue:[
+        'MenuView [warning]: no submenu with for index: ' infoPrint. indexOrName infoPrintCR.
+        ^ nil
+    ].
+
+    subMenus size < i ifTrue:[
+        newSubMenus := Array new:(list size max:i).
+        subMenus notNil ifTrue:[
+            newSubMenus replaceFrom:1 with:subMenus.
+        ].
+        subMenus := newSubMenus.
+        shown ifTrue:[
+            self resize
+        ] ifFalse:[
+            needResize := true
+        ]
+    ].
+
+    subMenus at:i put:aPopUpMenu.
+    aPopUpMenu notNil ifTrue:[
+        aPopUpMenu isBlock ifFalse:[
+            aPopUpMenu device:self graphicsDevice.
+            (receiver notNil and:[aPopUpMenu receiver isNil]) ifTrue:[
+                aPopUpMenu receiver:receiver
+            ]
+        ].
+    ].
+
+    "Modified: 17.1.1997 / 01:03:55 / cg"
+!
+
+subMenuShown
+    "return the currently visible submenu - or nil if there is none"
+
+    ^ subMenuShown
+! !
+
+!MenuView methodsFor:'disabled scrolling'!
+
+makeSelectionVisible
+    ^ self
+! !
+
+!MenuView methodsFor:'drawing'!
+
+drawAccelerator:aSymbolicKey inVisibleLine:visLineNr with:fg and:bg
+    "draw the accelerator at the right."
+
+    |s x l isSubMenuEntry|
+
+    "/ this is somewhat complicated: we have the symbolic key at hand,
+    "/ but want to show the untranslated (inverse keyBoardMapped) key & modifier
+    "/
+    s := self graphicsDevice shortKeyStringFor:aSymbolicKey.
+    s isNil ifTrue:[^ self].
+
+    l := self visibleLineToAbsoluteLine:visLineNr.
+
+    disabledEtchedFgColor notNil ifTrue:[
+        (self isInSelection:l) ifFalse:[
+            (self isEnabled:l) ifFalse:[
+                s := s asText emphasisAllAdd:(#etchColor -> disabledEtchedFgColor)
+            ]
+        ]
+    ].
+    isSubMenuEntry := (subMenus notNil and:[(subMenus at:l) notNil]).
+
+    isSubMenuEntry ifFalse:[
+        "/ this aligns them along their left
+        x := width - textStartLeft - self shortKeyInset.
+    ] ifTrue:[
+        "/ this aligns them at the right
+        x := width - leftMargin - (gc font widthOf:s).
+        x := x - 16    "/ should query for the arrow size here ...
+    ].
+
+    hilightStyle == #openwin ifTrue:[
+        x := x - 2            "/ inset of rounded rectangle
+    ].
+
+    self drawLine:s fromX:x inVisible:visLineNr with:fg and:bg
+
+    "Created: / 28-02-1996 / 18:48:05 / cg"
+    "Modified: / 08-08-2006 / 15:47:11 / cg"
+!
+
+drawCheckLine:line inVisibleLine:visLineNr with:fg and:bg
+    "draw an on/off-mark (or the space for it).
+     Supported checkmark types:
+        \c  simple mark; space if off
+        \b  box mark
+        \t  thumbsUp/thumbsDown mark
+    "
+
+    |w h y x l check xR yB form markIndex i2 markType found|
+
+    l := self visibleLineToListLine:visLineNr.
+    onOffFlags isNil ifTrue:[^ false]. "/ not a check-item line
+    check := onOffFlags at:l ifAbsent:nil.
+    check isNil ifTrue:[^ false]. "/ not a check-item line
+    check := check value.
+
+    markIndex := 1.
+    found := false.
+    [markIndex ~~ 0 and:[found not]] whileTrue:[
+        markIndex := line indexOf:$\ startingAt:markIndex.
+        markIndex ~~ 0 ifTrue:[
+            i2 := markIndex + 1.
+            found := 'cbt' includes:(line at:i2).
+            found ifFalse:[
+                markIndex := i2 + 1.
+            ].
+        ].
+    ].
+    markIndex == 0ifTrue:[
+        ^ super drawVisibleLine:visLineNr from:1 to:line size with:fg and:bg.
+    ].
+
+    markType := line at:i2.
+
+    x := (self xOfCol:markIndex inVisibleLine:visLineNr) - viewOrigin x.
+    y := (self yOfVisibleLine:visLineNr) - (lineSpacing//2).
+
+    self paint:bg.
+    self fillRectangleX:margin y:y width:(width-(margin*2)) height:fontHeight.
+    markIndex ~~ 1 ifTrue:[
+        super drawVisibleLine:visLineNr from:1 to:(markIndex-1) with:fg and:bg.
+    ].
+
+    (markType == $c) ifTrue:[
+        w := gc font widthOf:'V'.
+        check ifTrue:[
+            form := checkOnImage.
+        ] ifFalse:[
+            form := checkOffImage.
+        ]
+    ] ifFalse:[
+        (markType == $b) ifTrue:[
+            w := gc font maxWidth. "/ font widthOf:'   '.
+        ] ifFalse:[
+            (markType == $t) ifTrue:[
+                check ifTrue:[form := Cursor thumbsUp sourceForm]
+                      ifFalse:[form := Cursor thumbsDown sourceForm]
+            ]
+        ]
+    ].
+
+    form notNil ifTrue:[
+        w := form width.
+    ].
+
+    self drawLine:(line copyFrom:markIndex+2) fromX:x+w inVisible:visLineNr with:fg and:bg.
+    self paint:(check ifTrue:[checkColor == bg ifTrue:[fg] ifFalse:[checkColor]] ifFalse:[fg]).
+
+    h := gc font ascent.
+    y := y + (gc font height - h // 2).
+    yB := y + h - 1.
+
+    form notNil ifTrue:[
+        self displayForm:form x:x y:y
+    ] ifFalse:[
+        (markType == $c) ifTrue:[
+            check ifTrue:[
+                xR := x + (w // 3).
+                self displayLineFromX:x y:(y + (h // 2)) toX:xR y:yB.
+                self displayLineFromX:xR y:yB toX:(x + w - 1) y:y
+            ]
+        ] ifFalse:[
+            (markType == $b) ifTrue:[
+                check ifTrue:[
+                    xR := x + w - 2.
+                    self displayLineFromX:x y:y toX:xR y:yB.
+                    self displayLineFromX:xR y:y toX:x y:yB.
+                ].
+                self paint:fg.
+                self displayRectangleX:x y:y width:h height:h.
+            ]
+        ].
+    ].
+    ^ true
+
+    "Modified: / 6.5.1997 / 18:04:38 / stefan"
+    "Modified: / 17.8.1998 / 10:25:01 / cg"
+!
+
+drawVisibleLine:visLineNr with:fg and:bg
+    |lNr lineString xLatedLine isSpecial key|
+
+    lNr := self visibleLineToListLine:visLineNr.
+    lineString := self visibleAt:visLineNr.
+
+    isSpecial := lineString notNil and:[lineString asString string includes:$\].
+    isSpecial ifFalse:[
+        "
+         a normal entry
+        "
+        super drawVisibleLine:visLineNr with:fg and:bg
+    ] ifTrue:[
+        "
+         some speciality in this line; try checkMark
+        "
+        ((self isCheckItem:lineString) 
+        and:[self drawCheckLine:lineString inVisibleLine:visLineNr with:fg and:bg])
+        ifFalse:[
+            xLatedLine := lineString replString:'\\' withString:'\'.
+            super drawLine:xLatedLine inVisible:visLineNr with:fg and:bg.
+        ].
+    ].
+
+    "/
+    "/ is there a shortKey ?
+    "/
+    ((ShowAcceleratorKeys ~~ false)
+    and:[shortKeys notNil 
+    and:[(key := shortKeys at:lNr ifAbsent:nil) notNil]]) ifTrue:[
+        self drawAccelerator:key inVisibleLine:visLineNr with:fg and:bg
+    ]
+
+    "Modified: / 31.5.1999 / 12:35:48 / cg"
+!
+
+drawVisibleLineSelected:visLineNr with:fg and:bg
+    "redraw a single line as selected."
+
+    |listLine
+     y  "{ Class: SmallInteger }" 
+     y2 "{ Class: SmallInteger }" 
+     r2 rI lI radius topLeftColor botRightColor |
+
+
+    hilightStyle ~~ #openwin ifTrue:[
+	^ super drawVisibleLineSelected:visLineNr with:fg and:bg.
+    ].
+
+    "
+     openwin draws selections in a menu as (edged) rounded rectangles
+    "
+    listLine := self visibleLineToListLine:visLineNr.
+    listLine notNil ifTrue:[
+
+	self drawVisibleLine:visLineNr with:fg and:bg.
+
+	y := (self yOfVisibleLine:visLineNr)  - (lineSpacing//2).
+	y2 := y + fontHeight - 1.
+	r2 := fontHeight.
+	radius := r2 // 2.
+	rI := 0. "/ 2.
+	lI := 1. "/ 2.
+
+	"
+	 refill with normal bg, where arcs will be drawn below
+	"
+	self paint:bgColor.
+	self fillRectangleX:margin y:y width:radius height:fontHeight.
+	self fillRectangleX:width-radius-margin y:y width:radius height:fontHeight.
+	"
+	 fill the arcs
+	"
+	self paint:hilightBgColor.
+	self fillArcX:margin+lI            y:y width:r2 height:r2+rI from:90 angle:180. 
+	self fillArcX:width-r2-rI-margin-1 y:y width:r2 height:r2+rI from:270 angle:180. 
+
+	"
+	 a highlight-border around
+	"
+	hilightFrameColor notNil ifTrue:[
+	    self paint:hilightFrameColor.
+	    self displayLineFromX:radius+2 y:y toX:width-radius-3 y:y.
+	    self displayLineFromX:radius+2 y:y2 toX:width-radius-3 y:y2.
+
+	    self displayArcX:margin+lI y:y width:r2 height:r2+rI from:90 angle:180. 
+	    self displayArcX:width-r2-rI-margin-1 y:y width:r2 height:r2+rI from:270 angle:180. 
+	    ^ self
+	].
+
+	"
+	 an edge around
+	"
+	(hilightLevel ~~ 0) ifTrue:[
+	    (hilightLevel < 0) ifTrue:[
+		topLeftColor := shadowColor.
+		botRightColor := lightColor.
+	    ] ifFalse:[
+		topLeftColor := lightColor.
+		botRightColor := shadowColor.
+	    ].
+
+	    self paint:topLeftColor.
+	    self displayLineFromX:radius+2 y:y toX:width-radius-3 y:y.
+
+	    self displayArcX:margin+lI y:y width:r2 height:r2+rI-1 from:90 angle:125. 
+	    self displayArcX:width-r2-rI-margin-1 y:y width:r2 height:r2+rI-1 from:270+125 angle:55. 
+
+	    self paint:botRightColor.
+
+	    self displayLineFromX:radius+2 y:y2 toX:width-radius-3 y:y2.
+	    self displayArcX:margin+lI y:y width:r2 height:r2+rI-1 from:90+125 angle:55. 
+	    self displayArcX:width-r2-rI-margin-1 y:y width:r2 height:r2+rI-1 from:270 angle:125. 
+	].
+	^ self
+    ].
+    ^ super drawVisibleLine:visLineNr with:fg and:bg
+
+    "Created: 28.2.1996 / 18:41:17 / cg"
+    "Modified: 14.10.1997 / 00:05:43 / cg"
+! !
+
+!MenuView methodsFor:'event handling'!
+
+buttonMotion:state x:x y:y
+    (self sensor hasButtonMotionEventFor:self) ifFalse:[
+        self setSelectionForX:x y:y now:(UserPreferences current delayedMenuShowAndHide) not.
+    ]
+
+    "Modified: / 29-11-2010 / 19:48:55 / cg"
+!
+
+buttonPress:button x:x y:y
+    self setSelectionForX:x y:y now:true.
+
+    "Modified: / 29-11-2010 / 19:38:36 / cg"
+!
+
+buttonRelease:button x:x y:y
+    |hide|
+
+    self cancelDelayedSubmenuHideOrShowAction.
+
+    subMenuShown notNil ifTrue:[
+        ^ self
+    ].
+
+    (x >= 0 
+    and:[x < width
+    and:[y >= 0 
+    and:[y < height]]]) ifTrue:[
+        superMenu notNil ifTrue:[
+            superMenu submenuTriggered.
+
+            shown ifFalse:[
+                superView notNil ifTrue:[
+                    superView shown ifTrue:[
+                        superView isPopUpView ifTrue:[
+                            superView hide
+                        ].
+                    ]
+                ]
+            ]
+        ].
+        self performSelectedAction.
+    ].
+
+    "/
+    "/ not within mySelf
+    "/
+
+    superMenu notNil ifTrue:[
+        hide := hideOnRelease.
+        hide ifFalse:[
+            superMenu shown ifFalse:[
+                superView notNil ifTrue:[
+                    superView shown ifTrue:[
+                        hide := true
+                    ]
+                ]
+            ].
+        ].
+        hide ifTrue:[
+            superView hide
+        ].
+    ].
+
+"/    (superView notNil and:[superView isPopUpView]) ifTrue:[
+"/ 'refetch focus' printNL.
+"/        superView regainControl.
+"/        superView getKeyboardFocus.
+"/        superView hide
+"/    ]
+
+    "Modified: / 29-11-2010 / 19:39:42 / cg"
+!
+
+keyPress:aKey x:x y:y
+
+    <resource: #keyboard (#Return #MenuSelect #Escape #CursorRight #CursorLeft)>
+
+    |m|
+
+    self cancelDelayedSubmenuHideOrShowAction.
+    subMenuShown notNil ifTrue:[
+        subMenuShown menuView keyPress:aKey x:0 y:0.
+        ^ self
+    ].
+
+    "
+     Return, space or the (virtual) MenuSelect
+     key trigger a selected entry.
+    "
+    (aKey == #Return
+    or:[aKey == #MenuSelect
+    or:[aKey == Character space]]) ifTrue:[
+        selection notNil ifTrue:[
+            (subMenus notNil and:[(m := subMenus at:selection) notNil]) ifTrue:[
+                self showSubmenu:selection.
+                m isBlock ifFalse:[m hideOnLeave:false].
+            ] ifFalse:[
+                subMenuShown := nil.
+                self buttonRelease:2 x:0 y:0.
+            ]
+        ].
+        ^ self
+    ].
+    aKey == #Escape ifTrue:[
+        masterView notNil ifTrue:[
+            masterView hideSubmenu.
+            masterView hide.
+            ^ self.
+        ].
+        superView hide.
+        ^ self
+    ].
+    aKey == #CursorRight ifTrue:[
+        selection notNil ifTrue:[
+            (subMenus notNil and:[(m := subMenus at:selection) notNil]) ifTrue:[
+                self showSubmenu:selection.
+                m isBlock ifFalse:[m hideOnLeave:false].
+                ^ self
+            ]
+        ].
+    ].
+    aKey == #CursorLeft ifTrue:[
+        masterView notNil ifTrue:[
+            masterView hideSubmenu.
+            masterView regainControl.
+        ].
+        superView hide.
+        ^ self
+    ].
+
+    super keyPress:aKey x:x y:y
+
+    "Modified: / 29-11-2010 / 19:39:31 / cg"
+!
+
+pointerLeave:state
+    subMenuShown notNil ifTrue:[
+        ^ self
+    ].
+"/    self setSelectionForX:-1 y:-1. "force deselect"
+    self setSelection:nil
+"/    superMenu notNil ifTrue:[
+"/        superMenu regainControl.
+"/    ]
+
+    "Modified: 25.5.1996 / 12:27:18 / cg"
+! !
+
+!MenuView methodsFor:'initialization & release'!
+
+create
+    super create.
+    subMenuShown := nil.
+    self resizeIfChanged
+!
+
+destroy
+    "
+     have to destroy the submenus manually here,
+     since they are no real subviews of myself
+    "
+    subMenus notNil ifTrue:[
+	subMenus do:[:m |
+	    m notNil ifTrue:[
+		m destroy
+	    ]
+	].
+	subMenus := nil
+    ].
+    super destroy.
+!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    super fetchDeviceResources.
+
+    checkColor notNil ifTrue:[checkColor := checkColor onDevice:self graphicsDevice].
+    disabledFgColor notNil ifTrue:[disabledFgColor := disabledFgColor onDevice:self graphicsDevice].
+
+    hilightFgColorNoFocus := hilightFgColor.
+    hilightBgColorNoFocus := hilightBgColor.
+
+    "Created: 14.1.1997 / 00:08:55 / cg"
+!
+
+initEvents
+    super initEvents.
+    self enableLeaveEvents.
+    self enableMotionEvents.
+
+    windowGroup notNil ifTrue:[
+        windowGroup sensor compressMotionEvents:true
+    ]
+
+    "Modified: 7.3.1996 / 14:18:09 / cg"
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    |style graphicsDevice|
+
+    super initStyle.
+
+    graphicsDevice := self graphicsDevice.
+    DefaultCheckColor notNil ifTrue:[
+        checkColor := DefaultCheckColor
+    ] ifFalse:[
+        checkColor := fgColor.
+    ].
+    disabledFgColor := DefaultDisabledForegroundColor.
+    disabledEtchedFgColor := DefaultDisabledEtchedForegroundColor.
+
+    DefaultForegroundColor notNil ifTrue:[
+        fgColor := DefaultForegroundColor onDevice:graphicsDevice
+    ].
+    DefaultBackgroundColor notNil ifTrue:[
+        bgColor := DefaultBackgroundColor onDevice:graphicsDevice
+    ].
+
+    DefaultShadowColor notNil ifTrue:[
+        shadowColor := DefaultShadowColor onDevice:graphicsDevice
+    ].
+    DefaultLightColor notNil ifTrue:[
+        lightColor := DefaultLightColor onDevice:graphicsDevice
+    ].
+
+    DefaultHilightLevel notNil ifTrue:[
+        hilightLevel := DefaultHilightLevel
+    ] ifFalse:[
+        hilightLevel := 0.
+    ].
+    "/ hilightStyle := DefaultHilightStyle.
+
+    hilightFrameColor := DefaultHilightFrameColor.
+
+    styleSheet is3D ifTrue:[
+        "some 3D style menu - set hilight defaults to same"
+
+        DefaultHilightForegroundColor notNil ifTrue:[
+            hilightFgColor := DefaultHilightForegroundColor onDevice:graphicsDevice
+        ] ifFalse:[
+            hilightFgColor := fgColor.
+        ].
+        DefaultHilightBackgroundColor notNil ifTrue:[
+            hilightBgColor := DefaultHilightBackgroundColor onDevice:graphicsDevice
+        ] ifFalse:[
+            hilightBgColor := bgColor.
+        ].
+        DefaultLineLevel notNil ifTrue:[
+            lineLevel := DefaultLineLevel
+        ] ifFalse:[
+            lineLevel := -1.
+        ]
+    ] ifFalse:[
+        "some 2D style menu - set hilight defaults to inverse"
+        DefaultHilightForegroundColor notNil ifTrue:[
+            hilightFgColor := DefaultHilightForegroundColor onDevice:graphicsDevice
+        ] ifFalse:[
+            hilightFgColor := bgColor.
+        ].
+        DefaultHilightBackgroundColor notNil ifTrue:[
+            hilightBgColor := DefaultHilightBackgroundColor onDevice:graphicsDevice
+        ] ifFalse:[
+            hilightBgColor := fgColor.
+        ].
+        DefaultLineLevel notNil ifTrue:[
+            lineLevel := DefaultLineLevel
+        ] ifFalse:[
+            lineLevel := 0.
+        ]
+    ].
+
+    DefaultLineInset notNil ifTrue:[
+        lineInset := DefaultLineInset
+    ] ifFalse:[
+        lineInset := (graphicsDevice horizontalPixelPerMillimeter * 0.8) rounded.
+    ].
+
+    "
+     the following has to be changed to
+     use the styleSheet too
+    "
+    style := styleSheet name.
+
+    (style == #iris) ifTrue:[
+        graphicsDevice hasGrayscales ifTrue:[
+            lineSpacing := 3
+        ].
+    ].
+    (style == #motif) ifTrue:[
+        lineSpacing := (2 * hilightLevel)
+    ].
+"/ stupid - these are clobbered somewhere; see initialize and recreate
+"/    hilightStyle == #openwin ifTrue:[
+"/        "add some space for rounded-hilight area"
+"/        self leftMargin:(font height // 2 + 2 "inset of rounded rect") "10".
+"/    ] ifFalse:[
+"/        (hilightLevel ~~ 0) ifTrue:[
+"/            self leftMargin:hilightLevel abs + self margin abs + 1.
+"/            lineSpacing := lineSpacing max:(hilightLevel abs * 2).
+"/        ]
+"/    ].
+    (style == #st80) ifTrue:[
+        level := 0.
+    ].
+    DefaultViewBackground notNil ifTrue:[
+        viewBackground := DefaultViewBackground onDevice:graphicsDevice
+    ].
+
+    "Modified: / 22-01-1997 / 11:57:23 / cg"
+    "Modified (comment): / 05-10-2011 / 15:50:59 / az"
+!
+
+initialize
+    |style|
+
+    super initialize.
+    hideOnRelease := false.
+    autoScroll := false.
+    sizeFixed := false.
+
+    (((style := styleSheet name) ~~ #normal) 
+    and:[style ~~ #mswindows]) ifTrue:[
+        self borderWidth: 1.
+        (style ~~ #st80) ifTrue:[self level:1]
+    ].
+
+    "stupid - have to redo this ..."
+    hilightStyle == #openwin ifTrue:[
+        "add some space for rounded-hilight area"
+        self leftMargin:(gc font height " // 2" + 2 "inset of rounded rect") "10".
+    ] ifFalse:[
+        (hilightLevel ~~ 0) ifTrue:[
+            self leftMargin:hilightLevel abs + margin abs + 1.
+            lineSpacing := lineSpacing max:(hilightLevel abs * 2).
+        ].
+        lineSpacing := lineSpacing max:2.
+    ].
+
+    "Modified: 5.6.1996 / 14:36:56 / cg"
+!
+
+recreate
+    "when recreated after a snapin or a migration, resize myself, in case
+     font dimensions have changed on the display"
+
+    super recreate.
+    hilightStyle == #openwin ifTrue:[
+        "add some space for rounded-hilight area"
+        self leftMargin:(gc font height // 2 + 2 "inset of rounded rect") "10".
+    ] ifFalse:[
+        (hilightLevel ~~ 0) ifTrue:[
+            self leftMargin:hilightLevel abs + self margin abs + 1.
+            lineSpacing := lineSpacing max:(hilightLevel abs * 2).
+        ]
+    ].
+    self resize
+
+    "Modified: 28.2.1996 / 19:39:37 / cg"
+!
+
+reinitialize
+    "this is called right after snapIn;
+     a kind of kludge - reset cursor (in case the save was
+     done with myself being shown and active)"
+
+    super reinitialize.
+    selection := nil. "self selection:nil."
+    self showPassive
+! !
+
+!MenuView methodsFor:'private'!
+
+isCheckItem:line
+    "return true if \c, \b or \t is contained in the line arg.
+     Care for '\\'."
+
+    |idx|
+
+    line isString ifTrue:[
+        idx := 1.
+        [idx ~~ 0] whileTrue:[
+            idx := line indexOf:$\ startingAt:idx.
+            (idx ~~ 0) ifTrue:[
+                idx < line size ifTrue:[
+                    ('cbt' includes:(line at:(idx+1))) ifTrue:[
+                        ^ true
+                    ].
+                ].
+                idx := idx + 2.
+            ].
+        ].
+    ].
+    ^ false.
+
+    "Modified: / 31.5.1999 / 12:59:07 / cg"
+!
+
+isGraphicItem:line
+    (line = '-') ifTrue:[^ true].
+    (line = '=') ifTrue:[^ true].
+    (line = '') ifTrue:[^ true].
+    ^ false.
+!
+
+labelWithoutDoubleAmpersands:label
+    (label isString and:[label includesString:'&&']) ifTrue:[
+        ^ label copyReplaceString:'&&' withString:'&'    
+    ] ifFalse:[
+        ^ label
+    ].
+!
+
+performSelectedAction
+    |theSelector theAction isCheck checkOn val idx didItHere|
+
+    (superView notNil and:[superView isPopUpView]) ifTrue:[superView hideForAction].
+    superMenu notNil ifTrue:[superMenu submenuTriggered].
+
+    idx := selection.
+    idx notNil ifTrue:[
+        
+        (subMenus isNil or:[(subMenus at:idx) isNil]) ifTrue:[
+            didItHere := false.
+
+            self showActive.
+            [
+                superMenu notNil ifTrue:[
+                    superMenu showActive
+                ].
+
+                val := idx.
+                args notNil ifTrue:[
+                    val := args at:idx
+                ].
+
+                isCheck := false.
+                onOffFlags notNil ifTrue:[
+                    onOffFlags size >= idx ifTrue:[
+                        checkOn := (onOffFlags at:idx).
+                        isCheck := checkOn notNil.
+                        isCheck ifTrue:[
+                            checkOn := val := checkOn not.
+                            onOffFlags at:idx put:checkOn.
+                        ]
+                    ]
+                ].
+
+                "
+                 ST-80 style model notification
+                "
+                self sendChangeMessageWith:val.
+
+                "
+                 item actions or selectors-array
+                "
+                self graphicsDevice activePointerGrab == self ifTrue:[
+                    self graphicsDevice ungrabPointer.
+                ].
+
+                actions notNil ifTrue:[
+                    theAction := actions at:idx ifAbsent:nil.
+                ].
+
+                theAction isNil ifTrue: [
+                    selectors notNil ifTrue: [
+
+                        "/ selectors may be:
+                        "/  - a single selector used for all items
+                        "/  - an array of selectors used per item
+
+                        selectors isSymbol ifTrue:[
+                            theSelector := selectors
+                        ] ifFalse:[
+                            (idx notNil 
+                             and:[idx <= selectors size]) ifTrue:[
+                                theSelector := selectors at:idx
+                            ]
+                        ].
+                    ].
+                ].
+
+                (theSelector notNil 
+                or:[theAction notNil]) ifTrue:[
+                    AbortOperationRequest handle:[:ex |
+                        ex return
+                    ] do:[
+                        |theReceiver|
+
+                        didItHere :=  true.
+                        theAction notNil ifTrue:[
+                            theAction valueWithOptionalArgument:val 
+                        ] ifFalse:[
+                            "/ support for ST-80 style message splitting:
+                            "/ if there is a menuPerformer it gets the
+                            "/ message (if understood).
+                            "/ Otherwise if there is a model, try that.
+                            "/ Finally, if there is a receiver,
+                            "/ its sent to that one.
+
+                            theReceiver := menuPerformer.
+                            (theReceiver isNil
+                             or:[(theReceiver respondsTo:theSelector) not])
+                            ifTrue:[
+                                theReceiver := model.
+                            ].
+                            (theReceiver isNil
+                             or:[(theReceiver respondsTo:theSelector) not])
+                            ifTrue:[
+                                theReceiver := receiver.
+                            ].
+
+                            theSelector isArray ifTrue:[
+                                theReceiver perform:(theSelector first) withArguments:(theSelector copyFrom:2)
+                            ] ifFalse:[
+                                theSelector numArgs == 0 ifTrue:[
+                                    theReceiver perform:theSelector
+                                ] ifFalse:[
+                                    isCheck ifTrue:[
+                                        self redrawLine:idx.
+                                        val := checkOn.
+                                    ].
+                                
+                                    theReceiver perform:theSelector with:val 
+                                ]
+                            ]
+                        ]
+
+                    ]
+                ].
+
+                "
+                 any action-block ?
+                "
+                actionBlock notNil ifTrue:[
+                    AbortOperationRequest handle:[:ex |
+                        ex return
+                    ] do:[
+                        didItHere ifTrue:[
+                            val := nil
+                        ].
+                        actionBlock numArgs == 1 ifTrue:[
+                            actionBlock value:val
+                        ] ifFalse:[
+                            actionBlock value:self value:val
+                        ]
+                    ]
+                ].
+
+            ] ensure:[
+                realized ifTrue:[
+                    self showPassive.
+                ].
+                superMenu notNil ifTrue:[
+                    superMenu showPassive
+                ]
+            ].
+        ].
+    ]
+
+    "Created: 4.3.1996 / 11:19:22 / cg"
+    "Modified: 21.1.1997 / 15:42:52 / cg"
+!
+
+recomputeSize
+    "resize myself to my preferred size
+     OBSOLETE - use resize"
+
+    self resize.
+!
+
+resize
+    "resize myself to my preferred size"
+
+    sizeFixed == true ifFalse:[
+	widthOfWidestLine := nil.  "/ i.e. unknown
+	super resize.
+    ]
+
+    "Modified: 9.2.1996 / 02:42:32 / cg"
+!
+
+resizeIfChanged
+    needResize == true ifTrue:[
+	self resize.
+	needResize := false
+    ]
+!
+
+selectionChangedFrom:oldSelection
+
+    "Created: 4.3.1996 / 22:10:54 / cg"
+!
+
+setSelectionForX:x y:y now:now
+    "select whatever is under x/y coordinate - if there is
+     a subMenu, show it"
+
+    <resource: #style (#'menu.subMenuPopInRightHalfOnly')>
+
+    |newSelection subMenu|
+
+    lastMousePoint := x@y.
+
+    (x < 0 
+    or:[x >= width
+    or:[y < 0
+    or:[y >= height]]]) ifTrue:[
+        "
+         moved outside
+        "
+        self cancelDelayedSubmenuHideOrShowAction.
+
+        subMenuShown notNil ifTrue:[
+            ^ self
+        ].
+
+        superMenu notNil ifTrue:[
+            superMenu regainControl
+        ].
+    ].
+
+    newSelection := self positionToSelectionX:x y:y.
+    newSelection ~= selection ifTrue:[
+        newSelection notNil ifTrue:[
+            (self isEnabled:newSelection) ifFalse:[
+                newSelection := nil
+            ]
+        ].
+    ].
+    newSelection = selection ifTrue:[
+        now ifFalse:[
+            ^ self
+        ]
+    ].
+
+    superMenu notNil ifTrue:[
+        superMenu cancelDelayedSubmenuHideOrShowAction.
+    ].
+    self cancelDelayedSubmenuHideOrShowAction.
+    (subMenuShown isNil or:[now]) ifTrue:[
+        self setSelection:newSelection.
+    ].
+
+    now ifTrue:[
+        subMenu := nil.
+        newSelection notNil ifTrue:[
+            subMenus notNil ifTrue:[
+                ((styleSheet at:#'menu.subMenuPopInRightHalfOnly' default:false) not
+                or:[x > (width // 2)]) ifTrue:[
+                    subMenu := (subMenus at:newSelection).
+                ]
+            ]
+        ].
+
+        subMenuShown notNil ifTrue:[
+            self hideSubmenu.
+            subMenuShown := nil.
+        ].
+        subMenu notNil ifTrue:[
+            self showSubmenu:newSelection.
+        ].
+    ] ifFalse:[
+        "/ new, delayed code
+        delayedSubmenuHideOrShowAction := 
+            [
+                self setSelectionForX:lastMousePoint x y:lastMousePoint y now:true.
+            ].
+
+        Processor 
+            addTimedBlock:delayedSubmenuHideOrShowAction 
+            afterMilliseconds:100.
+
+    ].
+
+    "Created: / 29-11-2010 / 19:09:54 / cg"
+! !
+
+!MenuView methodsFor:'queries'!
+
+preferredExtent 
+    "compute & return my preferredExtent from labels width's"
+
+    |margin2 w h extra|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    widthOfWidestLine := nil.  "/ i.e. unknown
+
+    margin2 := margin * 2.
+    w := self widthOfContents + leftMargin + leftMargin + margin2.
+    h := (self numberOfLines) * fontHeight - lineSpacing + (2 * topMargin) + margin2.
+    hilightLevel ~~ 0 ifTrue:[
+        h := h + (hilightLevel abs)
+    ].
+
+    extra := 0.
+    "if there is a submenu, add some space for the right arrow"
+    subMenus notNil ifTrue:[
+        extra := 16
+    ].
+    ((ShowAcceleratorKeys ~~ false) and:[shortKeys notNil]) ifTrue:[
+        extra := extra max:(self shortKeyInset) + 10 "/ spacing
+    ].
+    ^ ((w+extra) @ h).
+
+    "Modified: 23.1.1997 / 02:36:17 / cg"
+!
+
+selectedItemHasSubmenu
+    selection isNil ifTrue:[^false].
+    ^ (subMenus notNil and:[(subMenus at:selection) notNil]).
+
+    "Modified: 20.11.1997 / 00:07:50 / cg"
+!
+
+shortKeyInset
+    "compute the width req'd for the shortKey"
+
+    maxShortKeyStringLen isNil ifTrue:[
+        shortKeys isNil ifTrue:[
+            maxShortKeyStringLen := 0
+        ] ifFalse:[
+            maxShortKeyStringLen := shortKeys 
+                                        inject:0 
+                                        into:[:maxSoFar :thisKey | |short|
+
+                                                thisKey isNil ifTrue:[
+                                                    maxSoFar
+                                                ] ifFalse:[
+                                                    short := self graphicsDevice shortKeyStringFor:thisKey.
+                                                    short isNil ifTrue:[
+                                                        maxSoFar
+                                                    ] ifFalse:[
+                                                        maxSoFar max:(gc font widthOf:short)
+                                                    ]
+                                                ]
+                                             ]
+        ].
+    ].
+    ^ maxShortKeyStringLen
+
+    "Created: / 28-02-1996 / 16:30:09 / cg"
+    "Modified: / 08-08-2006 / 15:47:07 / cg"
+!
+
+shortKeyPrefixFor:aModifier
+    <resource: #obsolete>
+    "obsolete?"
+
+    |m|
+
+"/    aModifier = 'Alt' ifTrue:[
+"/        ^ '@-'
+"/    ].
+"/    aModifier = 'Cmd' ifTrue:[
+"/        ^ '@-'
+"/    ].
+"/    aModifier = 'Meta' ifTrue:[
+"/        ^ '$-'
+"/    ].
+"/    aModifier = 'Ctrl' ifTrue:[
+"/        ^ '^-'
+"/    ].
+"/    ^ aModifier.
+
+    m := self graphicsDevice modifierKeyTopFor:aModifier.
+    m notNil ifTrue:[
+        ^ m , '-'
+    ].
+    ^ aModifier.
+
+    "Created: 28.2.1996 / 16:32:17 / cg"
+    "Modified: 20.3.1996 / 17:03:34 / cg"
+!
+
+wantsFocusWithButtonPress
+    ^ false.
+! !
+
+!MenuView methodsFor:'redrawing'!
+
+redrawFromVisibleLine:start to:stop
+    "redraw a line range - redefined to care for special entries."
+
+    "/ the natural way to do it is:
+    "/
+    "/    start to:stop do:[:visLine |
+    "/        self redrawVisibleLine:visLine
+    "/    ]
+    "/
+    "/ but I want to draw the stuff in big chunks for slow machines ...
+    "/ Q: is it worth it ?
+
+    |first 
+     index   "{ Class: SmallInteger }"
+     current "{ Class: SmallInteger }"
+     line special index0|
+
+    index0 := self visibleLineToListLine:start.
+    index0 notNil ifTrue:[
+        index := index0.
+        first := start.
+        current := start.
+        [current <= stop] whileTrue:[
+            line := self visibleAt:current.
+            line notNil ifTrue:[
+                line isText ifFalse:[
+                    line := line asString string
+                ]
+            ].
+
+            special := line notNil
+                       and:[line isString
+                       and:[(self isGraphicItem:line) 
+                            or:[line includes:$\ ]]].
+
+            (special
+            or:[shortKeys notNil
+            or:[(self isEnabled:index) not]]) ifTrue:[
+                "a special case"
+                (first < current) ifTrue:[
+                    super redrawFromVisibleLine:first to:(current - 1)
+                ].
+                self redrawVisibleLine:current.
+                first := current + 1
+            ].
+            current := current + 1.
+            index := index + 1
+        ].
+        (first < current) ifTrue:[
+            super redrawFromVisibleLine:first to:(current - 1)
+        ].
+
+        "draw submenu marks"
+        subMenus notNil ifTrue:[
+            index := index0.
+            start to:stop do:[:l |
+                index <= subMenus size ifTrue:[
+                    (subMenus at:index) notNil ifTrue:[
+                        self drawRightArrowInVisibleLine:l
+                    ].
+                    index := index + 1
+                ]
+            ]
+        ]
+    ]
+
+    "Modified: 12.5.1996 / 21:13:31 / cg"
+!
+
+redrawVisibleLine:visLineNr
+    "redefined from normal list-line drawing, to handle special
+     lines. These are:
+        lines consisting of '-' only: draw a horizontal separating line
+        lines consisting of '=' only: draw double separating line
+        empty line                  : leave blank
+     there may be more in the future.
+    "
+
+    |line lineNr y isSpecial isSeparatingLine 
+     isDoubleLine right clr1 clr2 text key|
+
+    line := self visibleAt:visLineNr.
+
+    isSpecial := isDoubleLine := isSeparatingLine := false.
+    (line = '-') ifTrue:[
+        isSeparatingLine := isSpecial := true.
+    ] ifFalse:[
+        (line = '=') ifTrue:[
+            isSeparatingLine := isSpecial := isDoubleLine := true.
+        ] ifFalse:[
+            (line = '') ifTrue:[
+                isSpecial := true
+            ]
+        ]
+    ].
+
+    isSpecial ifFalse:[
+        lineNr := self visibleLineToListLine:visLineNr.
+        (self isEnabled:lineNr) ifFalse:[
+            text := self visibleAt:visLineNr.
+            disabledEtchedFgColor notNil ifTrue:[
+                text := text asText emphasisAllAdd:(#etchColor -> disabledEtchedFgColor)
+            ].
+            self 
+                drawLine:text 
+                atX:(textStartLeft - viewOrigin x) 
+                inVisible:visLineNr 
+                with:disabledFgColor 
+                and:bgColor.
+
+            "/
+            "/ is there a shortKey ?
+            "/
+            ((ShowAcceleratorKeys ~~ false)
+            and:[shortKeys notNil 
+            and:[(key := shortKeys at:lineNr ifAbsent:nil) notNil]]) ifTrue:[
+                self drawAccelerator:key inVisibleLine:visLineNr with:disabledFgColor and:bgColor
+            ]
+            "/ self drawVisibleLine:visLineNr with:disabledFgColor and:bgColor
+        ] ifTrue:[
+            super redrawVisibleLine:visLineNr
+        ].
+
+        "/
+        "/ is there a submenu ?
+        "/
+        (subMenus notNil and:[(subMenus at:lineNr ifAbsent:nil) notNil]) ifTrue:[
+            self drawRightArrowInVisibleLine:visLineNr
+        ].
+        ^ self
+    ].
+
+    "/
+    "/ handle separating lines
+    "/
+
+    y := self yOfVisibleLine:visLineNr.
+
+    self paint:bgColor.
+    self fillRectangleX:0 y:y width:width height:fontHeight.
+
+    isSeparatingLine ifTrue:[
+        y := y + (fontHeight // 2).
+        isDoubleLine ifTrue:[
+            y := y - (fontHeight // 8).
+        ].
+
+        right := width - 1 - lineInset.
+
+        lineLevel == 0 ifTrue:[
+            self paint:fgColor.
+            self displayLineFromX:lineInset y:y toX:right y:y.
+            isDoubleLine ifTrue:[
+                y := y + (fontHeight // 4).
+                self displayLineFromX:lineInset y:y toX:right y:y
+            ]
+        ] ifFalse:[
+            "the inset on each side"
+
+            lineLevel < 0 ifTrue:[
+                clr1 := shadowColor.
+                clr2 := lightColor.
+            ] ifFalse:[
+                clr1 := lightColor.
+                clr2 := shadowColor.
+            ].
+
+            self paint:clr1.
+            self displayLineFromX:lineInset y:y toX:right y:y.
+            self paint:clr2.
+            y := y + 1.
+            self displayLineFromX:lineInset y:y toX:right y:y.
+            isDoubleLine ifTrue:[
+                y := y + (fontHeight // 4).
+                self displayLineFromX:lineInset y:y toX:right y:y.
+                y := y - 1.
+                self paint:clr1.
+                self displayLineFromX:lineInset y:y toX:right y:y.
+            ]
+        ]
+    ]
+
+    "Modified: 2.3.1996 / 14:48:08 / cg"
+!
+
+redrawVisibleLine:visLine col:col
+    "redefined to always draw a full line - for openwin handling"
+
+    self redrawVisibleLine:visLine
+!
+
+redrawVisibleLine:visLine from:startCol
+    "redefined to always draw a full line - for openwin handling"
+
+    self redrawVisibleLine:visLine
+!
+
+redrawVisibleLine:visLine from:startCol to:endCol
+    "redefined to always draw a full line - for openwin handling"
+
+    self redrawVisibleLine:visLine
+! !
+
+!MenuView methodsFor:'selections'!
+
+isValidSelection:aNumber
+    "return true, if aNumber is ok for a selection lineNo"
+
+    |line|
+
+    (super isValidSelection:aNumber) ifFalse:[^ false].
+    (self isEnabled:aNumber) ifFalse:[^ false].
+
+    line := self listAt:aNumber.
+    ^ (self isGraphicItem:line) not
+
+    "Modified: / 8.8.1998 / 03:31:14 / cg"
+! !
+
+!MenuView methodsFor:'showing'!
+
+realize
+    self resizeIfChanged.
+    super realize
+
+    "Modified: 28.2.1996 / 18:17:05 / cg"
+!
+
+show
+    self hiddenOnRealize:false.
+    self showPassive.
+    self realize
+
+    "Modified: 21.3.1996 / 17:21:46 / cg"
+!
+
+unmap
+    "unmap the view - the view stays created (but invisible), and can be remapped again later."
+
+    self hideSubmenu.
+    super unmap.
+
+    "Created: 25.2.1997 / 23:01:56 / cg"
+    "Modified: 25.2.1997 / 23:02:09 / cg"
+! !
+
+!MenuView methodsFor:'submenu notifications'!
+
+cancelDelayedSubmenuHideOrShowAction
+    delayedSubmenuHideOrShowAction notNil ifTrue:[
+        Processor removeTimedBlock:delayedSubmenuHideOrShowAction.
+        delayedSubmenuHideOrShowAction := nil.
+    ].
+
+    "Created: / 29-11-2010 / 19:21:36 / cg"
+!
+
+hideSubmenu
+    "hide the currently shown subMenu (if any)"
+
+    |m id|
+
+    (m := subMenuShown) notNil ifTrue:[
+        "/ race condition kludge ...
+        m realized ifFalse:[
+            (id := m id) notNil ifTrue:[
+                self graphicsDevice unmapWindow:id.
+            ]
+        ] ifTrue:[
+            m hide.
+        ].
+
+        subMenuShown := nil.
+        "/ self setSelection:nil.
+    ].
+
+    "Modified: / 29-11-2010 / 18:57:37 / cg"
+!
+
+regainControl
+    "take over pointer control from a submenu"
+
+    masterView notNil ifTrue:[
+        masterView regainControl.
+        subMenuShown := nil.
+    ].
+
+    "Modified: 4.3.1996 / 23:17:15 / cg"
+!
+
+showActive
+    "submenu is about to perform a menu-action - show wait cursor here as well"
+
+    self cursor:(Cursor wait)
+!
+
+showPassive
+    "submenu has finished its menu-action - show normal cursor again"
+
+    self cursor:(Cursor hand)
+!
+
+showSubmenu:index
+    "show subMenu at index"
+
+    |org mx my menuOrBlock menu rightInset|
+
+    rightInset := 5.
+
+    menuOrBlock := subMenus at:index.
+    menuOrBlock isNil ifTrue:[^ self].
+    menuOrBlock == subMenuShown ifTrue:[^ self].
+
+    menuOrBlock isBlock ifTrue:[ 
+        menuOrBlock == blockOfSubMenuShown ifTrue:[^ self].
+        menu := menuOrBlock value.
+    ] ifFalse:[
+        menu := menuOrBlock.
+    ].
+
+    mx := width - rightInset.
+    my := self yOfVisibleLine:index.
+    "
+     need to know the physical screen coordinate,
+     to map the subview there
+    "
+    org := self graphicsDevice translatePoint:(mx @ my) fromView:self toView:nil.
+
+    "
+     before showing, process all of my expose events
+    "
+"/    "/ mhmh - is this still needed ?
+"/    windowGroup notNil ifTrue:[
+"/        windowGroup processExposeEvents
+"/    ].
+
+    menu topView device:self graphicsDevice.   "/ req'd for multiDisplay operation
+    menu superMenu:self.
+
+    actionBlock notNil ifTrue:[
+        "/ mhmh - I am an ST-80 style menu
+        "/ which does not send any messages to the receiver,
+        "/ but returns the selector instead.
+        "/ let my submenu do so as well ...
+
+         menu menuView action:actionBlock
+    ].
+
+    "
+     realize the submenu in MY windowgroup
+    "
+    windowGroup notNil ifTrue:[
+        menu windowGroup:windowGroup.
+        windowGroup addTopView:menu.
+    ].
+    menu fixSize.
+    menu origin:org.
+    menu makeFullyVisible.
+
+    "/ cg: Jan-2010
+    "/ if the submenu covers me, try to show it to the left instead of the right)
+    (menu screenBounds intersects:(self screenBounds insetBy:(rightInset*2))) ifTrue:[
+        menu origin:(org - (width @ 0) - (menu width @ 0) + ((rightInset*2) @ 0)).
+        menu makeFullyVisible.
+    ].
+
+    menu noShadow.
+    menu haveControl:true. "/ grap pointers during mapped 
+
+    "/ race condition kludge ...
+    menu realized ifFalse:[
+        menu realize. 
+    ] ifTrue:[
+        self graphicsDevice mapWindow:menu id.
+    ].
+"/    device flush.
+    menuOrBlock isBlock ifTrue:[
+        blockOfSubMenuShown := menuOrBlock
+    ] ifFalse:[
+        blockOfSubMenuShown := nil
+    ].
+    subMenuShown := menu
+
+    "Modified: / 10.10.2001 / 14:12:44 / cg"
+!
+
+submenuTriggered
+    "submenu has performed some action - have to deselect here"
+
+    self setSelection:nil.
+
+    "a bad kludge - 5 minutes before writing the alpha tapes ..."
+    superView isPopUpView ifTrue:[
+	superView hide
+    ].
+    superMenu notNil ifTrue:[
+	superMenu submenuTriggered 
+    ].
+
+    "Modified: 25.5.1996 / 12:27:42 / cg"
+! !
+
+!MenuView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.184 2014-02-18 14:56:00 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/MenuView.st,v 1.184 2014-02-18 14:56:00 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MiniScroller.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,151 @@
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Scroller subclass:#MiniScroller
+	instanceVariableNames:''
+	classVariableNames:'MiniScrollerSize'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!MiniScroller class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    like a scroller, but taking less screen space
+
+    [author:]
+	Claus Gittinger
+"
+! !
+
+!MiniScroller class methodsFor:'defaults'!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'miniScroller.size')>
+
+    MiniScrollerSize := StyleSheet at:'miniScroller.size'.
+
+    "
+     self updateStyleCache
+    "
+
+    "Created: 15.8.1997 / 01:51:38 / cg"
+    "Modified: 20.10.1997 / 15:06:36 / cg"
+! !
+
+!MiniScroller methodsFor:'initialization'!
+
+initStyle
+    "setup viewStyle specifics"
+
+    |style lvl|
+
+    super initStyle.
+    style := StyleSheet name.
+    style == #iris ifTrue:[
+        tallyLevel := tallyMarks := 0.
+        thumbEdgeStyle := nil.
+        thumbLevel := thumbActiveLevel := 2.
+    ].
+    ((style ~~ #normal) and:[style ~~ #mswindows]) ifTrue:[
+        style == #st80 ifTrue:[
+            lvl := 1.
+            "/ lvl := 0.
+        ] ifFalse:[
+            lvl := -1.
+        ].
+        self level:lvl.
+        self borderWidth:0
+    ].
+    shadowForm := lightForm := nil.
+    fixThumbHeight := false.
+
+    thumbImage := nil.
+
+    "Modified: / 12.5.1998 / 20:41:52 / cg"
+! !
+
+!MiniScroller methodsFor:'queries'!
+
+isMiniScroller
+    ^ true
+
+    "Created: 7.3.1997 / 16:20:22 / cg"
+!
+
+preferredExtent
+    "return my preferredExtent - make my width very small"
+
+    |defExt w h mm|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    defExt := self class defaultExtent.
+
+    (mm := MiniScrollerSize) isNil ifTrue:[
+        mm := (thumbLevel ~~ 0) ifTrue:[1.8] ifFalse:[1.5].
+        mm := (thumbLevel ~~ 0) ifTrue:[2.5] ifFalse:[2].
+        styleSheet name == #st80 ifTrue:[
+            mm := 2
+        ].
+    ].
+
+    w := defExt x.
+    h := defExt y.
+
+    orientation == #vertical ifTrue:[
+        w := (self graphicsDevice horizontalPixelPerMillimeter asFloat * mm) rounded.
+        "/ dont let it become too small for thumb ...
+        w := w max:((level abs + thumbLevel) * 2 + 1).
+    ] ifFalse:[
+        h := (self graphicsDevice verticalPixelPerMillimeter asFloat * mm) rounded.
+        "/ dont let it become too small for thumb ...
+        h := h max:((level abs + thumbLevel) * 2 + 1).
+    ].
+    preferredExtent := w @ h.
+    ^ preferredExtent.
+
+    "Modified: / 08-10-2007 / 17:24:32 / cg"
+! !
+
+!MiniScroller class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/MiniScroller.st,v 1.25 2014-02-18 14:57:23 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MultiColumnPanelView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,683 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+PanelView subclass:#MultiColumnPanelView
+	instanceVariableNames:'columnWidths'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!MultiColumnPanelView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a View which arranges its child-views in a vertical column.
+    All real work is done in PanelView - except the layout computation is
+    redefined here.
+
+    The layout is controlled by the instance variables: 
+	horizontalLayout and verticalLayout
+    in addition to 
+	horizontalSpace and verticalSpace.
+
+    The vertical layout can be any of:
+
+	#top            arrange elements at the top
+	#topSpace       arrange elements at the top, start with spacing
+	#bottom         arrange elements at the bottom
+	#bottomSpace    arrange elements at the bottom, start with spacing
+	#center         arrange elements in the center; ignore verticalSpace
+	#spread         spread elements evenly; ignore verticalSpace
+	#spreadSpace    spread elements evenly with spacing at ends; ignore verticalSpace
+	#fit            like #spread, but resize elements for tight packing; ignore verticalSpace
+	#fitSpace       like #fit, with spacing; ignore verticalSpace
+	#topFit         like #top, but resize the last element to fit
+	#topSpaceFit    like #topSpace, but resize the last element to fit
+	#bottomFit      like #bottom, but resize the first element to fit
+	#bottomSpaceFit like #bottomSpace, but resize the first element to fit
+
+    the horizontal layout can be:
+
+	#left           place element at the left
+	#leftSpace      place element at the left, offset by horizontalSpace
+	#center         place elements horizontally centered; ignore horizontalSpace
+	#right          place it at the right
+	#rightSpace     place it at the right, offset by horizontalSpace
+	#fit            resize elements horizontally to fit this panel; ignore horizontalSpace
+	#fitSpace       like #fit, but add spacing; ignore horizontalSpace
+
+	#leftMax        like #left, but resize elements to max of them
+	#leftSpaceMax   like #leftSpace, but resize elements
+	#centerMax      like #center, but resize elements
+	#rightMax       like #right, but resize elements to max of them
+	#rightSpaceMax  like #rightSpace, but resize elements
+
+    The defaults is #center for both directions.
+
+    The layout is changed by the messages #verticalLayout: and #horizontalLayout:.
+    For backward compatibility (to times, where only vLayout existed), the simple
+    #layout: does the same as #verticalLayout:. Do not use this old method.
+
+    The panel assumes, that the elements do not resize themselfes, after it
+    became visible. This is not true for all widgets (buttons or labels may
+    like to change). If you have changing elements, tell this to the panel
+    with 'aPanel elementsChangeSize:true'. In that case, the panel will react
+    to size changes, and reorganize things.
+
+    If none of these layout/space combinations is exactly what you need in
+    your application, create a subclass, and redefine the setChildPositions method.
+
+    CAVEAT: this class started with #top and no horizontal alignments;
+    as time went by, more layouts were added and the setup should be changed
+    to use different selectors for space, max-resize and alignment
+    (i.e. having more and more layout symbols makes things a bit confusing ...)
+
+    [see also:]
+	HorizontalPanelView
+	VariableVerticalPanel VariableHorizontalPanel
+	Label
+
+    [author:]
+	Claus Gittinger
+"
+!
+
+examples
+"
+    These examples demonstrate the effect of different layout
+    settings.
+    You should try more examples, combining spacing and different
+    verticalLayout:/horizontalLayout: combinations.
+
+
+    example: default layout (centered)
+                                                                        [exBegin]
+        |v p b1 b2 b3 l1 l2 l3|
+
+        v := StandardSystemView new.
+        v label:'center (default)'.
+        p := MultiColumnPanelView in:v.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        p columnWidths:#(0.3 0.7).
+        l1 := Label label:'label1' in:p.
+        b1 := Button label:'button1' in:p.
+        l2 := Label label:'l2' in:p.
+        b2 := Button label:'b2' in:p.
+        l3 := Label label:'lab3' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+"
+! !
+
+!MultiColumnPanelView methodsFor:'accessing'!
+
+columnWidths:something
+    something ~= columnWidths ifTrue:[
+        columnWidths := something.
+        self layoutChanged
+    ].
+!
+
+horizontalLayout
+    "return the horizontal layout as symbol.
+     the returned value is one of
+	#left           place element at the left
+	#leftSpace      place element at the left, offset by horizontalSpace
+	#center         place elements horizontally centered; ignore horizontalSpace
+	#right          place it at the right
+	#rightSpace     place it at the right, offset by horizontalSpace
+	#fit            resize elements horizontally to fit this panel; ignore horizontalSpace
+	#fitSpace       like #fit, but add spacing; ignore horizontalSpace
+
+	#leftMax        like #left, but resize elements to max of them
+	#leftSpaceMax   like #leftSpace, but resize elements
+	#centerMax      like #center, but resize elements
+	#rightMax       like #right, but resize elements to max of them
+	#rightSpaceMax  like #rightSpace, but resize elements
+      the default is #centered
+    "
+
+    ^ hLayout
+!
+
+horizontalLayout:aSymbol
+    "change the horizontal layout as symbol.
+     The argument, aSymbol must be one of:
+	#left           place element at the left
+	#leftSpace      place element at the left, offset by horizontalSpace
+	#center         place elements horizontally centered; ignore horizontalSpace
+	#right          place it at the right
+	#rightSpace     place it at the right, offset by horizontalSpace
+	#fit            resize elements horizontally to fit this panel; ignore horizontalSpace
+	#fitSpace       like #fit, but add spacing; ignore horizontalSpace
+
+	#leftMax        like #left, but resize elements to max of them
+	#leftSpaceMax   like #leftSpace, but resize elements
+	#centerMax      like #center, but resize elements
+	#rightMax       like #right, but resize elements to max of them
+	#rightSpaceMax  like #rightSpace, but resize elements
+      the default (if never changed) is #centered
+    "
+
+    (hLayout ~~ aSymbol) ifTrue:[
+	hLayout := aSymbol.
+	self layoutChanged
+    ]
+!
+
+layout:something
+    "OBSOLETE compatibility interface. Will vanish.
+     leftover for historic reasons - do not use any more.
+     In the meantime, try to figure out what is meant ... a kludge"
+
+    <resource:#obsolete>
+
+    something isLayout ifTrue:[^ super layout:something].
+
+    self obsoleteMethodWarning:'use #verticalLayout:'.
+    ^ self verticalLayout:something
+
+    "Modified: 31.8.1995 / 23:08:54 / claus"
+!
+
+verticalLayout
+    "return the vertical layout as a symbol.
+     the returned value is one of
+	#top            arrange elements at the top
+	#topSpace       arrange elements at the top, start with spacing
+	#bottom         arrange elements at the bottom
+	#bottomSpace    arrange elements at the bottom, start with spacing
+	#center         arrange elements in the center; ignore verticalSpace
+	#spread         spread elements evenly; ignore verticalSpace
+	#spreadSpace    spread elements evenly with spacing at ends; ignore verticalSpace
+	#fit            like #spread, but resize elements for tight packing; ignore verticalSpace
+	#fitSpace       like #fit, with spacing; ignore verticalSpace
+	#topFit         like #top, but resize the last element to fit
+	#topSpaceFit    like #topSpace, but resize the last element to fit
+	#bottomFit      like #bottom, but resize the first element to fit
+	#bottomSpaceFit like #bottomSpace, but extend the first element to fit
+      the default is #centered
+    "
+
+    ^ vLayout
+
+    "Modified: 17.8.1997 / 15:20:13 / cg"
+!
+
+verticalLayout:aSymbol
+    "change the vertical layout as a symbol.
+     The argument, aSymbol must be one of:
+	#top            arrange elements at the top
+	#topSpace       arrange elements at the top, start with spacing
+	#bottom         arrange elements at the bottom
+	#bottomSpace    arrange elements at the bottom, start with spacing
+	#center         arrange elements in the center; ignore verticalSpace
+	#spread         spread elements evenly; ignore verticalSpace
+	#spreadSpace    spread elements evenly with spacing at ends; ignore verticalSpace
+	#fit            like #spread, but resize elements for tight packing; ignore verticalSpace
+	#fitSpace       like #fit, with spacing; ignore verticalSpace
+	#topFit         like #top, but resize the last element to fit
+	#topSpaceFit    like #topSpace, but resize the last element to fit
+	#bottomFit      like #bottom, but resize the first element to fit
+	#bottomSpaceFit like #bottomSpace, but extend the first element to fit
+      the default (if never changed) is #centered
+    "
+
+    (vLayout ~~ aSymbol) ifTrue:[
+	vLayout := aSymbol.
+	self layoutChanged
+    ]
+
+    "Modified: 17.8.1997 / 15:19:58 / cg"
+! !
+
+!MultiColumnPanelView methodsFor:'initialization'!
+
+initialize
+    super initialize.
+
+    hLayout := #fit.
+    vLayout := #top.
+    columnWidths := #(0.5 0.5).
+! !
+
+!MultiColumnPanelView methodsFor:'layout'!
+
+setChildPositions
+    "(re)compute position of every child"
+
+    |xpos ypos space numChilds hInside hL vL maxHeight m2 subViews rowsPerCol maxWidthPerCol col numCols cX cY bw|
+
+    subViews := self subViewsToConsider.
+    subViews size == 0 ifTrue:[^ self].
+
+"/    self extentChangedFlag ifTrue:[
+"/        ext := self computeExtent.
+"/        width := ext x.
+"/        height := ext y.
+"/    ].
+
+    space := verticalSpace.
+    numChilds := subViews size.
+    numCols := columnWidths size max:1.
+
+    bw := self borderWidth.
+    m2 := margin * 2.
+    hInside := height - m2 + (bw*2) - subViews last borderWidth.
+
+    hL := hLayout.
+    vL := vLayout.
+
+    rowsPerCol := Array new:numCols withAll:0.
+    maxWidthPerCol := Array new:numCols withAll:0.
+
+    maxHeight := 0.
+    col := 1.
+    subViews do:[:child |
+        |childsW childsH|
+
+        childsW := child widthIncludingBorder.
+        childsH := child heightIncludingBorder.
+        maxHeight := maxHeight max:childsH.
+        maxWidthPerCol at:col put:((maxWidthPerCol at:col) max:childsW).
+        rowsPerCol at:col put:(rowsPerCol at:col)+1.
+        col := col + 1.
+        col > numCols ifTrue:[ col := 1 ].
+    ].
+"/ new
+    xpos := 0.
+    ypos := 0.
+    col := 1.
+    subViews do:[:child |
+        col == numCols ifTrue:[
+            cX := width.
+        ] ifFalse:[
+            cX := xpos + (width // numCols).
+        ].
+        cY := ypos + maxHeight.
+
+        child origin:(xpos@ypos)"corner:(cX @ cY)".
+        hLayout == #fit ifTrue:[
+            child width:(cX - xpos + 1).
+        ].
+        col := col + 1.
+        col > numCols ifTrue:[ 
+            col := 1.
+            xpos := 0.
+            ypos := cY + verticalSpace.
+        ] ifFalse:[
+            xpos := cX + horizontalSpace.
+        ].
+    ].
+    ^ self.
+
+"/ old
+
+"/    resizeToMaxV := false.
+"/    (vL endsWith:'Max') ifTrue:[
+"/        resizeToMaxV := true.
+"/        hEach := maxHeight := subViews inject:0 into:[:maxSoFar :child | maxSoFar max:child heightIncludingBorder].
+"/        vL := (vL copyButLast:3) asSymbol.
+"/    ].
+"/
+"/    numChilds == 1 ifTrue:[
+"/        (vL == #topFit or:[vL == #bottomFit]) ifTrue:[
+"/            vL := #fit
+"/        ].
+"/        (vL == #topSpaceFit or:[vL == #bottomSpaceFit]) ifTrue:[
+"/            vL := #fitSpace
+"/        ].
+"/    ].
+"/
+"/    vL == #fitSpace ifTrue:[
+"/        "
+"/         adjust childs extents and set origins.
+"/         Be careful to avoid accumulation of rounding errors
+"/        "
+"/        hEach := (hInside - ((numChilds + 1) * space)) / numChilds.
+"/        ypos := space + margin - bw.
+"/    ] ifFalse:[
+"/        vL == #fit ifTrue:[
+"/            "
+"/             adjust childs extents and set origins.
+"/             Be careful to avoid accumulation of rounding errors
+"/            "
+"/            hEach := (hInside - ((numChilds - 1) * space)) / numChilds.
+"/            ypos := margin - bw.
+"/        ] ifFalse:[
+"/            l := vL.
+"/
+"/            "
+"/             compute net height needed
+"/            "
+"/            resizeToMaxV ifTrue:[
+"/                sumOfHeights := subViews inject:0 into:[:sumSoFar :child | sumSoFar + maxHeight + (child borderWidth*2)].
+"/            ] ifFalse:[
+"/                sumOfHeights := subViews inject:0 into:[:sumSoFar :child | sumSoFar + child heightIncludingBorder].
+"/
+"/                "/ adjust - do not include height of last(first) element if doing a fit
+"/                (vL == #topFit or:[vL == #topSpaceFit]) ifTrue:[
+"/                    sumOfHeights := sumOfHeights - subViews last heightIncludingBorder.
+"/                ] ifFalse:[
+"/                    (vL == #bottomFit or:[vL == #bottomSpaceFit]) ifTrue:[
+"/                        sumOfHeights := sumOfHeights - subViews first heightIncludingBorder.
+"/                    ]
+"/                ].
+"/            ].
+"/
+"/            restHeight := height - sumOfHeights - ((numChilds-1)*space).
+"/
+"/            ((l == #center) and:[numChilds == 1]) ifTrue:[l := #spread].
+"/            (l == #spread and:[numChilds == 1]) ifTrue:[l := #spreadSpace].
+"/
+"/            "
+"/             compute position of topmost subview and space between them;
+"/             if they do hardly fit, leave no space between them 
+"/            "
+"/            ((sumOfHeights >= (height - m2))
+"/            and:[l ~~ #fixTopSpace and:[l ~~ #fixTop]]) ifTrue:[
+"/                "
+"/                 if we have not enough space for all the elements, 
+"/                 fill them tight, and show what can be shown (at least)
+"/                "
+"/                ypos := margin.
+"/                space := 0
+"/            ] ifFalse:[
+"/                l == #fixTopSpace ifTrue:[
+"/                    l := #topSpace
+"/                ] ifFalse:[
+"/                    l == #fixTop ifTrue:[
+"/                        l := #top 
+"/                    ]
+"/                ].
+"/                ((l == #bottom) or:[l == #bottomSpace
+"/                or:[l == #bottomFit or:[l == #bottomSpaceFit]]]) ifTrue:[
+"/                    ypos := restHeight - (space * (numChilds - 1)).
+"/"/
+"/"/                    bw == 0 ifTrue:[
+"/"/                        ypos := ypos + space 
+"/"/                    ].
+"/"/           
+"/                    (l == #bottomSpace
+"/                    or:[l == #bottomSpaceFit]) ifTrue:[
+"/                        ypos >= space ifTrue:[
+"/                            ypos := ypos - space
+"/                        ]
+"/                    ].
+"/                    ypos := ypos - margin.
+"/
+"/                    ypos < 0 ifTrue:[
+"/                        space := space min:(restHeight // (numChilds + 1)).
+"/                        ypos := restHeight - (space * numChilds).
+"/                    ]
+"/                ] ifFalse: [
+"/                    (l == #spread) ifTrue:[
+"/                        space := (restHeight - m2) // (numChilds - 1).
+"/                        ypos := margin.
+"/                        (space == 0) ifTrue:[
+"/                            ypos := restHeight // 2
+"/                        ]
+"/                    ] ifFalse: [
+"/                      (l == #spreadSpace) ifTrue:[
+"/                        space := (restHeight - m2) // (numChilds + 1).
+"/                        ypos := space + margin.
+"/                        (space == 0) ifTrue:[
+"/                            ypos := restHeight // 2
+"/                        ]
+"/                      ] ifFalse: [
+"/                        ((l == #top) or:[l == #topSpace
+"/                        or:[l == #topFit or:[l == #topSpaceFit]]]) ifTrue:[
+"/                            space := space min:(restHeight - m2) // (numChilds + 1).
+"/                            (vL == #fixTop or:[vL == #fixTopSpace]) ifTrue:[
+"/                                space := space max:verticalSpace.
+"/                            ] ifFalse:[
+"/                                space := space max:0.
+"/                            ].
+"/                            (l == #topSpace or:[l == #topSpaceFit]) ifTrue:[
+"/                                ypos := space + margin.
+"/                            ] ifFalse:[
+"/                                "/
+"/                                "/ if the very first view has a 0-level AND
+"/                                "/ my level is non-zero, begin with margin
+"/                                "/
+"/                                true "(margin ~~ 0 and:[subViews first level == 0])" ifTrue:[
+"/                                    ypos := margin
+"/                                ] ifFalse:[
+"/                                    ypos := 0
+"/                                ]
+"/                            ]
+"/                        ] ifFalse:[
+"/                            "center"
+"/                            ypos := (restHeight - ((numChilds - 1) * space)) // 2.
+"/                            ypos < 0 ifTrue:[
+"/                                space := restHeight // (numChilds + 1).
+"/                                ypos := (restHeight - ((numChilds - 1) * space)) // 2.
+"/                            ]
+"/                        ]
+"/                      ]
+"/                    ]
+"/                ]
+"/            ].
+"/        ].
+"/    ].
+"/
+"/    resizeToMaxH := false.
+"/    (hL endsWith:'Max') ifTrue:[
+"/        resizeToMaxH := true.
+"/        maxWidth := subViews inject:0 into:[:maxSoFar :child | maxSoFar max:child widthIncludingBorder].
+"/        hL := (hL copyWithoutLast:3) asSymbol.
+"/    ].
+"/
+"/    "
+"/     now set positions
+"/    "
+"/    subViews keysAndValuesDo:[:index :child |
+"/        |xpos advance bwChild wChild newWChild x2|
+"/
+"/        wChild := child widthIncludingBorder.
+"/        bwChild := child borderWidth.
+"/
+"/        elementsChangeSize ifTrue:[
+"/            "to avoid a recursion when we change the elements size"
+"/            child removeDependent:self.
+"/        ].
+"/        resizeToMaxH ifTrue:[
+"/            child width:(wChild := maxWidth - (bwChild  * 2)).
+"/        ].
+"/
+"/        hL == #left ifTrue:[
+"/            xpos := 0 - bw + margin.
+"/        ] ifFalse:[
+"/            hL == #leftSpace ifTrue:[
+"/                xpos := horizontalSpace + margin
+"/            ] ifFalse:[
+"/                hL == #right ifTrue:[
+"/                    xpos := width - wChild - margin
+"/                ] ifFalse:[
+"/                    hL == #rightSpace ifTrue:[
+"/                        xpos := width - horizontalSpace - wChild - margin.
+"/                    ] ifFalse:[
+"/                        hL == #fitSpace ifTrue:[
+"/                            xpos := horizontalSpace + margin.
+"/                            newWChild := width - m2 - ((horizontalSpace + bwChild) * 2)
+"/                        ] ifFalse:[
+"/                            hL == #fit ifTrue:[
+"/                                newWChild := width "- (bwChild * 2)".
+"/                                bw == 0 ifTrue:[
+"/                                    newWChild :=  newWChild - (bwChild * 2)
+"/                                ].
+"/                                true "child level == 0" ifTrue:[
+"/                                    xpos := margin - bw.
+"/                                    newWChild := newWChild - m2
+"/                                ] ifFalse:[
+"/                                    xpos := 0 - bw. 
+"/                                ].
+"/                            ] ifFalse:[
+"/                                "centered"
+"/                                 xpos := margin + ((width - m2 - wChild) // 2).
+"/                            ]
+"/                        ]
+"/                    ]
+"/                ]
+"/            ]
+"/        ].
+"/        newWChild notNil ifTrue:[
+"/            child width:newWChild
+"/        ].
+"/
+"/"/        (xpos < 0) ifTrue:[ xpos := 0 ].
+"/
+"/        x2 := xpos + child width - 1.
+"/
+"/        (vL == #fit 
+"/        or:[vL == #fitSpace
+"/        or:[resizeToMaxV]]) ifTrue:[
+"/            child origin:(xpos @ (ypos rounded))
+"/                  corner:(x2 @ (ypos + hEach - bwChild - 1) rounded).
+"/            advance := hEach
+"/        ] ifFalse:[
+"/            child origin:(xpos@ypos).
+"/            advance := child heightIncludingBorder
+"/        ].
+"/
+"/        index == numChilds ifTrue:[
+"/            |y|
+"/
+"/            (vL == #topFit or:[vL == #topSpaceFit]) ifTrue:[
+"/                y := height - margin - 1.
+"/                vL == #topSpaceFit ifTrue:[
+"/                    y := y - space
+"/                ].
+"/                child corner:x2 @ y
+"/            ].
+"/        ].
+"/        index == 1 ifTrue:[
+"/            (vL == #bottomFit or:[vL == #bottomSpaceFit]) ifTrue:[
+"/                ypos := margin + 0 + (child borderWidth * 2) - bw.
+"/                vL == #bottomSpaceFit ifTrue:[
+"/                    ypos := ypos + space
+"/                ].
+"/                advance := restHeight.
+"/                child origin:((child origin x) @ ypos)
+"/                      corner:((child corner x) @ (ypos+advance))
+"/            ].
+"/        ].
+"/
+"/        ypos := ypos + advance + space.
+"/        elementsChangeSize ifTrue:[
+"/            "reinstall dependency that we removed above"
+"/            child addDependent:self.
+"/        ].
+"/    ]
+
+    "Modified: / 04-09-1995 / 18:43:29 / claus"
+    "Modified: / 10-10-2007 / 13:47:56 / cg"
+! !
+
+!MultiColumnPanelView methodsFor:'queries'!
+
+preferredExtent
+    "return a good extent, one that makes subviews fit"
+
+    |maxHeight maxWidth maxWidthPerCol w m2 subViews col numCols rowsPerCol|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    subViews := self subViewsToConsider.
+    (subViews size == 0) ifTrue:[
+        ^ super preferredExtent.
+    ].
+
+    "compute net height needed"
+    numCols := columnWidths size.
+    rowsPerCol := Array new:numCols withAll:0.
+    maxWidthPerCol := Array new:numCols withAll:0.
+
+    maxHeight := 0.
+    col := 1.
+    subViews do:[:child |
+        |childsPreference|
+
+        childsPreference := child preferredExtent.
+        maxHeight := maxHeight max:childsPreference y.
+        maxWidthPerCol at:col put:((maxWidthPerCol at:col) max:childsPreference y).
+        rowsPerCol at:col put:(rowsPerCol at:col)+1.
+        col := col + 1.
+        col > numCols ifTrue:[ col := 1 ].
+    ].
+
+    self borderWidth ~~ 0 ifTrue:[
+        maxWidth := maxWidth + (horizontalSpace * 2).
+    ].
+
+"/    sumOfHeights := sumOfHeights + ((subViews size - 1) * verticalSpace).
+"/    ((vLayout == #topSpace) or:[vLayout == #bottomSpace]) ifTrue:[
+"/        sumOfHeights := sumOfHeights + verticalSpace
+"/    ] ifFalse:[
+"/        ((vLayout == #center) or:[vLayout == #spread]) ifTrue:[
+"/            sumOfHeights := sumOfHeights + (verticalSpace * 2)
+"/        ]
+"/    ].
+
+"/    ((hLayout == #leftSpace) or:[hLayout == #rightSpace]) ifTrue:[
+"/        maxWidth := maxWidth + horizontalSpace
+"/    ] ifFalse:[
+"/        ((hLayout == #fitSpace) or:[hLayout == #center]) ifTrue:[
+"/            maxWidth := maxWidth + (horizontalSpace * 2)
+"/        ]        
+"/    ].
+    m2 := margin * 2.
+"/    ^ (maxWidth + m2) @ (sumOfHeights + m2)
+
+    w := maxWidthPerCol inject:0 into:[:sumSoFar :thisWidth | sumSoFar + thisWidth].
+
+    ^ (w+m2) @ (rowsPerCol max * maxHeight) + m2
+
+    "Modified: / 17.1.1998 / 00:18:16 / cg"
+! !
+
+!MultiColumnPanelView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/MultiColumnPanelView.st,v 1.4 2013-04-25 13:10:34 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/MultiColumnPanelView.st,v 1.4 2013-04-25 13:10:34 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MultiSelectionInList.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,202 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SelectionInList subclass:#MultiSelectionInList
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Models'
+!
+
+!MultiSelectionInList class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Like a selectionInList, but allows for multiple selected items.
+    For use as a model for SelectionInListViews, with multipleSelectOk set to true.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!MultiSelectionInList methodsFor:'accessing-values'!
+
+selection
+    "return the selections value (i.e. the entry numbers in the list)"
+
+    |l s|
+
+    (     (l := self list) isNil                                "/ mhmh - no list; what should we do here ?
+      or:[(s := selectionIndexHolder value) size == 0]          "/ mhmh - can be nil ?
+    ) ifTrue:[
+        ^ self zeroIndex
+    ].
+
+    ^ s collect:[:index | l at:index ]
+
+    "Created: 26.10.1995 / 16:52:27 / cg"
+    "Modified: 20.4.1996 / 13:14:29 / cg"
+!
+
+selection:anObjectList 
+    "set the selection to be anObjectList."
+
+    |l indizes objList|
+
+    "/
+    "/ for your convenience: allow 0 and nil as empty
+    "/ selections
+    "/
+    anObjectList size == 0 ifTrue:[
+        (anObjectList isCollection or:[anObjectList isNil]) ifTrue:[
+            ^ self selectionIndex:#()
+        ].
+        objList := Array with:anObjectList
+    ] ifFalse:[
+        objList := anObjectList
+    ].
+
+    l := self list.
+    l isNil ifTrue:[^ self].   "/ mhmh - no list; what should we do here ?
+
+    indizes := OrderedCollection new.
+    objList do:[:o |
+        |idx|
+
+        idx := l indexOf:o ifAbsent:0.
+        idx ~~ 0 ifTrue:[
+            indizes add:idx
+        ].
+    ].
+    ^ self selectionIndex:indizes
+
+    "Created: 26.10.1995 / 16:40:24 / cg"
+    "Modified: 25.4.1996 / 09:07:44 / cg"
+!
+
+selectionIndex:indexes
+    "set the list of indexes"
+
+    |newIndices|
+
+    indexes size ~~ 0 ifTrue:[
+        newIndices := indexes.
+    ] ifFalse:[
+        indexes isNumber ifTrue:[
+            newIndices := OrderedCollection with:indexes    
+        ] ifFalse:[
+            newIndices := #()
+        ].
+    ].
+    ^ super selectionIndex:newIndices
+!
+
+selectionIndexes
+    "added for ST-80 compatibility
+    "
+    ^ self selectionIndex value
+!
+
+selectionIndexes:indizes
+    "added for ST-80 compatibility
+    "
+    ^ self selectionIndex:indizes
+! !
+
+!MultiSelectionInList methodsFor:'queries'!
+
+numberOfSelections
+    "return the number of selected entries
+    "
+    ^ selectionIndexHolder value size
+
+!
+
+zeroIndex
+    "return the selectionIndex returned when nothing is selected.
+     Here, an empty collection is returned."
+
+    ^ Array new
+
+    "Modified: 20.4.1996 / 13:12:58 / cg"
+! !
+
+!MultiSelectionInList methodsFor:'selections'!
+
+clearAll
+    "ST80 compatibility"
+
+    self selection:nil.
+!
+
+selectAll
+    "ST80 compatibility"
+
+    |indizes size|
+
+    (size := listHolder value size) == 0 ifTrue:[
+        ^ self clearAll
+    ].
+
+    indizes := Array new:size.
+    1 to:size do:[:i| indizes at:i put:i].
+    self selectionIndex:indizes.
+!
+
+selections
+    <resource: #obsolete>
+    "obsolete - almost the same as selection"
+
+    |selectionIndices|
+
+    self obsoleteMethodWarning.
+
+    selectionIndices := selectionIndexHolder value.
+    (selectionIndices isNil
+     or:[selectionIndices == 0     
+     or:[selectionIndices isEmpty]]) ifFalse:[
+        ^ selectionIndices collect:[:index | listHolder value at:index]
+    ].
+    ^ Array new
+
+    "Modified: 25.4.1996 / 09:09:45 / cg"
+!
+
+selections:aCollection
+    "ST80 compatibility"
+
+    ^ self selection:aCollection
+
+    "Created: / 8.11.1997 / 12:55:23 / cg"
+! !
+
+!MultiSelectionInList class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/MultiSelectionInList.st,v 1.18 2009-02-26 21:31:35 stefan Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ObjectView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,3541 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+View subclass:#ObjectView
+	instanceVariableNames:'contents sorted lastButt pressAction releaseAction
+		shiftPressAction ctrlPressAction doublePressAction motionAction
+		keyPressAction selection gridShown gridPixmap scaleMetric
+		dragObject leftHandCursor oldCursor movedObject moveStartPoint
+		moveDelta documentFormat canDragOutOfView rootMotion rootView
+		aligning gridAlign aligningMove inMotion buttonPressTime'
+	classVariableNames:'MIN_DELTA_FOR_MOVE TIME_DELTA_FOR_MOVE'
+	poolDictionaries:''
+	category:'Views-Basic'
+!
+
+!ObjectView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a View which can hold DisplayObjects, can make selections, move them around etc.
+    ObjectView is an abstract class providing common mechanisms (i.e. a blackBox framework,
+    to be used by concrete subclasses).
+    Actual instances are DrawView, DirectoryView, LogicView or DocumentView.
+
+    If you want to use this class, have a special look at the pluggable behavior, especially,
+    pressAction, releaseAction etc.:
+
+    [Instance variables:]
+
+        contents        <Collection>            the objects. The order in which
+                                                these are in that collection defines
+                                                their appearance in the z-plane:
+                                                an object located after another one
+                                                here will be drawn ABOVE the other.
+
+        sorted          <Boolean>               if set, redraw and picking methods
+                                                assume that the objects are sorted by 
+                                                >= y-coordinates. These operations are
+                                                a bit faster then, since a binary search
+                                                can be done. (use with care).
+
+        lastButt        <Point>                 last pointer press position
+                                                (internal)
+
+        pressAction     <Block>                 action to perform when mouse pointer
+                                                is pressed. Can be set to something like
+                                                [self startCreate], [self startSelectOrMove]
+                                                etc.
+
+        releaseAction   <Block>                 action to perform when mouse pointer is
+                                                released. Typically set in one of the
+                                                startXXX methods.
+
+        shiftPressAction        <Block>         like pressAction, if shift key is
+                                                pressed.
+
+        doublePressAction       <Block>         same for double-clicks
+
+        motionAction            <Block>         action to perform on mouse-pointer
+                                                motion.
+
+        keyPressAction          <Block>         action for keyboard events
+
+        selection               <any>           the current selection; either a single
+                                                object or a collection of objects.
+
+        gridShown               <Boolean>       internal
+
+        gridPixmap              <Form>          internal
+
+        scaleMetric             <Symbol>        either #mm or #inch; used to
+                                                decide how the grid is defined
+
+        dragObject                              internal
+
+        leftHandCursor                          cursor shown while dragging a rectangle
+
+        oldCursor                               saved original cursor while dragging a rectangle
+
+        movedObject                             internal
+        moveStartPoint                          internal
+        moveDelta                               internal
+
+        documentFormat          <Symbol>        defines the size and layout of the
+                                                document. Can be any of
+                                                #letter, #a4, #a3 etc.
+
+        canDragOutOfView        <Boolean>       if true, objects can be dragged out of the
+                                                view. If false, dragging is restricted to within
+                                                this view.
+
+        rootMotion                              internal
+        rootView                                internal
+
+        aligning                <Boolean>       if true, pointer positions are
+                                                aligned (snapped) to the point
+                                                specified in gridAlign
+
+        gridAlign               <Point>         if aligning is true, this point
+                                                defines the snapping. For example,
+                                                12@12 defines snap to the nearest
+                                                12-point grid.
+
+    written spring/summer 89 by claus
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DrawTool LogicTool
+        DrawObject
+        DisplayObject
+"
+!
+
+examples
+"
+    typically, ObjectViews are not used on their own, but instead
+    subclassed and thereby provide the common functionality for
+    views which show (possibly overlapping) objects.
+    The methods here provide all mechanisms to handle redraws, picking
+    (i.e. finding an object by position), gridding, moving objects with
+    minimum redraw etc.
+    Also, zooming and scrolling is handled.
+    All objects which respond to the DisplayObject protocol can be handled
+    by ObjectView - therefore, you can add almost any object and have it
+    displayed and handled here. (as an example, try to copy a LogicGate
+    from a LogicView and paste it into a DrawTool - it will work).
+
+    Reminder: ObjectViews are not to be used as below, but instead to be
+    subclassed. Therefore, the examples below are somewhat untypical.
+
+    simple example:
+                                                                        [exBegin]
+        |v o|
+
+        v := ObjectView new.
+        v extent:200@200.
+
+        o := DrawRectangle new.
+        o origin:10@10 corner:100@100.
+        v add:o.
+
+        o := DrawText new.
+        o text:'hello there'; origin:50@50; foreground:Color red.
+        v add:o.
+
+        v open
+                                                                        [exEnd]
+
+    add scrolling:
+                                                                        [exBegin]
+        |v top o|
+
+        top := HVScrollableView for:ObjectView.
+        top extent:200@200.
+        v := top scrolledView.
+
+        o := DrawRectangle new.
+        o origin:10@10 corner:100@100.
+        v add:o.
+
+        o := DrawText new.
+        o text:'hello there'; origin:50@50; foreground:Color red.
+        v add:o.
+
+        top open
+                                                                        [exEnd]
+
+    or, using miniscrollers:
+                                                                        [exBegin]
+        |v top o|
+
+        top := HVScrollableView for:ObjectView 
+                                miniScrollerH:true miniScrollerV:true.
+        top extent:200@200.
+        v := top scrolledView.
+
+        o := DrawRectangle new.
+        o origin:10@10 corner:100@100.
+        v add:o.
+
+        o := DrawText new.
+        o text:'hello there'; origin:50@50; foreground:Color red.
+        v add:o.
+
+        top open
+                                                                        [exEnd]
+
+    mix views and displayObjects:
+                                                                        [exBegin]
+        |v top o|
+
+        top := HVScrollableView for:ObjectView.
+        top extent:200@200.
+        v := top scrolledView.
+
+        o := DrawLine new.
+        o origin:10@10 corner:50@50.
+        v add:o.
+
+        o := ClockView in:top.
+        o origin:50@50 corner:100@100.
+        v add:o.
+
+        top open
+                                                                        [exEnd]
+
+    grid:
+                                                                        [exBegin]
+        |v top o|
+
+        top := HVScrollableView for:ObjectView 
+                                miniScrollerH:true miniScrollerV:true.
+        top extent:200@200.
+        v := top scrolledView.
+        v showGrid.
+
+        o := DrawRectangle new.
+        o origin:10@10 corner:100@100.
+        v add:o.
+
+        o := DrawText new.
+        o text:'hello there'; origin:50@50; foreground:Color red.
+        v add:o.
+
+        top open
+                                                                        [exEnd]
+
+    zoom:
+                                                                        [exBegin]
+        |v top o|
+
+        top := HVScrollableView for:ObjectView 
+                                miniScrollerH:true miniScrollerV:true.
+        top extent:200@200.
+        v := top scrolledView.
+        v showGrid.
+
+        o := DrawRectangle new.
+        o origin:10@10 corner:100@100.
+        v add:o.
+
+        o := DrawText new.
+        o text:'hello there'; origin:50@50; foreground:Color red.
+        v add:o.
+
+        top open.
+
+        Delay waitForSeconds:5.
+        v zoom:2.
+
+        Delay waitForSeconds:5.
+        v zoom:0.35.
+
+        Delay waitForSeconds:5.
+        v zoom:1.
+                                                                        [exEnd]
+
+   private benchmark: display 10000 objects ...
+                                                                        [exBegin]
+        |v top o rnd|
+
+        top := HVScrollableView for:ObjectView 
+                                miniScrollerH:true miniScrollerV:true.
+        top extent:200@200.
+        v := top scrolledView.
+
+        rnd := Random new.
+        10000 timesRepeat:[
+            o := DrawLine new.
+            o origin:(rnd nextIntegerBetween:0 and:700) @ (rnd nextIntegerBetween:0 and:700)
+              corner:(rnd nextIntegerBetween:0 and:700) @ (rnd nextIntegerBetween:0 and:700).
+            v add:o.
+        ].
+
+        top openAndWait.
+
+        Transcript showCR:(
+            Time millisecondsToRun:[
+                v redraw              
+            ])
+                                                                        [exEnd]
+"
+! !
+
+!ObjectView class methodsFor:'defaults'!
+
+handleSize
+    "size of blob drawn for handles"
+
+    ^ (Screen current horizontalPixelPerMillimeter * 1.2) rounded asInteger
+!
+
+hitDelta
+    "when clicking an object, allow for hitDelta pixels around object;
+     0 is exact; 1*pixelPerMillimeter is good for draw programs"
+
+    ^ 0
+!
+
+mouseMotionDeltaForMove
+    ^ MIN_DELTA_FOR_MOVE ? 10
+!
+
+mouseMotionTimeDeltaForMove
+    ^ TIME_DELTA_FOR_MOVE ? 500
+! !
+
+!ObjectView methodsFor:'accessing'!
+
+aligning
+    ^ aligning
+!
+
+aligningMove
+    ^ aligningMove
+!
+
+aligningMove:aBoolean
+
+    aligningMove == aBoolean ifTrue:[ ^ self ].
+    aBoolean ifTrue:[
+        aligning == true ifFalse:[ ^ self ].
+        gridAlign isNil ifTrue:[ ^ self ].
+    ].
+
+    aligningMove := aBoolean
+!
+
+contents
+    ^ contents
+
+    "Created: / 4.7.1999 / 15:15:15 / cg"
+!
+
+gridShown
+    ^ gridShown
+! !
+
+!ObjectView methodsFor:'accessing-behavior'!
+
+ctrlPressAction:aBlock
+    ctrlPressAction := aBlock
+
+    "Created: / 27-10-2006 / 14:06:41 / cg"
+!
+
+doublePressAction:aBlock
+    doublePressAction := aBlock
+
+    "Created: / 27-10-2006 / 14:06:49 / cg"
+!
+
+keyPressAction:aBlock
+    keyPressAction := aBlock
+!
+
+motionAction:aBlock
+    motionAction := aBlock
+!
+
+pressAction:aBlock
+    pressAction := aBlock
+
+    "Modified: / 27-10-2006 / 14:06:34 / cg"
+!
+
+releaseAction:aBlock
+    releaseAction := aBlock
+!
+
+setDefaultActions
+    "setup actions for default behavior (do - nothing)"
+
+    movedObject := nil.
+    inMotion := false.
+    motionAction := [:movePoint | nil].
+    releaseAction := [nil]
+
+    "Modified: / 4.7.1999 / 18:55:01 / cg"
+!
+
+shiftPressAction:aBlock
+    shiftPressAction := aBlock
+
+    "Created: / 27-10-2006 / 14:06:30 / cg"
+! !
+
+!ObjectView methodsFor:'adding & removing'!
+
+add:something
+    "add something, anObject or a collection of objects to the contents
+     with redraw"
+
+    self forEach:something do:[:anObject |
+	self addObject:anObject
+    ]
+!
+
+addObject:anObject
+    "add the argument, anObject to the contents - with redraw"
+
+    anObject notNil ifTrue:[
+        contents addLast:anObject.
+        self changed:#addObject with:anObject.
+        "its on top - only draw this one"
+        shown "realized" ifTrue:[
+            self showUnselected:anObject
+        ]
+    ]
+
+    "Modified: / 4.7.1999 / 16:50:24 / cg"
+!
+
+addObjectFirst:anObject
+    "add the argument, anObject to the beginning of the contents - with redraw"
+
+    anObject notNil ifTrue:[
+        contents addFirst:anObject.
+        self changed:#addObject.
+        "its on top - only draw this one"
+        shown "realized" ifTrue:[
+            self showUnselected:anObject
+        ]
+    ]
+
+    "Modified: / 4.7.1999 / 16:50:22 / cg"
+!
+
+addObjectFirstWithoutRedraw:anObject
+    "add the argument, anObject to the start of the contents - no redraw"
+
+    anObject notNil ifTrue:[
+        contents addFirst:anObject.
+        self changed:#addObject.
+    ]
+
+    "Modified: / 4.7.1999 / 16:50:19 / cg"
+!
+
+addObjectWithoutRedraw:anObject
+    "add the argument, anObject to the contents - no redraw"
+
+    anObject notNil ifTrue:[
+        contents addLast:anObject.
+        self changed:#addObject.
+    ]
+
+    "Modified: / 4.7.1999 / 16:50:16 / cg"
+!
+
+addSelected:something
+    "add something, anObject or a collection of objects to the contents
+     and select it"
+
+    self add:something.
+    self select:something
+!
+
+addWithoutRedraw:something
+    "add something, anObject or a collection of objects to the contents
+     do not redraw"
+
+    self forEach:something do:[:anObject |
+	self addObjectWithoutRedraw:anObject
+    ]
+!
+
+contents:aCollectionOfObjects
+    contents := aCollectionOfObjects.
+    self invalidate.
+!
+
+remove:something
+    "remove something, anObject or a collection of objects from the contents
+     do redraw"
+
+    something size > (contents size / 4) ifTrue:[
+        "
+         better to remove first, then redraw rest
+        "
+        self forEach:something do:[:anObject |
+            self removeFromSelection:anObject.
+            contents remove:anObject.
+            self changed:#removeObject with:anObject.
+        ].
+        self invalidate.
+        ^ self
+    ].
+
+    self forEach:something do:[:anObject |
+        self removeObject:anObject
+    ]
+
+    "Modified: / 4.7.1999 / 16:50:09 / cg"
+!
+
+removeAll
+    "remove all - redraw"
+
+    self removeAllWithoutRedraw.
+    self invalidate
+
+    "Modified: 29.5.1996 / 16:20:28 / cg"
+!
+
+removeAllWithoutRedraw
+    "remove all - no redraw"
+
+    contents := OrderedCollection new.
+    self changed:#removeObject.
+    selection notNil ifTrue:[
+        selection := nil.
+        self changed:#selection.
+    ].
+
+    "Modified: / 4.7.1999 / 16:50:43 / cg"
+!
+
+removeObject:anObject
+    "remove the argument, anObject from the contents - no redraw"
+
+    anObject notNil ifTrue:[
+        self removeFromSelection:anObject.
+        contents remove:anObject.
+        shown "realized" ifTrue:[
+            self redrawObjectsIn:(anObject frame)
+        ].
+        self changed:#removeObject with:anObject.
+    ]
+
+    "Modified: / 4.7.1999 / 16:50:49 / cg"
+!
+
+removeObjectWithoutRedraw:anObject
+    "remove the argument, anObject from the contents - no redraw"
+
+    anObject notNil ifTrue:[
+        self removeFromSelection:anObject.
+        contents remove:anObject.
+        self changed:#removeObject.
+    ]
+
+    "Modified: / 4.7.1999 / 16:50:58 / cg"
+!
+
+removeWithoutRedraw:something
+    "remove something, anObject or a collection of objects from the contents
+     do not redraw"
+
+    self forEach:something do:[:anObject |
+	self removeObjectWithoutRedraw:anObject
+    ]
+! !
+
+!ObjectView methodsFor:'cut & paste'!
+
+convertForPaste:anObject
+    "return a converted version of anObject to be pasted, or nil if
+     the object is not compatible with me.
+     Return nil here; concrete subclasses should try to convert.
+     Notice: anObject may be a collection of to-be-pasted objects."
+
+    "in concrete subclasses, you can use:"
+"
+    |s|
+
+    (anObject respondsTo:#asDisplayObject) ifTrue:[
+	^ anObject asDisplayObject
+    ].
+    (anObject isString or:[anObject isMemberOf:Text]) ifTrue:[
+    ].
+    anObject size > 0 ifTrue:[
+	(anObject inject:true into:[:okSoFar :element |
+	    okSoFar and:[element respondsTo:#asDisplayObject]
+	]) ifFalse:[
+	    self warn:'selection not convertable to DisplayObject'.
+	    ^ nil
+	].
+	^ anObject collect:[:element | element asDisplayObject].
+    ].
+"
+    ^ nil.
+!
+
+copySelection
+    "copy the selection into the cut&paste-buffer"
+
+    |tmp|
+
+    tmp := OrderedCollection new.
+    self selectionDo:[:object |
+        tmp add:(object copy)
+    ].
+"/    self forEach:tmp do:[:anObject |
+"/        anObject moveTo:(anObject origin + (8 @ 8))
+"/    ].
+    self setClipboardObject:tmp
+!
+
+cutSelection
+    "cut the selection into the cut&paste buffer"
+
+    |tmp|
+
+    tmp := selection.
+    tmp notNil ifTrue:[
+        self unselect.
+        self remove:tmp.
+        self setClipboardObject:tmp
+    ]
+
+    "Created: / 4.7.1999 / 15:07:59 / cg"
+    "Modified: / 4.7.1999 / 15:29:50 / cg"
+!
+
+deleteSelection
+    "delete the selection"
+
+    |tmp|
+
+    tmp := selection.
+    tmp notNil ifTrue:[
+        self unselect.
+        self remove:tmp.
+    ].
+
+    ^ tmp
+!
+
+paste:something
+    "add the objects in the cut&paste-buffer"
+
+    |s|
+
+    s := self convertForPaste:something .
+    s isNil ifTrue:[
+        self warn:(resources string:'selection not convertable').
+        ^ self
+    ].
+    self unselect.
+    self addSelected:s 
+!
+
+pasteBuffer
+    "add the objects in the paste-buffer"
+
+    |sel|
+
+    sel := self getClipboardObject.
+    ((Screen current platformName ~= 'X11')
+     or:[(self graphicsDevice getSelectionOwnerOf:#CLIPBOARD) == self drawableId])
+    ifTrue:[
+        "
+         a local selection - paste with some offset
+        "
+        sel size > 0 ifTrue:[
+            sel := sel collect:[:element |
+                element copy moveTo:(element origin + (8 @ 8))
+            ]
+        ] ifFalse:[
+            sel := sel copy moveTo:(sel origin + (8 @ 8))
+        ]
+    ].
+    self paste:sel
+
+    "Modified: / 4.7.1999 / 15:10:46 / cg"
+! !
+
+!ObjectView methodsFor:'dragging-line'!
+
+doLineDrag:aPoint
+    "do drag a line"
+
+    self invertDragLine.
+    dragObject corner:aPoint.
+    self invertDragLine.
+!
+
+endLineDrag
+    "cleanup after line drag; select them. Find the origin and destination
+     views and relative offsets, then dispatch to one of the endLineDrag methods.
+     These can be redefined in subclasses to allow connect between views."
+
+    |rootPoint viewId offs transformation2
+     lastViewId destinationId destinationView destinationPoint 
+     inMySelf dragOrigin|
+
+    self invertDragLine.
+
+    self cursor:oldCursor.
+
+    "check if line drag is into another view"
+    rootMotion ifTrue:[
+        |currentTransformation|
+
+        rootPoint := lastButt.
+        "
+         get device coordinates
+        "
+        currentTransformation := gc transformation.
+        currentTransformation notNil ifTrue:[
+            rootPoint := currentTransformation applyTo:rootPoint.
+        ].
+
+        "
+         translate to screen
+        "
+        offs := self graphicsDevice translatePoint:0@0 fromView:self toView:rootView.
+        rootPoint := rootPoint + offs.
+
+        "search view the drop is in"
+        viewId := rootView id.
+        [viewId notNil] whileTrue:[
+            destinationId := self graphicsDevice viewIdFromPoint:rootPoint in:viewId.
+            lastViewId := viewId.
+            viewId := destinationId
+        ].
+        destinationView := self graphicsDevice viewFromId:lastViewId.
+        destinationId := lastViewId.
+        inMySelf := (destinationView == self).
+        rootMotion := false
+    ] ifFalse:[
+        inMySelf := true
+    ].
+
+    dragObject isNil ifTrue:[^ self].
+
+    dragOrigin := dragObject origin.
+    inMySelf ifTrue:[
+        "a simple line within myself"
+        self lineDragFrom:dragOrigin to:dragObject corner
+    ] ifFalse:[
+        "into another one"
+        destinationView notNil ifTrue:[
+            destinationPoint := self graphicsDevice translatePoint:rootPoint fromView:rootView toView:destinationView.
+            (transformation2 := destinationView transformation) notNil ifTrue:[
+                destinationPoint := transformation2 applyInverseTo:destinationPoint
+            ].
+            "
+             move into another smalltalk view
+            "
+            self lineDragFrom:dragOrigin to:destinationPoint in:destinationView
+        ] ifFalse:[
+            "
+             not one of my views
+            "
+            self lineDragFrom:dragOrigin to:destinationPoint inAlienViewId:destinationId
+        ] 
+    ].
+    self setDefaultActions.
+    dragObject := nil
+
+    "Modified: / 10.10.2001 / 14:41:52 / cg"
+!
+
+invertDragLine
+    "helper for line dragging - invert the dragged line.
+     Extracted for easier redefinition in subclasses
+     (different line width etc.)"
+
+    |dragger offs p1 p2|
+
+    dragObject isNil ifTrue:[^ self].
+
+    p1 := dragObject origin.
+    p2 := dragObject corner.
+    rootMotion ifTrue:[
+        |currentTransformation|
+
+        dragger := rootView.
+        "
+         get device coordinates
+        "
+        currentTransformation := gc transformation.
+        currentTransformation notNil ifTrue:[
+            p1 := currentTransformation applyTo:p1.
+            p2 := currentTransformation applyTo:p2.
+        ].
+        "
+         translate to screen
+        "
+        offs := self graphicsDevice translatePoint:0@0 fromView:self toView:rootView.
+        p1 := p1 + offs.
+        p2 := p2 + offs.
+    ] ifFalse:[
+        dragger := self.
+    ].
+
+    dragger xoring:[
+        dragger lineWidth:0. 
+        dragger displayLineFrom:p1 to:p2.
+        dragger flush
+    ].
+
+    "Modified: / 10.10.2001 / 13:59:05 / cg"
+!
+
+lineDragFrom:startPoint to:endPoint
+    "this is called after a line-drag. Nothing is done here.
+     - should be redefined in subclasses"
+
+    ^ self
+!
+
+lineDragFrom:startPoint to:endPoint in:destinationView
+    "this is called after a line-drag crossing view boundaries.
+     - should be redefined in subclasses"
+
+    ^ self notify:'dont know how to connect to external views'
+!
+
+lineDragFrom:startPoint to:endPoint inAlienViewId:destinationId
+    "this is called after a line-drag with rootmotion set
+     to true, IFF the endpoint is in an alien view
+     - should be redefined in subclasses"
+
+    self notify:'cannot connect object in alien view'
+!
+
+setLineDragActions
+    "setup to drag a line. Call this (for example) from your buttonPress
+     method, to make the view start to drag a line.
+     See startLineDrag and startRootLineDrag."
+
+    motionAction := [:movePoint | self doLineDrag:movePoint].
+    releaseAction := [self endLineDrag]
+!
+
+startLineDrag:startPoint
+    "start a line drag within the view"
+
+    self setLineDragActions.
+    dragObject := Rectangle origin:startPoint corner:startPoint.
+    self invertDragLine.
+    oldCursor := cursor.
+    self cursor:leftHandCursor
+!
+
+startRootLineDrag:startPoint
+    "start a line drag possibly crossing my view boundaries"
+
+    self setLineDragActions.
+    rootMotion := true.
+    dragObject := Rectangle origin:startPoint corner:startPoint.
+    self invertDragLine.
+    oldCursor := cursor.
+    self cursor:leftHandCursor
+! !
+
+!ObjectView methodsFor:'dragging-object'!
+
+doObjectMove:aPoint
+    "do an object move - this is called for every motion
+     when moving objects."
+
+    |d org nOrg|
+
+    movedObject isNil ifTrue:[
+        movedObject := selection.
+        "
+         draw first outline
+        "
+        movedObject notNil ifTrue:[
+            moveDelta := 0@0.
+
+            "tricky, the moved object may not currently be aligned.
+             if so, simulate a frame move of the delta"
+
+            aligningMove ifTrue:[
+                org := movedObject origin.
+                d := org - (self alignToGrid:(org)).
+                moveDelta := d negated.
+            ].
+            self invertDragObject:movedObject delta:moveDelta    
+        ]
+    ].
+    moveStartPoint notNil ifTrue:[
+        movedObject notNil ifTrue:[
+            d := aPoint - moveStartPoint.
+            aligningMove ifTrue:[
+                org := movedObject origin.
+                nOrg := org + d.
+                d :=  (self alignToGrid:(nOrg)) - org.
+            ].
+            d ~= moveDelta ifTrue:[
+                "
+                 clear prev outline,
+                 draw new outline
+                "
+                self invertDragObject:movedObject delta:moveDelta.    
+                moveDelta :=  d.
+                self invertDragObject:movedObject delta:moveDelta    
+            ]
+        ]
+    ].
+!
+
+endObjectMove
+    "cleanup after object move - called when the object move ends.
+     Find the destination view and position and dispatch to
+     one of the moveObjectXXX-methods which should do the real move. 
+     These can be redefined in subclasses."
+
+    |inMySelf rootPoint destinationPoint p transformation2
+     viewId destinationView destinationId lastViewId|
+
+    movedObject notNil ifTrue:[
+        self invertDragObject:movedObject delta:moveDelta.    
+
+        "check if object is to be put into another view"
+        rootMotion ifTrue:[
+            |currentTransformation|
+
+            p := lastButt.
+            "
+             get device coordinates
+            "
+            currentTransformation := gc transformation.
+            currentTransformation notNil ifTrue:[
+                p := currentTransformation applyTo:p.
+            ].
+            "
+             translate to screen
+            "
+            rootPoint := p + (self graphicsDevice translatePoint:0@0 fromView:self toView:rootView).
+
+            "search view the drop is in"
+            viewId := rootView id.
+            [viewId notNil] whileTrue:[
+                destinationId := self graphicsDevice viewIdFromPoint:rootPoint in:viewId.
+                lastViewId := viewId.
+                viewId := destinationId
+            ].
+            destinationView := self graphicsDevice viewFromId:lastViewId.
+            destinationId := lastViewId.
+            inMySelf := (destinationView == self).
+            rootMotion := false
+        ] ifFalse:[
+            inMySelf := true
+        ].
+
+        inMySelf ifTrue:[
+            "simple move"
+            self move:movedObject by:moveDelta
+        ] ifFalse:[
+            destinationPoint := self graphicsDevice translatePoint:rootPoint        "/ use id here - could be alian view
+                                                 from:(rootView id) 
+                                                   to:destinationId.
+            destinationView notNil ifTrue:[
+                (transformation2 := destinationView transformation) notNil ifTrue:[
+                    destinationPoint := transformation2 applyInverseTo:destinationPoint
+                ].
+                "
+                 move into another smalltalk view
+                "
+                self move:movedObject to:destinationPoint in:destinationView
+            ] ifFalse:[
+                "
+                 not one of my views
+                "
+                self move:movedObject to:destinationPoint inAlienViewId:destinationId
+            ] 
+        ].
+        self setDefaultActions.
+        movedObject := nil.
+    ]
+
+    "Modified: / 10.10.2001 / 14:43:09 / cg"
+!
+
+invertDragObject:movedObject delta:moveDelta
+    "draw inverting for an object move"
+
+    |dragger offs p d scale oldTrans|
+
+    rootMotion ifTrue:[
+        |currentTransformation|
+        p := movedObject origin + moveDelta.
+        dragger := rootView.
+        "
+         get device coordinates
+        "
+        currentTransformation := gc transformation.
+        currentTransformation notNil ifTrue:[
+            scale := currentTransformation scale.
+            p := currentTransformation applyTo:p.
+        ].
+        "
+         translate to screen
+        "
+        offs := self graphicsDevice translatePoint:0@0 fromView:self toView:rootView.
+        p := p + offs.
+        "
+         p is where we want it ...
+         have to adust slightly, since showDragging shows the object
+         at its origin plus some offset; here we want it to be drawn
+         at absolute p.
+         To do so, we set the draggers translation to p and
+         draw the object scaled at 0@0 (by setting offset to its negative org)
+        "
+
+        oldTrans := dragger transformation.
+        dragger transformation:(WindowingTransformation 
+                                        scale:scale
+                                        translation:p).
+        d := movedObject origin negated.
+
+        dragger xoring:[
+            self showDragging:movedObject offset:d.
+        ].
+
+        dragger transformation:oldTrans.
+        dragger flush.
+    ] ifFalse:[
+        self xoring:[
+            self showDragging:movedObject offset:moveDelta.
+        ].
+        self flush
+    ].
+
+    "Modified: / 10.10.2001 / 13:59:19 / cg"
+!
+
+setMoveActions
+    "setup to drag an object. Call this (for example) from your buttonPress
+     method, to make the view start to drag some object.
+     See startObjectMove and startRootObjectMove."
+
+    |didStartMove|
+
+    didStartMove := false.
+    motionAction := [:movePoint | 
+                        didStartMove := true. 
+                        self doObjectMove:movePoint
+                    ].
+    releaseAction := [ didStartMove 
+                        ifTrue:[ self endObjectMove ] 
+                        ifFalse:[self setDefaultActions]
+                     ]
+!
+
+startObjectMove:something at:aPoint
+    "start an object move"
+
+    self startObjectMove:something at:aPoint inRoot:canDragOutOfView 
+!
+
+startObjectMove:something at:aPoint inRoot:inRoot
+    "start an object move; if inRoot is true, view
+     boundaries may be crossed."
+
+    something notNil ifTrue:[
+        (self canSelect:something) ifTrue:[
+            self select:something.
+            (self canMove:something) ifTrue:[
+                self setMoveActions.
+                moveStartPoint := aPoint.
+                rootMotion := inRoot.
+            ] ifFalse:[
+                self setDefaultActions
+            ]
+        ] ifFalse:[
+            self setDefaultActions
+        ]
+    ]
+
+    "Modified: / 27-10-2006 / 14:32:12 / cg"
+!
+
+startRootObjectMove:something at:aPoint
+    "start an object move, possibly crossing view boundaries"
+
+    self startObjectMove:something at:aPoint inRoot:true 
+! !
+
+!ObjectView methodsFor:'dragging-rectangle'!
+
+doRectangleDrag:aPoint
+    "do drag a rectangle"
+
+    self invertDragRectangle.
+    dragObject corner:aPoint.
+    self invertDragRectangle.
+!
+
+endRectangleDrag
+    "cleanup after rectangle drag; select them"
+
+    self invertDragRectangle.
+    self cursor:oldCursor.
+    dragObject width < 0 ifTrue:[
+        dragObject 
+                origin:(dragObject origin + (dragObject width@0))
+                corner:(dragObject corner - (dragObject width@0))
+    ].
+    dragObject height < 0 ifTrue:[
+        dragObject 
+                origin:(dragObject origin + (0@dragObject height))
+                corner:(dragObject corner - (0@dragObject height))
+    ].
+    self selectAllIn:dragObject.
+
+    releaseAction := nil.
+
+    "Modified: / 27-10-2006 / 14:21:11 / cg"
+!
+
+invertDragRectangle
+    "helper for rectangle drag - invert the dragRectangle.
+     Extracted into a separate method to allow easier redefinition
+     (different lineWidth etc)"
+
+    self clippedByChildren:false.
+
+    self xoring:[
+        self lineWidth:0. 
+"/        self lineStyle:#dashed.
+        self displayRectangle:dragObject.
+"/        self lineStyle:#solid.
+    ].
+
+    self clippedByChildren:true.
+
+    "Modified: 3.6.1996 / 10:02:22 / cg"
+!
+
+setRectangleDragActions
+    "setup to drag a rectangle. Call this (for example) from your buttonPress
+     method, to make the view start the drag.
+     See startRectangleDrag:."
+
+    motionAction := [:movePoint | self doRectangleDrag:movePoint].
+    releaseAction := [self endRectangleDrag]
+!
+
+startRectangleDrag:startPoint
+    "start a rectangle drag"
+
+    lastButt := startPoint.
+    self setRectangleDragActions.
+    dragObject := Rectangle origin:startPoint corner:startPoint.
+    self invertDragRectangle.
+    oldCursor := cursor.
+    self cursor:leftHandCursor
+! !
+
+!ObjectView methodsFor:'drawing'!
+
+redraw
+    "redraw complete View"
+
+    shown ifTrue:[
+        self clearView.
+        self redrawObjects
+    ]
+!
+
+redrawObjects
+    "redraw all objects"
+
+    self redrawObjectsOn:self
+!
+
+redrawObjectsAbove:anObject in:aRectangle
+    "redraw all objects which have part of themselfes in aRectangle
+     and are above (in front of) anObject.
+     draw only in (i.e. clip output to) aRectangle"
+
+    |vis oldClip|
+
+    shown ifTrue:[
+        vis := aRectangle.
+        oldClip := self clippingBoundsOrNil.
+        oldClip notNil ifTrue:[
+            vis := vis intersect:oldClip
+        ].
+        self clippingRectangle:vis.
+
+        self redrawObjectsAbove:anObject intersecting:vis.
+
+        self clippingRectangle:oldClip
+    ]
+
+    "Modified: 28.5.1996 / 19:57:06 / cg"
+!
+
+redrawObjectsAbove:anObject inVisible:aRectangle
+    "redraw all objects which have part of themselfes in a vis rectangle
+     and are above (in front of) anObject.
+     draw only in (i.e. clip output to) aRectangle"
+
+    |vis oldClip|
+
+    shown ifTrue:[
+        vis := aRectangle.
+        oldClip := self clippingBoundsOrNil.
+        oldClip notNil ifTrue:[
+            vis := vis intersect:oldClip
+        ].
+        self clippingRectangle:vis.
+
+        self redrawObjectsAbove:anObject intersectingVisible:vis.
+
+        self clippingRectangle:oldClip
+    ]
+
+    "Modified: 28.5.1996 / 19:56:44 / cg"
+!
+
+redrawObjectsAbove:anObject intersecting:aRectangle
+    "redraw all objects which have part of themself in aRectangle
+     and are above (in front of) anObject"
+
+    self objectsAbove:anObject intersecting:aRectangle do:[:theObject |
+	self show:theObject
+    ]
+!
+
+redrawObjectsAbove:anObject intersectingVisible:aRectangle
+    "redraw all objects which have part of themself in a vis rectangle
+     and are above (in front of) anObject"
+
+    self objectsAbove:anObject intersectingVisible:aRectangle do:[:theObject |
+	self show:theObject
+    ]
+!
+
+redrawObjectsIn:aRectangle
+    "redraw all objects which have part of themselfes in aRectangle
+     draw only in (i.e. clip output to) aRectangle"
+
+    |visRect oldClip|
+
+    shown ifTrue:[
+        visRect := Rectangle origin:(aRectangle origin)
+                             extent:(aRectangle extent).
+"/        transformation notNil ifTrue:[
+            visRect := visRect origin truncated
+                       corner:(visRect corner + (1@1)) truncated.
+"/        ].
+        oldClip := self clippingBoundsOrNil.
+        oldClip notNil ifTrue:[
+            visRect := visRect intersect:oldClip
+        ].
+        self clippingRectangle:visRect.
+
+        self clearRectangle:visRect.
+        self redrawObjectsIntersecting:visRect.
+
+        self clippingRectangle:oldClip
+    ]
+
+    "Modified: 28.5.1996 / 19:56:20 / cg"
+!
+
+redrawObjectsInVisible:visRect
+    "redraw all objects which have part of themselfes in a vis rectangle
+     draw only in (i.e. clip output to) aRectangle"
+
+    |vis oldClip|
+
+    shown ifTrue:[
+        vis := visRect.
+        oldClip := self clippingBoundsOrNil.
+        oldClip notNil ifTrue:[
+            vis := vis intersect:oldClip
+        ].
+
+        gc transformation notNil ifTrue:[
+"/            gc transformation scale ~~ 1 ifTrue:[
+                vis := vis origin truncated
+                           corner:(vis corner + (1@1)) truncated.
+"/            ]
+        ].
+
+        self clippingRectangle:vis.
+
+        "/ no clear background; already done in redrawX:y:width:height:
+        "/ self clearRectangle:vis.
+
+        self redrawObjectsIntersecting:vis.
+
+        self clippingRectangle:oldClip
+    ]
+
+    "Modified: 28.5.1996 / 19:55:47 / cg"
+!
+
+redrawObjectsIntersecting:aRectangle
+    "redraw all objects which have part of themself in aRectangle"
+
+    self objectsIntersecting:aRectangle do:[:theObject |
+	self show:theObject
+    ]
+!
+
+redrawObjectsIntersectingVisible:aRectangle
+    "redraw all objects which have part of themself in a vis rectangle
+     This is a leftOver from times when scrolling was not transparent.
+     Please use redrawObjectsIntersecting:, since this will vanish."
+
+    self redrawObjectsIntersecting:aRectangle
+!
+
+redrawObjectsOn:aGC
+    "redraw all objects on a graphic context"
+
+    |vFrame|
+
+    (aGC == self) ifTrue:[
+        |currentTransformation|
+
+        shown ifFalse:[^ self].
+        vFrame := Rectangle left:0 top:0 width:width height:height.
+
+        currentTransformation := gc transformation.
+        currentTransformation notNil ifTrue:[
+            vFrame := currentTransformation applyInverseTo:vFrame.
+        ].
+        self redrawObjectsIntersecting:vFrame
+    ] ifFalse:[
+        "should loop over pages"
+
+        vFrame := Rectangle left:0 top:0 width:9999 height:9999.
+
+        self objectsIntersecting:vFrame do:[:theObject |
+            theObject drawIn:aGC
+        ]
+    ]
+
+    "Modified: 8.5.1996 / 21:01:27 / cg"
+!
+
+redrawScale
+    "redraw the scales"
+
+    self redrawHorizontalScale.
+    self redrawVerticalScale
+!
+
+show:anObject
+    "show the object, either selected or not"
+
+    (self isSelected:anObject) ifTrue:[
+	self showSelected:anObject
+    ] ifFalse:[
+	self showUnselected:anObject
+    ]
+!
+
+showDragging:something offset:anOffset
+    "show an object while dragging"
+
+    |drawer|
+
+    rootMotion ifTrue:[
+	"drag in root-window"
+
+	drawer := rootView
+    ] ifFalse:[
+	drawer := self
+    ].
+    self forEach:something do:[:anObject |
+	anObject drawDragIn:drawer offset:anOffset
+    ]
+!
+
+showSelected:anObject
+    "show an object as selected"
+
+    anObject drawSelectedIn:self
+!
+
+showUnselected:anObject
+    "show an object as unselected"
+
+    anObject isView ifFalse:[
+        anObject drawIn:self
+    ]
+! !
+
+!ObjectView methodsFor:'enumerating'!
+
+contentsDo:aBlock
+    contents do:aBlock
+! !
+
+!ObjectView methodsFor:'event handling'!
+
+buttonCtrlPress:button x:x y:y
+    "user pressed left button with ctrl"
+
+    ctrlPressAction notNil ifTrue:[
+        ctrlPressAction value:lastButt.
+    ]
+!
+
+buttonMotion:buttonState x:buttX y:buttY
+    "user moved mouse while button pressed"
+
+    |xpos ypos movePoint limitW limitH minDeltaForMotion currentTransformation|
+
+    "is it the select or 1-button ?"
+    buttonState == 0 ifTrue:[^ self].
+    self sensor leftButtonPressed ifFalse:[^ self].
+
+    lastButt notNil ifTrue:[
+        xpos := buttX.
+        ypos := buttY.
+
+        "check against visible limits if move outside is not allowed"
+        rootMotion ifFalse:[
+            limitW := width.
+            limitH := height.
+            currentTransformation := gc transformation.
+            currentTransformation notNil ifTrue:[
+                limitW := currentTransformation applyInverseToX:width.
+                limitH := currentTransformation applyInverseToY:height.
+            ].
+
+            (xpos < 0) ifTrue:[                    
+                xpos := 0
+            ] ifFalse: [
+                (xpos > limitW) ifTrue:[xpos := limitW]
+            ].
+            (ypos < 0) ifTrue:[                    
+                ypos := 0
+            ] ifFalse: [
+                (ypos > limitH) ifTrue:[ypos := limitH]
+            ]
+        ].
+
+        movePoint := xpos @ ypos.
+
+        "/ if the motion is more than mouseMotionDeltaForMove
+        "/ or the time-delta is longer than timeDeltaForMove
+        buttonPressTime notNil ifTrue:[
+            (Timestamp now millisecondDeltaFrom:buttonPressTime) > self class mouseMotionTimeDeltaForMove ifFalse:[
+                inMotion == true ifTrue:[
+                    minDeltaForMotion := 1
+                ] ifFalse:[
+                    minDeltaForMotion := self class mouseMotionDeltaForMove
+                ].
+                currentTransformation := gc transformation.
+                currentTransformation notNil ifTrue:[
+                    minDeltaForMotion := currentTransformation applyInverseToX:minDeltaForMotion.
+                ].
+                ((xpos - (lastButt x)) abs < minDeltaForMotion
+                and:[ (ypos - (lastButt y)) abs < minDeltaForMotion]) ifTrue:[
+                    ^ self      "no (ignored) move"
+                ].
+            ].
+        ].
+
+        motionAction notNil ifTrue:[
+            self sensor motionEventPending ifFalse:[
+                inMotion := true.
+                motionAction value:movePoint.
+                lastButt := movePoint.
+            ].
+            ^ self
+        ].
+        lastButt := movePoint
+    ].
+    super buttonMotion:buttonState x:buttX y:buttY
+
+    "Modified: / 28.7.1998 / 16:01:31 / cg"
+!
+
+buttonMultiPress:button x:x y:y
+    "user pressed left button twice (or more)"
+
+    (button == 1) ifTrue:[
+        doublePressAction notNil ifTrue:[
+            doublePressAction value:(x @ y).
+            ^ self
+        ]
+    ].
+    super buttonMultiPress:button x:x y:y
+
+    "Modified: 30.5.1996 / 17:57:36 / cg"
+!
+
+buttonPress:button x:x y:y
+    "user pressed left button"
+
+    |sensor|
+
+    (button == 1) ifTrue:[
+        lastButt := x @ y.
+        buttonPressTime := Timestamp now.
+        sensor := self sensor.
+        sensor shiftDown ifTrue:[
+            ^ self buttonShiftPress:button x:x y:y
+        ].
+        sensor ctrlDown ifTrue:[
+            ^ self buttonCtrlPress:button x:x y:y
+        ].
+
+        pressAction notNil ifTrue:[
+            pressAction value:lastButt.
+            ^ self
+        ]
+    ].
+    super buttonPress:button x:x y:y
+
+    "Modified: 1.8.1996 / 19:13:01 / cg"
+!
+
+buttonRelease:button x:x y:y
+    inMotion := false.
+
+    (button == 1) ifTrue:[
+        releaseAction notNil ifTrue:[
+            releaseAction value.
+            ^ self
+        ]
+    ].
+    super buttonRelease:button x:x y:y
+
+    "Modified: 30.5.1996 / 17:57:13 / cg"
+!
+
+buttonShiftPress:button x:x y:y
+    "user pressed left button with shift"
+
+    shiftPressAction notNil ifTrue:[
+        shiftPressAction value:lastButt.
+    ]
+
+    "Modified: 1.8.1996 / 19:13:19 / cg"
+!
+
+keyPress:key x:x y:y
+    keyPressAction notNil ifTrue:[
+        selection notNil ifTrue:[
+            self selectionDo: [:obj |
+                obj keyInput:key .
+            ]
+        ].
+        ^ self.
+    ].
+    super keyPress:key x:x y:y
+
+    "Modified: 30.5.1996 / 17:57:54 / cg"
+!
+
+redrawX:x y:y width:w height:h
+    |redrawFrame |
+
+"/    self clearRectangle:redrawFrame.
+    super redrawX:x y:y width:w height:h.
+
+    ((contents size ~~ 0) or:[gridShown]) ifTrue:[
+        redrawFrame := Rectangle left:x top:y width:w height:h.
+        self redrawObjectsInVisible:redrawFrame
+    ]
+
+    "Modified: 5.6.1996 / 10:42:19 / cg"
+! !
+
+!ObjectView methodsFor:'focus control'!
+
+wantsFocusWithPointerEnter
+    ^ UserPreferences current focusFollowsMouse ~~ false
+
+
+! !
+
+!ObjectView methodsFor:'grid manipulation'!
+
+alignOff
+    "do no align point to grid"
+
+    aligning := false
+!
+
+alignOn
+    "align points to grid"
+
+    aligning := true.
+    self getAlignParameters
+!
+
+defineGrid
+    "define the grid pattern - this creates the gridPixmap, which is
+     used as viewBackground when a grid is to be shown.
+     The grid is specified by the value returned from gridParameters,
+     which can be redefined in subclasses. See the comment there on how
+     the numbers are interpreted."
+
+    |mmH mmV params showDocumentBoundary gridW gridH 
+     bigStepH bigStepV littleStepH littleStepV hires 
+     devPixmap colorMap fg bg currentTransformation|
+
+    mmH := self horizontalPixelPerMillimeter.
+    mmV := self verticalPixelPerMillimeter.
+    hires := self horizontalPixelPerInch > 120.
+
+    params := self gridParameters.
+
+    bigStepH := params at:1.
+    bigStepV := params at:2.
+    littleStepH := params at:3.
+    littleStepV := params at:4.
+    showDocumentBoundary := params at:7.
+    fg := self blackColor.
+    bg := self whiteColor.
+    params size >= 8 ifTrue:[
+        bg := params at:8.
+        params size >= 9 ifTrue:[
+            fg := params at:9.
+        ].
+    ].
+
+    currentTransformation := gc transformation.
+    currentTransformation notNil ifTrue:[
+        mmH := mmH * currentTransformation scale x.
+        mmV := mmV * currentTransformation scale y.
+        bigStepH := bigStepH * currentTransformation scale x.
+        bigStepV := bigStepV * currentTransformation scale y.
+        littleStepH notNil ifTrue:[
+            littleStepH := littleStepH * currentTransformation scale x.
+        ].
+        littleStepV notNil ifTrue:[
+            littleStepV := littleStepV * currentTransformation scale y.
+        ].
+    ].
+
+    bigStepH isNil ifTrue:[^ self].
+
+    gridW := (self widthOfContentsInMM * mmH).
+    gridH := (self heightOfContentsInMM * mmV).
+
+    self withWaitCursorDo:[
+        |xp yp y x|
+
+        ((bigStepH isInteger and:[littleStepH isNil or:[littleStepH isInteger]])
+        and:[(bigStepV isInteger and:[littleStepV isNil or:[littleStepV isInteger]])]) ifTrue:[
+            gridW := bigStepH.
+            littleStepH notNil ifTrue:[gridW := gridW max:littleStepH].
+            gridH := bigStepV.
+            littleStepV notNil ifTrue:[gridH := gridH max:littleStepV].
+        ] ifFalse:[
+
+            "
+             up to next full unit
+            "
+            gridW := ((gridW // bigStepH) + 1 * bigStepH) asInteger.
+            gridH := ((gridH // bigStepV) + 1 * bigStepV) asInteger.
+        ].
+
+        gridPixmap := Form width:gridW height:gridH depth:1.
+        gridPixmap colorMap:(Array with:bg with:fg).
+        gridPixmap clear.
+        gridPixmap paint:(Color colorId:1).
+
+        "draw first row point-by-point"
+        yp := 0.0.
+        xp := 0.0.
+        y := yp asInteger.
+        [xp <= gridW] whileTrue:[
+            x := xp rounded.
+            hires ifTrue:[
+                gridPixmap displayPointX:(x + 1) y:y.
+                gridPixmap displayPointX:(x + 2) y:y
+            ].
+            gridPixmap displayPointX:x y:y.
+            littleStepH notNil ifTrue:[
+                xp := xp + littleStepH
+            ] ifFalse:[
+                xp := xp + bigStepH
+            ]
+        ].
+
+        "copy rest from what has been drawn already"
+        yp := yp + bigStepV.
+        [yp <= gridH] whileTrue:[
+            y := yp rounded.
+            hires ifTrue:[
+                gridPixmap copyFrom:gridPixmap x:0 y:0 
+                                             toX:0 y:(y + 1)
+                                           width:gridW height:1.
+                gridPixmap copyFrom:gridPixmap x:0 y:0 
+                                             toX:0 y:(y + 2)
+                                           width:gridW height:1
+            ].
+            gridPixmap copyFrom:gridPixmap x:0 y:0 
+                                         toX:0 y:y
+                                       width:gridW height:1.
+            yp := yp + bigStepV
+        ].
+
+        "draw first col point-by-point"
+        xp := 0.0.
+        yp := 0.0.
+        x := xp asInteger.
+        [yp <= gridH] whileTrue:[
+            y := yp rounded.
+            hires ifTrue:[
+                gridPixmap displayPointX:x y:(y + 1).
+                gridPixmap displayPointX:x y:(y + 2)
+            ].
+            gridPixmap displayPointX:x y:y.
+            littleStepV notNil ifTrue:[
+                yp := yp + littleStepV
+            ] ifFalse:[
+                yp := yp + bigStepV
+            ]
+        ].
+
+        "copy rest from what has been drawn already"
+        xp := xp + bigStepH.
+        [xp <= gridW] whileTrue:[
+            x := xp rounded.
+            hires ifTrue:[
+                gridPixmap copyFrom:gridPixmap x:0 y:0 
+                                             toX:(x + 1) y:0
+                                           width:1 height:gridH.
+                gridPixmap copyFrom:gridPixmap x:0 y:0 
+                                             toX:(x + 2) y:0
+                                           width:1 height:gridH
+            ].
+            gridPixmap copyFrom:gridPixmap x:0 y:0 
+                                         toX:x y:0
+                                       width:1 height:gridH.
+            xp := xp + bigStepH
+        ].
+
+        showDocumentBoundary ifTrue:[
+             "
+             mark the right-end and bottom of the document
+            "
+            gridPixmap displayLineFromX:gridW-1 y:0 toX:gridW-1 y:gridH-1.
+            gridPixmap displayLineFromX:0 y:gridH-1 toX:gridW-1 y:gridH-1.
+        ].
+
+        self graphicsDevice isWindowsPlatform ifTrue:[
+            "/ kludge - needs a deep form
+            colorMap := gridPixmap colorMap.
+            devPixmap := Form width:gridW height:gridH depth:self graphicsDevice depth onDevice:self graphicsDevice.
+            devPixmap notNil ifTrue:[
+                devPixmap paint:(colorMap at:1).
+                devPixmap fillRectangleX:0 y:0 width:gridW height:gridH.
+                devPixmap foreground:(colorMap at:2) background:(colorMap at:1).
+                devPixmap copyPlaneFrom:gridPixmap x:0 y:0 toX:0 y:0 width:gridW height:gridH.
+                gridPixmap := devPixmap.
+            ]
+        ].
+    ]
+
+    "Modified: / 6.6.1999 / 01:00:16 / cg"
+!
+
+getAlignParameters
+    |params|
+
+    params := self gridParameters.
+    gridAlign := (params at:5) @ (params at:6)
+!
+
+gridParameters
+    "used by defineGrid, and in a separate method for
+     easier redefinition in subclasses. 
+     Returns the grid parameters in an array of 7 elements,
+     which control the appearance of the grid-pattern.
+     the elements are:
+
+        bigStepH        number of pixels horizontally between 2 major steps
+        bigStepV        number of pixels vertically between 2 major steps
+        littleStepH     number of pixels horizontally between 2 minor steps
+        littleStepV     number of pixels vertically between 2 minor steps
+        gridAlignH      number of pixels for horizontal grid align (pointer snap)
+        gridAlignV      number of pixels for vertical grid align (pointer snap)
+        docBounds       true, if document boundary should be shown
+        bgColor         grid bg-color [optional]
+        fgColor         grid fg-color [optional]
+
+     if littleStepH/V are nil, only bigSteps are drawn.
+    "
+
+    |mmH mmV bigStepH bigStepV littleStepH littleStepV arr currentTransformation|
+
+    "example: 12grid & 12snapIn"
+"/    ^ #(12 12 nil nil 12 12 false).
+
+    "example: 12grid & 24snapIn"
+"/    ^ #(12 12 nil nil 24 24 false).
+
+    "default: cm/mm grid & mm snapIn for metric,
+     1inch , 1/8inch grid & 1/8 inch snapIn"
+
+    mmH := self horizontalPixelPerMillimeter.
+    mmV := self verticalPixelPerMillimeter.
+    currentTransformation := gc transformation.
+
+    "
+     metric grid: small steps every millimeter, big step every
+     centimeter. If the transformation is shrinking, turn off little
+     steps.
+    "
+    (scaleMetric == #mm) ifTrue:[
+        "dots every mm; lines every cm"
+        bigStepH := mmH * 10.0.
+        bigStepV := mmV * 10.0.
+        (currentTransformation notNil
+        and:[currentTransformation scale <= 0.5]) ifFalse:[
+            littleStepH := mmH.
+            littleStepV := mmV
+        ]
+    ].
+    "
+     inch grid: small steps every 1/8th inch, big step every half inch
+     If the transformation is shrinking, change little steps to 1/th inch
+     or even turn them off completely.
+    "
+    (scaleMetric == #inch) ifTrue:[
+        "dots every eights inch; lines every half inch"
+        bigStepH := mmH * (25.4 / 2).
+        bigStepV := mmV * (25.4 / 2).
+        (currentTransformation notNil
+        and:[currentTransformation scale <= 0.5]) ifTrue:[
+            currentTransformation scale > 0.2 ifTrue:[
+                littleStepH := mmH * (25.4 / 4).
+                littleStepV := mmV * (25.4 / 4)
+            ]
+        ] ifFalse:[
+            littleStepH := mmH * (25.4 / 8).
+            littleStepV := mmV * (25.4 / 8)
+        ]
+    ].
+
+    arr := Array new:9.
+    arr at:1 put:bigStepH.
+    arr at:2 put:bigStepV.
+    arr at:3 put:littleStepH.
+    arr at:4 put:littleStepV.
+    arr at:5 put:littleStepH.
+    arr at:6 put:littleStepV.
+    arr at:7 put:false.
+    arr at:8 put:self whiteColor.
+    arr at:9 put:self blackColor.
+
+    ^ arr
+!
+
+hideGrid
+    "hide the grid"
+
+    gridShown := false.
+    self newGrid
+!
+
+newGrid
+    "define a new grid - this is a private helper which has to be
+     called after any change in the grid. It (re)creates the gridPixmap,
+     clears the view and redraws all visible objects."
+
+    |params bg|
+
+    gridPixmap := nil.
+    shown ifTrue:[
+        params := self gridParameters.
+        bg := self whiteColor.
+        params size >= 8 ifTrue:[
+            bg := params at:8.
+        ].
+
+        self viewBackground:bg.
+        self clearView.
+    ].
+
+    gridShown ifTrue:[
+        self defineGrid.
+        self viewBackground:gridPixmap.
+    ].
+
+    self invalidate
+
+    "Modified: 29.5.1996 / 16:20:11 / cg"
+!
+
+showGrid
+    "show the grid. The grid is defined by the return value of
+     gridParameters, which can be redefined in concrete subclasses."
+
+    gridShown := true.
+    self newGrid
+! !
+
+!ObjectView methodsFor:'initialization'!
+
+initEvents
+"/    self backingStore:true.
+!
+
+initialize
+    super initialize.
+
+    viewBackground := self whiteColor.
+
+    bitGravity := #NorthWest.
+    contents := OrderedCollection new.
+    gridShown := false.
+
+    canDragOutOfView := false.
+    rootView := self graphicsDevice rootView.
+    rootView clippedByChildren:false.
+    rootMotion := false.
+    self setInitialDocumentFormat.
+
+    leftHandCursor := Cursor leftHand.
+    sorted := false.
+    aligning := false.
+    aligningMove := false.
+    inMotion := false.
+
+    "Modified: 20.1.1997 / 20:41:10 / cg"
+!
+
+setInitialDocumentFormat
+    (UserPreferences current languageTerritory == #us) ifTrue:[
+        documentFormat := 'letter'.
+        scaleMetric := #inch
+    ] ifFalse:[
+        documentFormat := 'a4'.
+        scaleMetric := #mm
+    ].
+! !
+
+!ObjectView methodsFor:'layout manipulation'!
+
+alignBottom:something
+    |botMost|
+
+    botMost := -999999.
+    self forEach:something do:[:anObject |
+	botMost := botMost max:(anObject frame bottom)
+    ].
+    self withSelectionHiddenDo:[
+	self forEach:something do:[:anObject |
+	    self moveObject:anObject to:(anObject frame left)
+					@
+					(botMost - (anObject frame height))
+	]
+    ]
+!
+
+alignHorizontal:something
+    "align selection along their center horizontally"
+
+    |topMost bottomMost h|
+
+    topMost := 999999.
+    bottomMost := -999999.
+    self forEach:something do:[:anObject |
+        |f|
+        f := anObject frame.
+        topMost := topMost min:(f top).
+        bottomMost := bottomMost max:(f bottom).
+    ].
+    h := bottomMost - topMost.
+
+    self withSelectionHiddenDo:[
+        self forEach:something do:[:anObject |
+            self moveObject:anObject 
+                         to:(anObject frame left)
+                            @
+                            (topMost + ((h - anObject frame height) // 2))
+        ]
+    ]
+
+    "Created: 4.6.1996 / 20:01:19 / cg"
+    "Modified: 4.6.1996 / 21:19:48 / cg"
+!
+
+alignLeft:something
+    |leftMost|
+
+    leftMost := 999999.
+    self forEach:something do:[:anObject |
+	leftMost := leftMost min:(anObject frame left)
+    ].
+    self withSelectionHiddenDo:[
+	self forEach:something do:[:anObject |
+	    self moveObject:anObject to:(leftMost @ (anObject frame top))
+	]
+    ]
+!
+
+alignRight:something
+    |rightMost|
+
+    rightMost := -999999.
+    self forEach:something do:[:anObject |
+	rightMost := rightMost max:(anObject frame right)
+    ].
+    self withSelectionHiddenDo:[
+	self forEach:something do:[:anObject |
+	    self moveObject:anObject to:(rightMost - (anObject frame width))
+					 @ (anObject frame top)
+	]
+    ]
+!
+
+alignTop:something
+    |topMost|
+
+    topMost := 999999.
+    self forEach:something do:[:anObject |
+	topMost := topMost min:(anObject frame top)
+    ].
+    self withSelectionHiddenDo:[
+	self forEach:something do:[:anObject |
+	    self moveObject:anObject to:((anObject frame left) @ topMost)
+	]
+    ]
+!
+
+alignVertical:something
+    "align selection along their center vertically"
+
+    |leftMost rightMost w|
+
+    leftMost := 999999.
+    rightMost := -999999.
+    self forEach:something do:[:anObject |
+        |f|
+        f := anObject frame.
+        rightMost := rightMost max:(f right).
+        leftMost := leftMost min:(f left).
+    ].
+    w := rightMost - leftMost.
+
+    self withSelectionHiddenDo:[
+        self forEach:something do:[:anObject |
+            self moveObject:anObject 
+                         to:(leftMost + ((w - anObject frame width) // 2))
+                            @
+                            (anObject frame top)
+        ]
+    ]
+
+    "Created: 4.6.1996 / 19:59:16 / cg"
+    "Modified: 4.6.1996 / 21:19:58 / cg"
+!
+
+move:something by:delta
+    "change the position of something, an Object or Collection 
+     by delta, aPoint"
+
+    (delta x == 0) ifTrue:[
+	(delta y == 0) ifTrue:[^ self]
+    ].
+
+    self forEach:something do:[:anObject |
+	self moveObject:anObject by:delta
+    ]
+!
+
+move:something to:aPoint in:aView
+    "can only happen when dragOutOfView is true
+     - should be redefined in subclasses"
+
+    self notify:'cannot move object(s) out of view'
+!
+
+move:something to:aPoint inAlienViewId:aViewId
+    "can only happen when dragOutOfView is true
+     - should be redefined in subclasses"
+
+    self notify:'cannot move object(s) to alien views'
+!
+
+moveObject:anObject by:delta
+    "change the position of anObject by delta, aPoint"
+
+    self moveObject:anObject to:(anObject origin + delta)
+!
+
+moveObject:anObject to:newOrigin
+    "move anObject to newOrigin, aPoint"
+
+    |oldOrigin oldFrame newFrame 
+     objectsIntersectingOldFrame objectsIntersectingNewFrame 
+     wasObscured isObscured intersects
+     oldLeft oldTop w h newLeft newTop griddedNewOrigin clip|
+
+    anObject isNil ifTrue:[^ self].
+    anObject canBeMoved ifFalse:[^ self].
+
+    griddedNewOrigin := self alignToGrid:newOrigin.
+    oldOrigin := anObject origin.
+    (oldOrigin = griddedNewOrigin) ifTrue:[^ self].
+
+    oldFrame := self frameOf:anObject.
+    objectsIntersectingOldFrame := self objectsIntersecting:oldFrame.
+    wasObscured := self isObscured:anObject.
+
+    anObject moveTo:griddedNewOrigin.
+    self changed:#objectLayout.
+    shown ifFalse:[^ self].
+
+    newFrame := self frameOf:anObject.
+    objectsIntersectingNewFrame := self objectsIntersecting:newFrame.
+
+    "try to redraw the minimum possible"
+
+    "if no other object intersects both frames we can do a copy:"
+
+    intersects := oldFrame intersects:newFrame.
+    intersects ifFalse:[
+        self hasSolidBackground ifTrue:[
+            gc transformation isNil ifTrue:[
+                (objectsIntersectingOldFrame size == 1) ifTrue:[
+                    (objectsIntersectingNewFrame size == 1) ifTrue:[
+                        clip := self clippingRectangleOrNil.
+                        (clip isNil or:[oldFrame isContainedIn:clip]) ifTrue:[
+                            oldLeft := oldFrame left.
+                            oldTop := oldFrame top.
+                            newLeft := newFrame left.
+                            newTop := newFrame top.
+                            w := oldFrame width.
+                            h := oldFrame height.
+                            ((newLeft < width) and:[newTop < height]) ifTrue:[
+                                ((newLeft >= 0) and:[newTop >= 0]) ifTrue:[
+                                    self catchExpose.
+                                    self 
+                                        copyFrom:self 
+                                        x:oldLeft y:oldTop
+                                        toX:newLeft y:newTop
+                                        width:w height:h
+                                        async:true.
+                                    self waitForExpose
+                                ]
+                            ].
+                            ((oldLeft < width) and:[oldTop < height]) ifTrue:[
+                                ((oldLeft >= 0) and:[oldTop >= 0]) ifTrue:[
+                                  self clearRectangleX:oldLeft y:oldTop width:w height:h.
+
+"/                                self fillRectangleX:oldLeft y:oldTop width:w height:h
+"/                                               with:viewBackground
+                                ]
+                            ].
+                            ^ self
+                        ]
+                    ]
+                ]
+            ]
+        ]
+    ].
+    isObscured := self isObscured:anObject.
+    (oldFrame intersects:newFrame) ifTrue:[
+        isObscured ifFalse:[
+            self redrawObjectsIn:oldFrame.
+            self show: anObject
+        ] ifTrue:[
+            self redrawObjectsIn:(oldFrame merge:newFrame)
+        ]
+    ] ifFalse:[
+        self redrawObjectsIn:oldFrame.
+        isObscured ifFalse:[
+            self show: anObject
+        ] ifTrue:[
+            self redrawObjectsIn:newFrame
+        ]
+    ]
+
+    "Modified: / 4.7.1999 / 16:52:17 / cg"
+!
+
+objectToBack:anObject
+    "bring the argument, anObject to back"
+
+    anObject notNil ifTrue:[
+        contents remove:anObject.
+        contents addFirst:anObject.
+        (self isObscured:anObject) ifTrue:[
+            self redrawObjectsIn:(anObject frame)
+        ].
+        self changed:#objectLayout.
+    ]
+
+    "Modified: / 4.7.1999 / 16:52:39 / cg"
+!
+
+objectToFront:anObject
+    "bring the argument, anObject to front"
+
+    |wasObscured|
+
+    anObject notNil ifTrue:[
+        wasObscured := self isObscured:anObject.
+        contents remove:anObject.
+        contents addLast:anObject.
+        wasObscured ifTrue:[
+"old:
+            self redrawObjectsIn:(anObject frame)
+"
+            self hideSelection.
+            self show:anObject.
+            self showSelection
+        ].
+        self changed:#objectLayout.
+    ]
+
+    "Modified: / 4.7.1999 / 16:52:49 / cg"
+!
+
+selectionAlignBottom
+    "align selected objects at bottom"
+
+    self alignBottom:selection
+!
+
+selectionAlignHorizontal
+    "align selected objects horizontally"
+
+    self alignHorizontal:selection
+
+    "Created: 4.6.1996 / 19:58:46 / cg"
+    "Modified: 4.6.1996 / 19:59:10 / cg"
+!
+
+selectionAlignLeft
+    "align selected objects left"
+
+    self alignLeft:selection
+!
+
+selectionAlignRight
+    "align selected objects right"
+
+    self alignRight:selection
+!
+
+selectionAlignTop
+    "align selected objects at top"
+
+    self alignTop:selection
+!
+
+selectionAlignVertical
+    "align selected objects vertically"
+
+    self alignVertical:selection
+
+    "Created: 4.6.1996 / 19:59:00 / cg"
+!
+
+selectionToBack
+    "bring the selection to back"
+
+    self toBack:selection
+!
+
+selectionToFront
+    "bring the selection to front"
+
+    self toFront:selection
+!
+
+toBack:something
+    "bring the argument, anObject or a collection of objects to back"
+
+    self forEach:something do:[:anObject |
+	self objectToBack:anObject
+    ]
+!
+
+toFront:something
+    "bring the argument, anObject or a collection of objects to front"
+
+    self forEach:something do:[:anObject |
+	self objectToFront:anObject
+    ]
+! !
+
+!ObjectView methodsFor:'misc'!
+
+documentFormat:aFormatString
+    "set the document format (mostly used by scrollbars).
+     The argument should be a string such as 'a4', 'a5'
+     or 'letter'. 
+     See the UnitConverter class for supported formats."
+
+    aFormatString ~= documentFormat ifTrue:[
+        documentFormat := aFormatString.
+        self contentsChanged.
+        self defineGrid.
+        gridShown ifTrue:[
+            self invalidate "/ clear; redraw
+        ]
+    ]
+
+    "Modified: 31.5.1996 / 19:44:08 / cg"
+!
+
+forEach:aCollection do:aBlock
+    "apply block to every object in a collectioni;
+     (adds a check for non-collection)"
+
+    aCollection isNil ifTrue:[^self].
+    aCollection isCollection ifTrue:[
+	aCollection do:[:object |
+	    object notNil ifTrue:[
+		aBlock value:object
+	    ]
+	]
+    ] ifFalse: [
+	aBlock value:aCollection
+    ]
+!
+
+hitDelta
+    "when clicking an object, allow for hitDelta pixels around object.
+     We compensate for any scaling here, to get a constant physical
+     hitDelta (i.e. the value returned here is inverse scaled)."
+
+    |delta currentTransformation|
+
+    delta := self class hitDelta.
+    currentTransformation := gc transformation.
+    currentTransformation notNil ifTrue:[
+        delta := delta / currentTransformation scale x
+    ].
+    ^ delta
+!
+
+numberOfObjectsIntersecting:aRectangle
+    "answer the number of objects intersecting the argument, aRectangle"
+
+    |tally|
+
+    tally := 0.
+    contents do:[:theObject |
+	(theObject frame intersects:aRectangle) ifTrue:[
+	    tally := tally + 1
+	]
+    ].
+    ^ tally
+!
+
+numberOfObjectsIntersectingVisible:aRectangle
+    "answer the number of objects intersecting the argument, aRectangle.
+     This is a leftOver from times when scrolling was not transparent.
+     Please use numberOfObjectsIntersecting:, since this will vanish."
+
+    ^ self numberOfObjectsIntersecting:aRectangle
+!
+
+object:anObject isContainedIn:aRectangle
+    "true, if anObject is completely inside aRectangle (for rectangle drag)"
+
+    ^ anObject isContainedIn:aRectangle
+!
+
+objectsAbove:objectToBeTested do:aBlock
+    "do something to every object above objectToBeTested
+     (does not mean obscured - simply above in hierarchy)"
+
+    |startIndex|
+
+    startIndex := contents identityIndexOf:objectToBeTested
+                                  ifAbsent:[self error:'nonexisting object'].
+    contents from:startIndex to:(contents size) do:aBlock
+!
+
+objectsAbove:anObject intersecting:aRectangle do:aBlock
+    "do something to every object above objectToBeTested
+     and intersecting aRectangle"
+
+    self objectsAbove:anObject do:[:theObject |
+	(theObject frame intersects:aRectangle) ifTrue:[
+	    aBlock value:theObject
+	]
+    ]
+!
+
+objectsBelow:objectToBeTested do:aBlock
+    "do something to every object below objectToBeTested
+     (does not mean obscured by - simply below in hierarchy)"
+
+    |endIndex|
+
+    endIndex := contents identityIndexOf:objectToBeTested ifAbsent:[self error:'nonexisting object'].
+    contents from:1 to:(endIndex - 1) do:aBlock
+!
+
+objectsIn:aRectangle do:aBlock
+    "do something to every object which is completely in a rectangle"
+
+    |bot|
+
+    sorted ifTrue:[
+        bot := aRectangle bottom.
+        self contentsDo:[:theObject |
+            (self object:theObject isContainedIn:aRectangle) ifTrue:[
+                aBlock value:theObject
+            ] ifFalse:[
+                theObject frame top > bot ifTrue:[^ self]
+            ]
+        ].
+        ^ self
+    ].
+
+    self contentsDo:[:theObject |
+        (self object:theObject isContainedIn:aRectangle) ifTrue:[
+            aBlock value:theObject
+        ]
+    ]
+!
+
+objectsInVisible:aRectangle do:aBlock
+    "do something to every object which is completely in a 
+     visible rectangle.
+     This is a leftOver from times when scrolling was not transparent.
+     Please use objectsIn:do:, since this will vanish."
+
+    self objectsIn:aRectangle do:aBlock
+!
+
+objectsIntersecting:aRectangle
+    "answer a Collection of objects intersecting the argument, aRectangle"
+
+    |newCollection|
+
+    newCollection := OrderedCollection new.
+    self objectsIntersecting:aRectangle do:[:theObject |
+	newCollection add:theObject
+    ].
+    (newCollection size == 0) ifTrue:[^ nil].
+    ^ newCollection
+!
+
+objectsIntersecting:aRectangle do:aBlock
+    "do something to every object which intersects a rectangle"
+
+    |f top bot
+     firstIndex "{ Class: SmallInteger }"
+     delta      "{ Class: SmallInteger }"
+     theObject 
+     nObjects   "{ Class: SmallInteger }"|
+
+    nObjects := contents size.
+    (nObjects == 0) ifTrue:[^ self].
+
+    sorted ifFalse:[
+	"
+	 have to check every object
+	"
+	contents do:[:theObject |
+	    (theObject frame intersects:aRectangle) ifTrue:[
+		aBlock value:theObject
+	    ]
+	].
+	^ self
+    ].
+
+    "
+     contents is sorted by y; can do a fast (binary) search for the first
+     object which intersects aRectangle and 
+     break from the draw loop, when the 1st object below aRectangle is reached.
+    "
+    bot := aRectangle bottom.
+    top := aRectangle top.
+
+    "
+     binary search for an object in aRectangle ...
+    "
+    delta := nObjects // 2.
+    firstIndex := delta.
+    (firstIndex == 0) ifTrue:[
+       firstIndex := 1
+    ].
+    theObject := contents at:firstIndex.
+    (theObject frame bottom < top) ifTrue:[
+	[theObject frame bottom < top and:[delta > 1]] whileTrue:[
+	    delta := delta // 2.
+	    firstIndex := firstIndex + delta.
+	    theObject := contents at:firstIndex
+	]
+    ] ifFalse:[
+	[theObject frame top > bot and:[delta > 1]] whileTrue:[
+	    delta := delta // 2.
+	    firstIndex := firstIndex - delta.
+	    theObject := contents at:firstIndex
+	]
+    ].
+
+    "
+     now, theObject at:firstIndex is in aRectangle; go backward to the object
+     following first non-visible
+    "
+    [theObject frame bottom > top and:[firstIndex > 1]] whileTrue:[
+	firstIndex := firstIndex - 1.
+	theObject := contents at:firstIndex
+    ].
+
+    firstIndex to:nObjects do:[:index |
+	theObject := contents at:index.
+	f := theObject frame.
+	(f intersects:aRectangle) ifTrue:[
+	    aBlock value:theObject
+	] ifFalse:[
+	    (f top > bot) ifTrue:[^ self]
+	]
+    ]
+!
+
+objectsIntersectingVisible:aRectangle
+    "answer a Collection of objects intersecting a visible aRectangle.
+     This is a leftOver from times when scrolling was not transparent.
+     Please use objectsIntersecting:, since this will vanish."
+
+    ^ self objectsIntersecting:aRectangle
+!
+
+objectsIntersectingVisible:aRectangle do:aBlock
+    "do something to every object which intersects a visible rectangle.
+     This is a leftOver from times when scrolling was not transparent.
+     Please use objectsIntersecting:do:, since this will vanish."
+
+    self objectsIntersecting:aRectangle do:aBlock
+!
+
+rectangleForScroll
+    "find the area occupied by visible objects"
+
+    |left right top bottom frame oLeft oRight oTop oBottom|
+
+    left := 9999.
+    right := 0.
+    top := 9999.
+    bottom := 0.
+    self visibleObjectsDo:[:anObject |
+	frame := anObject frame.
+	oLeft := frame left.
+	oRight := frame right.
+	oTop := frame top.
+	oBottom := frame bottom.
+	(oLeft < left) ifTrue:[left := oLeft].
+	(oRight > right) ifTrue:[right := oRight].
+	(oTop < top) ifTrue:[top := oTop].
+	(oBottom > bottom) ifTrue:[bottom := oBottom]
+    ].
+    (left < margin) ifTrue:[left := margin].
+    (top < margin) ifTrue:[top := margin].
+    (right > (width - margin)) ifTrue:[right := width - margin].
+    (bottom > (height - margin)) ifTrue:[bottom := height - margin].
+
+    ((left > right) or:[top > bottom]) ifTrue:[^ nil].
+
+    ^ Rectangle left:left right:right top:top bottom:bottom
+!
+
+visibleObjectsDo:aBlock
+    "do something to every visible object"
+
+    |absRect|
+
+    absRect := Rectangle left:0 top:0 width:width height:height.
+    self objectsIntersecting:absRect do:aBlock
+! !
+
+!ObjectView methodsFor:'queries'!
+
+hasSolidBackground
+    "return true, if I have a solid color background, which can be pixel-copied
+     for optimized redraw in moveObject."
+
+    ^ gridShown not
+!
+
+heightOfContents
+    "answer the height of the document in pixels"
+
+    |h|
+
+    h := self heightOfContentsInMM * (self verticalPixelPerMillimeter:1).
+    ^ h rounded
+!
+
+heightOfContentsInMM
+    "answer the height of the document in millimeters"
+
+    |unit value|
+
+    "landscape"
+    unit := (documentFormat , 'H') asSymbolIfInterned.
+    unit isNil ifTrue:[
+        "/ certainly unknown
+    ] ifFalse:[
+        value := UnitConverter convert:1 from:unit to:#millimeter
+    ].
+    value isNil ifTrue:[
+        "/ assuming window size is document size
+        value := (height / self verticalPixelPerMillimeter:1) asInteger
+    ].
+    ^ value
+
+    "Modified: 31.5.1996 / 19:38:51 / cg"
+!
+
+widthOfContents
+    "answer the width of the document in pixels"
+
+    |w|
+
+    w := self widthOfContentsInMM * (self horizontalPixelPerMillimeter:1).
+    ^ w rounded
+!
+
+widthOfContentsInMM
+    "answer the width of the document in millimeters"
+
+    |unit value|
+
+    "landscape"
+    unit := (documentFormat , 'W') asSymbolIfInterned.
+    unit isNil ifTrue:[
+        "/ certainly unknown
+    ] ifFalse:[
+        value := UnitConverter convert:1 from:unit to:#millimeter
+    ].
+    value isNil ifTrue:[
+        "/ assuming window size is document size
+        value := (width / self horizontalPixelPerMillimeter:1) asInteger
+    ].
+    ^ value
+
+    "Modified: 31.5.1996 / 19:38:22 / cg"
+! !
+
+!ObjectView methodsFor:'saving & restoring'!
+
+fileInContentsFrom:aStream
+    "remove all objects, load new contents from aStream and redraw"
+
+    self fileInContentsFrom:aStream redraw:true new:true binary:false
+!
+
+fileInContentsFrom:aStream redraw:redraw
+    "remove all objects, load new contents from aStream 
+     and redraw if the redraw argument is true"
+
+    self fileInContentsFrom:aStream redraw:redraw new:true binary:false
+!
+
+fileInContentsFrom:aStream redraw:redraw new:new 
+    "remove all objects, load new contents from aStream 
+     and redraw if the redraw argument is true"
+
+    self fileInContentsFrom:aStream redraw:redraw new:new binary:false
+!
+
+fileInContentsFrom:aStream redraw:redraw new:new binary:binary
+    "if the new argument is true, remove all objects.
+     Then load objects from aStream. If redraw is false, no redraw
+     is done
+     (allows fileIn of multiple files doing a single redraw at the end)."
+
+    binary ifTrue:[
+        aStream binary
+    ].
+    self topView withReadCursorDo:[
+        |newObject chunk individualRedraw|
+
+        self unselect.
+        individualRedraw := redraw.
+        new ifTrue:[
+            self removeAll.
+            individualRedraw := false.
+        ].
+        [aStream atEnd] whileFalse:[
+            binary ifTrue:[
+                newObject := Object readBinaryFrom:aStream
+            ] ifFalse:[
+                chunk := aStream nextChunk.
+                (chunk size > 0) ifTrue:[
+                    newObject := Compiler evaluate:chunk compile:false.
+                ] ifFalse:[
+                    newObject := nil
+                ]
+            ].
+            newObject notNil ifTrue:[
+                self initializeFileInObject:newObject.
+                individualRedraw ifFalse:[
+                    self addObjectWithoutRedraw:newObject
+                ] ifTrue:[
+                    self addObject:newObject
+                ]
+            ]
+        ].
+        (new and:[redraw]) ifTrue:[
+            self invalidate
+        ]
+    ]
+
+    "Modified: / 30.1.1998 / 01:02:16 / cg"
+!
+
+initializeFileInObject:anObject
+    "each object may be processed here after its being filed-in
+     - subclasses may do whatever they want here ...
+     (see LogicView for example)"
+
+    ^ self
+!
+
+storeBinaryContentsOn:aStream
+    "store the contents in binary representation on aStream."
+
+    aStream binary.
+    self topView withWriteCursorDo:[
+        self forEach:contents do:[:theObject |
+            theObject storeBinaryOn:aStream.
+        ].
+    ]
+
+    "Modified: / 27-07-2012 / 09:45:31 / cg"
+!
+
+storeContentsOn:aStream
+    "store the contents in textual representation on aStream.
+     Notice, that for huge objects (such as DrawImages) this ascii output
+     can become quite large, and the time to save and reload can become
+     long."
+
+    |excla|
+
+    self topView withWriteCursorDo:[
+        excla := aStream class chunkSeparator.
+        self forEach:contents do:[:theObject |
+            theObject storeOn:aStream.
+            aStream nextPut:excla.
+            aStream cr
+        ].
+        aStream nextPut:excla
+    ]
+
+    "Modified: / 27-07-2012 / 09:45:23 / cg"
+!
+
+withoutRedrawFileInContentsFrom:aStream
+    "remove all objects, load new contents from aStream without any redraw"
+
+    self fileInContentsFrom:aStream redraw:false new:true binary:false
+! !
+
+!ObjectView methodsFor:'scrolling'!
+
+horizontalScrollStep
+    "return the amount to scroll when stepping left/right.
+     Redefined to scroll by inches or centimeters."
+
+    scaleMetric == #inch ifTrue:[
+        ^ (self graphicsDevice horizontalPixelPerInch * (1/2)) asInteger
+    ].
+    ^ (self graphicsDevice horizontalPixelPerMillimeter * 20) asInteger
+!
+
+verticalScrollStep
+    "return the amount to scroll when stepping left/right.
+     Redefined to scroll by inches or centimeters."
+
+    scaleMetric == #inch ifTrue:[
+        ^ (self graphicsDevice verticalPixelPerInch * (1/2)) asInteger
+    ].
+    ^ (self graphicsDevice verticalPixelPerMillimeter * 20) asInteger
+! !
+
+!ObjectView methodsFor:'selection & handles'!
+
+drawHandle:aPoint
+    |hsize halfSize|
+
+    hsize := self handleSize.
+    halfSize := hsize // 2.
+    self fillRectangleX:(aPoint x - halfSize)
+		      y:(aPoint y - halfSize)
+		  width:hsize 
+		 height:hsize
+!
+
+drawHandlesFor:anObject
+    |hsize halfSize|
+
+    hsize := self handleSize.
+    halfSize := hsize // 2.
+    self handlesOf:anObject do:[:handlePoint |
+        self fillRectangleX:(handlePoint x - halfSize)
+                          y:(handlePoint y - halfSize)
+                      width:hsize 
+                     height:hsize
+    ]
+!
+
+findAllObjectsHandleAt:aPoint
+
+    ^ contents select:[:object|
+        (self object:object hasHandleAt:aPoint) 
+    ] 
+!
+
+findAllObjectsHandleAt:aPoint suchThat:aBlock
+
+    ^ contents select:[:object|
+        (aBlock value:object) 
+        and:[(self object:object hasHandleAt:aPoint)]
+    ] 
+!
+
+findLastObjectHandleAt:aPoint
+
+    ^ contents detectLast:[:object|
+        (self object:object hasHandleAt:aPoint) 
+    ] ifNone:nil
+!
+
+findLastObjectHandleAt:aPoint suchThat:aBlock
+
+    contents reverseDo:[:object |
+        (self object:object hasHandleAt:aPoint) ifTrue:[
+            (aBlock value:object) ifTrue:[ ^ object ]
+        ]
+    ].
+    ^ nil
+!
+
+findObjectHandleAt:aPoint
+    |objectFound|
+    contents do:[:object |
+        (self object:object hasHandleAt:aPoint) ifTrue:[
+            objectFound := object
+        ]
+    ].
+    ^ objectFound
+!
+
+handle:handlePoint isHitBy:aPoint
+    ^ (self handleFor:handlePoint) containsPoint:aPoint
+!
+
+handleFor:aPoint
+    "return the handle-rectangle for a handle at aPoint"
+
+    |hsize centerX centerY|
+
+    hsize := self handleSize.
+    centerX := aPoint x.
+    centerY := aPoint y.
+    ^ Rectangle left:(centerX - hsize)
+		 top:(centerY - hsize)
+	       right:(centerX + hsize)
+	      bottom:(centerY + hsize)
+!
+
+handleSize
+    "return the size of the handles - since handles should be
+     the same size regardless of scaling, inverse-scale from
+     what the default is."
+
+    |hs currentTransformation|
+
+    hs := self class handleSize.
+    currentTransformation := gc transformation.
+    currentTransformation notNil ifTrue:[
+        ^ currentTransformation applyInverseScaleX:hs
+    ].
+    ^ hs
+!
+
+handlesOf:anObject do:aBlock
+    anObject handlesDo:aBlock
+!
+
+invertHandle:aHandle
+    self xoring:[self drawHandle:aHandle]
+!
+
+invertHandlesOf:aSelection
+    aSelection notNil ifTrue:[
+        self clippedTo:nil do:[
+            self xoring:[
+                self forEach:aSelection do:[:anObject |
+                    (anObject respondsTo:#handlesDo:) ifTrue:[
+                        self drawHandlesFor:anObject
+                    ] ifFalse:[
+                        anObject drawOutlineIn:self
+                    ]
+                ]
+            ]
+        ]
+    ]
+!
+
+object:anObject hasHandleAt:aPoint
+    |found|
+
+    found := false.
+    self handlesOf:anObject do:[:handlePoint |
+        (self handle:handlePoint isHitBy:aPoint) ifTrue:[
+            found := true
+        ]
+    ].
+    ^ found
+!
+
+selectionHandlesDo:aBlock
+    self forEach:selection do:[:theObject |
+        (theObject respondsTo:#handlesDo:) ifTrue:[
+            self handlesOf:theObject do:[:handlePoint |
+                aBlock value:theObject value:handlePoint
+            ]
+        ]
+    ]
+! !
+
+!ObjectView methodsFor:'selections'!
+
+addToSelection:anObject
+    "add anObject to the selection; redraw it selected"
+
+    selection isCollection ifFalse:[
+        selection isNil ifTrue:[
+            selection := OrderedCollection new
+        ] ifFalse:[
+            selection := OrderedCollection with:selection
+        ]
+    ].
+
+    (selection includes:anObject) ifFalse:[
+        (self frameIncludesSelectionHandlesOn:anObject) ifFalse:[
+            self hideSelection.
+            selection add:anObject.
+            self showSelection.
+        ] ifTrue:[
+            selection add:anObject.
+            self showSelected:anObject
+        ].
+        self changed:#selection with:selection.
+    ].
+
+    "Modified: / 27-10-2006 / 14:16:04 / cg"
+!
+
+hideSelection
+    "hide the selection - undraw hilights - whatever that is"
+
+    shown ifFalse:[^ self].
+
+    self selectionDo:[:object |
+        self showUnselected:object
+    ]
+!
+
+removeFromSelection:anObject
+    "remove anObject from the selection"
+
+    |wasSelected didHide|
+
+    didHide := false.
+    wasSelected := true.
+
+    (self frameIncludesSelectionHandlesOn:anObject) ifFalse:[
+        "/ must hide any selection-handles first
+        self hideSelection.
+        didHide := true.
+    ].
+
+    selection isCollection ifTrue:[
+        (selection remove:anObject ifAbsent:[nil]) isNil ifTrue:[
+            wasSelected := false
+        ].
+        (selection size == 1) ifTrue:[
+            selection := selection first
+        ] ifFalse:[
+            selection := selection asNilIfEmpty
+        ]
+    ] ifFalse:[
+        (selection == anObject) ifTrue:[
+            selection := nil
+        ] ifFalse:[
+            wasSelected := false
+        ]
+    ].
+
+    didHide ifTrue:[
+        self showSelection.
+    ] ifFalse:[
+        wasSelected ifTrue:[
+            self showUnselected:anObject
+        ].
+    ].
+
+    self changed:#selection with:selection.
+
+    "Modified: / 4.7.1999 / 15:22:28 / cg"
+!
+
+select:something
+    "select something - hide previous selection, set to something and hilight"
+
+    |newSelection|
+
+    newSelection :=
+        (something isCollection and:[something size == 0]) 
+            ifTrue:[ nil ]
+            ifFalse:[ something ].
+
+    (selection = newSelection) ifFalse:[
+        self hideSelection.
+        selection := newSelection.
+        self showSelection.
+        self changed:#selection with:selection.
+    ]
+
+    "Modified: / 4.7.1999 / 15:22:39 / cg"
+!
+
+selectAll
+    "select all objects"
+
+    self select:contents copy.
+!
+
+selectAllIn:aRectangle
+    "select all objects which are fully contained in aRectangle"
+
+    |newSelection|
+
+    newSelection := OrderedCollection new.
+    self 
+        objectsIn:aRectangle 
+        do:[:theObject |
+            newSelection add:theObject
+        ].
+    self select:newSelection.
+!
+
+selectAllIntersecting:aRectangle
+    "select all objects which are touched by aRectangle"
+
+    |newSelection|
+
+    newSelection := OrderedCollection new.
+    self objectsIntersecting:aRectangle do:[:theObject |
+        newSelection add:theObject
+    ].
+    self select:newSelection.
+!
+
+selection
+    "return the selection as a collection or nil"
+
+    selection isNil ifTrue:[^ nil].
+    selection isCollection ifTrue:[^ selection].
+    ^ Array with:selection
+
+    "Created: / 4.7.1999 / 14:33:16 / cg"
+    "Modified: / 4.7.1999 / 14:34:20 / cg"
+!
+
+selectionDo:aBlock
+    "apply block to every object in selection"
+
+    self forEach:selection do:aBlock
+!
+
+showSelection
+    "show the selection - draw hilights - whatever that is"
+
+    shown ifFalse:[^ self].
+
+    self selectionDo:[:object |
+        self showSelected:object
+    ]
+!
+
+unselect
+    "unselect - hide selection; clear selection"
+
+    selection notNil ifTrue:[
+        self select:nil.
+    ]
+
+    "Modified: / 4.7.1999 / 15:30:36 / cg"
+!
+
+withSelectionHiddenDo:aBlock
+    "evaluate aBlock while selection is hidden"
+
+    |sel|
+
+    sel := selection.
+    sel notNil ifTrue:[self unselect].
+    aBlock value.
+    sel notNil ifTrue:[self select:sel]
+! !
+
+!ObjectView methodsFor:'testing objects'!
+
+allObjectsHitAt:aPoint do:aBlock
+    "for all objects (by enumerating from back to front) which are hit by
+     the argument, aPoint, evaluate aBlock"
+
+    self allObjectsHitAt:aPoint withDelta:(self hitDelta / self scale x) do:aBlock
+!
+
+allObjectsHitAt:aPoint withDelta:hDelta do:aBlock
+    "for all objects (by enumerating from back to front) which are hit by
+     the argument, aPoint, evaluate aBlock"
+
+    contents notEmptyOrNil ifTrue:[
+        contents reverseDo:[:object |
+            (object isHitBy:aPoint withDelta:hDelta) ifTrue:[
+                aBlock value:object
+            ]
+        ]
+    ].
+    ^ nil
+
+    "Created: / 27-10-2006 / 16:58:34 / cg"
+!
+
+canMove:something
+    "return true, if the argument, anObject or a collection can be moved"
+
+    something isCollection ifTrue:[
+        self forEach:something do:[:theObject |
+            (theObject perform:#canBeMoved ifNotUnderstood:true) ifFalse:[^ false]
+        ].
+        ^ true
+    ].
+    ^ something perform:#canBeMoved ifNotUnderstood:true
+!
+
+canSelect:something
+    "return true, if the argument, anObject or a collection can be selected"
+
+    something isCollection ifTrue:[
+        self forEach:something do:[:theObject |
+            theObject isView ifFalse:[
+                (theObject perform:#canBeSelected ifNotUnderstood:true) ifFalse:[^ false]
+            ]
+        ].
+        ^ true
+    ].
+    something isView ifTrue:[^ true].
+    ^ something perform:#canBeSelected ifNotUnderstood:true
+
+    "Created: / 4.7.1999 / 18:51:29 / cg"
+!
+
+findNearestObjectAt:aPoint
+    "find the nearest object (by looking from back to front) which is hit by
+     the argument, aPoint - this is the topmost object hit"
+
+    0 to:(self hitDelta) by:(1 / 2) do:[:hdelta |
+        self allObjectsHitAt:aPoint withDelta:(hdelta " / self scale x") do:[:object | ^ object].
+    ].
+    ^ nil
+
+    "Modified: / 27-10-2006 / 16:58:54 / cg"
+!
+
+findObjectAt:aPoint
+    "find the last object (by looking from back to front) which is hit by
+     the argument, aPoint - this is the topmost object hit"
+
+    self allObjectsHitAt:aPoint do:[:object | ^ object].
+    ^ nil
+
+    "Modified: / 27-10-2006 / 16:58:54 / cg"
+!
+
+findObjectAt:aPoint forWhich:aBlock
+    "find the last object (by looking from back to front) which is hit by
+     the argument, aPoint - this is the topmost object hit"
+
+    self allObjectsHitAt:aPoint do:[:object | (aBlock value:object) ifTrue:[^ object]].
+    ^ nil
+
+    "Modified: / 27-10-2006 / 16:59:26 / cg"
+!
+
+findObjectAt:aPoint suchThat:aBlock
+    <resource: #obsolete>
+    "find the last object (back to front ) which is hit by
+     the argument, aPoint and for which the testBlock, aBlock evaluates to true.
+     This is a leftOver from times when scrolling was not transparent.
+     Please use findObjectAt:forWhich:, since this will vanish."
+
+    self obsoleteMethodWarning:'use findObjectAt:forWhich:'.
+    ^ self findObjectAt:aPoint forWhich:aBlock
+
+    "Modified: / 27-10-2006 / 17:01:42 / cg"
+!
+
+findObjectAtVisible:aPoint
+    <resource: #obsolete>
+    "find the last object (by looking from back to front) which is hit by
+     a visible point - this is the topmost object hit.
+     This is a leftOver from times when scrolling was not transparent.
+     Please use findObjectAt:, since this will vanish."
+
+    self obsoleteMethodWarning:'use findObjectAt:'.
+    ^ self findObjectAt:aPoint
+
+    "Modified: / 27-10-2006 / 17:02:08 / cg"
+!
+
+findObjectAtVisible:aPoint suchThat:aBlock
+    <resource: #obsolete>
+    "find the last object (back to front ) which is hit by
+     the argument, aPoint and for which the testBlock, aBlock evaluates to
+     true.
+     This is a leftOver from times when scrolling was not transparent.
+     Please use findObjectAt:forWhich:, since this will vanish."
+
+    self obsoleteMethodWarning:'use findObjectAt:forWhich:'.
+    ^ self findObjectAt:aPoint suchThat:aBlock
+
+    "Modified: / 27-10-2006 / 17:01:47 / cg"
+!
+
+findObjectForSelectAt:aPoint
+    "find the object for a select"
+
+    ^ self findObjectAt:aPoint
+!
+
+frameIncludesSelectionHandlesOn:anObject
+    "return true, if anObjects frame includes any selection
+     handles, false if not or if we do not know.
+     This can be used to optimize the redraw, in removeObjectFromSelection.
+     Subclasses which know how selections are highlighted may redefine this."
+
+    ^ false     "/ i.e. dont know.
+
+    "Created: 1.10.1996 / 12:06:51 / cg"
+!
+
+frameOf:anObjectOrCollection
+    "answer the maximum extent defined by the argument, anObject or a
+     collection of objects"
+
+    |first frameAll|
+
+    anObjectOrCollection isNil ifTrue:[^ nil ].
+
+    first := true.
+    self forEach:anObjectOrCollection do:[:theObject |
+        first ifTrue:[
+            frameAll := theObject frame.
+            first := false
+        ] ifFalse:[
+            frameAll := frameAll merge:(theObject frame)
+        ]
+    ].
+    ^ frameAll
+
+    "Modified: / 27-10-2006 / 17:02:16 / cg"
+!
+
+isObscured:something
+    "return true, if the argument something, anObject or a collection of
+     objects is obscured (partially or whole) by any other object"
+
+    self forEach:something do:[:anObject |
+	(self objectIsObscured:anObject) ifTrue:[
+	    ^ true
+	]
+    ].
+    ^ false
+!
+
+isSelected:anObject
+    "return true, if the argument, anObject is in the selection"
+
+    selection isNil ifTrue:[^ false].
+    (selection == anObject) ifTrue:[^ true].
+    selection isCollection ifTrue:[
+	^ (selection identityIndexOf:anObject startingAt:1) ~~ 0
+    ].
+    ^ false
+!
+
+objectIsObscured:objectToBeTested
+    "return true, if the argument, anObject is obscured (partially or whole)
+     by any other object"
+
+    |frameToBeTested frameleft frameright frametop framebot
+     objectsFrame startIndex|
+
+    (objectToBeTested == (contents last)) ifTrue:[
+        "quick return if object is on top"
+        ^ false
+    ].
+
+    frameToBeTested := self frameOf:objectToBeTested.
+    frameleft := frameToBeTested left.
+    frameright := frameToBeTested right.
+    frametop := frameToBeTested top.
+    framebot := frameToBeTested bottom.
+
+    "check objects after the one to check"
+
+    startIndex := contents identityIndexOf:objectToBeTested ifAbsent:[self error:'nonexisting object'].
+    contents from:(startIndex + 1) to:(contents size) do:[:object |
+        objectsFrame := self frameOf:object.
+        (objectsFrame right < frameleft) ifFalse:[
+            (objectsFrame left > frameright) ifFalse:[
+                (objectsFrame bottom < frametop) ifFalse:[
+                    (objectsFrame top > framebot) ifFalse:[
+                        ^ true
+                    ]
+                ]
+            ]
+        ]
+    ].
+    ^ false
+! !
+
+!ObjectView methodsFor:'user interface'!
+
+alignToGrid:aPoint
+    "round aPoint to the next nearest point on the grid"
+
+    aligning ifFalse:[
+        ^ aPoint
+    ].
+
+    ^ (aPoint grid:gridAlign) rounded
+!
+
+selectMore:aPoint
+    "add/remove an object from the selection"
+
+    |anObject|
+
+    anObject := self findObjectAt:aPoint.
+    anObject notNil ifTrue:[
+        (self isSelected:anObject) ifTrue:[
+            "remove from selection"
+            self removeFromSelection:anObject
+        ] ifFalse:[
+            "add to selection"
+            (self canSelect:anObject) ifTrue:[
+                self addToSelection:anObject
+            ]
+        ]
+    ].
+    ^ self
+
+    "Modified: / 4.7.1999 / 18:52:13 / cg"
+!
+
+startSelectMoreOrMove:aPoint
+    "add/remove object hit by aPoint, then start a rectangleDrag or move 
+     - if aPoint hits an object, a move is started, otherwise a rectangleDrag.
+     This is typically the button shiftPressAction."
+
+    |anObject|
+
+    anObject := self findObjectAt:aPoint.
+    anObject notNil ifTrue:[
+        (self isSelected:anObject) ifTrue:[
+            "remove from selection"
+            self removeFromSelection:anObject
+        ] ifFalse:[
+            "add to selection"
+            (self canSelect:anObject) ifTrue:[
+                self addToSelection:anObject
+            ]
+        ].
+        self startObjectMove:selection at:aPoint.
+        ^ self
+    ].
+"/    self unselect.
+"/    self startRectangleDrag:aPoint
+
+    "Modified: / 4.7.1999 / 18:51:52 / cg"
+!
+
+startSelectOrMove:aPoint
+    "start a rectangleDrag or objectMove - if aPoint hits an object,
+     an object move is started, otherwise a rectangleDrag.
+     This is typically the button pressAction."
+
+    |anObject|
+
+    anObject := self findObjectForSelectAt:aPoint.
+    anObject notNil ifTrue:[
+        (self isSelected:anObject) ifFalse:[
+            self unselect.
+            self startObjectMove:anObject at:aPoint.
+        ] ifTrue:[
+            self startObjectMove:selection at:aPoint.
+        ].
+        ^ self
+    ].
+    "nothing was hit by this click - this starts a group select"
+    self unselect.
+    self startRectangleDrag:aPoint
+! !
+
+!ObjectView methodsFor:'view manipulation'!
+
+inchMetric
+    (scaleMetric ~~ #inch) ifTrue:[
+	scaleMetric := #inch.
+	self newGrid
+    ]
+!
+
+millimeterMetric
+    (scaleMetric ~~ #mm) ifTrue:[
+	scaleMetric := #mm.
+	self newGrid
+    ]
+!
+
+zoom:factor
+    "set a zoom factor; smaller than 1 is shrink; larger than 1 is magnify. 
+     I.e. 1 is identity; 2 is magnify by 2; 0.5 is shrink by 2"
+
+    |currentScale currentTranslation newScale|
+
+    currentScale := self scale.
+    currentTranslation := self translation.
+
+    newScale := factor.
+    newScale isNil ifTrue:[
+        newScale := 1 @ 1
+    ].
+    newScale := newScale asPoint.
+
+    newScale = currentScale ifTrue:[
+        ^ self
+    ].
+
+    (newScale = 1) ifTrue:[
+        gc transformation:nil
+    ] ifFalse:[
+        gc transformation:(WindowingTransformation 
+                            scale:newScale 
+                            translation:(currentTranslation / currentScale x * newScale x ) rounded).
+    ].
+    self contentsChanged.
+    self setInnerClip.
+    gridShown ifTrue:[
+        self newGrid
+    ].
+    self invalidate 
+
+    "Modified: 29.5.1996 / 16:20:41 / cg"
+!
+
+zoomIn
+    "zoom in - multiply the zoom factor by 1.5"
+
+    self zoomIn:1.5
+
+    "Modified: / 10.2.2000 / 21:14:41 / cg"
+!
+
+zoomIn:factor
+    "zoom in by multiplying the zoom factor by the argument"
+
+    |currentTransformation|
+
+    currentTransformation := gc transformation.
+    currentTransformation isNil ifTrue:[
+        currentTransformation := WindowingTransformation scale:1 translation:0
+    ].
+    gc transformation:(WindowingTransformation 
+                        scale:(currentTransformation scale * factor)
+                        translation:(currentTransformation translation * factor) rounded).
+    self contentsChanged.
+    self setInnerClip.
+    self invalidate.
+
+    "Created: / 27.4.1996 / 10:08:39 / cg"
+    "Modified: / 10.2.2000 / 21:11:11 / cg"
+!
+
+zoomOut
+    "zoom in - divide the zoom factor by 1.5"
+
+    self zoomOut:1.5
+
+    "Modified: / 10.2.2000 / 21:14:46 / cg"
+!
+
+zoomOut:factor
+    "zoom out by dividing the zoom factor by the argument"
+
+    self zoomIn:(1.0 / factor)
+
+    "Created: / 27.4.1996 / 10:09:19 / cg"
+    "Modified: / 10.2.2000 / 21:10:52 / cg"
+! !
+
+!ObjectView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ObjectView.st,v 1.143 2014-04-03 14:36:46 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/ObjectView.st,v 1.143 2014-04-03 14:36:46 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OptionBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,686 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+DialogBox subclass:#OptionBox
+	instanceVariableNames:'labelPanel formLabel textLabel buttons actions defaultButtonIndex'
+	classVariableNames:'WarnBitmap'
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!OptionBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+   CAVEAT: this is a leftover - functionality has been merged into DialogBox
+   PLEASE use one of the `Dialog chooseXXX' methods instead of OptionBox.
+
+
+   Historic note:
+      originally, ST/X had separate classes for the various entry methods;
+      there were YesNoBox, EnterBox, InfoBox and so on.
+      In the meantime, the DialogBox class (and therefore its alias: Dialog)
+      is going to duplicate most funcionality found in these classes.
+
+      In the future, those existing subclasses' functionality is going to
+      be moved fully into Dialog, and the subclasses will be replaced by dummy
+      delegators. (They will be kept for backward compatibility, though).
+
+
+    OptionBoxes are like YesNoBoxes but with as many buttons as you like;
+    this will finally be a superclass of WarnBox and YesNoBox - or maybe merged
+    all into DialogBox..
+    Use them for multiway questions.
+    For a consistent user interface, the rightmost button is the default return
+    button (i.e. pressing return in the box performs this buttons function).
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        DialogBox
+"
+!
+
+examples
+"
+                                                                        [exBegin]
+    |box|
+
+    box := OptionBox title:'hello' numberOfOptions:4.
+    box showAtPointer
+                                                                        [exEnd]
+
+
+                                                                        [exBegin]
+    |box|
+    box := OptionBox title:'hello' numberOfOptions:3.
+    box buttonTitles:#('one' 'two' 'three').
+    box showAtPointer
+                                                                        [exEnd]
+
+ performing an action:
+
+                                                                        [exBegin]
+    |box|
+    box := OptionBox title:'hello' numberOfOptions:3.
+    box buttonTitles:#('one' 'two' 'three').
+    box action:[:which | Transcript show:'button ';
+                                    show: which;
+                                    showCR:' was pressed'].
+    box showAtPointer
+                                                                        [exEnd]
+
+ returning a value:
+                                                                        [exBegin]
+    |what|
+
+    what := OptionBox 
+                  request:('text has not been accepted.\\Your modifications will be lost when continuing.') withCRs
+                  label:' Attention'
+                  image:(WarningBox iconBitmap)
+                  buttonLabels:#('Abort' 'Accept' 'Continue')
+                  values:#(#abort #accept #continue).
+    Transcript showCR:what.
+                                                                        [exEnd]
+
+
+ use callBack-hook to intercept creation:
+                                                                        [exBegin]
+    |what|
+
+    AboutToOpenBoxNotificationSignal handle:[:ex |
+        |box|
+
+        box := ex parameter.
+        box verticalPanel 
+            add:(CheckBox label:'Do no show this Dialog again.'
+                          model:false asValue).
+        ex proceed.
+    ] do:[
+        what := OptionBox 
+                      request:('bla bla bla bla.\\You must bla bla bla!!') withCRs
+                      label:' Attention'
+                      image:(WarningBox iconBitmap)
+                      buttonLabels:#('Abort' 'Accept' 'Continue')
+                      values:#(#abort #accept #continue)
+                      default:#continue.
+    ].
+    Transcript showCR:what.
+                                                                        [exEnd]
+"
+! !
+
+!OptionBox class methodsFor:'instance creation'!
+
+title:titleString numberOfOptions:nOptions
+    "create a new optionBox with title, aTitleString and nOptions options"
+
+    |box|
+
+    box := (self basicNew) numberOfOptions:nOptions.
+    box device:Screen current.
+    box initialize.
+    box title:titleString.
+    ^ box
+! !
+
+!OptionBox class methodsFor:'easy startup'!
+
+forRequest:title label:label image:anImage buttonLabels:labels values:values default:defaultValue
+    "create a new optionBox and return it.
+     Does not open the box."
+
+    |box|
+
+    box := OptionBox title:title numberOfOptions:(labels size).
+    box buttonTitles:labels.
+    box defaultButtonIndex:(values indexOf:defaultValue). 
+    box label:label; image:anImage.
+    values keysAndValuesDo:[:idx :val |
+        val == false ifTrue:[
+            (box buttons at:idx) cursor:(Cursor thumbsDown).
+        ].
+        val == true ifTrue:[
+            (box buttons at:idx) cursor:(Cursor thumbsUp).
+        ].
+    ].
+    ^ box
+
+    "Modified: / 23.2.2000 / 11:59:32 / cg"
+!
+
+request:title buttonLabels:labels values:values 
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil if cancelled"
+
+    ^ self 
+        request:title 
+        label:title 
+        buttonLabels:labels 
+        values:values
+
+    "
+     OptionBox 
+        request:'please select any'
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)   
+    "
+
+    "Modified: / 08-02-2011 / 11:22:13 / cg"
+!
+
+request:title buttonLabels:labels values:values default:defaultValue
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil if cancelled."
+
+    ^ self
+        request:title label:title image:(YesNoBox iconBitmap) buttonLabels:labels values:values 
+        default:defaultValue onCancel:nil
+
+    "
+     OptionBox 
+        request:'please select'
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)   
+        default:3   
+    "
+!
+
+request:title label:label buttonLabels:labels values:values 
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil if cancelled"
+
+    ^ self 
+        request:title 
+        label:label 
+        image:(YesNoBox iconBitmap)
+        buttonLabels:labels 
+        values:values 
+        default:nil 
+        onCancel:nil
+
+    "
+     OptionBox 
+        request:'please select'
+        label:'select any'
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)   
+    "
+
+    "Modified: / 08-02-2011 / 11:32:48 / cg"
+!
+
+request:title label:label buttonLabels:labels values:values default:defaultValue
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil if cancelled"
+
+    ^ self
+        request:title label:label image:(YesNoBox iconBitmap) buttonLabels:labels values:values 
+        default:defaultValue onCancel:nil
+
+    "
+     OptionBox 
+        request:'please select'
+        label:'select any'
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)   
+        default:3   
+    "
+!
+
+request:title label:label buttonLabels:labels values:values default:defaultValue onCancel:cancelValue
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return cancelValue if cancelled."
+
+    ^ self
+        request:title label:label image:(YesNoBox iconBitmap) buttonLabels:labels values:values 
+        default:defaultValue onCancel:cancelValue
+
+    "
+     OptionBox 
+        request:'please select'
+        label:'select any'
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)   
+        default:3   
+        onCancel:2   
+    "
+!
+
+request:title label:label image:anImage buttonLabels:labels values:values 
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil, if cancelled."
+
+    ^ self 
+        request:title label:label image:anImage buttonLabels:labels values:values 
+        default:nil onCancel:nil
+
+    "
+     OptionBox 
+        request:'please select'
+        label:'select any'
+        image:(WarningBox iconBitmap)
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)
+    "
+!
+
+request:title label:label image:anImage buttonLabels:labels values:values default:defaultValue
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil if cancelled."
+
+    ^ self
+        request:title label:label image:anImage buttonLabels:labels values:values 
+        default:defaultValue onCancel:nil
+
+    "
+     OptionBox 
+        request:'please select'
+        label:'select any'
+        image:(WarningBox iconBitmap)
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)
+        default:3
+    "
+!
+
+request:title label:label image:anImage buttonLabels:labels values:values default:defaultValue onCancel:cancelValue
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return cancelValue if cancelled."
+
+    |box retVal|
+
+    retVal := cancelValue.
+    box := self
+                forRequest:title 
+                label:label 
+                image:anImage 
+                buttonLabels:labels 
+                values:values 
+                default:defaultValue.
+
+    box action:[:n | retVal := values at:n].
+    self showAndThenDestroyBox:box.
+
+    ^ retVal
+
+    "
+     OptionBox 
+        request:'please select'
+        label:'select any'
+        image:(WarningBox iconBitmap)
+        buttonLabels:#('one' 'two' 'three')
+        values:#(1 2 3)
+        default:3
+        onCancel:nil
+    "
+
+    "Modified: / 23.2.2000 / 11:59:32 / cg"
+! !
+
+!OptionBox class methodsFor:'obsolete'!
+
+forRequest:title label:label form:anImage buttonLabels:labels values:values default:defaultValue
+    "create a new optionBox and return it.
+     Does not open the box."
+
+    <resource:#obsolete>
+
+    self forRequest:title label:label image:anImage buttonLabels:labels values:values default:defaultValue
+!
+
+request:title label:label form:aForm buttonLabels:labels values:values 
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil, if cancelled."
+
+    <resource:#obsolete>
+
+    ^ self 
+        request:title label:label image:aForm buttonLabels:labels values:values 
+        default:nil onCancel:nil
+!
+
+request:title label:label form:aForm buttonLabels:labels values:values default:defaultValue
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return nil if cancelled."
+
+    <resource:#obsolete>
+
+    ^ self
+        request:title 
+        label:label 
+        image:aForm 
+        buttonLabels:labels 
+        values:values 
+        default:defaultValue 
+        onCancel:nil
+!
+
+request:title label:label form:aForm buttonLabels:labels values:values default:defaultValue onCancel:cancelValue
+    "create a new optionBox, open it modal and return the value of
+     the corresponding values collection. Return cancelValue if cancelled."
+
+    <resource:#obsolete>
+
+    ^ self request:title label:label image:aForm buttonLabels:labels values:values default:defaultValue onCancel:cancelValue
+! !
+
+!OptionBox methodsFor:'accessing'!
+
+action:actionBlock
+    "define a single the action for all buttons.
+     The action will be evaluated with the button index as argument."
+
+    buttons keysAndValuesDo:[:index :button |
+	button action:[
+		       button turnOffWithoutRedraw.
+		       self hide.
+		       actionBlock value:index
+		      ]
+    ].
+!
+
+actions:actionBlocks
+    "define the actions"
+
+    actions := actionBlocks
+!
+
+buttonTitles:titles actions:actionBlocks
+    "define both button titles and actions"
+
+    self buttonTitles:titles.
+    actions := actionBlocks.
+!
+
+defaultButtonIndex:index
+    "define which button is the default (i.e. return-) button.
+     By default, no returnButton is setup. The argument must be an
+     index 1..nButtons, or nil"
+
+    defaultButtonIndex notNil ifTrue:[
+        (buttons at:defaultButtonIndex) isReturnButton:false
+    ].
+    (index notNil and:[index ~~ 0]) ifTrue:[
+        defaultButtonIndex := index.
+        defaultButtonIndex notNil ifTrue:[
+            (buttons at:defaultButtonIndex) isReturnButton:true 
+        ].
+    ]
+
+    "Modified: 18.10.1996 / 14:53:36 / cg"
+!
+
+numberOfOptions
+    "return the number of options"
+
+    ^ buttons size
+!
+
+numberOfOptions:nOptions
+    "set the number of options - this is a private interface"
+
+    buttons := OrderedCollection withSize:nOptions.
+    actions := OrderedCollection withSize:nOptions
+
+    "Modified: 18.10.1996 / 14:54:30 / cg"
+! !
+
+!OptionBox methodsFor:'accessing-components'!
+
+buttons
+    "return the buttons collection"
+
+    ^ buttons
+!
+
+labelPanel
+    ^ labelPanel
+! !
+
+!OptionBox methodsFor:'accessing-look'!
+
+buttonTitles:titles
+    "set the button titles"
+
+    titles keysAndValuesDo:[:index :aString |
+        |b|
+
+        (b := buttons at:index) label:aString.
+        b name: (b name? ''), index printString.
+        b resize.
+    ].
+    shown ifTrue:[self resize]
+!
+
+form:aFormOrImage
+    "historical leftover - define a form to be displayed left of the title"
+
+    <resource:#obsolete>
+
+    self image:aFormOrImage
+!
+
+formLabel
+    "return the label-view which displays a bitmap"
+
+    ^ formLabel
+!
+
+image:aFormOrImage
+    "set the image shown in the label-view"
+
+    |mm|
+
+    mm := ViewSpacing.
+    formLabel label:aFormOrImage.
+    textLabel origin:((mm + formLabel width + mm) @ mm).
+!
+
+textLabel
+    "return the label-view which displays a message string"
+
+    ^ textLabel
+!
+
+title:aString
+    "set the boxes title"
+
+    aString ~= textLabel label ifTrue:[
+	textLabel label:aString withoutSeparators.
+	textLabel forceResize.
+	shown ifTrue:[self resize]
+    ]
+!
+
+title:aString numberOfOptions:nOptions
+    "set the boxes title and number of options"
+
+    self title:aString.
+    buttons grow:nOptions.
+    actions grow:nOptions
+! !
+
+!OptionBox methodsFor:'events'!
+
+keyPress:aKey x:x y:y
+    "return-key duplicates ok-function if acceptReturnAsOK is true"
+
+"/    <resource: #keyboard (#Return)>
+
+"/ now done by keyboard processor
+"/    |action|
+"/
+"/    defaultButtonIndex notNil ifTrue:[
+"/        (aKey == #Return) ifTrue:[
+"/            self hide.
+"/            action := actions at:defaultButtonIndex.
+"/            action value
+"/        ]
+"/    ].
+    super keyPress:aKey x:x y:y
+
+    "Modified: 7.3.1996 / 13:17:36 / cg"
+! !
+
+!OptionBox methodsFor:'initialization'!
+
+initFormBitmap
+    WarnBitmap isNil ifTrue:[
+        WarnBitmap := WarningBox iconBitmap.
+"/        WarnBitmap := Image fromFile:'bitmaps/Warning.xbm' resolution:100 on:Display 
+    ].
+    formLabel label:WarnBitmap
+
+    "Modified: / 25.5.1999 / 16:08:06 / cg"
+!
+
+initialize
+    |mm vPanelLayout|
+
+    super initialize.
+
+    mm := ViewSpacing.
+
+    verticalPanel := VerticalPanelView in:self.
+    vPanelLayout := LayoutFrame origin:(mm @ mm) corner:(1.0@1.0).
+    vPanelLayout bottomOffset:(gc font height + (mm * 5)) negated.
+    vPanelLayout rightOffset:mm negated.
+    verticalPanel geometryLayout:vPanelLayout.
+    verticalPanel horizontalLayout:#fit.
+    verticalPanel verticalLayout:#bottomFit.
+
+    labelPanel := HorizontalPanelView in:verticalPanel.
+    labelPanel horizontalLayout:#leftSpace.
+    labelPanel verticalLayout:#topSpace.
+    labelPanel height:(labelPanel preferredHeight + (mm * 4)).
+
+    formLabel := Label in:labelPanel.
+    self initFormBitmap.
+    formLabel borderWidth:0.
+"/    formLabel origin:(mm @ mm).
+
+    textLabel := Label label:'Select' in:labelPanel.
+    textLabel borderWidth:0.
+"/    textLabel origin:((mm + formLabel width + mm) @ mm).
+
+    verticalPanel resize.
+    "/ cannot be done here - verticalPanel still has its defaul height and may be
+    "/ not yet filled...
+    "/ yPosition := verticalPanel height + (mm * 3).
+
+"/    buttonPanel isNil ifTrue:[
+"/        buttonPanel := HorizontalPanelView origin:(0.0 @ 1.0) corner:(1.0 @ 1.0) in:self.
+"/    ].
+    buttonPanel 
+        bottomInset:0 "mm";
+        topInset:(gc font height + (mm * 4)) negated.
+    buttonPanel 
+        borderWidth:0; 
+        horizontalLayout:#fitSpace.
+
+    1 to:(buttons size) do:[:index |
+        |button|
+
+        button := Button label:'press'.
+        button action:[
+                       (buttons at:index) turnOffWithoutRedraw.
+                       self hide.
+                       (actions at:index) value
+                      ].
+"/        index == nButt ifTrue:[
+"/            button isReturnButton:true
+"/        ].
+        buttonPanel addSubView:button.
+        buttons at:index put:button.
+    ].
+
+    "
+     |box|
+
+     box := OptionBox title:'hello' numberOfOptions:4.
+     box open
+    "
+
+    "Modified: / 28-02-2012 / 15:56:57 / cg"
+! !
+
+!OptionBox methodsFor:'queries'!
+
+preferredExtent 
+    "return a size to make everything fit into myself"
+
+    |w w1 h buttonPanelsPref vPanelsPref mm|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    mm := ViewSpacing.
+
+    vPanelsPref := verticalPanel preferredExtent.
+    w1 := (mm * 3) + formLabel width + textLabel width.
+    buttonPanelsPref := buttonPanel preferredExtent.
+    w := w1 max:buttonPanelsPref x.
+    w := w max:vPanelsPref x.
+
+    h := mm
+         + vPanelsPref y
+         + mm
+         + buttonPanelsPref y
+         + mm.
+
+    self subViews do:[:v |
+        (v ~~ verticalPanel and:[v ~~ buttonPanel]) ifTrue:[
+            h := h + v preferredExtent y.
+            w := w max:(v preferredExtent x).
+        ].
+    ].
+
+    preferredExtent := super preferredExtent max:(w @ h).
+    ^ preferredExtent
+
+    "Modified: 19.7.1996 / 20:45:11 / cg"
+! !
+
+!OptionBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/OptionBox.st,v 1.76 2014-02-18 15:02:08 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/OptionBox.st,v 1.76 2014-02-18 15:02:08 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PanelView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,673 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SimpleView subclass:#PanelView
+	instanceVariableNames:'hLayout vLayout verticalSpace horizontalSpace mustRearrange
+		elementsChangeSize ignoreInvisibleComponents backgroundChannel'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!PanelView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this is a view for holding subviews. (layout-widget ?)
+
+    Instances of PanelView try to get all their subviews into them,
+    arranging subviews left-to-right, top-to-bottom.
+
+    If you dont like its layout, define a new subclass or use one of
+    the existing subclasses: HorizontalPanelView and VerticalPanelView.
+
+    The panel assumes, that the elements do not resize themselfes, after it
+    became visible. This is not true for all widgets (buttons or labels may
+    like to change). If you have changing elements, tell this to the panel
+    with 'aPanel elementsChangeSize:true'. In that case, the panel will react
+    to size changes, and reorganize things.
+
+    PanelViews normally delay the actual positioning/sizing of their elements,
+    until actually displayed. This is useful, if more elements are to
+    be added, to avoid repeated configuration of the elements.
+
+    If you want to query for the relative position of an element BEFORE
+    the view is visible, you have to send #setChildPositionsIfChanged before
+    doing so (otherwise, you may get invalid origins from the subviews). As
+    an example, the modalBoxes do so before showing themselfes to ask for the
+    position of the ok-button relative to the top-left box-origin, in order to
+    position the ok-button under the mouse-pointer.
+
+    [Instance variables:]
+
+	hLayout         <Symbol>        controls horizontal layout; ignored in this
+					class, but used in Horizontal- and
+					VerticalPanelViews. See more info there.
+
+	vLayout         <Symbol>        controls vertical layout; ignored in this
+					class, but used in Horizontal- and
+					VerticalPanelViews. See more info there.
+
+	horizontalSpace <Integer>       number of pixels to use as space between elements
+					defaults to ViewSpacing, which is 1mm
+
+	verticalSpace   <Integer>       number of pixels to use as space between elements
+					defaults to ViewSpacing, which is 1mm
+
+	mustRearrange   <Boolean>       internal flag, if rearrangement is needed
+
+	elementsChangeSize   
+			<Boolean>       if true, the panel takes care of this situation.
+					By default, this is false.
+
+	ignoreInvisibleComponents
+			<Boolean>       if true, invisible (i.e. hidden) views
+					are not considered in the layout computation.
+					If false, they will lead to additional space
+					between visible components.
+					The default is false.
+
+    [author:]
+	Claus Gittinger
+"
+!
+
+examples
+"
+    The generic panelView simply tries to get its
+    components arranged for fitting them all into
+    its area. No special layout is done, except for
+    horizontal/vertical spacings.
+    The view is filled top-left to bottom-right
+    with subcomponents. Subcomponents are not resized.
+
+    example:
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'panel'.
+
+        p := PanelView in:v.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'button2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:300 @ 100.
+        v open
+                                                                        [exEnd]
+
+
+   invisible component not considered in layout:
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'panel'.
+
+        p := PanelView in:v.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'button2' in:p.
+        b2 beInvisible.
+        b3 := Button label:'button3' in:p.
+        v extent:300 @ 100.
+        v open
+                                                                        [exEnd]
+
+   invisible component considered in layout:
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'panel'.
+
+        p := PanelView in:v.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        p ignoreInvisibleComponents:false.
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'button2' in:p.
+        b2 beInvisible.
+        b3 := Button label:'button3' in:p.
+        v extent:300 @ 100.
+        v open
+                                                                        [exEnd]
+"
+! !
+
+!PanelView methodsFor:'accessing'!
+
+elementsChangeSize
+    "tell the panel if elements are to change their size by themselfes
+     (for example, Labels or Buttons may do so if their contents changes).
+     Setting this flag will make the panel reorganize the elements whenever
+     any element changes its size."
+
+    ^ elementsChangeSize 
+!
+
+elementsChangeSize:aBoolean
+    "tell the panel if elements are to change their size by themselfes
+     (for example, Labels or Buttons may do so if their contents changes).
+     Setting this flag will make the panel reorganize the elements whenever
+     any element changes its size."
+
+    elementsChangeSize ~~ aBoolean ifTrue:[
+        elementsChangeSize := aBoolean.
+        aBoolean ifTrue:[
+            self makeMyselfDependentOnSubviews.
+        ].
+    ].
+!
+
+hierarchicalIndexOfChild:aView
+    ^ aView hierarchicalIndexInList:subViews
+!
+
+horizontalLayout
+    "not supported by this view"
+
+    ^ nil
+!
+
+horizontalLayout:aLayoutSymbol
+    "not supported by this view"
+
+!
+
+horizontalSpace
+    "return the horizontal space between elements on pixels (default is 1mm)"
+
+    ^ horizontalSpace 
+!
+
+horizontalSpace:numberOfPixels
+    "set the horizontal space between elements on pixels (default is 1mm)"
+
+    horizontalSpace ~= numberOfPixels ifTrue:[
+	horizontalSpace := numberOfPixels.
+	self layoutChanged
+    ]
+!
+
+ignoreInvisibleComponents
+    "return the flag which controls if invisible (unrealized)
+     components should be ignored in the layout computation.
+     By default, it is false, which means that invisible components will
+     lead to a visible space between visible components"
+
+    ^ ignoreInvisibleComponents
+!
+
+ignoreInvisibleComponents:aBoolean
+    "set/clears the flag which controls if invisible (unrealized)
+     components should be ignored in the layout computation.
+     By default, it is false, which means that invisible components will
+     lead to a visible space between visible components."
+
+    (ignoreInvisibleComponents ~~ aBoolean) ifTrue:[
+        aBoolean ifTrue:[
+            self makeMyselfDependentOnSubviews.
+        ].
+        ignoreInvisibleComponents := aBoolean.
+        self layoutChanged
+    ]
+
+    "Modified: / 20.7.1998 / 14:12:38 / cg"
+!
+
+space:numberOfPixels
+    "set the space between elements in pixels (default is 1mm) for both directions"
+
+    (verticalSpace ~= numberOfPixels 
+    or:[horizontalSpace ~= numberOfPixels]) ifTrue:[
+	horizontalSpace := numberOfPixels.
+	verticalSpace := numberOfPixels.
+	self layoutChanged
+    ]
+!
+
+verticalLayout
+    "not supported by this view"
+
+    ^ nil
+!
+
+verticalLayout:aLayoutSymbol
+    "not supported by this view"
+
+!
+
+verticalSpace
+    "return the vertical space between elements on pixels (default is 1mm)"
+
+    ^ verticalSpace 
+!
+
+verticalSpace:numberOfPixels
+    "set the vertical space between elements (in pixels).
+     The default is computed for 1mm spacing."
+
+    verticalSpace ~= numberOfPixels ifTrue:[
+	verticalSpace := numberOfPixels.
+	self layoutChanged
+    ]
+! !
+
+!PanelView methodsFor:'accessing-channels'!
+
+backgroundChannel 
+    "return a valueHolder for background color"
+
+    ^ backgroundChannel
+
+    "Modified: / 30.3.1999 / 13:49:28 / stefan"
+    "Created: / 30.3.1999 / 13:50:55 / stefan"
+!
+
+backgroundChannel:aValueHolder
+    "set the backgroundChannel - a valueHolder holding a color"
+
+    |prev|
+
+    prev := backgroundChannel.
+    backgroundChannel := aValueHolder.
+    self setupChannel:aValueHolder for:#backgroundColorChanged withOld:prev
+
+    "Modified: / 31.10.1997 / 14:38:38 / cg"
+    "Created: / 30.3.1999 / 13:48:42 / stefan"
+! !
+
+!PanelView methodsFor:'adding & removing subviews'!
+
+addComponent:aComponent
+    "redefined to recompute layout when a component is added"
+
+    super addComponent:aComponent.
+    self addedView:aComponent
+
+    "Created: 28.1.1997 / 17:44:18 / cg"
+!
+
+addSubView:aView
+    "redefined to recompute layout when a subview is added"
+
+    super addSubView:aView.
+    self addedView:aView
+!
+
+addSubView:newView after:aViewOrNil
+    "redefined to recompute layout when a subview is added"
+
+    super addSubView:newView after:aViewOrNil.
+    self addedView:newView
+
+    "Modified: / 15-07-1996 / 10:15:04 / cg"
+    "Modified (format): / 22-03-2012 / 10:37:42 / cg"
+!
+
+addSubView:newView before:aViewOrNil
+    "redefined to recompute layout when a subview is added"
+
+    super addSubView:newView before:aViewOrNil.
+    self addedView:newView
+
+    "Modified: / 15-07-1996 / 10:14:39 / cg"
+    "Modified (format): / 22-03-2012 / 10:37:46 / cg"
+!
+
+removeSubView:aView
+    "redefined to recompute layout when a subview is removed"
+
+    super removeSubView:aView.
+    aView removeDependent:self.
+    self layoutChanged
+! !
+
+!PanelView methodsFor:'enumerating subviews'!
+
+changeSequenceOrderFor:aSubView to:anIndex
+    "change a subview's position in the subviews collection.
+     This affects the arrangemnt of the views."
+
+    |success|
+
+    success := super changeSequenceOrderFor:aSubView to:anIndex.
+
+    success ifTrue:[
+        self layoutChanged.
+    ].
+    ^ success
+
+    "
+     |panel comp1 comp2 comp3|
+
+     panel := HorizontalPanelView new.
+     comp1 := Label label:'one' in:panel.
+     comp2 := Label label:'two' in:panel.
+     comp3 := Label label:'three' in:panel.
+     panel open.
+     Delay waitForSeconds:3.
+     panel changeSequenceOrderFor:comp2 to:3.
+     Delay waitForSeconds:3.
+     panel changeSequenceOrderFor:comp2 to:1.
+    "
+
+    "Modified: / 17.1.1998 / 00:13:43 / cg"
+! !
+
+!PanelView methodsFor:'event handling'!
+
+backgroundColorChanged
+    "called to update the background color"
+
+    |color|
+
+    color := backgroundChannel value.
+    self backgroundColor:color.
+!
+
+sizeChanged:how
+    "my size has changed - must rearrange elements"
+
+    super sizeChanged:how.
+    "/ self layoutChanged - no; leads to recursion
+    realized ifTrue:[
+        self setChildPositions
+    ] ifFalse:[
+        mustRearrange := true
+    ].
+!
+
+update:something with:aParameter from:changedObject
+    "an element changed its size"
+
+    something == #sizeOfView ifTrue:[
+        elementsChangeSize ifTrue:[
+            self layoutChanged.
+        ].
+        ^ self
+    ].
+"/    something == #preferredExtent ifTrue:[
+"/        elementsChangeSize ifTrue:[
+"/            self layoutChanged.
+"/        ].
+"/        ^ self
+"/    ].
+    something == #visibility ifTrue:[
+        ignoreInvisibleComponents ifTrue:[
+            self layoutChanged.
+        ].
+        ^ self
+    ].
+    ^ super update:something with:aParameter from:changedObject
+
+    "Modified: 28.1.1997 / 17:52:44 / cg"
+! !
+
+!PanelView methodsFor:'focus handling'!
+
+wantsFocusWithButtonPress
+    "no, do not catch the keyboard focus on button click"
+
+    ^ false
+
+
+! !
+
+!PanelView methodsFor:'initialization'!
+
+initialize
+    super initialize.
+
+    hLayout := vLayout := #center.  "/ notice, this is ignored in this class
+				    "/ used by subclasses only
+    verticalSpace := ViewSpacing.
+    horizontalSpace := ViewSpacing.
+    mustRearrange := elementsChangeSize := false.
+    ignoreInvisibleComponents := true.
+!
+
+realize
+    mustRearrange ifTrue:[
+	self setChildPositions
+    ].
+    super realize
+!
+
+resize
+    super resize.
+    mustRearrange ifTrue:[
+	self setChildPositions
+    ].
+!
+
+setChildPositionsIfChanged
+    "set all of my child positions - this is usually delayed,
+     until the panel is actually shown (since we dont know, if more
+     elements are to be added) thus avoiding repositioning the elements
+     over and over. However, sometimes it is nescessary, to force positioning
+     the elements, for example, before querying the relative position of
+     an element (modalBoxes do so, to position the ok-button under the mouse
+     pointer)."
+
+    mustRearrange ifTrue:[
+	self setChildPositions
+    ].
+
+! !
+
+!PanelView methodsFor:'layout'!
+
+preferredExtent
+    "return a good extent, one that makes subviews fit.
+     Note that width is considered as given, and compute height here."
+
+    |subViews xpos totalHeight maxHeightInRow first|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    subViews := self subViewsToConsider.
+    subViews isEmptyOrNil ifTrue:[
+        ^ super preferredExtent.
+    ].
+
+    xpos := horizontalSpace.
+
+    totalHeight := 0.
+    maxHeightInRow := 0.
+    first := true.
+
+    subViews do:[:eachChild | |childPreferredExtent|
+        childPreferredExtent := eachChild preferredExtent.
+        
+        "go to next row, if this subview won't fit"
+        first ifFalse: [
+            (xpos + childPreferredExtent x + horizontalSpace) > width
+            ifTrue: [
+                xpos := horizontalSpace.
+                totalHeight := totalHeight + maxHeightInRow + verticalSpace.
+                maxHeightInRow := 0.
+            ]
+        ].
+
+        xpos := xpos + (childPreferredExtent x) + horizontalSpace.
+        (maxHeightInRow < (childPreferredExtent y)) ifTrue:[
+            maxHeightInRow := childPreferredExtent y.
+        ].
+        first := false
+    ].
+    maxHeightInRow ~= 0 ifTrue:[
+        totalHeight := totalHeight + maxHeightInRow + verticalSpace.
+    ].
+
+    ^ width @ totalHeight
+!
+
+setChildPositions
+    "(re)compute position of every child.
+     This method is redefined for different layout characteristics - you may
+     even create subclasses with completely different geometry management."
+
+    |first xpos ypos maxHeightInRow thisRow subViews ext|
+
+    subViews := self subViewsToConsider.
+    subViews size == 0 ifTrue:[^ self].
+
+"/    self extentChangedFlag ifTrue:[
+"/        ext := self computeExtent.
+"/        width := ext x.
+"/        height := ext y.
+"/    ].
+
+    xpos := horizontalSpace.
+    ypos := verticalSpace.
+
+    maxHeightInRow := 0.
+    first := true.
+    thisRow := OrderedCollection new.
+    subViews do:[:child |
+        "go to next row, if this subview won't fit"
+        first ifFalse: [
+            (xpos + child widthIncludingBorder + horizontalSpace) > width
+            ifTrue: [
+                thisRow notEmpty ifTrue:[
+                    thisRow do:[:rowElement |
+                        rowElement heightIncludingBorder < maxHeightInRow ifTrue:[
+                            rowElement top:(rowElement top + (maxHeightInRow - rowElement heightIncludingBorder))
+                        ]
+                    ]
+                ].
+                ypos := ypos + verticalSpace + maxHeightInRow.
+                xpos := horizontalSpace.
+                maxHeightInRow := 0.
+                thisRow := OrderedCollection new.
+            ]
+        ].
+        thisRow add:child.
+        child origin:(xpos@ypos).
+        xpos := xpos + (child widthIncludingBorder) + horizontalSpace.
+        (maxHeightInRow < (child heightIncludingBorder)) ifTrue:[
+            maxHeightInRow := child heightIncludingBorder
+        ].
+        first := false
+    ].
+    thisRow notEmpty ifTrue:[
+        thisRow do:[:rowElement |
+            rowElement heightIncludingBorder < maxHeightInRow ifTrue:[
+                rowElement top:(rowElement top + (maxHeightInRow - rowElement heightIncludingBorder))
+            ]
+        ]
+    ].
+    mustRearrange := false
+
+    "Modified: / 17.1.1998 / 00:17:19 / cg"
+! !
+
+!PanelView methodsFor:'private'!
+
+addedView:aView
+    "added a new element - rearrange components"
+
+    (elementsChangeSize or:[ignoreInvisibleComponents]) ifTrue:[
+        aView addDependent:self
+    ].
+    aView resize.
+"/    explicitExtent ~~ true ifTrue:[
+"/        self resize
+"/    ].
+    self layoutChanged
+
+    "Modified: 28.1.1997 / 17:45:10 / cg"
+!
+
+layoutChanged
+    "called whenever repositioning is required. If the panel view is
+     already visible, reposition elements right now. Otherwise, remember
+     that a repositioning is needed to do so when the view eventually becomes
+     visible."
+
+    super layoutChanged.
+    realized ifTrue:[
+        self setChildPositions
+    ] ifFalse:[
+        mustRearrange := true
+    ].
+!
+
+makeMyselfDependentOnSubviews
+    subViews notNil ifTrue:[
+        subViews do:[:aView |
+            aView addDependent:self
+        ]
+    ]
+!
+
+subViewsToConsider
+    "return a collection of subviews which are to be considered in
+     the layout. If ignoreInvisibleComponents is true, only visible 
+     components are considered; otherwise, all are considered."
+
+    |subViews|
+
+    subViews := self subViews.
+    ignoreInvisibleComponents ifTrue:[
+        subViews size ~~ 0 ifTrue:[
+            subViews := subViews 
+                            select:[:v | realized 
+                                            ifTrue:[v realized]       
+                                            ifFalse:[v isHiddenOnRealize not]
+                                   ].
+        ].
+    ].
+    ^ subViews
+
+    "Created: / 17.1.1998 / 00:17:05 / cg"
+! !
+
+!PanelView methodsFor:'queries'!
+
+isLayoutWrapper
+    "answer true, if this view defines the layout of it's subviews"
+
+    ^ true
+! !
+
+!PanelView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/PanelView.st,v 1.47 2014-03-16 21:25:09 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PopUpList.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1154 @@
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Button subclass:#PopUpList
+	instanceVariableNames:'menu menuAction values useIndex listMsg defaultLabel listHolder
+		showHandle ignoreReselect'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!PopUpList class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a PopUpList is basically a button with a popup menu.
+    The PopUpLists label is showing the current selection from the
+    list.
+    When an entry is selected, an actionBlock (if nonNil) is evaluated
+    and (if nonNil), the model is notified via the changeMessage.
+
+    If no model is set, the list is assumed to be a static list, which
+    is defined via #list:, and the popUpList evaluates the action block,
+    as defined via #action:.
+
+    If a model is provided, it should return the current selected items index via the 
+    aspectMessage (default is #selection or: #selectionIndex, depending on the setting 
+    of useIndex) and the list via the listMessage (default is #list).
+    If the listMessage was set to nil, the list is not aquired from the model
+    and can be set explicitely via #list:.
+
+    The defaults are set to allow a PopUpList to be used with a SelectionInList 
+    as model without further setup.
+    A simple valueHolder may also be used without further setup.
+    (if used with some other model, either use an adaptor, or set the
+     change/aspect and/or listMessage to something else ..)
+
+    If a listHolder is set, this one is always asked for the list instead of the
+    model, via the #value message. 
+    This allows the popUpListView to aquire the list and value from different places.
+
+
+    Notice: PopUpList and ComboListView provide a similar protocol and functionality.
+
+
+    [Instance variables:]
+
+        menu                            helpers for the popup menu
+        menuAction 
+        values 
+
+        useIndex             <Boolean>  if true, the index of the selected entry
+                                        is passed to the action block and the
+                                        model in a change-message.
+                                        If false (the default), the value is passed.
+                                        Notice that the default changeMessage is
+                                        #selection:, which is not ok to be used
+                                        with useIndex:true and a selectionInList model.
+                                        (set the changeMessage to #selectionIndex: then)
+
+        listMsg              <Symbol>   message to aquire a new list from the
+                                        model. Default is #list.
+
+
+        listHolder           <Object>   if non-nil, this object is assumed to return the
+                                        list via the listMsg (instead of the model).
+                                        Default is nil.
+
+    [see also:]
+        SelectionInList ValueHolder
+        SelectionInListView
+        ComboListView
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples
+"
+  non-MVC use:
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'healthy fruit'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p open
+                                                                        [exEnd]
+
+
+    with an initial selection:
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'dummy'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p selection:'apples'.
+     p open
+                                                                        [exEnd]
+
+
+    with separating lines:
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'fruit'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' '-' 'margaritas').
+     p selection:'apples'.
+     p open
+                                                                        [exEnd]
+
+
+    draw without menu-handle:
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'fruit'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' '-' 'margaritas').
+     p showHandle:false.
+     p open
+                                                                        [exEnd]
+
+
+    with an action:
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'dummy'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' '-' 'margaritas').
+     p selection:'apples'.
+     p action:[:what | Transcript showCR:'you selected: ' , what].
+     p open
+                                                                        [exEnd]
+
+
+    sometimes, you may like the index instead of the value:
+    (notice, that the separating line counts, so you have to take care ...)
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'dummy'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' '-' 'margaritas').
+     p selection:'apples'.
+     p action:[:what | Transcript show:'you selected: '; showCR:what].
+     p useIndex:true.
+     p open
+                                                                        [exEnd]
+
+
+    since the list is actually a popupMenu, you can add double-separators:
+    also, here values are different from the labels
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'dummy'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 
+              '=' 
+              'margaritas' 'pina colada'
+              '=' 
+              'smalltalk' 'c++' 'eiffel' 'java').
+     p values:#(apples bananas grape lemon 
+                nil 
+                'mhmh - so good' 'makes headache'
+                nil
+                'great' 'another headache' 'not bad' 'neat').
+     p selection:'apples'.
+     p action:[:what | Transcript show:'you selected: '; showCR:what].
+     p open
+                                                                        [exEnd]
+
+
+    since the list is actually represented by a menuView,
+    which itself is inheriting from listView, which itself can display
+    things different from strings, arbitrary lists can be constructed:
+    (see ListEntry, LabelAndIcon and Text classes)
+                                                                        [exBegin]
+     |p l|
+     p := PopUpList label:'dummy'.
+     l := OrderedCollection new.
+     l add:(Text string:'apples' color:Color red).
+     l add:(Text string:'bananas' color:Color red).
+     l add:(Text string:'grape' color:Color red).
+     l add:(Text string:'lemon' color:Color red).
+     l add:'='.
+     l add:(Text string:'margaritas' color:Color green darkened darkened).
+     l add:(Text string:'pina colada' color:Color green darkened darkened).
+     l add:'='.
+     l add:(Text string:'smalltalk' color:Color blue).
+     l add:(Text string:'c++' color:Color blue).
+     l add:(Text string:'eiffel' color:Color blue).
+     l add:(Text string:'java' color:Color blue).
+     p list:l.
+     p values:#(apples bananas grape lemon 
+                nil 
+                'mhmh - so good' 'makes headache'
+                nil
+                'great' 'another headache' 'not bad' 'neat').
+     p selection:'apples'.
+     p action:[:what | Transcript show:'you selected: '; showCR:what].
+     p open
+                                                                        [exEnd]
+
+
+    with values different from the label strings:
+                                                                        [exBegin]
+     |p|
+     p := PopUpList label:'dummy'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' '-' 'margaritas').
+     p selection:'apples'.
+     p values:#(10 20 30 40 nil 50).
+     p action:[:what | Transcript show:'you selected: '; showCR:what].
+     p open
+                                                                        [exEnd]
+
+
+    with values different from the label strings:
+                                                                        [exBegin]
+     |p|
+
+     p := PopUpList label:'language selection'.
+     p list:( #(
+                'usa'
+                'uk'
+                'france'
+                'germany'       
+                'italy'
+               ) collect:[:country |
+                            LabelAndIcon 
+                                icon:(Image fromFile:'bitmaps/xpmBitmaps/countries/' , country , '.xpm')
+                                string:country
+                         ]
+            ).
+     p values:#(us england france germany italy).
+
+     p action:[:what | Transcript show:'you selected: '; showCR:what].
+     p open
+                                                                        [exEnd]
+
+
+  with a model (see in the inspector, how the index-holders value changes)
+  the defaults are setup to allow a SelectionInList directly as model:
+                                                                        [exBegin]
+     |p model|
+
+     model := SelectionInList with:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+
+     p := PopUpList label:'healthy fruit'.
+     p model:model.
+     p open.
+     model inspect
+                                                                        [exEnd]
+
+
+  model provides selection; list is explicit:
+  must change the aspect, since the default setup is for a SelectionInList
+                                                                [exBegin]
+     |model top b|
+
+     model := 'foo' asValue.
+
+     top := StandardSystemView new.
+     top extent:(300 @ 200).
+
+     b := PopUpList in:top.
+     b origin:(0.0 @ 0.0) corner:(1.0 @ 0.0).
+     b bottomInset:(b preferredExtent y negated).
+
+     b list:#('hello' 'world' 'this' 'is' 'st/x').
+     b model:model; aspect:#value; change:#value:.
+
+     top openModal.
+     Transcript showCR:('comboBox''s value: ' , model value).
+                                                                [exEnd]
+
+
+    a popupList and a SelectionInListView on the same model:
+                                                                        [exBegin]
+     |p slv model|
+
+     model := SelectionInList with:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     model selection:'apples'.
+
+     p := PopUpList on:model.
+     p open.
+
+     slv := SelectionInListView on:model.
+     slv open.
+                                                                        [exEnd]
+
+
+    dynamically changing the list (click button(s) to change):
+                                                                        [exBegin]
+     |p slv model b|
+
+     model := SelectionInList with:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     model selection:'apples'.
+
+     p := PopUpList on:model.
+     p open.
+
+     slv := SelectionInListView on:model.
+     slv open.
+
+     b := Button label:'long list' action:[model list:#('1' '2' '3' '4' '5' '6')].
+     b open.
+     b := Button label:'short list' action:[model list:#('1' '2' '3')].
+     b open.
+
+                                                                        [exEnd]
+
+
+
+    two PopUpLists on the same model, different aspects:
+                                                                        [exBegin]
+     |top panel p model|
+
+     model := Plug new.
+     model respondTo:#eat: with:[:val | Transcript showCR:'eat: ' , val].
+     model respondTo:#drink: with:[:val | Transcript showCR:'drink: ' , val].
+     model respondTo:#meals with:[#(taco burrito enchilada)].
+     model respondTo:#drinks with:[#(margarita water corona)].
+
+     top := StandardSystemView new.
+     top extent:(100@100).
+     panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+     panel horizontalLayout:#fitSpace.
+
+     p := PopUpList label:'meals'.
+     p model:model; listMessage:#meals; aspect:nil; change:#eat:.
+     panel add:p.
+
+     p := PopUpList label:'drinks'.
+     p model:model; listMessage:#drinks; aspect:nil; change:#drink:.
+     panel add:p.
+
+     top open
+                                                                        [exEnd]
+
+
+    with separate list- and indexHolders:
+                                                                        [exBegin]
+     |p selectionHolder listHolder|
+
+     listHolder := #('apples' 'bananas' 'grape' 'lemon' 'margaritas') asValue.
+     selectionHolder := 'apples' asValue.
+
+     p := PopUpList label:'healthy fruit'.
+     p listHolder:listHolder.
+     p model:selectionHolder; aspect:#value; change:#value:.
+     p open.
+     selectionHolder inspect
+                                                                        [exEnd]
+
+    same, using index:
+                                                                        [exBegin]
+     |p selectionIndexHolder listHolder|
+
+     listHolder := #('apples' 'bananas' 'grape' 'lemon' 'margaritas') asValue.
+     selectionIndexHolder := 3 asValue.
+
+     p := PopUpList new.
+     p listHolder:listHolder.
+     p model:selectionIndexHolder; aspect:#value; change:#value:.
+     p useIndex:true.
+     p open.
+     selectionIndexHolder inspect
+                                                                        [exEnd]
+
+    using different values:
+                                                                        [exBegin]
+     |p selectionHolder listHolder values|
+
+     listHolder := #('apples' 'bananas' 'grape' 'lemon' 'margaritas') asValue.
+     values := #(apples bananas grape lemon alcohol).
+
+     selectionHolder := #alcohol asValue.
+
+     p := PopUpList label:'healthy fruit'.
+     p listHolder:listHolder.
+     p model:selectionHolder; aspect:#value; change:#value:.
+     p values:values.
+     p open.
+     selectionHolder inspect
+                                                                        [exEnd]
+
+    provide your own menu (spec could come from a specMethod):
+                                                                        [exBegin]
+     |p myMenu selectionHolder|
+
+     selectionHolder := nil asValue.
+     myMenu :=
+       #(#Menu
+           #(
+            #(#MenuItem
+                #label: 'Oranges'
+                #translateLabel: true
+                #value: #oranges
+            )
+            #(#MenuItem
+                #label: 'Lemons'
+                #translateLabel: true
+                #value: #lemons
+            )
+            #(#MenuItem
+                #label: 'grape'
+                #translateLabel: true
+                #value: #grape
+            )
+            #(#MenuItem
+                #label: '-'
+            )
+            #(#MenuItem
+               #label: 'other'
+               #translateLabel: true
+               #value: #other
+               #submenu: 
+                  #(#Menu
+                     #(
+                      #(#MenuItem
+                         #label: 'margarita'
+                         #translateLabel: true
+                         #value: #margarita
+                       )
+                      #(#MenuItem
+                         #label: 'vine'
+                         #translateLabel: true
+                         #value: #vine
+                       )
+                      )
+                   )
+            )
+          )
+       ) decodeAsLiteralArray.
+     p := PopUpList label:'healthy fruit'.
+     p menu:myMenu.
+     p model:selectionHolder; aspect:#value; change:#value:.
+     selectionHolder inspect.
+     p open.
+                                                                        [exEnd]
+
+"
+! !
+
+!PopUpList class methodsFor:'defaults'!
+
+defaultAspectMessage
+    ^ #selection
+!
+
+defaultChangeMessage
+    ^ #selection:
+!
+
+defaultListMessage
+    ^ #list 
+! !
+
+!PopUpList methodsFor:'accessing'!
+
+contents
+    "return the current contents"
+
+    ^ self label
+!
+
+contents:con
+    "change the contents"
+
+    ^ self selection:con
+
+    "Modified: 25.5.1996 / 14:20:57 / cg"
+!
+
+defaultLabel:aString
+    "set the defaultLabel, to be shown if nothing is selected"
+
+    defaultLabel := aString.
+    shown ifFalse:[
+        super label:defaultLabel
+    ].
+
+    "Modified: / 29.10.1997 / 15:50:10 / cg"
+!
+
+label:aString
+    self defaultLabel:aString.
+    model isNil ifTrue:[
+        super label:aString suppressResize:(self shown)
+    ].
+
+    "Created: / 1.3.1997 / 02:09:02 / cg"
+    "Modified: / 29.10.1997 / 15:49:50 / cg"
+!
+
+list
+    "return the list - i.e. the values shown in the pop-up list"
+
+    ^ menu labels
+!
+
+list:aList
+    "set the list - i.e. the values shown in the pop-up list"
+
+    self createMenuFor:aList.
+    realized ifTrue:[
+	self computeLabelSize
+    ]
+
+    "
+     |p|
+     p := PopUpList label:'fruit ?'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p action:[:val | Transcript showCR:'selected: ' , val printString].   
+     p open
+    "
+!
+
+selection:indexOrString
+    "set (force) a selection - usually done to set
+     an initial selection without updating others"
+
+    |index menuLabels newLabel|
+
+    menu isNil ifTrue:[
+        self getListFromModel.
+    ].
+    menu isNil ifTrue:[^ self].
+    menuLabels := menu labels.
+
+    (useIndex not and:[values notNil]) ifTrue:[
+        values notNil ifTrue:[
+            index := values indexOf:indexOrString
+        ]
+    ] ifFalse:[
+        indexOrString isNumber ifTrue:[
+            index := indexOrString
+        ] ifFalse:[
+            menuLabels notNil ifTrue:[
+                index := menuLabels indexOf:indexOrString.
+            ]
+        ].
+        "/ fails if list consists of symbols ...
+        "/ index := menu indexOf:indexOrString.
+    ].
+    (index isNil or:[index > menuLabels size]) ifTrue:[
+        index := 0
+    ].
+
+    index == 0 ifTrue:[
+        newLabel := defaultLabel
+    ] ifFalse:[
+        newLabel := (menuLabels at:index) printString
+    ].
+
+    "kludge: dont want label to resize ..."
+
+    self label:newLabel suppressResize:true.
+
+    "
+     |p|
+     p := PopUpList label:'what fruit ?'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p selection:'grape'.
+     p open 
+
+     |p|
+     p := PopUpList label:'what fruit ?'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p selection:'blabla'.
+     p open
+
+     |p|
+     p := PopUpList label:'what fruit ?'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p defaultLabel:'nothing selected'.
+     p selection:'blabla'.
+     p open
+    "
+
+    "Modified: / 29.10.1997 / 15:50:12 / cg"
+!
+
+values:aList
+    "set a value list - these are reported via the action or changeSymbol instead of
+     the label strings."
+
+    values := aList.
+
+    "
+     |p|
+     p := PopUpList label:'fruit ?'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p values:#(1 2 3 4 'mhmh - good').
+     p action:[:val | Transcript showCR:'selected: ' , val printString].   
+     p open.
+    "
+
+    "Modified: 27.2.1997 / 10:24:12 / cg"
+! !
+
+!PopUpList methodsFor:'accessing-behavior'!
+
+action:aOneArgBlock
+    "set the action to be performed on selection changes;
+     the argument, aOneArgBlock will be evaluated with the
+     selection-value as argument"
+
+    menuAction := aOneArgBlock
+!
+
+ignoreReselect:aBoolean 
+    ignoreReselect := aBoolean
+!
+
+menu:aMenu
+    "explicit change of the menu; 
+     allows for non-list-based, or MenuBuilder-constructed menus to be used.
+     Attention: this bypasses the list/listHolder"
+
+    menu := aMenu.
+!
+
+menu:aMenu default:label
+    "explicit change of the menu and default value; 
+     allows for non-list-based, or MenuBuilder-constructed menus to be used.
+     Attention: this bypasses the list/listHolder"
+
+    menu := aMenu.
+    defaultLabel := label
+!
+
+useIndex
+    "tell the popuplist to pass the index (instead of the value)
+     to both the actionBlock and model. Notice, that if you use a model,
+     the default changeSelector is not ok for using index and a SelectionInList"
+
+    ^ useIndex
+!
+
+useIndex:aBoolean 
+    "tell the popuplist to pass the index (instead of the value)
+     to both the actionBlock and model. Notice, that if you use a model,
+     the default changeSelector is not ok for using index and a SelectionInList"
+
+    useIndex := aBoolean
+
+    "
+     |p|
+     p := PopUpList label:'fruit ?'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p action:[:val | Transcript showCR:'selected: ' , val printString].   
+     p open.
+    "
+    "
+     |p|
+     p := PopUpList label:'fruit ?'.
+     p list:#('apples' 'bananas' 'grape' 'lemon' 'margaritas').
+     p action:[:val | Transcript showCR:'selected: ' , val printString].   
+     p useIndex:true.
+     p open.
+    "
+! !
+
+!PopUpList methodsFor:'accessing-look'!
+
+showHandle
+    "return true if the pull-handle is to be drawn; default is true"
+
+    ^ showHandle
+
+    "Created: / 6.3.1999 / 21:26:40 / cg"
+!
+
+showHandle:aBoolean
+    "controls if the pull-handle is to be drawn; default is true"
+
+    showHandle ~~ aBoolean ifTrue:[
+        showHandle := aBoolean.
+        self computeLabelSize
+    ].
+
+    "Modified: / 6.3.1999 / 21:58:21 / cg"
+! !
+
+!PopUpList methodsFor:'accessing-mvc'!
+
+addModelInterfaceTo:aDictionary
+    "see comment in View>>modelInterface"
+
+    super addModelInterfaceTo:aDictionary.
+    aDictionary at:#listMessage put:listMsg
+
+    "Modified: 26.2.1997 / 19:08:04 / cg"
+!
+
+listHolder
+    "return the listHolder if any"
+
+    ^ listHolder
+!
+
+listHolder:aValueHolder
+    "set the listHolder - if non nil, that one is assumed to provide the
+     list via #value.
+     If a listHolder was defined, the model is never asked for the list."
+
+    listHolder notNil ifTrue:[
+        listHolder removeDependent:self.
+    ].
+    listHolder := aValueHolder.
+    listHolder notNil ifTrue:[
+        listHolder addDependent:self.
+    ].
+    shown ifTrue:[
+        self getListFromModel
+    ]
+
+    "Modified: 26.2.1997 / 19:06:01 / cg"
+!
+
+listMessage
+    "return the selector by which we ask the model or listHolder for the list.
+     The default is #list. 
+     If a listHolder was defined, the model is never asked for the list."
+
+    ^ listMsg
+
+    "Modified: 26.2.1997 / 19:05:27 / cg"
+!
+
+listMessage:aSelector
+    "set the selector by which we ask the model for the list.
+     The default is #list. 
+     If a listHolder was defined, the model is never asked for the list."
+
+    listMsg := aSelector
+
+    "Modified: 26.2.1997 / 19:05:18 / cg"
+!
+
+model:aModel
+    "set the model which provides the selection and/or the list"
+
+    super model:aModel.
+    self getListFromModel.
+    self getSelectionFromModel.
+
+    "Created: 28.2.1997 / 19:12:08 / cg"
+! !
+
+!PopUpList methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    changedObject == listHolder ifTrue:[
+        self getListFromModel.
+        ^ self
+    ].
+    changedObject == model ifTrue:[
+        aspectMsg notNil ifTrue:[
+
+            self getSelectionFromModel.
+        ].
+        listHolder notNil ifTrue:[
+            "/ that one holds the list;
+            "/ model holds the value
+            self getSelectionFromModel
+        ] ifFalse:[
+            listMsg notNil ifTrue:[
+                self getListFromModel.
+            ]
+        ].
+        ^ self
+    ].
+    super update:something with:aParameter from:changedObject
+
+    "Modified: / 18.6.1998 / 23:48:47 / cg"
+! !
+
+!PopUpList methodsFor:'drawing'!
+
+drawWith:fgColor and:bgColor
+    |mmH mmV mW mH|
+
+    controller pressed ifTrue:[
+        super drawWith:enteredFgColor and:enteredBgColor
+    ] ifFalse:[
+        super drawWith:fgColor and:bgColor.
+    ].
+
+    showHandle ifTrue:[
+        mmH := self graphicsDevice horizontalPixelPerMillimeter.
+        mmV := self graphicsDevice verticalPixelPerMillimeter.
+        mW := (mmH * 2.5) rounded.
+        mH := (mmV * 1.5) rounded.
+
+        self 
+            drawEdgesForX:(width - mW - (hSpace*2)) y:(height - mmV rounded // 2)
+                     width:mW height:mH 
+                     level:2
+    ].
+
+    "Modified: / 6.3.1999 / 21:56:13 / cg"
+!
+
+showActive
+    "no need to redraw - will pop menu ontop of me anyway ..."
+
+    ^ self
+!
+
+showPassive
+    "no need to redraw - will redraw from unpopped menu anyway ..."
+
+    ^ self
+! !
+
+!PopUpList methodsFor:'event handling'!
+
+keyPress:key x:x y:y
+    "pull menu on Return and space"
+
+    <resource: #keyboard (#Return)>
+
+    (key == Character space or:[key == #Return])ifTrue:[
+        self popMenu.
+        ^ self
+    ].
+    super keyPress:key x:x y:y
+
+    "Created: / 21.4.1998 / 20:05:19 / cg"
+!
+
+popMenu
+    |org theMenu val|
+
+    menu notNil ifTrue:[
+        theMenu := menu value
+    ].
+
+    theMenu notNil ifTrue:[
+        self turnOffWithoutRedraw. 
+
+        theMenu value labels size == 0 ifTrue:[
+            ^ self
+        ].
+
+        theMenu isView ifTrue:[
+            "/ oldStyle - theMenu is a PopUpMenu / MenuPanel
+            theMenu font:gc font.
+
+            "
+             adjust the menus width to my current width
+            "
+            menu preferredWidth:(self width).
+
+            "
+             the popupMenu wants Display coordinates in its showAt: method
+            "
+            org := self graphicsDevice translatePoint:0@0 fromView:self toView:nil.
+
+            theMenu showAt:org "resizing:false"
+        ] ifFalse:[
+            "/ newStyle - theMenu is a Menu
+            val := theMenu startUpOrNil.
+            (theMenu isKindOf:PopUpMenu) ifFalse:[
+                "/ sigh - brand new ...
+                val notNil ifTrue:[
+                    self sendChangeMessage:changeMsg with:val.
+                    menuAction notNil ifTrue:[
+                        menuAction value:val
+                    ]
+                ].
+            ].
+        ]
+    ].
+
+    "Modified: / 15.11.2001 / 16:53:53 / cg"
+! !
+
+!PopUpList methodsFor:'initialization'!
+
+defaultControllerClass
+    ^ PopUpListController
+!
+
+initialize
+    super initialize.
+
+    controller beTriggerOnDown.
+    controller action:[self popMenu].
+    ignoreReselect := true.
+    useIndex := false.
+    defaultLabel := 'popup'.
+    showHandle := true.
+    self adjust:#left.
+
+    super label:defaultLabel.
+
+    listMsg := self class defaultListMessage.
+
+    onLevel := offLevel.
+
+    "Modified: 1.3.1997 / 02:12:55 / cg"
+! !
+
+!PopUpList methodsFor:'private'!
+
+createMenuFor:aList
+    |index|
+
+    (aList isKindOf:Menu) ifTrue:[
+        menu := aList.
+        ^ self.
+    ].
+
+"/ old code (uses old PopUpMenu)
+"/    menu := PopUpMenu
+"/                  labels:aList
+"/               selectors:#select:
+"/                    args:(1 to:aList size) 
+"/                receiver:self
+"/                     for:self.
+
+"/ new code - uses (scrollable) MenuPanel
+    menu := MenuPanel labels:aList.
+
+    index := 1.
+    menu do:[:el | el value:#select:. el argument:index. index := index + 1. ].
+    menu receiver:self.
+    menu font:gc font.
+    menu preferredWidth:self width.
+
+"/ end of change
+
+    "Modified: / 15.11.2001 / 16:51:34 / cg"
+!
+
+getListFromModel
+    "if I have a listHolder, ask it for the list;
+     otherwise, if I have a model and a listMsg, get my list from there"
+
+    listHolder notNil ifTrue:[
+        self list:listHolder value.
+"/        model notNil ifTrue:[
+"/            self halt.
+"/        ]
+    ] ifFalse:[
+        (listMsg notNil and:[model notNil]) ifTrue:[
+            (model respondsTo:listMsg) ifTrue:[
+                self list:(model perform:listMsg).
+            ]
+        ].
+    ]
+
+    "Modified: / 19.6.1998 / 01:54:17 / cg"
+!
+
+getSelectionFromModel
+    "if I have a model and an aspectMsg, get my current value from it"
+
+    |aspect val newLabel|
+
+    (model notNil and:[aspectMsg notNil]) ifTrue:[
+        "/ kludge - try #value if aspect is the default and
+        "/ not understood by the model
+        "/ this allows a valueHolder to be used, even
+        "/ if the aspectMessage was not setup correctly.
+
+        aspect := aspectMsg.
+        aspect == self class defaultAspectMessage ifTrue:[
+            (model respondsTo:aspect) ifFalse:[
+                aspect := #value
+            ]
+        ].
+        val := (model perform:aspect).
+
+        useIndex ifFalse:[
+            val isNil ifTrue:[
+                newLabel := defaultLabel 
+            ] ifFalse:[
+                newLabel := val printString.
+            ].
+            ^ self label:newLabel suppressResize:true.
+        ].
+        self selection:val
+    ].
+
+    "Modified: / 18.6.1998 / 23:54:34 / cg"
+!
+
+rawLabelSizeOf:aLogo
+    "compute the extent needed to hold the label plus the mark"
+
+    |ext mmH mmV longest longestWidth labels currentDeviceFont|
+
+    ext := super rawLabelSizeOf:aLogo.
+
+    (menu notNil 
+    and:[adjust ~~ #right
+    and:[adjust ~~ #center]]) ifTrue:[
+        "compute length of longest menu entry"
+
+        currentDeviceFont := gc createFontOnDevice.
+        longest := logo.
+        logo isNil ifTrue:[
+            longestWidth := 0
+        ] ifFalse:[
+            longestWidth := currentDeviceFont widthOf:logo.
+        ].
+        labels := menu value labels.
+        labels notNil ifTrue:[
+            labels do:[:entry |
+                |this|
+
+                this := currentDeviceFont widthOf:entry printString.
+                this > longestWidth ifTrue:[
+                    longest := entry.
+                    longestWidth := this
+                ].
+            ].
+        ].
+        ext := ext max:(super rawLabelSizeOf:(longest printString))
+    ].
+
+    showHandle ifTrue:[
+        mmH := self device horizontalPixelPerMillimeter.
+        mmV := self device verticalPixelPerMillimeter.
+        ^ (ext x + hSpace + (mmH * 2.5) rounded + hSpace)
+          @
+          (ext y max: (mmV * 2) rounded)
+    ].
+    ^ ext
+
+    "Modified: / 6.3.1999 / 21:51:14 / cg"
+! !
+
+!PopUpList methodsFor:'private-controller access'!
+
+menu
+    "return the menu component"
+
+    ^ menu
+! !
+
+!PopUpList methodsFor:'queries'!
+
+preferredExtent
+    "redefined to make certain that the menu is fully defined"
+
+    menu isNil ifTrue:[
+        self getListFromModel
+    ].
+    ^ super preferredExtent.
+
+    "Modified: 19.7.1996 / 20:45:16 / cg"
+!
+
+specClass
+    "XXX no longer needed (inherited default works here)"
+
+    self class == PopUpList ifTrue:[^ PopUpListSpec].
+    ^ super specClass
+
+    "Modified: / 31.10.1997 / 19:48:02 / cg"
+! !
+
+!PopUpList methodsFor:'user actions'!
+
+select:anIndex
+    "this is sent from the popupmenu when an entry was selected"
+
+    |value menuLabels label chg|
+
+    menuLabels := menu labels.
+    values isNil ifTrue:[
+        value := anIndex.
+        useIndex ifFalse:[
+            value := menuLabels at:anIndex.
+        ]
+    ] ifFalse:[
+        value := values at:anIndex
+    ].
+
+"/    model isNil ifTrue:[
+        "/ if there is a model,
+        "/ the update will change my logo ...
+
+        "/ self sizeFixed:true.
+        label := menuLabels at:anIndex.
+        super label:label printString suppressResize:true.
+"/    ].
+
+    (model notNil and:[changeMsg notNil]) ifTrue:[
+        "/
+        "/ ST-80 way of doing it
+        "/ tell my model - if any
+        "/
+
+        "/ kludge - try #value: if changeMsg is the default and
+        "/ not understood by the model
+        "/ this allows a valueHolder to be used, even
+        "/ if the aspectMessage was not setup correctly.
+
+        chg := changeMsg.
+        chg == self class defaultChangeMessage ifTrue:[
+            (model respondsTo:chg) ifFalse:[
+                chg := #value:
+            ]
+        ].
+        ignoreReselect ifFalse:[
+            (value == model value) ifTrue:[
+                model setValue:nil.
+            ].
+        ].
+        self sendChangeMessage:chg with:value.
+    ].
+
+    "/
+    "/ ST/X action blocks
+    "/
+    menuAction notNil ifTrue:[
+        menuAction value:value.
+    ].
+
+    "Modified: / 29.10.1997 / 21:08:50 / cg"
+! !
+
+!PopUpList class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/PopUpList.st,v 1.83 2014-02-18 15:03:42 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/PopUpList.st,v 1.83 2014-02-18 15:03:42 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PopUpListController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,122 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+ButtonController subclass:#PopUpListController
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Controllers'
+!
+
+!PopUpListController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    redefined the behavior on various keys if my view has the focus.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!PopUpListController methodsFor:'event handling'!
+
+buttonPress:button x:x y:y
+    "redefined to not send any change message to the model when
+     pressed (this is done by the popped menu)"
+
+    (button == 1) ifFalse:[
+        ^ super buttonPress:button x:x y:y
+    ].
+
+    enableChannel value ifTrue:[
+        pressed ifFalse:[
+            pressed := true.
+            view showActive.
+
+            (pressActionBlock notNil or:[model notNil]) ifTrue:[
+                "
+                 force output - so that button is drawn correctly in case
+                 of any long-computation (at high priority)
+                "
+                view flush.
+            ].
+
+            pressActionBlock value.
+
+        ]
+    ]
+
+    "Created: 27.1.1997 / 17:22:16 / cg"
+    "Modified: 27.1.1997 / 17:23:17 / cg"
+!
+
+keyPress:key x:x y:y
+    "pull menu on Return and space, if I am the focusView of my group
+     (i.e. if I got an explicit focus)"
+
+    <resource: #keyboard (#Return #CursorUp #CursorDown #Space)>
+
+    |menu|
+
+    view hasFocus ifTrue:[
+"/        (key == #Return) ifTrue:[
+"/            view menu shown ifTrue:[
+"/                self halt:'not yet implemented'.
+"/                ^ self.
+"/            ].
+"/        ].
+        menu := view menu.
+        (menu notNil and:[menu isView]) ifTrue:[
+            (key == #CursorUp or:[key == #CursorDown]) ifTrue:[
+                menu shown ifTrue:[
+                    key == #CursorUp ifTrue:[menu selectNext]
+                                     ifFalse:[menu selectPrevious].
+                    ^ self.
+                ].
+            ].
+            (key == Character space) ifTrue:[
+                menu exclusivePointer:false.
+                menu hideOnRelease:true.
+                view popMenu.
+                view menu exclusivePointer:true.
+                ^ self.
+            ]
+        ]
+    ].
+    view keyPress:key x:x y:y
+
+    "Created: 9.12.1995 / 23:06:09 / cg"
+    "Modified: 7.3.1996 / 13:17:46 / cg"
+! !
+
+!PopUpListController class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/PopUpListController.st,v 1.16 2013-01-18 09:50:30 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PopUpMenu.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1695 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+PopUpView subclass:#PopUpMenu
+	instanceVariableNames:'menuView lastSelection memorize hideOnLeave actionLabels
+		actionLines actionValues hideOnRelease defaultHideOnRelease
+		hideOnAnyKey hideOnKeyFilter'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Menus'
+!
+
+!PopUpMenu class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Warning: this is a very old class which was written well before many improved
+    successors and tools were added. A lot of stuff you find here is kept for backward
+    compatibility.
+
+    This class provides PopUpMenu functionality;
+    -> Actually, this class only provides the popup and shadow functionality 
+       and wraps ANOTHER view, which shows the actual menu-list 
+       (usually an instance of MenuView, but in theory, other views could be wrapped as popup).
+
+    PopUpMenus are usually created with a list of labels, selectors and a
+    receiver. 
+    Once activated, the specified receiver will be sent a 'selector'-message.
+
+    PopupMenus may be either assigned statically to a view (via the #middleButtonMenu:
+    message) or created dynamically as required.
+    Static definition makes sense, if the menu stays constant and you want to
+    assign it once for the lifetime of the view.
+
+    Dynamic menus are easier to use, if the number of or look of the entries has to
+    change according the internal state of some model. Also, this is the ST-80 way
+    of using popupMenus. For dynamic popups, the view's model is asked for a menu
+    via the #menuSelector each time a button press occurs.
+
+    See examples section for more.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        PullDownMenu MenuView
+"
+!
+
+examples
+"
+  The ST-80 way of opening menus is to startUp a menu,
+  and use the returned value:
+                                                                        [exBegin]
+    |p|
+
+    p := PopUpMenu
+            labels:#('foo' 'bar' 'baz').
+    Transcript showCR:p startUp
+                                                                        [exEnd]
+  It returns the index of the selected item or 0 if nothing was selected.
+  This opening is done by either the controller or the view (if it has
+  a middleButtonMenu and/or a menuHolder).
+
+  If the numeric index is inconvenient, alternative values may be specified
+  as in (here, nil is returned if nothing was selected):
+                                                                        [exBegin]
+    |p|
+
+    p := PopUpMenu
+            labels:#('foo' 'bar' 'baz')
+            values:#('hello foo' 'hello bar' 'hello baz').
+    Transcript showCR:p startUp
+                                                                        [exEnd]
+  In ST/X, the above is actually done by a mimicri method (#startUp)
+  and menus are typically created in one of the following ways:
+
+  -> With a single actionBlock.
+     This is convenient, if all actions shall perform a similar task, 
+     but require different arguments.
+
+  this is evaluated, passing the selections index or value as argument.
+  The action block is NOT evaluated, if nothing was selected.
+    With index:
+                                                                        [exBegin]
+    |p|
+
+    p := PopUpMenu
+            labels:#('foo' 'bar' 'baz').
+    p action:[:item | Transcript showCR:item].
+    p showAtPointer
+                                                                        [exEnd]
+    With individual arguments:
+                                                                        [exBegin]
+    |p|
+
+    p := PopUpMenu
+            labels:#('foo' 'bar' 'baz')
+            args:#('hello foo' 'hello bar' 'hello baz').
+    p action:[:item | Transcript showCR:item].
+    p showAtPointer
+                                                                        [exEnd]
+
+  -> With an explicit receiver and different selectors.
+     This is convenient, if you have to send per-item messages
+     to some object (typically, the receiver is the view or a model)
+                                                                        [exBegin]
+    |p m|
+
+    m := Plug new.
+    m respondTo:#foo with:[Transcript showCR:'foo received'].
+    m respondTo:#bar with:[Transcript showCR:'bar received'].
+    m respondTo:#maz with:[Transcript showCR:'maz received'].
+
+    p := PopUpMenu
+            labels:#('foo' 'bar' 'baz')
+            selectors:#(#foo #bar #baz)
+            receiver:m.
+    p showAtPointer
+                                                                        [exEnd]
+
+
+  More examples:
+    dynamic with action instead of selector being sent:
+                                                                        [exBegin]
+        |p|
+
+        p := PopUpMenu
+                labels:(($a to: $d) collect:[:char | char asString])
+                selectors:nil
+                receiver:nil.
+        p action:[:idx | Transcript showCR:'selected index is '; showCR:idx].
+        p showAtPointer
+                                                                        [exEnd]
+
+
+    individual actions:
+                                                                        [exBegin]
+        |p|
+        p := PopUpMenu
+                labels:#('foo'
+                         'bar'
+                         'baz')
+                selectors:#(
+                            #foo
+                            #bar
+                            #baz).
+        p actionAt:#foo put:[Transcript showCR:'foo'].
+        p actionAt:#bar put:[Transcript showCR:'bar'].
+        p actionAt:#baz put:[Transcript showCR:'baz'].
+        p showAtPointer
+                                                                        [exEnd]
+
+    sometimes, you want to specify both selectors and some arguments
+    to be sent; this is done by:
+                                                                        [exBegin]
+        |p|
+        p := PopUpMenu
+                labels:#('foo' 'bar' 'baz')
+                selectors:#(#foo: #bar: #foo:)
+                args:#(1 2 3)
+                receiver:nil.
+        p showAtPointer
+                                                                        [exEnd]
+
+    or, the same selector but different arguments:
+                                                                        [exBegin]
+        |p|
+        p := PopUpMenu
+                labels:#('foo' 'bar' 'baz')
+                selectors:#foo:
+                args:#(1 2 3)
+                receiver:nil.
+        p showAtPointer
+                                                                        [exEnd]
+
+    Normally, you do not show the menu explicitely, but install
+    it as a either as middleButtonMenu of some view or return it from
+    a model. 
+    (Views/Controllers button-event handler will show it when the middle
+    button is pressed ...)
+    Static menu:
+                                                                        [exBegin]
+        |v m|
+
+        v := View new.
+        m := PopUpMenu
+                labels:#('lower'
+                         'raise'
+                         '-'
+                         'destroy')
+                selectors:#(#lower #raise nil #destroy)
+                receiver:v.
+        v middleButtonMenu:m.
+        v open
+                                                                        [exEnd]
+
+    Dynamic menu:
+    (since we need some model which responds to a menu-message,
+     we use a plug in the example below; normally, this would be your model)
+                                                                        [exBegin]
+        |v model|
+
+        model := Plug new.
+        model respondTo:#getMenu with:[PopUpMenu labels:#('foo' 'bar')
+                                                 selectors:#(foo bar)].
+        model respondTo:#foo with:[Transcript showCR:'models foo called'].
+        model respondTo:#bar with:[Transcript showCR:'models bar called'].
+
+        v := View new.
+        v model:model; menu:#getMenu.
+        v open
+                                                                        [exEnd]
+
+    Dynamic menus are the MVC-way (i.e. ST-80) way of doing things.
+    They are usually easier to use, if the menu changes depending on the models
+    state. (for example, see the systemBrowsers menus being different when
+    things are selected ...)
+
+    It is also possible, to add check-mark entries, with an entry string
+    starting with the special sequence '\c' (for check-mark). The value
+    passed will be the truth-state of the check-mark.
+                                                                        [exBegin]
+        |m v|
+
+        v := View new.
+        m := PopUpMenu
+                labels:#('\c foo'
+                         '\c bar')
+                selectors:#(#value: #value:)
+                receiver:[:v | Transcript show:'arg: '; showCR:v].
+        v middleButtonMenu:m.
+        v open
+                                                                        [exEnd]
+
+    The style of the checkmark can be: check (\c), box (\b) or thumbs (\t):
+                                                                        [exBegin]
+        |m v|
+
+        v := View new.
+        m := PopUpMenu
+                labels:#('\c foo'
+                         '\b bar'
+                         '\t baz')
+                selectors:#(#value: #value: #value:)
+                receiver:[:v | Transcript show:'arg: '; showCR:v].
+        v middleButtonMenu:m.
+        v open
+                                                                        [exEnd]
+
+    or at the end (looks better with variable fonts):
+                                                                        [exBegin]
+        |m v|
+
+        v := View new.
+        m := PopUpMenu
+                labels:#('foo \c'
+                         'bar \b'
+                         'baz \t')
+                selectors:#(#value: #value: #value:)
+                receiver:[:v | Transcript show:'arg: '; showCR:v].
+        v middleButtonMenu:m.
+        v open
+                                                                        [exEnd]
+
+    Finally, you can wrap other views into a popup menu (for example,
+    to implement menus with icons or other components).
+    The view should respond to some messages sent from here (for
+    example: #hideSubmenus, #deselectWithoutRedraw and others).
+    Currently there is only one class in the system, which can be used
+    this way (PatternMenu in the DrawTool demo):
+                                                                        [exBegin]
+        |v p|
+
+        v := View new.
+        p := PatternMenu new.
+        p patterns:(Array with:Color red
+                          with:Color green
+                          with:Color blue).
+        v middleButtonMenu:(PopUpMenu forMenu:p).
+        v open
+                                                                        [exEnd]
+
+    or try:
+                                                                        [exBegin]
+        |v p|
+
+        v := View new.
+        p := PatternMenu new.
+        p patterns:(Array with:Color red
+                          with:Color green
+                          with:Color blue).
+        p selectors:#value:.
+        p receiver:[:val | v viewBackground:val. v clear].
+        p args:(Array with:Color red
+                      with:Color green
+                      with:Color blue).
+        v middleButtonMenu:(PopUpMenu forMenu:p).
+        v open
+                                                                        [exEnd]
+
+        
+    ST-80 style:
+
+    The above menus all did some message send on selection; it is
+    also possible, to use Smalltalk-80 style menus (which return some value
+    from their startup method):
+                                                                        [exBegin]
+        |m selection|
+
+        m := PopUpMenu
+                labels:#('one' 'two' 'three').
+        selection := m startUp.
+        Transcript show:'the selection was: '; showCR:selection
+                                                                        [exEnd]
+
+    startUp will return the entries index, or 0 if there was no selection.
+    You can also specify an array of values to be returned instead of the
+    index:
+                                                                        [exBegin]
+        |m selection|
+
+        m := PopUpMenu
+                labels:#('one' 'two' 'three')
+                values:#(10 20 30).
+        selection := m startUp.
+        Transcript show:'the value was: '; showCR:selection
+                                                                        [exEnd]
+
+    In ST/X style menus, separating lines between entries are created
+    by a '-'-string as its label text (and corresponding nil-entries in the
+    selectors- and args-arrays).
+    In ST-80, you have to pass the indices of the lines in an extra array:
+                                                                        [exBegin]
+        |m selection|
+
+        m := PopUpMenu
+                labels:#('one' 'two' 'three' 'four' 'five')
+                lines:#(2 4).
+        selection := m startUp.
+        Transcript show:'the value was: '; showCR:selection
+                                                                        [exEnd]
+
+    or:
+                                                                        [exBegin]
+        |m selection|
+
+        m := PopUpMenu
+                labels:#('one' 'two' 'three')
+                lines:#(2)
+                values:#(10 20 30).
+        selection := m startUp.
+        Transcript show:'the value was: '; showCR:selection
+                                                                        [exEnd]
+
+    Use whichever interface you prefer.
+"
+! !
+
+!PopUpMenu class methodsFor:'instance creation'!
+
+forMenu:aMenuView
+    "this wraps an already existing menu - allowing to put any
+     view (not just MenuViews) into popups (for example, menus
+     with icons, or other components).
+     Currently, there is only one example of different menus in
+     the system (PatternMenu in the DrawTool) which could be used
+     this way.
+     The view should respond to some of the menuView messages
+     (such as hideSubmenu, deselectWithoutRedraw etc.)"
+
+    |newMenu|
+
+    aMenuView isView ifFalse:[
+        self error:'bad argument'
+    ].
+    newMenu := self onSameDeviceAs:aMenuView. 
+    newMenu addSubView:aMenuView.
+    newMenu menuView:aMenuView.
+    ^ newMenu
+!
+
+itemList:itemList resources:resources
+    "like labels:selectors:... messages, but expects a single collection,
+     containing items row-wise (i.e. elements are themself arrays, consisting of
+        label [selector [accelerator [arg]]]
+     if resources are non-nil, labels are translated using the translations found there.
+    "
+
+    ^ self
+        itemList:itemList resources:resources receiver:nil for:nil
+
+    "the sometimes more convenient:
+        |p|
+
+        p := PopUpMenu
+                itemList:#(('foo' doFoo CtrlF)
+                           ('-')
+                           ('bar' doBar CtrlB)
+                           ('baz' doBaz CtrlZ))
+                resources:nil.
+        p showAtPointer
+
+     does the same as:
+        |p|
+
+        p := PopUpMenu
+                labels:#('foo' '-' 'bar' 'baz')
+                selectors:#(doFoo nil doBar doBaz)
+                accelerators:#(CtrlF nil CtrlB CtrlZ).
+        p showAtPointer
+    "
+
+!
+
+itemList:itemList resources:resources performer:menuPerformer
+    "like labels:selectors:... messages, but expects a single collection,
+     containing items row-wise (i.e. elements are themself arrays, consisting of
+        label [selector [accelerator [arg]]]
+     if resources are non-nil, labels are translated using the translations found there.
+    "
+
+    ^ self
+        itemList:itemList resources:resources receiver:menuPerformer for:nil
+
+    "Created: / 21.5.1998 / 15:31:42 / cg"
+!
+
+itemList:itemList resources:resources performer:menuPerformer for:aView
+    "like labels:selectors:... messages, but expects a single collection,
+     containing items row-wise (i.e. elements are themself arrays, consisting of
+        label [selector [accelerator [arg]]]
+     if resources are non-nil, labels are translated using the translations found there.
+    "
+
+    |n labels selectors accelerators args anyArg|
+
+    n := itemList size.
+    labels := Array new:n.
+    selectors := Array new:n.
+    accelerators := Array new:n.
+    anyArg := false.
+
+    itemList keysAndValuesDo:[:idx :item |
+        |label selector accelerator arg|
+
+        label := item at:1.
+        labels at:idx put:label.
+        item size > 1 ifTrue:[
+            selector := item at:2.
+            selectors at:idx put:selector.
+            item size > 2 ifTrue:[
+                accelerator := item at:3.
+                accelerators at:idx put:accelerator.
+                item size > 3 ifTrue:[
+                    arg := item at:4.
+                    anyArg ifFalse:[
+                        anyArg := true.
+                        args := Array new:n.
+                    ].
+                    args at:idx put:arg.    
+                ]
+            ]
+        ].
+    ].
+
+    resources notNil ifTrue:[
+        labels := resources array:labels
+    ].
+
+    ^ self
+        labels:labels
+        selectors:selectors
+        accelerators:accelerators
+        args:args 
+        receiver:menuPerformer 
+        for:aView
+
+    "this is sometimes more convenient:
+        |p|
+
+        p := PopUpMenu
+                itemList:#(('foo' doFoo CtrlF)
+                           ('-')
+                           ('bar' doBar CtrlB)
+                           ('baz' doBaz CtrlZ))
+                resources:nil.
+        p showAtPointer
+
+     and does the same as:
+        |p|
+
+        p := PopUpMenu
+                labels:#('foo' '-' 'bar' 'baz')
+                selectors:#(doFoo nil doBar doBaz)
+                accelerators:#(CtrlF nil CtrlB CtrlZ).
+        p showAtPointer
+    "
+
+    "Created: / 21.5.1998 / 15:32:39 / cg"
+!
+
+itemList:itemList resources:resources receiver:menuPerformer for:aView
+    "like labels:selectors:... messages, but expects a single collection,
+     containing items row-wise (i.e. elements are themself arrays, consisting of
+        label [selector [accelerator [arg]]]
+     if resources are non-nil, labels are translated using the translations found there.
+    "
+
+    ^ self
+        itemList:itemList resources:resources performer:menuPerformer for:aView
+
+    "Modified: / 21.5.1998 / 15:33:04 / cg"
+!
+
+labels:labels args:args 
+    "create and return a menu with label-items and args. 
+     The actionBlock has to be defined later"
+
+    ^ self labels:labels selectors:nil accelerators:nil args:args receiver:nil for:nil
+
+    "
+     |m|
+
+     m := PopUpMenu labels:#('foo' 'bar')
+                      args:#('hello world' 'how about this').
+     m action:[:arg |
+        Transcript showCR:arg
+     ].
+
+     m showAtPointer
+    "
+
+    "Modified: 25.5.1996 / 17:01:43 / cg"
+!
+
+labels:labels selector:aSelector args:args receiver:anObject
+    "create and return a popup menu with labels as entries.
+     Each item will send aSelector with a corresponding argument from the
+     args array to anObject. The menu is created on the default DIsplay"
+
+    "
+     OBSOLETE protocol: #labels:selectors:... knows how to handle single-symbol selectors-arg
+    "
+    ^ self labels:labels selectors:aSelector accelerators:nil args:args receiver:anObject
+
+    "Modified: 28.2.1996 / 19:01:12 / cg"
+!
+
+labels:labels selector:aSelector args:args receiver:anObject for:aView
+    "create and return a popup menu with labels as entries.
+     Each item will send aSelector with a corresponding argument from the
+     args array to anObject. The menu is created on the same physical device
+     as aView (which is only of interest in multi-Display applications; 
+     typical applications can use the sibbling message without the for: argument)."
+
+    "
+     OBSOLETE protocol: #labels:selectors:... knows how to handle single-symbol selectors-arg
+    "
+    ^ self labels:labels selectors:aSelector accelerators:nil args:args receiver:anObject for:aView
+
+    "Modified: 28.2.1996 / 19:01:29 / cg"
+!
+
+labels:labels selectors:selectors 
+    "create and return a menu with label-items and selectors. The receiver
+     will either be defined later, or not used at all (if opened via startUp)"
+
+    ^ self labels:labels selectors:selectors accelerators:nil args:nil receiver:nil for:nil
+
+    "Modified: 28.2.1996 / 19:01:35 / cg"
+!
+
+labels:labels selectors:selectors accelerators:shorties 
+    "create and return a menu with label-items and selectors. The receiver
+     will either be defined later, or not used at all (if opened via startUp)"
+
+    ^ self labels:labels selectors:selectors accelerators:shorties args:nil receiver:nil for:nil
+
+    "Created: 28.2.1996 / 18:58:52 / cg"
+!
+
+labels:labels selectors:selectors accelerators:shorties args:args receiver:anObject
+    "create and return a popup menu with labels as entries.
+     Each item will send a corresponding selector:argument from the selectors-
+     and args array to anObject. The menu is created on the default Display"
+
+    ^ self labels:labels selectors:selectors accelerators:shorties args:args receiver:anObject for:nil
+
+    "Created: 28.2.1996 / 18:59:03 / cg"
+!
+
+labels:labels selectors:selectors accelerators:shorties args:args receiver:anObject for:aView
+    "create and return a popup menu with labels as entries.
+     Each item will send a corresponding selector:argument from the selectors-
+     and args array to anObject. The menu is created on the same physical device
+     as aView (which is only of interest in multi-Display applications; 
+     typical applications can use the sibbling message without the for: argument)."
+
+    |newMenu m|
+
+    newMenu := self onSameDeviceAs:aView. 
+    m := (MenuView
+            labels:labels
+            selectors:selectors
+            accelerators:shorties 
+            args:args
+            receiver:anObject
+            in:newMenu).
+
+    m level:0; borderWidth:0.
+    newMenu menuView:m.
+    ^ newMenu
+
+    "Created: 28.2.1996 / 18:59:25 / cg"
+    "Modified: 25.2.1997 / 20:52:47 / cg"
+!
+
+labels:labels selectors:selectors accelerators:shorties receiver:anObject
+    "create and return a popup menu with labels as entries.
+     Each item will send a message with a selector from the corresponding 
+     selectors-array.
+     The menu is created on the default Display."
+
+    ^ self labels:labels selectors:selectors accelerators:shorties args:nil receiver:anObject for:nil
+
+    "Created: 28.2.1996 / 19:00:49 / cg"
+!
+
+labels:labels selectors:selectors args:argArray 
+    "create and return a menu with label-items and selectors. The receiver
+     will either be defined later, or not used at all (if opened via startUp)"
+
+    ^ self labels:labels selectors:selectors accelerators:nil args:argArray receiver:nil for:nil
+
+    "Modified: 28.2.1996 / 19:01:45 / cg"
+!
+
+labels:labels selectors:selectors args:args receiver:anObject
+    "create and return a popup menu with labels as entries.
+     Each item will send a corresponding selector:argument from the selectors-
+     and args array to anObject. The menu is created on the default Display"
+
+    ^ self labels:labels selectors:selectors accelerators:nil args:args receiver:anObject for:nil
+
+    "Modified: 28.2.1996 / 19:01:49 / cg"
+!
+
+labels:labels selectors:selectors args:args receiver:anObject for:aView
+    "create and return a popup menu with labels as entries.
+     Each item will send a corresponding selector:argument from the selectors-
+     and args array to anObject. The menu is created on the same physical device
+     as aView (which is only of interest in multi-Display applications; 
+     typical applications can use the sibbling message without the for: argument)."
+
+    ^ self labels:labels selectors:selectors accelerators:nil args:args receiver:anObject for:aView
+
+    "Modified: 28.2.1996 / 19:03:58 / cg"
+!
+
+labels:labels selectors:selectors receiver:anObject
+    "create and return a popup menu with labels as entries.
+     Each item will send a message with a selector from the corresponding 
+     selectors-array.
+     The menu is created on the default Display."
+
+    ^ self labels:labels selectors:selectors accelerators:nil args:nil receiver:anObject for:nil
+
+    "Modified: 28.2.1996 / 19:02:07 / cg"
+!
+
+labels:labels selectors:selectors receiver:anObject for:aView
+    "create and return a popup menu with labels as entries.
+     Each item will send a corresponding selector from the selectors-array
+     to anObject. The menu is created on the same physical device
+     as aView (which is only of interest in multi-Display applications; 
+     typical applications can use the sibbling message without the for: argument)."
+
+    ^ self labels:labels selectors:selectors accelerators:nil args:nil receiver:anObject for:aView
+
+    "Modified: 28.2.1996 / 19:02:10 / cg"
+! !
+
+!PopUpMenu class methodsFor:'ST-80 instance creation'!
+
+labelArray:labels
+    "ST80R4 compatibility"
+
+    ^ self labels:labels lines:nil values:nil
+
+    "
+     (PopUpMenu labelArray:#('one' 'two' 'three')) startUp 
+    "
+!
+
+labelArray:labels lines:lines values:values 
+    "ST80R4 compatibility"
+
+    ^ self labels:labels lines:lines values:values 
+!
+
+labelArray:labels values:values 
+    "ST80R4 compatibility"
+
+    ^ self labels:labels lines:nil values:values 
+!
+
+labelList:labels 
+    "ST80R4 compatibility:
+	given a list consisting of group label entries (to be separated by
+	lines), convert into standard form (using '-' for lines.
+    "
+
+    ^ self labelList:labels values:nil
+
+    "
+     (PopUpMenu labels:#('1' '2' '3')) showAtPointer
+     (PopUpMenu labelList:#(('1') ('2' '3'))) showAtPointer    
+     (PopUpMenu labelList:#(('1') ('2') ('3'))) showAtPointer    
+    "
+!
+
+labelList:labels lines:lines values:values 
+    "mhmh what is that ?"
+
+    ^ (self new) labels:labels lines:lines values:values 
+!
+
+labelList:labels values:values 
+    "ST80R4 compatibility:
+	given a list consisting of group label entries (to be separated by
+	lines), convert into standard form (using '-' for lines.
+    "
+
+    |newLabels newValues lS vS first|
+
+    newLabels := OrderedCollection new.
+    newValues := OrderedCollection new.
+    lS := ReadStream on:labels.
+    values notNil ifTrue:[vS := ReadStream on:values].
+    first := true.
+    [lS atEnd] whileFalse:[
+	|entry|
+
+	entry := lS next.
+	entry isCollection ifTrue:[
+	    first ifFalse:[
+		newLabels add:'-'.
+		values notNil ifTrue:[newValues add:nil]
+	    ].
+	    newLabels addAll:entry.
+	    values notNil ifTrue:[newValues addAll:(vS next:entry size)]
+	] ifFalse:[
+	    newLabels add:entry.
+	    values notNil ifTrue:[newValues add:(vS next)]
+	].
+	first := false.
+    ].
+    values isNil ifTrue:[
+	^ self labels:newLabels
+    ].
+    ^ self labels:newLabels values:newValues
+
+    "
+     (PopUpMenu labels:#('1' '2' '3') values:#(1 2 3)) showAtPointer
+     (PopUpMenu labelList:#(('1') ('2' '3')) values:#(1 2 3)) showAtPointer    
+     (PopUpMenu labelList:#(('1') ('2') ('3')) values:#(1 2 3)) showAtPointer    
+    "
+!
+
+labels:labels 
+    "ST80R2 compatibility"
+
+    ^ self labels:labels lines:nil values:nil 
+!
+
+labels:labels lines:lines 
+    "ST80R2 compatibility"
+
+    ^ self labels:labels lines:lines values:nil
+!
+
+labels:labels lines:lines values:values 
+    "ST80R2 compatibility"
+
+    ^ (self new) labels:labels lines:lines values:values 
+!
+
+labels:labels values:values 
+    "ST80R2 compatibility"
+
+    ^ self labels:labels lines:nil values:values 
+! !
+
+!PopUpMenu class methodsFor:'defaults'!
+
+maxClickTimeToStayOpen
+    ^ 200  "/ if button is pressed shorter, its a click and the menu stays open.
+           "/ otherwise, its a press and the menu hides itself with the release
+! !
+
+!PopUpMenu methodsFor:'ST-80 activation'!
+
+startUp
+    "start the menu modal - return the selected value,
+     or - if no values where specified - return the index.
+     If nothing was selected, return 0.
+     Modal - i.e. stay in the menu until finished.
+     This is the ST-80 way of launching a menu."
+
+    ^ self startUpAt:nil
+
+    "
+     Transcript showCR:(PopUpMenu labels:#('foo' 'bar' 'baz')) startUp 
+     Transcript showCR:(PopUpMenu labels:#('foo' 'bar' 'baz')
+                                  values:#(foo bar baz)) startUp
+    "
+
+    "Modified: 10.1.1996 / 20:16:40 / cg"
+!
+
+startUpAt:aPoint
+    "start the menu modal - return the selected value,
+     or - if no values where specified - return the index.
+     If nothing was selected, return 0.
+     Modal - i.e. stay in the menu until finished.
+     This is the ST-80 way of launching a menu."
+
+    ^ self startUpAt:aPoint ifNoneSelected:0
+
+    "
+     Transcript showCR:(PopUpMenu labels:#('foo' 'bar' 'baz')) startUp 
+     Transcript showCR:(PopUpMenu labels:#('foo' 'bar' 'baz')
+                                  values:#(foo bar baz)) startUp
+    "
+
+!
+
+startUpAt:aPoint ifNoneSelected:defaultReturnValue
+    "start the menu modal - return the selected value,
+     or - if no values where specified - return the index.
+     If nothing was selected, return defaultReturnValue.
+     Modal - i.e. stay in the menu until finished.
+     This is the ST-80 way of launching a menu."
+
+    |return rec sel0 sel1 arg myAction|
+
+    return := defaultReturnValue.
+    actionValues notNil ifTrue:[
+        return := nil
+    ].
+"/    menuView args notNil ifTrue:[
+"/        return := nil
+"/    ].
+
+    "/
+    "/ arrange for the menu to evaluate this action,
+    "/ instead of directly sending any messages to the menuReceiver.
+    "/ (which used to be the ST/X way, menus worked).
+    "/ This works better with menuPerformers - which were not
+    "/ supported when ST/X menus were originally written.
+    "/ The old ST/X mechanism may vanish.
+    "/
+
+    menuView action isNil ifTrue:[
+        myAction := true.
+        menuView action:[:menuView :selected |
+            |actionIndex value sel retVal selIdx
+             args selectors checkFlags check|
+
+            menuView action:nil.  "/ must clear it ...  
+            retVal := 0.
+            actionValues notNil ifTrue:[
+                retVal := nil
+            ].
+
+            selected isNil ifTrue:[
+                "/ the menu has already sent a message or performed an item-action; do nothing here
+                retVal
+            ] ifFalse:[
+                selIdx := menuView selection.
+
+                args := menuView args.
+                selectors := menuView selectors.
+                checkFlags := menuView checkFlags.
+
+                args isNil ifTrue:[
+                    selectors notNil ifTrue:[
+                        sel0 := selectors at:selIdx.
+                    ].
+                ] ifFalse:[
+                    actionIndex := selected.
+                    actionIndex notNil ifTrue:[
+                        actionValues isNil ifTrue:[
+                            selectors notNil ifTrue:[
+                                "/ mhmh an ST/X menu started the ST-80 way
+
+                                sel1 := selectors at:selIdx.
+                                arg := actionIndex.
+                            ] ifFalse:[
+                                retVal := actionIndex
+                            ]
+                        ] ifFalse:[
+                            retVal := actionValues at:actionIndex.
+                            (retVal isKindOf:PopUpMenu) ifTrue:[
+                                retVal := retVal startUp
+                            ]
+                        ]
+                    ] ifFalse:[
+                        "/ mhmh an ST/X menu started the ST-80 way
+
+                        selectors notNil ifTrue:[
+                            sel0 := selectors at:selIdx.
+                        ].
+                    ]
+                ].
+
+                checkFlags notNil ifTrue:[
+                    check := checkFlags at:selIdx.
+                    check notNil ifTrue:[
+                        arg := check.
+                        sel1 := sel0.
+                        sel0 := nil.
+                    ]
+                ].
+                return := retVal.
+
+                menuView action:nil
+            ]
+        ]
+    ].
+
+    aPoint isNil ifTrue:[
+        self showAt:(self graphicsDevice pointerPosition) resizing:true
+    ] ifFalse:[
+        self showAt:aPoint.
+    ].
+    myAction == true ifTrue:[menuView action:nil].
+
+    "/ 
+    "/ mhmh an ST/X menu started the ST-80 way
+    "/
+    (sel0 notNil or:[sel1 notNil]) ifTrue:[
+        rec := menuView receiver.
+        sel0 notNil ifTrue:[
+            ^ sel0
+        ].
+        ^ Array with:sel1 with:arg.
+    ].
+    ^ return
+
+    "
+     Transcript showCR:(PopUpMenu labels:#('foo' 'bar' 'baz')) startUp 
+     Transcript showCR:(PopUpMenu labels:#('foo' 'bar' 'baz')
+                                  values:#(foo bar baz)) startUp
+    "
+
+    "Created: / 10.1.1996 / 20:11:42 / cg"
+    "Modified: / 20.5.1998 / 22:39:03 / cg"
+!
+
+startUpFor:originatingWidget
+    ^ self startUp
+!
+
+startUpOrNil
+    "start the menu modal - return the selected value,
+     or - if no values where specified - return the index.
+     If nothing was selected, return nil.
+     Modal - i.e. stay in the menu until finished.
+     This is the ST-80 way of launching a menu."
+
+    ^ self startUpAt:nil ifNoneSelected:nil
+
+!
+
+startUpWithHeading:aString
+    "start the menu modal - return the selected value,
+     or - if no values where specified - return the index.
+     If nothing was selected, return 0.
+     Modal - i.e. stay in the menu until finished.
+     This is the ST-80 way of launching a menu."
+
+    |vector|
+
+    defaultHideOnRelease := false.
+    (vector := menuView labels) notNil ifTrue:[
+        menuView labels:(Array with:aString with:'=') , vector.
+    ].
+    (vector := menuView selectors) notNil ifTrue:[
+        menuView selectors:#(nil nil) , vector.
+    ].
+    (vector := menuView args) notNil ifTrue:[
+        menuView args:#(nil nil) , vector.
+    ].
+    (vector := menuView checkFlags) notNil ifTrue:[
+        menuView checkFlags:#(nil nil) , vector.
+    ].
+    (vector := menuView actions) notNil ifTrue:[
+        menuView actions:#(nil nil) , vector.
+    ].
+    menuView disable:1; disable:2.
+
+    ^ self startUp.
+
+    "
+     (PopUpMenu
+        labels:#('foo' 'bar'))
+        startUp
+    "
+    "
+     (PopUpMenu
+        labels:#('foo' 'bar'))
+        startUpWithHeading:'hello'
+    "
+! !
+
+!PopUpMenu methodsFor:'accessing-behavior'!
+
+hideOnKeyFilter:aBlock
+    "set a filter, which determines if a key should lead to closing the menu."
+
+    hideOnKeyFilter := aBlock
+!
+
+hideOnLeave:aBoolean
+    "set/clear the hideOnLeave attribute, which controls
+     if the menu should be hidden when the pointer leaves
+     the view (used with multiple-menus)"
+
+    hideOnLeave := aBoolean
+!
+
+hideOnRelease:aBoolean
+    "set/clear the hideOnRelease attribute, which controls
+     if the menu should be hidden when the button is released"
+
+    defaultHideOnRelease := aBoolean.
+    menuView hideOnRelease:aBoolean
+
+    "Modified: 9.2.1996 / 02:06:15 / cg"
+!
+
+isEnabled:indexOrName
+    "return true, if the item at anIndexOrName is enabled"
+
+    ^ menuView isEnabled:indexOrName
+!
+
+memorizeLastSelection:index
+    "normally, a popup menu comes up unselected, even if reused.
+     This can be used to arrange for an initial selection to be shown"
+
+    lastSelection := index.
+    memorize := true.
+! !
+
+!PopUpMenu methodsFor:'accessing-items'!
+
+addItem:anItem
+    menuView addItem:anItem
+!
+
+atMenuItemLabeled:aString putSubmenu:aMenu visible:visible
+    |idx|
+
+    idx := self indexOf:aString.
+    idx notNil ifTrue:[
+        visible ifTrue:[
+            self subMenuAt:aString put:(aMenu asOldStylePopUpMenuFor:self application).
+        ].
+    ].
+
+    "Created: / 30-06-2011 / 10:28:57 / cg"
+!
+
+hasItems
+    "return true, if I have items"
+
+    ^ menuView notNil and:[ menuView hasItems ]
+!
+
+indexOf:indexOrName
+    "return the index of a submenu - or 0 if there is none"
+
+    ^ menuView indexOf:indexOrName
+!
+
+labels
+    "return the list of labels"
+
+    actionLabels notNil ifTrue:[
+	^ actionLabels asStringCollection
+    ].
+    ^ menuView list
+!
+
+labels:labelString lines:lineArrayArg values:valueArray
+    "define the menu the ST-80 way (with labels and lines defined separately)"
+
+    |lineArray labelArray argArray convertedLabels 
+     offs dstOffs linePos m|
+
+    lineArray := lineArrayArg.
+    (lineArray notNil and:[lineArray first]) == 0 ifTrue:[
+        lineArray := lineArray copyFrom:2.
+    ].
+
+    actionLabels := labelString.
+    actionLines := lineArray.
+    actionValues := valueArray.
+
+    labelArray := labelString asStringCollection.
+
+    convertedLabels := Array new:(labelArray size + lineArray size).
+    argArray := Array new:(labelArray size + lineArray size).
+
+    offs := 1.
+    dstOffs := 1.
+    1 to:lineArray size do:[:lineIndex |
+        linePos := lineArray at:lineIndex.
+        [offs <= linePos] whileTrue:[
+            convertedLabels at:dstOffs put:(labelArray at:offs).
+            argArray at:dstOffs put:offs.
+            offs := offs + 1.
+            dstOffs := dstOffs + 1
+        ].
+        convertedLabels at:dstOffs put:'-'.
+        argArray at:dstOffs put:nil.
+        dstOffs := dstOffs + 1
+    ].
+    [offs <= labelArray size] whileTrue:[
+        convertedLabels at:dstOffs put:(labelArray at:offs).
+        argArray at:dstOffs put:offs.
+        offs := offs + 1.
+        dstOffs := dstOffs + 1
+    ].
+
+    m := MenuView
+            labels:convertedLabels
+            selectors:nil
+            args:argArray
+            receiver:nil 
+            in:self.
+    m level:0; borderWidth:0.
+    self menuView:m
+
+    "Modified: 2.4.1997 / 15:57:52 / cg"
+!
+
+lines
+    "st-80 compatibility"
+
+    ^ actionLines
+!
+
+menuAt:indexOrName
+    "return the submenu for entry indexOrName."
+
+    ^ self subMenuAt:indexOrName
+
+    "Created: 24.3.1996 / 17:11:05 / cg"
+!
+
+numberOfItems
+    "return the number of items in the menu"
+
+    actionLabels notNil ifTrue:[
+	^ actionLabels asStringCollection size
+    ].
+    ^ menuView list size
+!
+
+remove:indexOrName
+    "remove a menu entry"
+
+    menuView remove:indexOrName
+!
+
+subMenuAt:indexOrName
+    "return the submenu for entry indexOrName"
+
+    ^ menuView subMenuAt:indexOrName
+
+    "Created: 24.3.1996 / 17:09:15 / cg"
+!
+
+subMenuAt:indexOrName put:aMenu
+    "define a submenu to be shown for entry indexOrName"
+
+"
+    aMenu hideOnLeave:true.
+"
+    menuView subMenuAt:indexOrName put:aMenu.
+    (aMenu notNil and:[aMenu isBlock not]) ifTrue:[
+        "tell the submenu to notify me when action is performed"
+        aMenu superMenu:self.
+    ].
+
+    "
+     |v m someObject|
+
+     v := View new.
+     m := PopUpMenu labels:#('1' '2' '3')
+                 selectors:#(one two nil)
+                  receiver:someObject 
+                       for:nil.
+     m subMenuAt:3 put:(PopUpMenu
+                             labels:#('a' 'b' 'c')
+                          selectors:#(a b c)
+                           receiver:someObject 
+                                for:nil).
+     v middleButtonMenu:m.
+     v realize
+    "
+!
+
+values
+    "st-80 compatibility"
+
+    ^ actionValues
+!
+
+values:aValueArray
+    "st-80 compatibility"
+
+    actionValues := aValueArray
+! !
+
+!PopUpMenu methodsFor:'accessing-look'!
+
+font:aFont
+    "set the menus font.
+     CAVEAT: with the addition of Text objects,
+             this method is going to be obsoleted by a textStyle
+             method, which allows specific control over
+             normalFont/boldFont/italicFont parameters."
+
+    preferredExtent := nil.
+    menuView font:aFont
+
+    "Modified: 22.5.1996 / 12:36:53 / cg"
+!
+
+viewBackground:aColor
+    "this is a kludge and will vanish ..."
+
+    super viewBackground:aColor.
+    menuView viewBackground:aColor
+! !
+
+!PopUpMenu methodsFor:'accessing-mvc'!
+
+changeMessage
+    "set the changeMessage from my menu"
+
+    ^ menuView changeMessage
+
+    "Modified: 5.6.1996 / 17:08:52 / cg"
+!
+
+changeMessage:aSymbol
+    "set the changeMessage - forward to my menu"
+
+    menuView changeMessage:aSymbol
+
+    "Modified: 5.6.1996 / 17:08:41 / cg"
+!
+
+menuPerformer
+    "get the menuPerformer - forwarded to my menuViews"
+
+    ^ menuView menuPerformer
+
+    "Modified: 5.6.1996 / 17:08:30 / cg"
+    "Created: 21.1.1997 / 15:40:22 / cg"
+!
+
+menuPerformer:someone
+    "set the menuPerformer - forwarded to my menuViews"
+
+    menuView menuPerformer:someone
+
+    "Modified: 5.6.1996 / 17:08:30 / cg"
+    "Created: 21.1.1997 / 15:40:14 / cg"
+!
+
+model 
+    "return my menuViews model"
+
+    ^ menuView model
+
+    "Modified: 5.6.1996 / 14:16:53 / cg"
+!
+
+model:aModel
+    "set the model - forwarded to my menuViews"
+
+    menuView model:aModel
+
+    "Modified: 5.6.1996 / 17:08:30 / cg"
+! !
+
+
+!PopUpMenu methodsFor:'deactivation'!
+
+hide
+    "hide the menu - if there are any pop-up-submenus, hide them also"
+
+    menuView hideSubmenu.
+    super hide.
+    (self isOpenedAsSubmenu) ifTrue:[
+        menuView superMenu regainControl
+    ].
+
+    "Modified: 25.2.1997 / 22:11:53 / cg"
+!
+
+hideForAction
+    "hide the menu - if there are any pop-up-submenus, hide them also.
+     Any superMenu is not asked to regain control, since we are going to
+     hide them also."
+
+    menuView hideSubmenu.
+    super hide.
+! !
+
+!PopUpMenu methodsFor:'dummy'!
+
+findGuiResourcesIn:aResourceContainerOrApplication
+    "dummy - for compatibility with MenuPanel (in case an old-style
+     PopUpMenu us returned from a menu message)
+    "
+
+
+! !
+
+!PopUpMenu methodsFor:'event handling'!
+
+buttonMotion:state x:x y:y
+    |p sensor|
+
+    "/ state == 0 ifTrue:[^ self].
+
+    (sensor := self sensor) isNil ifTrue:[^ self].
+    (sensor hasButtonMotionEventFor:self) ifTrue:[^ self].
+
+    "any-button ?"
+    "/ sensor anyButtonPressed ifFalse:[^ self].
+
+    ((x >= 0) 
+    and:[x < width
+    and:[y >= 0
+    and:[y < height]]]) ifTrue:[
+        "/ inside me
+
+        (x >= margin 
+        and:[x < (width-margin)
+        and:[y >= margin
+        and:[y < (height-margin)]]]) ifTrue:[
+            "/ inside my menuView
+            hideOnRelease := true.
+            p := self graphicsDevice 
+                    translatePoint:(x @ y)
+                    fromView:self
+                    toView:menuView.
+        
+            menuView buttonMotion:state x:p x y:p y.
+        ].
+        ^ self
+    ].
+
+    "outside of myself"
+    (self isOpenedAsSubmenu) ifTrue:[
+        p := self graphicsDevice 
+                translatePoint:(x @ y)
+                fromView:self
+                toView:(menuView superMenu).
+        p notNil ifTrue:[
+            menuView superMenu buttonMotion:state x:p x y:p y
+        ]
+    ].
+
+    menuView subMenuShown isNil ifTrue:[
+        menuView pointerLeave:state.
+    ].
+
+    hideOnLeave ifTrue:[
+        self hide
+    ].
+
+    "Modified: / 28-07-2007 / 13:14:12 / cg"
+!
+
+buttonPress:button x:x y:y
+    hideOnRelease := true.
+
+    ((x >= 0) and:[x < width]) ifTrue:[
+        ((y >= 0) and:[y < height]) ifTrue:[
+            menuView buttonPress:button x:x y:y.
+            ^ self
+        ]
+    ].
+
+    "Modified: 22.1.1997 / 17:38:14 / cg"
+!
+
+buttonRelease:button x:x y:y
+    |h|
+
+    realized ifFalse:[^ self].
+
+    "/
+    "/ detect short click - stay open if this is one
+    "/
+    h := hideOnRelease.
+    (OperatingSystem 
+        millisecondTimeDeltaBetween:(Time millisecondClockValue)
+                                and:mapTime) > (self class maxClickTimeToStayOpen) ifFalse:[
+        hideOnRelease := false.
+    ].
+
+    hideOnRelease ifFalse:[
+        ^ self
+    ].
+
+    (x < 0 
+    or:[x >= width
+    or:[y < 0
+    or:[y >= height]]]) ifTrue:[
+         "/   
+         "/ released outside of mySelf
+         "/
+        (self isOpenedAsSubmenu) ifTrue:[
+            menuView superMenu hideSubmenu
+        ] ifFalse:[
+            self hide
+        ].
+        ^ self
+    ].
+
+
+"/    menuView superMenu notNil ifTrue:[
+"/        menuView superMenu submenuTriggered 
+"/    ].
+
+    menuView buttonRelease:button x:x y:y.
+
+    "Modified: 8.3.1996 / 14:17:18 / cg"
+!
+
+keyPress:key x:x y:y
+    <resource: #keyboard (#Tab)>
+
+    hideOnKeyFilter notNil ifTrue:[
+        (hideOnKeyFilter value:key) ifTrue:[
+            self hide.
+            ^ self.
+        ].
+    ].
+
+    key == #Tab ifTrue:[
+        self hide.
+        super keyPress:key x:x y:y.
+        ^ self.
+    ].
+
+    x == 0 ifTrue:[
+        menuView keyPress:key x:nil y:nil.
+    ] ifFalse:[
+        x notNil ifTrue:[
+            "/ already redelegated
+            menuView keyPress:key x:x y:y.
+        ].
+    ].
+
+    "Modified: / 6.12.1997 / 01:53:08 / cg"
+!
+
+mapped
+    super mapped.
+
+    "/
+    "/ check if a button is pressed when mapped;
+    "/ if not, change my hide-strategy
+    "/
+
+"/    device buttonStates == 0 ifTrue:[
+"/        hideOnRelease := false
+"/    ].
+
+    "Created: 9.2.1996 / 19:56:20 / cg"
+    "Modified: 8.3.1996 / 13:42:15 / cg"
+!
+
+pointerEnter:state x:x y:y
+    "catch quick release of button"
+
+    hideOnLeave ifTrue:[
+        state == 0 ifTrue:[
+            self hide
+        ].
+    ]
+!
+
+pointerLeave:state
+"/    menuView pointerLeave:state.
+"/    hideOnLeave ifTrue:[
+"/        self hide
+"/    ].
+"/    menuView superMenu notNil ifTrue:[
+"/        menuView superMenu regainControl
+"/    ]
+! !
+
+!PopUpMenu methodsFor:'initialization'!
+
+initEvents
+    super initEvents.
+    self enableEnterLeaveEvents.
+    self enableMotionEvents.
+
+    "Modified: 7.3.1996 / 14:17:42 / cg"
+!
+
+initStyle
+    <resource: #style (#'popup.hideOnRelease'
+                       #'popup.level'
+"/                       #'popup.borderWidth'
+"/                       #'popup.borderColor'
+                       )>
+
+    |lvl bw bc|
+
+    super initStyle.
+
+    (lvl := styleSheet at:#'popup.level') notNil ifTrue:[
+        self level:lvl.
+    ].
+"/    (bw := styleSheet at:#'popup.borderWidth') notNil ifTrue:[
+"/        self borderWidth:bw
+"/    ].
+"/    (bc := styleSheet at:#'popup.borderColor') notNil ifTrue:[
+"/        self borderColor:bc
+"/    ].
+    defaultHideOnRelease := styleSheet at:#'popup.hideOnRelease' default:true.
+!
+
+initialize
+    super initialize.
+
+    memorize := true.
+    hideOnLeave := false.
+! !
+
+!PopUpMenu methodsFor:'menuview messages'!
+
+doesNotUnderstand:aMessage
+    "forward all menu-view messages"
+
+    (menuView respondsTo:(aMessage selector)) ifTrue:[
+	^ aMessage sendTo:menuView
+    ].
+    ^ super doesNotUnderstand:aMessage
+!
+
+regainControl
+|g|
+    ((g := self graphicsDevice activePointerGrab) ~~ self) ifTrue:[
+        self forceUngrabPointer.
+        self forceUngrabKeyboard.
+        shown ifTrue:[
+            self grabPointer.
+            self grabKeyboard.
+        ]
+    ].
+
+    "Modified: / 20.11.1997 / 00:32:32 / cg"
+    "Modified: / 2.2.1998 / 23:52:28 / stefan"
+! !
+
+!PopUpMenu methodsFor:'private-accessing'!
+
+isOpenedAsSubmenu
+    "return true, if I have been opened as a submenu of some other
+     menu."
+
+    |superMenu|
+
+    superMenu := menuView superMenu.
+    "/ check for realized, because the CTRL/SHIFT menus of a textView
+    "/ are opened as top-menu AND have a non-nil supermenu.
+    "/ thus asking for supermenu being nonNil is NOT a sufficient indicator for
+    "/ being an open submenu !!
+    ^ superMenu notNil and:[superMenu realized]
+!
+
+menu:aMenuView
+    "set the actual menu"
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'use #menuView:'.
+    self menuView:aMenuView
+
+    "Modified: 25.2.1997 / 20:52:08 / cg"
+!
+
+menuView
+    "return the actual menu"
+
+    ^ menuView
+!
+
+menuView:aMenu
+    "set the actual menu"
+
+    menuView := aMenu.
+    menuView origin:(margin @ margin).
+    menuView borderWidth:0.
+    menuView masterView:self
+
+    "Created: 25.2.1997 / 20:51:42 / cg"
+!
+
+superMenu:aMenu
+    "set the superMenu"
+
+    menuView superMenu:aMenu
+
+    "Modified: 25.2.1997 / 20:52:20 / cg"
+! !
+
+!PopUpMenu methodsFor:'realization'!
+
+fixSize
+    "called right before the view is made visible.
+     adjust my size to the size of the actual menu"
+
+    |extra newWidth newHeight|
+
+    extra := margin * 2.
+    menuView resizeIfChanged.
+    newWidth := menuView width + extra.
+    newHeight := menuView height + extra.
+    ((newWidth ~~ width) or:[newHeight ~~ height]) ifTrue:[
+        self extent:(newWidth @ newHeight)
+    ].
+    super fixSize
+!
+
+realize
+    (memorize == true and:[lastSelection notNil]) ifTrue:[
+        menuView setSelection:lastSelection.
+    ] ifFalse:[
+        menuView deselectWithoutRedraw.
+    ].
+    super realize.
+    hideOnRelease := defaultHideOnRelease.
+! !
+
+!PopUpMenu class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/PopUpMenu.st,v 1.115 2014-02-18 15:04:30 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/PopUpMenu.st,v 1.115 2014-02-18 15:04:30 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PullDownMenu.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1831 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+View subclass:#PullDownMenu
+	instanceVariableNames:'receiver menus titles selectors activeMenuNumber
+		showSeparatingLines topMargin fgColor bgColor activeFgColor
+		activeBgColor onLevel offLevel edgeStyle toggleMode toggleKeep
+		raiseTopWhenActivated actions'
+	classVariableNames:'DefaultViewBackground DefaultForegroundColor
+		DefaultBackgroundColor DefaultHilightForegroundColor
+		DefaultHilightBackgroundColor DefaultLevel DefaultHilightLevel
+		DefaultShadowColor DefaultLightColor DefaultEdgeStyle
+		DefaultToggleMode DefaultKeepMenu DefaultToggleKeep
+		DefaultSeparatingLines'
+	poolDictionaries:''
+	category:'Views-Menus'
+!
+
+!PullDownMenu class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Notice: this class is obsolete now 
+    - please use a MenuPanel in new applications, 
+    which provides all of this functionality, plus more and a nicer look.
+
+    PullDown menu provides the top (always visible) part of these menus. 
+    It controls display of its menus, which become visible when one of the 
+    PullDownMenus entries is pressed.
+
+    A PullDownMenu itself consists of a single row of labels, which activate
+    a pulled menu when clicked. Entries may be empty (i.e. have no menu)
+    and empty entries may (optionally) also perform some action when clicked.
+    An entries selector is used as the key to define and access submenus
+    and (for empty entries:) the selector sent to the receiver of the menu.
+
+    [Instance variables:]
+
+      menus                   <Collection>    the sub menus
+
+      titles                  <Collection>    the strings in the menu
+
+      selectors               <Collection>    the selectors to send to the menu-
+                                              receiver (for empty pull-menus)
+                                              if nil (the default), title entries
+                                              do not send anything.
+
+      activeMenuNumber        <Number>        the index of the currently active menu
+
+      showSeparatingLines     <Boolean>       show separating lines between my menu-strings
+
+      topMargin               <Number>        number of pixels at top
+
+      fgColor                 <Color>         fg color to draw passive menu-titles
+      bgColor                 <Color>         bg color to draw passive menu-titles
+
+      activeFgColor           <Color>         fg color to draw activated menu-titles
+      activeBgColor           <Color>         bg color to draw activated menu-titles
+
+      onLevel                 <Integer>       3D level of entry-buttons when pressed
+      offLevel                <Integer>       3D level of entry-buttons when released
+
+      edgeStyle               <Symbol>        how to draw edges
+
+      toggleMode              <Symbol>        if #toggle, press pulls menu,
+                                              another press hides it.
+                                              if other, its hidden on release.
+
+     except menus, titles and selectors, instvars are usually defined from
+     defaults in the styleSheet; you should not care for them.
+
+
+    [StyleSheet values:]
+
+      pullDownMenuViewBackground              view background Color for the menu bar
+                                              default: menuViewBackground
+
+      pullDownMenuForegroundColor             foreground drawing color for the menu bar
+                                              default: menuForegroundColor
+
+      pullDownMenuBackgroundColor             background drawing color for the menu bar
+                                              default: menuBackgroundColor
+
+      pullDownMenuHilightForegroundColor      active foreground drawing color for the menu bar
+                                              default: menuHilightForegroundColor
+
+      pullDownMenuHilightBackgroundColor      active background drawing color for the menu bar
+                                              default: menuHilightBackgroundColor
+
+      pullDownMenuHilightLevel                level (3D only) when active
+                                              default: menuHilightLevel
+
+      pullDownMenuEdgeStyle                   edge style (nil or #soft)
+
+      pullDownMenuKeepMenu                    if true, pulled menu stays open until button
+                                              is pressed again outside of the item-area (motif behavior)
+                                              if false, menu closes on release (default)
+
+      pullDownMenuToggleKeep                  if true, pulled menu closes when an entry is pressed
+                                              again. Otherwise, only press outside of the items area
+                                              hides it. default is false
+
+      pullDownMenuLevel                       level (3D only)
+
+      pullDownMenuFont                        font to use for the menu bar
+                                              default: menuFont
+
+      pullDownMenuShowSeparatingLines         if true, lines are drawn between items.
+                                              default: false
+
+      pullDownMenuRaiseTop                    if true, topview is raised whenever an entry
+                                              is activated.
+                                              default: true
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples 
+"
+  with default level (from styleSheets 'pullDownMenuLevel' setting):
+									[exBegin]
+	|top menu|
+
+	top := StandardSystemView new.
+	top extent:300@300.
+
+	menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
+	menu labels:#('foo' 'bar').
+	menu selectors:#(foo bar).
+	menu at:#foo
+	     putLabels:#('foo1' 'foo2' 'foo3')
+	     selectors:#(foo1 foo2 foo3)
+	     receiver:nil.
+	menu at:#bar 
+	     putLabels:#('bar1' 'bar2' 'bar3')
+	     selectors:#(bar1 bar2 bar3)
+	     receiver:nil.
+	top open
+									[exEnd]
+
+  with a defined level:
+									[exBegin]
+	|top menu|
+
+	top := StandardSystemView new.
+	top extent:300@300.
+
+	menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
+	menu level:1.
+	menu labels:#('foo' 'bar').
+	menu selectors:#(foo bar).
+	menu at:#foo
+	     putLabels:#('foo1' 'foo2' 'foo3')
+	     selectors:#(foo1 foo2 foo3)
+	     receiver:nil.
+	menu at:#bar 
+	     putLabels:#('bar1' 'bar2' 'bar3')
+	     selectors:#(bar1 bar2 bar3)
+	     receiver:nil.
+	top open
+									[exEnd]
+
+
+    empty entries are possible as selectable items (with non-nil seletor) ...
+									[exBegin]
+	|top menu|
+
+	top := StandardSystemView new.
+	top extent:300@300.
+
+	menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
+	menu labels:#('foo' 'bar' 'baz').
+	menu selectors:#(foo bar baz).
+	menu at:#foo
+	     putLabels:#('foo1' 'foo2' 'foo3')
+	     selectors:#(foo1 foo2 foo3)
+	     receiver:nil.
+	menu at:#baz 
+	     putLabels:#('baz1' 'baz2' 'baz3')
+	     selectors:#(baz1 baz2 baz3)
+	     receiver:nil.
+	top open
+									[exEnd]
+
+
+    ... or as separators (with nil selector)
+									[exBegin]
+	|top menu|
+
+	top := StandardSystemView new.
+	top extent:500@200.
+
+	menu := PullDownMenu origin:0.0@0.0 corner:1.0@30 in:top.
+	menu labels:#('foo' '    ' 'bar' ' baz' '    ' 'moreFoo' 'moreBar' 'moreBaz').
+	menu selectors:#(foo nil bar baz nil moreFoo moreBar moreBaz).
+	menu at:#foo
+	     putLabels:#('foo1' 'foo2' 'foo3')
+	     selectors:#(foo1 foo2 foo3)
+	     receiver:nil.
+	menu at:#bar 
+	     putLabels:#('bar1' 'bar2' 'bar3')
+	     selectors:#(bar1 bar2 bar3)
+	     receiver:nil.
+	menu at:#baz 
+	     putLabels:#('baz1' 'baz2' 'baz3')
+	     selectors:#(baz1 baz2 baz3)
+	     receiver:nil.
+	top open
+									[exEnd]
+
+
+
+    use the menus default height
+									[exBegin]
+	|top menu|
+
+	top := StandardSystemView new.
+	top extent:300@300.
+
+	menu := PullDownMenu in:top.
+	menu origin:0.0@0.0 corner:1.0@(menu height).
+	menu labels:#('foo' 'bar').
+	menu selectors:#(foo bar).
+	menu at:#foo
+	     putLabels:#('foo1' 'foo2' 'foo3')
+	     selectors:#(foo1 foo2 foo3)
+	     receiver:nil.
+	top open
+									[exEnd]
+
+
+
+    although you can change the font, colors etc. (as shown below)
+    you should NOT do it - since if you do so, the styleSheet settings
+    are ineffective (which users probably won't like)
+    BTW: The styleSheet entries for below are pullDownMenuForegroundColor,
+	 pullDownMenuBackgroundColor and pullDownMenuFont
+									[exBegin]
+	|top menu|
+
+	top := StandardSystemView new.
+	menu := PullDownMenu in:top.
+	menu font:(Font family:'courier' size:20).
+	menu foregroundColor:Color red.
+	menu backgroundColor:Color yellow.
+	menu viewBackground:Color green.
+	menu showSeparatingLines:true.
+
+	menu origin:0.0@0.0 corner:1.0@(menu height).
+	menu labels:#('foo' 'bar').
+	menu selectors:#(foo bar).
+	menu at:#foo
+	     putLabels:#('foo1' 'foo2' 'foo3')
+	     selectors:#(foo1 foo2 foo3)
+	     receiver:nil.
+	(menu menuAt:#foo) font:(Font family:'courier' size:36).
+	top open
+									[exEnd]
+
+
+    you can use icons, too ...
+									[exBegin]
+	|labels top menu|
+
+	top := StandardSystemView new.
+	top extent:300@300.
+
+	menu := PullDownMenu in:top.
+	menu origin:0.0@0.0 corner:1.0@(menu height).
+	labels := Array with:((Image fromFile:'SmalltalkX.xbm') magnifiedTo:16@16)
+			with:'foo'
+			with:'bar'.
+	menu labels:labels.
+	menu selectors:#(about foo bar).
+	menu at:#about 
+	     putLabels:#('about PullDownMenus')
+	     selectors:#(aboutMenus)
+	     receiver:nil.
+	menu at:#foo
+	     putLabels:#('foo1' 'foo2' 'foo3')
+	     selectors:#(foo1 foo2 foo3)
+	     receiver:nil.
+	top open
+									[exEnd]
+
+
+    a concrete example (combining things described above)
+    (using a Plug, since we have no application class here):
+									[exBegin]
+	|labels top menu textView appModel|
+
+	appModel := Plug new.
+	appModel respondTo:#quit with:[top destroy].
+	appModel respondTo:#showAbout with:[self information:'some info here ...'].
+	appModel respondTo:#help with:[self information:'some help here ...'].
+
+	top := StandardSystemView new.
+	top extent:300@300.
+
+	menu := PullDownMenu in:top.
+	menu receiver:appModel.
+	menu origin:0.0@0.0 corner:1.0@(menu height).
+
+	textView := ScrollableView forView:(EditTextView new).
+	textView origin:0.0@menu height corner:1.0@1.0.
+	top addSubView:textView.
+
+	labels := Array with:((Image fromFile:'SmalltalkX.xbm') magnifiedTo:16@16)
+			with:'file'
+			with:'edit'
+			with:'help'.
+	menu labels:labels.
+	menu selectors:#(about file edit help).
+	menu at:#about 
+	     putLabels:#('about PullDownMenus')
+	     selectors:#(showAbout)
+	     receiver:appModel.
+	menu at:#file 
+	     putLabels:#('quit')
+	     selectors:#(quit)
+	     receiver:appModel.
+	menu at:#edit 
+	     putLabels:#('copy' 'cut' 'paste')
+	     selectors:#(copySelection cut paste)
+	     receiver:textView.
+	top open
+									[exEnd]
+"
+
+! !
+
+!PullDownMenu class methodsFor:'instance creation'!
+
+labels:titleArray
+    "create and return a new PullDownMenu"
+
+    ^ self new labels:titleArray
+! !
+
+!PullDownMenu class methodsFor:'defaults'!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'pullDownMenu.viewBackground' #'menuView.background'
+                       #'pullDownMenu.foregroundColor' #'menu.foregroundColor'
+                       #'pullDownMenu.backgroundColor' #'menu.backgroundColor'
+                       #'pullDownMenu.hilightForegroundColor' #'menu.hilightForegroundColor'
+                       #'pullDownMenu.hilightBackgroundColor' #'menu.hilightBackgroundColor'
+                       #'pullDownMenu.hilightLevel' #'menu.hilightLevel'
+                       #'pullDownMenu.edgeStyle' 
+                       #'pullDownMenu.toggleMode'
+                       #'pullDownMenu.level'
+                       #'pullDownMenu.font' 
+                       #'pullDownMenu.separatingLines')>
+
+    |styleSheet|
+
+    styleSheet := StyleSheet.
+
+    DefaultViewBackground := styleSheet colorAt:#'pullDownMenu.viewBackground'.
+    DefaultViewBackground isNil ifTrue:[
+        DefaultViewBackground := styleSheet colorAt:#'menuView.background'.
+    ].
+    DefaultForegroundColor := styleSheet colorAt:#'pullDownMenu.foregroundColor'.
+    DefaultForegroundColor isNil ifTrue:[
+        DefaultForegroundColor := styleSheet colorAt:#'menu.foregroundColor'.
+    ].
+    DefaultBackgroundColor := styleSheet colorAt:#'pullDownMenu.backgroundColor'.
+    DefaultBackgroundColor isNil ifTrue:[
+        DefaultViewBackground notNil ifTrue:[
+            DefaultBackgroundColor := DefaultViewBackground
+        ] ifFalse:[
+            DefaultBackgroundColor := styleSheet colorAt:#'menu.backgroundColor'.
+        ]
+    ].
+    DefaultHilightForegroundColor := styleSheet colorAt:#'pullDownMenu.hilightForegroundColor'.
+    DefaultHilightForegroundColor isNil ifTrue:[
+        DefaultHilightForegroundColor := styleSheet colorAt:#'menu.hilightForegroundColor'.
+    ].
+    DefaultHilightBackgroundColor := styleSheet colorAt:#'pullDownMenu.hilightBackgroundColor'.
+    DefaultHilightBackgroundColor isNil ifTrue:[
+        DefaultHilightBackgroundColor := styleSheet colorAt:#'menu.hilightBackgroundColor'.
+    ].
+    DefaultHilightLevel := styleSheet at:#'pullDownMenu.hilightLevel'.
+    DefaultHilightLevel isNil ifTrue:[
+        DefaultHilightLevel := styleSheet at:#'menu.hilightLevel' default:0.
+    ].
+    DefaultEdgeStyle := styleSheet at:#'pullDownMenu.edgeStyle'.
+    DefaultToggleMode := styleSheet at:#'pullDownMenu.toggleMode' default:#toggle.
+    DefaultLevel := styleSheet at:#'pullDownMenu.level' default:1.
+    DefaultFont := styleSheet fontAt:#'pullDownMenu.font'.
+    DefaultFont isNil ifTrue:[
+        DefaultFont := MenuView defaultFont
+    ].
+    DefaultSeparatingLines := styleSheet at:#'pullDownMenu.separatingLines' default:false.
+
+    "
+     PullDownMenu updateStyleCache
+    "
+
+    "Modified: 20.10.1997 / 14:02:28 / cg"
+! !
+
+!PullDownMenu methodsFor:'accessing'!
+
+add:label selector:selector
+    "add a new title-item at the end.
+     The corresponding label can later be set with #at:putMenu:
+     or #at:putLabels:selectors:..."
+
+    self add:label selector:selector after:nil
+
+    "Modified: 5.6.1996 / 16:45:46 / cg"
+!
+
+add:label selector:selector after:indexOrString
+    "add a new title-item after an existing item, indexOrString,
+     or at the end if the after-arg is nil.
+     The corresponding label can later be set with #at:putMenu:
+     or #at:putLabels:selectors:..."
+
+    |idx|
+
+    indexOrString isNil ifTrue:[
+        idx := titles size
+    ] ifFalse:[
+        idx := self indexOf:indexOrString.
+    ].
+
+    titles isNil ifTrue:[
+        menus := Array with:nil.
+        titles := Array with:label.
+        selectors := Array with:selector.
+    ] ifFalse:[
+        menus := menus copyWith:nil insertedAfterIndex:idx.
+        titles := titles copyWith:label insertedAfterIndex:idx.
+        selectors := selectors copyWith:selector insertedAfterIndex:idx.
+    ].
+
+    shown ifTrue:[
+        self redraw
+    ]
+
+    "
+     |top m|
+
+     top := StandardSystemView new.
+     m := PullDownMenu in:top.
+     m labels:#('file' 'edit').
+     m selectors:#(file #edit).
+
+     m add:'help' selector:#help after:#file.
+     m at:#help putMenu:(MenuView labels:#('foo' 'bar')
+                               selectors:#(foo bar)
+                                receiver:nil).
+
+     top open
+    "
+
+    "Modified: 5.7.1996 / 11:40:47 / cg"
+!
+
+add:label selector:selector before:indexOrString
+    "add a new title-item before an existing item, indexOrString,
+     or at the beginning if the before-arg is nil.
+     The corresponding label can later be set with #at:putMenu:
+     or #at:putLabels:selectors:..."
+
+    |idx|
+
+    indexOrString isNil ifTrue:[
+        idx := 1
+    ] ifFalse:[
+        idx := self indexOf:indexOrString.
+    ].
+
+    titles isNil ifTrue:[
+        menus := Array with:nil.
+        titles := Array with:label.
+        selectors := Array with:selector.
+    ] ifFalse:[
+        menus := menus copyWith:nil insertedAfterIndex:idx-1.
+        titles := titles copyWith:label insertedAfterIndex:idx-1.
+        selectors := selectors copyWith:selector insertedAfterIndex:idx-1.
+    ].
+
+    shown ifTrue:[
+        self redraw
+    ]
+
+    "
+     |top m|
+
+     top := StandardSystemView new.
+     m := PullDownMenu in:top.
+     m labels:#('file' 'edit').
+     m selectors:#(file #edit).
+
+     m add:'help' selector:#help before:#edit.
+     m at:#help putMenu:(MenuView labels:#('foo' 'bar')
+                               selectors:#(foo bar)
+                                receiver:nil).
+
+     m add:'foo' selector:#foo before:nil.
+     m at:#foo putMenu:(MenuView labels:#('foo1' 'foo2')
+                               selectors:#(foo1 foo2)
+                                receiver:nil).
+
+     top open
+    "
+
+    "Modified: 5.7.1996 / 11:40:55 / cg"
+!
+
+at:aString putLabels:labels selector:selector args:args receiver:anObject
+    "create and set the menu under the title, aString
+     OBSOLETE protocol: labels:selectors:args:receiver: knows how to handle a
+     single symbol-arg for selectors ..."
+
+    ^ self at:aString putLabels:labels selectors:selector args:args receiver:anObject
+
+    "Modified: 5.6.1996 / 16:47:32 / cg"
+!
+
+at:aString putLabels:labels selectors:selectors
+    "create and set the menu under the title, aString"
+
+    ^ self at:aString putLabels:labels selectors:selectors receiver:nil
+
+    "Created: 24.3.1996 / 17:06:45 / cg"
+!
+
+at:aString putLabels:labels selectors:selectors accelerators:shorties args:args receiver:anObject
+    "create and set the menu under the title, aString"
+
+    |menuView|
+
+    menuView := MenuView labels:labels
+                      selectors:selectors
+                   accelerators:shorties
+                           args:args
+                       receiver:anObject
+                            for:self.
+    self at:aString putMenu:menuView.
+    ^ menuView
+
+    "Created: 5.6.1996 / 16:51:48 / cg"
+!
+
+at:aString putLabels:labels selectors:selectors accelerators:shorties receiver:anObject
+    "create and set the menu under the title, aString"
+
+    ^ self at:aString putLabels:labels selectors:selectors accelerators:shorties args:nil receiver:anObject
+
+    "Modified: 5.6.1996 / 16:48:26 / cg"
+    "Created: 5.6.1996 / 16:53:39 / cg"
+!
+
+at:aString putLabels:labels selectors:selectors args:args receiver:anObject
+    "create and set the menu under the title, aString"
+
+    |menuView|
+
+    menuView := MenuView labels:labels
+                      selectors:selectors
+                           args:args
+                       receiver:anObject
+                            for:self.
+    self at:aString putMenu:menuView.
+    ^ menuView
+!
+
+at:aString putLabels:labels selectors:selectors receiver:anObject
+    "create and set the menu under the title, aString"
+
+    ^ self at:aString putLabels:labels selectors:selectors args:nil receiver:anObject
+
+    "Modified: 5.6.1996 / 16:48:26 / cg"
+!
+
+at:aString putMenu:aMenu
+    "set the menu under the title, aString"
+
+    |index|
+
+    index := self indexOf:aString.
+    (index == 0) ifTrue:[
+        self error:'no such menu entry' mayProceed:true.
+        ^ nil
+    ].
+
+    aMenu container:(self superView).
+    aMenu beInvisible.
+    menus at:index put:aMenu.
+    aMenu masterView:self.
+
+    ^ aMenu
+
+    "Modified: 5.6.1996 / 16:48:50 / cg"
+!
+
+labels
+    "return the menu-titles (group-headers)"
+
+    ^ titles
+!
+
+labels:titleArray
+    "define the menu-titles (group-headers)"
+
+    |numberOfLabels|
+
+    numberOfLabels := titleArray size.
+    menus := Array new:numberOfLabels.
+    titles := Array new:numberOfLabels.
+
+    titleArray keysAndValuesDo:[:index :entry |
+        |e|
+
+        entry isImage ifTrue:[
+            e := entry onDevice:self graphicsDevice
+        ] ifFalse:[
+            e := entry printString
+        ].
+        titles at:index put:e
+    ].
+    self invalidate "/ clear; redraw
+
+    "Modified: 29.5.1996 / 16:21:00 / cg"
+!
+
+labels:titleArray selectors:selectorArray
+    "define the menu-titles (group-headers) and selectors.
+     Selectors are mostly used as access keys to get to submenus later."
+
+    self labels:titleArray.
+    self selectors:selectorArray
+
+    "Created: 20.10.1995 / 20:15:54 / cg"
+!
+
+menuAt:stringOrNumber
+    "return the menu with the title; nil if not found"
+
+    ^ self subMenuAt:stringOrNumber
+
+    "Modified: 24.3.1996 / 17:10:11 / cg"
+!
+
+numberOfTitles:n
+    "setup blank title-space to be filled in later"
+
+    menus := Array new:n.
+    titles := Array new:n
+!
+
+receiver:anObject 
+    "set the menu-receiver. Thats the one who gets the
+     messages (both from myself and from my submenus).
+     This only sets the receiver for menus which are already
+     created - menus added later should get their receiver in
+     the creation send."
+
+    receiver := anObject.
+    menus notNil ifTrue:[
+	menus do:[:aMenu |
+	    aMenu notNil ifTrue:[
+		aMenu receiver:anObject
+	    ]
+	]
+    ]
+!
+
+remove:indexOrString
+    "remove the menu, indexOrString."
+
+    |idx|
+
+    idx := self indexOf:indexOrString.
+    idx == 0 ifTrue:[^ self].
+
+    menus removeIndex:idx.
+    titles removeIndex:idx.
+    selectors removeIndex:idx.
+
+    shown ifTrue:[
+        self clearView.
+        self redraw
+    ]
+
+    "
+     |top m|
+
+     top := StandardSystemView new extent:300@200.
+     m := PullDownMenu in:top.
+     m labels:#('file' 'edit').
+     m selectors:#(file #edit).
+     top open.
+
+     Delay waitForSeconds:3.
+     m add:'help' selector:#help after:#file.
+     m at:#help putMenu:(MenuView labels:#('foo' 'bar')
+                               selectors:#(foo bar)
+                                receiver:nil).
+
+     Delay waitForSeconds:3.
+     m remove:'help'
+    "
+
+    "Modified: 5.7.1996 / 11:43:08 / cg"
+!
+
+selectors
+    "return the menu-selectors"
+
+    ^ selectors
+!
+
+selectors:selectorArray
+    "define the menu-selectors. These are used as accesskey only
+     in menuAt: accesses. This makes PullDownMenu accesss
+     somewhat more compatible to PopUpMenus."
+
+    selectors := selectorArray copy.
+
+    "Modified: 30.4.1996 / 15:57:04 / cg"
+!
+
+subMenuAt:stringOrNumber
+    "return the menu with the title; nil if not found."
+
+    |index|
+
+    index := self indexOf:stringOrNumber.
+    (index == 0) ifTrue:[^ nil].
+    ^ menus at:index
+
+    "Modified: 24.3.1996 / 17:09:56 / cg"
+! !
+
+!PullDownMenu methodsFor:'accessing-behavior'!
+
+actionAt:stringOrNumber
+    "return the actionBlock associated with stringOrNumber; 
+     nil if there is none (but there may be still a selector there)."
+
+    |index|
+
+    actions isNil ifTrue:[^ nil].
+    index := self indexOf:stringOrNumber.
+    (index == 0) ifTrue:[^ nil].
+    ^ actions at:index ifAbsent:nil
+
+    "Modified: 24.3.1996 / 17:09:56 / cg"
+    "Created: 17.4.1996 / 20:50:45 / cg"
+!
+
+actionAt:stringOrNumber put:aBlock
+    "return the actionBlock associated with stringOrNumber; 
+     nil if there is none (but there may be still a selector there)."
+
+    |index newActions|
+
+    index := self indexOf:stringOrNumber.
+    (index == 0) ifTrue:[^ nil].
+    actions size < index ifTrue:[
+	newActions := Array new:index.
+	newActions replaceFrom:1 to:actions size with:actions.
+	actions := newActions
+    ].
+    actions at:index put:aBlock
+
+    "Modified: 24.3.1996 / 17:09:56 / cg"
+    "Created: 17.4.1996 / 20:52:13 / cg"
+!
+
+disable:anItem
+    menus do:[:aMenu |
+        aMenu notNil ifTrue:[aMenu disable:anItem]
+    ]
+!
+
+enable:anItem
+    menus do:[:aMenu |
+        aMenu notNil ifTrue:[aMenu enable:anItem]
+    ]
+! !
+
+!PullDownMenu methodsFor:'accessing-look'!
+
+backgroundColor:aColor
+    "set the background drawing color.
+     You should not use this method; instead leave the value as
+     defined in the styleSheet."
+
+    bgColor := aColor onDevice:self graphicsDevice
+!
+
+font:aFont
+    "set the menus font.
+     adjusts menu-origins when font changes.
+     You should not use this method; instead leave the value as
+     defined in the styleSheet.
+     CAVEAT: with the addition of Text objects,
+             this method is going to be obsoleted by a textStyle
+             method, which allows specific control over
+             normalFont/boldFont/italicFont parameters."
+
+    |font|
+
+    font := self font.
+    aFont ~~ font ifTrue:[
+        super font:aFont.
+        font := self font.
+        self height:(font height + (font descent * 2)).
+        shown ifTrue:[
+            self setMenuOrigins
+        ]
+    ]
+
+    "Modified: 22.5.1996 / 12:37:04 / cg"
+!
+
+foregroundColor:aColor
+    "set the foreground drawing color.
+     You should not use this method; instead leave the value as
+     defined in the styleSheet."
+
+    fgColor := aColor onDevice:self graphicsDevice
+!
+
+showSeparatingLines:aBoolean
+    "turn on/off drawing of separating lines.
+     You should not use this method; instead leave the value as
+     defined in the styleSheet."
+
+    showSeparatingLines := aBoolean.
+    shown ifTrue:[
+	self setMenuOrigins.
+	self invalidate
+    ]
+
+    "Modified: 29.5.1996 / 16:21:06 / cg"
+! !
+
+!PullDownMenu methodsFor:'converting'!
+
+asMenu
+    ^ self asMenu:self
+
+!
+
+asMenu:aView
+    |menu values item subM rcv|
+
+    menu   := Menu new.
+    values := aView selectors.
+
+    aView labels keysAndValuesDo:[:anIndex :aLabel|
+        item := MenuItem label:(aLabel printString).
+        aLabel isImage ifTrue:[
+            rcv := ResourceRetriever new.
+            rcv className:#MenuEditor.
+            rcv selector:#iconUnknown.
+            item resourceRetriever:rcv.
+        ] ifFalse:[
+            aView ~~ self ifTrue:[
+                rcv := aView checkToggleAt:anIndex.
+                rcv notNil ifTrue:[
+                    item indication:rcv
+                ]
+            ]
+        ].
+
+        subM := aView subMenuAt:anIndex.
+
+        subM notNil ifTrue:[
+            item submenu:(self asMenu:subM)
+        ].
+        menu addItem:item value:(values at:anIndex).
+    ].
+  ^ menu
+! !
+
+!PullDownMenu methodsFor:'drawing'!
+
+drawActiveTitleSelected:selected
+    |x|
+    activeMenuNumber notNil ifTrue:[
+	x := self titleLenUpTo:activeMenuNumber.
+	self drawTitle:(titles at:activeMenuNumber) x:x selected:selected 
+    ]
+!
+
+drawTitle:stringOrImage x:x0 selected:selected
+    |y w x wSpace fg bg map font|
+
+    selected ifTrue:[
+        fg := activeFgColor.
+        bg := activeBgColor
+    ] ifFalse:[
+        fg := fgColor.
+        bg := bgColor
+    ].
+
+    font := gc font.
+    wSpace := font widthOf:' '.
+    x := x0.
+    stringOrImage isString ifTrue:[
+        y := ((height - (font height)) // 2) + (font ascent) "+ topMargin".
+        w := font widthOf:stringOrImage.
+    ] ifFalse:[
+        y := ((height - stringOrImage height) // 2) max:0.
+        w := stringOrImage width
+    ].
+    w := w + (wSpace * 2).
+
+    self paint:bg.
+    self fillRectangleX:x y:0 width:w height:height.
+
+    self is3D ifTrue:[
+        self drawEdgesForX:x y:0
+                     width:w
+                    height:height
+                     level:(selected ifTrue:[onLevel] ifFalse:[offLevel])
+    ].
+    self paint:fg on:bg.
+    x := x + wSpace.
+    stringOrImage isString ifTrue:[
+        self displayOpaqueString:stringOrImage x:x y:y
+    ] ifFalse:[
+        stringOrImage isImageOrForm ifTrue:[
+            stringOrImage depth == 1 ifTrue:[
+                (map := stringOrImage colorMap) notNil ifTrue:[
+                    map at:1 put:((map at:1) onDevice:self graphicsDevice).
+                    map at:2 put:((map at:2) onDevice:self graphicsDevice).
+
+                    self paint:(map at:2) on:(map at:1).
+                    self displayOpaqueForm:stringOrImage x:x y:y.
+                    ^ self
+                ]
+            ].
+            self displayForm:stringOrImage x:x y:y
+        ] ifFalse:[
+            stringOrImage displayOn:self x:x y:y
+        ]
+    ]
+
+    "Modified: 14.1.1997 / 00:06:07 / cg"
+!
+
+highlightActiveTitle
+    self drawActiveTitleSelected:true 
+!
+
+redraw
+    |x     "{ Class: SmallInteger }"
+     y     "{ Class: SmallInteger }"
+     index "{ Class: SmallInteger }" 
+     wSpace clr font|
+
+    shown ifFalse: [ ^ self ].
+    titles isNil ifTrue:[^ self].
+
+    font := gc font.
+    wSpace := (font widthOf:' ').
+    x := 0.
+    y := height "- 1".
+    index := 1.
+    titles do:[:title |
+        self drawTitle:title x:x selected:(index == activeMenuNumber).
+
+        title isString ifTrue:[
+            x := x + (font widthOf:title).
+        ] ifFalse:[
+            x := x + title width
+        ].
+        x := x + wSpace + wSpace.
+        showSeparatingLines ifTrue:[
+            self is3D ifTrue:[
+                self paint:shadowColor.
+                self displayLineFromX:x y:0 toX:x y:y.
+                x := x + 1.
+                clr := lightColor.
+            ] ifFalse:[
+                clr := fgColor.
+            ].
+            self paint:clr.
+            self displayLineFromX:x y:0 toX:x y:y.
+            x := x + 1
+        ].
+        index := index + 1
+    ]
+
+    "Modified: 14.1.1997 / 00:06:22 / cg"
+!
+
+unHighlightActiveTitle
+    self drawActiveTitleSelected:false 
+! !
+
+!PullDownMenu methodsFor:'event handling'!
+
+buttonMotion:state x:x y:y
+    |titleIndex activeMenu activeLeft activeTop|
+
+    state == 0 ifTrue:[
+        "/ self hideActiveMenu.
+        ^ self
+    ].
+    "is it the select or 1-button ?"
+    self sensor anyButtonPressed ifFalse:[^ self].
+
+    activeMenuNumber isNil ifTrue:[^ self].
+
+    activeMenuNumber notNil ifTrue:[
+        activeMenu := menus at:activeMenuNumber.
+    ].
+
+    (y < height) ifTrue:[
+        "moving around in title line"
+        activeMenu notNil ifTrue:[
+            activeMenu setSelection:nil
+        ].
+        titleIndex := self titleIndexForX:x.
+        titleIndex notNil ifTrue:[
+            (titleIndex ~~ activeMenuNumber) ifTrue:[
+                self pullMenu:titleIndex
+            ]
+        ] ifFalse:[
+            self hideActiveMenu
+        ]
+    ] ifFalse:[
+        "moving around below"
+        activeMenu isNil ifTrue:[^self].
+        activeLeft := activeMenu left.
+        (x between:activeLeft and:(activeMenu right)) ifTrue:[
+            activeTop := activeMenu top.
+            (y between:activeTop and:(activeMenu bottom)) ifTrue:[
+                "moving around in menu"
+                activeMenu buttonMotion:state
+                                      x:(x - activeLeft)
+                                      y:(y - activeTop).
+                ^ self
+            ]
+        ].
+        "moved outside menu"
+        activeMenu setSelection:nil
+    ]
+
+    "Modified: / 28.7.1998 / 16:01:50 / cg"
+!
+
+buttonPress:button x:x y:y
+    |titleIndex activeMenu activeLeft activeTop m|
+
+    self forceUngrabPointer.
+    self forceUngrabKeyboard.
+
+    (y between:0 and:height) ifTrue:[
+        titleIndex := self titleIndexForX:x.
+    ].
+
+    "
+     now, titleIndex is non-nil if pressed within myself
+    "
+    (titleIndex notNil and:[titleIndex ~~ activeMenuNumber]) ifTrue:[
+        "/ pressed on another item
+        m := self pullMenu:titleIndex.
+        (toggleMode == #toggle) ifTrue:[
+            self grabPointer.
+            self grabKeyboard.
+"/            self cursor:Cursor upRightArrow
+        ]
+    ] ifFalse:[
+        titleIndex == activeMenuNumber ifTrue:[
+            "/ pressed on same item
+            (toggleMode ~~ #toggle) ifTrue:[
+                "same pressed again ... stay"
+                titleIndex notNil ifTrue:[
+                    self grabPointer.
+                    self grabKeyboard.
+                ].
+            ] ifFalse:[
+                self hideActiveMenu.
+            ].
+            ^ self
+        ].
+
+        "/ pressed outside
+
+        activeMenuNumber isNil ifTrue:[^self].
+
+        activeMenu := menus at:activeMenuNumber.
+        activeLeft := activeMenu left.
+        (x between:activeLeft and:(activeMenu right)) ifTrue:[
+            activeTop := activeMenu top.
+            (y between:activeTop and:(activeMenu bottom)) ifTrue:[
+
+                "/ pressed inside currently pulled menu
+                activeMenu buttonPress:button x:(x - activeLeft) y:(y - activeTop).
+                ^ self
+            ].
+        ].
+
+        "/ somewhere else
+        self hideActiveMenu.
+    ]
+
+    "Modified: 6.3.1996 / 17:14:16 / cg"
+!
+
+buttonRelease:button x:x y:y
+    |activeMenu activeLeft activeTop hideMenu|
+
+    activeMenuNumber isNil ifTrue:[^self].
+    activeMenu := menus at:activeMenuNumber.
+
+    hideMenu := false.
+    (y >= height) ifTrue:[
+	"release below title-line"
+	activeLeft := activeMenu left.
+	"
+	 released in a submenu ?
+	"
+	(x between:activeLeft and:(activeMenu right)) ifTrue:[
+	    activeTop := activeMenu top.
+	    (y between:activeTop and:(activeMenu bottom)) ifTrue:[
+		"release in menu"
+		self hideActiveMenu.   
+		activeMenu buttonRelease:button
+				       x:(x - activeLeft)
+				       y:(y - activeTop).
+		^ self
+	    ]
+	].
+	hideMenu := true.
+    ] ifFalse:[
+	y < 0 ifTrue:[
+	    hideMenu := true
+	] ifFalse:[
+	    activeMenu isNil ifTrue:[
+		self performSelectedAction.
+		hideMenu := true.
+	    ] ifFalse:[
+		(toggleMode == #toggle) ifFalse:[   
+		    hideMenu := true
+		]
+	    ]
+	]
+    ].                  
+    hideMenu ifTrue:[
+       self hideActiveMenu.
+    ]
+
+    "Modified: 17.4.1996 / 20:56:08 / cg"
+!
+
+keyPress:key x:x y:y
+
+    <resource: #keyboard (#CursorLeft #CursorRight #MenuSelect #Return)>
+
+    |index startIndex m|
+
+    "
+     handle CursorLeft/Right for non-mouse operation
+     (for example, if it has the explicit focus)
+     These will pull the previous/next menu
+    "
+    ((key == #CursorRight) or:[key == #CursorLeft]) ifTrue:[
+	activeMenuNumber isNil ifTrue:[
+	    index := (key == #CursorRight) ifTrue:[1] ifFalse:[menus size].
+	] ifFalse:[
+	    (key == #CursorRight) ifTrue:[
+		"/ if its a cursor-right, and the current item
+		"/ has a submenu, then pop up the submenu
+		m := menus at:activeMenuNumber.
+		m notNil ifTrue:[
+		    m selectedItemHasSubmenu ifTrue:[
+			m showSubmenu:(m selection).
+			^ self.
+		    ].
+		].
+	    ].
+
+	    (key == #CursorRight) ifTrue:[
+		index := activeMenuNumber+1
+	    ] ifFalse:[
+		index := activeMenuNumber-1
+	    ].
+	    index == 0 ifTrue:[index := menus size]
+	    ifFalse:[
+		index > menus size ifTrue:[index := 1]
+	    ]
+	].
+	self pullMenu:index.
+	^ self
+    ].
+
+"/    activeMenuNumber isNil ifTrue:[
+	"/
+	"/ find an item starting with that alpha-key
+	"/
+	key isCharacter ifTrue:[
+	    (key isLetter) ifTrue:[
+		activeMenuNumber isNil ifTrue:[
+		    startIndex := 1.
+		] ifFalse:[
+		    startIndex := activeMenuNumber + 1
+		].
+		index := titles 
+			    findFirst:[:item | 
+					    item isString
+					    and:[(item startsWith:key asUppercase)
+						 or:[item startsWith:key asLowercase]]]
+			    startingAt:startIndex.
+
+		(index == 0 and:[startIndex ~~ 1]) ifTrue:[
+		    index := titles 
+				findFirst:[:item | 
+						item isString
+						and:[(item startsWith:key asUppercase)
+						     or:[item startsWith:key asLowercase]]]
+				startingAt:1.
+		].
+
+		index ~~ 0 ifTrue:[
+		    self pullMenu:index.
+		].
+		^ self
+	    ]
+	].
+"/    ].
+
+    activeMenuNumber isNil ifTrue:[
+	^ super keyPress:key x:x y:y
+    ].
+
+    "
+     Return, space or the (virtual) MenuSelect key trigger
+     a menu entry (for non-submenu entries).
+     Otherwise, if we have a submenu open,
+     pass the key on to it ...
+    "
+    m := menus at:activeMenuNumber.
+    m isNil ifTrue:[
+	(key == #Return 
+	or:[key == #MenuSelect
+	or:[key == Character space]]) ifTrue:[
+	    self performSelectedAction.
+	].
+    ] ifFalse:[
+	m keyPress:key x:0 y:0.
+    ].
+
+    "Modified: 25.2.1997 / 23:38:15 / cg"
+!
+
+showNoFocus:explicit
+    "when stepping focus, hide any active menu"
+
+    explicit ifTrue:[
+	self hideActiveMenu.
+	super showNoFocus:explicit
+    ]
+
+    "Modified: 25.2.1997 / 23:31:38 / cg"
+! !
+
+!PullDownMenu methodsFor:'hiding/showing menus'!
+
+cancelDelayedSubmenuHideOrShowAction
+
+    "Created: / 30-09-2011 / 18:55:43 / cg"
+!
+
+hide 
+    "sent by an aborted menu"
+
+    self hideActiveMenu.
+!
+
+hideActiveMenu
+    "hide currently active menu - release grab if there is any grab"
+
+    ^ self hideActiveMenuRelease:true
+!
+
+hideActiveMenuRelease:aBoolean
+    "hide currently active menu - release grab if aBoolean is true
+     and a grab was set"
+
+    |m|
+
+    activeMenuNumber notNil ifTrue:[
+        (m := menus at:activeMenuNumber) notNil ifTrue:[
+            m beInvisible.
+        ].
+        self unHighlightActiveTitle.
+        activeMenuNumber := nil
+    ].
+    aBoolean ifTrue:[
+        self forceUngrabKeyboard.
+        self forceUngrabPointer. 
+"/        self cursor:Cursor normal
+    ].
+
+    "Modified: 6.3.1996 / 17:14:21 / cg"
+!
+
+pullMenu:aNumber
+    "activate a menu, return it or nil"
+
+    <resource: #style (#'pullDownMenu.autoselectFirst')>
+
+    |subMenu r posY|
+
+    activeMenuNumber notNil ifTrue:[self hideActiveMenuRelease:false].
+    activeMenuNumber := aNumber.
+    subMenu := menus at:aNumber.
+
+    raiseTopWhenActivated ifTrue:[
+        self topView raise.
+    ].
+
+    (activeMenuNumber notNil 
+    and:[
+         subMenu notNil
+         or:[selectors notNil and:[(selectors at:activeMenuNumber) notNil]]]) ifTrue:[
+            self highlightActiveTitle.
+         ].
+
+    subMenu notNil ifTrue:[
+        subMenu origin:((left + (self titleLenUpTo:aNumber)) 
+                       @
+                       (posY := height + subMenu borderWidth)).
+        subMenu hiddenOnRealize:false.
+        subMenu setSelection:nil.
+        subMenu create.
+        subMenu saveUnder:true.
+        subMenu superMenu:self.
+
+        subMenu right > (r := self right) ifTrue:[
+            subMenu origin:((r - subMenu width) @ posY).
+        ].
+        subMenu raise show.
+
+        (styleSheet at:#'pullDownMenu.autoselectFirst') == true ifTrue:[
+            subMenu setSelection:1
+        ]
+    ].
+    ^ subMenu
+
+    "Modified: / 26.10.1997 / 17:04:00 / cg"
+!
+
+regainControl
+    true ifTrue:[
+        self grabPointer.
+        self grabKeyboard.
+"/        self cursor:Cursor upRightArrow
+        self sensor flushMotionEventsFor:nil
+    ]
+
+    "Modified: 6.3.1996 / 17:14:27 / cg"
+! !
+
+!PullDownMenu methodsFor:'initialization & release'!
+
+container:aView
+    "when my container changes, all of my menus must change as well"
+
+    super container:aView.
+
+    menus notNil ifTrue:[
+	menus do:[:aMenu |
+	    aMenu notNil ifTrue:[
+		aMenu container:aView
+	    ]
+	]
+    ]
+
+    "Modified: 9.5.1996 / 00:43:13 / cg"
+    "Created: 9.5.1996 / 00:43:38 / cg"
+!
+
+create
+    super create.
+    self setMenuOrigins
+!
+
+destroy
+    "have to destroy the menus manually here,
+     since they are no real subviews of myself"
+
+    menus notNil ifTrue:[
+        menus do:[:m |
+            m notNil ifTrue:[m destroy]
+        ].
+        "/ cg: no need to remove the submenus (they are already destroyed).
+        "/ leaving the menus allows for reopening the receiver
+        "/ menus := nil
+    ].
+    activeMenuNumber := nil.
+    super destroy.
+!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    super fetchDeviceResources.
+
+    bgColor notNil ifTrue:[bgColor := bgColor onDevice:self graphicsDevice].
+    fgColor notNil ifTrue:[fgColor := fgColor onDevice:self graphicsDevice].
+
+    activeBgColor notNil ifTrue:[activeBgColor := activeBgColor onDevice:self graphicsDevice].
+    activeFgColor notNil ifTrue:[activeFgColor := activeFgColor onDevice:self graphicsDevice].
+
+    "Created: 13.1.1997 / 23:25:14 / cg"
+!
+
+initCursor
+    "set up a hand cursor"
+
+    cursor := Cursor hand
+!
+
+initStyle
+    "initialize style specifics"
+
+    <resource: #style (#name 
+                       #'pullDownMenu.raiseTop' 
+                       #'pullDownMenu.menuLevel')>
+
+    |style l|
+
+    super initStyle.
+
+    showSeparatingLines := DefaultSeparatingLines. "/ false.
+    DefaultViewBackground notNil ifTrue:[
+        viewBackground := DefaultViewBackground onDevice:self graphicsDevice
+    ].
+
+    DefaultForegroundColor notNil ifTrue:[
+        fgColor := DefaultForegroundColor
+    ] ifFalse:[
+        fgColor := Black.
+    ].
+    DefaultBackgroundColor notNil ifTrue:[
+        bgColor := DefaultBackgroundColor
+    ] ifFalse:[
+        bgColor := viewBackground.
+    ].
+    onLevel := DefaultHilightLevel.
+    offLevel := DefaultLevel.
+
+    self is3D ifTrue:[
+        self graphicsDevice hasColors ifTrue:[
+            activeFgColor := Color name:'yellow'
+        ] ifFalse:[
+            activeFgColor := White
+        ].
+        self graphicsDevice hasGrayscales ifTrue:[
+            activeBgColor := bgColor.
+        ] ifFalse:[
+            activeBgColor := fgColor.
+        ].
+        topMargin := 2.
+
+        (l := styleSheet at:#'pullDownMenu.menuLevel') notNil ifTrue:[
+            self level:l
+        ].
+
+        style := styleSheet name.
+        ((style == #iris) or:[style == #motif]) ifTrue:[
+            onLevel := 2.
+            offLevel := 0.
+            activeFgColor := fgColor
+        ]
+    ] ifFalse:[
+        activeFgColor := bgColor.
+        activeBgColor := fgColor.
+        topMargin := 0
+    ].
+
+    edgeStyle := DefaultEdgeStyle.
+    toggleMode := DefaultToggleMode.
+
+    DefaultHilightForegroundColor notNil ifTrue:[
+        activeFgColor := DefaultHilightForegroundColor
+    ].
+    DefaultHilightBackgroundColor notNil ifTrue:[
+        activeBgColor := DefaultHilightBackgroundColor
+    ].
+    DefaultShadowColor notNil ifTrue:[
+        shadowColor := DefaultShadowColor
+    ].
+    DefaultLightColor notNil ifTrue:[
+        lightColor := DefaultLightColor
+    ].
+
+    raiseTopWhenActivated := styleSheet at:#'pullDownMenu.raiseTop' default:true.
+
+    "Modified: / 15-09-1998 / 22:58:42 / cg"
+    "Modified (comment): / 05-10-2011 / 15:50:54 / az"
+!
+
+initialize
+    super initialize.
+
+    self origin:(0.0 @ 0.0)
+         extent:(1.0 @ self preferredHeight)
+!
+
+recreate
+    "sent after a snapin or a migration;
+     if the image was saved with an active menu, hide it"
+
+    |m|
+
+    activeMenuNumber notNil ifTrue:[
+        (m := menus at:activeMenuNumber) notNil ifTrue:[
+            m unmap.
+        ].
+        activeMenuNumber := nil.
+    ].
+    super recreate.
+    self setMenuOrigins
+
+    "Modified: 3.5.1996 / 23:48:55 / stefan"
+! !
+
+!PullDownMenu methodsFor:'private'!
+
+indexOf:stringOrNumber
+    "return the index of the menu with title; return 0 if not found.
+     stringOrNumber may be a number, a selector from the selectorArray
+     or a string from the title array.
+     If stringOrNumber is not a valid item, return 0."
+
+    |idx|
+
+    stringOrNumber isNumber ifTrue:[
+	^ stringOrNumber
+    ].
+    selectors notNil ifTrue:[
+	idx := selectors indexOf:stringOrNumber.
+	idx ~~ 0 ifTrue:[^ idx].
+    ].
+    stringOrNumber isString ifTrue:[
+	^ titles indexOf:stringOrNumber
+    ].
+    (stringOrNumber respondsTo:#string) ifTrue:[
+	^ titles indexOf:stringOrNumber asString
+    ].
+    ^ 0
+
+    "Modified: 27.4.1996 / 15:25:28 / cg"
+!
+
+performEntry:itemIndex
+    |block sel|
+
+    actions notNil ifTrue:[
+	block := actions at:itemIndex.
+	block notNil ifTrue:[
+	    block value.
+	    ^ self
+	].
+    ].
+    selectors notNil ifTrue:[
+	sel := selectors at:itemIndex.
+	sel notNil ifTrue:[
+	    model notNil ifTrue:[
+		model perform:sel
+	    ] ifFalse:[
+		receiver perform:sel
+	    ]    
+	].
+    ].
+
+    "Modified: 17.4.1996 / 20:55:11 / cg"
+!
+
+performSelectedAction
+    |block sel|
+
+    actions notNil ifTrue:[
+	block := actions at:activeMenuNumber.
+	block notNil ifTrue:[
+	    block value.
+	    ^ self
+	].
+    ].
+    selectors notNil ifTrue:[
+	sel := selectors at:activeMenuNumber.
+	sel notNil ifTrue:[
+	    model notNil ifTrue:[
+		model perform:sel
+	    ] ifFalse:[
+		receiver perform:sel
+	    ]    
+	].
+    ].
+
+    "Modified: 17.4.1996 / 20:55:11 / cg"
+    "Created: 17.4.1996 / 20:55:53 / cg"
+!
+
+setMenuOrigins
+    "adjust origins of menus when font changes"
+
+    (gc font graphicsDevice == self graphicsDevice) ifTrue:[
+        menus notNil ifTrue:[
+            menus keysAndValuesDo:[:index :aMenu |
+                aMenu notNil ifTrue:[
+                    aMenu origin:((left + (self titleLenUpTo:index)) 
+                                  @
+                                  (height + aMenu borderWidth))
+                ].
+            ]
+        ]
+    ]
+
+    "Modified: 5.7.1996 / 17:55:08 / cg"
+!
+
+someMenuItemLabeled:aLabel
+    "find a menu item.
+     Currently, in ST/X, instances of MenuItem are only created as dummy"
+
+    |idx|
+
+    idx := self indexOf:aLabel.
+    idx ~~ 0 ifTrue:[
+	^ MenuItem new menu:self index:idx
+    ].
+    menus notNil ifTrue:[
+	menus do:[:aMenu |
+	    |item|
+
+	    aMenu notNil ifTrue:[
+		(item := aMenu someMenuItemLabeled:aLabel) notNil ifTrue:[
+		    ^ item
+		]
+	    ]
+	]
+    ].
+    ^ nil
+!
+
+titleIndexForX:x
+    "given a click x-position, return index in title or nil"
+
+    |xstart "{ Class: SmallInteger }"
+     xend   "{ Class: SmallInteger }" 
+     wSpace wSep font|
+
+    font := gc font.
+    wSpace := (font widthOf:' ') * 2. 
+    showSeparatingLines ifTrue:[
+        self is3D ifTrue:[
+            wSep := 2
+        ] ifFalse:[
+            wSep := 1
+        ]
+    ] ifFalse:[
+        wSep := 0
+    ].
+    xstart := 0.
+    1 to:(titles size) do:[:index |
+        |entry thisLength|
+
+        entry := titles at:index.
+        entry isString ifTrue:[
+            thisLength := font widthOf:entry.
+        ] ifFalse:[
+            thisLength := entry width
+        ].
+        xend := xstart + thisLength + wSpace + wSep.
+        (x between:xstart and:xend) ifTrue:[^ index].
+        xstart := xend
+    ].
+    ^ nil
+!
+
+titleLenUpTo:index
+    "answer len (in pixels) of all title-strings up-to 
+     (but excluding) title-index. Used to compute x-position when drawing
+     individual entries."
+
+    |len "{ Class: SmallInteger }" 
+     wSpace wSep font|
+
+    (index <= 1) ifTrue:[^ 0].
+    font := gc font.
+    wSpace := (font widthOf:' ').
+    showSeparatingLines ifTrue:[
+        self is3D ifTrue:[
+            wSep := 2
+        ] ifFalse:[
+            wSep := 1
+        ]
+    ] ifFalse:[
+        wSep := 0
+    ].
+
+    len := 0.
+    titles from:1 to:(index - 1) do:[:entry |
+        |thisLength|
+
+        entry isString ifTrue:[
+            thisLength := (font widthOf:entry).
+        ] ifFalse:[
+            thisLength := entry width
+        ].
+        len := len + thisLength + wSpace + wSep + wSpace.
+    ].
+    ^ len
+! !
+
+!PullDownMenu methodsFor:'queries'!
+
+preferredExtent
+    "return my preferredExtent from the title-item widths & font height"
+
+    |w hMax font|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    font := gc font.
+
+    w := self titleLenUpTo:(titles size + 1).
+    hMax := font height + (font descent * 2).
+    titles notNil ifTrue:[
+        titles do:[:aStringOrImage |
+            aStringOrImage isString ifFalse:[
+                hMax := hMax max:(aStringOrImage heightOn:self)
+            ]
+        ]
+    ].
+        
+    ^ w @ (hMax + (margin*2) + ((onLevel abs max:offLevel abs)*2) "+ topMargin").
+
+    "Modified: / 31.10.1997 / 20:49:23 / cg"
+!
+
+specClass
+    "redefined, since the name of my specClass is nonStandard (i.e. not PullDownMenuSpec)"
+
+    ^ MenuPanelSpec
+
+    "Modified: / 31.10.1997 / 19:48:23 / cg"
+! !
+
+!PullDownMenu methodsFor:'submenu notifications'!
+
+hideSubmenu
+    "sent by an escaped menu - ignored here"
+
+    ^ self
+
+    "Modified: / 29-11-2010 / 19:51:17 / cg"
+!
+
+showActive
+    "sent by a menu to tell me that it starts to perform
+     its menu action."
+
+    windowGroup notNil ifTrue:[windowGroup showCursor:Cursor wait]
+!
+
+showPassive
+    "sent by a menu to tell me that it finished its menu-action.
+     Here, we hide the currently active menu."
+
+    self hideActiveMenu.
+    windowGroup notNil ifTrue:[windowGroup restoreCursors]
+!
+
+submenuTriggered 
+    "sent by a sub-submenu to tell me that it finished its menu-action."
+
+    self showPassive
+! !
+
+!PullDownMenu class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/PullDownMenu.st,v 1.110 2014-03-19 13:33:28 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/PullDownMenu.st,v 1.110 2014-03-19 13:33:28 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RadioButton.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1116 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Toggle subclass:#RadioButton
+	instanceVariableNames:'buttonStyle buttonOnLevel buttonOffLevel offImage onImage
+		buttonOffImage buttonOnImage disabledOnImage disabledOffImage
+		enteredOnImage enteredOffImage'
+	classVariableNames:'DefaultButtonStyle DefaultBorderWidth DefaultActiveLevel
+		DefaultPassiveLevel DefaultForegroundColor DefaultBackgroundColor
+		DefaultActiveForegroundColor DefaultActiveBackgroundColor
+		MotifCheckBotForm MotifCheckTopForm MotifCheckInnerForm
+		Round3DCheckBotForm Round3DCheckTopForm Round3DCheckInnerForm
+		RoundHalfLightForm RoundOffForm RoundOnForm PassiveForm
+		ActiveForm EnteredPassiveForm EnteredActiveForm
+		DisabledActiveForm DisabledPassiveForm'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!RadioButton class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    like a Toggle, but do not turn off when pressed again, instead only
+    turn off when another RadioButton is pressed (see RadioButtonGroup).
+
+    written fall 91 by claus
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples 
+"
+  See more examples in RadioButtonGroup class>>examples
+
+  example1: one on behavior (using RadioButtons)
+                                                                        [exBegin]
+    |top panel b group|
+
+    top := StandardSystemView new.
+    top extent:200@200.
+
+    panel := HorizontalPanelView
+                origin:0.0@0.0
+                corner:1.0@1.0
+                    in:top.
+
+    group := RadioButtonGroup new.
+
+    b := RadioButton label:'am' in:panel.
+    group add:b.
+
+    b := RadioButton label:'fm' in:panel.
+    group add:b.
+
+    b := RadioButton label:'off' in:panel.
+    group add:b.
+    b enabled:false.
+
+    group value:1.
+    top open
+                                                                        [exEnd]
+
+
+  example2: zero or one on behavior (using Toggles)
+                                                                        [exBegin]
+    |top panel b group|
+
+    top := StandardSystemView new.
+    top extent:200@200.
+
+    panel := HorizontalPanelView
+                origin:0.0@0.0
+                corner:1.0@1.0
+                    in:top.
+
+    group := RadioButtonGroup new.
+
+    b := Toggle label:'am' in:panel.
+    group add:b.
+
+    b := Toggle label:'fm' in:panel.
+    group add:b.
+
+    b := Toggle label:'off' in:panel.
+    group add:b.
+
+    group value:1.
+    top open
+                                                                        [exEnd]
+
+
+  a selectionInListView and a group displaying the same value:
+                                                                        [exBegin]
+    |top top2 panel b sv group selectionInList|
+
+    top := StandardSystemView extent:200@200.
+
+    panel := HorizontalPanelView
+                origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+    group := RadioButtonGroup new.
+    selectionInList := SelectionInList new.
+    selectionInList list:#('am' 'fm' 'off').
+    selectionInList selectionIndexHolder:group.
+
+    b := Toggle label:'am' in:panel.
+    group add:b.
+
+    b := Toggle label:'fm' in:panel.
+    group add:b.
+
+    b := Toggle label:'off' in:panel.
+    group add:b.
+
+    group value:1.
+    top open.
+
+    top2 := StandardSystemView extent:200@200.
+    sv := SelectionInListView in:top2.
+    sv model:selectionInList.
+    sv origin:0.0@0.0 corner:1.0@1.0.
+    top2 open.
+
+                                                                        [exEnd]
+"
+! !
+
+!RadioButton class methodsFor:'defaults'!
+
+activeForm
+    ActiveForm isNil ifTrue:[
+        self updateStyleCache.
+    ].
+    ^ ActiveForm
+
+    "
+     ActiveForm := nil. 
+     self updateStyleCache
+    "
+!
+
+disabledActiveForm
+    DisabledActiveForm isNil ifTrue:[
+        self updateStyleCache.
+    ].
+    ^ DisabledActiveForm
+
+    "
+     DisabledActiveForm := nil. 
+     self updateStyleCache
+    "
+!
+
+disabledPassiveForm
+    DisabledPassiveForm isNil ifTrue:[
+        self updateStyleCache.
+    ].
+    ^ DisabledPassiveForm
+
+    "
+     DisabledPassiveForm := nil. 
+     self updateStyleCache
+    "
+!
+
+enteredActiveForm
+    EnteredActiveForm isNil ifTrue:[
+        self updateStyleCache.
+    ].
+    ^ EnteredActiveForm
+
+    "
+     EnteredActiveForm := nil. 
+     self updateStyleCache
+    "
+!
+
+enteredPassiveForm
+    EnteredPassiveForm isNil ifTrue:[
+        self updateStyleCache.
+    ].
+    ^ EnteredPassiveForm
+
+    "
+     EnteredPassiveForm := nil. 
+     self updateStyleCache
+    "
+!
+
+motifCheckBotForm
+    MotifCheckBotForm isNil ifTrue:[
+        MotifCheckBotForm := Form 
+                                width:15 
+                                height:15 
+                                fromArray:#[2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00001110
+                                            2r01110000 2r00011100
+                                            2r00111000 2r00111000
+                                            2r00011100 2r01110000
+                                            2r00001110 2r11100000
+                                            2r00000111 2r11000000
+                                            2r00000011 2r10000000
+                                            2r00000001 2r00000000
+                                           ].
+        MotifCheckBotForm := MotifCheckBotForm onDevice:Display.
+    ].
+    ^ MotifCheckBotForm
+
+    "Created: / 3.11.1997 / 12:06:45 / cg"
+    "Modified: / 30.7.1998 / 21:27:53 / cg"
+!
+
+motifCheckInnerForm
+    MotifCheckInnerForm isNil ifTrue:[
+        MotifCheckInnerForm := Form 
+                                width:15 
+                                height:15 
+                                fromArray:#[2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000001 2r00000000
+                                            2r00000011 2r10000000
+                                            2r00000111 2r11000000
+                                            2r00001111 2r11100000
+                                            2r00011111 2r11110000
+                                            2r00001111 2r11100000
+                                            2r00000111 2r11000000
+                                            2r00000011 2r10000000
+                                            2r00000001 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                           ].
+        MotifCheckInnerForm := MotifCheckInnerForm onDevice:Display
+    ].
+    ^ MotifCheckInnerForm
+
+    "Created: / 3.11.1997 / 12:06:45 / cg"
+    "Modified: / 30.7.1998 / 21:28:45 / cg"
+!
+
+motifCheckTopForm
+    MotifCheckTopForm isNil ifTrue:[
+        MotifCheckTopForm := Form 
+                                width:15 
+                                height:15 
+                                fromArray:#[2r00000001 2r00000000
+                                            2r00000011 2r10000000
+                                            2r00000111 2r11000000
+                                            2r00001110 2r11100000
+                                            2r00011100 2r01110000
+                                            2r00111000 2r00111000
+                                            2r01110000 2r00011100
+                                            2r11100000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                           ].
+        MotifCheckTopForm := MotifCheckTopForm onDevice:Display
+    ].
+    ^ MotifCheckTopForm
+
+    "Created: / 3.11.1997 / 12:06:45 / cg"
+    "Modified: / 30.7.1998 / 21:28:45 / cg"
+!
+
+passiveForm
+    PassiveForm isNil ifTrue:[
+        self updateStyleCache.
+    ].
+    ^ PassiveForm
+
+    "
+     PassiveForm := nil. 
+     self updateStyleCache
+    "
+!
+
+round3DCheckBotForm
+    Round3DCheckBotForm isNil ifTrue:[
+        Round3DCheckBotForm := Form 
+                                width:15 
+                                height:15 
+                                fromArray:#[2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000010
+                                            2r00000000 2r00000010
+                                            2r00000000 2r00000110
+                                            2r00000000 2r00000110
+                                            2r00000000 2r00000110
+                                            2r00000000 2r00001110
+                                            2r01110000 2r00011100
+                                            2r01111000 2r00111100
+                                            2r00111111 2r11111000
+                                            2r00001111 2r11100000
+                                           ].
+        Round3DCheckBotForm := Round3DCheckBotForm onDevice:Display.
+    ].
+    ^ Round3DCheckBotForm
+
+    "Created: / 3.11.1997 / 14:29:37 / cg"
+    "Modified: / 30.7.1998 / 21:29:57 / cg"
+!
+
+round3DCheckInnerForm
+    Round3DCheckInnerForm isNil ifTrue:[
+        Round3DCheckInnerForm := Form 
+                                width:15 
+                                height:15 
+                                fromArray:#[2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000111 2r11000000
+                                            2r00001111 2r11100000
+                                            2r00011111 2r11110000
+                                            2r00111111 2r11111000
+                                            2r00111111 2r11111000
+                                            2r00111111 2r11111000
+                                            2r00111111 2r11111000
+                                            2r00111111 2r11111000
+                                            2r00011111 2r11110000
+                                            2r00001111 2r11100000
+                                            2r00000111 2r11000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                           ].
+
+        Round3DCheckInnerForm := Round3DCheckInnerForm onDevice:Display.
+    ].
+    ^ Round3DCheckInnerForm
+
+    "Created: / 3.11.1997 / 14:29:45 / cg"
+    "Modified: / 30.7.1998 / 21:30:47 / cg"
+!
+
+round3DCheckTopForm
+    Round3DCheckTopForm isNil ifTrue:[
+        Round3DCheckTopForm := Form 
+                                width:15 
+                                height:15 
+                                fromArray:#[2r00000011 2r10000000
+                                            2r00011110 2r11110000
+                                            2r00111000 2r00011000
+                                            2r01110000 2r00001100
+                                            2r01100000 2r00001100
+                                            2r11000000 2r00000100
+                                            2r11000000 2r00000100
+                                            2r11000000 2r00000000
+                                            2r11000000 2r00000000
+                                            2r11000000 2r00000000
+                                            2r01100000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                            2r00000000 2r00000000
+                                           ].
+"/        fromArray:#[2r00000111 2r11000000
+"/                    2r00011110 2r11110000
+"/                    2r00111000 2r00111000
+"/                    2r01110000 2r00011100
+"/                    2r01100000 2r00001100
+"/                    2r11000000 2r00000100
+"/                    2r11000000 2r00000000
+"/                    2r11000000 2r00000000
+"/                    2r11000000 2r00000000
+"/                    2r11000000 2r00000000
+"/                    2r01100000 2r00000000
+"/                    2r00000000 2r00000000
+"/                    2r00000000 2r00000000
+"/                    2r00000000 2r00000000
+"/                    2r00000000 2r00000000
+"/                   ]
+
+        Round3DCheckTopForm := Round3DCheckTopForm onDevice:Display.
+    ].
+    ^ Round3DCheckTopForm
+
+    "Created: / 3.11.1997 / 14:29:45 / cg"
+    "Modified: / 30.7.1998 / 21:30:47 / cg"
+!
+
+roundHalfLightForm
+    RoundHalfLightForm isNil ifTrue:[
+        RoundHalfLightForm := Form
+                                width:15 
+                                height:15 
+                                fromArray:#[2r00001100 2r01100000
+                                            2r00110000 2r00010000
+                                            2r01100000 2r00001000
+                                            2r01000000 2r00000100
+                                            2r11000000 2r00000100
+                                            2r10000000 2r00000000
+                                            2r10000000 2r00000000
+                                            2r10000000 2r00000100
+                                            2r10000000 2r00000100
+                                            2r10000000 2r00000100
+                                            2r11000000 2r00001000
+                                            2r00110000 2r00010000
+                                            2r00011000 2r00110000
+                                            2r00000111 2r11000000
+                                            2r00000000 2r00000000
+                                           ].
+
+"/        fromArray:#[2r00000000 2r00000000
+"/                    2r00000011 2r10000000
+"/                    2r00001000 2r00100000
+"/                    2r00010000 2r00010000
+"/                    2r00100000 2r00001000
+"/                    2r00000000 2r00000100
+"/                    2r01000000 2r00000100
+"/                    2r01000000 2r00000100
+"/                    2r01000000 2r00000100
+"/                    2r00000000 2r00000100
+"/                    2r00100000 2r00001000
+"/                    2r00010000 2r00010000
+"/                    2r00001000 2r00100000
+"/                    2r00000011 2r10000000
+"/                    2r00000000 2r00000000
+"/                   ]
+
+        RoundHalfLightForm := RoundHalfLightForm onDevice:Display.
+    ].
+    ^ RoundHalfLightForm
+
+    "Created: / 3.11.1997 / 18:26:40 / cg"
+    "Modified: / 30.7.1998 / 21:31:55 / cg"
+!
+
+roundOffForm
+    RoundOffForm isNil ifTrue:[
+        "DSVColumnView>>updateStyleCache calls us before our style
+         cache has been initialized"
+        self updateStyleCache.
+    ].
+    ^ RoundOffForm
+!
+
+roundOffForm_old
+    ^ Form 
+        width:16 
+        height:16 
+        fromArray:#[
+            2r00000011 2r10000000
+            2r00001100 2r01100000
+            2r00010000 2r00010000
+            2r00100000 2r00001000
+            2r01000000 2r00000100
+            2r01000000 2r00000100
+            2r10000000 2r00000010
+            2r10000000 2r00000010
+            2r10000000 2r00000010
+            2r01000000 2r00000100
+            2r01000000 2r00000100
+            2r00100000 2r00001000
+            2r00010000 2r00010000
+            2r00001100 2r01100000
+            2r00000011 2r10000000
+            2r00000000 2r00000000
+        ].
+!
+
+roundOnForm
+    RoundOnForm isNil ifTrue:[
+        "DSVColumnView>>updateStyleCache calls us before our style
+         cache has been initialized"
+        self updateStyleCache.
+    ].
+    ^ RoundOnForm
+
+    "
+     RoundOnForm := nil. 
+     self updateStyleCache
+    "
+!
+
+roundOnForm_old
+    ^ Form 
+        width:16 
+        height:16 
+        fromArray:#[
+            2r00000000 2r00000000
+            2r00000000 2r00000000
+            2r00000000 2r00000000
+            2r00000000 2r00000000
+            2r00000011 2r10000000
+            2r00000111 2r11000000
+            2r00001111 2r11100000
+            2r00001111 2r11100000
+            2r00001111 2r11100000
+            2r00000111 2r11000000
+            2r00000011 2r10000000
+            2r00000000 2r00000000
+            2r00000000 2r00000000
+            2r00000000 2r00000000
+            2r00000000 2r00000000
+            2r00000000 2r00000000
+       ].
+!
+
+updateStyleCache
+    <resource: #style (#'radioButton.style' 
+                       #'radioButton.activeLevel'
+                       #'radioButton.passiveLevel'
+                       #'radioButton.activeImageFile'
+                       #'radioButton.activeImage'
+                       #'radioButton.enteredActiveImageFile'
+                       #'radioButton.enteredActiveImage'
+                       #'radioButton.passiveImageFile'
+                       #'radioButton.passiveImage'
+                       #'radioButton.enteredPassiveImageFile'
+                       #'radioButton.enteredPassiveImage'
+                       #'radioButton.foregroundColor'
+                       #'radioButton.backgroundColor'
+                       #'radioButton.activeForegroundColor'
+                       #'radioButton.activeBackgroundColor'
+                       #'radioButton.borderWidth'
+                      )>
+
+    |l fetchImage|
+
+    DefaultBorderWidth := StyleSheet at:#'radioButton.borderWidth'.
+
+    DefaultFont := StyleSheet fontAt:'label.font'.                   
+    DefaultButtonStyle := StyleSheet at:#'radioButton.style'.
+    l := -1.
+    DefaultButtonStyle == #round2D ifTrue:[l := 0].
+    DefaultActiveLevel := StyleSheet at:#'radioButton.activeLevel' default:l.
+    DefaultButtonStyle == #motif ifTrue:[l := 1].
+    DefaultPassiveLevel := StyleSheet at:#'radioButton.passiveLevel' default:l.
+
+    DefaultForegroundColor := StyleSheet at:#'radioButton.foregroundColor'.
+    DefaultBackgroundColor := StyleSheet at:#'radioButton.backgroundColor'.
+
+    DefaultActiveForegroundColor := StyleSheet at:#'radioButton.activeForegroundColor'.
+    DefaultActiveBackgroundColor := StyleSheet at:#'radioButton.activeBackgroundColor'.
+
+    RoundOnForm := RoundOffForm := nil.
+    ActiveForm := EnteredActiveForm := nil.
+    PassiveForm := EnteredPassiveForm := nil.
+
+    fetchImage := 
+        [:fileNameKey :imageKey :defaultW95 :defaultXP :defaultVista |
+            |f|
+
+            f := StyleSheet at:imageKey.
+            f notNil 
+                ifTrue:[ 
+                    f := f value ]
+                ifFalse:[
+                    f := StyleSheet at:fileNameKey.
+                    f notNil 
+                        ifTrue:[
+                            f := Smalltalk imageFromFileNamed:f forClass:self.]
+                        ifFalse:[
+                            f := (StyleSheet isWindowsVistaStyle)
+                                ifTrue:defaultVista
+                                ifFalse:[
+                                    StyleSheet isWindowsXPStyle
+                                        ifTrue:defaultXP
+                                        ifFalse:defaultW95].
+                        ]
+                ].
+            f notNil ifTrue:[
+                f := f onDevice:Display
+            ].
+            f
+        ].
+
+    ActiveForm := RoundOnForm := fetchImage 
+            value:#'radioButton.activeImageFile'
+            value:#'radioButton.activeImage'
+            value:[ self radioOnIcon_w95 ]
+            value:[ self radioOnIcon_xp ]
+            value:[ self radioOnIcon_vista ].
+
+    PassiveForm := RoundOffForm := fetchImage 
+            value:#'radioButton.passiveImageFile'
+            value:#'radioButton.passiveImage'
+            value:[ self radioOffIcon_w95 ]
+            value:[ self radioOffIcon_xp ]
+            value:[ self radioOffIcon_vista ].
+
+    EnteredActiveForm := fetchImage 
+            value:#'radioButton.enteredActiveImageFile'
+            value:#'radioButton.enteredActiveImage'
+            value:[ self radioOnEnteredIcon_w95 ]
+            value:[ self radioOnEnteredIcon_xp ]
+            value:[ self radioOnEnteredIcon_vista ].
+
+    EnteredPassiveForm := fetchImage 
+            value:#'radioButton.enteredPassiveImageFile'
+            value:#'radioButton.enteredPassiveImage'
+            value:[ self radioOffEnteredIcon_w95 ]
+            value:[ self radioOffEnteredIcon_xp ]
+            value:[ self radioOffEnteredIcon_vista ].
+
+    DisabledActiveForm := fetchImage 
+            value:#'radioButton.disabledActiveImageFile'
+            value:#'radioButton.disabledActiveImage'
+            value:[ self radioOnDisabledIcon_w95 ]
+            value:[ self radioOnDisabledIcon_xp ]
+            value:[ self radioOnDisabledIcon_vista ].
+
+    DisabledPassiveForm := fetchImage 
+            value:#'radioButton.disabledPassiveImageFile'
+            value:#'radioButton.disabledPassiveImage'
+            value:[ self radioOffDisabledIcon_w95 ]
+            value:[ self radioOffDisabledIcon_xp ]
+            value:[ self radioOffDisabledIcon_vista ].
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: / 28.4.1999 / 13:59:00 / cg"
+! !
+
+!RadioButton class methodsFor:'image specs'!
+
+radioOffDisabledIcon_vista
+    ^ VistaToolbarIconLibrary radioOffDisabled12x12Icon
+!
+
+radioOffDisabledIcon_w95
+    ^ self radioOffIcon_w95
+!
+
+radioOffDisabledIcon_xp
+    ^ self radioOffIcon_xp
+!
+
+radioOffEnteredIcon_vista
+    ^ VistaToolbarIconLibrary radioOffEntered12x12Icon
+!
+
+radioOffEnteredIcon_w95
+    ^ self radioOffIcon_w95
+!
+
+radioOffEnteredIcon_xp
+    ^ self radioOffIcon_xp
+!
+
+radioOffIcon_vista
+    ^ VistaToolbarIconLibrary radioOff12x12Icon
+!
+
+radioOffIcon_w95
+    "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 radioOffIcon_w95 inspect
+     ImageEditor openOnClass:self andSelector:#radioOffIcon_w95
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'RadioButton class radioOffIcon_w95'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A@PDA@DA@PDDA@PDA@PA@P@@@@@A@PPDA@D@@@LC@0L@@@LDA@D@@0LC@0LC@ LD@P@C@0LC@0LC@0HC@P@C@0LC@0LC@0HC@P@C@0LC@0LC@0HC@P@C@0LC
+@0LC@0HCA@D@@0LC@0LC@ LDA@DB@ LC@0LB@ LDA@PC@0HB@ HC@0PDA@PDA@LC@0LDA@PD') ; colorMapFromArray:#[0 0 0 128 128 128 223 223 223 255 255 255 0 0 0]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0@?0G? _>C?<O?0??C?<G? _>@?0@<@') ; yourself); yourself]
+!
+
+radioOffIcon_xp
+    "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 radioOffIcon_xp inspect
+     ImageEditor openOnClass:self andSelector:#radioOffIcon_xp
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'RadioButton class radioOffIcon_xp'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+KB0,A T''G"\EA"0,KB0,B1,OH14%DQ,KKB0,B1 P@BPTE1$&J@,,D1,P@BPTE1$\CB$[D0TO@BPTE1$\C@4+E T''H2PTE1$\C@4+@Q<JG!!4TE1$\C@4+@PL*
+G (%E1$\C@4+@PLHHB\UDQ$\C@4+@PLHA0$ED1,&C@4+@PLHA0P[H"0KJB$+@PLHA0PNB20,KA([E!!<*H@$[B20,KB0,HQT''G (R@"0,K@@a') ; colorMapFromArray:#[224 224 219 247 247 246 221 226 229 249 249 248 188 204 217 164 183 198 222 228 229 253 253 252 251 251 250 112 145 175 90 128 159 180 195 206 241 241 239 243 243 241 96 133 166 100 134 161 166 181 191 104 137 166 164 182 198 222 227 229 229 229 226 164 183 197 110 143 172 232 232 229 85 122 154 236 236 233 179 195 206 33 85 130 239 239 236 218 220 218 36 87 131 185 200 213 188 203 216 222 226 229 222 227 228 167 183 193 226 226 222 171 186 198 178 193 205 90 128 160 91 129 161 181 196 208 242 244 245 245 245 244 0 0 0]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G<@?8G?0??#?>O?8??#?>O?8??!!?<C? G<@b') ; yourself); yourself]
+!
+
+radioOnDisabledIcon_vista
+    ^ VistaToolbarIconLibrary radioOnDisabled12x12Icon
+!
+
+radioOnDisabledIcon_w95
+    ^ self radioOnIcon_w95
+!
+
+radioOnDisabledIcon_xp
+    ^ self radioOnIcon_xp
+!
+
+radioOnEnteredIcon_vista
+    ^ VistaToolbarIconLibrary radioOnEntered12x12Icon
+!
+
+radioOnEnteredIcon_w95
+    ^ self radioOnIcon_w95
+!
+
+radioOnEnteredIcon_xp
+    ^ self radioOnIcon_xp
+!
+
+radioOnIcon_vista
+    ^ VistaToolbarIconLibrary radioOn12x12Icon
+!
+
+radioOnIcon_w95
+    "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 radioOnIcon_w95 inspect
+     ImageEditor openOnClass:self andSelector:#radioOnIcon_w95
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'RadioButton class radioOnIcon_w95'
+        ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A@PDA@DA@PDDA@PDA@PA@P@@@@@A@PPDA@D@@@LC@0L@@@LDA@D@@0LC@0LC@ LD@P@C@0L@@@LC@0HC@P@C@0@@@@@C@0HC@P@C@0@@@@@C@0HC@P@C@0L@
+@@LC@0HCA@D@@0LC@0LC@ LDA@DB@ LC@0LB@ LDA@PC@0HB@ HC@0PDA@PDA@LC@0LDA@PD') ; colorMapFromArray:#[0 0 0 128 128 128 223 223 223 255 255 255 0 0 0]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0@?0G? _>C?<O?0??C?<G? _>@?0@<@') ; yourself); yourself]
+!
+
+radioOnIcon_xp
+    "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 radioOnIcon_xp inspect
+     ImageEditor openOnClass:self andSelector:#radioOnIcon_xp
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'RadioButton class radioOnIcon_xp'
+        ifAbsentPut:[(Depth8Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+Q4]GC18MK04^C4]GQ4]GL0T<JD@1PPT3Q4]GL2ABA2(9BQ@AO3MGE UBOQ<7DBMCIA(EE!!8<A1<HL#86K@IDJQ8MJB(7L XQC (&I!!,UK4@9DC8WJ3UE@0LR
+K1T1BRL6Q"8TLC(-M@4"PQACK@(DI1L\C@@^E TAI@H&@3(\B2TEFT\3O1)DI L-CBT;L4]GQ3 EJQ,RM@@EL4]GQ4]GFBHMK1T!!GT]GQ0@a') ; colorMapFromArray:#[112 145 175 178 193 205 245 245 243 249 249 248 36 150 36 33 85 130 85 213 81 224 224 219 226 232 222 232 232 229 154 204 152 253 253 253 253 253 252 90 128 160 41 168 38 222 228 229 236 236 233 67 195 63 242 244 245 238 243 237 19 146 16 90 128 159 222 227 229 66 195 63 222 226 229 222 227 228 181 196 208 185 200 213 252 252 251 221 226 229 164 183 198 231 231 227 85 122 154 164 182 198 164 183 197 239 239 236 243 243 241 188 204 217 247 247 246 152 201 151 167 183 193 110 143 172 226 226 222 56 185 53 232 238 230 251 251 250 34 162 32 36 87 131 152 200 151 171 186 198 169 220 166 180 195 206 188 203 216 33 161 33 160 210 158 234 234 230 179 195 206 229 229 226 250 250 249 96 133 166 100 134 161 229 229 225 77 191 74 91 129 161 218 220 218 104 137 166 166 181 191 241 241 239 245 245 244 38 150 35 42 168 39 0 0 0]; mask:((ImageMask new) width: 13; height: 13; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G<@?8G?0??#?>O?8??#?>O?8??!!?<C? G<@b') ; yourself); yourself]
+! !
+
+!RadioButton methodsFor:'accessing'!
+
+allViewBackground:something if:condition
+    (condition value:self) ifTrue:[
+        self backgroundColor:something.
+
+        (buttonStyle == #motif 
+        or:[buttonStyle == #round3D
+        or:[buttonStyle == #image
+        or:[buttonStyle == #round2D]]]) ifTrue:[
+            enteredBgColor := something.
+            activeBgColor := something.
+        ]
+    ]
+!
+
+forceRadioButtonStyle
+    "force the radioButton to be displayed as round/motif radio button -
+     even if the styleSheet defaults differently.
+     (as in IRIS style)"
+
+    buttonStyle isNil ifTrue:[
+        styleSheet is3D ifTrue:[
+            buttonStyle := #round3D.
+            activeBgColor := bgColor. 
+            activeFgColor := fgColor.
+        ] ifFalse:[
+            buttonStyle := #round2D.
+                activeFgColor := fgColor.
+                activeBgColor := bgColor.
+        ].
+        buttonOnLevel := DefaultActiveLevel.
+        buttonOffLevel := DefaultPassiveLevel.
+        onLevel := offLevel := 0.
+        self level:0
+    ]
+
+    "Modified: / 18.6.1998 / 21:19:01 / cg"
+    "Created: / 18.6.1998 / 21:23:58 / cg"
+! !
+
+!RadioButton methodsFor:'drawing'!
+
+drawToggleImage
+    "drawing of the radio image is done here."
+
+    |x y img clrTop clrBot imgTop imgBot imgInside imgH imgOn threeD lvl
+     isActive isEntered isEnabled imgTopHeight graphicsDevice|
+
+    buttonStyle isNil ifTrue:[
+        ^ super drawToggleImage
+    ].
+
+    isActive := controller pressed.
+    isEnabled := controller enabled.
+    isEnabled ifFalse:[
+        img := isActive ifTrue: [disabledOnImage] ifFalse: [disabledOffImage].
+    ] ifTrue:[
+        isEntered := controller entered.
+        isEntered ifTrue:[        
+            img := isActive ifTrue: [enteredOnImage] ifFalse: [enteredOffImage].
+        ] ifFalse:[
+            img := isActive ifTrue:[onImage] ifFalse: [offImage].
+        ]
+    ].
+
+    img notNil ifTrue:[
+        x := hSpace + margin.
+        y := (height - img height) // 2.
+        self displayForm:img x:x y:y.
+        ^ self.
+    ].
+
+    threeD := true.
+    buttonStyle == #motif ifTrue:[
+        "/ square rotated by 45 degrees ...
+        imgTop := self class motifCheckTopForm.
+        imgBot := self class motifCheckBotForm.
+        imgInside := self class motifCheckInnerForm.
+    ] ifFalse:[
+        buttonStyle == #round3D ifTrue:[
+            "/ round 3D button ...
+            imgTop := self class round3DCheckTopForm.
+            imgBot := self class round3DCheckBotForm.
+            imgInside := self class round3DCheckInnerForm.
+            imgH := self class roundHalfLightForm.
+            buttonOnLevel == buttonOffLevel ifTrue:[
+                isActive ifTrue:[
+                    imgOn := self class roundOnForm.
+                ]
+            ].
+        ] ifFalse:[
+            buttonStyle == #image ifTrue:[
+                "/ bitmap images ...
+                imgTop := buttonOffImage.
+                isActive ifTrue:[
+                    imgOn := buttonOnImage.
+                ].
+            ] ifFalse:[    
+                "/ round 2D ...
+                imgTop := self class roundOffForm.
+                isActive ifTrue:[
+                    imgOn := self class roundOnForm.
+                ].
+            ].
+            threeD := false.
+        ]
+    ].
+
+    imgTopHeight := 0.
+    graphicsDevice := self graphicsDevice.
+
+    imgTop notNil ifTrue:[imgTop := imgTop onDevice:graphicsDevice. imgTopHeight := imgTop height].
+    imgBot notNil ifTrue:[imgBot := imgBot onDevice:graphicsDevice].
+    imgInside notNil ifTrue:[imgInside := imgInside onDevice:graphicsDevice].
+    imgH notNil ifTrue:[imgH := imgH onDevice:graphicsDevice].
+    imgOn notNil ifTrue:[imgOn := imgOn onDevice:graphicsDevice].
+
+    x := hSpace + margin.
+    y := (height - imgTopHeight) // 2.
+
+    threeD ifFalse:[
+        imgTop notNil ifTrue:[
+            self paint:fgColor.
+            self displayForm:imgTop x:x y:y.
+        ].
+        (isActive and:[imgOn notNil]) ifTrue:[
+            self paint:(lampColor ? activeFgColor).
+            self displayForm:imgOn x:x y:y
+        ]
+    ] ifTrue:[
+        lvl := isActive ifTrue:[buttonOnLevel]
+                        ifFalse:[buttonOffLevel].
+        lvl < 0 ifTrue:[
+            clrTop := shadowColor.
+            clrBot := lightColor.
+        ] ifFalse:[
+            clrTop := lightColor.
+            clrBot := shadowColor.
+        ].
+        self paint:clrTop.
+        self displayForm:imgTop x:x y:y.
+        self paint:clrBot.
+        self displayForm:imgBot x:x y:y.
+
+        (imgH notNil and:[halfShadowColor notNil]) ifTrue:[
+            self paint:halfShadowColor.
+            self displayForm:imgH x:x y:y
+        ].
+
+        imgInside notNil ifTrue:[
+            self paint:(View defaultViewBackgroundColor).
+            self displayForm:imgInside x:x y:y
+        ].
+        (isActive and:[imgOn notNil]) ifTrue:[
+            self paint:lampColor.
+            self displayForm:imgOn x:x y:y
+        ]
+    ]
+
+    "Created: / 3.11.1997 / 12:16:30 / cg"
+    "Modified: / 28.4.1999 / 14:02:00 / cg"
+!
+
+drawWin95FocusFrame
+    "redefined to draw the focus frame around the string-only"
+
+    |x y m1|
+
+    x := labelOriginX. " margin + 1. "
+    y := labelOriginY. " margin + 1. "
+    m1 := margin + 1.
+    self
+        displayDottedRectangleX:x
+        y:y
+        width:(width - x - m1)
+        height:(height - y - m1).
+
+    "Created: / 17.9.1998 / 14:16:46 / cg"
+    "Modified: / 29.4.1999 / 21:51:00 / cg"
+! !
+
+!RadioButton methodsFor:'initialization'!
+
+defaultControllerClass
+    ^ RadioButtonController
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    <resource: #style (#'radioButton.showLamp')>
+
+    buttonStyle isNil ifTrue:[
+        buttonStyle := DefaultButtonStyle.
+    ].
+
+    super initStyle.
+
+    DefaultBorderWidth notNil ifTrue:[self borderWidth: DefaultBorderWidth].
+    fgColor := DefaultForegroundColor ? fgColor.
+    bgColor := DefaultBackgroundColor ? bgColor.
+    activeBgColor := DefaultActiveBackgroundColor ? activeBgColor.
+    enteredBgColor := bgColor.
+
+    buttonStyle isNil ifTrue:[
+        showLamp := styleSheet at:#'radioButton.showLamp' default:showLamp.
+        ^ self
+    ].
+
+    adjust := #left.
+    showLamp := true.
+    lampColor := Color black.
+    buttonOnLevel := DefaultActiveLevel.
+    buttonOffLevel := DefaultPassiveLevel.
+    onLevel := offLevel := 0.
+
+    self level:0.
+
+    (buttonStyle == #motif 
+    or:[buttonStyle == #round3D
+    or:[buttonStyle == #image]]) ifTrue:[
+        activeBgColor := bgColor. 
+        activeFgColor := fgColor.
+        buttonStyle == #image ifTrue:[
+            |graphicsDevice|
+
+            graphicsDevice := self graphicsDevice.
+            buttonOnImage := self class roundOnForm.
+            buttonOnImage notNil ifTrue:[ buttonOnImage := buttonOnImage onDevice:graphicsDevice].
+            buttonOffImage := self class roundOffForm.
+            buttonOffImage notNil ifTrue:[ buttonOffImage := buttonOffImage onDevice:graphicsDevice].
+
+            onImage := self class activeForm.
+            onImage notNil ifTrue:[ onImage := onImage onDevice:graphicsDevice].
+            offImage := self class passiveForm.
+            offImage notNil ifTrue:[ offImage := offImage onDevice:graphicsDevice].
+            disabledOnImage := self class disabledActiveForm.
+            disabledOnImage notNil ifTrue:[ disabledOnImage := disabledOnImage onDevice:graphicsDevice].
+            disabledOffImage := self class disabledPassiveForm.
+            disabledOffImage notNil ifTrue:[ disabledOffImage := disabledOffImage onDevice:graphicsDevice].
+            enteredOnImage := self class enteredActiveForm.
+            enteredOnImage notNil ifTrue:[ enteredOnImage := enteredOnImage onDevice:graphicsDevice].
+            enteredOffImage := self class enteredPassiveForm.
+            enteredOffImage notNil ifTrue:[ enteredOffImage := enteredOffImage onDevice:graphicsDevice].
+        ]
+    ] ifFalse:[
+        buttonStyle == #round2D ifTrue:[
+            activeFgColor := fgColor.
+            activeBgColor := bgColor.
+        ]
+    ].
+
+    "Modified: / 25-08-2010 / 22:57:37 / cg"
+! !
+
+!RadioButton methodsFor:'private'!
+
+computeLabelOrigin
+    super computeLabelOrigin.
+    buttonStyle notNil ifTrue:[    
+        labelOriginX := hSpace + 15 + hSpace  
+    ]
+
+    "Modified: / 3.11.1997 / 18:17:58 / cg"
+!
+
+lampImageHeight
+    buttonStyle isNil ifTrue:[^ super lampImageHeight].
+    ^ 15
+
+    "Created: / 3.11.1997 / 14:27:27 / cg"
+    "Modified: / 3.11.1997 / 18:10:39 / cg"
+!
+
+lampImageWidth
+    buttonStyle isNil ifTrue:[^ super lampImageWidth].
+    ^ 15
+
+    "Created: / 3.11.1997 / 14:27:23 / cg"
+    "Modified: / 3.11.1997 / 18:10:50 / cg"
+!
+
+rawLabelSizeOf:aLogo
+    "compute the extent needed to hold the label plus the lamp"
+
+    |ext|
+
+    ext := super rawLabelSizeOf:aLogo.
+    buttonStyle notNil ifTrue:[
+        ^ ext + (15 @ 0)
+    ].
+    ^ ext
+! !
+
+!RadioButton methodsFor:'queries'!
+
+is3D
+    buttonStyle == #round2D ifTrue:[^ false.].
+    ^ super is3D
+
+    "Created: / 3.11.1997 / 14:39:36 / cg"
+! !
+
+!RadioButton class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/RadioButton.st,v 1.54 2014-02-18 15:08:31 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/RadioButton.st,v 1.54 2014-02-18 15:08:31 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RadioButtonController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,70 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+"{ Package: 'stx:libwidg' }"
+
+ToggleController subclass:#RadioButtonController
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Controllers'
+!
+
+!RadioButtonController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    RadioButtonControllers redefine the response to a button-click.
+    While toggles (i.e. ToggleControllers) change state with every click,
+    radioButtons will only do so for an off-to-on transition.
+    They will NEVER turn themselfes off with a click.
+    To turn a radioButton off, another button in its buttonGroup must
+    be turned on and thereby (via the buttonGroup) turn the first button off.
+
+    You can place both toggles (for 'zero-or-one-on' behavior) or
+    radiobuttons (for 'one-on' behavior) into a buttongroup.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!RadioButtonController methodsFor:'initialization & release'!
+
+initialize
+    super initialize.
+    isToggle := false.
+    isRadio := true.
+    isTriggerOnDown := true.
+
+    "Created: 15.7.1996 / 13:43:23 / cg"
+! !
+
+!RadioButtonController class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/RadioButtonController.st,v 1.9 2003-05-07 14:56:15 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RadioButtonGroup.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,316 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+"{ Package: 'stx:libwidg' }"
+
+ValueHolder subclass:#RadioButtonGroup
+	instanceVariableNames:'numberOfValues'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Support'
+!
+
+!RadioButtonGroup class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    RadioButtonGroups control the interaction between RadioButtons
+    turning off other button(s) when one of the group is pressed.
+    To group some buttons (and have one-on behavior) use:
+
+        |g|
+
+        g := RadioButtonGroup new.
+        ...
+        b1 := RadioButton label:....
+        g add:b1
+        ...
+        b2 := RadioButton label:....
+        g add:b2
+        ...
+
+    A radioButtonGroup is itself usable as a model, holding the index of
+    the selected button. It can be used as a selectionIndexHolder of a
+    SelectionInList instance.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        RadioButton Toggle CheckBox CheckToggle Button
+        Model ValueHolder SelectionInList
+"
+
+    "Modified: 1.3.1997 / 14:11:57 / cg"
+!
+
+examples 
+"
+    using Toggles for 'at most one-on behavior':
+                                                                        [exBegin]
+        |top panel b group|
+
+        top := StandardSystemView label:'toggles'.
+        panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        group := RadioButtonGroup new.
+        b := Toggle label:'one' in:panel.
+        group add:b.
+        b := Toggle label:'two' in:panel.
+        group add:b.
+        b := Toggle label:'three' in:panel.
+        group add:b.
+        top extent:(panel preferredExtent).
+        top open.
+                                                                        [exEnd]
+
+
+    using RadioButtons for 'one-on behavior':
+                                                                        [exBegin]
+        |top panel b group|
+
+        top := StandardSystemView label:'radio'.
+        panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        group := RadioButtonGroup new.
+        b := RadioButton label:'one' in:panel.
+        group add:b.
+        b := RadioButton label:'two' in:panel.
+        group add:b.
+        b := RadioButton label:'three' in:panel.
+        group add:b.
+        top extent:(panel preferredExtent).
+        top open.
+                                                                        [exEnd]
+
+
+    same, with initial selection:
+                                                                        [exBegin]
+        |top panel b group|
+
+        top := StandardSystemView label:'radio'.
+        panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        group := RadioButtonGroup new.
+        b := RadioButton label:'one' in:panel.
+        group add:b.
+        b := RadioButton label:'two' in:panel.
+        group add:b.
+        b := RadioButton label:'three' in:panel.
+        group add:b.
+        top extent:(panel preferredExtent).
+
+        group value:1.
+        top open.
+                                                                        [exEnd]
+
+
+    using Buttons for 'none-on behavior'; 
+    buttons do not show the boolean state (they only fire);
+    however, the groups value remembers the last pressed button:
+                                                                        [exBegin]
+        |top panel b group|
+
+        top := StandardSystemView new.
+        panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        group := RadioButtonGroup new.
+        b := Button label:'one' in:panel.
+        group add:b.
+        b := Button label:'two' in:panel.
+        group add:b.
+        b := Button label:'three' in:panel.
+        group add:b.
+        top extent:(panel preferredExtent).
+        top open.
+
+        group inspect
+                                                                        [exEnd]
+
+
+    using checkBoxes (these have a label included).
+    notice, that we change their behavior to radioButton behavior:
+                                                                        [exBegin]
+        |top panel b group|
+
+        top := StandardSystemView new.
+        panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+        panel horizontalLayout:#left.
+        group := RadioButtonGroup new.
+        b := CheckBox label:'one' in:panel.
+        b controller beRadioButton.
+        group add:b.
+        b := CheckBox label:'two' in:panel.
+        b controller beRadioButton.
+        group add:b.
+        b := CheckBox label:'three' in:panel.
+        b controller beRadioButton.
+        group add:b.
+        top extent:(panel preferredExtent).
+        top open.
+                                                                        [exEnd]
+
+
+    a small dialog
+                                                                        [exBegin]
+        |dialog group b|
+
+        dialog := Dialog new.
+
+        group := RadioButtonGroup new.
+        group add:(b := dialog addCheckBox:'one' on:nil).
+        b controller beRadioButton.
+        group add:(b := dialog addCheckBox:'two' on:nil).
+        b controller beRadioButton.
+        group add:(b := dialog addCheckBox:'three' on:nil).
+        b controller beRadioButton.
+        group value:2.
+        dialog addAbortButton; addOkButton.
+        dialog open.
+
+        dialog accepted ifTrue:[
+            Transcript showCR:'you selected: ' , group value printString
+        ] ifFalse:[
+            Transcript showCR:'aborted'
+        ]
+                                                                        [exEnd]
+
+  as a selectionIndexHolder of a selectionInList
+  (i.e. a selectionInListView and a group displaying the same selection):
+                                                                        [exBegin]
+    |top top2 panel b sv group selectionInList|
+
+    top := StandardSystemView extent:200@200.
+
+    panel := HorizontalPanelView
+                origin:0.0@0.0 corner:1.0@1.0 in:top.
+
+    group := RadioButtonGroup new.
+    selectionInList := SelectionInList new.
+    selectionInList list:#('am' 'fm' 'off').
+    selectionInList selectionIndexHolder:group.
+
+    b := RadioButton label:'am' in:panel.
+    group add:b.
+
+    b := RadioButton label:'fm' in:panel.
+    group add:b.
+
+    b := RadioButton label:'off' in:panel.
+    group add:b.
+
+    group value:1.
+    top open.
+
+
+    top2 := StandardSystemView extent:200@200.
+    sv := SelectionInListView in:top2.
+    sv model:selectionInList.
+    sv origin:0.0@0.0 corner:1.0@1.0.
+    top2 open.
+                                                                        [exEnd]
+"
+
+    "Created: / 15.11.1995 / 17:14:53 / cg"
+    "Modified: / 30.10.1997 / 20:18:25 / cg"
+! !
+
+!RadioButtonGroup class methodsFor:'helpers'!
+
+adaptorFor:someValueHolder value:buttonValue
+    "create and return an adaptor for a radioButton"
+
+    |adaptor|
+
+    adaptor := PluggableAdaptor on:someValueHolder.
+
+    "/ the adapter plays boolean-value holder towards
+    "/ the radioButton, returning true iff the groups
+    "/ value is the same as the buttons index-value; false otherwise.
+    "/ Likewise, a true-store from the button sets the group value
+    "/ to the buttons index.
+
+    adaptor getBlock:[:m | (m value = buttonValue) ]
+            putBlock:[:m :onOff | 
+                           onOff ifTrue:[
+                               m value:buttonValue
+                           ] ifFalse:[
+                                "/ support for toggles
+                                buttonValue = m value ifTrue:[
+                                   m value:nil 
+                                ]
+                           ]
+                     ]
+         updateBlock:[:m :a :v | true].
+
+    ^ adaptor
+
+    "Created: / 30.10.1997 / 19:45:34 / cg"
+    "Modified: / 30.10.1997 / 20:14:25 / cg"
+! !
+
+!RadioButtonGroup methodsFor:'adding & removing'!
+
+add:aRadioButton
+    "add a radioButton to the group - actually, this name is misleading;
+     it simple creates an adaptor, which converts my value into a boolean,
+     depending on the buttons index-number
+    "
+    self add:aRadioButton value:nil
+!
+
+add:aRadioButton value:aValueOrNil
+    "add a radioButton to the group - actually, this name is misleading;
+     it simply creates an adaptor, which converts my value into a boolean,
+     depending on the buttons index-number or aValueOrNil"
+
+    |adaptor selectValue|
+
+    numberOfValues := (numberOfValues ? 0) + 1.
+    selectValue  := aValueOrNil ? numberOfValues.
+
+    "/ the adapter plays boolean-value holder towards
+    "/ the radioButton, returning true iff the groups
+    "/ value is the same as the buttons index-value; false otherwise.
+    "/ Likewise, a true-store from the button sets the group value
+    "/ to the buttons index.
+
+    adaptor := self class adaptorFor:self value:selectValue.
+    aRadioButton isOn ifTrue:[
+        self value:selectValue.
+    ].
+    aRadioButton model:adaptor.
+
+    "Modified: / 30.10.1997 / 20:14:54 / cg"
+! !
+
+!RadioButtonGroup methodsFor:'queries'!
+
+numberOfValues
+    ^ numberOfValues
+! !
+
+!RadioButtonGroup class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/RadioButtonGroup.st,v 1.33 2002-11-11 09:49:19 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ScrollBar.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1188 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SimpleView subclass:#ScrollBar
+	instanceVariableNames:'thumb button1 button2 buttonLayout elementSpacing orientation'
+	classVariableNames:'DefaultButtonPositions DefaultLevel DefaultElementSpacing
+		DefaultScrollerBordered DefaultHScrollBarHeight
+		DefaultVScrollBarWidth'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!ScrollBar class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this class implements vertical scrollbars with scroller and
+    2 step-scroll buttons. when moved or stepped, it performs a
+    predefined action.
+
+    The action is specified by:                 the block to be evaluated for step-up
+        aScrollBar scrollUpAction:aBlock 
+        (scrollLeftAction for hor-Scrollbars)
+
+        aScrollBar scrollDownAction:aBlock      the block to be evaluated for step-down
+        (scrollRightAction for hor-Scrollbars)
+
+        aScrollbar scrollAction:aBlock          the block to be evaluated for scroll
+                                                passing percentage as argument.
+
+    Scrollbars can scroll syncronous (i.e. every movement is notified immediately via the
+    scrollAction) or asynchronous (i.e. only one notification takes place at the end of the movement).
+    The choice is up to the user of the scrollbar (typically, views which are complicated to redraw,
+    will set it to asynchronous.)
+
+    Most often scrollbars are used hidden with ScrollableView or HVScrollableView (i.e. you
+    dont have to care for all the details).
+
+    The scrollBars and scrollers protocols have been made similar enough to
+    allow transparent use of either a scroller or a scrollBar in applications.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        Scroller Slider
+        ScrollableView
+"
+! !
+
+!ScrollBar class methodsFor:'style changes'!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'scrollBar.buttonPositions' 
+                       #'scrollBar.level'
+                       #'scrollBar.scrollerBordered' 
+                       #'scrollBar.elementSpacing'
+                       #'scrollBar.vScrollBarWidth'
+                       #'scrollBar.vScrollBarWidth' 
+                      )>
+
+    DefaultButtonPositions := StyleSheet at:#'scrollBar.buttonPositions' default:#bottom.
+    DefaultLevel := StyleSheet at:#'scrollBar.level'.
+    DefaultScrollerBordered := StyleSheet at:#'scrollBar.scrollerBordered' default:false.
+    DefaultElementSpacing := StyleSheet 
+                                at:#'scrollBar.elementSpacing' 
+                                default:(StyleSheet is3D ifTrue:[1] ifFalse:[0]).
+
+    DefaultVScrollBarWidth  := StyleSheet at:#'scrollBar.vScrollBarWidth' default:nil.
+    DefaultHScrollBarHeight := StyleSheet at:#'scrollBar.hScrollBarHeight' default:nil.
+
+    "Modified: / 28.4.1999 / 19:27:53 / cg"
+! !
+
+!ScrollBar methodsFor:'accessing'!
+
+thumbHeight
+    "return height of thumb in percent"
+
+    ^ thumb thumbHeight
+!
+
+thumbHeight:newHeight
+    "set height of thumb in percent"
+
+    thumb thumbHeight:newHeight.
+    self enableDisableButtons
+!
+
+thumbOrigin
+    "return position of (top of) thumb in percent"
+
+    ^ thumb thumbOrigin
+!
+
+thumbOrigin:newOrigin
+    "set position of (top of) thumb in percent"
+
+    thumb thumbOrigin:newOrigin.
+    self enableDisableButtons.
+!
+
+thumbOrigin:newOrigin thumbHeight:newHeight
+    "set origin and height of thumb (both in percent)"
+
+    thumb thumbOrigin:newOrigin thumbHeight:newHeight.
+    self enableDisableButtons
+! !
+
+!ScrollBar methodsFor:'accessing-behavior'!
+
+asynchronousOperation
+    <resource: #obsolete>
+    self obsoleteMethodWarning:'use #beAsynchronous'.
+    self beAsynchronous
+!
+
+beAsynchronous
+    "set asynchronous-mode - scroll action is performed after movement
+     of scroller when mouse-button is finally released (no tracking).
+     This is forwarded to the scroller here."
+
+    thumb beAsynchronous
+!
+
+beSynchronous
+    "set synchronous-mode - scroll action is performed for every movement
+     of scroller (tracking).
+     This is forwarded to the scroller here."
+
+    thumb beSynchronous
+!
+
+isSynchronous
+    "return true if the scroll-mode is synchronous.
+     If true, the scroll action is performed for every movement of the thumb (tracking).
+     If false, the scroll action is only performed at the end."
+
+    ^ thumb isSynchronous
+!
+
+scrollAction:aBlock
+    "set the action, aBlock to be performed when the scroller is moved.
+     This is forwarded to the scroller here."
+
+    thumb scrollAction:aBlock
+!
+
+scrollDownAction
+    "return the action which is performed on scroll-down.
+     (vertical scrollBars)"
+
+    ^ button2 action
+
+    "Created: 28.5.1997 / 15:52:39 / cg"
+    "Modified: 28.5.1997 / 15:53:56 / cg"
+!
+
+scrollDownAction:aBlock
+    "set the action, aBlock to be performed when the down-button is pressed.
+     (for vertical scrollBars)"
+
+    button2 action:aBlock
+
+    "Modified: 28.5.1997 / 15:51:39 / cg"
+!
+
+scrollLeftAction
+    "return the action which is performed on scroll-left
+     (for horizontal scrollBars)"
+
+    ^ button1 action
+
+    "Created: 28.5.1997 / 15:51:22 / cg"
+!
+
+scrollLeftAction:aBlock
+    "set the action to be performed on scroll-left.
+     (for horizontal scrollBars)"
+
+    button1 action:aBlock
+
+    "Created: 28.5.1997 / 15:52:55 / cg"
+!
+
+scrollRightAction
+    "return the action which is performed on scroll-right.
+     (for horizontal scrollBars)"
+
+    ^ button2 action
+
+    "Created: 28.5.1997 / 15:53:15 / cg"
+!
+
+scrollRightAction:aBlock
+    "set the action  to be performed on scroll-right.
+     (for horizontal scrollBars)"
+
+    button2 action:aBlock
+
+    "Created: 28.5.1997 / 15:53:30 / cg"
+!
+
+scrollUpAction
+    "return the action which is performed on scroll-up.
+     (for vertical scrollBars)"
+
+    ^ button1 action
+
+    "Created: 28.5.1997 / 15:53:51 / cg"
+!
+
+scrollUpAction:aBlock
+    "set the action, aBlock to be performed when the up-button is pressed.
+     (for vertical scrollBars)"
+
+    button1 action:aBlock
+
+    "Modified: 28.5.1997 / 15:51:33 / cg"
+!
+
+synchronousOperation
+    <resource: #obsolete>
+    self obsoleteMethodWarning:'use #beSynchronous'.
+    self beSynchronous
+! !
+
+!ScrollBar methodsFor:'accessing-components'!
+
+downButton
+    "return the down-button
+     (Please: only use this direct access for special applications)"
+
+    ^ button2
+
+    "
+     |v|
+
+     v := ScrollableView for:EditTextView.
+     v scrolledView contents:('/etc/passwd' asFilename contentsOfEntireFile).
+     v scrollBar upButton activeForegroundColor:Color red.
+     v scrollBar downButton activeForegroundColor:Color red.
+     v open
+    "
+!
+
+thumb 
+    "return the thumb (i.e. the scroller subview)
+     (Please: only use this direct access for special applications)"
+
+    ^ thumb
+
+    "
+     |v|
+
+     v := ScrollableView for:EditTextView.
+     v scrolledView contents:('/etc/passwd' asFilename contentsOfEntireFile).
+     v scrollBar thumb thumbColor:(Color red).
+     v open
+    "
+
+    "Modified: 1.3.1996 / 19:15:50 / cg"
+!
+
+upButton
+    "return the up-button
+     (Please: only use this direct access for special applications)"
+
+    ^ button1
+
+    "
+     |v|
+
+     v := ScrollableView for:EditTextView.
+     v scrolledView contents:('/etc/passwd' asFilename contentsOfEntireFile).
+     v scrollBar upButton foregroundColor:(Color red).
+     v scrollBar upButton enteredForegroundColor:(Color red lightened).
+     v scrollBar downButton foregroundColor:(Color green).
+     v scrollBar downButton enteredForegroundColor:(Color green lightened).
+     v open
+    "
+! !
+
+!ScrollBar methodsFor:'accessing-look'!
+
+allViewBackground:something if:condition
+    "blocked for all scrollBars (I want my own background)"
+
+    "/ ^ super allViewBackground:something
+!
+
+orientation
+    "for ST-80 compatibility, answer this query"
+
+    ^ orientation
+!
+
+orientation:aSymbol
+    "set the orientation; either #horizontal or #vertical"
+
+    aSymbol ~~ orientation ifTrue:[
+        orientation := aSymbol.
+    ]
+!
+
+thumbColor:aColor
+    "set the thumbs color"
+
+    thumb thumbColor:aColor
+!
+
+upButtonLabel:label1 downButtonLabel:label2
+    "set the labels shown in the buttons.
+     Because of the fixed button sizes, this only makes sense with 
+     single-character strings or small bitmaps."
+
+    button1 label:label1.
+    button2 label:label2.
+    self setElementPositions.
+
+    "not bad:
+     |v|
+
+     v := ScrollableView for:EditTextView.
+     v scrolledView contents:('/etc/passwd' asFilename contentsOfEntireFile).
+     v scrollBar upButtonLabel:'+' downButtonLabel:'-'.
+     v open
+    "
+
+    "also possible :
+     |v|
+
+     v := ScrollableView for:EditTextView.
+     v scrolledView contents:('/etc/passwd' asFilename contentsOfEntireFile).
+     v scrollBar upButtonLabel:'u' downButtonLabel:'d'.
+     v open
+    "
+
+    "BAD example:
+     |v|
+
+     v := ScrollableView for:EditTextView.
+     v scrolledView contents:('/etc/passwd' asFilename contentsOfEntireFile).
+     v scrollBar upButtonLabel:'up' downButtonLabel:'down'.
+     v open
+    "
+
+    "Modified: 1.3.1996 / 19:06:50 / cg"
+! !
+
+!ScrollBar methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    changedObject == thumb ifTrue:[
+        self enableDisableButtons.
+        ^ self.
+    ].
+    super update:something with:aParameter from:changedObject.
+! !
+
+!ScrollBar methodsFor:'events'!
+
+keyPress:key x:x y:y
+
+    <resource: #keyboard (#BeginOfText #EndOfText)>
+
+    (key == #BeginOfText) ifTrue:[
+        self scrollToBeginning.
+        ^ self
+    ].
+    (key == #EndOfText) ifTrue:[
+        self scrollToEnd.
+        ^ self
+    ].
+    super keyPress:key x:x y:y
+
+    "Created: 6.3.1996 / 17:58:02 / cg"
+    "Modified: 7.3.1996 / 13:18:19 / cg"
+!
+
+sizeChanged:how
+    "when my size changes, I have to resize/reposition the subviews.
+     Also, if I became too small, hide thumb/buttons."
+
+    <resource: #style (#name)>
+
+    |upHeight "{ Class: SmallInteger }"
+     downHeight "{ Class: SmallInteger }"
+     thumbHeight "{ Class: SmallInteger }"
+     upAndDownHeight "{ Class: SmallInteger }"
+     bw   "{ Class: SmallInteger }" 
+     bwn  "{ Class: SmallInteger }"
+     sep2 "{ Class: SmallInteger }"
+     sep3 "{ Class: SmallInteger }"
+     m2   "{ Class: SmallInteger }"
+     thumbWidth w h style b1Visible b2Visible thumbVisible 
+     b1WasVisible b2WasVisible thumbWasVisible bX bY
+     leftWidth rightWidth leftAndRightWidth isHorizontal
+     tX tY tW tH tExt bOrg|
+
+    super sizeChanged:how.
+
+    (button1 isNil or:[thumb isNil or:[button2 isNil]]) ifTrue:[^ self].
+
+    bw := self borderWidth.
+    bwn := bw negated + margin.
+    m2 := margin * 2.
+
+    b1WasVisible := button1 realized.
+    b2WasVisible := button2 realized.
+    thumbWasVisible := thumb realized.
+
+    (isHorizontal := (orientation == #horizontal)) ifTrue:[
+        leftWidth := button1 width + bw.
+        rightWidth := button2 width + bw.
+        leftAndRightWidth := leftWidth + rightWidth.
+
+        thumbWidth := width - leftAndRightWidth - bw - (elementSpacing * 3).
+    "
+        ((buttonLayout ~~ #top) and:[buttonLayout ~~ #bottom]) ifTrue:[
+            thumbWidth := thumbWidth - bw
+        ].
+    "
+        buttonLayout == #around ifTrue:[
+            thumbWidth := thumbWidth + bw
+        ].
+
+        "if I become too small, hide buttons"
+
+        width <= (leftAndRightWidth + m2) ifTrue:[
+            b1Visible := b2Visible := thumbVisible := false.  
+        ] ifFalse:[
+            b1Visible := b2Visible := thumbVisible := true.  
+        ].
+
+        (thumbWidth < 10) ifTrue:[
+            thumbVisible := false.
+        ] ifFalse:[
+            thumbVisible := true.
+        ].
+    ] ifFalse:[
+        upHeight := button1 height + bw.
+        downHeight := button2 height + bw.
+        upAndDownHeight := upHeight + downHeight.
+
+        thumbHeight := height - upAndDownHeight - bw - (elementSpacing * 3).
+"
+        ((buttonLayout ~~ #top) and:[buttonLayout ~~ #bottom]) ifTrue:[
+            thumbHeight := thumbHeight - bw
+        ].
+"
+        buttonLayout == #around ifTrue:[
+            thumbHeight := thumbHeight + bw
+        ].
+
+        "if I become too small, hide buttons and thumb"
+
+        height <= (upAndDownHeight + (m2)) ifTrue:[
+            b1Visible := b2Visible := thumbVisible := false.  
+        ] ifFalse:[
+            b1Visible := b2Visible := thumbVisible := true.  
+        ].
+
+        (thumbHeight < 10) ifTrue:[
+            thumbVisible := false.
+        ] ifFalse:[
+            thumbVisible := true.
+        ].
+    ].
+
+    b1Visible ~~ b1WasVisible ifTrue:[
+        self changeVisibilityOf:button1 to:b1Visible.
+    ].
+
+    b2Visible ~~ b2WasVisible ifTrue:[
+        self changeVisibilityOf:button2 to:b2Visible.
+    ].
+
+    thumbVisible ~~ thumbWasVisible ifTrue:[
+        self changeVisibilityOf:thumb to:thumbVisible.
+    ].
+
+    sep2 := elementSpacing * 2.
+
+    style := styleSheet name.
+
+    isHorizontal ifTrue:[
+        "height of buttons is always my width"
+
+        h := height - m2.
+
+        (h ~~ button1 height) ifTrue:[
+            button1 height:h.
+            button2 height:h
+        ].
+
+        thumbHeight := h.
+
+        style == #next ifTrue:[
+            thumbHeight := thumbHeight - (thumb borderWidth * 2).
+            thumbWidth := thumbWidth - 1
+        ] ifFalse:[
+            style == #motif ifTrue:[
+                thumbWidth := thumbWidth - margin
+            ]
+        ].
+
+        "
+         a kludge: views with width or height of 0 are illegal
+         avoid error from view-creation (it will be hidden anyway)
+        "
+        thumbWidth <= 0 ifTrue:[
+            thumbWidth := 1
+        ].
+
+        (buttonLayout == #bottom) ifTrue:[
+            "buttons at left"
+            thumb extent:(thumbWidth @ thumbHeight).
+            ^ self
+        ].
+
+        (buttonLayout == #top) ifTrue:[
+            "buttons at right"
+            thumbWidth := thumbWidth + bw.
+            thumbVisible ifFalse:[
+                bX := elementSpacing
+            ] ifTrue:[
+                bX := thumbWidth + sep2.
+            ].
+            tExt := (thumbWidth @ thumbHeight).
+            (how == #smaller) ifTrue:[
+                "/ resize thumb first
+                thumb extent:tExt.
+            ].
+            button1 origin:(bX @ bwn).
+            button2 origin:((bX + leftWidth) @ bwn).
+            (how == #smaller) ifFalse:[
+                "/ resize thumb last
+                thumb extent:tExt
+            ].
+            ^ self
+        ].
+        "button around thumb"
+
+        sep3 := 0.
+        style == #motif ifTrue:[
+"/            sep2 := sep2 + 1.
+            sep3 := 1.
+        ].
+
+        button1 origin:(bwn @ bwn).
+        bX := leftWidth + thumbWidth + sep2.
+        tX := leftWidth - bw + elementSpacing.
+        style == #os2 ifTrue:[
+            bX := bX - margin.
+            tW := thumbWidth - m2.
+            tX := tX + margin.
+        ] ifFalse:[
+            bX := bX - (margin // 2).
+            tW := thumbWidth + margin - sep3 - (margin // 2).
+            tX := tX + sep3.
+        ].
+
+        "/ if made smaller, shrink thumb first, then move lower button.
+        "/ otherwise, move lower button first, then make thumb larger.
+        "/ this avoids a need to redraw the button2.
+
+        bOrg := (bX @ bwn).
+        how ~~ #smaller ifTrue:[
+            button2 origin:bOrg.
+        ].
+        thumb extent:(tW @ thumbHeight).
+        thumb origin:(tX @ bwn).
+        how == #smaller ifTrue:[
+            button2 origin:bOrg.
+        ].
+    ] ifFalse:[
+        "width of buttons is always my width"
+
+        w := width - m2.
+        (w ~~ button1 width) ifTrue:[
+            button1 width:w.
+            button2 width:w
+        ].
+
+        thumbWidth := w.
+        style == #next ifTrue:[
+            thumbWidth := thumbWidth - (thumb borderWidth * 2).
+            thumbHeight := thumbHeight - 1
+        ] ifFalse:[
+            style == #motif ifTrue:[
+                thumbHeight := thumbHeight - margin
+            ]
+        ].
+
+        "
+         a kludge: views with width or height of 0 are illegal
+         avoid error from view-creation (it will be hidden anyway)
+        "
+        thumbHeight <= 0 ifTrue:[
+            thumbHeight := 1
+        ].
+
+        (buttonLayout == #top) ifTrue:[
+            "buttons at top"
+            thumb extent:(thumbWidth @ thumbHeight).
+            ^ self
+        ].
+
+        (buttonLayout == #bottom) ifTrue:[
+            "buttons at bottom"
+
+            thumbHeight := thumbHeight + bw.
+            
+            bY := thumbHeight + sep2.
+            (bY + upAndDownHeight) >= height ifTrue:[
+                bY := height - margin - upAndDownHeight
+            ].
+
+            button1 viewGravity:#North. 
+            button2 viewGravity:#North. 
+
+            tExt := (thumbWidth @ thumbHeight).
+
+            (how == #smaller) ifTrue:[
+                "/ resize thumb first
+                thumb extent:tExt.
+            ].
+            button1 origin:(bwn @ bY).
+            button2 origin:(bwn @ (bY + upHeight)).
+            (how == #smaller) ifFalse:[
+                "/ resize thumb last
+                thumb extent:tExt
+            ].
+            ^ self
+        ].
+        "buttons around thumb"
+
+        sep3 := 0.
+        style == #motif ifTrue:[
+"/            sep2 := sep2 + 1.
+            sep3 := 1.
+        ].
+        button1 origin:(bwn @ bwn).
+
+        bY := upHeight + thumbHeight + sep2.
+        tY := upHeight - bw + elementSpacing.
+        style == #os2 ifTrue:[
+            bY := bY - margin "+ bw".
+            tH := thumbHeight - m2 "+ margin - (margin // 2)".
+            tY := tY + margin.
+        ] ifFalse:[
+            bY := bY - (margin // 2) "+ bw".
+            tH := thumbHeight + margin - sep3 - (margin // 2).
+            tY := tY + sep3.
+        ].
+
+        "/ if made smaller, shrink thumb first, then move lower button.
+        "/ otherwise, move lower button first, then make thumb larger.
+        "/ this avoids a need to redraw the button2.
+
+        bOrg := (bwn @ bY).
+        how ~~ #smaller ifTrue:[
+            button2 origin:bOrg.
+        ].
+        thumb extent:(thumbWidth @ tH).
+        thumb origin:(bwn @ tY).
+        how == #smaller ifTrue:[
+            button2 origin:bOrg.
+        ].
+    ].
+
+    "Modified: / 3.5.1996 / 23:49:02 / stefan"
+    "Modified: / 2.12.1998 / 00:02:14 / cg"
+! !
+
+!ScrollBar methodsFor:'focus handling'!
+
+wantsFocusWithButtonPress
+    "no, do not catch the keyboard focus on button click"
+
+    ^ false
+
+
+! !
+
+!ScrollBar methodsFor:'forced scroll'!
+
+pageDown
+    "page down/right"
+
+    thumb pageDown.
+    self updateNativeWidget.
+!
+
+pageUp
+    "page up/left"
+
+    thumb pageUp.
+    self updateNativeWidget.
+!
+
+scrollToBeginning
+    "to top"
+
+    thumb scrollToBeginning.
+    self updateNativeWidget.
+
+    "Modified: 6.3.1996 / 17:54:45 / cg"
+!
+
+scrollToEnd
+    "to end"
+
+    thumb scrollToEnd.
+    self updateNativeWidget.
+
+    "Created: 6.3.1996 / 17:54:28 / cg"
+    "Modified: 6.3.1996 / 17:54:49 / cg"
+! !
+
+!ScrollBar methodsFor:'initialization'!
+
+createElements
+    "private: create my elements"
+
+    orientation == #horizontal ifTrue:[
+        button1 := ArrowButton leftIn:self.
+        button1 name:'leftButton'.
+        button2 := ArrowButton rightIn:self.
+        button2 name:'rightButton'.
+        thumb := HorizontalScroller in:self.
+    ] ifFalse:[
+        button1 := ArrowButton upIn:self.
+        button1 name:'upButton'.
+        button2 := ArrowButton downIn:self.
+        button2 name:'downButton'.
+        thumb := Scroller in:self.
+    ].
+
+    "Modified: 28.5.1997 / 15:49:05 / cg"
+!
+
+defaultExtent
+    "compute my extent from sub-components"
+
+    ^ self preferredExtent
+
+
+    "Created: 1.3.1996 / 19:22:11 / cg"
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    super initStyle.
+
+    buttonLayout := DefaultButtonPositions.
+    DefaultLevel notNil ifTrue:[
+        self level:DefaultLevel
+    ].
+    elementSpacing := DefaultElementSpacing
+
+    "Modified: 22.1.1997 / 11:57:41 / cg"
+!
+
+initialize
+    "setup; create the 2 buttons and a scroller"
+
+    <resource: #style (#'scrollBar.disableButtons')>
+
+    |clr style bw|
+
+    orientation isNil ifTrue:[
+        orientation := #vertical
+    ].
+
+    super initialize.
+
+    self createElements.
+
+    (styleSheet at:#'scrollBar.disableButtons' default:false) ifTrue:[
+        thumb addDependent:self
+    ].
+
+    button1 autoRepeat:true.
+    button2 autoRepeat:true.
+
+    bw := self borderWidth.
+    button1 borderWidth:bw.
+    DefaultScrollerBordered ifFalse:[
+        thumb borderWidth:bw.
+    ].
+    button2 borderWidth:bw.
+
+    style := styleSheet name.
+    ((style = #iris) and:[Screen current hasGrayscales]) ifTrue:[
+        "have to change some of Buttons defaults"
+        clr := (Color gray:25) onDevice:self graphicsDevice.
+        button1 passiveLevel:2.
+        button2 passiveLevel:2.
+        button1 foregroundColor:clr.
+        button1 activeForegroundColor:clr.
+        button1 enteredForegroundColor:clr.
+        button2 foregroundColor:clr.
+        button2 activeForegroundColor:clr.
+        button2 enteredForegroundColor:clr.
+    ].
+
+    self setElementPositions.
+
+    style = #motif ifTrue:[
+        clr := thumb thumbColor.
+        button1 foregroundColor:clr.
+        button2 foregroundColor:clr.
+
+        clr := thumb viewBackground.
+        button1 viewBackground:clr.
+        button2 viewBackground:clr.
+        button1 backgroundColor:clr.
+        button2 backgroundColor:clr.
+        button1 activeBackgroundColor:clr.
+        button2 activeBackgroundColor:clr.
+        self graphicsDevice hasGrayscales ifFalse:[
+            button1 activeForegroundColor:self blackColor.
+            button2 activeForegroundColor:self blackColor.
+        ]
+    ]
+
+    "Modified: / 29.4.1999 / 08:43:30 / cg"
+!
+
+reinitialize
+    super reinitialize.
+    self setElementPositions.
+!
+
+setElementPositions
+    "position sub-components"
+
+    |bw bwn|
+
+    bw := self borderWidth.
+    bwn := bw negated + margin.
+
+    orientation == #horizontal ifTrue:[
+        (buttonLayout == #bottom) ifTrue:[
+            "buttons at left"
+            button1 origin:(bwn @ bwn).
+            button1 viewGravity:#West.
+            button2 origin:(button1 width @ bwn).
+            button2 viewGravity:#West.
+            thumb origin:((button1 width 
+                           + bw 
+                           + button2 width 
+                           + elementSpacing + elementSpacing) @ bwn).
+            thumb viewGravity:#West.
+            ^ self
+        ].
+
+        (buttonLayout == #top) ifTrue:[
+            "buttons at right"
+            button1 viewGravity:#West.
+            button2 viewGravity:#West.
+            thumb origin:(bwn @ bwn).
+            thumb viewGravity:#West
+        ].
+
+        "buttonLayout == #around "
+        button1 origin:(bwn @ bwn).
+        button1 viewGravity:#West.
+        button2 viewGravity:#West.
+        thumb origin:((button1 width + elementSpacing) @ bwn).
+        thumb viewGravity:#West
+    ] ifFalse:[
+        (buttonLayout == #top) ifTrue:[
+            button1 origin:(bwn @ bwn).
+            button1 viewGravity:#North.
+            button2 origin:(bwn @ (button1 height)).
+            button2 viewGravity:#North.
+            thumb origin:(bwn @ (button1 height 
+                                 + bw 
+                                 + button2 height 
+                                 + elementSpacing 
+                                 + elementSpacing)).
+            thumb viewGravity:#North.
+            ^ self
+        ].
+        (buttonLayout == #bottom) ifTrue:[
+            self graphicsDevice supportsViewGravity ifTrue:[
+                button1 viewGravity:#South. 
+                button2 viewGravity:#South. 
+                thumb viewGravity:#North.
+            ].
+            thumb origin:(bwn @ bwn).
+            ^ self
+        ].
+
+        "buttonLayout == #around"
+        button1 origin:(bwn @ bwn).
+        button1 viewGravity:#North.
+    "/    button2 viewGravity:#North.
+        thumb origin:(bwn @ (button1 height + elementSpacing)).
+        thumb viewGravity:#North
+    ]
+
+    "Modified: 28.5.1997 / 15:50:27 / cg"
+! !
+
+!ScrollBar methodsFor:'native widget support'!
+
+beNativeWidget
+    super beNativeWidget.
+    self makeElementsInvisible.
+!
+
+makeElementsInvisible
+    "when using native widget, my elements are not visible.
+     (they are not destroyed, to keep a place for their attributes,
+      and to allow future dynamic switching and snapshot restore on
+      a non-native system)"
+
+    button1 notNil ifTrue:[
+        button1 beInvisible.
+    ].
+    button2 notNil ifTrue:[
+        button2 beInvisible.
+    ].
+    thumb notNil ifTrue:[
+        thumb beInvisible.
+    ].
+!
+
+nativeWindowType
+    "return a symbol describing my native window type 
+     (may be used internally by the device as a native window creation hint)"
+
+    orientation == #vertical ifTrue:[
+        ^ #VerticalScrollBar
+    ].
+    ^ #HorizontalScrollBar
+!
+
+updateNativeWidget
+    self isNativeWidget ifTrue:[
+        self drawableId notNil ifTrue:[
+            self graphicsDevice
+                setScrollRange:0 to:100 
+                redraw:false 
+                in:self drawableId.
+
+            self graphicsDevice
+                setScrollPosition:thumb thumbOrigin rounded 
+                redraw:false 
+                in:self drawableId.
+
+            self graphicsDevice
+                setScrollBarPageSize:thumb thumbHeight rounded 
+                redraw:true 
+                in:self drawableId.
+        ]
+    ].
+! !
+
+!ScrollBar methodsFor:'private'!
+
+changeVisibilityOf:aComponent to:aBoolean
+    self isNativeWidget ifTrue:[^ self].
+
+    aComponent hiddenOnRealize:aBoolean not.
+    aBoolean ifFalse:[
+        aComponent unmap
+    ] ifTrue:[
+        shown ifTrue:[aComponent realize]
+    ].
+!
+
+enableDisableButtons
+    "only used with styles which disable their buttons if the
+     thumb is at either end. Check where the thumb is and enable/disable
+     as appropriate."
+
+    <resource: #style (#'scrollBar.disableButtons')>
+
+    |e1 e2 th to ena|
+
+    (styleSheet at:#'scrollBar.disableButtons' default:false) ifFalse:[^ self].
+    e1 := e2 := true.
+    (th := thumb thumbHeight) notNil ifTrue:[
+        (th >= (thumb stop)) ifTrue:[
+            e1 := false.
+            e2 := false
+        ]
+    ].
+    ((to := thumb thumbOrigin) <= thumb start) ifTrue:[
+        e1 := false
+    ] ifFalse:[
+        th isNil ifTrue:[th := 0].
+        (to + th) >= thumb stop ifTrue:[
+            e2 := false
+        ]
+    ].
+    button1 enabled:e1. "/ e1 ifTrue:[button1 enable] ifFalse:[button1 disable].
+    button2 enabled:e2. "/ e2 ifTrue:[button2 enable] ifFalse:[button2 disable].
+
+    self isNativeWidget ifTrue:[
+        self drawableId notNil ifTrue:[
+            e1 ifTrue:[
+                e2 ifTrue:[
+                    "/ both enabled
+                    ena := #ENABLE_BOTH.
+                ] ifFalse:[
+                    ena := #DISABLE_RTDN.
+                ]
+            ] ifFalse:[
+                e2 ifTrue:[
+                    ena := #DISABLE_LTUP.
+                ] ifFalse:[
+                    ena := #DISABLE_BOTH.
+                ]
+            ].
+            self graphicsDevice enableScrollBar:ena in:self drawableId.
+        ].
+    ].
+
+    "Modified: / 29.4.1999 / 08:44:03 / cg"
+! !
+
+!ScrollBar methodsFor:'private-scrollview interface'!
+
+setThumbFor:aView
+    "adjust thumb for aView 
+     (i.e. adjust thumbs origin & size for views size & views contents).
+     This is forwarded to the scroller here."
+
+    thumb setThumbFor:aView.
+    self isNativeWidget ifTrue:[
+        self updateNativeWidget.
+    ].
+    self enableDisableButtons
+!
+
+setThumbHeightFor:aView
+    "adjust thumbs height for aViews size & contents.
+     This is forwarded to the scroller here."
+
+    thumb setThumbHeightFor:aView.
+    self isNativeWidget ifTrue:[
+        self updateNativeWidget.
+    ].
+    self enableDisableButtons
+!
+
+setThumbOriginFor:aView
+    "adjust thumbs origin for aViews size & contents.
+     This is forwarded to the scroller here."
+
+    thumb setThumbOriginFor:aView.
+    self isNativeWidget ifTrue:[
+        self updateNativeWidget.
+    ].
+    self enableDisableButtons
+! !
+
+!ScrollBar methodsFor:'queries'!
+
+isMiniScroller
+    ^ false
+
+    "Created: 7.3.1997 / 16:20:12 / cg"
+!
+
+isScrolling
+    "true, if thumb is being moved (by user)"
+
+    ^ thumb isScrolling
+!
+
+preferredExtent
+    "compute my extent from sub-components"
+
+    <resource: #style (#name)>
+
+    |w h form1 form2 style
+     height1   "{ Class: SmallInteger }"
+     height2   "{ Class: SmallInteger }"
+     width1    "{ Class: SmallInteger }"
+     width2    "{ Class: SmallInteger }" |
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    "
+     need fix - this is a kludge;
+     the if should not be needed ...
+    "
+    style := styleSheet name.
+
+    orientation == #horizontal ifTrue:[
+        form1 := ArrowButton leftArrowButtonForm:style on:self graphicsDevice.
+        form2 := ArrowButton rightArrowButtonForm:style on:self graphicsDevice.
+    ] ifFalse:[
+        form1 := ArrowButton upArrowButtonForm:style on:self graphicsDevice.
+        form2 := ArrowButton downArrowButtonForm:style on:self graphicsDevice.
+    ].
+    form1 isNil ifTrue:[
+        height1 := width1 := 16.
+    ] ifFalse:[
+        height1 := form1 height.
+        width1 := form1 width
+    ].
+    form2 isNil ifTrue:[
+        height2 := width2 := 16
+    ] ifFalse:[
+        height2 := form2 height.
+        width2 := form2 width
+    ].
+
+    orientation == #horizontal ifTrue:[
+        DefaultHScrollBarHeight notNil ifTrue:[
+            h := DefaultHScrollBarHeight
+        ] ifFalse:[
+            h := height1 max:height2.
+        ].
+        w := width1 + width2 + (1 * 2) + (HorizontalScroller defaultExtent x).
+    ] ifFalse:[
+        DefaultVScrollBarWidth notNil ifTrue:[
+            w := DefaultVScrollBarWidth
+        ] ifFalse:[
+            w := width1 max:width2.
+        ].
+        h := height1 + height2 + (1 * 2) + (Scroller defaultExtent y).
+    ].
+
+    style ~~ #normal ifTrue:[
+        DefaultHScrollBarHeight isNil ifTrue:[h := h + 4].
+        DefaultVScrollBarWidth isNil ifTrue:[w := w + 4].
+    ].
+
+    preferredExtent := w @ h.
+    ^ preferredExtent
+
+    "Modified: / 28.4.1999 / 19:33:45 / cg"
+! !
+
+!ScrollBar class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ScrollBar.st,v 1.92 2014-02-18 16:47:16 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/ScrollBar.st,v 1.92 2014-02-18 16:47:16 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ScrollableView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,2400 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SimpleView subclass:#ScrollableView
+	instanceVariableNames:'scrolledView vScrollBar hScrollBar scrollBarPosition lockUpdates
+		hideVScrollBar hideHScrollBar hasHorizontalScrollBar
+		hasVerticalScrollBar horizontalMini verticalMini vScrollBarHidden
+		hScrollBarHidden scrolledViewHMargin scrolledViewVMargin
+		scrollBarVSpacing scrollBarHSpacing scrolledViewLayout
+		hScrollBarLayout vScrollBarLayout'
+	classVariableNames:'DefaultScrolledViewLevel DefaultScrolledViewMargin
+		DefaultScrollBarSpacing DefaultScrolledViewBorderWidth
+		DefaultLevel DefaultScrollBarLevel MyDefaultViewBackgroundColor'
+	poolDictionaries:''
+	category:'Views-Basic'
+!
+
+!ScrollableView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a view containing a scrollbar and some other (slave-)view.
+    This view wraps scrollbar(s) around the view to be scrolled.
+    The scrollbars are setup to send scrollUp/scrollDown/scrollVerticalTo
+    and scrollLeft/scrollRight/scrollHorizontalTo- messages whenever moved.
+    The view itself has to implement these (there is a default implementation
+    in the common View class for this - so your widgets usually dont have to
+    care for this).
+
+    For the scrollbars to know about the full (maximum) size, the view
+    MUST implement #heightOfContents and/or #widthOfContents.
+    The values returned by those methods are used to compute the fraction
+    which is visible (i.e. the scrollers thumb heights).
+
+    There are three ways to setup a scrollableView:
+    if the type of the view to be scrolled is known in advance,
+    use:
+        v := ScrollableView for:<ViewClass>
+    or:
+        v := ScrollableView for:<ViewClass> in:someSuperView
+
+
+    otherwise, create an empty scrollableView with:
+
+        v := ScrollableView new
+    or:
+        v := ScrollableView in:someSuperView
+
+    and define the view later with:
+
+        v scrolledView:aViewToBeScrolled
+
+
+    Finally, if the view to be scrolled has been already created,
+    use:
+
+        v := ScrollableView forView:aViewToBeScrolled
+    or:    
+        v := ScrollableView forView:aViewToBeScrolled in:someSuperView
+
+    It is also possible to change the scrolledView later (even multiple times).
+    This may be useful, if different views are needed to display different types
+    of data (see example2) and at creation time, it is not known what type
+    of view is required (multidocument format applications).
+
+    If you want to scroll a bunch of other views (instead of a views contents),
+    you need a companion class (ViewScroller). See the documentation there.
+
+    By default, scrollbars are full size scrollbars - for horizontal scrolling
+    (which is less often used), scrollableViews can optionally be created with
+    miniscrollers which take up less screen space.
+
+    Recent changes:
+        Originally, there where two classes, for vertical-only and
+        horizontal+vertical scrollability.
+        These have now been merged into the common ScrollableView class,
+        and each scrollability can be controlled individually.
+
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        ScrollBar 
+        Scroller
+        ScrolledView
+"
+!
+
+examples
+"
+  simple scrolled text:
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example1'.
+        top extent:200@100.
+
+        scr := ScrollableView for:EditTextView in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        txt := scr scrolledView.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+
+
+  changing the scrolledView later:
+                                                                        [exBegin]
+        |top scr txtView1 txtView2 browserView|
+
+        top := StandardSystemView label:'scroll example2'.
+        top extent:300@100.
+
+        scr := ScrollableView in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+
+        top open.
+
+        (Delay forSeconds:5) wait.
+
+        txtView1 := EditTextView new.
+        txtView1 list:#(
+                        'wait 5 seconds to see the other text'
+                        'line2'
+                        'line3'
+                        'line4'
+                        'line5'
+                        'line7'
+                        'line8'
+                        'line9'
+                        'line10'
+                  ).
+        scr scrolledView:txtView1.
+
+        (Delay forSeconds:5) wait.
+
+        txtView2 := EditTextView new.
+        txtView2 list:#('this is the other views text' 
+                        'alternative line2'
+                        'alternative line3'
+                        'alternative line4'
+                        'alternative line5'
+                        'alternative line6').
+        scr scrolledView:txtView2.
+                                                                        [exEnd]
+
+
+
+
+  using a miniscroller:
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example3'.
+        top extent:200@100.
+
+        scr := ScrollableView for:EditTextView miniScroller:true in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        txt := scr scrolledView.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+
+
+
+  scrolling in both directions:
+    Notice: HVScrollableView remains existent for backward compatibility;
+            scrollability can now be controlled in both directions at any
+            time (see examples below).
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example4'.
+        top extent:200@100.
+
+        scr := HVScrollableView for:EditTextView in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        txt := scr scrolledView.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+
+
+
+  using a full scroller vertically, miniscroller horizontally:
+    Notice: HVScrollableView remains existent for backward compatibility;
+            scrollability can now be controlled in both directions at any
+            time (see examples below).
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example5'.
+        top extent:200@100.
+
+        scr := HVScrollableView for:EditTextView miniScrollerH:true in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        txt := scr scrolledView.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+
+
+
+  using miniscrollers for both directions:
+    Notice: HVScrollableView remains existent for backward compatibility;
+            scrollability can now be controlled in both directions at any
+            time (see examples below).
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example6'.
+        top extent:200@100.
+
+        scr := HVScrollableView for:EditTextView miniScroller:true in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        txt := scr scrolledView.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+  controlling scrollability:
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example6'.
+        top extent:200@100.
+
+        txt := EditTextView new.
+        
+        scr := ScrollableView forView:txt in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        scr horizontalScrollable:true.
+        scr verticalScrollable:false.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+  controlling scrollability and miniScroller:
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example6'.
+        top extent:200@100.
+
+        txt := EditTextView new.
+
+        scr := ScrollableView forView:txt in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        scr horizontalScrollable:true; horizontalMini:false.
+        scr verticalScrollable:true; verticalMini:true.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+  autohiding scrollbars (edit the text to make scrollbars visible/invisible)
+  (NOTICE:
+        this is controlled by the styleSheet and 
+        should normally NOT be done by the program):
+                                                                        [exBegin]
+        |top scr txt|
+
+        top := StandardSystemView label:'scroll example6'.
+        top extent:200@100.
+
+        txt := EditTextView new.
+
+        scr := ScrollableView forView:txt in:top.
+        scr origin:0.0@0.0 corner:1.0@1.0.
+        scr horizontalScrollable:true; horizontalMini:false.
+        scr verticalScrollable:true; verticalMini:true.
+        scr autoHideScrollBars:true.
+
+        txt list:#('line1'
+                   'line2'
+                   'line3'
+                   'line4'
+                   'line5'
+                   'line7'
+                   'line8'
+                   'line9'
+                   'line10'
+                  ).
+        top open
+                                                                        [exEnd]
+"
+! !
+
+!ScrollableView class methodsFor:'instance creation'!
+
+for:aViewClass
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:false 
+        miniScrollerV:false 
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Created: 6.3.1997 / 18:06:22 / cg"
+    "Modified: 6.3.1997 / 23:18:32 / cg"
+!
+
+for:aViewClass hasHorizontalScrollBar:hasH hasVerticalScrollBar:hasV miniScrollerH:miniH miniScrollerV:miniV 
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    |newView|
+
+    aViewClass notNil ifTrue:[
+        newView := aViewClass new.
+    ].
+    ^ self
+        forView:newView
+        hasHorizontalScrollBar:hasH 
+        hasVerticalScrollBar:hasV 
+        miniScrollerH:miniH 
+        miniScrollerV:miniV 
+        origin:nil 
+        corner:nil 
+        in:nil
+
+    "Created: 7.4.1997 / 19:00:14 / cg"
+!
+
+for:aViewClass hasHorizontalScrollBar:hasH hasVerticalScrollBar:hasV miniScrollerH:miniH miniScrollerV:miniV origin:org corner:corn in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    |newView|
+
+    aViewClass notNil ifTrue:[
+        newView := aViewClass new.
+    ].
+    ^ self
+        forView:newView
+        hasHorizontalScrollBar:hasH 
+        hasVerticalScrollBar:hasV 
+        miniScrollerH:miniH 
+        miniScrollerV:miniV 
+        origin:org 
+        corner:corn 
+        in:aView
+
+    "
+     |top scr|
+
+     top := StandardSystemView extent:200@200.
+     scr := ScrollableView for:nil
+                 hasHorizontalScrollBar:true
+                 hasVerticalScrollBar:true
+                 miniScrollerH:false
+                 miniScrollerV:false
+                 origin:0.0@0.0
+                 corner:1.0@1.0
+                 in:top.
+     top open
+    "
+
+    "Modified: 6.3.1997 / 18:36:01 / cg"
+!
+
+for:aViewClass in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:false 
+        miniScrollerV:false 
+        origin:nil
+        corner:nil 
+        in:aView
+
+    "Modified: 6.3.1997 / 23:18:41 / cg"
+!
+
+for:aViewClass miniScroller:mini
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if mini is false, miniscrollers
+     if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:mini 
+        miniScrollerV:mini 
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 23:18:45 / cg"
+!
+
+for:aViewClass miniScroller:mini in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if mini is false, miniscrollers
+     if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:mini 
+        miniScrollerV:mini 
+        origin:nil
+        corner:nil 
+        in:aView
+
+    "Modified: 6.3.1997 / 23:18:50 / cg"
+!
+
+for:aViewClass miniScroller:mini origin:org corner:corn in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if mini is false, miniscrollers
+     if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:mini 
+        miniScrollerV:mini 
+        origin:org
+        corner:corn 
+        in:aView
+
+    "Modified: 6.3.1997 / 23:18:53 / cg"
+!
+
+for:aViewClass miniScrollerH:miniH
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if miniH is false, 
+     and a horizontal miniscroller if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:false
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 18:30:15 / cg"
+!
+
+for:aViewClass miniScrollerH:miniH in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:false
+        origin:nil
+        corner:nil 
+        in:aView
+
+    "Modified: 6.3.1997 / 18:30:31 / cg"
+!
+
+for:aViewClass miniScrollerH:miniH miniScrollerV:miniV
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:miniV
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 18:30:47 / cg"
+!
+
+for:aViewClass miniScrollerH:miniH miniScrollerV:miniV in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:miniV
+        origin:nil
+        corner:nil 
+        in:aView
+
+    "Modified: 6.3.1997 / 18:31:02 / cg"
+!
+
+for:aViewClass miniScrollerH:miniH miniScrollerV:miniV origin:org corner:corn in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:miniV
+        origin:org
+        corner:corn 
+        in:aView
+
+    "Modified: 6.3.1997 / 18:31:17 / cg"
+!
+
+for:aViewClass miniScrollerH:miniH origin:org corner:corn in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have a full horizontal scrollbar if miniH is false,
+     a miniscroller if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:false
+        origin:org
+        corner:corn 
+        in:aView
+
+    "Modified: 6.3.1997 / 18:31:28 / cg"
+!
+
+for:aViewClass miniScrollerV:miniV origin:org corner:corn in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have a full vertical scrollbar if miniV is false,
+     a miniscroller if true."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:false 
+        miniScrollerV:miniV
+        origin:org
+        corner:corn 
+        in:aView
+
+    "Modified: 6.3.1997 / 18:31:41 / cg"
+!
+
+for:aViewClass origin:org corner:corner in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars."
+
+    ^ self 
+        for:aViewClass
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:false 
+        miniScrollerV:false
+        origin:org
+        corner:corner 
+        in:aView
+
+    "Modified: 6.3.1997 / 23:19:05 / cg"
+!
+
+forView:aView
+    "return a new scrolling view scrolling aView.
+     The view will have full scrollbars."
+
+    ^ self 
+        forView:aView
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:false 
+        miniScrollerV:false
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 23:19:08 / cg"
+!
+
+forView:aView hasHorizontalScrollBar:hasH hasVerticalScrollBar:hasV miniScrollerH:miniH miniScrollerV:miniV 
+    "return a new scrolling view scrolling a aView.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self
+        forView:aView
+        hasHorizontalScrollBar:hasH 
+        hasVerticalScrollBar:hasV 
+        miniScrollerH:miniH 
+        miniScrollerV:miniV 
+        origin:nil 
+        corner:nil 
+        in:nil
+!
+
+forView:aScrolledView hasHorizontalScrollBar:hasH hasVerticalScrollBar:hasV miniScrollerH:miniH miniScrollerV:miniV origin:org corner:corn in:aView
+    "return a new scrolling view scrolling an instance of aViewClass.
+     The subview is created here.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    |newView dev|
+
+    aView notNil ifTrue:[
+        dev := aView graphicsDevice
+    ] ifFalse:[ 
+        dev := Screen current
+    ].
+    newView := self basicNew device:dev.
+    "/ preset flags to avoid creation and later destruction of scrollBars ...
+    newView setVertical:hasV mini:miniV horizontal:hasH mini:miniH.
+    newView initialize.
+    newView setupVertical:hasV mini:miniV horizontal:hasH mini:miniH.
+
+    aScrolledView notNil ifTrue:[
+        newView scrolledView:aScrolledView.
+    ].
+
+    org notNil ifTrue:[
+        newView origin:org
+    ].
+    corn notNil ifTrue:[
+        newView corner:corn
+    ].
+
+    aView notNil ifTrue:[
+        aView addSubView:newView
+    ].
+    ^ newView
+
+    "
+     |top scr|
+
+     top := StandardSystemView extent:200@200.
+     scr := ScrollableView 
+                 forView:(TextView new)
+                 hasHorizontalScrollBar:true
+                 hasVerticalScrollBar:true
+                 miniScrollerH:false
+                 miniScrollerV:false
+                 origin:0.0@0.0
+                 corner:1.0@1.0
+                 in:top.
+     top open
+    "
+    "
+     |top scr|
+
+     top := StandardSystemView extent:200@200.
+     scr := ScrollableView 
+                 forView:(TextView new)
+                 hasHorizontalScrollBar:false
+                 hasVerticalScrollBar:true
+                 miniScrollerH:false
+                 miniScrollerV:false
+                 origin:0.0@0.0
+                 corner:1.0@1.0
+                 in:top.
+     top open
+    "
+
+    "Modified: 6.3.1997 / 18:42:40 / cg"
+    "Modified: 19.3.1997 / 15:32:51 / stefan"
+!
+
+forView:aView in:aSuperView
+    "return a new scrolling view scrolling aView.
+     The view will have full scrollbars."
+
+    ^ self 
+        forView:aView
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:false 
+        miniScrollerV:false
+        origin:nil
+        corner:nil 
+        in:aSuperView
+
+    "Modified: 6.3.1997 / 23:19:12 / cg"
+!
+
+forView:aView miniScrollerH:mini
+    "return a new scrolling view scrolling aView.
+     The view will have a full vertical scrollbar and a horizontal
+     miniScroller if mini is true."
+
+    ^ self 
+        forView:aView
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:mini 
+        miniScrollerV:false
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 18:32:58 / cg"
+!
+
+forView:scrolledView miniScrollerH:miniH miniScrollerV:miniV
+    "return a new scrolling view, scrolling aView.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self forView:scrolledView miniScrollerH:miniH miniScrollerV:miniV in:nil
+
+    "Created: / 06-10-2006 / 14:30:30 / cg"
+!
+
+forView:scrolledView miniScrollerH:miniH miniScrollerV:miniV in:aView
+    "return a new scrolling view, scrolling aView.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self 
+        forView:scrolledView
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:miniV
+        origin:nil
+        corner:nil 
+        in:aView
+
+    "Modified: 6.3.1997 / 18:33:20 / cg"
+!
+
+in:aView
+    "return a new scrolling view to be contained in aView.
+     There is no slave view now - this has to be set later via
+     the scrolledView: method.
+     The view will have full scrollbars."
+
+    ^ self 
+        forView:nil
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:false 
+        miniScrollerV:false
+        origin:nil
+        corner:nil 
+        in:aView
+
+    "Modified: 6.3.1997 / 23:19:19 / cg"
+!
+
+miniScroller:mini
+    "return a new scrolling view. The subview will be created later.
+     The view will have full scrollbars if mini is false, 
+     miniscrollers if true."
+
+    ^ self 
+        forView:nil
+        hasHorizontalScrollBar:self defaultHorizontalScrollable
+        hasVerticalScrollBar:self defaultVerticalScrollable
+        miniScrollerH:mini 
+        miniScrollerV:mini
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 23:19:21 / cg"
+!
+
+miniScrollerH:miniH
+    "return a new scrolling view. The subview will be created later.
+     The view will have full scrollbars if miniH is false, 
+     and a horizontal miniscroller if true."
+
+    ^ self 
+        forView:nil
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:false
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 18:34:06 / cg"
+!
+
+miniScrollerH:miniH miniScrollerV:miniV
+    "return a new scrolling view. The subview will be created later.
+     The view will have full scrollbars if the corresponding miniH/miniV
+     is false, miniscrollers if true."
+
+    ^ self 
+        forView:nil
+        hasHorizontalScrollBar:true
+        hasVerticalScrollBar:true
+        miniScrollerH:miniH 
+        miniScrollerV:miniV
+        origin:nil
+        corner:nil 
+        in:nil
+
+    "Modified: 6.3.1997 / 18:34:16 / cg"
+!
+
+new
+    "return a new scrolling view.
+     There is no slave view now - this has to be set later via
+     the scrolledView: method.
+     The view will have full scrollbars."
+
+    ^ self in:nil
+
+    "Modified: / 12.11.1998 / 14:55:54 / cg"
+! !
+
+!ScrollableView class methodsFor:'defaults'!
+
+defaultHorizontalScrollable
+    ^ false
+!
+
+defaultScrollBarPosition
+    "return the default position of the scrollBar.
+     (max be of interest to panels, to make the handlePosition alike)"
+
+    <resource: #style (#'scrollBar.position')>
+
+    ^ StyleSheet at:#'scrollBar.position' default:#left.
+
+    "
+     self defaultScrollBarPosition
+    "
+
+    "Modified: / 31.10.1997 / 12:58:15 / cg"
+!
+
+defaultVerticalScrollable
+    ^ true
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'scrolledView.level' #'scrolledView.margin'
+                       #'scrolledView.borderWidth'
+                       #'scrollBar.spacing' #'scrollBar.level'
+                       #'scrollableView.level' #'scrollableView.backgroundColor' )>
+
+    |defLevel defMargin defSpacing|
+
+    StyleSheet is3D ifTrue:[
+        defLevel := -1.
+        defMargin := ViewSpacing // 2.
+        defSpacing := defMargin.
+    ] ifFalse:[
+        defLevel := 0.
+        defMargin := 0.
+        defSpacing := 0
+    ].
+    DefaultScrolledViewLevel := StyleSheet at:#'scrolledView.level' default:defLevel.
+    DefaultScrolledViewBorderWidth := StyleSheet at:#'scrolledView.borderWidth' default:nil.
+    DefaultScrolledViewMargin := StyleSheet at:#'scrolledView.margin' default:defMargin.
+    DefaultScrollBarSpacing := StyleSheet at:#'scrollBar.spacing' default:defSpacing.
+    DefaultLevel := StyleSheet at:#'scrollableView.level' default:nil.
+    DefaultScrollBarLevel := StyleSheet at:#'scrollBar.level' default:nil.
+    MyDefaultViewBackgroundColor := StyleSheet at:#'scrollableView.backgroundColor' default:DefaultViewBackgroundColor.
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: / 31.10.1997 / 20:57:10 / cg"
+! !
+
+!ScrollableView methodsFor:'accessing-behavior'!
+
+autoHideHorizontalScrollBar:aBoolean
+    "set/clear the flag which controls if the horizontal scrollBar should
+     be made invisible dynamically, if there is nothing to scroll
+     (and shown if there is). 
+     This flags setting is normally controlled by the styleSheet."
+
+    hideHScrollBar := aBoolean.
+
+    "Modified: 19.3.1997 / 16:28:42 / cg"
+    "Created: 19.3.1997 / 17:24:39 / cg"
+!
+
+autoHideScrollBars:aBoolean
+    "set/clear the flag which controls if scrollBars should
+     be made invisible dynamically, if there is nothing to scroll
+     (and shown if there is). 
+     This flags setting is normally controlled by the styleSheet."
+
+    hideVScrollBar := hideHScrollBar := aBoolean.
+
+    "Modified: 19.3.1997 / 16:28:42 / cg"
+    "Created: 19.3.1997 / 17:24:39 / cg"
+!
+
+autoHideVerticalScrollBar:aBoolean
+    "set/clear the flag which controls if the vertical scrollBar should
+     be made invisible dynamically, if there is nothing to scroll
+     (and shown if there is). 
+     This flags setting is normally controlled by the styleSheet."
+
+    hideVScrollBar := aBoolean.
+
+    "Modified: 19.3.1997 / 16:28:42 / cg"
+    "Created: 19.3.1997 / 17:24:39 / cg"
+!
+
+readOnly:aBoolean
+    scrolledView readOnly:aBoolean
+! !
+
+!ScrollableView methodsFor:'accessing-components'!
+
+horizontalScrollBar
+    "return the horizontal scrollbar (or nil, if there is none)"
+
+"/    hScrollBar isNil ifTrue:[
+"/        self horizontalScrollable:true.
+"/    ].
+    ^ hScrollBar
+
+    "Created: / 6.3.1997 / 18:06:23 / cg"
+    "Modified: / 25.5.1998 / 12:53:58 / cg"
+!
+
+removeSubView:aView
+    super removeSubView:aView.
+    aView == scrolledView ifTrue:[
+        scrolledView := nil
+    ].
+    aView == vScrollBar ifTrue:[
+        vScrollBar := nil
+    ].
+    aView == hScrollBar ifTrue:[
+        hScrollBar := nil
+    ].
+
+
+
+
+!
+
+scrollBar
+    "return the vertical scrollbar (or nil, if there is none)"
+
+"/    vScrollBar isNil ifTrue:[
+"/        self verticalScrollable:true.
+"/    ].
+    ^ vScrollBar
+
+    "Created: / 6.3.1997 / 18:06:23 / cg"
+    "Modified: / 25.5.1998 / 12:54:06 / cg"
+!
+
+scrolledView
+    "return the scrolled view (or nil, if there is none)"
+
+    ^ scrolledView
+
+    "Modified: 6.3.1997 / 16:48:09 / cg"
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+scrolledView:aView
+    "set the view to scroll"
+
+    aView == scrolledView ifTrue:[^ self "already"].
+
+    scrolledView notNil ifTrue:[
+        scrolledView removeDependent:self.
+        scrolledView destroy.
+        scrolledView := nil.
+    ].
+
+    scrolledView := aView.
+
+    aView notNil ifTrue:[
+        super addSubViewFirst:aView.
+        self setScrollActions.
+
+        realized ifTrue:[
+            self setupDimensionsConfigureScrolledView:true.
+            self sizeChanged:nil.
+            aView realize
+        ].
+    ]
+
+    "Modified: / 19.3.1997 / 15:32:37 / stefan"
+    "Modified: / 21.5.1998 / 00:48:57 / cg"
+!
+
+verticalScrollBar
+    "return the vertical scrollbar (or nil, if there is none)"
+
+"/    vScrollBar isNil ifTrue:[
+"/        self verticalScrollable:true.
+"/    ].
+    ^ vScrollBar
+
+    "Modified: 6.3.1997 / 16:59:24 / cg"
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+widget
+    "for ST80 compatibility (where a wrapper returns its wrapped
+     widget), return the scrolledView here"
+
+    ^ scrolledView
+
+    "Created: 20.6.1997 / 14:45:16 / cg"
+! !
+
+!ScrollableView methodsFor:'accessing-look'!
+
+horizontalMini:aBoolean
+    "control the horizontal scrollBar to be either a miniScroller,
+     or a full scrollBar."
+
+    |newMini|
+
+    newMini := aBoolean.
+    (styleSheet at:#'scrollBar.neverMini' default:false) == true ifTrue:[
+        newMini := false.
+    ].
+
+    horizontalMini ~~ newMini ifTrue:[
+        horizontalMini := newMini.
+        self setupForChangedScrollbars.
+    ].
+
+    "Created: / 7.3.1997 / 21:57:02 / cg"
+    "Modified: / 22.4.1998 / 22:42:25 / ca"
+    "Modified: / 21.5.1998 / 00:48:25 / cg"
+!
+
+horizontalScrollable:aBoolean
+    "enable/disable horizontal scrollability.
+     If disabled, the horizontal scrollBar is made invisible."
+
+    hasHorizontalScrollBar ~~ aBoolean ifTrue:[
+        hasHorizontalScrollBar := aBoolean.
+        hScrollBarHidden := false.
+        self setupForChangedScrollbars.
+    ].
+
+    "Created: / 7.3.1997 / 21:56:28 / cg"
+    "Modified: / 21.5.1998 / 00:48:44 / cg"
+!
+
+horizontalScrollable:scrollableBoolean miniScroller:miniScrollerBoolean
+    "enable/disable horizontal scrollability.
+     If disabled, the horizontal scrollBar is made invisible."
+
+    |newMini|
+
+    newMini := miniScrollerBoolean.
+    (styleSheet at:#'scrollBar.neverMini' default:false) == true ifTrue:[
+        newMini := false.
+    ].
+
+    (hasHorizontalScrollBar ~~ scrollableBoolean 
+    or:[scrollableBoolean and:[horizontalMini ~~ newMini]]) ifTrue:[
+        horizontalMini := newMini.
+        hasHorizontalScrollBar := scrollableBoolean.
+        hScrollBarHidden := false.
+        self setupForChangedScrollbars.
+    ].
+    horizontalMini := newMini.
+!
+
+setupForChangedScrollbars
+    self setupViews.
+    shown ifTrue:[
+        self setupDimensionsConfigureScrolledView:false.
+    ]
+!
+
+verticalMini:aBoolean
+    "control the vertical scrollBar to be either a miniScroller,
+     or a full scrollBar."
+
+    |newMini|
+
+    newMini := aBoolean.
+    (styleSheet at:#'scrollBar.neverMini' default:false) == true ifTrue:[
+        newMini := false.
+    ].
+
+    verticalMini ~~ newMini ifTrue:[
+        verticalMini := newMini.
+        self setupForChangedScrollbars.
+    ]
+
+    "Created: / 7.3.1997 / 21:56:57 / cg"
+    "Modified: / 22.4.1998 / 22:42:32 / ca"
+    "Modified: / 21.5.1998 / 00:49:10 / cg"
+!
+
+verticalScrollable:aBoolean
+    "enable/disable vertical scrollability.
+     If disabled, the vertical scrollBar is made invisible."
+
+    hasVerticalScrollBar ~~ aBoolean ifTrue:[
+        hasVerticalScrollBar := aBoolean.
+        "/ vScrollBarHidden := false.
+        self setupForChangedScrollbars.
+    ]
+
+    "Created: / 7.3.1997 / 21:56:39 / cg"
+    "Modified: / 24.8.2001 / 14:55:20 / cg"
+! !
+
+!ScrollableView methodsFor:'change & update'!
+
+update:something with:argument from:changedObject
+    "whenever the scrolledView changes its contents, the scroller(s) must
+     be updated as well"
+
+    |doUpdate|
+
+    doUpdate := false.
+    changedObject == scrolledView ifTrue:[
+        something == #sizeOfContents ifTrue:[
+            vScrollBar notNil ifTrue:[
+                vScrollBar setThumbFor:scrolledView.
+                doUpdate := true
+            ].
+            hScrollBar notNil ifTrue:[
+                hScrollBar setThumbFor:scrolledView.
+                doUpdate := true
+            ].
+        ] ifFalse:[
+            something == #originOfContents ifTrue:[
+                lockUpdates ifFalse:[
+                    vScrollBar notNil ifTrue:[
+                        vScrollBar setThumbOriginFor:scrolledView.
+                        doUpdate := true
+                    ].
+                    hScrollBar notNil ifTrue:[
+                        hScrollBar setThumbOriginFor:scrolledView.
+                        doUpdate := true
+                    ].
+                ].
+            ].
+        ].
+
+        doUpdate ifTrue:[
+            self updateScrollBarVisibility
+        ]
+    ].
+
+!
+
+updateHScrollBarVisibility
+    |hide anyChange|
+
+    anyChange := false.
+    hideHScrollBar ~~ false ifTrue:[
+        hScrollBar notNil ifTrue:[
+            hide := hScrollBar thumbHeight >= 100.
+            hide ~~ hScrollBar realized not "hScrollBarHidden" ifTrue:[
+                hScrollBarHidden := hide.
+                hide ifTrue:[
+                    "/ just in case: scroll to left
+
+                    scrolledView scrollHorizontalToPercent:0.
+                    hScrollBar beInvisible
+                ] ifFalse:[
+                    hScrollBar beVisible
+                ].
+                "/ hScrollBar setRealized:hide not.
+                anyChange := true.
+            ]
+        ].
+    ].
+    ^ anyChange
+
+    "Modified: / 24.8.2001 / 15:05:57 / cg"
+    "Created: / 24.8.2001 / 15:06:05 / cg"
+!
+
+updateScrollBarVisibility
+    "check if any scrollbar needs to be hidden or shown"
+
+    |anyChange hide|
+
+    anyChange := self updateVScrollBarVisibility.
+    anyChange := anyChange | self updateHScrollBarVisibility.
+
+    anyChange ifTrue:[
+        self setupDimensionsConfigureScrolledView:false.
+
+        "/ force him to recompute its dimension ...
+        scrolledView notNil ifTrue:[
+            vScrollBar notNil ifTrue:[
+                vScrollBar setThumbFor:scrolledView.
+            ].
+            hScrollBar notNil ifTrue:[
+                hScrollBar setThumbFor:scrolledView.
+            ].
+        ].
+
+        "/ stupid - showing one may need the other ...
+        "/ and vice versa; do it again.
+
+
+"/        anyChange := false.
+"/        hideVScrollBar ~~ false ifTrue:[
+"/            vScrollBar notNil ifTrue:[
+"/                hide := vScrollBar thumbHeight >= 100.
+"/                hide ~~ vScrollBar realized not "vScrollBarHidden" ifTrue:[
+"/                    vScrollBarHidden := hide.
+"/                    hide ifTrue:[vScrollBar beInvisible] ifFalse:[vScrollBar beVisible].
+"/                    anyChange := true.
+"/                ]
+"/            ].
+"/        ].
+"/        hideHScrollBar ~~ false ifTrue:[
+"/            hScrollBar notNil ifTrue:[
+"/                hide := hScrollBar thumbHeight >= 100.
+"/                hide ~~ hScrollBar realized not "hScrollBarHidden" ifTrue:[
+"/                    hScrollBarHidden := hide.
+"/                    hide ifTrue:[hScrollBar beInvisible] ifFalse:[hScrollBar beVisible].
+"/                    anyChange := true.
+"/                ]
+"/            ].
+"/        ].
+
+        anyChange := self updateVScrollBarVisibility.
+        anyChange := anyChange | self updateHScrollBarVisibility.
+        anyChange ifTrue:[
+            self setupDimensionsConfigureScrolledView:false.
+        ].
+    ].
+
+    "Modified: / 19.3.1997 / 15:33:36 / stefan"
+    "Modified: / 24.8.2001 / 15:08:58 / cg"
+!
+
+updateVScrollBarVisibility
+    |hide anyChange|
+
+    anyChange := false.
+    hideVScrollBar ~~ false ifTrue:[
+        vScrollBar notNil ifTrue:[
+            hide := vScrollBar thumbHeight >= 100.
+            hide ~~ vScrollBar realized not" vScrollBarHidden" ifTrue:[
+                vScrollBarHidden := hide.
+                hide ifTrue:[
+                    "/ just in case: scroll to top
+
+                    scrolledView scrollVerticalToPercent:0.
+                    vScrollBar beInvisible
+                ] ifFalse:[
+                    vScrollBar beVisible
+                ].
+                "/vScrollBar setRealized:hide not.
+                anyChange := true.
+            ]
+        ].
+    ].
+    ^ anyChange
+
+    "Modified: / 24.8.2001 / 15:05:57 / cg"
+    "Created: / 24.8.2001 / 15:07:38 / cg"
+! !
+
+!ScrollableView methodsFor:'drag & drop'!
+
+dropTarget
+    scrolledView isNil ifTrue:[^ nil].
+    ^ scrolledView dropTarget
+!
+
+dropTarget:aDropTarget
+    scrolledView isNil ifTrue:[^ self].
+    scrolledView dropTarget:aDropTarget
+! !
+
+!ScrollableView methodsFor:'event handling'!
+
+keyPress:key x:x y:y
+    "a key was pressed - handle page-keys here"
+
+    <resource: #keyboard ( #Prior #Next ) >
+
+    (key == #Prior)    ifTrue: [^ self pageUp].
+    (key == #Next)     ifTrue: [^ self pageDown].
+
+    super keyPress:key x:x y:y
+
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+sizeChanged:how
+    "handle size changes - this may change any scrollBars visibility"
+
+    |orgX orgY thV thH scrollH scrollV|
+
+    self changed:#sizeOfView with:how.
+
+    superView notNil ifTrue:[
+        superView subViewChangedSize
+    ].
+
+    "/ resize components manually, in an order which is optimal
+
+    how == #smaller ifTrue:[
+        "/ first resize the horizontalScrollBar,
+
+        scrolledView notNil ifTrue:[
+            scrolledView containerChangedSize
+        ].
+        hScrollBar notNil ifTrue:[
+            hScrollBar containerChangedSize
+        ].
+        vScrollBar notNil ifTrue:[
+            vScrollBar containerChangedSize
+        ].
+    ] ifFalse:[
+        hScrollBar notNil ifTrue:[
+            hScrollBar containerChangedSize
+        ].
+        vScrollBar notNil ifTrue:[
+            vScrollBar containerChangedSize
+        ].
+        scrolledView notNil ifTrue:[
+            scrolledView containerChangedSize
+        ].
+    ].
+
+    scrolledView isNil ifTrue:[^ self].
+    (hScrollBar isNil and:[vScrollBar isNil]) ifTrue:[
+        ^ self
+    ].
+
+    vScrollBar notNil ifTrue:[
+        vScrollBar setThumbFor:scrolledView.
+        orgY := vScrollBar thumbOrigin.
+        thV := vScrollBar thumbHeight.
+    ].
+    hScrollBar notNil ifTrue:[
+        hScrollBar setThumbFor:scrolledView.
+        orgX := hScrollBar thumbOrigin.
+        thH := hScrollBar thumbHeight.
+    ].
+
+    "/ splitted, since there are optimized scrollProcedures for each case ...
+
+    hScrollBar isNil ifTrue:[
+        "/ only care for vertical ...
+        orgY + thV >= 100 ifTrue:[
+            vScrollBar thumbOrigin:(100 - thV).
+            scrolledView scrollVerticalToPercent:vScrollBar thumbOrigin.
+        ].
+    ] ifFalse:[
+        vScrollBar isNil ifTrue:[
+            "/ only care for horizontal ...
+            orgX + thH >= 100 ifTrue:[
+                hScrollBar thumbOrigin:(100 - thH).
+                scrolledView scrollHorizontalToPercent:hScrollBar thumbOrigin.
+            ].
+        ] ifFalse:[
+            "/ care for both ...
+
+            scrollH := scrollV := false.
+
+            orgY + thV >= 100 ifTrue:[
+                vScrollBar thumbOrigin:(100 - thV).
+                orgY := vScrollBar thumbOrigin.
+                scrollV := true.
+            ].
+            orgX + thH >= 100 ifTrue:[
+                hScrollBar thumbOrigin:(100 - thH).
+                orgX := hScrollBar thumbOrigin.
+                scrollH := true.
+            ].
+            scrollV ifTrue:[
+                scrollH ifTrue:[
+                    scrolledView scrollToPercent:(orgX@orgY).
+                ] ifFalse:[
+                    scrolledView scrollVerticalToPercent:orgY.
+                ]
+            ] ifFalse:[
+                scrollH ifTrue:[
+                    scrolledView scrollHorizontalToPercent:orgX.
+                ]
+            ]
+        ]
+    ].
+    self updateScrollBarVisibility.
+
+    "/ just in case there are more views... (DSV - sigh)
+    subViews do:[:eachSubView |
+        ((eachSubView ~~ scrolledView)
+        and:[(eachSubView ~~ hScrollBar)
+        and:[eachSubView ~~ vScrollBar]])   
+        ifTrue:[
+            eachSubView containerChangedSize
+        ]
+    ]
+
+    "Modified: 28.3.1997 / 17:25:38 / cg"
+!
+
+win32NativeScroll:scrollCode position:newPosition
+    "this is generated by a native scrollBar widget"
+
+    scrollCode == #SB_LINEDOWN ifTrue:[
+        scrolledView scrollDown.
+        ^ self.
+    ].
+    scrollCode == #SB_LINEUP ifTrue:[
+        scrolledView scrollUp.
+        ^ self.
+    ].
+    scrollCode == #SB_LINELEFT ifTrue:[
+        scrolledView scrollLeft.
+        ^ self.
+    ].
+    scrollCode == #SB_LINERIGHT ifTrue:[
+        scrolledView scrollRight.
+        ^ self.
+    ].
+    scrollCode == #SB_PAGEDOWN ifTrue:[
+        self pageDown.
+        ^ self.
+    ].
+    scrollCode == #SB_PAGEUP ifTrue:[
+        self pageUp.
+        ^ self.
+    ].
+    scrollCode == #SB_PAGELEFT ifTrue:[
+        self pageLeft.
+        ^ self.
+    ].
+    scrollCode == #SB_PAGERIGHT ifTrue:[
+        self pageRight.
+        ^ self.
+    ].
+    scrollCode == #SB_THUMBPOSITIONVERTICAL ifTrue:[
+        scrolledView scrollVerticalToPercent:newPosition.
+        ^ self.
+    ].
+    scrollCode == #SB_THUMBPOSITIONHORIZONTAL ifTrue:[
+        scrolledView scrollHorizontalToPercent:newPosition.
+        ^ self.
+    ].
+    scrollCode == #SB_THUMBTRACKVERTICAL ifTrue:[
+        vScrollBar isSynchronous ifTrue:[
+            scrolledView scrollVerticalToPercent:newPosition.
+        ].
+        ^ self.
+    ].
+    scrollCode == #SB_THUMBTRACKHORIZONTAL ifTrue:[
+        hScrollBar isSynchronous ifTrue:[
+            scrolledView scrollHorizontalToPercent:newPosition.
+        ].
+        ^ self.
+    ].
+
+    scrollCode == #SB_ENDSCROLL ifTrue:[
+        ^ self.
+    ].
+    self halt:'unexpected scroll operation'.
+! !
+
+!ScrollableView methodsFor:'forced scroll'!
+
+pageDown
+    "page down - but only if there is a vertical scrollbar"
+
+    vScrollBar notNil ifTrue:[
+        vScrollBar pageDown
+    ]
+
+    "Created: 6.3.1997 / 18:06:23 / cg"
+    "Modified: 19.3.1997 / 16:32:34 / cg"
+!
+
+pageLeft
+    "page left - but only if there is a horizontal scrollbar"
+
+    hScrollBar notNil ifTrue:[
+        hScrollBar pageUp
+    ]
+
+    "Created: 19.3.1997 / 16:32:14 / cg"
+    "Modified: 19.3.1997 / 16:32:44 / cg"
+!
+
+pageRight
+    "page right - but only if there is a horizontal scrollbar"
+
+    hScrollBar notNil ifTrue:[
+        hScrollBar pageDown
+    ]
+
+    "Created: 19.3.1997 / 16:32:22 / cg"
+    "Modified: 19.3.1997 / 16:32:48 / cg"
+!
+
+pageUp
+    "page up - but only if there is a vertical scrollbar"
+
+    vScrollBar notNil ifTrue:[
+        vScrollBar pageUp
+    ]
+
+    "Created: 6.3.1997 / 18:06:23 / cg"
+    "Modified: 19.3.1997 / 16:32:38 / cg"
+! !
+
+!ScrollableView methodsFor:'initialization'!
+
+initStyle
+    "initialize style specifics"
+
+    <resource: #style (#'scrollBar.position' 
+                       #'scrollBar.hiding')>
+
+    super initStyle.
+
+    viewBackground := MyDefaultViewBackgroundColor. 
+    scrollBarPosition := styleSheet at:#'scrollBar.position' default:#left.
+    hideHScrollBar := hideVScrollBar := styleSheet at:#'scrollBar.hiding' default:false.
+    DefaultLevel notNil ifTrue:[self level:DefaultLevel].
+
+    scrolledViewHMargin := scrolledViewVMargin := DefaultScrolledViewMargin.
+    scrollBarVSpacing := scrollBarHSpacing := DefaultScrollBarSpacing.
+!
+
+initialize
+    "setup some default"
+
+    verticalMini := horizontalMini := false.
+    hasVerticalScrollBar := hasHorizontalScrollBar := false.
+    vScrollBarHidden := hScrollBarHidden := true.
+    super initialize.
+!
+
+realize
+    "realize (i.e. make me visible).
+     Since scrolledView may have done something to its contents
+     during init-time we had no chance yet to catch contents-
+     changes; do it now"
+
+    self setupDimensionsConfigureScrolledView:true.
+    super realize.
+
+    scrolledView notNil ifTrue:[
+        vScrollBar notNil ifTrue:[
+            vScrollBar setThumbFor:scrolledView
+        ].
+        hScrollBar notNil ifTrue:[
+            hScrollBar setThumbFor:scrolledView
+        ].
+        self updateScrollBarVisibility.
+    ].
+
+    "Modified: / 21.5.1998 / 00:52:18 / cg"
+!
+
+releaseHorizontalScrollBar
+    "destroy any horizontal scrollBar"
+
+    hScrollBar notNil ifTrue:[
+        hScrollBar destroy.
+        hScrollBar := nil
+    ].
+
+    "Modified: 6.3.1997 / 17:43:20 / cg"
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+releaseVerticalScrollBar
+    "destroy any vertical scrollBar"
+
+    vScrollBar notNil ifTrue:[
+        vScrollBar destroy.
+        vScrollBar := nil
+    ].
+
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+setScrollActions
+    "lock prevents repositioning the scroller to the
+     actual (often rounded) position while scrolling,
+     and keeps it instead at the pointer position.
+
+     (this avoids run-away scroller when scrolling
+      textviews, when the text is aligned line-wise).
+      Consider this as a kludge."
+
+    lockUpdates := false.
+
+    vScrollBar notNil ifTrue:[
+        vScrollBar scrollAction:[:position |
+            lockUpdates := true.
+            scrolledView scrollVerticalToPercent:position.
+            lockUpdates := false
+        ].
+        vScrollBar 
+            scrollUpAction:[ |sensor|
+                            sensor := self sensor.
+                            (sensor shiftDown or:[sensor ctrlDown]) ifTrue:[
+                                scrolledView scrollToTop
+                            ] ifFalse:[
+                                scrolledView scrollUp
+                            ]
+                           ].
+        vScrollBar 
+            scrollDownAction:[|sensor|
+                            sensor := self sensor.
+                            (sensor shiftDown or:[sensor ctrlDown]) ifTrue:[
+                                scrolledView scrollToBottom
+                            ] ifFalse:[
+                                scrolledView scrollDown
+                            ]
+                           ].
+    ].
+    hScrollBar notNil ifTrue:[
+        hScrollBar scrollAction:[:position |
+            lockUpdates := true.
+            scrolledView scrollHorizontalToPercent:position.
+            lockUpdates := false
+        ].
+        hScrollBar 
+            scrollUpAction:[|sensor|
+                            sensor := self sensor.
+                            (sensor shiftDown or:[sensor ctrlDown]) ifTrue:[
+                                scrolledView scrollToLeft
+                            ] ifFalse:[
+                                scrolledView scrollLeft
+                            ]
+                           ].
+        hScrollBar 
+            scrollDownAction:[|sensor|
+                            sensor := self sensor.
+                            (sensor shiftDown or:[sensor ctrlDown]) ifTrue:[
+                                scrolledView scrollToRight
+                            ] ifFalse:[
+                                scrolledView scrollRight
+                            ]
+                             ].
+    ].
+
+    scrolledView addDependent:self.
+
+    "
+     pass my keyboard input (and other subviews input) 
+     to the scrolled view ...
+    "
+    self delegate:(KeyboardForwarder toView:scrolledView).
+
+    "Modified: 6.3.1997 / 17:03:43 / cg"
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+setVertical:isVertical mini:miniV horizontal:isHorizontal mini:miniH 
+    "set scrollbar-flags as specified in the arguments"
+
+    |noMiniScrollers|
+
+    vScrollBarHidden := hScrollBarHidden := false.
+
+    hasVerticalScrollBar := isVertical.
+    hasHorizontalScrollBar := isHorizontal.
+
+    noMiniScrollers := StyleSheet at:#'scrollBar.neverMini' default:false.
+    verticalMini := miniV.
+    horizontalMini := miniH.
+
+    noMiniScrollers == true ifTrue:[
+        verticalMini := false.
+        horizontalMini := false.
+    ].
+
+!
+
+setupVertical:isVertical mini:miniV horizontal:isHorizontal mini:miniH 
+    "setup scrollbars as specified in the arguments"
+
+    self setVertical:isVertical mini:miniV horizontal:isHorizontal mini:miniH.
+    self setupViews.
+!
+
+setupViews 
+    "setup scrollbars as specified in the arguments"
+
+    |cls|
+
+    hasVerticalScrollBar ifTrue:[
+        cls := ScrollBar. 
+        verticalMini ifTrue:[
+            cls := MiniScroller
+        ].
+        (vScrollBar notNil
+        and:[vScrollBar class ~~ cls]) ifTrue:[
+            self releaseVerticalScrollBar
+        ].
+        vScrollBar isNil ifTrue:[
+            vScrollBar := cls in:self.
+            "/ realized ifTrue:[
+                vScrollBar beVisible.
+                "/ vScrollBar realize. 
+                vScrollBarHidden := false.
+            "/ ]
+        ].
+        vScrollBar thumbOrigin:0 thumbHeight:100.
+    ] ifFalse:[
+        vScrollBar notNil ifTrue:[
+            self releaseVerticalScrollBar
+        ]
+    ].
+
+    hasHorizontalScrollBar ifTrue:[
+        cls := HorizontalScrollBar. 
+        horizontalMini ifTrue:[
+            cls := HorizontalMiniScroller
+        ].
+        (hScrollBar notNil
+        and:[hScrollBar class ~~ cls]) ifTrue:[
+            self releaseHorizontalScrollBar
+        ].
+        hScrollBar isNil ifTrue:[
+            hScrollBar := cls in:self.
+            realized ifTrue:[
+                hScrollBar beVisible.
+                "/ hScrollBar realize. 
+                hScrollBarHidden := false.
+            ]
+        ].
+        hScrollBar thumbOrigin:0 thumbHeight:100.
+    ] ifFalse:[
+        hScrollBar notNil ifTrue:[
+            self releaseHorizontalScrollBar
+        ]
+    ].
+
+    scrolledView notNil ifTrue:[
+        self setScrollActions.
+    ]
+
+    "Created: / 6.3.1997 / 18:06:23 / cg"
+    "Modified: / 24.8.2001 / 14:58:26 / cg"
+! !
+
+!ScrollableView methodsFor:'layout'!
+
+horizontalScrollBarLayout:aLayout
+    hScrollBar layout:aLayout
+!
+
+scrolledViewLayout:aLayout
+    scrolledView layout:aLayout
+!
+
+setupDimensionsConfigureScrolledView:configureScrolledView
+    "set the components dimensions (i.e. layouts) according to
+     the scrollability and hidden settings.
+     This may heavily move around the parts ...
+     This method is overly complex and we should think about alternatives;
+     the reason is that it tries to shift views so that borders overlap
+     (to avoid thick borders in-between components).
+     This is very questionable, since borders are only used with 2D styles,
+     and those 2D styles are more-or-less obsolete anyway.
+     "
+
+    |usedScrolledViewHMargin usedScrolledViewVMargin 
+     usedScrollBarHSpacing usedScrollBarVSpacing hasV hasH
+     vBd         "{ Class: SmallInteger }"
+     hBd         "{ Class: SmallInteger }"
+     sBd         "{ Class: SmallInteger }"
+     wVScroll    "{ Class: SmallInteger }"
+     hHScroll    "{ Class: SmallInteger }"
+     hLeftOffs   "{ Class: SmallInteger }"
+     hRightOffs  "{ Class: SmallInteger }"
+     hTopOffs    "{ Class: SmallInteger }"
+     hBottomOffs "{ Class: SmallInteger }"
+     sLeftOffs   "{ Class: SmallInteger }"
+     sRightOffs  "{ Class: SmallInteger }"
+     sTopOffs    "{ Class: SmallInteger }"
+     sBottomOffs "{ Class: SmallInteger }"
+     vLeftOffs   "{ Class: SmallInteger }"
+     vRightOffs  "{ Class: SmallInteger }"
+     vTopOffs    "{ Class: SmallInteger }"
+     vBottomOffs "{ Class: SmallInteger }"
+     addMargin   "{ Class: SmallInteger }"
+     scrolledViewLevel
+    |
+
+    sBd := 0.
+    DefaultScrolledViewBorderWidth notNil ifTrue:[
+        sBd := DefaultScrolledViewBorderWidth.
+        scrolledView notNil ifTrue:[
+            scrolledView borderWidth:DefaultScrolledViewBorderWidth.
+        ]
+    ] ifFalse:[
+        scrolledView notNil ifTrue:[
+            sBd := scrolledView borderWidth
+        ]
+    ].
+
+    (hasV := (vScrollBar notNil and:[vScrollBarHidden not])) ifTrue:[
+        vBd := vScrollBar borderWidth.
+        wVScroll := vScrollBar widthIncludingBorder.
+    ] ifFalse:[
+        vBd := wVScroll := 0.
+    ].
+
+    (hasH := (hScrollBar notNil and:[hScrollBarHidden not])) ifTrue:[
+        hBd := hScrollBar borderWidth.
+        hHScroll := hScrollBar heightIncludingBorder.
+    ] ifFalse:[
+        hBd := hHScroll := 0.
+    ].
+
+    "/ the raw layout ...
+
+    scrolledViewLayout := ((0.0 @ 0.0) corner:(1.0@1.0)) asLayout.
+    hScrollBarLayout := ((0.0 @ 1.0) corner:(1.0@1.0)) asLayout.
+
+    "/ the painful details; mostly complicated for 2D styles,
+    "/ where the positions are setUp to overlay borders ...
+    "/ (well, with 3D styles, a single pixel error will not be noticed;
+    "/  but 2D styles are very sensitive to those;
+    "/  the code below may not work correctly with different borderWidths).
+
+"/ DefaultScrolledViewMargin := 10. "/ margin around
+"/ DefaultScrollBarSpacing := 2.    "/ space between scrolledView and scrollBar.
+
+    usedScrolledViewHMargin := self usedScrolledViewHMarginWhenHasV:hasV andHasH:hasH.
+    usedScrolledViewVMargin := self usedScrolledViewVMarginWhenHasV:hasV andHasH:hasH.
+    usedScrollBarVSpacing := self usedScrollBarVSpacingWhenHasV:hasV andHasH:hasH.
+    usedScrollBarHSpacing := self usedScrollBarHSpacingWhenHasV:hasV andHasH:hasH.
+
+    vTopOffs := 0 - vBd + usedScrolledViewVMargin + margin.
+
+    usedScrolledViewVMargin == 0 ifTrue:[
+        vBottomOffs := vBd - sBd.
+    ] ifFalse:[
+        vBottomOffs := vBd - usedScrolledViewVMargin + sBd.
+    ].
+
+
+    hLeftOffs := 0 - hBd + usedScrolledViewHMargin + margin.
+    hRightOffs := hBd - usedScrolledViewHMargin - sBd.
+
+    sLeftOffs := 0 - hBd + usedScrolledViewHMargin + margin.
+    sRightOffs := hBd - usedScrolledViewHMargin - sBd - sBd - sBd.
+
+    usedScrolledViewVMargin == 0 ifTrue:[
+        sTopOffs := 0 - sBd + margin.
+        sBottomOffs := sBd - sBd.
+    ] ifFalse:[
+        sTopOffs := 0 + usedScrolledViewVMargin + margin.
+        sBottomOffs := sBd - usedScrolledViewVMargin - sBd - sBd - sBd.
+    ].
+
+    "/ kludge - for now
+    (styleSheet at:#'scrolledView.zeroOffsets') == true ifTrue:[
+        vTopOffs := 0.
+        hLeftOffs := 0.
+        sLeftOffs := 0.
+        sTopOffs := 0.
+    ].
+
+    addMargin := 0.
+"/    DefaultScrollBarLevel == DefaultScrolledViewLevel
+"/        addMargin := 1.
+"/    ].
+
+    hasV ifTrue:[
+        scrollBarPosition == #right ifTrue:[
+            "/ right/bottom
+            vScrollBarLayout := ((1.0 @ 0.0) corner:(1.0@1.0)) asLayout.
+
+            vRightOffs := 0 - usedScrolledViewHMargin + margin "???".
+            vLeftOffs := vRightOffs - wVScroll.
+
+            sRightOffs := sRightOffs - usedScrollBarHSpacing - wVScroll + sBd.
+
+            hRightOffs := hRightOffs - wVScroll - usedScrollBarHSpacing - sBd.
+
+            sRightOffs := sRightOffs - addMargin
+        ] ifFalse:[
+            "/ left/top
+            vScrollBarLayout := ((0.0 @ 0.0) corner:(0.0@1.0)) asLayout.
+            vLeftOffs := 0 - vBd + usedScrolledViewHMargin + margin.
+            vRightOffs := vLeftOffs + wVScroll "+ margin".
+
+            sLeftOffs := vRightOffs + usedScrollBarHSpacing.
+            sRightOffs := 0 - usedScrolledViewHMargin - margin.
+            hLeftOffs := hLeftOffs + wVScroll + vBd + usedScrollBarHSpacing.
+
+            sLeftOffs := sLeftOffs + addMargin.
+        ].
+    ].
+
+    hasH ifTrue:[
+        hBottomOffs := 0 - usedScrolledViewVMargin - hBd + margin "???".
+        hTopOffs := hBottomOffs - hHScroll.
+        usedScrolledViewVMargin == 0 ifTrue:[
+            hTopOffs := hTopOffs + sBd + sBd
+        ].
+        sBottomOffs := sBottomOffs - usedScrollBarVSpacing - hHScroll.
+        (vScrollBar notNil and:[vScrollBarHidden not]) ifTrue:[
+            vBottomOffs := vBottomOffs - usedScrollBarVSpacing - hHScroll.
+        ].
+
+        sBottomOffs := sBottomOffs - addMargin.
+        hRightOffs := hRightOffs - addMargin.
+    ].
+
+    (hScrollBar notNil
+     and:[ hScrollBar borderWidth == 0 
+     and:[sBd ~~ 0
+     and:[scrollBarPosition == #right]]]) ifTrue:[
+        hRightOffs := hRightOffs + sBd + sBd.
+    ].
+
+    scrolledView notNil ifTrue:[
+        scrolledViewLayout 
+            leftOffset:sLeftOffs
+            rightOffset:sRightOffs
+            topOffset:sTopOffs
+            bottomOffset:sBottomOffs.
+
+        configureScrolledView ifTrue:[
+            ((hideVScrollBar or:[hideHScrollBar]) not
+            and:[(hScrollBar isNil or:[hScrollBarHidden])
+            and:[(vScrollBar isNil or:[vScrollBarHidden])]]) ifTrue:[
+                scrolledViewLevel := 0
+            ] ifFalse:[
+                (hScrollBar isNil and:[vScrollBar isNil]) ifTrue:[
+                    scrolledViewLevel := 0
+                ] ifFalse:[
+                    scrolledViewLevel := DefaultScrolledViewLevel.
+                ]
+            ].
+            scrolledView level:scrolledViewLevel
+        ].
+        self scrolledViewLayout:scrolledViewLayout.
+    ].
+    hasH ifTrue:[
+        hScrollBarLayout 
+            leftOffset:hLeftOffs
+            rightOffset:hRightOffs
+            topOffset:hTopOffs
+            bottomOffset:hBottomOffs.
+
+        hScrollBar level:DefaultScrollBarLevel.
+        self horizontalScrollBarLayout:hScrollBarLayout.
+
+"/        scrollBarPosition == #right ifTrue:[
+"/            "/ right/bottom
+"/            hScrollBar viewGravity:#SouthWest.
+"/        ] ifFalse:[
+"/            hScrollBar viewGravity:#NorthWest.
+"/        ]
+    ].
+    (hasV and:[vScrollBar notNil and:[vScrollBarHidden not]]) ifTrue:[
+        vScrollBarLayout 
+            leftOffset:vLeftOffs
+            rightOffset:vRightOffs
+            topOffset:vTopOffs
+            bottomOffset:vBottomOffs.
+
+        vScrollBar level:DefaultScrollBarLevel.
+        self verticalScrollBarLayout:vScrollBarLayout.
+
+"/        scrollBarPosition == #right ifTrue:[
+"/            "/ right/bottom
+"/            vScrollBar viewGravity:#NorthEast.
+"/        ] ifFalse:[
+"/            vScrollBar viewGravity:#NorthWest.
+"/        ]
+    ].
+
+    "Created: / 21.5.1998 / 00:48:35 / cg"
+    "Modified: / 11.2.2000 / 00:00:36 / cg"
+!
+
+usedScrollBarHSpacingWhenHasV:hasV andHasH:hasH
+    "return the horizontal spacing between scrollBar and scrolledView.
+     Made a separate method to allow subclasses to overwrite this (subCanvas)"
+
+    ^ hasV ifTrue:[scrollBarHSpacing] ifFalse:[0]
+
+!
+
+usedScrollBarVSpacingWhenHasV:hasV andHasH:hasH
+    "return the vertical spacing between scrollBar and scrolledView.
+     Made a separate method to allow subclasses to overwrite this (subCanvas)"
+
+    ^ hasH ifTrue:[scrollBarVSpacing] ifFalse:[0]
+
+!
+
+usedScrolledViewHMarginWhenHasV:hasV andHasH:hasH
+    "return the horizontal margin around (outer margin).
+     Made a separate method to allow subclasses to overwrite this (subCanvas)"
+
+    ^ scrolledViewHMargin
+
+!
+
+usedScrolledViewVMarginWhenHasV:hasV andHasH:hasH
+    "return the vertical margin around (outer margin).
+     Made a separate method to allow subclasses to overwrite this (subCanvas)"
+
+    ^ scrolledViewVMargin
+
+!
+
+verticalScrollBarLayout:aLayout
+    vScrollBar layout:aLayout
+! !
+
+!ScrollableView methodsFor:'queries'!
+
+isHorizontalScrollable
+    "return true if I am horizontally scrollable"
+
+    ^ hScrollBar notNil
+
+    "Modified: 6.3.1997 / 17:03:49 / cg"
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+isScrollWrapper
+     "answer true if this view wraps a possibly larger view and has scroll bars"
+
+     ^ true
+
+    "Created: / 20.6.1998 / 14:15:42 / cg"
+!
+
+isScrolling
+    "true, if scrollbars thumb is being moved (by user)"
+
+    ^ (vScrollBar notNil and:[vScrollBar isScrolling])
+      or:[
+             (hScrollBar notNil and:[hScrollBar isScrolling])
+         ]
+!
+
+isVerticalScrollable
+    "return true if I am vertically scrollable"
+
+    ^ vScrollBar notNil
+
+    "Modified: 6.3.1997 / 17:03:52 / cg"
+    "Created: 6.3.1997 / 18:06:23 / cg"
+!
+
+preferredExtent
+    "return my preferredExtent from the scrolledViews prefExtent
+     plus the size of the scrollBar"
+
+    |slavesPref prefX prefY margin|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    scrolledView notNil ifTrue:[ 
+        slavesPref := scrolledView preferredExtent.
+        prefX := slavesPref x.
+        prefY := slavesPref y.
+        margin := (DefaultScrolledViewMargin * 2) + DefaultScrollBarSpacing.
+        vScrollBar notNil ifTrue:[
+            prefX := prefX + vScrollBar width + margin.
+        ].
+        hScrollBar notNil ifTrue:[
+            prefY := prefY + hScrollBar height + margin.
+        ].
+
+        ^ prefX @ prefY.
+    ].
+
+    ^ super preferredExtent.
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+    "Modified: 6.3.1997 / 22:34:09 / cg"
+!
+
+preferredExtentForLines:numLines cols:numCols
+    "return my preferredExtent from the scrolledViews prefExtent
+     plus the size of the scrollBar"
+
+    |slavesPref prefX prefY|
+
+    "/ If I have an explicit preferredExtent ..
+
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    scrolledView notNil ifTrue:[ 
+        slavesPref := scrolledView preferredExtentForLines:numLines cols:numCols.
+        prefX := slavesPref x.
+        prefY := slavesPref y.
+        vScrollBar notNil ifTrue:[
+            prefX := prefX + vScrollBar width + (DefaultScrolledViewMargin * 2) + DefaultScrollBarSpacing.
+        ].
+        hScrollBar notNil ifTrue:[
+            prefY := prefY + hScrollBar height + (DefaultScrolledViewMargin * 2) + DefaultScrollBarSpacing.
+        ].
+
+        ^ prefX @ prefY.
+    ].
+
+    ^ super preferredExtent.
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+    "Modified: 6.3.1997 / 22:34:30 / cg"
+!
+
+specClass
+    "redefined, since my subclasses also want ScrollableViewSpecs"
+
+    ^ ScrollableViewSpec
+
+    "Modified: / 31.10.1997 / 19:48:48 / cg"
+! !
+
+!ScrollableView methodsFor:'slave-view messages'!
+
+clear
+    "convenient method: forward this to the scrolledView"
+
+    scrolledView notNil ifTrue:[scrolledView clear]
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+    "Modified: 19.3.1997 / 16:34:19 / cg"
+!
+
+clearView
+    "convenient method: forward this to the scrolledView"
+
+    scrolledView notNil ifTrue:[scrolledView clearView]
+!
+
+doesNotUnderstand:aMessage
+    "this is funny: all message we do not understand, are passed
+     on to the scrolledView - so we do not have to care for all
+     possible messages ...(thanks to the Message class)"
+
+     scrolledView notNil ifTrue:[
+         ^ aMessage sendTo:scrolledView.
+     ].
+     ^ super doesNotUnderstand:aMessage
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+    "Modified: 6.3.1997 / 18:38:54 / cg"
+!
+
+flash
+    "convenient method: forward this to the scrolledView"
+
+    scrolledView notNil ifTrue:[scrolledView flash]
+!
+
+font:aFont
+    super font:aFont.
+    scrolledView notNil ifTrue:[
+        scrolledView font:aFont
+    ]
+!
+
+leftButtonMenu
+    "return scrolledViews leftbuttonmenu"
+
+    scrolledView isNil ifTrue:[^ nil].
+    ^ scrolledView leftButtonMenu
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+!
+
+leftButtonMenu:aMenu
+    "pass on leftbuttonmenu to scrolledView"
+
+    scrolledView leftButtonMenu:aMenu
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+!
+
+middleButtonMenu
+    "return scrolledViews middlebuttonmenu"
+
+    scrolledView isNil ifTrue:[^ nil].
+    ^ scrolledView middleButtonMenu
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+!
+
+middleButtonMenu:aMenu
+    "pass on middlebuttonmenu to scrolledView"
+
+    scrolledView notNil ifTrue:[
+        scrolledView middleButtonMenu:aMenu
+    ].
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+
+
+
+
+!
+
+model
+    "return my scrolledViews model"
+
+    scrolledView isNil ifTrue:[^ nil].
+    ^ scrolledView model
+
+    "Modified: 1.3.1997 / 01:38:07 / cg"
+    "Created: 6.3.1997 / 18:06:24 / cg"
+!
+
+model:aModel
+    "forward model change to my scrolledViews"
+
+    ^ scrolledView model:aModel
+
+    "Modified: 5.6.1996 / 17:09:50 / cg"
+    "Created: 6.3.1997 / 18:06:24 / cg"
+!
+
+requestFocus
+    scrolledView notNil ifTrue:[
+        ^ scrolledView requestFocus
+    ].
+    ^  false.
+!
+
+rightButtonMenu
+    "return scrolledViews rightbuttonmenu"
+
+    scrolledView isNil ifTrue:[^ nil].
+    ^ scrolledView rightButtonMenu
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+!
+
+rightButtonMenu:aMenu
+    "pass on rightbuttonmenu to scrolledView"
+
+    scrolledView rightButtonMenu:aMenu
+
+    "Created: 6.3.1997 / 18:06:24 / cg"
+! !
+
+!ScrollableView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ScrollableView.st,v 1.152 2014-05-08 00:25:15 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/ScrollableView.st,v 1.152 2014-05-08 00:25:15 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Scroller.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,2766 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+View subclass:#Scroller
+	instanceVariableNames:'thumbOrigin thumbHeight thumbColor thumbFrameColor scrollAction
+		orientation thumbFrame thumbLevel scrolling pressOffset
+		synchronousOperation shadowForm lightForm inset thumbShadowColor
+		thumbLightColor thumbEdgeStyle thumbHalfShadowColor
+		thumbHalfLightColor thumbEnteredColor thumbFrameSizeDifference
+		tallyLevel tallyMarks fixThumbHeight frameBeforeMove ghostColor
+		ghostFrameColor ghostLevel rangeStart rangeEnd rangeStep entered
+		thumbActiveLevel originBeforeMove thumbImage enabled keyboardStep
+		autoRepeat repeatBlock initialRepeatDelay repeatDelay
+		lastMousePosition thumbActiveColor'
+	classVariableNames:'HandleShadowForm HandleLightForm DefaultViewBackground
+		DefaultShadowColor DefaultLightColor DefaultThumbColor
+		DefaultThumbShadowColor DefaultThumbLightColor
+		DefaultThumbHalfShadowColor DefaultThumbHalfLightColor
+		DefaultHalfShadowColor DefaultHalfLightColor DefaultTallyMarks
+		DefaultTallyLevel DefaultLevel DefaultBorderWidth
+		DefaultThumbLevel DefaultInset DefaultThumbFrameColor
+		DefaultGhostColor DefaultGhostFrameColor DefaultGhostLevel
+		DefaultFixThumbHeight DefaultEdgeStyle DefaultFullViewBackground
+		DefaultThumbEnteredColor DefaultThumbActiveColor
+		DefaultThumbActiveLevel SnapBackDistance DefaultMiddleButtonJump
+		NewCursors DefaultThumbImage HandleImage DefaultHScrollerHeight
+		DefaultVScrollerWidth DefaultStopPagerAtThumb DefaultTallyInset
+		MinThumbSize DefaultTallyDistance'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!Scroller class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this class implements the scroller for scrollbars.
+    it can also be used by itself for scrollbars without step-buttons.
+    When moved, either a predefined action is performed (scrollAction),
+    or a model is informed via the changeMsg (which is #value: by default).
+
+    The scroller can work synchronous (i.e. every move leads to an immediate evaluation
+    of the action, or asynchronous (i.e. perform action on end-of move).
+    By default, scrollers are synchronous. Asynchronous operation makes sense, 
+    if the scroll operation (redraw) is expensive and takes a long time.
+
+    This class is used both for concrete instances (vertical scrollers)
+    and as an abstract superclass for horizontalScrollers, sliders and
+    miniScrollers.
+
+  range:
+    the value passed to the model or via the action blocks is scaled according
+    to the min/maxRange instance variables.
+    These default to 0..100 for percentage values.
+    It does not make sense to change the range for scrollbar-scrollers,
+    but may be useful with Sliders or in special applications.
+
+  style stuff:
+
+    Beside the obvious 3D rectangle, a scroller may draw a know-form
+    (as in NeXT) or little tally marks (as on SGI) in itself.
+    These are controlled by the shadowForm, lightForm, tallyLevel and tallyMarks
+    instance variables. All of this is initialized from the styleSheet.
+
+  [Instance variables:]
+
+    thumbOrigin                 <Number>        origin of thumb (in percent)
+    thumbHeight                 <Number>        height of thumb (in percent)
+    thumbColor                  <Color>         color of thumb
+    thumbFrameColor             <Color>         color of the frame around the thumb
+    scrollAction                <Block>         1 arg block to be evaluated when scrolled
+						(arg is position in percent)
+    orientation                 <Symbol>        #horizontal or #vertical
+    thumbFrame                  <Rectangle>     frame of thumb in pixels (cached)
+    thumbLevel                  <Number>        level of thumb if 3d
+    scrolling                   <Boolean>       true during scroll
+    pressOffset                 <Number>        temporary (offset into frame when move started)
+    synchronousOperation        <Boolean>       true if synchronous (i.e. dont wait till release
+						to perform action)
+    shadowForm                  <Form>          bitmap of knob if any (shadow part)
+    lightForm                   <Form>          bitmap of knob if any (light part)
+    inset                       <Integer>       number of pixels to inset thumb from view borders
+    thumbShadowColor            <Color>         color do draw dark parts of thumb
+    thumblightColor             <Color>         color to draw light parts of thumb
+    thumbEdgeStyle              <SymbolOrNil>   #soft or nil
+    thumbHalfShadowColor        <Color>         used to draw smooth edges
+    thumbHalfLightColor         <Color>         used to draw smooth edges
+    thumbFrameSizeDifference    <Integer>       number of pixels the thumb is larger than 
+						it should be (can be negative for mswin-style)
+    tallyLevel                  <Integer>       if not zero, specifies if tally-marks should
+						go into or out of the display (actually only <0/>0 is checked)
+						I dont know of a better word for these ...
+    tallyMarks                  <Integer>       number of tally marks
+    fixThumbHeight              <Boolean>       perform 'wrong' height computation a la mswindows
+    rangeStart                  <Number>        the range of the scroller
+    rangeEnd                                    (defaults to 0..100)
+    rangeStep                                   not currently implemented
+
+  [style settings:]
+
+    scrollerLevel               <Integer>       the level of the scroller w.r.t. its enclosing view
+    scrollerBorderWidth         <Integer>       the borderWidth (ignored for 3D styles)
+
+    scrollerViewBackground      <Color>         the viewBackground (color or image)
+    scrollerShadowColor         <Color>         the color of 3D shadowed edges (ignored in 2D styles)
+    scrollerLightColor          <Color>         the color of 3D lighted edges (ignored in 2D styles)
+
+    scrollerThumbColor          <Color>         the thumbs color (color or image)
+    scrollerThumbShadowColor    <Color>         the color of the thumbs shadowed edges (ignored in 2D styles)
+    scrollerThumbLightColor     <Color>         the color of the thumbs shadowed edges (ignored in 2D styles)
+    scrollerThumbEdgeStyle      <Symbol>        the edge style for the thumb (#soft or nil)
+    scrollerThumbLevel          <Integer>       the 3D height of the thumb
+    scrollerThumbHalfShadowColor<Color>         the halfShadow for soft edged thumbs
+    scrollerThumbHalfLightColor <Color>         the halfLight for soft edged thumbs
+    scrollerThumbFrameColor     <Color>         if non-nil, a rectangle is drawn around the thumb is this color
+    scrollerThumbInset          <Integer>       inset of thumb from the scrollers boundary
+    scrollerThumbFixHeight      <Boolean>       if true, use a fix thumb height (as in mswindows)
+    scrollerGhostColor          <Color>         the color in which a ghost-rectangle is drawn
+    scrollerGhostFrameColor     <Color>         if non-nil, a rectangle is drawn around the ghost is this color
+    scrollerGhostLevel          <Color>         the 3D level of the ghost rectangle
+    scrollerNTallyMarks         <Integer>       number of tally-marks to draw on the thumb
+    scrollerTallyLevel          <Integer>       the 3D level of any tally marks
+    scrollerSnapBack            <Boolean>       win95 behavior: snap back to original position if scrollers view
+						is left by mouse (with some distance)
+    scrollerMiddleButtonJump    <Boolean>       xterm behavior: middle button has shift-click behavior
+						(positions absolute to click position)
+
+    notice: for mswindows style, we force a WRONG thumb-frame
+    computation, to make the thumb have constant size; 
+    if you dont like that (I do not :-), 
+    set scrollerThumbFixHeight to false (in the StyleSheet).
+
+    [author:]
+	Claus Gittinger
+
+    [see also:]
+	ScrollBar
+	ScrollableView HVScrollableView
+"
+!
+
+examples
+"
+    basic scroller setup:
+									[exBegin]
+	|top s|
+
+	top := StandardSystemView new extent:200@200.
+	s := Scroller in:top.
+	s origin:(0.0@0.0) corner:(20@1.0).
+	s thumbHeight:10.  'percent'.     
+	top open
+									[exEnd]
+
+    setting its thumb-height:
+									[exBegin]
+	|top s|
+
+	top := StandardSystemView new extent:200@200.
+	s := Scroller in:top.
+	s origin:(0.0@0.0) corner:(20@1.0).
+	s thumbHeight:50.  'percent'.     
+	top open
+									[exEnd]
+
+    setting its thumb-origin:
+									[exBegin]
+	|top s|
+
+	top := StandardSystemView new extent:200@200.
+	s := Scroller in:top.
+	s origin:(0.0@0.0) corner:(20@1.0).
+	s thumbHeight:10.  'percent'.     
+	s thumbOrigin:30.  'percent'.     
+	top open
+									[exEnd]
+
+    a scroller with action block (ST/X style):
+									[exBegin]
+	|top s|
+
+	top := StandardSystemView new extent:200@200.
+	s := Scroller in:top.
+	s origin:(0.0@0.0) corner:(20@1.0).
+	s thumbHeight:10.  'percent'.     
+	s scrollAction:[:percent | Transcript show:'moved to: '; showCR:percent asFloat].
+	top open
+									[exEnd]
+
+    setting its range:
+									[exBegin]
+	|top s|
+
+	top := StandardSystemView new extent:200@200.
+	s := Scroller in:top.
+	s origin:(0.0@0.0) corner:(20@1.0).
+	s thumbHeight:10.  'percent'.     
+	s scrollAction:[:percent | Transcript show:'moved to: '; showCR:percent asFloat].
+	s start:0 stop:1.
+	top open
+									[exEnd]
+
+    create a scroller in its default extent and have it positioned
+    at the side; beside another view:
+									[exBegin]
+	|top s v|
+
+	top := StandardSystemView new extent:200@200.
+	s := Scroller in:top.
+	s origin:(0.0@0.0) corner:(0.0@1.0).
+	s rightInset:(s preferredExtent x negated).
+	s thumbHeight:10.
+	s level:1.
+
+	v := View in:top.
+	v origin:0.0@0.0 corner:1.0@1.0.
+	v leftInset:(s preferredExtent x).
+	v viewBackground:Color red.
+	v level:2.
+
+	top open
+									[exEnd]
+
+    using a model (ST-80 style):
+									[exBegin]
+	|top s m|
+
+	m := 0 asValue.
+	InspectorView openOn:m monitor:'value'.  'look at value'.
+
+	top := StandardSystemView new extent:200@200.
+	s := Scroller in:top.
+	s origin:(0.0@0.0) corner:(20@1.0).
+	s thumbHeight:10.  'percent'.     
+	s model:m.
+	top open
+									[exEnd]
+
+    using a different changeSelector:
+									[exBegin]
+	|top s1 s2 m|
+
+	m := Plug new.
+	m respondTo:#value1: with:[:v | Transcript show:'scroller 1 moved to: '; showCR:v].
+	m respondTo:#value2: with:[:v | Transcript show:'scroller 2 moved to: '; showCR:v].
+
+	top := StandardSystemView new extent:200@200.
+	s1 := Scroller in:top.
+	s1 origin:(0.0@0.0) corner:(20@1.0).
+	s1 thumbHeight:10.  'percent'.     
+	s1 model:m; change:#value1:.
+
+	s2 := Scroller in:top.
+	s2 origin:(30@0.0) corner:(50@1.0).
+	s2 thumbHeight:10.  'percent'.     
+	s2 model:m; change:#value2:.
+	top open
+									[exEnd]
+"
+! !
+
+!Scroller class methodsFor:'defaults'!
+
+handleLightFormOn:aDisplay
+    "answer the form used for the handles light area;
+     cache the one for Display for the next round"
+
+    |f|
+
+    ((aDisplay == Display) and:[HandleLightForm notNil]) ifTrue:[
+        ^ HandleLightForm
+    ].
+    f := Smalltalk imageFromFileNamed:'HandleLight.xbm' forClass:self.
+    f notNil ifTrue:[
+        f := f onDevice:aDisplay
+    ] ifFalse:[
+        f := Form width:8 height:8 fromArray:#[2r00000000
+                                               2r00000010
+                                               2r00000011
+                                               2r00000011
+                                               2r00000011
+                                               2r00000011
+                                               2r00000110
+                                               2r00111100]
+                                              onDevice:aDisplay
+    ].
+    (aDisplay == Display) ifTrue:[
+        HandleLightForm := f
+    ].
+    ^ f
+
+    "Modified: 23.10.2031 / 01:00:00 / cg"
+!
+
+handleShadowFormOn:aDisplay
+    "answer the form used for the handles shadow area;
+     cache the one for Display for the next round"
+
+    |f|
+
+    ((aDisplay == Display) and:[HandleShadowForm notNil]) ifTrue:[
+        ^ HandleShadowForm
+    ].
+    f := Smalltalk imageFromFileNamed:'HandleShadow.xbm' forClass:self.
+    f notNil ifTrue:[
+        f := f onDevice:aDisplay
+    ] ifFalse:[
+        f := Form width:8 height:8 fromArray:#[2r00111100
+                                               2r01100000
+                                               2r11000000
+                                               2r11000000
+                                               2r11000000
+                                               2r11000000
+                                               2r01000000
+                                               2r00000000]
+                                           onDevice:aDisplay
+    ].
+    (aDisplay == Display) ifTrue:[
+        HandleShadowForm := f
+    ].
+    ^ f
+
+    "Modified: 19.12.1996 / 01:00:00 / cg"
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'scroller.viewBackground' #'scroller.fullViewBackground'
+                       #'scroller.thumbColor' 
+                       #'scroller.shadowColor' #'scroller.lightColor'
+                       #'scroller.thumbShadowColor' #'scroller.thumbLightColor'
+                       #'scroller.thumbHalfShadowColor' #'scroller.thumbHalfLightColor'
+                       #'scroller.thumbFrameColor' #'scroller.ghostColor'
+                       #'scroller.ghostLevel'  #'scroller.ghostFrameColor'
+                       #'scroller.NTallyMarks' #'scroller.tallyLevel' #'scroller.tallyInset'
+                       #'scroller.level' #'scroller.borderWidth'
+                       #'scroller.thumbLevel' #'scroller.thumbInset'
+                       #'scroller.thumbFixHeight' #'scroller.thumbEdgeStyle'
+                       #'scroller.thumbEnteredColor' #'scroller.thumbActiveLevel'
+                       #'scroller.thumbActiveColor' 
+                       #'scroller.middleButtonJump' 
+                       #'scroller.newCursors' 
+                       #'scroller.thumbImage' #'scroller.handleImage'
+                       #'scroller.vScrollerWidth' #'scroller.hScrollerHeight'
+                       #'scroller.stopPagerAtThumb' 
+                     )>
+
+    DefaultViewBackground := StyleSheet colorAt:#'scroller.viewBackground'.
+    DefaultFullViewBackground := StyleSheet colorAt:#'scroller.fullViewBackground'.
+    DefaultThumbColor := StyleSheet colorAt:#'scroller.thumbColor'.
+    DefaultThumbEnteredColor := StyleSheet colorAt:#'scroller.thumbEnteredColor'.
+    DefaultThumbActiveColor := StyleSheet colorAt:#'scroller.thumbActiveColor'.
+    DefaultShadowColor := StyleSheet colorAt:#'scroller.shadowColor'.
+    DefaultLightColor := StyleSheet colorAt:#'scroller.lightColor'.
+    DefaultThumbShadowColor := StyleSheet colorAt:#'scroller.thumbShadowColor'.
+    DefaultThumbLightColor := StyleSheet colorAt:#'scroller.thumbLightColor'.
+    DefaultThumbHalfShadowColor := StyleSheet colorAt:#'scroller.thumbHalfShadowColor'.
+    DefaultThumbHalfLightColor := StyleSheet colorAt:#'scroller.thumbHalfLightColor'.
+    DefaultThumbFrameColor := StyleSheet colorAt:#'scroller.thumbFrameColor'.
+    DefaultGhostColor := StyleSheet colorAt:#'scroller.ghostColor' default:nil.
+    DefaultGhostFrameColor := StyleSheet colorAt:#'scroller.ghostFrameColor' default:nil.
+    DefaultGhostLevel := StyleSheet at:#'scroller.ghostLevel' default:0.
+    DefaultTallyMarks := StyleSheet at:#'scroller.NTallyMarks' default:0.
+
+    DefaultTallyLevel := DefaultTallyInset := 0.
+    DefaultTallyMarks ~~ 0 ifTrue:[
+        DefaultTallyLevel := StyleSheet at:#'scroller.tallyLevel' default:1.
+        DefaultTallyInset := StyleSheet at:#'scroller.tallyInset' default:0.
+        DefaultTallyDistance := StyleSheet at:#'scroller.tallyDistance'.
+    ].
+    DefaultLevel := StyleSheet at:#'scroller.level' default:0.
+    DefaultBorderWidth := StyleSheet at:#'scroller.borderWidth' default:(StyleSheet at:#'borderWidth').
+    DefaultThumbLevel := StyleSheet at:#'scroller.thumbLevel' default:0.
+    DefaultThumbActiveLevel := StyleSheet at:#'scroller.thumbActiveLevel' default:DefaultThumbLevel.
+    DefaultInset := StyleSheet at:#'scroller.thumbInset' default:0.
+    DefaultFixThumbHeight := StyleSheet at:#'scroller.thumbFixHeight' default:false.
+    DefaultEdgeStyle := StyleSheet at:#'scroller.thumbEdgeStyle'.
+    DefaultMiddleButtonJump := StyleSheet at:#'scroller.middleButtonJump' default:false.
+    NewCursors := StyleSheet at:#'scroller.newCursors' default:true.
+    DefaultThumbImage := StyleSheet at:#'scroller.thumbImage'.
+    HandleImage := StyleSheet at:#'scroller.handleImage'.
+
+    DefaultVScrollerWidth  := StyleSheet at:#'scroller.vScrollerWidth' default:nil.
+    DefaultHScrollerHeight := StyleSheet at:#'scroller.hScrollerHeight' default:nil.
+
+    StyleSheet fileReadFailed ifTrue:[
+        DefaultViewBackground := Grey.
+        DefaultThumbColor := Color white.
+        DefaultThumbFrameColor := Color black.
+        DefaultInset := 1.
+    ].
+
+    DefaultStopPagerAtThumb := StyleSheet at:#'scroller.stopPagerAtThumb' default:true.
+
+    SnapBackDistance := StyleSheet at:#'scroller.snapBackDistance' default:30.
+    MinThumbSize := StyleSheet at:#'scroller.minThumbSize' default:8.
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: / 28.4.1999 / 19:23:24 / cg"
+! !
+
+!Scroller methodsFor:'accessing'!
+
+keyboardStep
+    "return the scrollers keyboard step. If non-nil,
+     thats the stepping value used with cursorUp/cursorDown keys.
+     (not used with Scrollers, but provided for subclasses)"
+
+    ^ keyboardStep
+!
+
+keyboardStep:aNumber
+    "set the scrollers keyboard step. If non-nil,
+     thats the stepping value used with cursorUp/cursorDown keys.
+     (not used with Scrollers, but provided for subclasses)"
+
+    keyboardStep := aNumber
+!
+
+start 
+    "return the scrollers range min.
+     (not used with Scrollers, but provided for subclasses)"
+
+    ^ rangeStart
+!
+
+start:start
+    "set the scrollers range min.
+     (not used with Scrollers, but provided for subclasses)"
+
+    self start:start stop:rangeEnd.
+
+    "Modified: 25.5.1996 / 11:28:22 / cg"
+!
+
+start:start stop:stop
+    "set the range.
+     (not used with Scrollers, but provided for subclasses)"
+
+    |org|
+
+    org := self thumbOrigin.
+
+    rangeStart := start.
+    rangeEnd := stop.
+
+    rangeStart = rangeEnd ifTrue:[
+        self error:'invalid slider range (start = stop)' mayProceed:true.
+        rangeEnd := rangeStart + (rangeStep ? 1).
+    ].
+
+    org < rangeStart ifTrue:[
+        org := rangeStart
+    ] ifFalse:[
+        org > rangeEnd ifTrue:[
+            org := rangeEnd
+        ]
+    ].
+    self thumbOrigin:org.
+
+    "Modified: / 21.1.1998 / 19:22:07 / cg"
+!
+
+start:start stop:stop step:step
+    "set the range.
+     (not used with Scrollers, but provided for subclasses)"
+
+    self start:start stop:stop.
+    rangeStep := step.
+
+    "Created: 25.5.1996 / 11:24:09 / cg"
+    "Modified: 25.5.1996 / 11:27:43 / cg"
+!
+
+step
+    "return the scrollers range step.
+     (not used with Scrollers, but provided for subclasses)"
+
+    ^ rangeStep
+!
+
+step:step
+    "set the scrollers range step.
+     (not used with Scrollers, but provided for subclasses)"
+
+    rangeStep := step
+!
+
+stop
+    "return the scrollers range max.
+     (not used with Scrollers, but provided for subclasses)"
+
+    ^ rangeEnd
+!
+
+stop:stop
+    "set the scrollers range max.
+     (not used with Scrollers, but provided for subclasses)"
+
+    self start:rangeStart stop:stop.
+
+    "Modified: 25.5.1996 / 11:28:35 / cg"
+!
+
+thumbFrame
+    "return the area used by the thumbFrame (in device coordinates).
+     Allows access to the thumbs physical screen position, for
+     example to position a label below (see Slider-Examples)"
+
+    thumbFrame isNil ifTrue:[ self computeThumbFrame].
+    ^ thumbFrame
+!
+
+thumbHeight
+    "answer the thumbs height (in percent by default)"
+
+    ^ thumbHeight * (rangeEnd - rangeStart) abs / 100
+
+    "Modified: / 21.1.1998 / 19:25:33 / cg"
+!
+
+thumbHeight:aNumber 
+    "set the thumbs height (in percent by default)"
+
+    |newHeight realNewHeight oldFrame nBg|
+
+    newHeight := aNumber / ((rangeEnd - rangeStart) abs / 100).
+
+    (newHeight > 100) ifTrue:[
+        realNewHeight := 100
+    ] ifFalse:[
+        realNewHeight := newHeight
+    ].
+    ((realNewHeight ~= thumbHeight) or:[thumbFrame isNil]) ifTrue:[
+        thumbHeight := realNewHeight.
+
+        (DefaultFullViewBackground notNil
+        and:[DefaultViewBackground notNil
+        and:[DefaultFullViewBackground ~~ DefaultViewBackground]]) ifTrue:[
+            realNewHeight >= 100 ifTrue:[
+                nBg := DefaultFullViewBackground.
+            ] ifFalse:[
+                nBg := DefaultViewBackground
+            ].
+            nBg := nBg onDevice:self graphicsDevice.
+            nBg ~~ viewBackground ifTrue:[
+                self viewBackground:nBg.
+                self invalidate.
+            ]
+        ].
+
+        shown ifTrue:[
+            oldFrame := thumbFrame.
+            self computeThumbFrame.
+            oldFrame ~= thumbFrame ifTrue:[
+                self invalidate.
+            ]
+        ] ifFalse:[
+            thumbFrame := nil.
+            self invalidate.
+        ].
+    ]
+
+    "Modified: / 21.10.1998 / 22:35:31 / cg"
+!
+
+thumbOrigin
+    "answer the thumbs origin (in percent by default)"
+
+    |org|
+
+    org := thumbOrigin * (rangeEnd - rangeStart) / 100 + rangeStart.
+    rangeStep notNil ifTrue:[
+	org := org roundTo:rangeStep.
+	rangeStep isInteger ifTrue:[
+	    org := org asInteger
+	]
+    ].
+    ^ org
+
+    "Modified: / 21.1.1998 / 19:13:48 / cg"
+!
+
+thumbOrigin:aNumber 
+    "set the thumbs origin (in percent by default)"
+
+    |org newOrigin realNewOrigin 
+     oldFrame oldTop oldBot oldLeft oldRight
+     thumbTop thumbBot thumbLeft thumbRight
+     tH "{ Class: SmallInteger }"
+     tW "{ Class: SmallInteger }"
+     delta needFullDraw 
+     bgLeft bgTop bgWidth bgHeight|
+
+    aNumber isNil ifTrue:[
+        newOrigin := 0
+    ] ifFalse:[
+        org := aNumber.
+        rangeStep notNil ifTrue:[
+            org := org roundTo:rangeStep.
+            rangeStep isInteger ifTrue:[
+                org := org asInteger
+            ]
+        ].
+        newOrigin := (org - rangeStart) asFloat / (rangeEnd - rangeStart / 100).
+    ].
+
+    ((newOrigin + thumbHeight) > 100) ifTrue:[
+        realNewOrigin := 100 - thumbHeight
+    ] ifFalse: [
+        realNewOrigin := newOrigin
+    ].
+    (realNewOrigin > 100) ifTrue:[
+        realNewOrigin := 100
+    ] ifFalse: [
+        (realNewOrigin < 0) ifTrue:[
+            realNewOrigin := 0
+        ]
+    ].
+    ((realNewOrigin ~= thumbOrigin) or:[thumbFrame isNil]) ifTrue:[
+        thumbOrigin := realNewOrigin.
+
+        shown ifTrue:[
+            oldFrame := thumbFrame.
+            self computeThumbFrame.
+            (thumbHeight = 100) ifTrue:[
+                "/ full: don't draw
+                ^ self
+            ].
+
+            (thumbFrame ~= oldFrame) ifTrue:[
+                oldFrame isNil ifTrue:[
+                    self invalidate.
+                    ^ self
+                ].
+                tH := thumbFrame height.
+                tW := thumbFrame width.
+
+                oldTop := oldFrame top.
+                oldBot := oldTop + tH.
+                oldLeft := oldFrame left.
+                oldRight := oldLeft + tW.
+
+                thumbTop := thumbFrame top.
+                thumbBot := thumbTop + tH.
+                thumbLeft := thumbFrame left.
+                thumbRight := thumbLeft + tW.
+
+                needFullDraw := self exposeEventPending
+                                or:[((orientation == #vertical) and:[oldBot >= height])
+                                or:[((orientation ~~ #vertical) and:[oldRight >= width])]].
+
+                needFullDraw ifTrue:[
+                    "
+                     cannot copy since thumb was below the end
+                     or may be not available for the copy
+                    "
+                    self invalidate.
+                    ^ self
+                ].
+
+                self catchExpose.
+                "
+                 copy the thumbs pixels
+                "
+                (orientation == #vertical) ifTrue:[
+                    self 
+                        copyFrom:self 
+                        x:thumbLeft y:oldTop
+                        toX:thumbLeft y:thumbTop
+                        width:tW height:tH
+                        async:true.
+                ] ifFalse:[
+                    self 
+                        copyFrom:self 
+                        x:oldLeft y:thumbTop
+                        toX:thumbLeft y:thumbTop
+                        width:tW height:tH
+                        async:true.
+                ].
+
+                "
+                 clear some of the previous thumbs area to background
+                "
+                (orientation == #vertical) ifTrue:[
+                    bgLeft := thumbLeft.
+                    bgWidth := tW.
+                    oldTop > thumbTop ifTrue:[
+                        delta := oldTop - thumbTop.
+                        oldTop > thumbBot ifTrue:[
+                            bgTop := oldTop.
+                            bgHeight := tH + 1
+                        ] ifFalse:[
+                            bgTop := thumbBot.
+                            bgHeight := delta
+                        ]
+                    ] ifFalse:[
+                        delta := thumbTop - oldTop.
+                        oldBot < thumbTop ifTrue:[
+                            bgTop := oldTop.
+                            bgHeight := tH + 1
+                        ] ifFalse:[
+                            bgTop := oldTop.
+                            bgHeight := delta
+                        ]
+                    ].
+                ] ifFalse:[
+                    bgTop := thumbTop.
+                    bgHeight := tH.
+                    oldLeft > thumbLeft ifTrue:[
+                        delta := oldLeft - thumbLeft.
+                        oldLeft > thumbRight ifTrue:[
+                            bgLeft := oldLeft.
+                            bgWidth := tW + 1.
+                        ] ifFalse:[
+                            bgLeft := thumbRight.
+                            bgWidth := delta.
+                        ]
+                    ] ifFalse:[
+                        delta := thumbLeft - oldLeft.
+                        oldRight < thumbLeft ifTrue:[
+                            bgLeft := oldLeft.
+                            bgWidth := tW + 1.
+                        ] ifFalse:[
+                            bgLeft := oldLeft.
+                            bgWidth := delta.
+                        ]
+                    ].
+                ].
+                self drawThumbBackgroundInX:bgLeft y:bgTop width:bgWidth height:bgHeight.
+                self waitForExpose
+            ]
+        ] ifFalse:[
+            thumbFrame := nil
+        ]
+    ]
+
+    "Modified: / 4.5.1999 / 18:57:28 / cg"
+!
+
+thumbOrigin:originNumber thumbHeight:heightNumber
+    "set both thumbs height and origin (in percent by default)"
+
+    |newHeight newOrigin realNewOrigin realNewHeight old new changed 
+     nBg range|
+
+    range := rangeEnd - rangeStart.
+
+    newOrigin := originNumber - rangeStart / (range / 100).
+    newHeight := heightNumber / (range abs / 100).
+
+    (newHeight > 100) ifTrue:[
+        realNewHeight := 100
+    ] ifFalse:[
+        realNewHeight := newHeight
+    ].
+    ((newOrigin + realNewHeight) > 100) ifTrue:[
+        realNewOrigin := 100 - realNewHeight
+    ] ifFalse: [
+        realNewOrigin := newOrigin
+    ].
+    (realNewOrigin < 0) ifTrue: [
+        realNewOrigin := 0
+    ].
+
+    changed := (realNewHeight ~= thumbHeight) or:[realNewOrigin ~= thumbOrigin].
+    (changed or:[thumbFrame isNil]) ifTrue:[
+        old := self absFromPercent:thumbOrigin.
+        new := self absFromPercent:realNewOrigin.
+        changed := old ~~ new.
+        changed ifFalse:[
+            old := self absFromPercent:thumbHeight.
+            new := self absFromPercent:realNewHeight.
+            changed := (old ~~ new)
+        ].
+        (changed or:[thumbFrame isNil]) ifTrue:[
+            thumbOrigin := realNewOrigin.
+            thumbHeight := realNewHeight.
+
+            (DefaultFullViewBackground notNil
+            and:[DefaultViewBackground notNil
+            and:[DefaultFullViewBackground ~~ DefaultViewBackground]]) ifTrue:[
+                realNewHeight >= 100 ifTrue:[
+                    nBg := DefaultFullViewBackground.
+                ] ifFalse:[
+                    nBg := DefaultViewBackground
+                ].
+                nBg := nBg onDevice:self graphicsDevice.
+                nBg ~~ viewBackground ifTrue:[
+                    self viewBackground:nBg.
+                ]
+            ].
+
+            thumbFrame := nil.
+            self invalidate.
+        ]
+    ]
+
+    "Modified: / 21.1.1998 / 19:32:41 / cg"
+! !
+
+!Scroller methodsFor:'accessing-behavior'!
+
+action:aBlock
+    "for protocol compatibility; same as scrollAction:"
+
+    self scrollAction:aBlock
+!
+
+asynchronousOperation
+    <resource:#obsolete>
+    self obsoleteMethodWarning:'use #beAsynchronous'.
+    self beAsynchronous
+!
+
+beAsynchronous
+    "set scroll-mode to be asynchronous - scroll action is only performed after
+     scrolling, when mouse-button is finally released (no tracking)."
+     
+    synchronousOperation := false
+!
+
+beSynchronous
+    "set scroll-mode to be synchronous - scroll action is performed for 
+     every movement of thumb (tracking)."
+     
+    synchronousOperation := true
+!
+
+enabled
+    "return enable/disable state of the scoller"
+
+    ^ enabled
+
+    "Created: / 30.3.1999 / 15:24:50 / stefan"
+!
+
+enabled:aBoolean
+    "enable/disable the scoller"
+
+    enabled ~~ aBoolean ifTrue:[
+	enabled := aBoolean.
+	self updateBackground.
+	aBoolean ifFalse:[
+	    self cursor: Cursor normal
+	]
+    ]
+
+    "Created: / 30.3.1999 / 15:23:14 / stefan"
+!
+
+isSynchronous
+    "return true if the scroll-mode is synchronous.
+     If true, the scroll action is performed for every movement of the thumb (tracking).
+     If false, the scroll action is only performed at the end."
+
+    ^ synchronousOperation
+!
+
+scrollAction
+    "answer the scroll action block"
+
+    ^ scrollAction
+!
+
+scrollAction:aBlock
+    "set the scroll action, aBlock which is evaluated when scrolled"
+
+    scrollAction := aBlock
+!
+
+scrollDownAction:aBlock
+    "ignored -
+     but implemented, so that scroller can be used in place of a scrollbar"
+!
+
+scrollLeftAction:aBlock
+    "ignored -
+     but implemented, so that scroller can be used in place of a scrollbar"
+!
+
+scrollRightAction:aBlock
+    "ignored -
+     but implemented, so that scroller can be used in place of a scrollbar"
+!
+
+scrollUpAction:aBlock
+    "ignored -
+     but implemented, so that scroller can be used in place of a scrollbar"
+!
+
+synchronousOperation
+    <resource:#obsolete>
+    self obsoleteMethodWarning:'use #beSynchronous'.
+    self beSynchronous
+! !
+
+!Scroller methodsFor:'accessing-bg & border'!
+
+allViewBackground:something if:condition
+    "ignore here for all scrollers (I want my own background)"
+
+    "/ ^ super allViewBackground:something
+! !
+
+!Scroller methodsFor:'accessing-look'!
+
+is3D
+    "return true, if I use a 3D style"
+
+    <resource: #style (#name)>
+
+    styleSheet name = #mswindows ifTrue:[^ true].
+    ^ super is3D
+
+    "Modified: 17.1.1997 / 23:21:42 / cg"
+!
+
+orientation 
+    "return the scrollers orientation (#vertical or #horizontal)"
+
+    ^ orientation
+!
+
+orientation:aSymbol 
+    "set the scrollers orientation (#vertical or #horizontal)"
+
+    |oldFrame|
+
+    orientation := aSymbol.
+    preferredExtent := nil.
+
+    shown ifTrue:[
+	oldFrame := thumbFrame.
+	self computeThumbFrame.
+
+	oldFrame ~= thumbFrame ifTrue:[
+	    self invalidate.
+	]
+    ]
+
+    "Created: 1.4.1997 / 12:18:32 / cg"
+    "Modified: 1.4.1997 / 12:20:46 / cg"
+!
+
+thumb
+    "for compatibility with scrollBars, return the receiver"
+
+    ^ self
+
+    "Created: 26.5.1996 / 12:21:12 / cg"
+!
+
+thumbColor
+    "return the thumbs color"
+
+    ^ thumbColor
+!
+
+thumbColor:aColor
+    "change the color of the thumb"
+
+    <resource: #style (#name)>
+
+    |avgColor graphicsDevice|
+
+    graphicsDevice := self graphicsDevice.
+    thumbColor := aColor onDevice:self graphicsDevice.
+    (styleSheet name ~~ #normal) ifTrue:[
+        avgColor := aColor averageColorIn:(0@0 corner:7@7).
+        thumbShadowColor := avgColor darkened onDevice:graphicsDevice.
+        thumbLightColor := avgColor lightened onDevice:graphicsDevice.
+        thumbHalfShadowColor := thumbShadowColor darkened onDevice:graphicsDevice.
+        thumbHalfLightColor := thumbLightColor lightened onDevice:graphicsDevice.
+    ].
+    self invalidate
+
+    "Modified: 8.2.1997 / 15:15:58 / cg"
+! !
+
+!Scroller methodsFor:'autoRepeat'!
+
+installRepeat
+    self installRepeat:repeatDelay.
+!
+
+installRepeat:repeatDelay
+    |repeatBlockCopy|
+
+    "protect against races"
+    repeatBlockCopy := repeatBlock.
+    repeatBlockCopy notNil ifTrue:[
+        self repairDamage.
+        Processor addTimedBlock:repeatBlockCopy afterSeconds:repeatDelay
+    ]
+!
+
+pagedAbovePointer
+    lastMousePosition notNil ifTrue:[
+        orientation == #horizontal ifTrue:[
+            ^ lastMousePosition x > thumbFrame center x 
+        ] ifFalse:[
+            ^ lastMousePosition y > thumbFrame center y 
+        ].
+    ].
+    ^ false.
+!
+
+pagedBelowPointer
+    lastMousePosition notNil ifTrue:[
+        thumbFrame isNil ifTrue:[
+            self computeThumbFrame.
+            thumbFrame isNil ifTrue:[^ false].
+        ].
+        orientation == #horizontal ifTrue:[
+            ^ lastMousePosition x < thumbFrame center x 
+        ] ifFalse:[
+            ^ lastMousePosition y < thumbFrame center y 
+        ].
+    ].
+    ^ false.
+!
+
+repeatPageDown
+    repeatBlock notNil ifTrue:[
+        "stop scroll"
+        (DefaultStopPagerAtThumb and:[self pagedBelowPointer]) ifTrue:[^ self].
+        self repairDamage.
+        self pageDown.
+        self installRepeat.
+    ]
+!
+
+repeatPageUp
+    repeatBlock notNil ifTrue:[
+        "stop scroll"
+        (DefaultStopPagerAtThumb and:[self pagedAbovePointer]) ifTrue:[^ self].
+        self repairDamage.
+        self pageUp.
+        self installRepeat.
+    ]
+! !
+
+!Scroller methodsFor:'drawing'!
+
+drawEdgedLineFrom:x1 y:y1 toX:x2 y:y2 level:lvl lightColor:lightColor shadowColor:shadowColor
+    |color1 color2 x y dl|
+
+    "iris style - draw tallys"
+
+    lvl > 0 ifTrue:[
+        color1 := lightColor.
+        color2 := shadowColor.
+    ] ifFalse:[
+        color1 := shadowColor.
+        color2 := lightColor.
+    ].
+
+    dl := 1.
+
+    self paint:color1.
+    x1 = x2 ifTrue:[
+        "/ vertical
+        self displayLineFromX:x1 y:y1-dl toX:x2 y:y2-dl.
+        self paint:color2.
+        x := x1 + 1.
+        self displayLineFromX:x y:y1 toX:x y:y2.
+    ] ifFalse:[
+        "/ horizontal
+        self displayLineFromX:x1-dl y:y1 toX:x2-dl y:y2.
+        self paint:color2.
+        y := y1 + 1.
+        self displayLineFromX:x1 y:y toX:x2 y:y.
+    ].
+!
+
+drawHandleFormAtX:x y:y
+    "styles with a handle in the middle (NeXT) use this"
+
+    thumbShadowColor := thumbShadowColor onDevice:self graphicsDevice.
+
+    self paint:thumbShadowColor.
+    self displayForm:shadowForm x:x y:y.
+    lightForm notNil ifTrue:[
+        thumbLightColor := thumbLightColor onDevice:self graphicsDevice.
+        self paint:thumbLightColor.
+        self displayForm:lightForm x:x y:y.
+    ].
+
+    "Modified: / 19.5.1998 / 16:26:49 / cg"
+!
+
+drawTallyMarks
+    "draw the thumb"
+
+    |color1 color2 
+     lvl "{ Class: SmallInteger }"
+     t "{ Class: SmallInteger }"
+     l "{ Class: SmallInteger }"
+     w "{ Class: SmallInteger }"
+     h "{ Class: SmallInteger }"
+     x "{ Class: SmallInteger }"
+     y "{ Class: SmallInteger }"
+     xL xR yT yB dist yTop yBot xLeft xRight
+     light shadow|
+
+    "iris style - draw tallys"
+
+    lvl := thumbLevel.
+    scrolling ifTrue:[
+        lvl := thumbActiveLevel
+    ].
+
+    thumbFrame isNil ifTrue:[^ self].
+    w := thumbFrame width.
+    h := thumbFrame height.
+    l := thumbFrame left.
+    t := thumbFrame top.
+
+    light := thumbLightColor.
+    shadow := thumbShadowColor.
+    styleSheet name == #winVista ifTrue:[
+        light := (entered ifTrue:[thumbEnteredColor] ifFalse:[thumbColor]) lightened.
+        shadow := (entered ifTrue:[thumbEnteredColor] ifFalse:[thumbColor]) darkened.
+    ].
+
+    tallyLevel > 0 ifTrue:[
+        color1 := light.
+        color2 := shadow.
+    ] ifFalse:[
+        color1 := shadow.
+        color2 := light.
+    ].
+
+    "draw tally marks"
+
+    (orientation == #vertical) ifTrue:[
+        y := t + (h // 2) - 1.
+        xL := l + lvl - 1 + DefaultTallyInset.
+        xR := l + w - lvl "+ 1" - DefaultTallyInset.
+
+        dist := DefaultTallyDistance ? self graphicsDevice verticalPixelPerMillimeter rounded.
+
+        tallyMarks even ifTrue:[
+            yTop := y - (dist // 2).   
+            yBot := y + (dist - (dist // 2)).
+            self drawEdgedLineFrom:xL y:yTop toX:xR y:yTop level:tallyLevel lightColor:light shadowColor:shadow.
+            self drawEdgedLineFrom:xL y:yBot toX:xR y:yBot level:tallyLevel lightColor:light shadowColor:shadow.
+        ] ifFalse:[
+            self drawEdgedLineFrom:xL y:y toX:xR y:y level:tallyLevel lightColor:light shadowColor:shadow.
+            yTop := yBot := y.   
+        ].
+
+        tallyMarks > 1 ifTrue:[
+            "dont draw other marks if there is not enough space"
+
+            h > (dist * (tallyMarks * 2)) ifTrue:[
+                self drawEdgedLineFrom:xL y:(yTop - dist) toX:xR y:(yTop - dist) level:tallyLevel lightColor:light shadowColor:shadow.
+                self drawEdgedLineFrom:xL y:(yBot + dist) toX:xR y:(yBot + dist) level:tallyLevel lightColor:light shadowColor:shadow.
+            ]
+        ]
+    ] ifFalse:[
+        x := l + (w // 2) - 1.
+        yT := t + lvl - 1 + DefaultTallyInset.
+        yB := t + h - lvl "+ 1" - DefaultTallyInset.
+
+
+        dist := DefaultTallyDistance ? self graphicsDevice horizontalPixelPerMillimeter rounded.
+
+        tallyMarks even ifTrue:[
+            xLeft := x - (dist // 2).   
+            xRight := x + (dist - (dist // 2)).
+            self drawEdgedLineFrom:xLeft y:yT toX:xLeft y:yB level:tallyLevel lightColor:light shadowColor:shadow.
+            self drawEdgedLineFrom:xRight y:yT toX:xRight y:yB level:tallyLevel lightColor:light shadowColor:shadow.
+        ] ifFalse:[
+            self drawEdgedLineFrom:x y:yT toX:x y:yB level:tallyLevel lightColor:light shadowColor:shadow.
+            xLeft := xRight := x.   
+        ].
+        tallyMarks > 1 ifTrue:[
+            "dont draw other marks if there is not enough space"
+
+            w > (dist * (tallyMarks * 2)) ifTrue:[
+                self drawEdgedLineFrom:(xLeft - dist) y:yT toX:(xLeft - dist) y:yB level:tallyLevel lightColor:light shadowColor:shadow.
+                self drawEdgedLineFrom:(xRight + dist) y:yT toX:(xRight + dist) y:yB level:tallyLevel lightColor:light shadowColor:shadow.
+            ]
+        ]
+    ]
+
+    "Modified: / 29.4.1999 / 09:35:52 / cg"
+!
+
+drawThumb
+    "draw the thumb"
+
+    |handleX handleY l t lvl
+     w "{ Class: SmallInteger }"
+     h "{ Class: SmallInteger }"
+     clr clr2 xpStyle vistaStyle n|
+
+    (thumbHeight >= 100) ifTrue:[^ self].
+    thumbFrame isNil ifTrue:[^ self].
+
+    xpStyle := styleSheet name == #winXP.
+    vistaStyle := styleSheet name == #winVista.
+
+    w := thumbFrame width.
+    h := thumbFrame height.
+    l := thumbFrame left.
+    t := thumbFrame top.
+
+    clr := entered ifTrue:[thumbEnteredColor] ifFalse:[thumbColor].
+    (scrolling and:[thumbActiveColor notNil]) ifTrue:[clr := thumbActiveColor].
+
+    (styleSheet at:#'scroller.vista3DStyle' default:false) ifTrue:[
+        "/ 243   242  240  236  234   233   215  211  207   205     200   192 206
+        (orientation == #vertical) ifTrue:[
+            n := w
+        ] ifFalse:[
+            n := h
+        ].
+        1 to:n-1 do:[:i |
+            |m|
+
+            i == (n-1) ifTrue:[
+                m := 0.4.
+            ] ifFalse:[
+                i <= (n//2) ifTrue:[
+                    i <= (n//4) ifTrue:[
+                        m := 3.
+                    ] ifFalse:[
+                        i <= (n//3) ifTrue:[
+                            m := 2.5.
+                        ] ifFalse:[
+                            m := 2.
+                        ].
+                    ].
+                ] ifFalse:[
+                    i > (n*3//4) ifTrue:[
+                        i > (n*4//5) ifTrue:[
+                            m := 0.
+                        ] ifFalse:[
+                            m := 0.2.
+                        ]
+                    ] ifFalse:[
+                        i > (n*2//3) ifTrue:[
+                            m := 0.4
+                        ] ifFalse:[
+                            m := 0.8.
+                        ].
+                    ].
+                ].
+            ].
+            self paint:(Color white mixed:m with:clr).
+            (orientation == #vertical) ifTrue:[
+                self displayLineFromX:(l+i-1) y:t+1 toX:(l+i-1) y:(t+h-2)
+            ] ifFalse:[
+                self displayLineFromX:(l+1) y:(t+i-1) toX:(l+w-2) y:(t+i-1)
+            ].
+        ].
+    ] ifFalse:[
+        self paint:clr.
+        (xpStyle and:[self isMiniScroller not]) ifTrue:[
+            (orientation == #vertical) ifTrue:[
+                self fillRectangleX:l y:t+1 width:w-2 height:h-4.
+            ] ifFalse:[
+                self fillRectangleX:l+1 y:t width:w-4 height:h-2.
+            ]
+        ] ifFalse:[
+            self fillRectangleX:l y:t width:w height:h.
+        ].
+    ].
+
+    lvl := thumbLevel.
+    scrolling ifTrue:[
+        lvl := thumbActiveLevel
+    ].
+
+    lvl ~~ 0 ifTrue:[
+        self drawEdgesForX:l y:t width:w height:h level:lvl
+                    shadow:thumbShadowColor light:thumbLightColor
+                    halfShadow:thumbHalfShadowColor halfLight:thumbHalfLightColor
+                    style:thumbEdgeStyle.
+    ].
+
+    self isMiniScroller ifTrue:[^ self].
+
+    thumbFrameColor notNil ifTrue:[
+        clr2 := styleSheet colorAt:#'scroller.thumbFrameColor2'.
+        clr2 notNil ifTrue:[
+            self paint:clr2.
+            (orientation == #vertical) ifTrue:[
+                self displayLineFromX:l+w-2 y:t+1 toX:l+w-2 y:t+h-3.
+                self displayLineFromX:l y:t+h-3 toX:l+w-2 y:t+h-3.
+            ] ifFalse:[
+                self displayLineFromX:l+2 y:t+h-2 toX:l+w-3 y:t+h-2.
+                self displayLineFromX:l+w-3 y:t toX:l+w-3 y:t+h-2. 
+            ].
+        ].
+
+        vistaStyle ifTrue:[
+            self paint:clr slightlyDarkened.
+        ] ifFalse:[
+            self paint:thumbFrameColor.
+        ].
+        xpStyle ifTrue:[
+            (orientation == #vertical) ifTrue:[
+                self displayLineFromX:l+w-1 y:t+1 toX:l+w-1 y:t+h-3.
+                self displayLineFromX:l+1 y:t+h-2 toX:l+w-2 y:t+h-2.
+                self displayLineFromX:l+w-2 y:t+h-3 toX:l+w-2 y:t+h-3.
+                "/ self displayLineFromX:l-2 y:t+h-3 toX:l-2 y:t+h-3.
+            ] ifFalse:[
+                self displayLineFromX:l+2 y:t+h-1 toX:l+w-3 y:t+h-1.
+                self displayLineFromX:l+w-2 y:t+1 toX:l+w-2 y:t+h-2. 
+                self displayLineFromX:l+w-3 y:t+h-2 toX:l+w-3 y:t+h-2.
+            ].
+        ] ifFalse:[
+            self displayRectangleX:l y:t width:w height:h.
+        ].
+        vistaStyle ifTrue:[
+            self paint:clr lightened.
+            self displayPointX:l y:t.
+            self displayPointX:l+w-1 y:t.
+            self displayPointX:l y:t+h-1.
+            self displayPointX:l+w-1 y:t+h-1.
+        ].
+    ].
+
+    thumbImage notNil ifTrue:[
+        thumbImage displayOn:self x:l y:t
+    ].
+
+    (tallyLevel == 0 or:[tallyMarks == 0]) ifTrue:[
+        shadowForm notNil ifTrue:[
+            "next style - draw tally bitmap"
+            handleX := l + ((w - 8) // 2).
+            handleY := t + ((h - 8) // 2).
+            self drawHandleFormAtX:handleX y:handleY
+        ].
+        ^ self
+    ].
+
+    "iris style - draw tallys"
+    self drawTallyMarks.
+
+    "Modified: / 29-11-2011 / 11:55:24 / cg"
+!
+
+drawThumbBackgroundInX:x y:y width:w height:h
+    "draw part of the thumbs background; defined as a separate
+     method, to allow drawing of arbitrary patterns under thumb 
+     (see ColorSlider)."
+
+    |oldClip gX gY gW gH|
+
+    shown ifTrue:[
+        oldClip := self clippingRectangleOrNil.
+        self clippingRectangle:(Rectangle left:x top:y width:w height:h).
+        self clearDeviceRectangleX:x y:y width:w height:h.
+
+        styleSheet name == #winVista ifTrue:[
+            self paint:(Color greyByte:16rE3).
+            (orientation == #vertical) ifTrue:[
+                self displayLineFromX:0 y:0 toX:0 y:height-1.
+                self displayLineFromX:1 y:0 toX:1 y:height-1.
+            ] ifFalse:[
+                self displayLineFromX:0 y:0 toX:width-1 y:0.
+                self displayLineFromX:0 y:1 toX:width-1 y:1.
+            ].
+        ].
+
+        frameBeforeMove notNil ifTrue:[
+            (ghostColor notNil 
+            or:[ghostFrameColor notNil
+            or:[ghostLevel ~~ 0]]) ifTrue:[
+                (frameBeforeMove intersects:(x@y extent:w@h)) ifTrue:[
+                    gX := frameBeforeMove left.
+                    gY := frameBeforeMove top.
+                    gW := frameBeforeMove width.
+                    gH := frameBeforeMove height.
+                
+                    ghostColor notNil ifTrue:[
+                        self paint:ghostColor.
+                        self fillRectangle:frameBeforeMove.
+                    ].
+                    (ghostLevel ~~ 0) ifTrue:[
+                        self drawEdgesForX:gX y:gY width:gW height:gH level:ghostLevel
+                    ].
+                    ghostFrameColor notNil ifTrue:[
+                        self paint:ghostFrameColor.
+                        self displayRectangleX:gX y:gY width:gW height:gH
+                    ].
+                ]
+            ]
+        ].
+        self clippingRectangle:oldClip
+    ]
+
+    "Modified: / 4.5.1999 / 18:51:53 / cg"
+! !
+
+!Scroller methodsFor:'event handling'!
+
+buttonControlPress:button x:x y:y
+    "mouse-click with control - jump to top/bottom"
+
+    |curr limit1 limit2|
+
+    thumbFrame isNil ifTrue:[
+        self computeThumbFrame.
+        thumbFrame isNil ifTrue:[
+            ^ self.
+        ]
+    ].
+    (orientation == #vertical) ifTrue:[
+        curr := y.
+        limit1 := thumbFrame top.
+        limit2 := thumbFrame bottom
+    ] ifFalse:[
+        curr := x.
+        limit1 := thumbFrame left.
+        limit2 := thumbFrame right
+    ].
+
+    (curr < limit1) ifTrue:[
+        "to top"
+        self thumbOrigin:0.
+        self tellOthers
+    ] ifFalse:[
+        (curr > limit2) ifTrue:[
+            "to bottom"
+            self thumbOrigin:100.
+            self tellOthers
+        ]
+    ].
+!
+
+buttonMotion:state x:x y:y
+    "mouse-button was moved while pressed;
+     redraw thumb at its new position and, if scroll-mode is asynchronous, 
+     the scroll action is performed"
+
+    <resource: #style (#name 
+                       #'scroller.snapBack')>
+
+    |pos curr limit prevOrigin newOrigin snap|
+
+    lastMousePosition := x@y.
+
+    (self sensor hasButtonMotionEventFor:self) ifTrue:[
+        ^ self.
+    ].
+
+    enabled ifFalse:[^ self].
+
+    scrolling ifFalse: [
+        thumbFrame notNil ifTrue:[
+            self highlightThumbForPointerX:x y:y.
+        ].
+        ^ self              
+    ].              
+
+    entered := true.
+    frameBeforeMove isNil ifTrue:[
+        self startMove.
+    ].
+
+    (orientation == #vertical) ifTrue:[
+        curr := y.
+        limit := height.
+        snap := (x < SnapBackDistance negated) or:[x > (width + SnapBackDistance)].
+    ] ifFalse:[
+        curr := x.
+        limit := width.
+        snap := (y < SnapBackDistance negated) or:[y > (height + SnapBackDistance)].
+    ].
+
+    (curr < 0) ifTrue:[                        "check against limits"
+        pos := 0
+    ] ifFalse:[
+        (curr > limit) ifTrue:[
+            pos := limit
+        ] ifFalse:[
+            pos := curr
+        ]
+    ].
+
+    prevOrigin := self thumbOrigin.
+    newOrigin := self percentFromAbs:(pos - pressOffset).
+
+    snap ifTrue:[
+        (styleSheet at:#'scroller.snapBack' default:false) ifTrue:[
+            newOrigin := originBeforeMove.
+        ]
+    ].
+
+    prevOrigin ~= newOrigin ifTrue:[
+        self thumbOrigin:newOrigin.
+
+        synchronousOperation ifTrue: [
+            self tellOthers.
+        ]
+    ]
+
+    "Modified: / 14.4.1998 / 18:37:34 / cg"
+!
+
+buttonPress:button x:x y:y
+    "button was pressed - if above thumb, page up; if below thumb, page down;
+     otherwise start scrolling.
+     If either shift is pressed, or the 'scrollerMiddleButtonJump' styleSheet
+     value is true and its the middle button, do a jump to the clicked position."
+
+    |curr limit1 limit2 sensor|
+
+    enabled ifFalse:[^ self].
+    shown ifFalse:[^ self].
+    scrolling ifTrue:[^ self].
+
+    sensor := self sensor.
+    (sensor shiftDown
+     or:[DefaultMiddleButtonJump and:[button ~~ 1]]) ifTrue:[
+        ^ self buttonShiftPress:button x:x y:y
+    ].
+    sensor ctrlDown ifTrue:[
+        ^ self buttonControlPress:button x:x y:y
+    ].
+    (button ~~ #select and:[button ~~ 1]) ifTrue:[
+        ^ self
+    ].
+
+    thumbFrame isNil ifTrue:[
+        self computeThumbFrame.
+        thumbFrame isNil ifTrue:[^ self].
+    ].
+
+    (orientation == #vertical) ifTrue:[
+        curr := y.
+        limit1 := thumbFrame top.
+        limit2 := thumbFrame bottom
+    ] ifFalse:[
+        curr := x.
+        limit1 := thumbFrame left.
+        limit2 := thumbFrame right
+    ].
+
+    self highlightThumbForPointerX:x y:y.
+    self changeCursorFor:(x@y).
+
+    (curr < limit1) ifTrue:[
+        "page up/left"
+        self pageUp.
+        autoRepeat ifTrue:[
+            repeatBlock notNil ifTrue:[
+                Processor removeTimedBlock:repeatBlock.
+            ].
+            repeatBlock := [self sensor pushUserEvent:#repeatPageUp for:self].
+            sensor pushUserEvent:#installRepeat: for:self withArgument:initialRepeatDelay.
+        ]
+    ] ifFalse:[
+        (curr > limit2) ifTrue:[
+            "page down/right"
+            self pageDown.
+            autoRepeat ifTrue:[
+                repeatBlock notNil ifTrue:[
+                    Processor removeTimedBlock:repeatBlock.
+                ].
+                repeatBlock := [self sensor pushUserEvent:#repeatPageDown for:self].
+                sensor pushUserEvent:#installRepeat: for:self withArgument:initialRepeatDelay.
+            ]
+        ] ifFalse:[
+            pressOffset := curr - limit1.
+            scrolling := true.
+            (thumbActiveColor notNil and:[thumbColor ~~ thumbActiveColor]) ifTrue:[
+                self drawThumb
+            ]
+        ]
+    ].
+
+    "Modified: / 02-02-1998 / 23:30:26 / stefan"
+    "Modified: / 15-12-2010 / 10:13:10 / cg"
+!
+
+buttonRelease:button x:x y:y
+    "mouse-button was released - if scroll-mode is asynchronous, the scroll
+     action is now performed"
+
+    |rect mustDrawThumb|
+
+    lastMousePosition := nil.
+
+    repeatBlock notNil ifTrue:[
+        repeatBlock := nil.
+        Processor removeTimedBlock:repeatBlock.
+        repeatBlock := nil
+    ].
+
+    (button == 1 or:[DefaultMiddleButtonJump])
+    ifFalse:[
+        ^ super buttonRelease:button x:x y:y
+    ].
+
+    scrolling ifTrue:[
+        scrolling := false.
+        thumbFrame notNil ifTrue:[
+            mustDrawThumb := false.
+
+            frameBeforeMove notNil ifTrue:[
+                rect := frameBeforeMove.
+                frameBeforeMove := nil.
+                self drawThumbBackgroundInX:rect left
+                                          y:rect top
+                                      width:rect width 
+                                     height:rect height.
+
+                (rect intersects:thumbFrame) ifTrue:[
+                    mustDrawThumb := true.
+                ]
+            ].
+            thumbLevel ~~ thumbActiveLevel ifTrue:[
+                mustDrawThumb := true
+            ].
+            (thumbActiveColor notNil and:[thumbColor ~~ thumbActiveColor]) ifTrue:[
+                mustDrawThumb := true
+            ].
+            mustDrawThumb ifTrue:[
+                self drawThumb
+            ].    
+
+"/            scrolling := false.
+            synchronousOperation ifFalse: [
+                self tellOthers.
+            ]
+        ]
+    ].
+    self changeCursorFor:(x@y)
+
+    "Modified: / 19.1.1998 / 13:45:59 / cg"
+    "Modified: / 2.2.1998 / 23:37:27 / stefan"
+!
+
+buttonShiftPress:button x:x y:y
+    "mouse-click with shift - jump to position"
+
+    |pos curr curr2 limit1 limit2|
+
+    thumbFrame isNil ifTrue:[
+        self computeThumbFrame.
+        thumbFrame isNil ifTrue:[
+            ^ self.
+        ]
+    ].
+    (orientation == #vertical) ifTrue:[
+        curr := y.
+        curr2 := y - (thumbFrame height // 2).
+        limit1 := height.
+        limit2 := thumbFrame top
+    ] ifFalse:[
+        curr := x.
+        curr2 := x - (thumbFrame width // 2).
+        limit1 := width.
+        limit2 := thumbFrame left
+    ].
+
+    (curr2 < 0) ifTrue:[                        "check against limits"
+        pos := 0
+    ] ifFalse:[
+        (curr2 > limit1) ifTrue:[
+            pos := limit1
+        ] ifFalse:[
+            pos := curr2
+        ]
+    ].
+
+    self startMove.
+
+    self thumbOrigin:(self percentFromAbs:pos).
+    self tellOthers.
+
+    (orientation == #vertical) ifTrue:[
+        limit2 := thumbFrame top
+    ] ifFalse:[
+        limit2 := thumbFrame left
+    ].
+    pressOffset := curr - limit2.
+    scrolling := true.
+
+    self changeCursorFor:(x@y).
+
+
+    "Modified: / 19.3.1997 / 11:29:08 / cg"
+    "Modified: / 2.2.1998 / 23:35:18 / stefan"
+!
+
+changeCursorFor:p
+    "update the mouse cursor"
+
+    |frm sensor which|
+
+    enabled ifFalse:[
+        self cursor:Cursor normal.
+        ^ self
+    ].
+    NewCursors ifFalse:[^ self].
+
+    frm := self thumbFrame.
+    frm isNil ifTrue:[^ self].
+
+    thumbHeight = 100 ifTrue:[
+        which := #normal.
+    ] ifFalse:[
+        sensor := self sensor.
+
+        (((frm containsPoint:p) and:[sensor leftButtonPressed])
+         "or:[sensor shiftDown]") ifTrue:[ 
+            orientation == #horizontal ifTrue:[
+                which := #xMarker
+            ] ifFalse:[
+                which := #marker
+            ].
+        ] ifFalse:[
+            orientation == #horizontal ifTrue:[
+                p x > frm right ifTrue:[
+                    which := #right
+                ] ifFalse:[
+                    p x < frm left ifTrue:[
+                        which := #left
+                    ] ifFalse:[
+                        which := #hand
+                    ]
+                ]
+            ] ifFalse:[
+                p y > frm bottom ifTrue:[
+                    which := #down
+                ] ifFalse:[
+                    p y < frm top ifTrue:[
+                        which := #up
+                    ] ifFalse:[
+                        which := #hand
+                    ]
+                ]
+            ]
+        ]
+    ].
+    self cursor:(Cursor perform:which).
+
+    "Created: / 23.10.1997 / 03:55:24 / cg"
+    "Modified: / 7.5.1998 / 02:06:10 / cg"
+!
+
+highlightThumbForPointerX:x y:y
+    "if x/y is within the thumb frame, highlight it"
+
+    |frm in|
+
+    in := (frm := self thumbFrame) containsPoint:(x@y).
+    (in ~~ entered 
+    or:[thumbLevel ~~ thumbActiveLevel]) ifTrue:[
+        entered := in.
+        (thumbColor ~~ thumbEnteredColor 
+        or:[thumbLevel ~~ thumbActiveLevel]) ifTrue: [
+            self drawThumb
+        ].
+    ].
+
+    self changeCursorFor:(x@y)
+
+    "Created: 6.3.1996 / 17:35:07 / cg"
+    "Modified: 23.10.1997 / 03:56:31 / cg"
+!
+
+keyPress:key x:x y:y
+    "/ stupid - due to delegation, this is never invoked ...
+    enabled ifFalse:[^ self].
+
+    self changeCursorFor:(x@y).
+    super keyPress:key x:x y:y
+
+    "Created: 23.10.1997 / 03:57:34 / cg"
+!
+
+keyRelease:key x:x y:y
+    "/ stupid - due to delegation, this is never invoked ...
+    self changeCursorFor:(x@y).
+    super keyRelease:key x:x y:y
+
+    "Created: 23.10.1997 / 03:58:25 / cg"
+!
+
+pointerEnter:state x:x y:y
+    "mouse-button left view
+     redraw thumb if enteredColor ~~ thumbColor"
+
+    scrolling ifTrue:[
+        (state bitAnd:(self graphicsDevice anyButtonMotionMask)) == 0 ifTrue: [
+            self buttonRelease:1 x:x y:y
+        ].
+    ].
+    super pointerEnter:state x:x y:y
+
+    "Modified: / 14.10.1998 / 15:40:51 / cg"
+!
+
+pointerLeave:state
+    "mouse-button left view
+     redraw thumb if enteredColor ~~ thumbColor"
+
+    (entered and:[(state bitAnd:(self graphicsDevice anyButtonMotionMask)) == 0]) ifTrue: [
+        entered := false.
+        thumbEnteredColor ~= thumbColor ifTrue:[
+            self invalidate.
+            "/ self drawThumb
+        ]
+    ].
+
+    "Created: / 6.3.1996 / 17:31:16 / cg"
+    "Modified: / 11.9.1998 / 00:13:53 / cg"
+!
+
+redraw
+    "redraw"
+
+    self redrawX:0 y:0 width:width height:height.
+    self redrawEdges
+!
+
+redrawX:x y:y width:w height:h
+    shown ifFalse:[
+        ^ self.
+    ].
+
+    thumbFrame isNil ifTrue:[
+        self computeThumbFrame
+    ].
+    self drawThumbBackgroundInX:x y:y width:w height:h.
+    thumbFrame isNil ifTrue:[
+        "/ thumb hidden
+        ^ self 
+    ].
+
+    orientation == #vertical ifTrue:[
+        (y > thumbFrame bottom) ifTrue:[
+            ^ self
+        ].
+        ((y + h) < thumbFrame top) ifTrue:[
+            ^ self
+        ].
+    ] ifFalse:[
+        (x > thumbFrame right) ifTrue:[
+            ^ self
+        ].
+        ((x + w) < thumbFrame left) ifTrue:[
+            ^ self
+        ].
+    ].
+
+    self drawThumb
+
+    "Modified: / 29.10.1997 / 15:48:48 / cg"
+!
+
+sizeChanged:how
+    "size of scroller changed - recompute thumbs frame and redraw it"
+
+    |oldThumbFrame oldTop oldBot newTop newBot oldLeft oldRight newLeft newRight|
+
+    super sizeChanged:how.
+
+    oldThumbFrame := thumbFrame.
+    thumbFrame := nil.
+    shown ifFalse:[
+        thumbFrame := nil.
+        self invalidate.
+        ^ self.
+    ].
+    self computeThumbFrame.
+
+    "/ any change ?
+    thumbFrame = oldThumbFrame ifTrue:[
+        ^ self
+    ].
+    thumbFrame isNil ifTrue:[
+        self invalidate.
+        ^ self
+    ].
+    oldThumbFrame isNil ifTrue:[
+        self invalidate:thumbFrame.
+        ^ self.
+    ].
+
+    "/ try to redraw as little as possible
+
+    oldTop := oldThumbFrame top.
+    oldBot := oldThumbFrame bottom.
+    newTop := thumbFrame top.
+    newBot := thumbFrame bottom.
+    oldLeft := oldThumbFrame left.
+    oldRight := oldThumbFrame right.
+    newLeft := thumbFrame left.
+    newRight := thumbFrame right.
+
+    (orientation == #vertical
+    and:[oldLeft == newLeft
+    and:[oldRight == newRight]]) ifTrue:[
+        (oldTop == newTop) ifTrue:[
+            oldBot < newBot ifTrue:[
+                "/ thumb became larger, but origin remains
+                "/ (view became smaller)
+                self invalidate:(Rectangle 
+                                    left:newLeft top:oldBot-thumbLevel
+                                    right:newRight bottom:newBot).
+                ^ self.
+            ].
+            oldBot > newBot ifTrue:[
+                "/ thumb became smaller, but origin remains
+                "/ (view became larger)
+                self invalidate:(Rectangle 
+                                    left:newLeft top:newBot-thumbLevel
+                                    right:newRight bottom:oldBot).
+                ^ self.
+            ].
+        ].
+        (oldBot == newBot) ifTrue:[
+            newTop < oldTop ifTrue:[
+                "/ thumb became larger, but corner remains
+                "/ (view became smaller)
+                self invalidate:(Rectangle 
+                                    left:newLeft top:newTop
+                                    right:newRight bottom:oldTop+thumbLevel).
+                ^ self.
+            ].
+            newTop > oldTop ifTrue:[
+                "/ thumb became smaller, but corner remains
+                "/ (view became larger)
+                self invalidate:(Rectangle 
+                                    left:newLeft top:oldTop
+                                    right:newRight bottom:newTop+thumbLevel).
+                ^ self.
+            ]
+        ].
+    ].
+
+    (orientation == #horizontal
+    and:[oldTop == newTop
+    and:[oldBot == newBot]]) ifTrue:[
+        (oldLeft == newLeft) ifTrue:[
+            oldRight < newRight ifTrue:[
+                "/ thumb became larger, but origin remains
+                "/ (view became smaller)
+                self invalidate:(Rectangle 
+                                    left:oldRight-thumbLevel top:newTop
+                                    right:newRight bottom:newBot).
+                ^ self.
+            ].
+            oldRight > newRight ifTrue:[
+                "/ thumb became smaller, but origin remains
+                "/ (view became larger)
+                self invalidate:(Rectangle 
+                                    left:newRight-thumbLevel top:newTop
+                                    right:oldRight bottom:newBot).
+                ^ self.
+            ].
+        ].
+    ].
+
+    self invalidate:(oldThumbFrame merge: thumbFrame).
+
+    "Modified: / 23.5.1999 / 13:50:41 / cg"
+!
+
+update:something with:aParameter from:changedObject
+    "handle update from a model (if any)"
+
+    (changedObject == model 
+    "and:[something == aspectMsg]") ifTrue:[
+        self thumbOrigin:(model value).
+        "/ self tellOthers.
+        ^ self
+    ].
+    super update:something with:aParameter from:changedObject
+
+    "Modified: / 30.3.1999 / 14:26:28 / stefan"
+! !
+
+!Scroller methodsFor:'focus handling'!
+
+wantsFocusWithButtonPress
+    "no, do not catch the keyboard focus on button click"
+
+    ^ false
+
+
+! !
+
+!Scroller methodsFor:'forced scroll'!
+
+pageDown
+    "page down/right"
+
+    self thumbOrigin:(thumbOrigin + thumbHeight).
+    self tellOthers
+!
+
+pageUp
+    "page up/left"
+
+    self thumbOrigin:(thumbOrigin - thumbHeight).
+    self tellOthers
+!
+
+scrollDown:amountToScroll
+    "compatibility with SimpleView. This allows mouse wheel actions on Scrollers
+     Note: this is used for horizontal scrollers, too (scrollRight)"
+
+    self scrollStep:amountToScroll
+!
+
+scrollStep:delta
+    "step by some delta"
+
+    |oldOrg newOrg|
+
+    oldOrg := self thumbOrigin.
+    newOrg := ((oldOrg + delta) max:rangeStart) min:rangeEnd.
+    oldOrg ~= newOrg ifTrue:[
+	self thumbOrigin:newOrg.
+	self tellOthers.
+    ]
+
+    "Created: / 21.4.1998 / 20:51:57 / cg"
+    "Modified: / 21.4.1998 / 20:52:22 / cg"
+!
+
+scrollToBeginning
+    "scroll to the beginning"
+
+    self thumbOrigin:rangeStart.
+    self tellOthers
+
+    "Created: 6.3.1996 / 17:55:13 / cg"
+!
+
+scrollToEnd
+    "scroll to the end"
+
+    self thumbOrigin:rangeEnd.
+    self tellOthers
+
+    "Created: 6.3.1996 / 17:55:25 / cg"
+!
+
+scrollUp:amountToScroll
+    "compatibility with SimpleView. This allows mouse wheel actions on Scrollers
+     Note: this is used for horizontal scrollers, too (scrollLeft)"
+
+    self scrollStep:amountToScroll negated
+! !
+
+!Scroller methodsFor:'forwarding changed origin'!
+
+tellOthers
+    |org|
+
+    org := self thumbOrigin.
+
+    "
+     the ST-80 way of notifying scrolls
+    "
+    self sendChangeMessageWith:org.
+
+    "
+     the ST/X way of notifying scrolls
+    "
+    scrollAction notNil ifTrue:[
+	scrollAction value:org 
+    ].
+
+    "/
+    "/ this will vanish - the scroller should share
+    "/ a valueHolder with the scrolledView.
+    "/
+    self changed:#scrollerPosition.
+
+    "Modified: / 21.1.1998 / 19:12:55 / cg"
+! !
+
+!Scroller methodsFor:'initialization'!
+
+defaultExtent
+    "compute my extent from sub-components"
+
+    ^ self preferredExtent
+
+    "Modified: 22.4.1996 / 23:37:53 / cg"
+!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    |graphicsDevice|
+
+    super fetchDeviceResources.
+    graphicsDevice := self graphicsDevice.
+
+    thumbShadowColor notNil ifTrue:[thumbShadowColor := thumbShadowColor onDevice:graphicsDevice].
+    thumbLightColor notNil ifTrue:[thumbLightColor := thumbLightColor onDevice:graphicsDevice].
+    thumbHalfShadowColor notNil ifTrue:[thumbHalfShadowColor := thumbHalfShadowColor onDevice:graphicsDevice].
+    thumbHalfLightColor notNil ifTrue:[thumbHalfLightColor := thumbHalfLightColor onDevice:graphicsDevice].
+
+    thumbEnteredColor notNil ifTrue:[thumbEnteredColor := thumbEnteredColor onDevice:graphicsDevice].
+    ghostColor notNil ifTrue:[ghostColor := ghostColor onDevice:graphicsDevice].
+    ghostFrameColor notNil ifTrue:[ghostFrameColor := ghostFrameColor onDevice:graphicsDevice].
+
+    "Modified: 13.1.1997 / 21:56:38 / cg"
+!
+
+initCursor
+    "set the cursor - a hand"
+
+    cursor := Cursor hand
+!
+
+initStyle
+    "initialize style dep. stuff"
+
+    <resource: #style (#name 
+                       #'scroller.autoRepeat'
+                       #'scroller.initialRepeatDelay'
+                       #'scroller.repeatDelay')>
+
+    |nm graphicsDevice|
+
+    super initStyle.
+    graphicsDevice := self graphicsDevice.
+
+    DefaultViewBackground notNil ifTrue:[
+        viewBackground := DefaultViewBackground onDevice:graphicsDevice.
+    ].
+    DefaultShadowColor notNil ifTrue:[
+        shadowColor := DefaultShadowColor onDevice:graphicsDevice.
+    ].
+    DefaultLightColor notNil ifTrue:[
+        lightColor := DefaultLightColor onDevice:graphicsDevice.
+    ].
+
+    tallyMarks := DefaultTallyMarks.
+    tallyLevel := DefaultTallyLevel.
+    DefaultLevel ~~ level ifTrue:[
+        self level:DefaultLevel.
+    ].
+    DefaultBorderWidth ~~ self borderWidth ifTrue:[
+        self borderWidth:DefaultBorderWidth.
+    ].
+    thumbLevel := DefaultThumbLevel.
+    thumbActiveLevel := DefaultThumbActiveLevel.
+    thumbActiveColor := DefaultThumbActiveColor.
+    inset := DefaultInset.
+    fixThumbHeight := DefaultFixThumbHeight.
+    thumbEdgeStyle := DefaultEdgeStyle.
+
+    DefaultGhostColor notNil ifTrue:[
+        ghostColor := DefaultGhostColor onDevice:graphicsDevice.
+    ].
+    DefaultGhostFrameColor notNil ifTrue:[
+        ghostFrameColor := DefaultGhostFrameColor onDevice:graphicsDevice.
+    ].
+    ghostLevel := DefaultGhostLevel.
+
+    DefaultThumbFrameColor notNil ifTrue:[
+        thumbFrameColor := DefaultThumbFrameColor onDevice:graphicsDevice.
+    ].
+    DefaultThumbShadowColor notNil ifTrue:[
+        thumbShadowColor := DefaultThumbShadowColor
+    ] ifFalse:[
+        thumbShadowColor := shadowColor.
+    ].
+    DefaultThumbLightColor notNil ifTrue:[
+        thumbLightColor := DefaultThumbLightColor
+    ] ifFalse:[
+        thumbLightColor := lightColor.
+    ].
+
+    thumbEdgeStyle notNil ifTrue:[
+        DefaultThumbHalfShadowColor notNil ifTrue:[
+            thumbHalfShadowColor := DefaultThumbHalfShadowColor
+        ].
+
+        DefaultThumbHalfLightColor notNil ifTrue:[
+            thumbHalfLightColor := DefaultThumbHalfLightColor
+        ].
+    ].
+
+    nm := styleSheet name.
+
+    graphicsDevice hasGrayscales ifFalse:[
+        thumbEdgeStyle notNil ifTrue:[
+            thumbHalfShadowColor := Color darkGray.
+            thumbHalfLightColor := self whiteColor
+        ].
+
+        thumbShadowColor := self blackColor.
+"/        thumbLightColor := White.
+
+        nm = #motif ifTrue:[
+            DefaultThumbColor isNil ifTrue:[
+                thumbColor := self whiteColor.
+            ].
+        ]
+    ].
+
+    DefaultThumbColor notNil ifTrue:[
+        thumbColor := DefaultThumbColor onDevice:graphicsDevice
+    ] ifFalse:[
+        thumbColor := self whiteColor.
+        nm ~= #normal ifTrue:[
+            graphicsDevice hasGrayscales ifFalse:[
+                thumbColor := Color grey
+            ].
+        ].
+    ].
+
+    thumbColor := thumbColor onDevice:graphicsDevice.
+    thumbShadowColor notNil ifTrue:[
+        thumbShadowColor := thumbShadowColor onDevice:graphicsDevice.
+    ].
+    thumbLightColor notNil ifTrue:[
+        thumbLightColor := thumbLightColor onDevice:graphicsDevice.
+    ].
+    thumbHalfShadowColor notNil ifTrue:[
+        thumbHalfShadowColor := thumbHalfShadowColor onDevice:graphicsDevice.
+    ].
+    thumbHalfLightColor notNil ifTrue:[
+        thumbHalfLightColor := thumbHalfLightColor onDevice:graphicsDevice.
+    ].
+    thumbEdgeStyle notNil ifTrue:[
+        thumbHalfShadowColor isNil ifTrue:[
+            thumbHalfShadowColor := thumbShadowColor lightened onDevice:graphicsDevice
+        ]
+    ].
+
+    DefaultThumbEnteredColor notNil ifTrue:[
+        thumbEnteredColor := DefaultThumbEnteredColor onDevice:graphicsDevice.
+    ] ifFalse:[
+        thumbEnteredColor := thumbColor.
+    ].
+
+    (DefaultThumbEnteredColor notNil or:[NewCursors]) ifTrue:[
+        self enableMotionEvents.
+        self enableEnterLeaveEvents.
+    ].
+
+    DefaultThumbImage notNil ifTrue:[
+        thumbImage := DefaultThumbImage onDevice:graphicsDevice.
+        fixThumbHeight := true.
+    ].
+
+    HandleImage notNil ifTrue:[
+        shadowForm := HandleImage onDevice:graphicsDevice.
+    ] ifFalse:[
+        nm = #next ifTrue:[
+            shadowForm := self class handleShadowFormOn:graphicsDevice.
+            lightForm := self class handleLightFormOn:graphicsDevice
+        ] ifFalse:[
+            shadowForm := lightForm := nil
+        ].
+    ].
+    self drawableId notNil ifTrue:[
+        self computeThumbFrame
+    ].
+
+    autoRepeat := styleSheet at:#'scroller.autoRepeat' default:true.
+    initialRepeatDelay := styleSheet at:#'scroller.initialRepeatDelay' default:0.3.
+    repeatDelay := styleSheet at:#'scroller.repeatDelay' default:0.15.
+
+    "Modified: / 5.9.1998 / 20:21:41 / cg"
+!
+
+initialize
+    "initialize - setup instvars from defaults"
+
+    orientation isNil ifTrue:[orientation := #vertical].
+
+    super initialize.
+
+    scrolling := entered              := false.
+    enabled   := synchronousOperation := true.
+
+    thumbOrigin := 0.
+    thumbHeight := 100.
+    thumbFrameSizeDifference := 0.
+
+    rangeStart := 0.
+    rangeEnd := 100.
+    rangeStep := nil.   "/ meaning: arbitrary precision
+"/    inset := 1.
+
+"/    self computeThumbFrame
+
+    "Modified: / 7.3.1999 / 00:07:32 / cg"
+!
+
+realize
+    super realize.
+    model notNil ifTrue:[
+	self thumbOrigin:(model value).
+    ].
+! !
+
+!Scroller methodsFor:'private'!
+
+absFromPercent:percent
+    "given a percentage, compute number of pixels"
+
+    |fullSize|
+
+    (orientation == #vertical) ifTrue:[
+	fullSize := height 
+    ] ifFalse:[
+	fullSize := width
+    ].
+
+    "/ avoid hitting the boundary if no frame and no level (i.e. st80 style)
+    (thumbLevel == 0 and:[thumbFrameColor isNil]) ifTrue:[
+	fullSize := fullSize - 1
+    ].
+
+    ^ ((percent * (fullSize - thumbFrameSizeDifference - (margin * 2))) / 100) rounded
+
+    "Modified: 7.3.1997 / 16:05:57 / cg"
+!
+
+computeThumbFrame
+    "compute the thumbs frame (a rectangle) whenever thumb is moved, 
+     changed height or the scrollers size has changed.
+     We take care, that the thumb will not become too small (i.e.
+     invisible or uncatchable).
+     Also, for mswindows style, its height/width is constant."
+
+    |newPos1 newPos2 newSize1 newSize2 nh nw ny nx 
+     computedSize minSz sz1 sz2 nb nr|
+
+    thumbHeight >= 100 ifTrue:[
+        self thumbOrigin ~= 0.0 ifTrue:[
+            self thumbOrigin:0
+        ].
+
+        thumbFrame := nil.
+        ^ self
+    ].
+
+    "compute position & size"
+    newPos1 := (self absFromPercent:thumbOrigin) + margin.
+    newSize1 := computedSize := self absFromPercent:thumbHeight.
+    (orientation == #vertical) ifTrue:[
+        sz1 := height.
+        sz2 := width
+    ] ifFalse:[
+        sz1 := width.
+        sz2 := height
+    ].
+
+    "
+     do we have to adjust the computed size ?
+    "
+    newPos2 := margin + inset.     
+    newSize2 := sz2 - (2 * newPos2).
+
+"/    (style ~~ #normal) ifTrue:[
+    thumbLevel ~~ 0 ifTrue:[
+        "
+         do not make thumb too small (for handle & to be catchable)
+        "
+        minSz := MinThumbSize "10" + (2 * thumbLevel)
+    ] ifFalse:[
+        "
+         do not make thumb too small (uncatchable)
+        "
+        minSz := MinThumbSize "4"
+    ].
+
+    (newSize1 < minSz) ifTrue:[
+        newSize1 := minSz.
+        thumbFrameSizeDifference := newSize1 - computedSize
+    ] ifFalse:[
+        thumbFrameSizeDifference := 0.
+    ].
+
+    fixThumbHeight ifTrue:[
+        "have a fix-size thumb (i.e. mswindows style)"
+
+        newSize1 := sz2 - (2 * inset).   "make it square"
+        thumbImage notNil ifTrue:[
+            newSize1 := (newSize1 max:(thumbImage height)) max:(thumbImage width)
+        ].
+        thumbFrameSizeDifference := newSize1 - computedSize.
+    ].
+
+    "
+     oops - if height does not reflect real visibible area, we have to adjust the origin
+    "
+    (thumbFrameSizeDifference == 0) ifFalse:[
+        newPos1 := (self absFromPercent:thumbOrigin) + margin.
+"/        newPos1 := ((thumbOrigin * (sz1 - thumbFrameSizeDifference - (margin * 2))) / 100) rounded + margin
+    ].
+
+    (orientation == #vertical) ifTrue:[
+        ny := newPos1 max:margin.
+        nx := newPos2.
+        nh := newSize1.
+        nw := newSize2 max:2.
+        ny + nh >= (height - margin) ifTrue:[
+            ny := (height - 1 - margin - nh) max:margin.
+        ].
+        (nx+nw) >= width ifTrue:[
+            nx := ((width - nw) // 2) max:0.
+        ].
+
+        nb := ny + nh - 1.
+        nb >= (height - margin) ifTrue:[
+            ny <= margin ifTrue:[
+                thumbFrame := nil.
+                ^ self
+            ]
+        ].
+    ] ifFalse:[
+        nx := newPos1 max:margin.
+        ny := newPos2.
+        nw := newSize1.
+        nh := newSize2 max:2.
+        nx + nw >= (width - margin) ifTrue:[
+            nx := (width - 1 - margin - nw) max:margin.
+        ].
+        (ny+nh) >= height ifTrue:[
+            ny := ((height - nh) // 2) max:0.
+        ].
+        nr := nx + nw - 1.
+        nr >= (width - margin) ifTrue:[
+            nx <= margin ifTrue:[
+                thumbFrame := nil.
+                ^ self
+            ]
+        ].
+    ].
+    (((styleSheet name == #winXP) or:[styleSheet name == #winVista]) 
+    and:[self isMiniScroller not]) ifTrue:[
+        nw := nw + 1.
+        nh := nh + 1.
+    ].
+
+    "
+     do not create a new Rectangle if its the same anyway
+    "
+    thumbFrame notNil ifTrue:[
+        (ny == thumbFrame top) ifTrue:[
+          (nx == thumbFrame left) ifTrue:[
+            (nh == thumbFrame height) ifTrue:[
+              (nw == thumbFrame width) ifTrue:[ ^ self]
+            ]
+          ]
+        ]
+    ].
+
+    thumbFrame := Rectangle left:nx top:ny width:nw height:nh.
+
+    "Modified: / 12.5.1998 / 20:58:51 / cg"
+!
+
+percentFromAbs:absValue
+    "given a number of pixels, compute percentage"
+
+    |fullSize val t|
+
+    (orientation == #vertical) ifTrue:[
+	fullSize := height
+    ] ifFalse:[
+	fullSize := width
+    ].
+
+    absValue < 0 ifTrue:[^ rangeStart].
+    absValue > fullSize ifTrue:[^ rangeEnd].
+
+    t := fullSize - thumbFrameSizeDifference - (margin * 2).
+    t = 0 ifTrue:[
+	"/ in rare cases, this happens ...
+	val := 0
+    ] ifFalse:[
+	val := absValue / t * (rangeEnd - rangeStart).
+    ].
+    val := val + rangeStart.
+
+    rangeStart < rangeEnd ifTrue:[
+	val < rangeStart ifTrue:[^ rangeStart].
+	val > rangeEnd ifTrue:[^ rangeEnd].
+    ] ifFalse:[
+	val > rangeStart ifTrue:[^ rangeStart].
+	val < rangeEnd ifTrue:[^ rangeEnd].
+    ].
+    ^ val
+
+    "Modified: / 21.1.1998 / 19:31:15 / cg"
+!
+
+startMove
+    originBeforeMove := self thumbOrigin.
+
+    (ghostColor notNil 
+    or:[ghostFrameColor notNil
+    or:[ghostLevel ~~ 0]]) ifTrue:[
+	thumbFrame isNil ifTrue:[
+	    self computeThumbFrame.
+	].
+	frameBeforeMove := thumbFrame insetBy:1@1
+    ].
+
+!
+
+updateBackground
+    "make my background grey, whenever either readOnly or disable"
+
+    |bg|
+
+    enabled ifTrue:[
+        bg := DefaultViewBackground.
+    ].
+    bg isNil ifTrue:[
+        bg := View defaultViewBackgroundColor.
+    ].
+
+    bg ~= viewBackground ifTrue:[
+        self backgroundColor:bg.
+        self invalidate
+    ]
+
+! !
+
+!Scroller methodsFor:'private-scrollbar & scrollview interface'!
+
+setThumbFor:aView
+    "get contents and size info from aView and adjust thumb"
+
+    |percentSize percentOrigin contentsSize contentsPosition viewsSize t|
+
+    scrolling ifTrue:[self invalidate].
+
+    "
+     get the content's size
+    "
+    aView isNil ifTrue:[
+        contentsSize := 0
+    ] ifFalse:[
+        orientation == #vertical ifTrue:[
+            contentsSize := aView heightOfContents.
+            (t := aView transformation) notNil ifTrue:[
+                contentsSize := t applyScaleY:contentsSize.
+            ].
+        ] ifFalse:[
+            contentsSize := aView widthOfContents.
+            (t := aView transformation) notNil ifTrue:[
+                contentsSize := t applyScaleX:contentsSize.
+            ].
+        ]
+    ].
+
+    (contentsSize = 0) ifTrue:[
+        percentSize := 100.
+        percentOrigin := 100
+    ] ifFalse:[
+        (orientation == #vertical) ifTrue:[
+            viewsSize := aView innerHeight.
+            contentsPosition := aView yOriginOfContents.
+        ] ifFalse:[
+            viewsSize := aView innerWidth.
+            contentsPosition := aView xOriginOfContents
+        ].
+
+        percentSize := viewsSize * 100.0 / contentsSize.
+        percentOrigin := contentsPosition * 100.0 / contentsSize.
+        percentOrigin + percentSize > 100.0 ifTrue:[
+            "actually showing stuff below contents of view"
+"
+            contentsSize := contentsPosition + aView innerHeight.
+            percentSize := viewsSize * 100.0 / contentsSize.
+            percentOrigin := contentsPosition * 100.0 / contentsSize
+"
+        ]
+    ].
+    (percentSize = thumbHeight) ifTrue:[
+        self thumbOrigin:percentOrigin
+    ] ifFalse:[
+        (percentOrigin = thumbOrigin) ifTrue:[
+            self thumbHeight:percentSize
+        ] ifFalse:[
+            self thumbOrigin:percentOrigin thumbHeight:percentSize
+        ]
+    ].
+!
+
+setThumbHeightFor:aView
+    "get contents and size info from aView and adjust thumb height"
+
+    |percent total viewsSize|
+
+    scrolling ifTrue:[self invalidate].
+
+    (orientation == #vertical) ifTrue:[
+	total := aView heightOfContents.
+	aView transformation notNil ifTrue:[
+	    total := aView transformation applyScaleY:total.
+	].
+    ] ifFalse:[
+	total := aView widthOfContents.
+	aView transformation notNil ifTrue:[
+	    total := aView transformation applyScaleX:total.
+	].
+    ].
+    (total = 0) ifTrue:[
+	percent := 100
+    ] ifFalse:[
+	viewsSize := (orientation == #vertical) ifTrue:[aView innerHeight]
+					   ifFalse:[aView innerWidth].
+	percent := viewsSize * 100.0 / total
+    ].
+    self thumbHeight:percent
+!
+
+setThumbOriginFor:aView
+    "get contents and size info from aView and adjust thumb origin"
+
+    |percent total contentsPosition|
+
+    scrolling ifTrue:[self invalidate].
+
+    (orientation == #vertical) ifTrue:[
+        total := aView heightOfContents.
+        aView transformation notNil ifTrue:[
+            total := aView transformation applyScaleY:total.
+        ].
+    ] ifFalse:[
+        total := aView widthOfContents.
+        aView transformation notNil ifTrue:[
+            total := aView transformation applyScaleX:total.
+        ].
+    ].
+    (total = 0) ifTrue:[
+        percent := 100
+    ] ifFalse:[
+        contentsPosition := (orientation == #vertical) ifTrue:[aView yOriginOfContents]
+                                                  ifFalse:[aView xOriginOfContents].
+        percent := contentsPosition * 100.0 / total
+    ].
+    self thumbOrigin:percent.
+! !
+
+!Scroller methodsFor:'queries'!
+
+isMiniScroller
+    ^ false
+!
+
+isScrolling
+    "true, if thumb is being moved (by user)"
+
+    ^ scrolling
+!
+
+preferredExtent
+    "return my preferredExtent"
+
+    |defExt w h|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    defExt := self class defaultExtent.
+
+    orientation == #vertical ifTrue:[
+        h := defExt y.
+        (w := DefaultVScrollerWidth) isNil ifTrue:[
+            w := (self graphicsDevice horizontalPixelPerMillimeter asFloat * 5) rounded
+        ]
+    ] ifFalse:[
+        w := defExt x.
+        (h := DefaultHScrollerHeight) isNil ifTrue:[
+            h := (self graphicsDevice verticalPixelPerMillimeter asFloat * 5) rounded
+        ]
+    ].
+
+    preferredExtent := w @ h.
+    ^ preferredExtent.
+
+    "Modified: / 28.4.1999 / 18:28:19 / cg"
+!
+
+thumbVisible
+    "return true, if the thumb is usable i.e. its visible & movable.
+     Can be used by the scrollBar to decide if it should hide the scroller."
+
+    |m2|
+
+    (thumbHeight >= 100) ifTrue:[^ false].
+    self computeThumbFrame.
+    thumbFrame isNil ifTrue:[^ false].
+
+    m2 := margin * 2.
+    orientation == #vertical ifTrue:[
+	thumbFrame height >= (height - m2) ifTrue:[^ false].
+    ] ifFalse:[
+	thumbFrame width >= (width - m2) ifTrue:[^ false].
+    ].
+    ^ true
+
+    "Created: / 7.3.1997 / 21:10:23 / cg"
+    "Modified: / 12.5.1998 / 20:21:00 / cg"
+!
+
+verticalScrollStep
+    "mouse wheel: scroll by keyboardStep or a quarter of a page
+     Note: this is used for horizontal scrollers, too"
+
+    ^ (keyboardStep ? (thumbHeight / 4)) max:1
+! !
+
+!Scroller class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/Scroller.st,v 1.206 2014-03-19 10:04:19 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/Scroller.st,v 1.206 2014-03-19 10:04:19 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SelectionInList.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,462 @@
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+ValueHolder subclass:#SelectionInList
+	instanceVariableNames:'listHolder selectionIndexHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Models'
+!
+
+!SelectionInList class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1994 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Instances of SelectionInList can be used as model for
+    a SelectionInListView or a PopUpList. 
+    They keep two values: a list value and a selection value; 
+    both are referred to via valueHolders.
+
+    If any of those two changes, the selectionInList notifies its 
+    dependents via a change notification, 
+    using #list or #selectionIndex as update aspect respectively.
+
+    A popupList also knows how to deal with a selectionInList model;
+    this makes it possible to have popupLists be somewhat exchangable
+    with selectionInListViews.
+
+    SelectionInLists only support a single selection within the list;
+    use MultiSelectionInList, if multiple selections are needed.
+
+    [instance variables:]
+        listHolder              <ValueHolder>           holds the list
+        selectionIndexHolder    <ValueHolder>           holdes the selectionIndex
+
+
+    [see also:]
+        SelectionInListView PopUpList
+        MultiSelectionInList Model ValueHolder
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples
+"
+  basic setup using a selectionInList as model of a selectionInListView:
+                                                                        [exBegin]
+    |m v|
+
+    m := SelectionInList new.
+    m list:#('one' 'two' 'three' 'four').
+    m selectionIndex:2.
+
+    v := SelectionInListView on:m.
+    v open
+                                                                        [exEnd]
+
+
+  similar, a selectionInList as model of a popUpList:
+                                                                        [exBegin]
+    |m v|
+
+    m := SelectionInList new.
+    m list:#('one' 'two' 'three' 'four').
+    m selectionIndex:2.
+
+    v := PopUpList on:m.
+    v open
+                                                                        [exEnd]
+
+
+  using a combination-instance creation method:
+                                                                        [exBegin]
+    |m v|
+
+    m := SelectionInList 
+                with:#('one' 'two' 'three' 'four')
+                initialSelection:2.
+
+    v := PopUpList on:m.
+    v open
+                                                                        [exEnd]
+
+
+  two different views on the same selectionInList model:
+                                                                        [exBegin]
+    |m v1 v2|
+
+    m := SelectionInList new.
+    m list:#('one' 'two' 'three' 'four').
+    m selectionIndex:2.
+
+    v1 := PopUpList on:m.
+    v1 open.
+
+    v2 := SelectionInListView on:m.
+    v2 open
+                                                                        [exEnd]
+
+
+  two views on the same selectionInList:
+  and a button, which adds an item to the list.
+                                                                        [exBegin]
+    |m v1 v2 b numItems|
+
+    numItems := 4.
+
+    m := SelectionInList new.
+    m list:((1 to:numItems) collect:[:i | i printString]).
+    m selectionIndex:2.
+
+    v1 := ScrollableView forView:(SelectionInListView on:m).
+    v1 open.
+
+    v2 := ScrollableView forView:(SelectionInListView on:m).
+    v2 open.
+
+    b := Button label:'add item'.
+    b action:[numItems := numItems + 1.
+              m list:((1 to:numItems) collect:[:i | i printString]).
+             ].
+    b open
+                                                                        [exEnd]
+"
+! !
+
+!SelectionInList class methodsFor:'instance creation'!
+
+with:aList
+    "return a new instance holding aList"
+
+    ^ self new listHolder:(ValueHolder with:aList)
+
+    "Modified: / 21.5.1998 / 03:17:16 / cg"
+!
+
+with:aList initialSelection:index
+    "return a new instance holding aList and initially selecting
+     the item at index."
+
+    ^ (self with:aList) 
+        selectionIndexHolder:(ValueHolder with:index)
+
+    "Created: / 24.4.1996 / 08:47:33 / cg"
+    "Modified: / 21.5.1998 / 03:17:31 / cg"
+! !
+
+!SelectionInList methodsFor:'accessing-holders'!
+
+listHolder
+    "return the valueHolder which holds the list"
+
+    ^ listHolder
+
+    "Modified: 24.4.1996 / 08:39:44 / cg"
+!
+
+listHolder:aValueHolder
+    "set the valueHolder which holds the list.
+     Q: should we forward a change-notification ?"
+
+    listHolder notNil ifTrue:[
+        listHolder removeDependent:self
+    ].
+    listHolder := aValueHolder.
+    listHolder addDependent:self
+
+    "Modified: 24.4.1996 / 08:39:59 / cg"
+!
+
+selectionHolder
+    "return someone holding on the selection itself (not the index). 
+     Since we have no one, create an adapter, to get up-to-date values."
+
+    ^ AspectAdaptor 
+        subject:self 
+        sendsUpdates:false
+        accessWith:#selection 
+        assignWith:#'selection:' 
+        aspect:#selectionIndex
+
+    "Modified: 24.4.1996 / 08:40:19 / cg"
+!
+
+selectionIndexHolder
+    "return the valueHolder which holds the index"
+
+    ^ selectionIndexHolder
+
+    "Modified: 24.4.1996 / 08:40:31 / cg"
+!
+
+selectionIndexHolder:aValueHolder
+    "set the valueHolder which holdes the index.
+     Q: should we forward a change-notification ?"
+
+    selectionIndexHolder notNil ifTrue:[
+        selectionIndexHolder removeDependent:self
+    ].
+    selectionIndexHolder := aValueHolder.
+    selectionIndexHolder addDependent:self
+
+    "Modified: 24.4.1996 / 08:40:42 / cg"
+! !
+
+!SelectionInList methodsFor:'accessing-values'!
+
+list
+    "return the list - thats the thingy held by the listHolder"
+
+    ^ listHolder value
+
+    "Modified: 24.4.1996 / 08:41:05 / cg"
+!
+
+list:aCollection
+    "set the list - thats the thingy held by the listHolder"
+
+    aCollection == listHolder value ifTrue:[
+        "/ same value set again - send change notification
+        "/ manually (valueHolder does not ...)
+        listHolder changed.
+    ] ifFalse:[               
+        aCollection isList ifTrue:[
+            self listHolder:aCollection.
+            listHolder changed.
+        ] ifFalse:[
+            listHolder isList ifTrue:[
+                listHolder contents:aCollection.
+            ] ifFalse:[
+                listHolder value:aCollection.
+            ]
+        ]
+"/        listHolder value:aCollection.
+    ].
+
+    "Modified: / 2.2.1998 / 13:05:56 / cg"
+!
+
+selection
+    "return the selections value (i.e. the entry in the list - not its index).
+     If nothing is selected, nil is returned."
+
+    |idx|
+
+    idx := self selectionIndex.
+    (idx isNil or:[idx == 0]) ifTrue:[^ nil].
+    ^ self list at:idx
+
+    "Modified: 24.4.1996 / 08:53:23 / cg"
+!
+
+selection:anObject 
+    "set the selection to be anObject.
+     If anObject is not in the list, the selection is cleared"
+
+    ^ self selectionIndex:(self list indexOf:anObject ifAbsent:0)
+!
+
+selectionIndex
+    "return the selections index (1..). Thats the thingy held by the indexHolder.
+     For ST-80 compatibility, 0 is returned if nothing is selected."
+
+    ^ selectionIndexHolder value
+
+    "Modified: 24.4.1996 / 08:53:45 / cg"
+!
+
+selectionIndex:newIndex
+    "set the selectionIndex"
+
+    selectionIndexHolder value ~= newIndex ifTrue:[
+        selectionIndexHolder value:newIndex
+    ]
+
+    "Modified: 24.4.1996 / 08:42:04 / cg"
+! !
+
+!SelectionInList methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "whenever one of my holders value changes,
+     tell my dependents about this"
+
+    |oldSelection|
+
+    changedObject == selectionIndexHolder ifTrue:[
+        self changed:#selectionIndex
+    ] ifFalse:[
+        changedObject == listHolder ifTrue:[
+            (something == #value 
+            or:[ listHolder isList ])
+            ifTrue:[
+                oldSelection := selectionIndexHolder value.
+                self clearSelection.  "/ clears without update
+                self changed:#list.
+                oldSelection ~= (selectionIndexHolder value) ifTrue:[
+                    selectionIndexHolder changed:#value
+                ]
+            ]
+        ]
+    ]
+
+    "Modified: 20.4.1996 / 13:08:32 / cg"
+! !
+
+!SelectionInList methodsFor:'initialization'!
+
+initialize
+    "initialize; create the valueHolders for the index and the list"
+
+    self listHolder:(ValueHolder with:List new).
+    self selectionIndexHolder:(ValueHolder with:self zeroIndex).
+
+    "Modified: / 21.5.1998 / 03:17:56 / cg"
+! !
+
+!SelectionInList methodsFor:'obsolete-backward compatibility'!
+
+index
+    "return the selections index.
+     This is an OBSOLETE backward compatibility interface"
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'use #selectionIndex'.
+    ^ self selectionIndex
+
+    "Modified: 24.4.1996 / 08:43:10 / cg"
+!
+
+index:newIndex
+    "set the selections index.
+     This is an OBSOLETE backward compatibility interface"
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'use #selectionIndex:'.
+    ^ self selectionIndex:newIndex
+
+    "Modified: 24.4.1996 / 08:43:06 / cg"
+!
+
+indexHolder
+    "return the valueHolder of the selections index.
+     This is an OBSOLETE backward compatibility interface"
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'use #selectionIndexHolder'.
+    ^ self selectionIndexHolder
+
+    "Modified: 24.4.1996 / 08:43:35 / cg"
+!
+
+indexHolder:aValueHolder
+    "set the valueHolder of the selections index.
+     This is an OBSOLETE backward compatibility interface"
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'use #selectionIndexHolder:'.
+    ^ self selectionIndexHolder:aValueHolder
+
+    "Modified: 24.4.1996 / 08:43:43 / cg"
+! !
+
+!SelectionInList methodsFor:'printing & storing'!
+
+displayOn:aGCOrStream
+    "Compatibility
+     append a printed desription on some stream (Dolphin,  Squeak)
+     OR:
+     display the receiver in a graphicsContext at 0@0 (ST80).
+     This method allows for any object to be displayed in some view
+     (although the fallBack is to display its printString ...)"
+
+    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
+    "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
+    aGCOrStream isStream ifFalse:[
+        ^ super displayOn:aGCOrStream.
+    ].
+
+    aGCOrStream 
+        nextPutAll:self class name;
+        nextPut:$(.
+    self selectionIndex displayOn:aGCOrStream. 
+    aGCOrStream nextPut:$)
+! !
+
+!SelectionInList methodsFor:'private'!
+
+clearSelection
+    "clear the selection.
+     For ST-80 compatibility, a non-selection has an index of 0
+     although, nil sounds more natural to me ... (sigh)"
+
+    selectionIndexHolder setValue:self zeroIndex.
+
+    "Modified: 24.4.1996 / 08:44:37 / cg"
+! !
+
+!SelectionInList methodsFor:'queries'!
+
+hasSelection
+    "return true, if there is a selection
+    "
+    ^ self numberOfSelections ~~ 0
+!
+
+numberOfSelections
+    "return the number of selected entries
+    "
+    |s|
+
+    s:= selectionIndexHolder value.
+    ^ (s ~~ 0 and:[s notNil]) ifTrue:[1] ifFalse:[0]
+!
+
+zeroIndex
+    "return the selections index returned when nothing
+     is selected. This method is provided to allow applications
+     to deal transparently with SelectionInList models AND with
+     MultSelectionInList models, which use different no-selection values.
+     Although I would prefer nil, ST-80 uses 0 to represent `no-selection'. (sigh)"
+
+    ^ 0
+
+    "Created: 20.4.1996 / 13:10:53 / cg"
+    "Modified: 24.4.1996 / 08:46:18 / cg"
+! !
+
+!SelectionInList class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/SelectionInList.st,v 1.31 2012-08-03 15:53:06 stefan Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SelectionInListView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4162 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+ListView subclass:#SelectionInListView
+	instanceVariableNames:'selection actionBlock enabled hilightFgColor hilightBgColor
+		hilightFgColorNoFocus hilightBgColorNoFocus halfIntensityFgColor
+		doubleClickActionBlock listAttributes multipleSelectOk clickLine
+		selectMode selectionAtClickTime initialSelectionMsg printItems
+		oneItem useIndex hilightLevel hilightFrameColor ignoreReselect
+		arrowLevel smallArrow keyActionStyle returnKeyActionStyle
+		toggleSelect strikeOut iSearchString items doubleClickMsg
+		hilightStyle clickPosition allowDrag dragObjectConverter
+		dragIsActive endDragAction dropSource visualBlock
+		selectedVisualBlock selectConditionBlock isButtonPressActive'
+	classVariableNames:'RightArrowShadowForm RightArrowLightForm RightArrowForm
+		SmallRightArrowShadowForm SmallRightArrowLightForm
+		DefaultForegroundColor DefaultBackgroundColor
+		DefaultHilightForegroundColor DefaultHilightBackgroundColor
+		DefaultHilightFrameColor DefaultHilightLevel
+		DefaultRightArrowStyle DefaultRightArrowLevel
+		DefaultDisabledForegroundColor DefaultShadowColor
+		DefaultLightColor DefaultHilightStyle'
+	poolDictionaries:''
+	category:'Views-Lists'
+!
+
+!SelectionInListView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this one is a ListView with a selected line (which is shown highlighted)
+    If multipleSelectionsOk is true, it is also allowed to shift-click multiple 
+    entries.
+    If toggleSelect is true, clicking toggles (i.e. click on a seleted item
+    will deselect).
+
+    Whenever the selection changes, an action-block is evaluated, passing the 
+    current selection as argument.
+    Currently, the selection can be nil, aNumber or a collection of numbers; 
+    this will change to be either nil or a collection, making selection handling 
+    easier in the future. (this stupid behavior is due to the multiple
+    select feature being added later - the first implementation used to support
+    only single selections).
+
+    The actionBlock is called with the current selection (single number or
+    collection of numbers) as argument.
+
+    Also, to support ST-80 MVC-style use, the model (if nonNil) is notified
+    by the change mechanism (performs changeMsg) and vice versa, the view
+    updates if the model changes (with aspect of either #list or #selectionIndex).
+
+    Before actually adding entries to the the selection, a checkBlock (if non-nil) is evaluated 
+    passing the number of the entry whch is about to be selected as argument.
+    The select change operation is only done if this returns true. This allows
+    interception of select, for example to query the user if he/she wants to save
+    the old contents before (see uses in SystemBrowser and FileBrowser), or to
+    disable individual entries.
+
+    It is also possible to select entries with the keyboard; use the cursor up/
+    down keys to select prev/next, Home- and End-keys to select first/last. 
+    Use the return key to apply the double-click-action to the current selection.
+    Also, alphabetic keys will select the next entry starting with that key.
+
+    The keyboard behavior can be further controlled with the keyActionStyle
+    instance variable (see SelectionInListView>>keyActionStyle:).
+
+    Finally, ignoreReselect controls if pressing on an already selected item
+    triggers the action or not. For some applications it is useful to allow
+    reselects (for example, the SystemBrowsers method-list updates the
+    source code in this case).
+
+    Currently, some limited form of line attributes are supported. These
+    are kept in the instance variable lineAttributes.
+    This may change (using mechanisms similar to MultiColListEntry), so
+    be prepared. (dont use the listAttributes instvar directly; if possible,
+    use MultiColListEntry or subclasses of it.
+
+    Although currently based on the listAttributes instVar, the implementation of
+    text attributes will be changed in the near future (when Text/DisplayText are
+    available). 
+    However, the protocol will probably be kept for backward compatibility
+    (i.e. use #attributeAt: / #attributeAt:put etc. - at least, these are easy to find
+    when migrating to the new attributed text handling).
+
+    [Instance variables:]
+        selection               <misc>          the current selection. nil, a number or collection of numbers
+
+        actionBlock             <Block>         block to be evaluated on selection changes
+                                                (1-arg blocks gets selectionIndex or selectionValue
+                                                 as arg - depending upon the useIndex setting)
+
+        useIndex                <Boolean>       if true, the index of a selection is passed to
+                                                the actionBlock or stuffed into the selection valueHolder;
+                                                if false, the seelction-value is passed.
+
+        enabled                 <Boolean>       true: selection changes allowed; false: ignore clicks
+
+        hilightFgColor
+        hilightBgColor          <Color>         how highlighted items are drawn
+
+        halfIntensityColor      <Color>         foreground for disabled items
+
+        selectCondition         <Block>         if non-nil, this block can decide if selection is ok.
+                                or              its invoked with the itemNr of the
+                                <ValueHolder>   'to-be-selected' item.
+                                                If the block returns true, the item is selected
+                                                (or added to the selection); if false is returned,
+                                                no action is taken.
+        selectionChangeCondition
+                                <Block>         much like above, but invoked without argument,
+                                or              on any change of the selection (i.e. also when items
+                                <ValueHolder>   are deselected).
+                                                Can return false to suppress change.
+
+        doubleClickActionBlock  <Block>         action to perform on double-click
+                                                (1-arg blocks gets selectionIndex or selectionValue
+                                                 as arg - depending upon the useIndex setting)
+
+        listAttributes                          dont use - will vanish
+
+        hilightLevel            <Integer>       level to draw selections (i.e. for 3D effect)
+        hilightFrameColor       <Color>         rectangle around highlighted items
+
+        multipleSelectOk        <Boolean>       if true, multiple selections (with shift) are ok.
+                                                default: false
+
+        ignoreReselect          <Boolean>       if true, selecting same again does not trigger action;
+                                                if false, every select triggers it.
+                                                default: true
+
+        toggleSelect            <Boolean>       if true, click toggles;
+                                                if false, click selects.
+                                                default: false
+
+        arrowLevel              <Integer>       level to draw right-arrows (for submenus etc.)
+        smallArrow              <Boolean>       if true, uses a small arrow bitmap
+
+        listMsg                                 if non-nil, use ST-80 style (model-access)
+        initialSelectionMsg 
+        printItems 
+        oneItem
+
+        keyActionStyle          <Symbol>        controls how to respond to keyboard selects
+
+        returnKeyActionStyle    <Symbol>        controls how to respond to return key
+
+    written spring/summer 89 by claus
+    3D Jan 90 by claus
+    multiselect Jun 92 by claus
+    keyboard-select jun 94 by claus
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples
+"
+    SelectionInListView can be used both in the ST/X way, using action blocks
+    or in the traditional mvc way.
+    with actions:
+
+      basic interface:
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:#('one' 'two' 'three').
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+
+        top add:slv in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+      get element instead of index:
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:#('one' 'two' 'three').
+        slv action:[:element | Transcript showCR:'selected ' , element printString].
+        slv useIndex:false.
+
+        top add:slv in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+      concrete example; show filenames:
+      (notice: normally, you would use a FileSelectionList)
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | 
+            Transcript showCR:'selected ' , index printString.
+            Transcript showCR:' the value is: ', slv selectionValue].
+
+        top add:slv in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+      add a scrollbar:
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+      allow reselect
+      (clicking on already selected entry 
+       triggers action/changeNotification again):
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv ignoreReselect:false.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+      allow multiple selections (shift-select):
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:indexList | Transcript showCR:'selected ' , indexList printString].
+        slv multipleSelectOk:true.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+      same, not using index:
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:indexList | Transcript showCR:'selected ' , indexList printString].
+        slv multipleSelectOk:true; useIndex:false.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+      strikeout mode (single):
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv strikeOut:true.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+      strikeout mode (multiple):
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv strikeOut:true; multipleSelectOk:true.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+      toggleSelect mode (clicking on selected entry deselects it):
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv toggleSelect:true.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+      define what to do on double-click:
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv doubleClickAction:[:index | Transcript showCR:'doubleclick on ' , index printString].
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+      enable / disable:
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv disable.
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open.
+        Delay waitForSeconds:5. 
+        slv enable.
+                                                                        [exEnd]
+
+      enable / disable via a channel:
+                                                                        [exBegin]
+        |top slv enableChannel t|
+
+        enableChannel := true asValue.
+        t := Toggle label:'enable'.
+        t model:enableChannel.
+        t open.
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:(Filename currentDirectory directoryContents).
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv enableChannel:enableChannel.
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open.
+                                                                        [exEnd]
+
+    using a Model:
+                                                                        [exBegin]
+        |top slv model|
+
+        model := Plug new.
+        model respondTo:#getList with:[#('foo' 'bar' 'baz' 'hello')].
+        model respondTo:#initial with:[1].
+        model respondTo:#setSelection: with:[:arg | Transcript showCR:'model selected:', arg printString].
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView 
+                   on:model
+                   aspect:#someAspect
+                   change:#setSelection:
+                   list:#getList
+                   initialSelection:#initial.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+      notice, that the ST-80 behavaior on reselect is to send a selection change
+      with an index of 0.
+
+    same, with useIndex false:
+                                                                        [exBegin]
+        |top slv model|
+
+        model := Plug new.
+        model respondTo:#getList with:[#('foo' 'bar' 'baz' 'hello')].
+        model respondTo:#initial with:['bar'].
+        model respondTo:#setSelection: with:[:arg | Transcript showCR:'model selected:', arg printString].
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView 
+                   on:model
+                   aspect:#someAspect
+                   change:#setSelection:
+                   list:#getList
+                   initialSelection:#initial.
+        slv useIndex:false.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+    self changing list: 
+    (selectionInListView updates itself when button changes initial selection):
+                                                                        [exBegin]
+        |top slv model sel changeButton|
+
+        sel := 'bar'.
+        model := Plug new.
+        model respondTo:#getList with:['getList' printNL. #('foo' 'bar' 'baz' 'hello')].
+        model respondTo:#initial with:['initial' printNL. sel].
+        model respondTo:#setSelection: with:[:arg | ('model selected:', arg) printNL. sel := arg].
+
+        changeButton := Button label:'change selection'.
+        changeButton action:[sel := 'foo'. model changed:#initial].
+        changeButton open.
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView 
+                   on:model
+                   aspect:#someAspect
+                   change:#setSelection:
+                   list:#getList
+                   initialSelection:#initial.
+        slv useIndex:false.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+
+    using a SelectionInList-Model:
+    (see how changes in the model (via list:...) are reflected in the view)
+                                                                        [exBegin]
+        |top slv model|
+
+        model := SelectionInList with:#('foo' 'bar' 'baz' 'hello').
+        model selection:'bar'.
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView on:model.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open.
+
+        InspectorView openOn:model monitor:'selectionIndexHolder'
+                                                                        [exEnd]
+
+
+    two selectionInListViews on the same selectionInList model:
+                                                                        [exBegin]
+        |top1 slv1 top2 slv2 model|
+
+        model := SelectionInList with:#('foo' 'bar' 'baz' 'hello').
+
+        top1 := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv1 := SelectionInListView on:model.
+
+        top1 add:(ScrollableView forView:slv1) in:(0.0@0.0 corner:1.0@1.0).
+        top1 open.
+
+        top2 := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv2 := SelectionInListView on:model.
+
+        top2 add:(ScrollableView forView:slv2) in:(0.0@0.0 corner:1.0@1.0).
+        top2 open.
+                                                                        [exEnd]
+
+
+    a MultiSelectionInList model:
+                                                                        [exBegin]
+        |top slv model|
+
+        model := MultiSelectionInList with:#('foo' 'bar' 'baz' 'hello').
+        model selection:#('foo' 'bar').
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView on:model.
+        slv multipleSelectOk:true.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open.
+
+        InspectorView openOn:model monitor:'selectionIndexHolder'
+                                                                        [exEnd]
+
+    with strikeOut:
+                                                                        [exBegin]
+        |top slv model|
+
+        model := MultiSelectionInList with:#('foo' 'bar' 'baz' 'hello').
+        model selection:#('foo' 'bar').
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView on:model.
+        slv multipleSelectOk:true; toggleSelect:true; strikeOut:true.
+
+        top add:(ScrollableView forView:slv) in:(0.0@0.0 corner:1.0@1.0).
+        top open.
+
+        InspectorView openOn:model monitor:'selectionIndexHolder'
+                                                                        [exEnd]
+
+
+    two listViews on the same list, but separate selections
+                                                                        [exBegin]
+        |top top2 lv1 lv2 selInL1 selInL2 listHolder l1 l2|
+
+        top := StandardSystemView new extent:300@300.
+
+        lv1 := SelectionInListView origin:0.0@0.0 corner:1.0@0.5 in:top.
+        lv1 level:-1.
+        lv1 toggleSelect:true.
+
+        lv2 := SelectionInListView origin:0.0@0.5 corner:1.0@1.0 in:top.
+        lv2 level:-1.
+        lv2 toggleSelect:true.
+
+        selInL1 := SelectionInList new.
+        selInL2 := SelectionInList new.
+
+        listHolder := #('foo' 'bar' 'baz') asValue.
+
+        selInL1 listHolder:listHolder.
+        selInL2 listHolder:listHolder.
+
+        lv1 model:selInL1.
+        lv2 model:selInL2.
+
+        top open.
+
+        top2 := StandardSystemView new extent:100 @ 30.
+        l1 := Label origin:0.0@0.0 corner:0.5@1.0 in:top2.
+        l2 := Label origin:0.5@0.0 corner:1.0@1.0 in:top2.
+
+        l1 model:(BlockValue with:[:arg | arg value printString] argument:selInL1 selectionIndexHolder).
+        l2 model:(BlockValue with:[:arg | arg value printString] argument:selInL2 selectionIndexHolder).
+
+        l1 labelMessage:#value.
+        l2 labelMessage:#value.
+
+        top2 open.
+
+        Delay waitForSeconds:2.
+        listHolder value:#('1' '2' '3' '4').
+                                                                        [exEnd]
+    non-string entries (text)
+                                                                        [exBegin]
+        |top l slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        l := OrderedCollection new.
+        l add:(Text string:'red' emphasis:(#color->Color red)).
+        l add:(Text string:'green' emphasis:(#color->Color green)).
+        l add:(Text string:'blue' emphasis:(#color->Color blue)).
+        slv list:l.
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+
+        top add:slv in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+
+      non string entries
+                                                                        [exBegin]
+        |top slv wrapper l fileImage dirImage m|
+
+        dirImage := Image fromFile:'DirObj.xbm'.
+        fileImage := Image fromFile:'FileObj.xbm'.
+
+
+        l := OrderedCollection new.
+        Filename currentDirectory directoryContents do:[:s |
+            s asFilename isDirectory ifTrue:[
+                l add:(LabelAndIcon icon:dirImage string:s)
+            ] ifFalse:[
+                l add:(LabelAndIcon icon:fileImage string:s)
+            ]
+        ].
+
+        m := SelectionInList new.
+        m list:l.
+
+        slv := SelectionInListView new.
+        slv model:m.
+        wrapper := HVScrollableView forView:slv miniScrollerH:true.
+
+        top := StandardSystemView extent:150@200.
+        top add:wrapper in:(0.0@0.0 corner:1.0@1.0).
+        top open.
+                                                                        [exEnd]
+
+                                                                        [exBegin]
+        |top slv|
+
+        top := StandardSystemView new
+                label:'select';
+                minExtent:100@100;
+                maxExtent:300@400;
+                extent:200@200.
+
+        slv := SelectionInListView new.
+        slv list:#('one' 'two' 'three').
+        slv action:[:index | Transcript showCR:'selected ' , index printString].
+        slv multipleSelectOk:true.
+        slv allowDrag:true.
+
+        top add:slv in:(0.0@0.0 corner:1.0@1.0).
+        top open
+                                                                        [exEnd]
+"
+
+    "Modified: 26.10.1995 / 16:42:02 / cg"
+! !
+
+!SelectionInListView class methodsFor:'instance creation'!
+
+on:aModel aspect:aspect change:change list:list initialSelection:initial
+    ^ self on:aModel
+	    printItems:true 
+	    oneItem:false 
+	    aspect:aspect
+	    change:change 
+	    list:list 
+	    menu:nil 
+	    initialSelection:initial 
+	    useIndex:true 
+!
+
+on:aModel aspect:aspect change:change list:list menu:menu initialSelection:initial
+    ^ self on:aModel
+	    printItems:true 
+	    oneItem:false 
+	    aspect:aspect
+	    change:change 
+	    list:list 
+	    menu:menu
+	    initialSelection:initial 
+	    useIndex:true 
+!
+
+on:aModel printItems:print oneItem:one aspect:aspect
+	      change:change list:list menu:menu initialSelection:initial
+
+    "for ST-80 compatibility"
+
+    ^ self on:aModel 
+	    printItems:print 
+	    oneItem:one 
+	    aspect:aspect
+	    change:change 
+	    list:list 
+	    menu:menu
+	    initialSelection:initial
+	    useIndex:false 
+!
+
+on:aModel printItems:print oneItem:one aspect:aspect change:change 
+		list:list menu:menu initialSelection:initial useIndex:useIndex
+
+    "for ST-80 compatibility"
+
+    ^ (self new) on:aModel 
+		 printItems:print 
+		 oneItem:one 
+		 aspect:aspect
+		 change:change 
+		 list:list 
+		 menu:menu
+		 initialSelection:initial
+		 useIndex:useIndex
+! !
+
+!SelectionInListView class methodsFor:'defaults'!
+
+defaultAspectMessage
+    ^ nil
+!
+
+defaultBackgroundColor
+    ^ DefaultBackgroundColor
+!
+
+defaultChangeMessage
+    ^ #selectionIndex: 
+!
+
+defaultListMessage
+    ^ #list 
+!
+
+defaultSelectionMessage
+    ^ #selectionIndex 
+!
+
+rightArrowFormOn:aDevice
+    "return the form used for the right arrow (non 3D)"
+
+    <resource: #style (#'selection.rightArrowForm' #'selection.rightArrowFormFile')>
+
+    |f fn bits|
+
+    ((aDevice == Display) and:[RightArrowForm notNil]) ifTrue:[
+        ^ RightArrowForm
+    ].
+
+    f := self styleSheet at:#'selection.rightArrowForm'.
+    f isNil ifTrue:[
+        fn := StyleSheet at:#'selection.rightArrowFormFile' default:'RightArrow.xbm'.
+        f := Smalltalk imageFromFileNamed:fn forClass:self.
+        f notNil ifTrue:[
+            f := f onDevice:aDevice.
+        ] ifFalse:[
+            DefaultRightArrowStyle == #solid ifTrue:[
+                bits := #[2r00000000 2r00000000 
+                          2r00000000 2r00000000 
+                          2r00000000 2r00000000 
+                          2r00000010 2r00000000 
+                          2r00000011 2r00000000 
+                          2r00000011 2r10000000 
+                          2r00000011 2r11000000 
+                          2r00000011 2r11100000 
+                          2r00000011 2r11110000 
+                          2r00000011 2r11100000
+                          2r00000011 2r11000000 
+                          2r00000011 2r10000000 
+                          2r00000011 2r00000000
+                          2r00000010 2r00000000 
+                          2r00000000 2r00000000 
+                          2r00000000 2r00000000]
+            ] ifFalse:[
+                bits := #[2r00000000 2r00000000 
+                          2r00000000 2r00000000 
+                          2r00000000 2r00000000 
+                          2r00000110 2r00000000 
+                          2r00000101 2r00000000 
+                          2r00000100 2r10000000 
+                          2r00000100 2r01000000 
+                          2r00000100 2r00100000 
+                          2r00000100 2r00010000 
+                          2r00000100 2r00100000
+                          2r00000100 2r01000000 
+                          2r00000100 2r10000000 
+                          2r00000101 2r00000000
+                          2r00000110 2r00000000 
+                          2r00000000 2r00000000 
+                          2r00000000 2r00000000]
+            ].
+            f := Form width:16 height:16 fromArray:bits onDevice:aDevice
+        ]
+    ].
+    (aDevice == Display) ifTrue:[
+        RightArrowForm := f
+    ].
+    ^ f
+
+    "Modified: / 5.8.1998 / 00:04:40 / cg"
+!
+
+rightArrowLightFormOn:aDevice
+    "return the form used for the right arrow light pixels (3D only)"
+
+    |f|
+
+    ((aDevice == Display) and:[RightArrowLightForm notNil]) ifTrue:[
+        ^ RightArrowLightForm
+    ].
+    f := Smalltalk imageFromFileNamed:'RightArrowLight.xbm' forClass:self.
+    f notNil ifTrue:[
+        f := f onDevice:aDevice.
+    ] ifFalse:[
+        f := Form width:16 height:16 fromArray:#[2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000110 2r00000000 
+                                                 2r00000101 2r00000000 
+                                                 2r00000100 2r10000000 
+                                                 2r00000100 2r01000000 
+                                                 2r00000100 2r00100000 
+                                                 2r00000100 2r00000000 
+                                                 2r00000100 2r00000000
+                                                 2r00000100 2r00000000 
+                                                 2r00000100 2r00000000 
+                                                 2r00000100 2r00000000
+                                                 2r00000100 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000]
+                                              onDevice:aDevice
+    ].
+    (aDevice == Display) ifTrue:[
+        RightArrowLightForm := f
+    ].
+    ^ f
+
+    "Modified: 1.1.1970 / 14:10:42 / cg"
+!
+
+rightArrowShadowFormOn:aDevice
+    "return the form used for the right arrow light pixels (3D only)"
+
+    |f|
+
+    ((aDevice == Display) and:[RightArrowShadowForm notNil]) ifTrue:[
+        ^ RightArrowShadowForm
+    ].
+    f := Smalltalk imageFromFileNamed:'RightArrowShadow.xbm' forClass:self.
+    f notNil ifTrue:[
+        f := f onDevice:aDevice.
+    ] ifFalse:[
+        f := Form width:16 height:16 fromArray:#[2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00010000 
+                                                 2r00000000 2r00100000
+                                                 2r00000000 2r01000000 
+                                                 2r00000000 2r10000000 
+                                                 2r00000001 2r00000000
+                                                 2r00000010 2r00000000 
+                                                 2r00000000 2r00000000 
+                                                 2r00000000 2r00000000]
+                                              onDevice:aDevice
+    ].
+    (aDevice == Display) ifTrue:[
+        RightArrowShadowForm := f
+    ].
+    ^ f
+
+    "Modified: 1.1.1970 / 01:00:00 / cg"
+!
+
+smallRightArrowLightFormOn:aDevice
+    "return the form used for the small right arrow light pixels (3D only)"
+
+    |f|
+
+    ((aDevice == Display) and:[SmallRightArrowLightForm notNil]) ifTrue:[
+        ^ SmallRightArrowLightForm
+    ].
+    f := Smalltalk imageFromFileNamed:'SmallRightArrowLight.xbm' forClass:self.
+    f notNil ifTrue:[
+        f := f onDevice:aDevice.
+    ] ifFalse:[
+        f := Form width:9 height:9 fromArray:#[2r00000000 2r00000000 
+                                               2r01100000 2r00000000 
+                                               2r01011000 2r00000000 
+                                               2r01000110 2r00000000 
+                                               2r01000000 2r00000000 
+                                               2r01000000 2r00000000 
+                                               2r01000000 2r00000000 
+                                               2r01000000 2r00000000 
+                                               2r00000000 2r00000000]
+                                              onDevice:aDevice
+    ].
+    (aDevice == Display) ifTrue:[
+        SmallRightArrowLightForm := f
+    ].
+    ^ f
+
+    "Modified: 19.12.1996 / 14:10:59 / cg"
+!
+
+smallRightArrowShadowFormOn:aDevice
+    "return the form used for the small right arrow light pixels (3D only)"
+
+    |f|
+
+    ((aDevice == Display) and:[SmallRightArrowShadowForm notNil]) ifTrue:[
+        ^ SmallRightArrowShadowForm
+    ].
+    f := Smalltalk imageFromFileNamed:'SmallRightArrowShadow.xbm' forClass:self.
+    f notNil ifTrue:[
+        f := f onDevice:aDevice.
+    ] ifFalse:[
+        f := Form width:9 height:9 fromArray:#[2r00000000 2r00000000 
+                                               2r00000000 2r00000000 
+                                               2r00000000 2r00000000 
+                                               2r00000000 2r00000000 
+                                               2r00000001 2r00000000 
+                                               2r00000110 2r00000000 
+                                               2r00011000 2r00000000 
+                                               2r00100000 2r00000000 
+                                               2r00000000 2r00000000]
+                                              onDevice:aDevice
+    ].
+    (aDevice == Display) ifTrue:[
+        SmallRightArrowShadowForm := f
+    ].
+    ^ f
+
+    "Modified: 19.12.1996 / 14:11:10 / cg"
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'selection.disabledForegroundColor'
+                       #'selection.hilightForegroundColor' #'selection.hilightBackgroundColor'
+                       #'selection.hilightFrameColor' #'selection.hilightLevel'
+                       #'selection.rightArrowStyle' #'selection.rightArrowLevel'
+                       #'selection.foregroundColor' #'selection.backgroundColor'
+                       #'selection.shadowColor' #'selection.lightColor'
+                       #'selection.font' #'selection.hilightStyle')>
+
+    DefaultDisabledForegroundColor := StyleSheet colorAt:#'selection.disabledForegroundColor'.
+    DefaultHilightForegroundColor := StyleSheet colorAt:#'selection.hilightForegroundColor'.
+    DefaultHilightBackgroundColor := StyleSheet colorAt:#'selection.hilightBackgroundColor'.
+    DefaultHilightFrameColor := StyleSheet colorAt:#'selection.hilightFrameColor'.
+    DefaultHilightLevel := StyleSheet at:#'selection.hilightLevel' default:0.
+    DefaultHilightStyle := StyleSheet at:#'selection.hilightStyle' default:(StyleSheet name).
+    DefaultRightArrowStyle := StyleSheet at:#'selection.rightArrowStyle'.
+    DefaultRightArrowLevel := StyleSheet at:#'selection.rightArrowLevel'.
+    DefaultForegroundColor := StyleSheet colorAt:#'selection.foregroundColor'.
+    DefaultBackgroundColor := StyleSheet colorAt:#'selection.backgroundColor'.
+    DefaultShadowColor := StyleSheet colorAt:#'selection.shadowColor'.
+    DefaultLightColor := StyleSheet colorAt:#'selection.lightColor'.
+    DefaultFont := StyleSheet fontAt:#'selection.font'.
+    RightArrowForm := nil.
+
+    "
+     self updateStyleCache
+    "
+
+    "Modified: 20.10.1997 / 14:04:26 / cg"
+! !
+
+!SelectionInListView methodsFor:'Compatibility-ST80'!
+
+isSingleSelect:aBool
+    self multipleSelectOk:aBool not
+!
+
+sequence
+    "same as #list - for ST80 compatibility"
+
+    ^ self list
+
+    "Created: / 21.6.1998 / 02:46:50 / cg"
+!
+
+setValidTargetIndex:index
+    "ignored for now - for ST80 compatibility"
+
+    ^ self
+
+    "Created: / 4.2.2000 / 00:07:14 / cg"
+!
+
+targetIndex:index
+    self selection:index
+! !
+
+!SelectionInListView methodsFor:'accessing-actions'!
+
+action
+    "return the action block to be performed on select.
+     With useIndex==true, the block gets the selectionIndex as arg,
+     otherwise, it gets the selectionValue."
+
+    ^ actionBlock
+!
+
+action:aBlock
+    "set the action block to be performed on select.
+     With useIndex==true, the block gets the selectionIndex as arg,
+     otherwise, it gets the selectionValue."
+
+    actionBlock := aBlock
+!
+
+doubleClickAction:aOneArgBlock
+    "set the double click action block.
+     If non-nil, that one is evaluated on double click, passing the
+     selection-line-number (useIndex==true) or selectionValue (useIndex==false) as argument."
+
+    doubleClickActionBlock := aOneArgBlock
+
+    "Modified: 24.2.1996 / 16:07:28 / cg"
+!
+
+keyActionStyle:aSymbol
+    "defines how the view should respond to alpha-keys pressed.
+     Possible values are:
+	#select               -> will select next entry starting with that
+				 character and perform the click-action
+
+	#selectAndDoubleclick -> will select next & perform double-click action
+
+	#pass                 -> will pass key to superclass (i.e. no special treatment)
+
+	nil                   -> will ignore key
+
+     the default (set in #initialize) is #select
+    "
+
+    keyActionStyle := aSymbol
+!
+
+returnKeyActionStyle:aSymbol
+    "defines how the view should respond to a return key pressed.
+     Possible values are:
+	#doubleClick          -> perform double-click action
+
+	#pass                 -> will pass key to superclass (i.e. no special treatment)
+
+	nil                   -> will ignore key
+
+     the default (set in #initialize) is #doubleClick 
+    "
+
+    returnKeyActionStyle := aSymbol
+!
+
+selectConditionBlock
+    "get the select-conditionBlock; this block is evaluated before 
+     any selection change is performed (passing the to-be-changed item index as arg).
+     The change will not be done, if the block returns false. 
+     For example, this allows confirmation queries in the SystemBrowser"
+
+    ^ selectConditionBlock
+
+    "Created: / 29-07-2011 / 13:16:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selectConditionBlock:aBlock
+    "set the select-conditionBlock; this block is evaluated before 
+     any selection change is performed (passing the to-be-changed item index as arg).
+     The change will not be done, if the block returns false. 
+     For example, this allows confirmation queries in the SystemBrowser"
+
+    selectConditionBlock := aBlock
+!
+
+useIndex
+    "set/clear the useIndex flag. If set, both actionBlock and change-messages
+     are passed the index(indices) of the selection as argument. 
+     If clear, the value(s) (i.e. the selected string) is passed.
+     Default is true."
+
+    ^ useIndex
+!
+
+useIndex:aBoolean
+    "set/clear the useIndex flag. If set, both actionBlock and change-messages
+     are passed the index(indices) of the selection as argument. 
+     If clear, the value(s) (i.e. the selected string) is passed.
+     Default is true."
+
+    useIndex ~~ aBoolean ifTrue:[
+        useIndex := aBoolean.
+        useIndex ifTrue:[
+            changeMsg == #selection: ifTrue:[
+                changeMsg := #selectionIndex:.
+                aspectMsg := #selectionIndex.
+            ]
+        ] ifFalse:[
+            changeMsg == #selectionIndex: ifTrue:[
+                changeMsg := #selection:.
+                aspectMsg := #selection.
+            ]
+        ].
+    ].
+
+! !
+
+!SelectionInListView methodsFor:'accessing-attributes'!
+
+attributeAt:index
+    "return the line attribute of list line index.
+     currently supported are:
+         #halfIntensity
+         #disabled
+         #bold
+    "
+
+    listAttributes notNil ifTrue:[
+        (index > listAttributes size) ifFalse:[
+            ^ listAttributes at:index
+        ]
+    ].
+    ^ nil
+!
+
+attributeAt:index add:aSymbolOrCollectionOfSymbols
+    "add to a lines attribute(s); 
+     currently supported are:
+	 #halfIntensity
+	 #disabled
+	 #bold 
+    "
+
+    |current|
+
+    current := self attributeAt:index.
+    current isNil ifTrue:[
+	current := Set new.
+    ] ifFalse:[
+	current isSymbol ifTrue:[
+	    current == aSymbolOrCollectionOfSymbols ifTrue:[^ self].
+	    current := Set with:current
+	]
+    ].
+
+    aSymbolOrCollectionOfSymbols isSymbol ifTrue:[
+	current := current add:aSymbolOrCollectionOfSymbols
+    ] ifFalse:[
+	(current includes:aSymbolOrCollectionOfSymbols) ifTrue:[^ self].
+	current addAll:aSymbolOrCollectionOfSymbols
+    ].
+    self attributeAt:index put:current
+!
+
+attributeAt:index put:aSymbolOrCollectionOfSymbolsOrNil
+    "set a lines attribute(s); 
+     currently supported are:
+         #halfIntensity
+         #disabled
+         #bold 
+    "
+
+    (index > self size) ifFalse:[
+        listAttributes isNil ifTrue:[
+            listAttributes := OrderedCollection withSize:index
+        ] ifFalse:[
+            (index > listAttributes size) ifTrue:[
+                listAttributes grow:index
+            ]
+        ].
+        aSymbolOrCollectionOfSymbolsOrNil = (listAttributes at:index) ifFalse:[
+            listAttributes at:index put:aSymbolOrCollectionOfSymbolsOrNil.
+            self redrawLine:index
+        ]
+    ]
+!
+
+attributeAt:index remove:aSymbolOrCollectionOfSymbols
+    "remove a line attribute; 
+     currently supported are:
+	 #halfIntensity
+	 #disabled
+	 #bold 
+    "
+
+    |current|
+
+    current := self attributeAt:index.
+    current isNil ifTrue:[^ self].
+    current isSymbol ifTrue:[
+	aSymbolOrCollectionOfSymbols isSymbol ifTrue:[
+	    current == aSymbolOrCollectionOfSymbols ifTrue:[current := nil]
+	] ifFalse:[
+	    (aSymbolOrCollectionOfSymbols includes:current) ifTrue:[
+		current := nil
+	    ]
+	]
+    ] ifFalse:[
+	aSymbolOrCollectionOfSymbols isSymbol ifTrue:[
+	    current := current remove:aSymbolOrCollectionOfSymbols ifAbsent:[]
+	] ifFalse:[
+	    aSymbolOrCollectionOfSymbols removeAll:aSymbolOrCollectionOfSymbols
+	]
+    ].
+    self attributeAt:index put:current
+!
+
+line:lineNr hasAttribute:aSymbol
+    "return true, if line nr has attribute, aSymbol; 
+     currently supported attributes are:
+	 #halfIntensity
+	 #disabled
+	 #bold 
+    "
+
+    |attr|
+
+    listAttributes isNil ifTrue:[^ false].
+    (lineNr > listAttributes size) ifTrue:[^ false].
+    attr := listAttributes at:lineNr.
+    attr isNil ifTrue:[^ false].
+    attr isSymbol ifTrue:[^ attr == aSymbol].
+    ^ (attr includes:aSymbol)
+!
+
+setAttributes:aList
+    "set the attribute list.
+     No redraw is done - the caller should make sure to redraw afterwards
+     (or use this only before the view is visible)."
+
+    listAttributes := aList
+!
+
+strikeOut:aBoolean
+    "turn on/off strikeOut mode"
+
+    <resource:#obsolete>
+    self obsoleteMethodWarning:'use #strikeout:'.
+    strikeOut := aBoolean.
+!
+
+strikeout:aBoolean
+    "turn on/off strikeOut mode"
+
+    strikeOut := aBoolean.
+! !
+
+!SelectionInListView methodsFor:'accessing-behavior'!
+
+dragObjectConverter:aBlock
+    "set an optional dragObject converter;
+     if non-nil, this one will be evaluated on a drag-start,
+     for each dropItem as argument, and supposed
+     to convert it into a dragObject and return it.
+     If it returns nil, the object will not be dropped.
+     Useful, if the receiver view represents fileNames or other
+     names of the actual objects to be dragged."
+
+    dragObjectConverter := aBlock
+
+    "Created: 6.4.1997 / 12:16:11 / cg"
+    "Modified: 6.4.1997 / 14:12:45 / cg"
+!
+
+enabled
+   "return true if selections are possible"
+
+   ^ enabled.
+
+    "Created: 29.1.1997 / 12:40:54 / stefan"
+!
+
+enabled:aBoolean
+    "enable/disable the view - selection changes are allowed/disallowed"
+
+    enabled := aBoolean
+
+    "Modified: / 30.3.1999 / 15:26:10 / stefan"
+!
+
+ignoreReselect:aBoolean
+    "set/clear the ignoreReselect flag - 
+     if set, a click on an already selected entry is ignored.
+     Otherwise the notification is done, even if no
+     change in the selection occurs.
+     (for example, in browser to update a method).
+     Setting ignoreReselect to false makes sense if data is shown
+     which may change by itself (i.e. without the user doing anything)
+     For example, the inspector uses this, and redisplays the value,
+     if the selection is the same.
+     The default is true, meaning that a click on an already selected
+     does not lead to a notification via the actionBlock/change mechanism."
+
+"ca: 
+    multiple selection on: the ignoreReselect will have no influence
+"
+    ignoreReselect := aBoolean
+!
+
+multipleSelectOk
+    ^ multipleSelectOk
+!
+
+multipleSelectOk:aBoolean
+    "allow/disallow multiple selections. If enabled, the
+     user may select multiple entries in the list, and the program
+     always gets a collection of selected items (indexes if useIndex is true,
+     values otherwise). The default is false, for single selections."
+
+    multipleSelectOk := aBoolean.
+
+!
+
+toggleSelect:aBoolean
+    "turn on/off toggle select. If true, clicking on a selected entry
+     unselects it and vice versa. The default is false, which means
+     that clicking on an already selected entry does not change its
+     select status (see also ignoreReselect:)."
+
+    toggleSelect := aBoolean.
+! !
+
+!SelectionInListView methodsFor:'accessing-channels'!
+
+listHolder
+    ^ listChannel
+!
+
+listHolder:aListHolder
+    listChannel notNil ifTrue:[
+        listChannel removeDependent:self
+    ].
+    (listChannel := aListHolder) notNil ifTrue:[
+        listChannel addDependent:self
+    ].
+    self getListFromModel
+! !
+
+!SelectionInListView methodsFor:'accessing-contents'!
+
+add:aValue beforeIndex:index
+    "must recompute our current selections"
+
+    selection notNil ifTrue:[
+        self multipleSelectOk ifTrue:[
+            selection := selection collect:[ :sel |
+                sel >= index ifTrue:[
+                    sel + 1
+                ] ifFalse:[
+                    sel
+                ]
+            ].
+        ] ifFalse:[
+            selection >= index ifTrue:[
+                selection := selection + 1.
+            ].
+        ].
+    ].
+    ^ super add:aValue beforeIndex:index.
+!
+
+contents:aCollection
+    "set the list - redefined, since setting the list implies unselecting
+     and clearing attributes.
+     No redraw is done - the caller should make sure to redraw afterwards
+     (or use this only before the view is visible)."
+
+    selection := nil.
+    listAttributes := nil.
+    super contents:aCollection.
+!
+
+list:aCollection
+    "set the list - redefined, since setting the list implies unselecting
+     and clearing attributes."
+
+    self list:aCollection keepSelection:false 
+!
+
+list:aCollection keepSelection:aBoolean
+    "set the list - redefined, since setting the list implies unselecting
+     and clearing attributes."
+
+    |oldSelection|
+
+    "somewhat of a kludge: if selection is first line,
+     we have to remove the highlight frame by hand here"
+
+    (shown and:[hilightLevel ~~ 0]) ifTrue:[
+        selection == firstLineShown ifTrue:[
+           self paint:bgColor.
+           self fillRectangleX:margin y:margin
+                          width:(width - (margin * 2)) 
+                         height:(hilightLevel abs).
+        ].
+    ].
+
+    aBoolean ifTrue:[
+        oldSelection := selection.
+        selection := nil.
+    ].
+    listAttributes := nil.
+    self list:aCollection expandTabs:printItems.
+    shown ifTrue:[self invalidate].
+
+    useIndex == true ifTrue:[
+        scrollWhenUpdating == #keep ifTrue:[
+            self selectWithoutScroll:oldSelection
+        ] ifFalse:[
+            self setSelection:oldSelection. "/ nil if keep is false
+        ].
+    ] ifFalse:[
+        self getSelectionFromModel.
+    ].
+
+    selection ~= oldSelection ifTrue:[
+        "/ cannot keep the selection (items removed)
+        "/ must tell the model if there is one ....
+        self selectionChangedFrom:oldSelection
+    ].
+
+    "Modified: / 10-01-2007 / 18:21:31 / cg"
+!
+
+printItems:aBoolean
+    "set/clear the printItems flag. If set, items (as set via #list: or
+     as returned from the model) are sent #printString to display them.
+     If false, items are assumed to be either strings, or know how to
+     display themself in a GC (i.e. they are instances of ListEntry).
+     The default is false.
+     Caveat: printString seems to be too specialized - I'd rather have
+     a definable printSelector or - better - a printConverter.
+     This may be added in the future."
+
+    printItems := aBoolean
+!
+
+removeFromIndex:startLineNr toIndex:endLineNr
+    "must recompute our current selections"
+
+    |oldSelection|
+
+    selection notNil ifTrue:[
+        oldSelection := selection copy.
+
+        "/ a kludge - if the first line is in the selection,
+        "/ and the selection is drawn with an extra inverted area around,
+        "/ we must invalidate the line before as well.
+        (hilightFrameColor notNil or:[hilightStyle == #motif]) ifTrue:[
+            (self isInSelection:startLineNr) ifTrue:[
+                startLineNr > 1 ifTrue:[
+                    self invalidateLine:(startLineNr - 1)
+                ]
+            ].
+        ].
+
+        self checkRemovingSelectionFrom:startLineNr to:endLineNr.
+        oldSelection ~= selection ifTrue:[
+            "/ cannot keep the selection (items removed)
+            "/ must tell the model if there is one ....
+            model notNil ifTrue:[model removeDependent:self].
+            [
+                self selectionChangedFrom:oldSelection
+            ] ensure:[
+                model notNil ifTrue:[model addDependent:self].
+            ].
+        ].
+    ].
+    super removeFromIndex:startLineNr toIndex:endLineNr.
+!
+
+removeIndexWithoutRedraw:lineNr
+    "delete line - no redraw;
+     return true, if something was really deleted.
+     Redefined since we have to care for selection"
+
+    |oldSelection|
+
+    selection notNil ifTrue:[
+        oldSelection := selection copy.
+        self checkRemovingSelection:lineNr.
+        oldSelection ~= selection ifTrue:[
+            "/ cannot keep the selection (items removed)
+            "/ must tell the model if there is one ....
+            self selectionChangedFrom:oldSelection
+        ]
+    ].
+    ^ super removeIndexWithoutRedraw:lineNr
+!
+
+setContents:aCollection
+    "set the list - redefined, since setting the list implies unselecting
+     and clearing attributes.
+     No redraw is done - the caller should make sure to redraw afterwards
+     (or use this only before the view is visible)."
+
+    selection := nil.
+    listAttributes := nil.
+    super setContents:aCollection.
+!
+
+setList:aCollection
+    "set the list - redefined, since setting the list implies unselecting
+     and clearing attributes.
+     No redraw is done - the caller should make sure to redraw afterwards
+     (or use this only before the view is visible)."
+
+    selection := nil.
+    listAttributes := nil.
+    super setList:aCollection.
+! !
+
+!SelectionInListView methodsFor:'accessing-look'!
+
+noHighlighting
+    "switch off higlighting of selected lines"
+
+    hilightFgColor := fgColor.
+    hilightBgColor := bgColor.
+    hilightFrameColor := nil.
+    hilightFgColorNoFocus := fgColor.
+    hilightBgColorNoFocus := bgColor.
+!
+
+selectedVisualBlock
+    ^ selectedVisualBlock
+!
+
+selectedVisualBlock:aBlock
+    "ST-80 compatibility: provide a block, which returns a displayObject to be drawn for
+     selected items."
+
+    selectedVisualBlock := aBlock
+
+    "Created: / 27.10.1997 / 19:50:58 / cg"
+    "Modified: / 21.6.1998 / 02:40:46 / cg"
+!
+
+visualBlock
+    ^ visualBlock
+!
+
+visualBlock:aBlock
+    "ST-80 compatibility: provide a block, which returns a displayObject to be drawn for
+     unselected items."
+
+    visualBlock := aBlock
+
+    "Modified: / 21.6.1998 / 02:40:57 / cg"
+! !
+
+!SelectionInListView methodsFor:'accessing-mvc'!
+
+addModelInterfaceTo:aDictionary
+    "see comment in View>>modelInterface"
+
+    super addModelInterfaceTo:aDictionary.
+    aDictionary at:#doubleClickMessage put:doubleClickMsg.
+    aDictionary at:#initialSelectionMessage put:initialSelectionMsg.
+
+    "
+     SelectionInListView new modelInterface 
+    "
+!
+
+doubleClick:aSymbol
+    "set the symbol with which the model is informed about double-click.
+     OBSOLETE: please use #doubleClickMessage:"
+
+    <resource:#obsolete>
+
+    self obsoleteMethodWarning:'please use #doubleClickMessage:'.
+    doubleClickMsg := aSymbol
+!
+
+doubleClickMessage
+    "return the symbol with which the model (if any) is informed about 
+     double-click. If nil (which is the default), it is not informed."
+
+    ^ doubleClickMsg
+!
+
+doubleClickMessage:aSymbol
+    "set the symbol with which the model (if any) is informed about double-click.
+     If nil (which is the default), it is not informed."
+
+    doubleClickMsg := aSymbol
+!
+
+initialSelectionMessage
+    "return the symbol by which the model informes me about a changed
+     selectionIndex. This is used both in change notification and to
+     actually aquire a new selection value."
+
+    ^ initialSelectionMsg
+!
+
+initialSelectionMessage:aSymbol
+    "set the symbol by which the model informes me about a changed
+     selectionIndex. This is used both in change notification and to
+     actually aquire a new selection value."
+
+    initialSelectionMsg := aSymbol
+!
+
+on:aModel aspect:aspectSymbol change:changeSymbol list:listSymbol menu:menuSymbol
+
+    "ST-80 compatibility"
+
+    super on:aModel aspect:aspectSymbol change:changeSymbol list:listSymbol menu:menuSymbol.
+    initialSelectionMsg := aspectMsg.
+!
+
+on:aModel printItems:print oneItem:one aspect:aspectSymbol change:changeSymbol 
+		list:listSymbol menu:menuSymbol initialSelection:initialSymbol useIndex:use
+
+    "ST-80 compatibility"
+
+    aspectMsg := aspectSymbol.
+    changeMsg := changeSymbol.
+    listMsg := listSymbol.
+    menuMsg := menuSymbol.
+    initialSelectionMsg := initialSymbol.
+    printItems := print.
+    oneItem := one.
+    useIndex := use.
+    ignoreReselect := false.    "/ ST80 behavior
+    self model:aModel.
+! !
+
+!SelectionInListView methodsFor:'accessing-selection'!
+
+addElementToSelection:anObject
+    "add the element with the same printstring as the argument, anObject
+     to the selection. The entry is searched by comparing printStrings.
+     No scrolling is done. Returns true, if ok, false if no such entry
+     was found.
+     *** No model and/or actionBlock notification is done here."
+
+    |lineNo str|
+
+    str := anObject printString.
+    lineNo := list findFirst:[:entry | str = entry printString].
+    lineNo ~~ 0 ifTrue:[
+        self addToSelection:lineNo.
+        ^ true
+    ].
+    ^ false
+
+    "Modified: 15.11.1996 / 16:59:43 / cg"
+!
+
+addToSelection:aNumber
+    "add entry, aNumber to the selection. No scrolling is done.
+     *** No model and/or actionBlock notification is done here."
+
+    (self isValidSelection:aNumber) ifFalse:[^ self].
+
+    "/ this item selectable ?
+    (selectConditionBlock notNil 
+     and:[(selectConditionBlock value:aNumber) not]) ifTrue:[^ self].
+
+    selection isNil ifTrue:[^ self selectWithoutScroll:aNumber].
+    selection isCollection ifTrue:[
+        (selection includes:aNumber) ifTrue:[^ self].
+
+        "/ to enforce the change-message (value is identical to oldValue)
+        selection isList ifTrue:[
+            selection add:aNumber
+        ] ifFalse:[
+            selection := selection asOrderedCollection.
+            selection := selection copyWith:aNumber.
+        ]
+    ] ifFalse:[
+        (aNumber == selection) ifTrue:[^ self].
+        selection := OrderedCollection with:selection with:aNumber
+    ].
+    self redrawElement:aNumber
+
+    "Modified: / 11.2.2000 / 01:38:45 / cg"
+!
+
+removeFromSelection:aNumber
+    "remove entry, aNumber from the selection.
+     *** No model and/or actionBlock notification is done here."
+
+    selection isNil ifTrue:[^ self].
+
+    self multipleSelectOk ifTrue:[
+        (selection includes:aNumber) ifFalse:[^ self].
+
+        selection isList ifTrue:[
+            selection remove:aNumber ifAbsent:nil
+        ] ifFalse:[
+            "/ to enforce the change-message (value is identical to oldValue)
+            selection := selection asOrderedCollection.
+            selection := selection copyWithout:aNumber
+        ].
+        selection size == 0 ifTrue:[
+            selection := #()
+        ]
+    ] ifFalse:[
+        (aNumber == selection) ifFalse:[^ self].
+        selection := nil
+    ].
+    self redrawElement:aNumber
+
+    "Modified: / 11.2.2000 / 01:41:24 / cg"
+! !
+
+!SelectionInListView methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    |listValue start stop size idx|
+
+    changedObject == model ifTrue:[
+        something == aspectMsg ifTrue:[
+            listChannel isNil ifTrue:[
+                self getListFromModel
+            ].
+            self getSelectionFromModel.
+            ^ self
+        ].
+        something == listMsg ifTrue:[
+            self getListFromModel.
+            ^ self
+        ].
+        something == initialSelectionMsg ifTrue:[
+            self getSelectionFromModel.
+            ^ self
+        ].
+        something == #empty ifTrue:[
+            self list:nil.
+            ^ self
+        ].
+    ].
+    changedObject == listChannel ifFalse:[
+        ^ super update:something with:aParameter from:changedObject
+    ].
+
+    something == #remove: ifTrue:[
+        self removeIndex:aParameter.
+        ^ self
+    ].
+    something == #removeFrom: ifTrue:[
+        start := aParameter first.
+        stop  := aParameter last.
+
+        (start == 1 and:[stop == self size]) ifTrue:[
+            self getListFromModel
+        ] ifFalse:[
+            self removeFromIndex:start toIndex:stop.
+        ].
+        ^ self
+    ].
+
+    "/ ca's "optimizations" are only correct if we do not have items
+    (items isNil or:[printItems not]) ifTrue:[
+        listValue := listChannel value.
+
+        something == #at: ifTrue:[
+            idx := aParameter isCollection ifTrue:[aParameter at:1]
+                                          ifFalse:[aParameter].
+            self at:aParameter put:(listValue at:idx).
+            ^ self
+        ].
+
+        something == #insert: ifTrue:[
+            listValue == list ifTrue:[self halt:'should not happen'].
+            self add:(listValue at:aParameter) beforeIndex:aParameter.
+            ^ self
+        ].
+
+        something == #insertCollection: ifTrue:[
+            (size := aParameter last) ~~ 0 ifTrue:[
+                (self size == 0 or:[size > 50]) ifTrue:[
+                    self getListFromModel
+                ] ifFalse:[
+                    listValue == list ifTrue:[self halt:'should not happen'].
+                    start := aParameter first.
+                    "/ self addAll:(listValue copyFrom:start to:start+size-1) beforeIndex:start.
+                    size timesRepeat:[
+                        self add:(listValue at:start) beforeIndex:start.
+                        start := start + 1
+                    ]
+                ]
+            ].
+            ^ self
+        ].
+
+        something == #replace: ifTrue:[
+            start := aParameter first.
+            stop  := aParameter last.
+
+            list size = listValue size ifTrue:[
+                self replaceFrom:start to:stop with:listValue startingAt:start.
+                ^ self
+            ].
+        ].
+    ].
+
+    self getListFromModel.
+
+    "Modified: / 30-03-1999 / 14:27:42 / stefan"
+    "Modified: / 21-02-2007 / 15:20:44 / cg"
+! !
+
+!SelectionInListView methodsFor:'drag & drop'!
+
+allowDrag:aBoolean
+    "enable/disable dragging support"
+
+    allowDrag := aBoolean
+
+    "Created: 14.11.1996 / 15:12:58 / cg"
+!
+
+canDrag
+    "returns true if dragging is enabled"
+
+    ^ (allowDrag or:[dropSource notNil])
+!
+
+dragAutoScroll:aDropContext
+    "called by the DragAndDropManager to scroll during a drag/drop operation
+     if required (decided by the widget itself); 
+     If a scroll is done, return true otherwise false (used to restore the background)"
+
+    |point y dist visLnNr absLnNr nLines scrollUp|
+
+    point := aDropContext targetPoint.
+    y := point y.
+    visLnNr := self visibleLineOfY:y.
+    absLnNr := self visibleLineToAbsoluteLine: visLnNr.
+
+    visLnNr == 1 ifTrue:[
+        scrollUp := true.
+        absLnNr == 1 ifTrue:[ ^ false ].
+        dist := y.
+    ] ifFalse:[
+        scrollUp := false.
+        absLnNr < self size ifFalse:[ ^ false ].
+        (self lineIsFullyVisible: absLnNr + 1) ifTrue:[ ^ false ].
+        dist := height-y.
+    ].
+    aDropContext contentsWillChange.
+
+    nLines := 1.
+
+    #(2 4 8) do:[:fraction |
+        dist <= (fontHeight / fraction) ifTrue:[
+            nLines := fraction.
+        ]
+    ].
+
+    scrollUp ifTrue:[ 
+        self scrollUp:nLines 
+    ] ifFalse:[ 
+        self scrollDown:nLines 
+    ].
+
+    ^ true
+!
+
+dropSource
+    "returns the dropSource or nil"
+
+    ^ dropSource
+!
+
+dropSource:aDropSourceOrNil
+    "set the dropSource or nil"
+
+    dropSource := aDropSourceOrNil.
+!
+
+startDragAt:aPoint 
+    dropSource isNil ifTrue:[
+        dragIsActive := true.
+        DragAndDropManager 
+            startDrag:(self collectionOfDragObjects)
+            from:self
+            offset:0 @ 0
+            atEnd:endDragAction
+            display:(self selectionValue).
+    ] ifFalse:[
+        dropSource startDragIn:self at:aPoint
+    ]
+! !
+
+!SelectionInListView methodsFor:'drawing'!
+
+drawRightArrowInVisibleLine:visLineNr
+    "draw a right arrow (for submenus).
+     This method is not used here, but provided for subclasses such
+     as menus or file-lists."
+
+    |y x form form2 topLeftColor botRightColor t itemHeight listLine item|
+
+    x := width - 16.
+    y := (self yOfVisibleLine:visLineNr).
+
+    listLine := self visibleLineToListLine:visLineNr.
+    item := self at:listLine.
+    item isNil ifTrue:[
+        itemHeight := fontHeight
+    ] ifFalse:[
+        itemHeight := item heightOn:self.
+    ].
+
+    (self graphicsDevice depth == 1 or:[arrowLevel == 0]) ifTrue:[
+        form := self class rightArrowFormOn:self graphicsDevice.
+        form notNil ifTrue:[
+            y := y + ((itemHeight - form height) // 2).
+            self foreground:(
+                    (self isInSelection:listLine) 
+                        ifTrue:[hilightFgColor] 
+                        ifFalse:[fgColor]).
+            self displayForm:form x:x y:y.
+        ]
+    ] ifFalse:[
+        smallArrow ifTrue:[
+            form := self class smallRightArrowLightFormOn:self graphicsDevice.
+            form2 := self class smallRightArrowShadowFormOn:self graphicsDevice.
+        ] ifFalse:[
+            form := self class rightArrowLightFormOn:self graphicsDevice.
+            form2 := self class rightArrowShadowFormOn:self graphicsDevice.
+        ].
+        (form isNil or:[form2 isNil]) ifTrue:[
+            "/ very bad conditions
+            ^ self
+        ].
+        y := y + ((itemHeight - form height) // 2).
+
+        topLeftColor := lightColor.
+        botRightColor := shadowColor. 
+
+        "openwin arrow stays down"
+        styleSheet name ~~ #openwin ifTrue:[
+            (self isInSelection:listLine) ifTrue:[
+                t := topLeftColor.
+                topLeftColor := botRightColor.
+                botRightColor := t.
+            ]
+        ].
+        arrowLevel < 0 ifTrue:[
+            t := topLeftColor.
+            topLeftColor := botRightColor.
+            botRightColor := t.
+        ].
+
+"/        self foreground:topLeftColor.
+self paint:topLeftColor.
+        self displayForm:form x:x y:y.
+"/        self foreground:botRightColor.
+self paint:botRightColor.
+        self displayForm:form2 x:x y:y.
+    ]
+!
+
+drawVisibleLineSelected:visLineNr
+    "redraw a single line as selected."
+
+    self hasFocus ifTrue:[
+        self drawVisibleLineSelected:visLineNr with:hilightFgColor and:hilightBgColor
+    ] ifFalse:[
+        self drawVisibleLineSelected:visLineNr with:hilightFgColorNoFocus and:hilightBgColorNoFocus
+    ].    
+    "Modified: / 31.8.1995 / 19:24:09 / claus"
+    "Modified: / 21.6.1998 / 03:12:56 / cg"
+!
+
+drawVisibleLineSelected:visLineNr with:fg and:bg
+    "redraw a single line as selected."
+
+    |listLine 
+     y  "{ Class: SmallInteger }" 
+     y2 "{ Class: SmallInteger }" 
+     wEdge dObj item t|
+
+    listLine := self visibleLineToListLine:visLineNr.
+    listLine notNil ifTrue:[
+        y := self yOfVisibleLine:visLineNr.
+
+        selectedVisualBlock notNil ifTrue:[
+            backgroundAlreadyClearedColor == bg ifFalse:[
+                self paint:bg.
+                self fillRectangleX:margin y:y - (lineSpacing//2)
+                              width:(width - (2 * margin)) 
+                             height:fontHeight.
+            ].
+
+            dObj := selectedVisualBlock value:self value:listLine.
+            self paint:fg on:bg.
+            dObj displayOn:self x:(textStartLeft-viewOrigin x) y:y + gc font ascent opaque:true.
+        ] ifFalse:[
+            strikeOut ifTrue:[
+                self drawVisibleLine:visLineNr with:fgColor and:bgColor.
+
+                self paint:fgColor.
+                y := y + (fontHeight // 2).
+                self displayLineFromX:0 y:y toX:width y:y.
+                ^ self
+            ].
+            "/ kludge:
+            "/ care for text objects with a color
+            "/ if the contrast between the fg-color and the selection-bg is too small,
+            "/ the item is not readable anymore ...
+            item := list at:listLine.
+            (item isText and:[item hasChangeOfEmphasis]) ifTrue:[
+                t := Text string:item string emphasisCollection:item emphasis asArray.
+                t emphasisAllRemove:#color.
+                self
+                    drawLine:t 
+                    atX:(textStartLeft - viewOrigin x) 
+                    inVisible:visLineNr 
+                    with:fg 
+                    and:bg
+            ] ifFalse:[ 
+                (item class == LabelAndIcon
+                and:[(t := item string) notNil
+                and:[(t isText and:[t hasChangeOfEmphasis])]]) ifTrue:[
+                    t := Text string:t string emphasisCollection:t emphasis asArray.
+                    t emphasisAllRemove:#color.
+                    t := LabelAndIcon icon:item icon string:t.
+                    t image:(item image).
+                    t gap:(item gap).
+                    t offset: (item offset).
+                    self
+                        drawLine:t 
+                        atX:(textStartLeft - viewOrigin x) 
+                        inVisible:visLineNr 
+                        with:fg 
+                        and:bg
+                ] ifFalse:[
+                    self drawVisibleLine:visLineNr with:fg and:bg.
+                ]
+            ]
+        ].
+
+        y := y - (lineSpacing//2).
+
+        "
+         a line above and below
+        "
+        hilightFrameColor notNil ifTrue:[
+            hilightLevel == 0 ifTrue:[
+                self paint:hilightFrameColor.
+                self displayLineFromX:0 y:y toX:width y:y.
+                y2 := y + fontHeight - 1.
+                self displayLineFromX:0 y:y2 toX:width y:y2.
+                ^ self
+            ]
+        ] ifFalse:[
+            hilightStyle == #motif ifTrue:[
+                "/ an additional line, inset by one pixel
+                self paint:fg.
+                self displayLineFromX:0 y:y+1 toX:width y:y+1.
+                y2 := y + fontHeight - 1 - 1.
+                self displayLineFromX:0 y:y2 toX:width y:y2.
+            ]
+        ].
+
+        "
+         an edge it around
+        "
+        (hilightLevel ~~ 0) ifTrue:[
+            "
+             let edge start at left, extending to the full width
+             XXX: widthOfContents should be cached in ListView
+                  (instead of recomputing all over)
+            "
+            wEdge := width-(2 * margin).
+            includesNonStrings ifFalse:[
+                wEdge := wEdge max:(self widthOfContents).
+            ].
+            self drawEdgesForX:(margin - viewOrigin x) y:y 
+                         width:wEdge+viewOrigin x height:fontHeight 
+                         level:hilightLevel.
+
+
+        ].
+        ^ self
+    ].
+    ^ super drawVisibleLine:visLineNr with:fg and:bg
+
+    "Modified: / 31-08-1995 / 19:24:09 / claus"
+    "Created: / 28-02-1996 / 18:40:21 / cg"
+    "Modified: / 21-06-1998 / 03:51:04 / cg"
+!
+
+invalidateLine:aLineNr
+    |visibleLine y|
+
+    visibleLine := self listLineToVisibleLine:aLineNr.
+    visibleLine notNil ifTrue:[
+        y := self yOfVisibleLine:visibleLine.
+        self invalidate:(Rectangle origin:(0@y-1) extent:(width@fontHeight+1))
+    ].
+!
+
+invalidateSelection
+    shown ifTrue:[
+        self selectionDo:[:lineNr| self invalidateLine:lineNr ].
+    ].
+! !
+
+!SelectionInListView methodsFor:'event handling'!
+
+buttonControlPress:button x:x y:y
+    "if multipleSelectOk: add to the selection; 
+     otherwise, behave like normal select"
+
+    |oldSelection listLineNr|
+
+    (button == 1) ifTrue:[
+"/        toggleSelect ifTrue:[
+"/           ^ self buttonPress:button x:x y:y
+"/        ].
+        selectionAtClickTime := nil.
+
+        enabled ifTrue:[
+            listLineNr := self lineAtY:y. "/ self visibleLineToListLine:(self visibleLineOfY:y).
+            listLineNr notNil ifTrue:[
+                (self lineIsEnabled:listLineNr) ifFalse:[^ self].
+            ].
+            oldSelection := selection copy.
+            listLineNr notNil ifTrue: [
+                "/ this item selectable ?
+                (selectConditionBlock notNil 
+                 and:[(selectConditionBlock value:listLineNr) not]) ifTrue:[^ self].
+
+                self multipleSelectOk ifTrue:[
+                    (self isInSelection:listLineNr) ifTrue:[
+                        self removeFromSelection:listLineNr.
+                        selectMode := false.
+                    ] ifFalse:[
+                        self addToSelection:listLineNr.
+                        selectMode := true.
+                    ]
+                ] ifFalse:[
+                    self selectWithoutScroll:listLineNr
+                ]
+            ].
+            ((ignoreReselect not and:[selection notNil])
+             or:[selection ~= oldSelection]) ifTrue:[
+                self selectionChangedFrom:oldSelection.
+            ].
+            clickLine := listLineNr.
+        ]
+    ] ifFalse:[
+        super buttonPress:button x:x y:y
+    ]
+
+    "Created: / 14.11.1996 / 15:51:41 / cg"
+    "Modified: / 8.8.1998 / 03:24:03 / cg"
+!
+
+buttonMotion:buttonState x:x y:y
+    "mouse-move while button was pressed - handle selection changes"
+
+    (enabled not or:[dragIsActive]) ifTrue:[
+        ^ self
+    ].
+
+    "is it the select or 1-button ?"
+    buttonState == 0 ifTrue:[^ self].
+    self sensor leftButtonPressed ifFalse:[^ self].
+
+    clickLine isNil ifTrue:[^ self].
+
+    self canDrag ifTrue:[
+"/        UserPreferences current expandSelectionOnMouseMoveWithButtonPressed not ifTrue:[
+"/            clickPosition isNil ifTrue:[
+"/                clickPosition := x@y
+"/            ]
+"/        ].
+
+        (clickPosition notNil) ifTrue:[     "mouse pressed but not released"
+            (clickPosition dist:(x@y)) > (UserPreferences current motionDistanceToStartDrag) ifTrue:[
+                ^ self startDragAt:clickPosition
+            ].
+            ^ self
+        ]
+    ].
+
+    "if moved outside of view, start autoscroll"
+    (y < 0) ifTrue:[
+        self compressMotionEvents:false.
+        self startAutoScrollUp:y.
+        ^ self
+    ].
+    (y > height) ifTrue:[
+        self compressMotionEvents:false.
+        self startAutoScrollDown:(y - height).
+        ^ self
+    ].
+
+    (self canDrag 
+    and:[x < -5 or:[x > (width+5)]]) ifTrue:[           "visible and out of view"
+        ^ self startDragAt:(0 @ y)
+    ].
+
+    "move inside - stop autoscroll if any"
+    self stopAutoScroll.
+
+    UserPreferences current expandSelectionOnMouseMoveWithButtonPressed ifTrue:[
+        (self sensor hasButtonMotionEventFor:self) ifFalse:[
+            self expandSelectionToX:x y:y.
+        ].
+    ].
+
+    "Modified: / 29.1.1997 / 12:15:31 / stefan"
+    "Modified: / 23.2.2000 / 12:03:35 / cg"
+!
+
+buttonMultiPress:button x:x y:y
+    (button == 1) ifTrue:[
+"/        doubleClickActionBlock isNil ifTrue:[
+"/            self buttonPress:button x:x y:y
+"/        ].
+        enabled ifFalse:[
+            ^ self
+        ].
+        self doubleClicked.
+    ] ifFalse:[
+        super buttonMultiPress:button x:x y:y
+    ]
+
+    "Modified: / 26.10.1997 / 18:50:58 / cg"
+!
+
+buttonPress:button x:x y:y
+    |sensor lineNr|
+
+    (button == 1) ifFalse:[
+        (button == 2) ifTrue:[
+            UserPreferences current selectOnRightClick ifTrue:[
+                self selectOrToggleAtX:x y:y forRightClickMenu:true.
+                UserPreferences current showRightButtonMenuOnRelease ifFalse:[
+                    self pushEvent:#activateMenu.
+                ].
+                ^ self.
+            ].
+        ].
+        ^ super buttonPress:button x:x y:y
+    ].
+
+    selectionAtClickTime := nil.
+    enabled ifFalse:[
+        ^ self
+    ].
+
+    dragIsActive        := false.
+    clickPosition       := nil.
+    isButtonPressActive := true.
+
+    sensor := self sensor.
+    sensor ctrlDown ifTrue:[
+        ^ self buttonControlPress:button x:x y:y
+    ].
+    sensor shiftDown ifTrue:[
+        ^ self expandSelectionToX:x y:y
+    ].
+
+    self canDrag ifTrue:[
+        "/ clicked into the selection ?
+
+        lineNr := self lineAtY:y. "/ self visibleLineToListLine:(self visibleLineOfY:y).
+
+        (self isInSelection:lineNr) ifTrue:[
+            "wait for release button
+            "
+            clickPosition := x@y.
+            clickLine     := lineNr.
+            ^ self
+        ]
+    ].
+    self selectOrToggleAtX:x y:y
+
+    "Modified: / 7.5.1998 / 02:02:20 / cg"
+!
+
+buttonRelease:button x:x y:y
+    "stop any autoscroll"
+
+    selectionAtClickTime := nil.
+    self stopAutoScroll.
+
+    button == 2 ifTrue:[
+        super buttonRelease:button x:x y:y.
+        ^ self.
+    ].
+
+    dragIsActive ifTrue:[
+        dragIsActive := false
+    ] ifFalse:[
+        clickPosition notNil ifTrue:[
+            enabled ifFalse:[
+                ^ self
+            ].
+            self selectOrToggleAtX:(clickPosition x) y:(clickPosition y).
+        ]
+    ].
+    clickPosition := nil.
+
+    isButtonPressActive ifTrue:[
+        isButtonPressActive := false.
+        self hasSelection ifTrue:[
+            self makeSelectionVisible.
+        ].
+    ].
+
+    "Modified: / 26.10.1997 / 18:51:14 / cg"
+!
+
+buttonShiftPress:button x:x y:y
+    "expand selection
+    "
+    self halt:'obsolete method called'.      "/ never called
+
+    self expandSelectionToX:x y:y
+
+    "Modified: 17.6.1997 / 18:03:24 / cg"
+!
+
+doubleClicked
+    |actionArg|
+
+    clickLine := nil.
+    selectionAtClickTime := nil.
+
+    enabled ifFalse:[
+        ^ self
+    ].
+    selection isNil ifTrue:[
+        "/ can only happen if claus modifies the selection within
+        "/ the selectAction ....
+        ^ self
+    ].
+
+    actionArg := self argForChangeMessage.
+
+    "/
+    "/ the ST-80 way of notifying the model
+    "/
+    (model notNil and:[doubleClickMsg notNil]) ifTrue:[
+        self sendChangeMessage:doubleClickMsg with:actionArg.
+    ].
+
+    "/
+    "/ ST/X action blocks
+    "/
+    doubleClickActionBlock notNil ifTrue:[
+        doubleClickActionBlock valueWithOptionalArgument:actionArg
+    ].
+
+    "Modified: / 26.10.1997 / 18:51:39 / cg"
+!
+
+key:key select:index x:x y:y shifted:shifted
+    "select an entry by a keyboard action.
+     This is treated like a doubleClick on that entry,
+     except if shift is down, and multiple selections are
+     allowed, this adds/removes the new item to the selection."
+
+    |oldSelection|
+
+    enabled ifFalse:[
+        ^ self
+    ].
+
+    keyActionStyle notNil ifTrue:[
+        "/ this item selectable ?
+        (selectConditionBlock notNil 
+         and:[(selectConditionBlock value:index) not]) ifTrue:[^ self].
+
+        keyActionStyle == #pass ifTrue:[
+            ^ super keyPress:key x:x y:y
+        ].
+
+        (self multipleSelectOk and:[shifted]) ifTrue:[
+            oldSelection := selection copy.
+            (self isInSelection:index) ifTrue:[
+                self removeFromSelection:index
+            ] ifFalse:[
+                self addToSelection:index.
+                self makeLineVisible:index.
+            ].
+            (selection ~= oldSelection) ifTrue:[
+                self selectionChangedFrom:oldSelection.
+            ].
+        ] ifFalse:[
+            self multipleSelectOk ifTrue:[
+                self selection:(OrderedCollection with:index)
+            ] ifFalse:[
+                self selection:index.
+            ].    
+            keyActionStyle == #selectAndDoubleClick ifTrue:[
+                self doubleClicked
+            ]
+        ]
+    ].
+
+    "Modified: / 4.2.2000 / 14:51:25 / cg"
+!
+
+keyPress:key x:x y:y
+    "handle keyboard input"
+
+    <resource: #keyboard ( #CursorUp #CursorDown #BeginOfText #EndOfText
+                           #BeginOfLine #EndOfLine
+                           #Return ) >
+
+    |index       
+     searchIndex "{Class: SmallInteger}"
+     startSearch "{Class: SmallInteger}"
+     backSearch searchPrefix shifted
+     mySize sensor s index0 stillSearching|
+
+    enabled ifFalse:[
+        ^ self
+    ].
+    sensor := self sensor.
+    shifted := sensor notNil and:[sensor shiftDown].
+
+    (key == #CursorUp) ifTrue:[
+        index0 := self firstInSelection.
+        index := self previousSelectableBefore:selection.
+        stillSearching := true.
+        [stillSearching
+         and:[selectConditionBlock notNil 
+              and:[(selectConditionBlock value:index) not]]] whileTrue:[
+            index := self previousSelectableBefore:index.
+            stillSearching := index0 notNil and:[index ~= index0]
+        ].
+        (index0 notNil and:[index isNil or:[index > index0]]) ifTrue:[
+            UserPreferences current beepInEditor ifTrue:[                
+                self beep      "/ wrapped
+            ].  
+        ].   
+        self key:key select:index x:x y:y shifted:shifted.
+        ^ self
+    ].
+    (key == #CursorDown) ifTrue:[
+        index0 := self lastInSelection.
+        index := self nextSelectableAfter:selection.
+        stillSearching := true.
+        [stillSearching
+         and:[selectConditionBlock notNil 
+              and:[(selectConditionBlock value:index) not]]] whileTrue:[
+            index := self nextSelectableAfter:index.
+            stillSearching := index0 notNil and:[index ~= index0]
+        ].
+        (index0 notNil and:[index isNil or:[index < index0]]) ifTrue:[
+            UserPreferences current beepInEditor ifTrue:[                
+                self beep      "/ wrapped
+            ].  
+        ].  
+        self key:key select:index x:x y:y shifted:shifted.
+        ^ self
+    ].
+    "/
+    "/ stupid: Home and End are caught in ScrollableView
+    "/ we normally do not get them ...
+    "/ (need to call handlesKey: from there ...
+    "/  ... and implement it here)
+    "/
+    ((key == #BeginOfText) or:[key == #BeginOfLine]) ifTrue:[
+        self key:key select:1 x:x y:y shifted:shifted.
+        ^ self
+    ].
+    ((key == #EndOfText) or:[key == #EndOfLine]) ifTrue:[
+        index := self size.
+        self key:key select:index x:x y:y shifted:shifted.
+        ^ self
+    ].
+    key == #Return ifTrue:[
+        returnKeyActionStyle == #doubleClick ifTrue:[
+            selection notNil ifTrue:[
+                self doubleClicked
+            ].
+            ^ self
+        ].
+        returnKeyActionStyle ~~ #pass ifTrue:[
+            ^ self
+        ].
+    ].
+    (key == #SelectAll) ifTrue:[
+        self multipleSelectOk ifTrue:[
+            self selectAll. 
+        ].
+        ^ self
+    ].
+
+    mySize := self size.
+
+    "
+     alphabetic keys: search for next entry
+     starting with keys character. If shift is pressed, search backward
+    "
+    (mySize > 0
+    and:[key isCharacter
+    and:[key isLetter]]) ifTrue:[
+        keyActionStyle isNil ifTrue:[^ self].
+"/        self multipleSelectOk ifTrue:[^ self].
+
+        keyActionStyle == #pass ifFalse:[
+            searchPrefix := key asLowercase asString.
+
+"/            ... isISearch... ifFalse:[
+"/                iSearchString := ''
+"/            ] ifTrue:[
+"/                iSearchString := iSearchString , searchPrefix.
+"/                searchPrefix := iSearchString
+"/            ].
+
+            backSearch := shifted.
+            backSearch ifTrue:[
+                selection notNil ifTrue:[
+                    startSearch := self firstInSelection - 1.
+"/                    selection size > 0 ifTrue:[
+"/                        startSearch := selection first - 1
+"/                    ] ifFalse:[
+"/                        selection isCollection ifTrue:[
+"/                            startSearch := mySize
+"/                        ] ifFalse:[
+"/                            startSearch := selection - 1
+"/                        ]
+"/                    ]
+                ] ifFalse:[
+                    startSearch := mySize
+                ].
+                startSearch < 1 ifTrue:[
+                    startSearch := mySize.
+                ].
+            ] ifFalse:[    
+                selection notNil ifTrue:[
+                    startSearch := self lastInSelection + 1.
+"/                    selection size > 0 ifTrue:[
+"/                        startSearch := selection last + 1
+"/                    ] ifFalse:[
+"/                        selection isCollection ifTrue:[
+"/                            startSearch := 1
+"/                        ] ifFalse:[
+"/                            startSearch := selection + 1
+"/                        ]
+"/                    ]
+                ] ifFalse:[
+                    startSearch := 1
+                ].
+                startSearch > self size ifTrue:[
+                    startSearch := 1.
+                ].
+            ].
+            searchIndex := startSearch.
+            [true] whileTrue:[
+                s := self characterSearchItemStringAt:searchIndex.
+                s notNil ifTrue:[
+                    (s string withoutSeparators asLowercase startsWith:searchPrefix) ifTrue:[
+                        searchIndex = selection ifTrue:[^ self].
+                        ^ self key:key select:searchIndex x:x y:y shifted:false
+                    ].
+                ].
+                backSearch ifTrue:[
+                    searchIndex := searchIndex - 1.
+                    searchIndex < 1 ifTrue:[searchIndex := mySize]
+                ] ifFalse:[
+                    searchIndex := searchIndex + 1.
+                    searchIndex > mySize ifTrue:[searchIndex := 1].
+                ].
+                searchIndex == startSearch ifTrue:[
+                    ^ self
+                ]
+            ]
+        ].
+    ].
+    ^ super keyPress:key x:x y:y
+
+    "Modified: / 15.9.1998 / 18:22:31 / cg"
+!
+
+sizeChanged:how
+    "if there is a selection, make certain, it is visible
+     after the sizechange"
+
+    |first wasAtEnd selectionWasWisible oldFirst|
+
+    widthOfWidestLine := nil.
+    oldFirst := firstLineShown.
+    wasAtEnd := (nFullLinesShown < list size) and:[ (firstLineShown + nFullLinesShown) >= list size ].
+
+    selectionWasWisible := false.
+    selection notNil ifTrue:[
+        self multipleSelectOk ifTrue:[
+            first := selection firstIfEmpty:nil
+        ] ifFalse:[
+            first := selection
+        ].
+        first notNil ifTrue:[
+            selectionWasWisible := (first between:firstLineShown and:(firstLineShown + nFullLinesShown)).
+        ]
+    ].
+
+    super sizeChanged:how.
+
+    oldFirst ~~ firstLineShown ifTrue:[
+        "/ super did scroll already
+        ^ self
+    ].
+
+    shown ifTrue:[
+        selection size > 0 ifTrue:[
+            selectionWasWisible ifTrue:[
+                self multipleSelectOk ifTrue:[
+                    first := selection firstIfEmpty:nil
+                ] ifFalse:[
+                    first := selection
+                ].
+                first notNil ifTrue:[self makeLineVisible:first]
+            ]
+        ] ifFalse:[
+            "
+             if we were at the end before, move to the end again.
+             Still to be seen, if this is better in real life ...
+            "
+            wasAtEnd ifTrue:[
+                "at end"
+                self scrollToBottom
+            ]
+        ]
+    ]
+
+    "Modified: / 1.12.1998 / 23:27:27 / cg"
+! !
+
+!SelectionInListView methodsFor:'focus handling'!
+
+showFocus:explicit
+    self invalidateSelection.
+    super showFocus:explicit
+!
+
+showNoFocus:explicit
+    self invalidateSelection.
+    super showNoFocus:explicit
+!
+
+wantsFocusWithPointerEnter
+    "return true, if I want the focus when
+     the mouse pointer enters"
+
+    (UserPreferences current focusFollowsMouse ~~ false
+    and:[(styleSheet at:#'selection.requestFocusOnPointerEnter' default:true)
+    ]) ifTrue:[
+        list size > 0 ifTrue:[
+            ^ true
+        ]
+    ].
+
+    ^ false
+! !
+
+!SelectionInListView methodsFor:'initialization'!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    |graphicsDevice|
+
+    super fetchDeviceResources.
+    graphicsDevice := self graphicsDevice.
+
+    hilightFgColor notNil ifTrue:[hilightFgColor := hilightFgColor onDevice:graphicsDevice].
+    hilightBgColor notNil ifTrue:[hilightBgColor := hilightBgColor onDevice:graphicsDevice].
+
+    halfIntensityFgColor notNil ifTrue:[halfIntensityFgColor := halfIntensityFgColor onDevice:graphicsDevice].
+    hilightFrameColor    notNil ifTrue:[hilightFrameColor := hilightFrameColor onDevice:graphicsDevice].
+
+    hilightFgColorNoFocus notNil ifTrue:[hilightFgColorNoFocus := hilightFgColorNoFocus onDevice:graphicsDevice].
+    hilightBgColorNoFocus notNil ifTrue:[hilightBgColorNoFocus := hilightBgColorNoFocus onDevice:graphicsDevice].
+!
+
+initCursor
+    "set the cursor - a hand"
+
+    cursor := Cursor hand
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    super initStyle.
+
+    bgColor := viewBackground.
+    hilightFrameColor := nil.
+    hilightLevel := 0.
+    hilightStyle := DefaultHilightStyle.
+    arrowLevel := 1.
+    smallArrow := false.
+
+    self graphicsDevice hasGrayscales ifTrue:[
+        "
+         must get rid of these hard codings
+        "
+        (hilightStyle == #next) ifTrue:[
+            hilightFgColor := fgColor.
+            hilightBgColor := self whiteColor.
+            hilightFrameColor := fgColor
+        ] ifFalse:[
+            (hilightStyle == #motif) ifTrue:[
+                fgColor := self whiteColor.
+                bgColor := Grey.
+                viewBackground := bgColor.
+                hilightFgColor := bgColor  "fgColor" "self whiteColor".
+                hilightBgColor := fgColor "bgColor lightened" "darkened".
+            ] ifFalse:[
+                (hilightStyle == #openwin) ifTrue:[
+                    hilightFgColor := fgColor.
+                    hilightBgColor := Color grey.
+                    smallArrow := true.
+                ] ifFalse:[
+                    (hilightStyle == #win95) ifTrue:[
+                        smallArrow := true.
+                    ]
+                ]
+            ]
+        ]
+    ].
+
+    hilightFgColor isNil ifTrue:[
+        hilightFgColor := bgColor.
+    ].
+    hilightBgColor isNil ifTrue:[
+        hilightBgColor := fgColor.
+    ].
+    DefaultForegroundColor notNil ifTrue:[
+        fgColor := DefaultForegroundColor
+    ].
+    DefaultBackgroundColor notNil ifTrue:[
+        bgColor := viewBackground := DefaultBackgroundColor
+    ].
+    DefaultHilightForegroundColor notNil ifTrue:[
+        hilightFgColor := DefaultHilightForegroundColor
+    ].
+    DefaultHilightBackgroundColor notNil ifTrue:[
+        hilightBgColor := DefaultHilightBackgroundColor
+    ].
+    DefaultHilightFrameColor notNil ifTrue:[
+        hilightFrameColor := DefaultHilightFrameColor
+    ].
+    DefaultHilightLevel notNil ifTrue:[
+        hilightLevel := DefaultHilightLevel
+    ].
+    DefaultRightArrowLevel notNil ifTrue:[
+        arrowLevel := DefaultRightArrowLevel
+    ].
+
+    DefaultShadowColor notNil ifTrue:[
+        shadowColor := DefaultShadowColor
+    ].
+    DefaultLightColor notNil ifTrue:[
+        lightColor := DefaultLightColor
+    ].
+
+    (hilightLevel abs > 0) ifTrue:[
+        lineSpacing := 3
+    ] ifFalse:[
+        lineSpacing := 2
+    ].
+    #hack.
+    "/ q&d temporary hack.
+    "/ X11 fonts are currently so ugly... add more spacing.
+    self graphicsDevice platformName = #X11 ifTrue:[
+        lineSpacing := lineSpacing + 3.
+    ].
+    hilightFgColor isNil ifTrue:[
+        hilightFgColor := bgColor.
+        hilightBgColor := fgColor
+    ].
+
+    DefaultDisabledForegroundColor notNil ifTrue:[
+        halfIntensityFgColor := DefaultDisabledForegroundColor
+    ] ifFalse:[
+        halfIntensityFgColor := Color darkGray.
+    ].
+
+    hilightFgColorNoFocus isNil ifTrue:[
+        hilightFgColorNoFocus := hilightFgColor.
+    ].
+    hilightBgColorNoFocus isNil ifTrue:[
+        hilightBgColorNoFocus := hilightBgColor lightened.
+    ].
+
+    "Modified: / 05-08-1998 / 00:00:00 / cg"
+    "Modified (comment): / 05-10-2011 / 15:50:50 / az"
+!
+
+initialize
+    super initialize.
+
+    isButtonPressActive := false.
+    "/ fontHeight := font height + lineSpacing.
+    enabled := true.
+    ignoreReselect := true.
+    multipleSelectOk := toggleSelect := strikeOut := printItems := false.
+    useIndex := true.
+    dragIsActive := allowDrag := false.
+
+    keyActionStyle := #select.
+    returnKeyActionStyle := #doubleClick.
+
+    listMsg := self class defaultListMessage.
+    initialSelectionMsg := self class defaultSelectionMessage.
+
+    "Modified: 14.11.1996 / 15:12:33 / cg"
+!
+
+realize
+    super realize.
+
+    model notNil ifTrue:[
+        self getSelectionFromModel.
+    ].
+
+    selection notNil ifTrue:[
+        selection isCollection ifTrue:[
+            selection notEmpty ifTrue:[
+                self makeLineVisible:selection first
+            ]
+        ] ifFalse:[
+            self makeLineVisible:selection
+        ]
+    ].
+
+    "Modified: 27.2.1997 / 14:23:40 / cg"
+! !
+
+!SelectionInListView methodsFor:'private'!
+
+argForChangeMessage
+    "return the argument for a selectionChange;
+     depending on the setting of useIndex, this is either the numeric
+     index of the selection or the value (i.e. the string)"
+
+    useIndex ~~ false ifTrue:[  "/ i.e. everything except false
+        self multipleSelectOk ifTrue:[
+            selection isNil ifTrue:[
+                ^ #() 
+            ].
+        ].
+        ^ selection
+    ].
+
+    printItems ifFalse:[
+        ^ self selectionValue
+    ].
+
+    items notNil ifTrue:[
+        self multipleSelectOk ifTrue:[
+            ^ selection collect:[:nr | items at:nr]
+        ].
+        ^ items at:selection
+    ].
+
+    ^ nil       "/ cannot happen
+
+    "Modified: 26.10.1995 / 16:28:13 / cg"
+!
+
+characterSearchItemStringAt:lineNr
+    "for first-character search:
+     return a lines item-string.
+     For multi-col items, this may be different from the actual string"
+
+    |item s|
+
+    item := self at:lineNr.
+    item isNil ifTrue:[^ nil].
+    (Error catch:[
+       s := item asString
+    ]) ifTrue:[
+       s := item displayString
+    ].
+    ^ s
+!
+
+checkRemovingSelection:lineNr
+    "when a line is removed, we have to adjust selection"
+
+    self checkRemovingSelectionFrom:lineNr to:lineNr
+!
+
+checkRemovingSelectionFrom:startNr to:endNr
+    "when a range of lines is removed, we have to adjust the selection"
+
+    |newSelection|
+
+    selection notNil ifTrue:[
+        self multipleSelectOk ifTrue:[
+            newSelection := OrderedCollection new.
+            selection do:[:sel |
+                sel < startNr ifTrue:[
+                    newSelection add:sel
+                ] ifFalse:[
+                    sel > endNr ifTrue:[
+                        newSelection add:(sel - 1)
+                    ]
+                    "otherwise remove it from the selection"
+                ]
+            ].
+            newSelection size == 0 ifTrue:[
+                selection := nil
+            ] ifFalse:[
+                selection := newSelection
+            ]
+        ] ifFalse:[
+            (selection between:startNr and:endNr) ifTrue:[
+                selection := nil
+            ] ifFalse:[
+                selection > endNr ifTrue:[
+                    selection := selection - 1
+                ]
+            ]
+        ]
+    ]
+!
+
+getListFromModel
+    "if I have a model, get my list from it using the listMessage.
+     If listMessage is nil, try aspectMessage for backward compatibilty."
+
+    |text msg|
+
+    listChannel notNil ifTrue:[
+        items := listChannel value copy
+    ] ifFalse:[
+        (model isNil or:[(msg := listMsg) isNil and:[(msg := aspectMsg) isNil]]) ifTrue:[
+            ^ self
+        ].
+        items := model perform:msg.
+    ].
+    items notNil ifTrue:[
+        printItems ifTrue:[
+            text := items collect:[:element | element printString]
+        ] ifFalse:[
+            text := items.
+            items := nil.
+        ].
+        text notNil ifTrue:[
+            text isSequenceable ifFalse:[
+                text := text asOrderedCollection
+            ]
+        ]
+    ].
+    self list:text keepSelection:true. "/ expandTabs:false
+
+    "Modified: / 29-06-2010 / 16:14:14 / sr"
+!
+
+getSelectionFromModel
+    "if I have a model and an initialSelectionMsg, get my selection from it"
+
+    |sel|
+
+    model notNil ifTrue:[
+        listChannel notNil ifTrue:[
+            sel := model value.
+            sel isNil ifTrue:[
+                self deselect.
+                ^ self
+            ]
+        ] ifFalse:[
+            initialSelectionMsg isNil ifTrue:[^ self].
+            sel := model perform:initialSelectionMsg.
+        ].
+        (useIndex or:[sel isNumber]) ifTrue:[
+            self setSelection:sel 
+        ] ifFalse:[
+            self setSelectElement:sel.
+        ]
+    ].
+
+    "Modified: / 08-11-2006 / 19:46:33 / cg"
+!
+
+isValidSelection:aNumberOrCollection
+    "return true, if aNumber is ok as a selection index"
+
+    |sz|
+
+    aNumberOrCollection isNil ifTrue:[^ false].
+
+    sz := self size.
+    (aNumberOrCollection isCollection) ifTrue:[
+        self multipleSelectOk ifFalse:[^ false].
+        aNumberOrCollection do:[:index |
+            (index between:1 and:sz) ifFalse:[^ false].
+            (self lineIsEnabled:index) ifFalse:[^ false].
+        ].
+    ] ifFalse:[
+        (aNumberOrCollection between:1 and:sz) ifFalse:[^ false].
+        (self lineIsEnabled:aNumberOrCollection) ifFalse:[^ false].
+    ].
+    ^ true.
+
+    "Modified: / 8.8.1998 / 03:34:27 / cg"
+!
+
+lineIsEnabled:lineNr
+    ^ (self line:lineNr hasAttribute:#disabled) not
+
+    "Modified: / 8.8.1998 / 03:22:50 / cg"
+!
+
+positionToSelectionX:x y:y
+    "given a click position, return the selection lineNo"
+
+    (x between:0 and:width) ifTrue:[
+        (y between:0 and:height) ifTrue:[
+            ^ self lineAtY:y
+            "/ ^ self visibleLineToListLine:(self visibleLineOfY:y)
+        ]
+    ].
+    ^ nil
+!
+
+scrollSelectDown
+    "auto scroll action; scroll and reinstall timed-block"
+
+    self scrollDown.
+    Processor addTimedBlock:autoScrollBlock afterSeconds:autoScrollDeltaT.
+
+    "Modified: / 3.2.2000 / 22:41:59 / cg"
+!
+
+scrollSelectUp
+    "auto scroll action; scroll and reinstall timed-block"
+
+    self scrollUp.
+    Processor addTimedBlock:autoScrollBlock afterSeconds:autoScrollDeltaT.
+!
+
+selectOrToggleAtX:x y:y
+    self selectOrToggleAtX:x y:y forRightClickMenu:false
+!
+
+selectOrToggleAtX:x y:y forRightClickMenu:forRightClickMenu
+    |oldSelection listLineNr|
+
+    selectMode := nil.
+    listLineNr := self lineAtY:y. "/ self visibleLineToListLine:(self visibleLineOfY:y).
+    listLineNr notNil ifTrue:[
+        "/ this item selectable ?
+        (selectConditionBlock notNil 
+         and:[(selectConditionBlock value:listLineNr) not]) ifTrue:[^ false].
+
+        oldSelection := selection copy.
+
+        forRightClickMenu ifTrue:[
+            (self isInSelection:listLineNr) ifFalse:[
+                self selectWithoutScroll:listLineNr.
+                selectMode := false.
+                (selection ~= oldSelection) ifTrue:[
+                    self selectionChangedFrom:oldSelection.
+                ].
+            ].
+        ] ifFalse:[
+            (toggleSelect and:[self isInSelection:listLineNr]) ifTrue:[
+                self removeFromSelection:listLineNr.
+                selectMode := false.
+            ] ifFalse:[
+                (self lineIsEnabled:listLineNr) ifFalse:[^ true].
+
+                (toggleSelect and:[self multipleSelectOk]) ifTrue:[
+                    self addToSelection:listLineNr
+                ] ifFalse:[
+                    self selectWithoutScroll:listLineNr.
+                ].
+                selectMode := true.
+            ].
+            ((ignoreReselect not and:[selection notNil])
+             or:[selection ~= oldSelection]) ifTrue:[
+                self selectionChangedFrom:oldSelection.
+            ].
+        ].
+        clickLine := listLineNr
+    ].
+    ^ true
+
+    "Created: / 14.11.1996 / 16:27:17 / cg"
+    "Modified: / 8.8.1998 / 03:22:26 / cg"
+!
+
+visibleLineNeedsSpecialCare:visLineNr
+    |listLine|
+
+    listLine := self visibleLineToListLine:visLineNr.
+    listLine isNil ifTrue:[^ false].
+    (self isInSelection:listLine) ifTrue:[^ true].
+    visualBlock notNil ifTrue:[^true].
+    listAttributes notNil ifTrue:[
+        (listLine <= listAttributes size) ifTrue:[
+            ^ (listAttributes at:listLine) notNil
+        ]
+    ].
+    ^ false
+
+    "Modified: / 21.6.1998 / 02:43:02 / cg"
+!
+
+widthForScrollBetween:start and:end
+    "has to be redefined since WHOLE line is inverted/modified sometimes"
+
+    | anySelectionInRange |
+
+    selection notNil ifTrue:[
+        self multipleSelectOk ifTrue:[
+            anySelectionInRange := false.
+            selection do:[:s |
+                (s between:start and:end) ifTrue:[
+                    anySelectionInRange := true
+                ]
+            ]
+        ] ifFalse:[
+            anySelectionInRange := selection between:start and:end
+        ]
+    ] ifFalse:[
+        anySelectionInRange := false
+    ].
+
+    anySelectionInRange ifTrue:[
+        ^ width
+"
+        self is3D ifFalse:[
+            ^ width 
+        ].
+        ( #(next openwin) includes:styleSheet name) ifTrue:[
+            ^ width 
+        ].
+        viewBackground = background ifFalse:[
+            ^ width 
+        ]
+"
+    ].
+    ^ super widthForScrollBetween:start and:end
+! !
+
+!SelectionInListView methodsFor:'private-drag and drop'!
+
+collectionOfDragObjects
+    "returns collection of dragable objects assigned to selection
+     Here, by default, a collection of text-dragObjects is generated;
+     however, if a dragObjectConverter is defined, that one gets a chance
+     to convert as appropriate."
+
+    |collection converted|
+
+    collection := OrderedCollection new.
+
+    self selectionDo:[:aNumber| |text|
+        text := self at:aNumber.
+        collection add:(DropObject newText:text)
+    ].
+    dragObjectConverter notNil ifTrue:[
+        converted := OrderedCollection new.
+        collection do:[:o | 
+                                |convertedObject|
+
+                                convertedObject := dragObjectConverter value:o.
+                                convertedObject notNil ifTrue:[
+                                    converted add:convertedObject
+                                ]
+                      ].
+        collection := converted
+    ].
+    ^ collection.
+
+    "Modified: 6.4.1997 / 14:14:30 / cg"
+! !
+
+!SelectionInListView methodsFor:'queries'!
+
+isCursorKeyConsumer
+    "return true, if the receiver can be controlled by cursor keys;
+     i.e. it can handle some keyboard input,
+     isCursorKeyConsumer are potential candidates for getting the keyboard
+     focus initially within dialogBoxes, or when the focus-follows-pointer
+     mode is off.
+     Return false here, this is redefined in SelectionInListView."
+
+    ^ true
+!
+
+specClass
+    "redefined, since the name of my specClass is nonStandard (i.e. not SelectionInListSpec)"
+
+    self class == SelectionInListView ifTrue:[^ SequenceViewSpec].
+    ^ super specClass
+
+    "Modified: / 5.9.1995 / 23:05:53 / claus"
+    "Modified: / 31.10.1997 / 19:48:44 / cg"
+! !
+
+!SelectionInListView methodsFor:'redrawing'!
+
+redrawElement:aNumber
+    "redraw an individual element"
+
+    ^ self redrawLine:aNumber
+!
+
+redrawFromVisibleLine:startVisLineNr to:endVisLineNr
+    "redraw a range of lines.
+     Must check, if any is in the selection and handle this case.
+     Otherwise draw it en-bloque using supers method."
+
+    |special sel
+     l1 "{ Class: SmallInteger }"
+     l2 "{ Class: SmallInteger }"
+     selNo "{ Class: SmallInteger }" |
+
+    ((selection isCollection) 
+    or:[listAttributes notNil
+    or:[visualBlock notNil
+    or:[selectedVisualBlock notNil]]]) ifTrue:[
+        "/ cannot do bulk-redraw ...
+        l1 := startVisLineNr.
+        l2 := endVisLineNr. 
+        l1 to:l2 do:[:visLine |
+            self redrawVisibleLine:visLine
+        ].
+        ^ self
+    ].
+
+"XXX only if -1/+1"
+"/    hilightLevel ~~ 0 ifTrue:[
+"/     self paint:bgColor.
+"/     self fillRectangleX:0 y:(self yOfVisibleLine:startVisLineNr)-1 width:width height:1
+"/  ].
+    special := true.
+    selection isNil ifTrue:[
+        special := false
+    ] ifFalse:[
+        sel := self listLineToVisibleLine:selection.
+        sel isNil ifTrue:[
+            special := false
+        ] ifFalse:[
+            special := (sel between:startVisLineNr and:endVisLineNr)
+        ]
+    ].
+    special ifFalse:[
+      ^ super redrawFromVisibleLine:startVisLineNr to:endVisLineNr
+    ].
+
+    selNo := sel.
+    selNo > startVisLineNr ifTrue:[
+        super redrawFromVisibleLine:startVisLineNr to:(selNo - 1)
+    ].
+    self redrawVisibleLine:selNo.
+    selNo < endVisLineNr ifTrue:[
+        super redrawFromVisibleLine:(selNo + 1) to:endVisLineNr
+    ]
+
+    "Modified: / 21.6.1998 / 02:42:17 / cg"
+!
+
+redrawVisibleLine:visLineNr
+    "redraw a single line.
+     Must check, if any is in the selection and handle this case.
+     Otherwise draw using supers method."
+
+    |listLine fg bg newFont oldFont id dObj y|
+
+    fg := fgColor.
+    bg := bgColor.
+    listLine := self visibleLineToListLine:visLineNr.
+    listLine notNil ifTrue:[
+        (self isInSelection:listLine) ifTrue:[
+            ^ self drawVisibleLineSelected:visLineNr
+        ].
+
+        visualBlock notNil ifTrue:[
+            y := self yOfVisibleLine:visLineNr.
+
+            backgroundAlreadyClearedColor == bg ifFalse:[
+                self paint:bg.
+                self fillRectangleX:margin y:y - (lineSpacing//2)
+                              width:(width - (2 * margin)) 
+                             height:fontHeight.
+            ].
+
+            dObj := visualBlock value:self value:listLine.
+            self paint:fg on:bg.
+            dObj displayOn:self x:(textStartLeft - viewOrigin) x y:y + gc font ascent opaque:true.
+            ^ self
+        ].
+
+        listAttributes notNil ifTrue:[
+            ((self line:listLine hasAttribute:#halfIntensity) 
+            or:[ (self lineIsEnabled:listLine) not ]) ifTrue:[
+                fg := halfIntensityFgColor
+            ].
+            (self line:listLine hasAttribute:#bold) ifTrue:[
+                newFont := gc font asBold.
+                (gc font bold 
+                or:[id := (newFont onDevice:gc device) fontId.
+                    id isNil]) 
+                ifTrue:[
+                    "
+                     mhmh - what can be done, if the font is already bold ?
+                     or no such font is available   
+                    "
+                    fgColor brightness > 0.5 ifTrue:[
+                        fg := fgColor darkened "darkened". 
+                    ] ifFalse:[
+                        fg := fgColor lightened "lightened"
+                    ].
+                    (fg brightness - bg brightness) abs < 0.25 ifTrue:[
+                        bgColor brightness > 0.5 ifTrue:[
+                            fg := fg darkened. 
+                        ] ifFalse:[
+                            fg := fg lightened
+                        ].
+                    ]
+                ].
+                id notNil ifTrue:[
+                    oldFont := gc font.
+                    self basicFont:newFont.
+                    self drawVisibleLine:visLineNr with:fg and:bg.
+                    self basicFont:oldFont.
+                ] ifFalse:[
+                    self drawVisibleLine:visLineNr with:fg and:bg.
+                ].
+                ^ self
+            ]
+        ]
+    ].
+    ^ self drawVisibleLine:visLineNr with:fg and:bg
+
+    "Modified: / 08-08-1998 / 03:42:13 / cg"
+    "Modified: / 29-06-2010 / 16:16:03 / sr"
+!
+
+redrawVisibleLine:visLineNr col:colNr
+    "redraw a single character.
+     Must check, if its in the selection and handle this case."
+
+    (self visibleLineNeedsSpecialCare:visLineNr) ifTrue:[
+	^ self redrawVisibleLine:visLineNr
+    ].
+    super redrawVisibleLine:visLineNr col:colNr
+!
+
+redrawVisibleLine:visLineNr from:startCol
+    "redraw from a col to the right end.
+     Must check, if its in the selection and handle this case."
+
+    (self visibleLineNeedsSpecialCare:visLineNr) ifTrue:[
+	^ self redrawVisibleLine:visLineNr
+    ].
+    super redrawVisibleLine:visLineNr from:startCol
+!
+
+redrawVisibleLine:visLineNr from:startCol to:endCol
+    "redraw from a startCol to endCol.
+     Must check, if its in the selection and handle this case."
+
+    (self visibleLineNeedsSpecialCare:visLineNr) ifTrue:[
+	^ self redrawVisibleLine:visLineNr
+    ].
+    super redrawVisibleLine:visLineNr from:startCol to:endCol
+! !
+
+!SelectionInListView methodsFor:'selections'!
+
+deselect
+    "deselect; Model or actionBlock notifications are made.
+     To deselect without notifications, use #setSelection:nil."
+
+    self selection:nil
+
+    "Modified: 25.5.1996 / 13:03:47 / cg"
+!
+
+deselectWithoutRedraw
+    "deselect without redraw or notifications.
+     No model or actionBlock notifications are made."
+
+    selection := nil
+
+    "Modified: 25.5.1996 / 13:04:14 / cg"
+!
+
+expandSelectionToX:x y:y
+    "used with button-motion and shift-press;
+     expand the selection to include all items from the clicked one,
+     up to the one under the mouse pointer"
+
+    |movedLine delta newSelection|
+
+    self multipleSelectOk ifFalse:[^ self].
+
+    movedLine := self visibleLineToAbsoluteLine:(self visibleLineOfY:y).
+
+    clickLine isNil ifTrue:[
+        selection size == 1 ifTrue:[
+            clickLine := selection first.
+        ] ifFalse:[
+            movedLine > selection max ifTrue:[
+                clickLine := selection max
+            ] ifFalse:[
+                movedLine < selection min ifTrue:[
+                    clickLine := selection min
+                ].
+            ]
+        ].
+        clickLine isNil ifTrue:[
+            ^ self
+        ].
+    ].
+
+    selectionAtClickTime isNil ifTrue:[
+        selectionAtClickTime := selection copy.
+    ].
+
+    newSelection := selectionAtClickTime copy.
+    newSelection isNil ifTrue:[newSelection := OrderedCollection new].
+
+    "/ compute new selection
+    delta  := (clickLine < movedLine) ifTrue:[1] ifFalse:[-1].
+    clickLine to:movedLine by:delta do:[:ln |
+        |isSelected doSelect doUnselect|
+
+        doSelect := doUnselect := false.
+
+        isSelected := self is:ln inSelection:selectionAtClickTime.
+        (selectMode ? true) == true ifTrue:[
+            doSelect := isSelected not
+        ] ifFalse:[
+            selectMode == false ifTrue:[
+                doUnselect := isSelected
+            ] ifFalse:[
+                selectMode == #toggle ifTrue:[
+                    doUnselect := isSelected.
+                    doSelect := doUnselect not.
+                ]
+            ]
+        ].
+
+        doSelect ifTrue:[
+            newSelection add:ln.
+        ] ifFalse:[
+            doUnselect ifTrue:[
+                newSelection remove:ln.
+            ]
+        ]
+    ].
+
+    newSelection ~= selection ifTrue:[
+        self selection:newSelection.
+    ].
+
+    "Created: / 14.11.1996 / 15:48:10 / cg"
+    "Modified: / 3.2.2000 / 22:13:50 / cg"
+!
+
+firstInSelection
+    "return the index of the first selected line - nil if there is no selection"
+
+    selection isNil ifTrue:[^ nil].
+    selection isCollection ifTrue:[
+        selection size == 0 ifTrue:[
+            ^ nil
+        ].
+        ^ selection min
+    ].
+    ^ selection
+!
+
+hasSelection
+    "return true, if the view has a selection"
+
+    self multipleSelectOk ifTrue:[
+        ^ selection size > 0
+    ].
+    ^ selection notNil 
+!
+
+is:aNumber inSelection:aSelection
+    "return true, if line, aNumber is in the selection"
+
+    aSelection isNil ifTrue:[^ false].
+    self multipleSelectOk ifTrue:[
+        ^ (aSelection includes:aNumber)
+    ].
+    ^ (aNumber == aSelection)
+!
+
+isInSelection:aNumber
+    "return true, if line, aNumber is in the selection"
+
+    selection isNil ifTrue:[^ false].
+    self multipleSelectOk ifTrue:[
+        ^ (selection includes:aNumber)
+    ].
+    ^ (aNumber == selection)
+!
+
+lastInSelection
+    "return the index of the last selected line - nil if there is no selection"
+
+    selection isNil ifTrue:[^ nil].
+    selection isCollection ifTrue:[
+        selection size == 0 ifTrue:[
+            ^ nil
+        ].
+        ^ selection max
+    ].
+    ^ selection
+!
+
+makeSelectionVisible
+    "scroll to make the selection line visible"
+
+    |line|
+
+    selection notNil ifTrue:[
+        self multipleSelectOk ifTrue:[
+            selection isEmpty ifTrue:[^ self].
+            "/ dont move, if any in the selection isVisible
+            selection do:[:aSelectedLine |
+                (self lineIsFullyVisible:aSelectedLine) ifTrue:[
+                    ^ self
+                ]
+            ].
+            line := selection first.
+        ] ifFalse:[
+            line := selection
+        ].
+        self makeLineVisible:line 
+    ]
+
+    "Modified: / 24.2.2000 / 17:48:00 / cg"
+!
+
+nextAfterSelection
+    "return the index of the next selectable entry after the selection.
+     Wrap at end."
+
+    ^ self nextSelectableAfter:selection
+!
+
+nextSelectableAfter:indexOrIndexCollection
+    "return the index of the next selectable entry after the indexOrIndexCollection.
+     Wrap at end."
+
+    |next sz|
+
+    indexOrIndexCollection isNil ifTrue:[
+        next := firstLineShown
+    ] ifFalse:[
+        indexOrIndexCollection isCollection ifTrue:[
+            indexOrIndexCollection size == 0 ifTrue:[
+                next := firstLineShown
+            ] ifFalse:[
+                next := indexOrIndexCollection max + 1
+            ]
+        ] ifFalse:[
+            next := indexOrIndexCollection + 1
+        ].
+    ].
+
+    (self isValidSelection:next) ifFalse:[
+        sz := self size.
+        next > sz ifTrue:[
+            next := 1.
+        ] ifFalse:[
+            [next <= sz
+             and:[(self isValidSelection:next) not ]] whileTrue:[
+                next := next + 1
+            ].
+        ].
+    ].
+
+    (self isValidSelection:next) ifFalse:[
+        next := nil
+    ].
+    ^ next
+
+    "Modified: / 8.8.1998 / 03:36:55 / cg"
+!
+
+numberOfSelections
+    "return the number of selected entries"
+
+    |sz|
+
+    selection isNil ifTrue:[^ 0].
+    sz := selection size.
+    sz > 0 ifTrue:[^ sz].
+    ^ 1
+!
+
+previousBeforeSelection
+    "return the index of the previous selectable entry before the selection.
+     Wrap at beginning."
+
+    ^ self previousSelectableBefore:selection
+
+!
+
+previousSelectableBefore:indexOrIndexCollection
+    "return the index of the previous selectable entry before the indexOrIndexCollection.
+     Wrap at beginning."
+
+    |prev|
+
+    indexOrIndexCollection isNil ifTrue:[
+        prev := firstLineShown - 1 
+    ] ifFalse:[
+        indexOrIndexCollection isCollection ifTrue:[
+            indexOrIndexCollection size == 0 ifTrue:[
+                prev := firstLineShown - 1
+            ] ifFalse:[
+                prev := indexOrIndexCollection min - 1
+            ]
+        ] ifFalse:[
+            prev := indexOrIndexCollection - 1
+        ].
+    ].
+    (self isValidSelection:prev) ifFalse:[
+        prev < 1 ifTrue:[
+            prev := self size.
+        ] ifFalse:[
+            [prev >= 1
+             and:[(self isValidSelection:prev) not]] whileTrue:[
+                prev := prev - 1
+            ].
+        ].
+    ].
+    (self isValidSelection:prev) ifFalse:[
+        prev := nil
+    ].
+    ^ prev
+
+!
+
+selectAll
+    "select all entries. 
+     Model and/or actionBlock notification IS done."
+
+    |oldSelection|
+
+    self multipleSelectOk ifTrue:[
+        oldSelection := selection.
+        selection := OrderedCollection withAll:(1 to:self size).
+        self invalidate.
+        self selectionChangedFrom:oldSelection.
+    ]
+
+    "Modified: 15.11.1996 / 17:00:26 / cg"
+!
+
+selectElement:anObject
+    "select the element with same printString as the argument, anObject.
+     Scroll to make the new selection visible.
+     Model and/or actionBlock notification IS done."
+
+    |lineNo|
+
+    list notNil ifTrue:[
+        items notNil ifTrue:[
+            lineNo := items indexOf:anObject ifAbsent:nil
+        ] ifFalse:[
+            lineNo := list indexOf:(anObject printString) ifAbsent:nil.
+        ].
+        lineNo notNil ifTrue:[self selection:lineNo]
+    ]
+
+    "Modified: 15.11.1996 / 17:01:05 / cg"
+!
+
+selectElementWithoutScroll:anObject
+    "select the element with same printString as the argument, anObject.
+     Do not scroll.
+     *** No model and/or actionBlock notification is done here."
+
+    |lineNo|
+
+    list notNil ifTrue:[
+        items notNil ifTrue:[
+            lineNo := items indexOf:anObject ifAbsent:nil
+        ] ifFalse:[
+            lineNo := list indexOf:(anObject printString) ifAbsent:nil.
+        ].
+        lineNo notNil ifTrue:[self selectWithoutScroll:lineNo]
+    ]
+
+    "Modified: 15.11.1996 / 17:01:17 / cg"
+!
+
+selectFirst
+    "select the first selectable element.
+     Model and/or actionBlock notification IS done."
+
+    self selection:(self nextSelectableAfter:0)
+!
+
+selectLast
+    "select the last selectable element.
+     Model and/or actionBlock notification IS done."
+
+    self selection:(self previousSelectableBefore:list size + 1)
+!
+
+selectNext
+    "select next line or first visible if there is currrently no selection.
+     Wrap at end. 
+     Model and/or actionBlock notification IS done."
+
+    self selection:(self nextAfterSelection)
+
+    "Modified: 15.11.1996 / 17:01:27 / cg"
+!
+
+selectPrevious
+    "select previous line or previous visible if there is currently no selection.
+     Wrap at beginning. 
+     Model and/or actionBlock notification IS done."
+
+    self selection:(self previousBeforeSelection).
+
+    "Modified: 26.9.1995 / 09:41:16 / stefan"
+    "Modified: 15.11.1996 / 17:01:34 / cg"
+!
+
+selectWithoutScroll:aNumberOrNilOrCollection
+    "select line, aNumber or deselect if argument is nil.
+     *** No model and/or actionBlock notification is done here."
+
+    |newSelection multipleSelectOk oldItems newItems addedItems removedItems|
+
+    multipleSelectOk := self multipleSelectOk.
+
+    newSelection := aNumberOrNilOrCollection.
+    multipleSelectOk ifTrue:[
+        newSelection notNil ifTrue:[
+            newSelection isNumber ifTrue:[
+                newSelection := OrderedCollection with:newSelection
+            ].
+
+            newSelection := newSelection select:[:each | each notNil].
+            newSelection size == 0 ifTrue:[newSelection := nil].
+        ].
+    ].
+
+    newSelection notNil ifTrue:[
+        (self isValidSelection:newSelection) ifFalse:[
+            multipleSelectOk ifTrue:[
+                newSelection := newSelection select:[:each | self isValidSelection:each].
+            ] ifFalse:[
+                newSelection := nil.
+            ].
+        ].
+        newSelection == 0 ifTrue:[
+            newSelection := nil
+        ] ifFalse:[
+            (newSelection isCollection
+            and:[newSelection size == 0]) ifTrue:[
+                newSelection := nil
+            ]
+        ].
+
+        newSelection notNil ifTrue:[
+            multipleSelectOk ifTrue:[
+                newSelection isCollection ifFalse:[
+                    newSelection := OrderedCollection with:newSelection
+                ]
+            ]
+        ].
+    ].
+
+    (newSelection = selection) ifTrue: [^ self].
+
+    multipleSelectOk ifTrue:[
+        oldItems := selection ? #().
+        newItems := newSelection ? #().
+    ] ifFalse:[
+        (selection isNil or:[selection == 0]) ifTrue:[
+            oldItems := #()
+        ] ifFalse:[
+            oldItems := Array with:selection
+        ].
+        (newSelection isNil or:[newSelection == 0]) ifTrue:[
+            newItems := #()
+        ] ifFalse:[
+            newItems := Array with:newSelection
+        ].
+    ].
+
+    addedItems := newItems reject:[:item | (oldItems includes:item)].    
+    removedItems := oldItems reject:[:item | (newItems includes:item)].    
+
+    selection := newSelection.
+
+    addedItems do:[:line |
+        self redrawElement:line
+    ].
+    removedItems do:[:line |
+        self redrawElement:line
+    ].
+
+"/    "
+"/     redraw old selection unhighlighted
+"/    "
+"/    selection notnil iftrue: [
+"/        prevselection := selection.
+"/        selection := nil.
+"/        multipleselectok iftrue:[
+"/            prevselection do:[:line |
+"/                self redrawelement:line
+"/            ]
+"/        ] iffalse:[
+"/            self redrawelement:prevselection
+"/        ]
+"/    ].
+"/
+"/    selection := newSelection.
+"/
+"/    "
+"/     redraw new selection unhighlighted
+"/    "
+"/    newSelection notNil ifTrue:[
+"/        multipleSelectOk ifTrue:[
+"/"/            newSelection isCollection ifFalse:[
+"/"/                selection := OrderedCollection with:newSelection.
+"/"/            ].
+"/            selection do:[:line |
+"/                self redrawElement:line
+"/            ]
+"/        ] ifFalse:[
+"/            self redrawElement:selection
+"/        ]
+"/    ]
+
+    "Modified: 15.11.1996 / 16:58:46 / cg"
+!
+
+selection
+    "return the selection index or collection of indices (if multipleSelect is on)"
+
+    ^ selection
+!
+
+selection:aNumberOrNilOrCollection
+    "select line, aNumber or deselect if argument is nil;
+     scroll to make the selected line visible.
+     The model and/or actionBlock IS notified."
+
+    |oldSelection|
+
+    oldSelection := selection.
+    self setSelection:aNumberOrNilOrCollection.
+    selection ~= oldSelection ifTrue:[
+        self selectionChangedFrom:oldSelection
+    ]
+
+    "Modified: / 7.8.1998 / 13:36:34 / cg"
+!
+
+selectionAsCollection
+    "return the selection as a collection of line numbers.
+     This allows users of this class to enumerate independent of
+     the multipleSelect style."
+
+    selection isNil ifTrue:[^ #()].
+
+"/    self multipleSelectOk ifTrue:[
+"/        ^ (OrderedCollection new) add:selection; yourself.
+"/    ].
+    self multipleSelectOk ifFalse:[
+        ^ (OrderedCollection new) add:selection; yourself.
+    ].
+    ^ selection
+!
+
+selectionChangedFrom:oldSelection
+    "selection has changed. Call actionblock and/or send changeMessage if defined"
+
+    |changeArg actionArg|
+
+    changeArg := actionArg := self argForChangeMessage.
+
+    "/
+    "/ the MVC way of doing things - notify model via changeMsg
+    "/
+    self multipleSelectOk ifFalse:[
+        "/ ST80 sends 0 as index, if the same selection is reselected ...
+        selection == oldSelection ifTrue:[
+            changeArg := 0
+        ].
+    ].
+
+    "/ must take care, if model is == to the selection-collection
+    "/ in this case, we must force a change on the model
+    "/ (valueHolder would not send a change in the == case)
+    "/ Q: should this be done in #sendChangeMessage ?
+    model isValueModel ifTrue:[
+        model value == changeArg ifTrue:[
+            model setValue:nil.
+        ]
+    ].
+    self sendChangeMessageWith:changeArg.
+
+    "/
+    "/ the ST/X way of doing things - perform the actionBlock
+    "/
+    actionBlock notNil ifTrue:[
+        actionBlock valueWithOptionalArgument:actionArg
+    ].
+
+    "Modified: 14.2.1997 / 16:49:09 / cg"
+!
+
+selectionDo:aBlock
+    "perform aBlock for each nr in the selection.
+     For single selection, it is called once for the items nr.
+     For multiple selections, it is called for each."
+
+    selection notNil ifTrue:[
+        self multipleSelectOk ifTrue:[
+            selection do:aBlock
+        ] ifFalse:[
+            aBlock value:selection
+        ].
+    ].
+!
+
+selectionValue
+    "return the selection value i.e. the text in the selected line.
+     For multiple selections a collection containing the entries is returned."
+
+    self multipleSelectOk ifTrue:[
+        selection isNil ifTrue:[^ #()].
+        ^ selection collect:[:nr | self at:nr]
+    ].
+    selection isNil ifTrue:[^ nil].
+    ^ self at:selection
+!
+
+selectionValueAsCollection
+    "return the selection values as a collection - allows selectionValues to
+     be enumerated independent of the multiSelect settings"
+
+    selection isNil ifTrue:[^ #()].
+    self multipleSelectOk ifTrue:[
+        ^ selection collect:[:nr | self at:nr]
+    ].
+    ^ Array with:(self at:selection)
+!
+
+setSelectElement:anObject 
+    "select the element with same printString as the argument, anObject.
+     Scroll to make the new selection visible.
+     *** No model and/or actionBlock notification is done here."
+
+    |size lineNo coll s|
+
+    list isNil ifTrue:[
+        ^ self
+    ].
+    self multipleSelectOk ifTrue:[
+        (size := anObject size) == 0 ifTrue:[
+            ^ self setSelection:nil
+        ].
+        coll := OrderedCollection new:size.
+        anObject do:[:o | 
+            items notNil ifTrue:[
+                lineNo := items indexOf:o
+            ] ifFalse:[
+                lineNo := list findFirst:[:el | (o ? '') string = (el ? '') string]
+            ].
+            lineNo ~~ 0 ifTrue:[
+                coll add:lineNo
+            ]
+        ].
+        ^ self setSelection:coll
+    ].
+    anObject isNil ifTrue:[
+        ^ self setSelection:nil
+    ].
+
+    items notNil ifTrue:[
+        lineNo := items findFirst:[:el | anObject = el]
+    ] ifFalse:[
+        s := anObject string.
+        lineNo := list findFirst:[:el | s = el string]
+    ].
+    lineNo ~~ 0 ifTrue:[
+        self setSelection:lineNo
+    ]
+!
+
+setSelection:aNumberOrNilOrCollection
+    "select line, aNumber or deselect if argument is nil;
+     scroll to make the selected line visible.
+     *** No model and/or actionBlock notification is done here."
+
+    self selectWithoutScroll:aNumberOrNilOrCollection.
+
+    "/ makeSelectionVisible handled in #buttonRelease
+    isButtonPressActive ifTrue:[^ self ].
+    
+    self hasSelection ifTrue:[
+        self makeSelectionVisible
+    ].
+
+    "Created: / 25.5.1996 / 12:23:18 / cg"
+    "Modified: / 7.8.1998 / 13:36:42 / cg"
+!
+
+toggleSelection:aNumber
+    "toggle selection-state of entry, aNumber.
+     *** No model and/or actionBlock notification is done here."
+
+    (self isInSelection:aNumber) ifTrue:[
+        self removeFromSelection:aNumber
+    ] ifFalse:[
+        self addToSelection:aNumber
+    ]
+
+    "Modified: 15.11.1996 / 17:02:08 / cg"
+!
+
+valueIsInSelection:someString
+    "return true, if someString is in the selection"
+
+    |sel|
+
+    selection isNil ifTrue:[^ false].
+    sel := self selectionValue.
+    self numberOfSelections > 1 ifTrue:[
+	^ (sel includes:someString)
+    ].
+    ^ (someString = sel)
+! !
+
+!SelectionInListView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/SelectionInListView.st,v 1.274 2014-03-26 09:55:36 vrany Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/SelectionInListView.st,v 1.274 2014-03-26 09:55:36 vrany Exp $'
+!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SequenceView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,141 @@
+"
+ COPYRIGHT (c) 1997 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+ScrollableView subclass:#SequenceView
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Lists'
+!
+
+!SequenceView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1997 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+!
+
+documentation
+"
+    implements a SelectionInListView with configurable scrollbars
+
+    ST-80 compatibility
+
+    [see also:]
+        SelectionInListView
+"
+!
+
+examples
+"
+    same behavior as a SelectionInListView, but scrollable
+                                                                        [exBegin]
+    |view|
+
+    view := self extent:100@100.
+    view list:#( 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'in der Ruhe liegt die Kraft').
+    view multipleSelectOk:true.
+    view openAndWait.
+                                                                        [exEnd]
+"
+! !
+
+!SequenceView class methodsFor:'defaults'!
+
+defaultFont
+    ^ SelectionInListView defaultFont
+
+    "Created: / 20.6.1998 / 14:17:01 / cg"
+! !
+
+!SequenceView methodsFor:'Compatibility-ST80'!
+
+optimizeForText
+    "dummy - ST-80 compatibility"
+
+    "Created: / 6.7.1998 / 13:26:18 / cg"
+! !
+
+!SequenceView methodsFor:'initialization'!
+
+initialize
+    "setup a ScrollableView scrolling a SelectionInList instance"
+
+    super initialize.
+
+    self verticalScrollable:true;     verticalMini:false.
+    self horizontalScrollable:true; horizontalMini:false.
+
+    self scrolledView:SelectionInListView new
+! !
+
+!SequenceView methodsFor:'slave-view messages'!
+
+enabled:aBoolean
+    "senders assume that I am the listView - not a wrapper"
+
+    scrolledView enabled:aBoolean
+!
+
+font:aFont
+    "set the font for the scrolled view"
+
+    super font:aFont.
+    self scrolledView font:aFont.
+!
+
+invalidate
+    "senders assume that I am the listView - not a wrapper"
+
+    scrolledView invalidate
+!
+
+invalidate:aRectangle
+    "senders assume that I am the listView - not a wrapper"
+
+    scrolledView invalidate:aRectangle
+!
+
+invalidate:aRectangle repairNow:doRepair
+    "senders assume that I am the listView - not a wrapper"
+
+    scrolledView invalidate:aRectangle repairNow:doRepair
+!
+
+invalidateDeviceRectangle:aRectangle repairNow:doRepair
+    "senders assume that I am the listView - not a wrapper"
+
+    scrolledView invalidateDeviceRectangle:aRectangle repairNow:doRepair
+!
+
+invalidateRepairNow:doRepair
+    "senders assume that I am the listView - not a wrapper"
+
+    scrolledView invalidateRepairNow:doRepair
+! !
+
+!SequenceView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/SequenceView.st,v 1.11 2008-07-18 08:58:08 stefan Exp $'
+! !
--- a/TextCollector.st	Tue May 13 23:20:31 2014 +0100
+++ b/TextCollector.st	Sun May 18 09:45:08 2014 +0100
@@ -9,8 +9,6 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 "
-'From Smalltalk/X, Version:6.2.3.0 on 20-03-2014 at 21:05:01'                   !
-
 "{ Package: 'stx:libwidg' }"
 
 EditTextView subclass:#TextCollector
--- a/TextView.st	Tue May 13 23:20:31 2014 +0100
+++ b/TextView.st	Sun May 18 09:45:08 2014 +0100
@@ -9,8 +9,6 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 "
-'From Smalltalk/X, Version:6.2.3.0 on 18-02-2014 at 18:37:41'                   !
-
 "{ Package: 'stx:libwidg' }"
 
 ListView subclass:#TextView
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Toggle.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,635 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Button subclass:#Toggle
+	instanceVariableNames:'showLamp lampColor lampWidth lampHeight'
+	classVariableNames:'DefaultShowLamp DefaultLampColor LampInset'
+	poolDictionaries:''
+	category:'Views-Interactors'
+!
+
+!Toggle class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    this button changes state whenever clicked upon and stays down (pressed) 
+    until clicked again. All the main action is in Button and the controller
+    (ToggleController).
+
+    The toggle may optionally display a little kind-of-lamp (or LED), which
+    is turned on when the toggle is pressed. (i.e. as in the Interviews toolkit).
+
+    whenever the Toggle changes its change, it will evaluate one of
+    pressAction or releaseAction.
+
+    For ST-80 compatibility, if the model is nonNil, this one gets a new
+    value and is sent a changed message. Also, the toggle will follow changes 
+    in the model and update its display as appropriate.
+    If nonNil, the model is supposed to be a ValueHolder holding true or false.
+
+
+    [instance variables:]
+        showLamp          <Boolean>     true if a lamp should be displayed
+        lampColor         <Color>       color of the lamp
+        lampWidth         <Integer>     width of the lamp in pixel
+        lampHeight        <Integer>     height of the lamp in pixel
+
+    [styleSheet values:]
+        toggleShowLamp    <Boolean>     if true, a lamp is shown; default:false.
+        toggleLampColor   <Color>       lamps color; default:yellow.
+
+    [author:]
+        Claus Gittinger
+
+    [see also:]
+        Button RadioButton
+        ( introduction to view programming :html: programming/viewintro.html#INTER_TOGGLES )
+        
+        
+"
+!
+
+examples
+"
+    Examples:
+    Try all, to see what is possible.
+        (notice, that these examples are meant to show what can be done;
+         usually, all style-related stuff is preinitialized - you should not
+         normally play around with onLevel, offLevel, showLamp: etc)
+
+
+      simple:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'press here' in:v.
+        t origin:10 @ 10.
+        t action:[:value | Transcript show:'toggle state: '; showCR:value.].
+        v open
+                                                                        [exEnd]
+
+
+      separate press/release actions:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'press here' in:v.
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'toggle pressed'.].
+        t releaseAction:[Transcript showCR:'toggle released'.].
+        v open
+                                                                        [exEnd]
+
+
+      changing logo:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'eat me' in:v.
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'smaller'. t label:'drink me'].
+        t releaseAction:[Transcript showCR:'larger'. t label:'eat me'].
+        v open
+                                                                        [exEnd]
+
+
+      changing logo:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle in:v.
+        t logo:(Form width:16 height:14 fromArray:#(
+                                                        2r00000000 2r00000000
+                                                        2r00000000 2r00000000
+                                                        2r00000000 2r00000000
+                                                        2r00000111 2r11100000
+                                                        2r00001100 2r00000000
+                                                        2r00011000 2r00000000
+                                                        2r00011000 2r00000000
+                                                        2r00011000 2r00000000
+                                                        2r00011000 2r00000000
+                                                        2r00001100 2r00000000
+                                                        2r00000111 2r11100000
+                                                        2r00000000 2r00000000
+                                                        2r00000000 2r00000000
+                                                        2r00000000 2r00000000)).
+        t origin:10 @ 10.
+        v open
+                                                                        [exEnd]
+
+
+      uhh - changing logos and getting bg-colors from the image:
+                                                                        [exBegin]
+        |v t i|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle in:v.
+        t origin:10 @ 10.
+        t showLamp:false.
+        t activeLogo:(i := Image fromFile:'red-ball.gif').
+        t passiveLogo:(Image fromFile:'green-ball.gif').
+        t backgroundColor:(i at:0@0).
+        t enteredBackgroundColor:(t backgroundColor).
+        t activeBackgroundColor:(t backgroundColor).
+        v open
+                                                                        [exEnd]
+
+
+      changing logo and freezing size (looks better):
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        'create with large logo; freeze; change to small logo'.
+        t := Toggle label:'drink me' in:v. 
+        t sizeFixed:true.
+        t label:'eat me'.
+
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'smaller'. t label:'drink me'].
+        t releaseAction:[Transcript showCR:'larger'. t label:'eat me'].
+        v open
+                                                                        [exEnd]
+
+
+      adding a lamp (in some view styles, this is the default anyway):
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t showLamp:true.
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'. t label:'on'].
+        t releaseAction:[Transcript showCR:'off'. t label:'off'].
+        v open
+                                                                        [exEnd]
+
+
+      changing lamps color:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t showLamp:true.
+        t lampColor:Color red.
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'. t label:'on'.].
+        t releaseAction:[Transcript showCR:'off'. t label:'off'.].
+        v open
+                                                                        [exEnd]
+
+
+      lamp only - no '3D going-in' (this is the default with IRIS style)
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t showLamp:true.
+        t onLevel:(t offLevel).
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'. t label:'on'].
+        t releaseAction:[Transcript showCR:'off'. t label:'off'].
+        v open
+                                                                        [exEnd]
+
+
+      lamp and freezing size of the label (looks better):
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t showLamp:true.
+        t sizeFixed:true.
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'. t label:'on'].
+        t releaseAction:[Transcript showCR:'off'. t label:'off'].
+        v open
+                                                                        [exEnd]
+
+
+      another variation:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t showLamp:true.
+        t sizeFixed:true.
+        t onLevel:(t offLevel).
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'. t label:'on'].
+        t releaseAction:[Transcript showCR:'off'. t label:'off'].
+        v open
+                                                                        [exEnd]
+
+
+      and another one:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t showLamp:true.
+        t sizeFixed:true.
+
+        t showLamp:false.
+        t offLevel:3.
+        t onLevel:3.
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'. t showLamp:true. t label:'on'].
+        t releaseAction:[Transcript showCR:'off'. t showLamp:false. t label:'off'].
+        v open
+                                                                        [exEnd]
+
+
+      another font:
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t font:(Font family:'times' face:'bold' style:'roman' size:24).
+        t label:'hello'.
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'.].
+        t releaseAction:[Transcript showCR:'off'.].
+        v open
+                                                                        [exEnd]
+
+
+      another font (no, I dont know what it means :-):
+                                                                        [exBegin]
+        |v t|
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'off' in:v.
+        t font:(Font family:'k14' face:nil style:nil size:nil).
+        t label:(TwoByteString with:(Character value:16r3021)).
+
+        t origin:10 @ 10.
+        t pressAction:[Transcript showCR:'on'.].
+        t releaseAction:[Transcript showCR:'off'.].
+        v open
+                                                                        [exEnd]
+
+
+    using a model (look at 'value' in the inspector):
+                                                                        [exBegin]
+        |m v t|
+
+        m := ValueHolder newBoolean.
+        m inspect.
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'press here to change value' in:v.
+        t origin:10 @ 10.
+        t model:m.
+        v open
+                                                                        [exEnd]
+
+
+    using a model with different changeSelector:
+                                                                        [exBegin]
+        |m v t|
+
+        m := Plug new.
+        m respondTo:#setValue1: with:[:value | Transcript show:'value 1 changed to: '; showCR:value].
+        m respondTo:#setValue2: with:[:value | Transcript show:'value 2 changed to: '; showCR:value].
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'press here for value1' in:v.
+        t origin:10 @ 10.
+        t model:m; change:#setValue1:.
+        t := Toggle label:'press here for value2' in:v.
+        t origin:10 @ 50.
+        t model:m; change:#setValue2:.
+        v open
+                                                                        [exEnd]
+
+
+    two toggles on the same model:
+                                                                        [exBegin]
+        |m v t|
+
+        m := true asValue.
+
+        v := StandardSystemView new extent:200@200.
+        t := Toggle label:'press here' in:v.
+        t origin:10 @ 10.
+        t model:m.
+
+        t := Toggle label:'or here' in:v.
+        t origin:10 @ 50.
+        t model:m.
+        v open
+                                                                        [exEnd]
+"
+! !
+
+!Toggle class methodsFor:'defaults'!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'toggle.showLamp'
+                       #'toggle.lampColor')>
+
+    DefaultShowLamp := StyleSheet at:#'toggle.showLamp' default:false.
+    DefaultLampColor := StyleSheet colorAt:#'toggle.lampColor' default:Color yellow.
+    LampInset := 1 "2".
+
+    "Modified: / 3.11.1997 / 11:42:19 / cg"
+! !
+
+!Toggle methodsFor:'accessing-look'!
+
+lampColor
+    "returns the color of the toggle-lamp"
+
+    ^ lampColor
+!
+
+lampColor:aColor
+    "change the color of the toggle-lamp"
+
+    lampColor := aColor.
+    shown ifTrue:[
+        (showLamp and:[controller pressed]) ifTrue:[
+            self invalidateRepairNow:true
+        ]
+    ]
+
+    "Modified: / 6.6.1998 / 19:32:50 / cg"
+!
+
+lampHeight:something
+    lampHeight := something.
+!
+
+lampWidth: something
+    lampWidth := something
+!
+
+showLamp
+    "return true, if I show a lamp"
+
+    ^ showLamp
+!
+
+showLamp:aBoolean
+    "enable/disable drawing of the lamp"
+
+    showLamp ~~ aBoolean ifTrue:[
+	showLamp := aBoolean.
+	self computeLabelSize.
+	fixSize ifFalse:[
+	    self resize
+	]
+    ]
+! !
+
+!Toggle methodsFor:'accessing-mvc'!
+
+model:aModel
+    super model:aModel.
+    self getValueFromModel.
+
+    "Modified: 28.2.1997 / 19:09:58 / cg"
+! !
+
+!Toggle methodsFor:'change & update'!
+
+update:something with:parameter from:changedObject
+    something == aspectMsg ifTrue:[
+        self getValueFromModel.
+    ].
+    super update:something with:parameter from:changedObject
+! !
+
+!Toggle methodsFor:'initialization'!
+
+defaultControllerClass
+    ^ ToggleController
+!
+
+fetchDeviceResources
+    "fetch device colors, to avoid reallocation at redraw time"
+
+    super fetchDeviceResources.
+
+    lampColor notNil ifTrue:[lampColor := lampColor onDevice:self graphicsDevice].
+
+    "Created: 13.1.1997 / 23:46:31 / cg"
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    <resource: #style (#'toggle.lampWidthMM' 
+                       #'toggle.lampHeightMM'
+                       #'toggle.activeLevel'
+                       #'toggle.passiveLevel'
+                       #'toggle.activeForegroundColor'
+                       #'toggle.activeBackgroundColor'
+                       #'toggle.foregroundColor'
+                       #'toggle.backgroundColor'
+                      )>
+
+    |mm fg bg|
+
+    super initStyle.
+
+    showLamp := DefaultShowLamp.
+    showLamp ifTrue:[
+        onLevel := offLevel.
+
+        "dont know, if I like this ..."
+        "
+        activeBgColor := bgColor
+        "
+    ].
+
+    lampColor := DefaultLampColor.
+    mm := styleSheet at:#'toggle.lampWidthMM' default:1.5.
+    lampWidth := (self graphicsDevice horizontalPixelPerMillimeter * mm) rounded.
+    mm := styleSheet at:#'toggle.lampHeightMM' default:3.0.
+    lampHeight := (self graphicsDevice verticalPixelPerMillimeter * mm) rounded.
+
+    onLevel := styleSheet at:#'toggle.activeLevel' default:onLevel.
+    offLevel := styleSheet at:#'toggle.passiveLevel' default:offLevel.
+
+    fg := styleSheet colorAt:#'toggle.activeForegroundColor'.
+    fg notNil ifTrue:[
+        activeFgColor := fg.
+    ].
+    bg := styleSheet colorAt:#'toggle.activeBackgroundColor'.
+    bg notNil ifTrue:[
+        activeBgColor := bg.
+    ].
+
+    fg := styleSheet colorAt:#'toggle.foregroundColor'.
+    fg notNil ifTrue:[
+        self foregroundColor:fg.
+    ].
+
+    bg := styleSheet colorAt:#'toggle.backgroundColor'.
+    bg notNil ifTrue:[
+        self backgroundColor:bg.
+        shadowColor := (bg averageColorIn:(0@0 corner:7@7)) darkened onDevice:self graphicsDevice.
+        lightColor := (bg averageColorIn:(0@0 corner:7@7)) lightened onDevice:self graphicsDevice.
+    ].
+
+    "Modified: / 3.11.1997 / 02:22:02 / cg"
+! !
+
+!Toggle methodsFor:'private'!
+
+computeLabelOrigin
+    "compute the origin of the form/text.
+     redefined to move label to the right if there is a lamp."
+
+    super computeLabelOrigin.
+    showLamp ifTrue:[
+        labelOriginX := labelOriginX + hSpace + (self lampImageWidth) + hSpace.
+    ]
+
+    "Modified: / 3.11.1997 / 14:27:03 / cg"
+!
+
+getValueFromModel
+    "fetch my boolean value from the model (if there is a model around)
+     by sending it the aspectMessage, and update my look as required" 
+
+    |val|
+
+    (model notNil and:[aspectMsg notNil]) ifTrue:[
+        aspectMsg == #value ifTrue:[
+            val := model value   "/ faster call
+        ] ifFalse:[
+            val := model perform:aspectMsg withOptionalArgument:self.
+        ].
+        (val ? false) ifTrue:[  "allowing nil - treat as false"
+            self turnOn
+        ] ifFalse:[
+            self turnOff
+        ].
+    ].
+
+    "Created: / 14.11.1995 / 21:08:43 / cg"
+    "Modified: / 1.3.2000 / 15:14:49 / cg"
+!
+
+lampImageHeight
+    ^ lampHeight
+
+    "Created: / 3.11.1997 / 14:24:47 / cg"
+!
+
+lampImageWidth
+    ^ lampWidth
+
+    "Created: / 3.11.1997 / 14:25:35 / cg"
+!
+
+rawLabelSizeOf:aLogo
+    "compute the extent needed to hold the label plus the lamp"
+
+    |ext|
+
+    ext := super rawLabelSizeOf:aLogo.
+    showLamp ifTrue:[
+        ^ (ext x + hSpace + (self lampImageWidth) + hSpace)
+          @
+          (ext y max: self lampImageHeight)
+    ].
+    ^ ext
+
+    "Modified: / 3.11.1997 / 14:26:54 / cg"
+! !
+
+!Toggle methodsFor:'redrawing'!
+
+drawToggleImage
+    "drawing of the lamp is done here."
+
+    |x y clr l2|
+
+    showLamp ifTrue:[
+        x := hSpace + margin.
+        y := (height - self lampImageHeight) // 2.
+        self 
+            drawEdgesForX:x y:y 
+            width:(self lampImageWidth) 
+            height:(self lampImageHeight)
+            level:-1.
+        controller pressed ifTrue:[
+            clr := lampColor.
+        ] ifFalse:[
+            clr := bgColor.
+        ].
+        self paint:clr.
+        l2 := LampInset*2.
+        self 
+            fillRectangleX:x+LampInset y:y+LampInset 
+            width:(self lampImageWidth) - l2 
+            height:(self lampImageHeight) - l2
+    ]
+
+    "Created: / 3.11.1997 / 12:12:07 / cg"
+    "Modified: / 3.11.1997 / 14:26:33 / cg"
+!
+
+drawWith:fg and:bg
+    "redraw myself with fg/bg. Use super to draw the label, 
+     drawing of the lamp is done here."
+
+    shown ifFalse:[^ self].
+    super drawWith:fg and:bg.   "this draws the text"
+
+    self drawToggleImage.
+
+    "Modified: / 3.11.1997 / 13:19:32 / cg"
+! !
+
+!Toggle class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.57 2014-02-18 16:59:47 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/Toggle.st,v 1.57 2014-02-18 16:59:47 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ToggleController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,115 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+ButtonController subclass:#ToggleController
+	instanceVariableNames:'action'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Controllers'
+!
+
+!ToggleController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    ToggleControllers redefine some of ButtonControllers behavior;
+    user interaction: they always triggerOnDown, and ignore buttonrelease.
+    Finally, every buttonPress leads to a toggle action.
+
+    ToggleController adds another actionBlock, since it inherits press-
+    and releaseActions, while we want one actionBlock to be used for both
+    on- and off. The actionBlock (if any) is evaluated with the current
+    toggles state if it expects an argument, or without argument if its a no-arg
+    block.
+
+    Other than that, all model relations are inherited - i.e. if the view has a model,
+    that one gets change-messages and the toggle updates on aspect changes.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!ToggleController methodsFor:'accessing'!
+
+action:aBlock
+    "set the action to be performed. This is called
+     with the toggles state as argument."
+
+    action := aBlock
+! !
+
+!ToggleController methodsFor:'events'!
+
+keyPress:key x:x y:y
+    "toggle on space"
+
+    <resource: #keyboard (#Space)>
+
+    (key == Character space) ifTrue:[
+        enableChannel value ifTrue:[
+            self toggle.
+            ^ self
+        ].
+    ].
+    super keyPress:key x:x y:y
+!
+
+performAction
+    "the toggle changed its state; first tell the model and
+     channels, then evaluate any (optional) press/release actions,
+     finally evaluate my real action, the toggle action.
+     Individual press/release actions are usually nil for toggles."
+
+    super performAction.
+
+    action notNil ifTrue:[
+        active := true.
+        action valueWithOptionalArgument:pressed.
+        active := false.
+    ].
+
+    "Modified: 24.1.1997 / 15:42:14 / cg"
+! !
+
+!ToggleController methodsFor:'initialization'!
+
+initialize
+    super initialize.
+    self beToggle
+! !
+
+!ToggleController class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/ToggleController.st,v 1.15 2013-02-27 11:23:05 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/ToggleController.st,v 1.15 2013-02-27 11:23:05 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VariableHorizontalPanel.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,215 @@
+"
+ COPYRIGHT (c) 1992 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+VariablePanel subclass:#VariableHorizontalPanel
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!VariableHorizontalPanel class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1992 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    This class is only here for backward compatibility;
+    all functionality is now in VariablePanel. Its orientation can now
+    be changed dynamically.
+
+    A View to separate its subviews horizontally by a movable bar
+    to adjust the size-ratios.
+    The bar-handle is either an exposed knob (knobStyle == #motif)
+    or the forms defined in Scroller (knobStyle ~~ #motif)
+    or nothing.
+
+    The subvies dimensions MUST be given as relative sizes;
+    typically creation is done as:
+
+        p := VariableHorizontalPanel in:superView.
+        v1 := <someViewClass> origin:0.0 @ 0.0
+                              corner:0.5 @ 1.0
+                                  in:p.
+        v2 := <someViewClass> origin:0.5 @ 0.0
+                              corner:0.8 @ 1.0
+                                  in:p.
+        v3 := <someViewClass> origin:0.8 @ 0.0
+                              corner:1.0 @ 1.0
+                                  in:p.
+
+    See examples.
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples
+"
+   VariableHorizontalPanel is simply setting its orientation
+   to #horizontal. See more examples there.
+
+   dummy example: 2 views side-by-side
+                                                                        [exBegin]
+        |top p v1 v2|
+
+        top := StandardSystemView new.
+        top extent:300@200.
+
+        p := VariableHorizontalPanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        v1 := View 
+                 origin:0.0 @ 0.0
+                 corner:0.5 @ 1.0
+                 in:p.
+        v1 viewBackground:Color red.
+
+        v2 := View 
+                 origin:0.5 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:p.
+        v2 viewBackground:Color green.
+
+        top open
+                                                                        [exEnd]
+
+
+   concrete example: a selectionInListView and a TextView side-by-side
+   (not useful - need scrollBars; see next example)
+                                                                        [exBegin]
+        |top p v1 v2|
+
+        top := StandardSystemView new.
+        top extent:400@300.
+
+        p := VariableHorizontalPanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        v1 := SelectionInListView 
+                 origin:0.0 @ 0.0
+                 corner:0.5 @ 1.0
+                 in:p.
+        v1 list:('/etc' asFilename directoryContents).
+        v1 useIndex:false.
+        v1 action:[:name | v2 contents:('/etc/' , name) 
+                                asFilename contentsOfEntireFile
+                  ].
+
+        v2 := TextView 
+                 origin:0.5 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:p.
+
+        top open
+                                                                        [exEnd]
+
+
+    better - with scrollBars (but thats another story ... see ScrollableView examples for more):
+                                                                        [exBegin]
+        |top p v1 v2|
+
+        top := StandardSystemView new.
+        top extent:400@300.
+
+        p := VariableHorizontalPanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        v1 := ScrollableView for:SelectionInListView 
+                 origin:0.0 @ 0.0
+                 corner:0.5 @ 1.0
+                 in:p.
+        v1 list:('/etc' asFilename directoryContents).
+        v1 useIndex:false.
+        v1 action:[:name | v2 contents:('/etc/' , name) 
+                                asFilename contentsOfEntireFile
+                  ].
+
+        v2 := ScrollableView for:TextView 
+                 origin:0.5 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:p.
+
+        top open
+                                                                        [exEnd]
+
+
+   another stupid example: 3-views side-by-side
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:550@200.
+
+        p := VariableHorizontalPanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        v1 := SelectionInListView 
+                 origin:0.0 @ 0.0
+                 corner:0.3 @ 1.0
+                 in:p.
+        v1 level:-1.
+        v1 list:#('one' 'two' 'three' nil 'dont expect' 'something' 'to happen here').
+
+        v2 := EditTextView 
+                 origin:0.3 @ 0.0
+                 corner:0.6 @ 1.0
+                 in:p.
+        v2 contents:'nonScrollable\EditTextView' withCRs.
+
+        v3 := ScrollableView 
+                 for:TextView 
+                 origin:0.6 @ 0.0 
+                 corner:1.0 @ 1.0
+                 in:p.
+        v3 contents:'scrollable\TextView\\(read only)\\\\\\\\\\\\\\\\\concratulations !!\you managed\to scroll down' withCRs.
+        top open
+                                                                        [exEnd]
+"
+! !
+
+!VariableHorizontalPanel methodsFor:'initialization'!
+
+initialize
+    orientation := #horizontal.
+    super initialize.
+
+    "Modified: 7.3.1996 / 14:08:35 / cg"
+! !
+
+!VariableHorizontalPanel class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VariableHorizontalPanel.st,v 1.24 2011-09-29 11:20:08 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VariableHorizontalPanelController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,59 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+VariablePanelController subclass:#VariableHorizontalPanelController
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Controllers'
+!
+
+!VariableHorizontalPanelController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    This is a leftover class - its no longer needed, but left for backward compatibility.
+    All functionality is in the VariablePanelController class.
+
+    Normally, not used directly by applications, these are created automatically
+    whenever a variableVerticalPanel is created.
+    Actually, these are simply panelControllers which initialize themself for
+    horizontal orientation.
+
+    [see also:]
+        VariableHorizontalPanel
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!VariableHorizontalPanelController class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VariableHorizontalPanelController.st,v 1.10 2011-09-29 11:20:02 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VariablePanel.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,2608 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+SimpleView subclass:#VariablePanel
+	instanceVariableNames:'barHeight barWidth barLevel separatingLine shadowForm lightForm
+		showHandle showHandleWhenEntered handlePosition handleColor
+		handleStyle handleLevel noColor trackLine redrawLocked
+		orientation handleLabels knobHeight realRelativeSizes
+		snapAdornment'
+	classVariableNames:'DefaultShowHandle DefaultHandleStyle DefaultHandlePosition
+		DefaultTrackingLine DefaultSeparatingLine DefaultHandleColor
+		DefaultHandleLevel DefaultVCursor DefaultHCursor
+		DefaultHandleImage DefaultSnapIcons DefaultSnapHandlePosition
+		DefaultShowHandleWhenEntered'
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+Object subclass:#SnapAdornment
+	instanceVariableNames:'level mode selectedLevel enterLevel selectedBgColor enterBgColor
+		iconLeftRight iconUpDown iconLeft iconRight iconUp iconDown width
+		height'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:VariablePanel
+!
+
+!VariablePanel class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a View to separate its subviews vertically by a movable bar;
+    the size-ratios of the subviews can be changed by moving this bar.
+
+    In order to correctly setup this kind of view, the subviews must
+    be created with a relative origin & relative corner.
+    The panel does not verify the relative subview bounds; 
+    therefore, it is your responsibility to set those relative sizes to fit
+    according the orientation (see bad example below).
+
+    The bar-handle is either an exposed knob (style == #motif)
+    or the form defined in Scroller (style ~~ #motif)
+    or nothing.
+
+    Typically creation is done as:
+
+        p := VariablePanel in:superView.
+        p orientation:#vertical.
+
+        v1 := <someViewClass> origin:0.0 @ 0.0
+                              corner:1.0 @ 0.5
+                                  in:p.
+        v2 := <someViewClass> origin:0.0 @ 0.5 
+                              corner:1.0 @ 0.8 
+                                  in:p.
+        v3 := <someViewClass> origin:0.0 @ 0.8 
+                              corner:1.0 @ 1.0
+                                  in:p.
+
+    The two subclasses VariableHorizontalPanel and VariableVerticalPanel
+    preset the orientation. They are a kept for backward compatibility
+    (in previous versions, there used to be no common VariablePanel (super-) class).
+
+    Notice: if it is required to insert a fixed-size view in the panel,
+    use an extra view & insets, and place the subview into that extra view.
+    See examples.
+
+    [instance Variables:]
+
+        barHeight               <Integer>       the height of the bar (for verticalPanels)
+        barWidth                <Integer>       the width of the bar  (for horizontalPanels)
+
+        separatingLine          <Boolean>       show a separating line (as in motif style)
+
+        shadowForm              <Image/Form>    form (shadow part) drawn as handle - if nonNil
+
+        lightForm               <Image/Form>    form (light part) drawn as handle - if nonNil
+
+        showHandle              <Boolean>       if false, no handle is drawn
+
+        handlePosition          <Symbol>        where is the handle - one of #left, #center, #right
+
+        handleColor             <Color>         inside color of handle - defaults to viewBackground
+
+        handleStyle             <Symbol>        type of handle; one of #next, #motif or nil
+
+        handleLevel             <Integer>       3D level of handle (only valid if no form is given)
+
+        trackLine               <Boolean>       if true, an inverted line is drawn for tracking;
+                                                otherwise, the whole bar is inverted.
+
+        redrawLocked                            internal - locks redraws while tracking
+
+        orientation             <Symbol>        one of #horizontal / #vertical
+
+
+    [styleSheet values:]
+        variablePanel.showHandle        true/false - should a handle be shown (default:true)
+
+        variablePanel.handleStyle       #next / #motif / #iris / #full / nil (special handles)
+
+        variablePanel.handlePosition    #left / #center / #right (default:#right)
+
+        variablePanel.handleLevel       3D level of heandle (default:2)
+
+        variablePanel.trackingLine      when moved, track an inverted line (as in motif)
+                                        as opposed to tracking the whole bar (default:false)
+                                        (obsoleted by trackingStyle)
+
+        variablePanel.trackingStyle     #solidRectangle / #solidLine / #dashedLine
+                                        detailed control over how to draw tracking
+                                        (obsoletes trackingLine above)
+
+        variablePanel.separatingLine    draw a separating line in the bar as in motif (default:false)
+
+        variablePanel.handleColor       color of the handle. (default:Black)
+
+        variablePanel.handleEnteredColor 
+                                        color of the handle when the pointer is in the bar (default:nil)
+
+    [see also:]
+        PanelView
+        
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples
+"
+   example (notice that the subviews MUST have relative bounds):
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/2) in:p.
+        v2 := View origin:0.0@(1/2) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+
+   change the handles level:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+        p handleLevel:-1.
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/3) in:p.
+        v2 := View origin:0.0@(1/3) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+
+   change the handles style to nil makes it invisible:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+        p handleStyle:nil.
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/3) in:p.
+        v2 := View origin:0.0@(1/3) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+
+   define your own handle (-bitmap):
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+        p handleImage:(Image fromFile:'bitmaps/ScrollLt.8.xbm').
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/3) in:p.
+        v2 := View origin:0.0@(1/3) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+
+   another handle-bitmap:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+        p handleImage:(Form width:9
+                            height:11
+                            fromArray:#(
+                                        2r00000000 2r00000000
+                                        2r00001000 2r00000000
+                                        2r00011100 2r00000000
+                                        2r00111110 2r00000000
+                                        2r01111111 2r00000000
+                                        2r00000000 2r00000000
+                                        2r01111111 2r00000000
+                                        2r00111110 2r00000000
+                                        2r00011100 2r00000000
+                                        2r00001000 2r00000000
+                                        2r00000000 2r00000000
+                                       )
+                      ).
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/3) in:p.
+        v2 := View origin:0.0@(1/3) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+    placing scrolled and unscrolled views into a variablePanel:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+
+        v1 := ScrollableView for:SelectionInListView in:p.
+        v1 origin:0.0 @ 0.0 corner:1.0 @ 0.5.
+        v1 list:(FileDirectory directoryNamed:'/etc') contents.
+        v1 action:[:selNr |
+                |fullName stream text|
+                fullName := '/etc/' , v1 selectionValue.
+                stream := fullName asFilename readStream.
+                stream notNil ifTrue:[
+                    text := stream contents.
+                    v2 contents:text.
+                    v3 contents:text
+                ]
+        ].
+
+        v2 := TextView origin:0.0 @ 0.5 corner:1.0 @ 0.8 in:p.
+
+        v3 := ScrollableView for:TextView in:p.
+        v3 origin:0.0 @ 0.8 corner:1.0 @ 1.0.
+        top open
+                                                                        [exEnd]
+
+
+    dynamically adding/removing views:
+                                                                        [exBegin]
+        |top p v1 v2 b|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        b := Toggle label:'show' in:top.
+        b showLamp:false.
+        b origin:0.0 @ 0.0 corner:(1.0 @ 40).
+        b action:[:state |
+                state ifTrue:[
+                    b label:'hide'.
+                    v1 origin:0.0 @ 0.0 corner:1.0 @ 0.5.
+                    v2 := ScrollableView for:EditTextView.
+                    v2 origin:0.0 @ 0.5 corner:1.0 @ 1.0.
+                    v2 contents:'another text'.
+                    p addSubView:v2.
+                    v2 realize.
+                ] ifFalse:[
+                    b label:'show'.
+                    v2 destroy.
+                    v1 origin:0.0 @ 0.0 corner:1.0 @ 1.0
+                ]
+            ].
+
+        p := VariablePanel
+                origin:0.0 @ 0.0
+                corner:1.0 @ 1.0
+                in:top.
+        p orientation:#vertical.
+        p topInset:50.
+
+        v1 := ScrollableView for:EditTextView in:p.
+        v1 origin:0.0 @ 0.0 corner:1.0 @ 1.0.
+        v1 contents:'some text'.
+
+        top open
+                                                                        [exEnd]
+
+
+    dynamically flipping orientation:
+    Notice: you have to change the relative bounds of the subviews first.
+                                                                        [exBegin]
+        |top p v1 v2 b|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        b := Toggle label:'flip' in:top.
+        b showLamp:false.
+        b origin:0.0 @ 0.0 corner:(1.0 @ 40).
+        b action:[:state |
+                state ifTrue:[
+                    v1 origin:0.0 @ 0.0 corner:0.5 @ 1.0.
+                    v2 origin:0.5 @ 0.0 corner:1.0 @ 1.0.
+                    p orientation:#horizontal.
+                ] ifFalse:[
+                    v1 origin:0.0 @ 0.0 corner:1.0 @ 0.5.
+                    v2 origin:0.0 @ 0.5 corner:1.0 @ 1.0.
+                    p orientation:#vertical.
+                ].
+            ].
+
+        p := VariablePanel
+                origin:0.0 @ 0.0
+                corner:1.0 @ 1.0
+                in:top.
+        p orientation:#vertical.
+        p topInset:50.
+
+        v1 := ScrollableView for:EditTextView in:p.
+        v1 origin:0.0 @ 0.0 corner:1.0 @ 0.5.
+        v1 contents:'some text'.
+
+        v2 := ScrollableView for:EditTextView in:p.
+        v2 origin:0.0 @ 0.5 corner:1.0 @ 1.0.
+        v2 contents:'another text'.
+
+        top open
+                                                                        [exEnd]
+
+
+   combining fix-size with variable size:
+   (need 3 extra frame-views to place the extra labels into)
+                                                                        [exBegin]
+        |top p v1 l1 v2 l2 v3 l3 f1 f2 f3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        p orientation:#vertical.
+
+        f1 := View origin:0.0@0.0 corner:1.0@0.3 in:p.
+        f2 := View origin:0.0@0.3 corner:1.0@0.6 in:p.
+        f3 := View origin:0.0@0.6 corner:1.0@1.0 in:p.
+
+        v1 := View origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:f1.
+        v2 := View origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:f2.
+        v3 := View origin:0.0 @ 0.0 corner:1.0 @ 1.0 in:f3.
+
+        l1 := Label label:'sub1' in:f1.
+        l2 := Label label:'sub2' in:f2.
+        l3 := Label label:'sub3' in:f3.
+
+        l1 origin:0.0 @ 0.0 corner:1.0 @ 0.0 ; 
+           bottomInset:(l1 preferredExtent y negated).
+        l2 origin:0.0 @ 0.0 corner:1.0 @ 0.0 ; 
+           bottomInset:(l2 preferredExtent y negated).
+        l3 origin:0.0 @ 0.0 corner:1.0 @ 0.0 ; 
+           bottomInset:(l3 preferredExtent y negated).
+
+        v1 topInset:(l1 preferredExtent y); level:-1.
+        v2 topInset:(l2 preferredExtent y); level:-1.
+        v3 topInset:(l3 preferredExtent y); level:-1.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+   VerticalPansels allow a label to be associated with the
+   handles; this looks much like the above, but is slightly
+   more compact. Notice, no label can be placed above the first 
+   view - it has no handle.
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        p orientation:#vertical.
+        p handleLabels:#('ignored' 'sub2' 'sub3').
+
+        v1 := View origin:0.0@0.0 corner:1.0@0.3 in:p.
+        v2 := View origin:0.0@0.3 corner:1.0@0.6 in:p.
+        v3 := View origin:0.0@0.6 corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+   handle labels can be more than strings ....
+   (however, they should have about the same height, since
+    the largest defines heights of all bars;
+    retry the example below with a larger bitmap image ...)
+                                                                        [exBegin]
+        |top e p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        p orientation:#vertical.
+        e := Array with:#bold
+                   with:#color->Color red.
+
+        p handleLabels:(Array with:nil
+                              with:('bold and red' asText emphasizeAllWith:e)
+                              with:(Image fromFile:'ScrollRt.xbm')).
+
+        v1 := View origin:0.0@0.0 corner:1.0@0.3 in:p.
+        v2 := View origin:0.0@0.3 corner:1.0@0.6 in:p.
+        v3 := View origin:0.0@0.6 corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+
+   BAD EXAMPLE (wrong relative sizes - repaired on handle move):
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+
+        v1 := View origin:0.0 @ 0.0   corner:1.0 @ (1/4) in:p.
+        v2 := View origin:0.0 @ (1/2) corner:1.0 @ (3/4) in:p.
+        v3 := View origin:0.0 @ (3/4) corner:1.0 @ 1.0   in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+   example with snapMode:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+        p snapMode:#min.
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/2) in:p.
+        v2 := View origin:0.0@(1/2) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+   example with redefined handle-image:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariablePanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p orientation:#vertical.
+        p handleImage:(ToolbarIconLibrary barResizeVerticalIcon).
+        p showHandle:true.
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/2) in:p.
+        v2 := View origin:0.0@(1/2) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+"
+! !
+
+!VariablePanel class methodsFor:'defaults'!
+
+cursorForOrientation:orientation
+    "return an appropriate cursor"
+
+    ^ self cursorForOrientation:orientation onDevice:Screen current.
+
+    "Modified: / 30.9.1998 / 18:21:10 / cg"
+!
+
+cursorForOrientation:orientation onDevice:device
+    "return an appropriate cursor"
+
+    |cursor|
+
+    orientation == #vertical ifTrue:[
+        (DefaultVCursor notNil and:[device == Display]) ifTrue:[
+            cursor := DefaultVCursor
+        ] ifFalse:[
+            device isWindowsPlatform ifFalse:[
+                cursor := Cursor 
+                            sourceForm:(Smalltalk imageFromFileNamed:'VVPanel.xbm' forClass:self)
+                            maskForm:(Smalltalk imageFromFileNamed:'VVPanel_m.xbm' forClass:self)
+                            hotX:8
+                            hotY:8.
+            ].
+
+            "
+             if bitmaps are not available or under Win95, 
+             use a standard cursor
+            "
+            cursor isNil ifTrue:[
+                "which one looks better ?"
+                cursor := Cursor upDownArrow
+                "cursor := Cursor upLimitArrow"
+            ].
+            device == Display ifTrue:[
+                DefaultVCursor := cursor.
+            ].
+        ]
+    ] ifFalse:[
+        (DefaultHCursor notNil and:[device == Display]) ifTrue:[      
+            cursor := DefaultHCursor
+        ] ifFalse:[
+            device isWindowsPlatform ifFalse:[
+                cursor := Cursor 
+                            sourceForm:(Smalltalk imageFromFileNamed:'VHPanel.xbm' forClass:self)
+                            maskForm:(Smalltalk imageFromFileNamed:'VHPanel_m.xbm' forClass:self)
+                            hotX:8
+                            hotY:8.
+            ].
+            "
+             if bitmaps are not available or under Win95, 
+             use a standard cursor
+            "
+            cursor isNil ifTrue:[
+                "which one looks better ?"
+                cursor := Cursor leftRightArrow
+                "cursor := Cursor leftLimitArrow"
+            ].
+            device == Display ifTrue:[
+                DefaultHCursor := cursor
+            ].
+        ]
+    ].
+
+    ^ cursor
+
+    "
+     DefaultVCursor := DefaultHCursor := nil.
+    "
+
+    "Created: / 30.9.1998 / 18:20:41 / cg"
+    "Modified: / 30.9.1998 / 18:23:07 / cg"
+!
+
+lightFormOn:aDisplay
+    "use same handle as Scroller"
+
+    ^ Scroller handleLightFormOn:aDisplay
+!
+
+shadowFormOn:aDisplay
+    "use same handle as Scroller"
+
+    ^ Scroller handleShadowFormOn:aDisplay
+!
+
+snapIcons
+    "return a dictionary of snapIcons"
+
+    DefaultSnapIcons isNil ifTrue:[
+        DefaultSnapIcons := IdentityDictionary new.
+
+        DefaultSnapIcons at:#iconUp    put:self snapIconUp.
+        DefaultSnapIcons at:#iconRight put:self snapIconRight.
+        DefaultSnapIcons at:#iconDown  put:self snapIconDown.
+        DefaultSnapIcons at:#iconLeft  put:self snapIconLeft.
+
+        DefaultSnapIcons at:#iconUpDown    put:self snapIconUpDown.
+        DefaultSnapIcons at:#iconLeftRight put:self snapIconLeftRight.
+    ].
+    ^ DefaultSnapIcons
+
+    "
+        DefaultSnapIcons := nil.
+        self snapIcons
+    "
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'variablePanel.showHandle' 
+                       #'variablePanel.handleStyle'
+                       #'variablePanel.handleImage'
+                       #'variablePanel.handlePosition' 
+                       #'variablePanel.handleLevel'
+                       #'variablePanel.snapHandlePosition' 
+                       #'variablePanel.trackingLine'   
+                       #'variablePanel.trackingStyle'
+                       #'variablePanel.separatingLine' 
+                       #'variablePanel.handleColor')>
+
+    |lineModeBoolean|
+
+    DefaultVCursor := DefaultHCursor := nil.
+
+    DefaultShowHandle := StyleSheet at:#'variablePanel.showHandle' default:true.
+    DefaultShowHandleWhenEntered := StyleSheet at:#'variablePanel.showHandleWhenEntered' default:false.
+    DefaultHandleStyle := StyleSheet at:#'variablePanel.handleStyle'.
+    DefaultHandlePosition := StyleSheet at:#'variablePanel.handlePosition' "default:#right".
+    DefaultHandlePosition isNil ifTrue:[
+        DefaultHandlePosition := ScrollableView defaultScrollBarPosition.
+    ].
+    DefaultSnapHandlePosition := StyleSheet at:#'variablePanel.snapHandlePosition' default:DefaultHandlePosition.
+    DefaultHandleLevel := StyleSheet at:#'variablePanel.handleLevel' default:2.
+    DefaultTrackingLine := StyleSheet at:#'variablePanel.trackingStyle'.
+    DefaultTrackingLine isNil ifTrue:[
+        lineModeBoolean := StyleSheet at:#'variablePanel.trackingLine' default:false.
+        lineModeBoolean ifTrue:[
+            DefaultTrackingLine := #solidLine
+        ] ifFalse:[
+            DefaultTrackingLine := #solidRectangle
+        ]
+    ].
+
+    DefaultSeparatingLine := StyleSheet at:#'variablePanel.separatingLine' default:false.
+    DefaultHandleColor := StyleSheet colorAt:#'variablePanel.handleColor' default:Color black.
+
+    DefaultHandleImage := StyleSheet at:#'variablePanel.handleImage'
+
+    "
+     VariablePanel updateStyleCache
+    "
+
+    "Modified: / 19-12-2010 / 09:39:50 / cg"
+! !
+
+!VariablePanel class methodsFor:'image specs'!
+
+snapIconDown
+    "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 snapIconDown inspect
+     ImageEditor openOnClass:self andSelector:#snapIconDown
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:#'VariablePanel class snapIconDown'
+        ifAbsentPut:[(Depth2Image new) width: 62; height: 5; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@B(J *F(Z!!*F(Z!!*@@@@@@@!!BDHQ!!FDXQ!!FDXP@@H@@@EPUATEPUATEPUAT@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 62; height: 5; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@A?LX1#FLX3>C8)R%JT)R''0GA#FLX1#FN@H@@@@@@@@P@@a') ; yourself); yourself]
+!
+
+snapIconLeft
+    "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 snapIconLeft inspect
+     ImageEditor openOnClass:self andSelector:#snapIconLeft
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:#'VariablePanel class snapIconLeft'
+        ifAbsentPut:[(Depth2Image new) width: 5; height: 62; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@C @B@@@@@@@@@@@@@@@@@@P@C@)@BD@IP@@@@@BJP@!!@BT@@@@@@B$HHP %@@@@AP@)@BD@IP@@D@T0JP@!!@BT@@@@ED2$@HP@%@@@@AP@)ARDHIP@@@@T@
+JP@!!@BT@@A@ELB @HP@E@@@@@C\@@@@@@@@@@@@@@@T@B@@a') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 5; height: 62; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A@0\OA0LA@D@6UPL@@@XE@0@@A TC@@@FAPL@@@XE@0@@A UCLD@FAPL@@@XE@0@@A TC@@DCA0=''T0D@@b') ; yourself); yourself]
+!
+
+snapIconLeftRight
+    "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 snapIconLeftRight inspect
+     ImageEditor openOnClass:self andSelector:#snapIconLeftRight
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:#'VariablePanel class snapIconLeftRight'
+        ifAbsentPut:[(Depth2Image new) width: 5; height: 62; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@K@AH@@@@@@AX@L@@@@@@(@BD@AQD@B@@FJ#@!!@AT@@@@@@J*@@@@@DP@H@AD*LBD@EP@@@@@@J"\!!B1T@@@@@E"(0HP@U@@@@@@B*$P@H@@X@L@@@
+J @!!@AT@@@@@@B(RHP UDP@0@@@@@@@@@@@@I0@K@@@@@@@a') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 5; height: 62; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' LC <NK@ @@A@&QPLP@@XE@0@@C<A? A@VAPL@@@XE@0@@A TCL@@O @>@@BXE@0@PY$TCD@@A@0\OA0LAXb') ; yourself); yourself]
+!
+
+snapIconRight
+    "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 snapIconRight inspect
+     ImageEditor openOnClass:self andSelector:#snapIconRight
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:#'VariablePanel class snapIconRight'
+        ifAbsentPut:[(Depth2Image new) width: 5; height: 62; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@L@@@@@@@@@@@@@@AT@B@@@J@@!!@@T@E@@@@B(QHS@U@AP@@@@*@BD@EP@T@@@@J L!!@AT@E@@@DB(0HP@U@AP@@@@*J"D@EP@T@@@@J @!!B!!TH@@@@@B(@
+HP@U@@@@@A@*LBD@EP@@@@@@@@X@@@@@@@@@@@@@@@ @B@@a') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 5; height: 62; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@4A \G%2X4@AXE@0@@A TC@E@6AQL@@@XE@0@@A TC@@@6APL@@@XEL0@@A UC\@@VAPL@@@PFA0^''M PP@b') ; yourself); yourself]
+!
+
+snapIconUp
+    "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 snapIconUp inspect
+     ImageEditor openOnClass:self andSelector:#snapIconUp
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:#'VariablePanel class snapIconUp'
+        ifAbsentPut:[(Depth2Image new) width: 62; height: 5; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@J *B(J *B(J (B @@@@@@BEHT!!REHT!!RDHP!!@@@@@@@EPUATEPUATE@TAP@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 62; height: 5; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'B@@@@@@@@D@\X1#FLX1 8C9R%JT)R%G0_3FLX1#FL? @@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+snapIconUpDown
+    "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 snapIconUpDown inspect
+     ImageEditor openOnClass:self andSelector:#snapIconUpDown
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:#'VariablePanel class snapIconUpDown'
+        ifAbsentPut:[(Depth2Image new) width: 62; height: 5; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@H@@@@@@ @@@@@@@@@B J@BB J@(@HJ@(@@@@@@@!!BDD !!BDHPBBDHP@@@@@@APE@HAPE@T@ E@T@@@@@@@@@@B@@@@@@H@@@@@@@b') ; colorMapFromArray:#[0 0 0 68 68 68 255 255 255]; mask:((Depth1Image new) width: 62; height: 5; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@J@@B @@@PLX)#FJX1?C )R%JT)R#8_A#JLX2#FGC>@@(@@J@@H@@a') ; yourself); yourself]
+! !
+
+!VariablePanel methodsFor:'accessing-look'!
+
+barHeight
+    "return the height of the separating bar"
+
+    ^ barHeight
+!
+
+barHeight:nPixel
+    "set the height of the separating bar"
+
+    |bH|
+
+    bH := nPixel.
+
+    "make certain bar is visible and catchable"
+    (bH < 4) ifTrue:[
+        bH := 4
+    ].
+
+    "make it even, so spacing is equally spreadable among subviews"
+    bH odd ifTrue:[
+        bH := bH + 1
+    ].
+    self setBarHeight:bH
+
+    "Modified: / 28.4.1997 / 14:30:33 / dq"
+    "Modified: / 30.1.2000 / 22:31:32 / cg"
+!
+
+barLevel:level
+    "set the 3D level of the separating bar"
+
+    barLevel ~~ level ifTrue:[
+        barLevel := level.
+        self redrawIfShown.    
+    ]
+!
+
+handleImage:aBitmapOrImage
+    "define the handles image"
+
+    shadowForm := aBitmapOrImage.
+    lightForm := nil.
+    self computeBarHeight.
+
+    "Created: 7.11.1996 / 20:21:10 / cg"
+    "Modified: 7.11.1996 / 20:27:22 / cg"
+!
+
+handleLabels:aCollectionOfLabels
+    "define special handle labels - typically a collection of
+     bitmap images. Notice, that the first handle is not
+     drawn, that is, the first element if the argument is useless."
+
+    orientation == #horizontal ifTrue:[
+        self error:'not allowed for horizontal panels'
+    ].
+
+    handleLabels := aCollectionOfLabels.
+    self computeBarHeight.
+    self resizeSubviews.
+
+    "
+     |top panel v1 v2|
+
+     top := StandardSystemView new.
+     panel := VariableVerticalPanel origin:0.0@0.0 corner:1.0@1.0 in:top.
+     panel add:(EditTextView origin:0.0@0.0 corner:1.0@0.5).
+     panel add:(EditTextView origin:0.0@0.5 corner:1.0@1.0).
+     panel handleStyle:nil.
+     panel handleLabels:#('foo' 'bar').
+     top open
+    "
+!
+
+handleLevel:aNumber
+    "define the 3D level of the handle (only with some styles).
+     Normally, this is defined via styleSheet files, but this entry allows
+     individual views to be manipulated."
+
+    handleLevel ~~ aNumber ifTrue:[
+        handleLevel := aNumber.
+        self redrawIfShown.    
+    ]
+!
+
+handlePosition
+    "return the position of the handle"
+
+    ^ handlePosition
+!
+
+handlePosition:aSymbol
+    "define the position of the handle; the argument aSymbol
+     may be one of #left, #right or #center.
+     If never set by the program, the position is controlled by the styleSheet."
+
+    handlePosition ~~ aSymbol ifTrue:[
+        handlePosition := aSymbol ? DefaultHandlePosition.
+        self redrawIfShown.    
+    ]
+!
+
+handleShadowImage:shadowImage lightImage:lightImage
+    "define the handles image; both shadow and light parts"
+
+    shadowForm := shadowImage.
+    lightForm := lightImage.
+    self computeBarHeight.
+
+    "Created: 7.11.1996 / 20:21:51 / cg"
+    "Modified: 7.11.1996 / 20:27:26 / cg"
+!
+
+handleStyle:styleSymbol
+    "define the style of the handle;
+     styleSymbol may be #motif to draw a little knob or
+     anything else to draw scrollBars handleForm.
+     Normally, this is defined via styleSheet files, but this entry allows
+     individual views to be manipulated."
+
+    (styleSymbol ~~ handleStyle) ifTrue:[
+        handleStyle := styleSymbol.
+        handleStyle == #next ifTrue:[
+            shadowForm := self class shadowFormOn:self graphicsDevice.
+            lightForm := self class lightFormOn:self graphicsDevice.
+        ] ifFalse:[
+            shadowForm := lightForm := nil
+        ].
+
+        shadowForm notNil ifTrue:[
+            (self is3D and:[handleStyle ~~ #motif]) ifTrue:[
+                self barHeight:(shadowForm height + 2).
+                barWidth := shadowForm width
+            ]
+        ].
+        shown ifTrue:[
+            self resizeSubviews.
+            self redrawIfShown.    
+        ]
+    ]
+
+    "Created: 24.2.1996 / 19:04:07 / cg"
+    "Modified: 29.5.1996 / 16:22:24 / cg"
+!
+
+orientation
+    "return my orientation; either #horizontal or #vertical"
+
+    ^ orientation
+
+    "Modified: 6.3.1996 / 18:08:45 / cg"
+!
+
+orientation:aSymbol
+    "change  my orientation; aSymbol must be one of #horizontal or #vertical.
+     Changing implies a resize of my subViews."
+
+    aSymbol ~~ orientation ifTrue:[
+        orientation := aSymbol.
+        self initCursor.
+        self anyNonRelativeSubviews ifTrue:[
+            self setupSubviews
+        ].
+        shown ifTrue:[
+            self cursor:cursor.
+            self sizeChanged:nil.
+            self redrawIfShown.
+        ]
+    ]
+
+    "Modified: 29.5.1996 / 16:22:35 / cg"
+!
+
+relativeCorners
+    "the returned collection gives the corner-fractional value for each component;
+     i.e. for a 20-40-40 look, it would be #(0.2 0.6 1.0)"
+
+    ^ self subViews 
+        collect:[:eachView | 
+                self isHorizontal ifTrue:[
+                    eachView relativeCorner x
+                ] ifFalse:[
+                    eachView relativeCorner y
+                ]
+        ]
+!
+
+relativeCorners:aCollectionOfRelativeCornerPositions
+    "the argument gives the corner-fractional value for each component;
+     i.e. for a 20-40-40 look, it would be #(0.2 0.6 1.0)"
+
+    |pos|
+
+    aCollectionOfRelativeCornerPositions size == self subViews size ifFalse:[^ self ].
+
+    pos := 0.0.
+    self subViews with:aCollectionOfRelativeCornerPositions 
+        do:[:eachView :eachCorner |
+            self isHorizontal ifTrue:[
+                eachView origin:(pos @ 0.0) corner:(eachCorner @ 1.0)
+            ] ifFalse:[
+                eachView origin:(0.0 @ pos) corner:(1.0 @ eachCorner)
+            ].
+            pos := eachCorner
+        ].
+    self realized ifTrue:[
+        self resizeSubviews
+    ].
+!
+
+setBarHeight:nPixel
+    "check whether snap matches to extent of bar otherwise disable snap"
+
+    snapAdornment notNil ifTrue:[
+        barHeight := nPixel max:(snapAdornment height ? 0)
+    ] ifFalse:[
+        barHeight := nPixel max:0
+    ].
+
+    realized ifTrue:[
+        self resizeSubviews
+    ]
+
+    "Modified: / 31-10-2010 / 13:00:06 / cg"
+!
+
+showHandle
+    "handle-drawing enabled/disable; a Boolean"
+
+    ^ showHandle
+
+    "Modified: / 19-12-2010 / 09:28:31 / cg"
+!
+
+showHandle:aBoolean
+    "enabled/disable the handle-drawing"
+
+    showHandle ~~ aBoolean ifTrue:[
+        showHandle := aBoolean ? DefaultShowHandle.
+        self invalidate. "/ redrawIfShown
+    ]
+
+    "Modified: / 19-12-2010 / 09:30:49 / cg"
+!
+
+showHandleWhenEntered
+    "return aBoolean"
+
+    ^ showHandleWhenEntered
+
+    "Created: / 19-12-2010 / 09:27:40 / cg"
+!
+
+showHandleWhenEntered:aBoolean
+    "enabled/disable the handle-drawing"
+
+    showHandleWhenEntered ~~ aBoolean ifTrue:[
+        showHandleWhenEntered := aBoolean ? DefaultShowHandleWhenEntered.
+        self invalidate. "/ redrawIfShown
+    ]
+
+    "Created: / 19-12-2010 / 09:28:04 / cg"
+!
+
+snapHandlePosition
+    "return the position of the snap-handle"
+
+    ^ self handlePosition. "/ ^ snapHandlePosition
+!
+
+snapHandlePosition:aSymbol
+    "define the position of the snap-handle; the argument aSymbol
+     may be one of #left, #right or #center.
+     If never set by the program, the position is controlled by the styleSheet."
+
+    self handlePosition:aSymbol.
+
+"/    snapHandlePosition := aSymbol.
+"/    realized ifTrue:[
+"/        self invalidate
+"/    ]
+!
+
+snapMode
+    "allowed modes are:
+        nil             no snap
+
+        #max            on press the view is increased to bottom(vertical) or right(horizontal)
+        #min            on press the view is decreased to top   (vertical) or left (horizontal)
+        #maxMin         on press the view is increased or decreased dependent on its current extent
+        #minMax         on press the view is increased or decreased dependent on its current extent
+    "
+    snapAdornment notNil ifTrue:[
+        ^ snapAdornment mode
+    ].
+    ^ nil
+
+    "Modified: / 31-10-2010 / 13:00:16 / cg"
+!
+
+snapMode:aMode
+    "allowed modes are:
+        nil             no snap
+
+        #max            on press the view is increased to bottom(vertical) or right(horizontal)
+        #min            on press the view is decreased to top   (vertical) or left (horizontal)
+        #maxMin         on press the view is increased or decreased dependent on its current extent
+        #minMax         on press the view is increased or decreased dependent on its current extent
+    "
+    |oldHeight oldMode|
+
+    aMode notNil ifTrue:[
+        ( #( max min maxMin minMax both) includes:aMode) ifFalse:[
+            ^ self error:('unknown snapMode: ', aMode printString).
+        ]
+    ].
+    (oldMode := self snapMode) == aMode ifTrue:[^ self].
+
+    (snapAdornment notNil and:[aMode notNil]) ifTrue:[
+        "must only redraw"
+        snapAdornment mode:aMode
+    ] ifFalse:[
+        "must recompute barHeight and redraw"
+
+        aMode isNil ifTrue:[
+            snapAdornment := nil
+        ] ifFalse:[
+            self initSnapAdornment.
+            snapAdornment mode:aMode.
+        ].
+        oldHeight := barHeight.
+
+        self computeBarHeight.
+
+        oldHeight ~~ barHeight ifTrue:[
+            "must recompute subViews"
+            self setupSubviews.
+            self resizeSubviews.
+        ]
+    ].
+    self redrawIfShown.
+
+    "Modified: / 31-10-2010 / 13:00:39 / cg"
+!
+
+style:styleSymbol
+    "define the style of the handle;
+     styleSymbol may be #motif to draw a little knob or
+     anything else to draw scrollBars handleForm.
+     Normally, this is defined via styleSheet files, but this entry allows
+     individual views to be manipulated."
+
+    self handleStyle:styleSymbol
+
+    "Modified: 24.2.1996 / 19:04:19 / cg"
+! !
+
+!VariablePanel methodsFor:'adding & removing components'!
+
+addSubView:aView
+    "a view is added; adjust other subviews sizes"
+
+    super addSubView:aView.
+
+    realized ifTrue:[
+        self setupSubviews.
+        self resizeSubviews.
+        aView beVisible.
+    ]
+
+    "Created: 17.1.1996 / 22:41:00 / cg"
+    "Modified: 24.2.1996 / 19:05:05 / cg"
+!
+
+removeSubView:aView
+    "a view is removed; adjust other subviews sizes"
+
+    aView beInvisible.
+    super removeSubView:aView.
+    shown ifTrue:[             
+        realized 
+        "/ (superView isNil or:[superView shown]) 
+        ifTrue:[
+            self setupSubviews.
+            self resizeSubviews.
+        ]
+    ]
+! !
+
+!VariablePanel methodsFor:'drawing'!
+
+drawHandle:hIndex atX:hx y:hy
+    "draw a single handle at hx/hy"
+
+    |h w x y m xm ym lbl maxKnob
+     mar           "{ Class: SmallInteger }"
+     barWidthInt   "{ Class: SmallInteger }"
+     barHeightInt  "{ Class: SmallInteger }" |
+
+    ((handleStyle isNil or:[handleStyle == #none])
+    and:[handleLabels isNil]) ifTrue:[^ self].
+
+    mar := margin.
+    barHeightInt := barHeight.
+    barWidthInt := barWidth.
+
+    shadowForm notNil ifTrue:[
+        h := shadowForm height.
+        w := shadowForm width .
+        maxKnob := h min:barHeightInt.
+    ] ifFalse:[
+        maxKnob := knobHeight min: barHeightInt.
+        maxKnob := maxKnob max:4.
+        handleStyle == #full ifTrue:[
+            w := h := maxKnob
+        ] ifFalse:[
+            w := h := maxKnob - 4.
+        ]
+    ].
+
+    self paint:viewBackground.
+    self lineStyle:#solid.
+
+    orientation == #vertical ifTrue:[
+        self fillRectangleX:mar y:hy 
+                      width:(width - mar - mar) 
+                     height:barHeightInt.
+        (handleStyle notNil
+        and:[handleStyle ~~ #none]) ifTrue:[
+            (handleStyle ~~ #normal 
+            and:[handleStyle ~~ #mswindows]) ifTrue:[
+                m := (maxKnob - h) // 2.
+
+                shadowForm isNil ifTrue:[
+
+                    y := hy + (barHeightInt // 2).   "/ center of the bar
+
+                    separatingLine ifTrue:[
+                        self paint:shadowColor.
+                        self displayLineFromX:mar y:y toX:(width - mar) y:y.
+                        y := y + 1.
+                        self paint:lightColor.
+                        self displayLineFromX:mar y:y toX:(width - mar) y:y.
+                        self paint:viewBackground.
+                    ].
+
+                    self fillRectangleX:(hx - barWidthInt) 
+                                      y:hy 
+                                  width:(barWidthInt + barWidthInt) 
+                                 height:h.
+
+                    handleStyle == #line ifTrue:[
+                        self paint:handleColor.
+                        self displayLineFromX:hx - barWidthInt y:y toX:hx + barWidthInt y:y
+                    ] ifFalse:[
+                        y := hy.   
+                        handleStyle == #st80 ifTrue:[
+                            y := y - 1
+                        ].
+                        ym := y + m.
+
+                        handleStyle == #full ifTrue:[
+                            handleLevel ~~ 0 ifTrue:[
+                                self 
+                                    drawEdgesForX:0 "/ -(handleLevel abs)
+                                    y:ym "/-1
+                                    width:width "/+(handleLevel+handleLevel)abs
+                                    height:h-2 
+                                    level:handleLevel
+                                    shadow:shadowColor 
+                                    light:lightColor
+                                    halfShadow:nil 
+                                    halfLight:nil 
+                                    style:nil 
+                            ]
+                        ] ifFalse:[
+                            handleLevel ~~ 0 ifTrue:[
+                                self drawEdgesForX:(hx - barWidthInt)
+                                                 y:ym
+                                             width:(barWidthInt + barWidthInt)
+                                            height:h 
+                                             level:handleLevel.
+                            ].
+
+                            handleStyle == #iris ifTrue:[
+                                self paint:handleColor.
+                                self fillDeviceRectangleX:(hx - barWidthInt + 2)
+                                                        y:(ym + 2)
+                                                    width:(barWidthInt + barWidthInt - 4)
+                                                   height:h - 4
+                            ]
+                        ]
+                    ].
+                ] ifFalse:[
+                    y := hy.
+                    (shadowForm notNil or:[lightForm notNil]) ifTrue:[
+                        self drawHandleFormAtX:hx y:(y + m)
+                    ]
+                ].
+
+                handleStyle == #st80 ifTrue:[
+                    y := hy - 1.
+                    self paint:lightColor.
+                    self displayLineFromX:mar y:y toX:(width - mar - mar - 1) y:y.
+                    self displayLineFromX:0 y:hy toX:0 y:(hy + knobHeight - 1).
+                    y := hy + knobHeight - 2.
+                    self paint:shadowColor.
+                    self displayLineFromX:mar y:y toX:(width - mar) y:y.
+                        "uncomment the -1 if you dont like the notch at the right end"
+                        "                            VVV"
+                    self displayLineFromX:width-1 y:hy" "-1" " toX:width-1 y:(hy + knobHeight - 1 - 1).
+                ].
+            ] ifFalse:[
+                y := hy + barHeightInt - 1.
+                self paint:handleColor.
+                separatingLine ifTrue:[
+                    self displayLineFromX:0 y:hy+1 toX:width y:hy+1.
+                    self displayLineFromX:0 y:y toX:width y:y.
+                ].
+                self fillRectangleX:hx y:hy width:barWidthInt height:barHeightInt.
+            ].
+        ].
+        lbl := self handleLabelAt:hIndex.
+        lbl notNil ifTrue:[
+            hIndex ~~ 1 ifTrue:[
+                self paint:Color black.
+                lbl displayOn:self x:mar y:hy + (lbl ascentOn:self)
+"/                lbl isImageOrForm ifTrue:[
+"/                    lbl displayOn:self x:mar y:hy
+"/                ] ifFalse:[
+"/                    lbl displayOn:self x:mar y:hy + font ascent + 1
+"/                ]
+            ]
+        ].
+
+    ] ifFalse:[
+        self fillRectangleX:hx y:mar 
+                      width:barHeightInt
+                     height:(height - mar - mar).
+
+        (handleStyle notNil
+        and:[handleStyle ~~ #none]) ifTrue:[
+            (handleStyle ~~ #normal
+            and:[handleStyle ~~ #mswindows]) ifTrue:[
+                 m := (barHeightInt - w) // 2.
+                m := (maxKnob - w) // 2.
+                 shadowForm isNil ifTrue:[
+                    x := hx + (barHeightInt // 2).
+                    separatingLine ifTrue:[
+                        self paint:shadowColor.
+                        self displayLineFromX:x y:mar toX:x y:(height - mar).
+                        x := x + 1.
+                        self paint:lightColor.
+                        self displayLineFromX:x y:mar toX:x y:(height - mar).
+                        self paint:viewBackground.
+                    ].
+                    self fillRectangleX:hx y:(hy - barWidthInt) 
+                                  width:w 
+                                 height:(barWidthInt + barWidthInt).
+
+                    handleStyle == #line ifTrue:[
+                        self paint:handleColor.
+                        self displayLineFromX:x y:hy - barWidthInt toX:x y:hy + barWidthInt.
+                    ] ifFalse:[
+                        x := hx.
+                        handleStyle == #st80 ifTrue:[
+                            x := x - 1.
+                        ].
+                        xm := x + m.
+                        handleStyle == #full ifTrue:[
+                            handleLevel ~~ 0 ifTrue:[
+                                self 
+                                    drawEdgesForX:xm "/-1
+                                    y:0 "/ -handleLevel
+                                    width:w-2
+                                    height:height "/ +handleLevel+handleLevel 
+                                    level:handleLevel
+                                    shadow:shadowColor 
+                                    light:lightColor
+                                    halfShadow:nil 
+                                    halfLight:nil 
+                                    style:nil
+                            ]
+                        ] ifFalse:[
+                            handleLevel ~~ 0 ifTrue:[
+                                self drawEdgesForX:xm
+                                                 y:(hy - barWidthInt)
+                                             width:w 
+                                            height:(barWidthInt + barWidthInt)
+                                             level:handleLevel.
+                            ].
+                            handleStyle == #iris ifTrue:[
+                                self paint:handleColor.
+                                self fillDeviceRectangleX:(xm + 2)
+                                                        y:(hy - barWidthInt + 2)
+                                                    width:w - 4
+                                                   height:(barWidthInt + barWidthInt - 4)
+                            ].
+                        ].
+                    ]
+                ] ifFalse:[
+                    x := hx.
+                    (shadowForm notNil or:[lightForm notNil]) ifTrue:[
+                        self drawHandleFormAtX:(x + m) y:hy
+                    ]
+                ].
+                handleStyle == #st80 ifTrue:[
+                    x := hx - 1.
+                    self paint:lightColor.
+                    self displayLineFromX:x y:mar toX:x y:(height - mar).
+                    self displayLineFromX:hx y:0 toX:(hx + barHeightInt - 1) y:0.
+                    x := hx + barHeightInt - 2.
+                    self paint:shadowColor.
+                    self displayLineFromX:x y:mar toX:x y:(height - mar).
+                        "uncomment the -1 if you dont like the notch at the bottom end"
+                        "                   VVV"
+                    self displayLineFromX:hx" "-1" " y:height-1 toX:(hx + barHeightInt - 1) y:height-1.
+                ].
+            ] ifFalse:[
+                x := hx + barHeightInt - 1.
+                self paint:handleColor.
+                separatingLine ifTrue:[
+                    self displayLineFromX:hx+1 y:0 toX:hx+1 y:height.
+                    self displayLineFromX:x y:0 toX:x y:height.
+                ].
+                self fillRectangleX:hx y:hy width:barHeightInt height:barWidthInt
+            ]
+        ]
+    ].
+
+    "Modified: / 29.7.1998 / 22:48:33 / cg"
+!
+
+drawHandleFormAtX:hx y:hy
+    "draw a handles bitmap at hx/hy"
+
+    shadowForm notNil ifTrue:[
+        self paint:shadowColor.
+        self displayForm:shadowForm x:hx y:hy.
+    ].
+    lightForm notNil ifTrue:[
+        self paint:lightColor.
+        self displayForm:lightForm x:hx y:hy.
+    ].
+    self paint:viewBackground
+
+    "Modified: 7.11.1996 / 20:25:33 / cg"
+!
+
+drawSnapAt:anIndex
+    "draw the snap for a handle at an index"
+
+    |snapLayout icon level offLevel paint canChangeExtent
+     left   "{ Class:SmallInteger }"
+     top    "{ Class:SmallInteger }"
+     width  "{ Class:SmallInteger }"
+     height "{ Class:SmallInteger }"
+     snapMode leftEdge wEdge topEdge hEdge part wPart hPart|
+
+    (snapLayout := self snapLayoutAt:anIndex) isNil ifTrue:[
+        "snap disabled"
+        ^ self
+    ].
+
+    left   := snapLayout left.
+    top    := snapLayout top.
+    width  := snapLayout width.
+    height := snapLayout height.
+    snapMode := self snapMode.
+
+    offLevel := level := (snapAdornment level ? 0).
+
+    canChangeExtent := self canChangeExtentOfViewAt:anIndex.
+    canChangeExtent ifTrue:[
+        (controller isSnapEntered:anIndex) ifTrue:[
+            controller isSnapPressed ifTrue:[
+                level := snapAdornment selectedLevel ? 0.
+                paint := snapAdornment selectedBgColor.
+            ] ifFalse:[
+                level := snapAdornment enterLevel ? 0.
+                paint := snapAdornment enterBgColor.
+            ].
+        ]
+    ].
+    paint isNil ifTrue:[
+        paint := viewBackground.
+    ].
+
+    self paint:paint.
+
+"/    level == 0 ifTrue:[
+"/    ].
+
+    self fillRectangleX:left+1 y:top+1 width:width-2 height:height-2.
+
+    level ~~ 0 ifTrue:[
+        leftEdge := left + 1.
+        wEdge := wPart := width - 2.
+        topEdge := top + 1.
+        hEdge := hPart := height - 2.
+
+        orientation == #vertical ifTrue:[
+            wPart := width // 3.
+        ] ifFalse:[
+            hPart := height // 3.
+        ].
+
+        level < 0 ifTrue:[
+            part := (self subViews at:anIndex) objectAttributeAt:#snapPart.
+            part == #left ifTrue:[
+                self drawEdgesForX:leftEdge y:topEdge width:wEdge height:hEdge level:offLevel.
+                wPart := wPart + 1.
+            ] ifFalse:[
+                part == #middle ifTrue:[
+                    self drawEdgesForX:leftEdge y:topEdge width:wEdge height:hEdge level:offLevel.
+                    orientation == #vertical ifTrue:[
+                        leftEdge := leftEdge + wPart.
+                    ] ifFalse:[
+                        topEdge := topEdge + hPart.
+                    ]
+                ] ifFalse:[
+                    part == #right ifTrue:[
+                        self drawEdgesForX:leftEdge y:topEdge width:wEdge height:hEdge level:offLevel.
+                        orientation == #vertical ifTrue:[
+                            leftEdge := leftEdge + (width - wPart - 1).
+                        ] ifFalse:[
+                            topEdge := topEdge + (height - hPart - 1).
+                        ].
+                        wPart := wPart - 1.
+                    ]
+                ]
+            ].
+            wEdge := wPart.
+            hEdge := hPart.
+        ].
+        self drawEdgesForX:leftEdge y:topEdge width:wEdge height:hEdge level:level.
+    ].
+
+    canChangeExtent ifFalse:[^ self].
+
+    snapMode == #both ifTrue:[
+        icon := (orientation == #vertical) 
+                    ifTrue:[snapAdornment iconUpDown] 
+                    ifFalse:[snapAdornment iconLeftRight]
+    ] ifFalse:[
+        (self snapAtIndexWillGrow:anIndex) ifTrue:[
+            icon := (orientation == #vertical) 
+                        ifTrue:[snapAdornment iconDown] 
+                        ifFalse:[snapAdornment iconRight]
+        ] ifFalse:[
+            icon := (orientation == #vertical) 
+                        ifTrue:[snapAdornment iconUp]   
+                        ifFalse:[snapAdornment iconLeft]
+        ].
+    ].
+
+    icon displayOn:self x:(left + ((width - icon width) // 2))
+                        y:(top  + ((height - icon height) // 2)).
+
+    "Modified: / 31-10-2010 / 12:58:27 / cg"
+!
+
+invertHandleBarAtX:hx y:hy
+    |doLine oldStyle|
+
+    doLine := (trackLine == #solidLine 
+               or:[trackLine == #dashedLine
+               or:[trackLine == #dottedLine]]).
+
+    trackLine == #dashedLine ifTrue:[
+        oldStyle := gc lineStyle.
+        self lineStyle:#dashed.
+    ] ifFalse:[
+        trackLine == #dottedLine ifTrue:[
+            oldStyle := gc lineStyle.
+            self lineStyle:#dotted.
+        ]
+    ].
+
+    self clippedByChildren:false.
+
+    self xoring:[
+        |yL xL halfHeight|
+
+        halfHeight := (barHeight // 2) - 1.
+
+        orientation == #vertical ifTrue:[
+            yL := hy + halfHeight.
+            doLine ifTrue:[
+                self displayLineFromX:0 y:yL toX:width y:yL.
+            ] ifFalse:[
+                self fillRectangleX:0 y:hy width:width height:barHeight
+            ]
+        ] ifFalse:[
+            xL := hx + halfHeight.
+            doLine ifTrue:[
+                self displayLineFromX:xL y:0 toX:xL y:height.
+            ] ifFalse:[
+                self fillRectangleX:hx y:0 width:barHeight height:height
+            ]
+        ].
+    ].
+    self clippedByChildren:true.
+
+    oldStyle notNil ifTrue:[
+        self lineStyle:oldStyle.
+    ].
+
+    "Modified: / 28.4.1997 / 14:56:26 / dq"
+    "Modified: / 3.5.1999 / 18:49:04 / cg"
+!
+
+lockRedraw
+    redrawLocked := true
+!
+
+redraw
+    "redraw all of the handles"
+
+    redrawLocked ~~ true ifTrue:[
+        "/ self clear.
+        self redrawHandlesFrom:1 to:(self subViews size)
+    ]
+
+    "Modified: 28.1.1997 / 17:54:15 / cg"
+!
+
+redrawHandlesFrom:start to:stop
+    "redraw some handles and snaps"
+
+    subViews size ~~ 0 ifTrue:[
+        self handleOriginsWithIndexFrom:start to:stop do:[:hPoint :hIndex |
+            |hx hy|
+
+            hx := hPoint x.
+            hy := hPoint y.
+            barLevel notNil ifTrue:[
+                self drawEdgesForX:0 y:hy width:width height:barHeight level:barLevel.
+            ].
+
+            "/ do not draw handle, if there is a snapper ...
+            self hasSnapHandle ifTrue:[
+                self drawSnapAt:hIndex-1
+            ] ifFalse:[
+                showHandle ifTrue:[
+                    self drawHandle:hIndex atX:hx y:hy.
+                ].
+            ].
+        ].
+    ].
+
+    "Modified: / 31-10-2010 / 12:43:33 / cg"
+!
+
+unlockRedraw
+    redrawLocked := false
+! !
+
+!VariablePanel methodsFor:'enumerating subviews'!
+
+changeSequenceOrderFor:aSubView to:anIndex
+    "change a subview's position in the subviews collection."
+
+    |success|
+
+    success := super changeSequenceOrderFor:aSubView to:anIndex.
+    success ifTrue:[
+        self setupSubviews.
+        self resizeSubviews.
+    ].
+    ^ success
+! !
+
+!VariablePanel methodsFor:'event handling'!
+
+pointerEnter:buttonState x:x y:y
+    showHandleWhenEntered == true ifTrue:[
+        self showHandle:true
+    ].
+    super pointerEnter:buttonState x:x y:y.
+
+    "Created: / 19-12-2010 / 09:29:51 / cg"
+!
+
+pointerLeave:buttonState
+    showHandleWhenEntered == true ifTrue:[
+        self showHandle:false
+    ].
+    super pointerLeave:buttonState.
+
+    "Created: / 19-12-2010 / 09:30:20 / cg"
+!
+
+sizeChanged:how
+    "my size has changed; resize my subviews"
+
+    realized ifTrue:[
+        (how == #smaller) ifTrue:[
+            self resizeSubviews
+        ] ifFalse:[
+            "/
+            "/ do it in reverse order, to avoid some redraws
+            "/
+            self resizeSubviewsFrom:(self subViews size) to:1
+        ]
+    ].
+    self changed:#sizeOfView with:how.
+    superView notNil ifTrue:[
+        superView subViewChangedSize
+    ]
+
+    "Modified: 28.1.1997 / 17:56:30 / cg"
+! !
+
+!VariablePanel methodsFor:'focus handling'!
+
+wantsFocusWithButtonPress
+    "no, do not catch the keyboard focus on button click"
+
+    ^ false
+
+
+! !
+
+!VariablePanel methodsFor:'initialization & release'!
+
+computeBarHeight
+    "compute the height if the separating bar from either the
+     form or an explicit height given in the styleSheet"
+
+    <resource: #style (#'variablePanel.barHeight'
+                       #'variablePanel.barHeightMM')>
+
+    |bH h lvl currentDeviceFont|
+
+    shadowForm notNil ifTrue:[
+        bH := shadowForm height + 2.
+    ] ifFalse:[
+        bH := styleSheet at:#'variablePanel.barHeight'.
+        bH isNil ifTrue:[
+            h := styleSheet at:#'variablePanel.barHeightMM' default:2.
+            bH := (h * self graphicsDevice verticalPixelPerMillimeter) rounded.
+        ].
+    ].
+    lvl := styleSheet at:#'variablePanel.barLevel' default:0.
+    lvl ~~ 0 ifTrue:[
+        bH := bH + (lvl abs * 2).
+    ].
+
+    self barHeight:bH.
+    knobHeight := bH.
+
+    handleLabels notNil ifTrue:[
+        currentDeviceFont := gc createFontOnDevice.
+        bH := handleLabels inject:bH into:[:maxSoFar :thisLabel |
+                                           thisLabel isNil ifTrue:[
+                                                maxSoFar
+                                           ] ifFalse:[
+                                                maxSoFar max:(thisLabel heightOn:self)
+                                           ]
+                                          ].
+        bH := bH + currentDeviceFont descent - 1
+    ].
+
+    self barHeight:bH.
+
+    "Modified: / 29.7.1998 / 14:47:21 / cg"
+!
+
+defaultControllerClass
+    ^ VariablePanelController
+!
+
+initCursor
+    "set the cursor - a double arrow"
+
+    cursor := self class 
+                cursorForOrientation:orientation
+                onDevice:self graphicsDevice
+
+    "Modified: / 30.9.1998 / 18:20:35 / cg"
+!
+
+initStyle
+    "setup viewStyle specifics"
+
+    |mm|
+
+    super initStyle.
+
+    handleColor := DefaultHandleColor onDevice:self graphicsDevice.
+
+    DefaultHandleStyle isNil ifTrue:[
+        handleStyle := styleSheet name
+    ] ifFalse:[
+        handleStyle := DefaultHandleStyle
+    ].
+
+    handleLevel := DefaultHandleLevel.
+    showHandle := DefaultShowHandle.
+    showHandleWhenEntered := DefaultShowHandleWhenEntered.
+    handlePosition := DefaultHandlePosition.
+    "/ snapHandlePosition := DefaultSnapHandlePosition.
+    trackLine := DefaultTrackingLine.
+    separatingLine := DefaultSeparatingLine.
+
+    DefaultHandleImage notNil ifTrue:[
+        shadowForm := DefaultHandleImage onDevice:self graphicsDevice.
+        barWidth := shadowForm width.
+    ] ifFalse:[
+        handleStyle == #next ifTrue:[
+            DefaultHandleImage notNil ifTrue:[
+                shadowForm := DefaultHandleImage onDevice:self graphicsDevice.
+            ] ifFalse:[
+                shadowForm := self class shadowFormOn:self graphicsDevice.
+                lightForm := self class lightFormOn:self graphicsDevice.
+            ].
+            barWidth := shadowForm width.
+        ] ifFalse:[
+            shadowForm := lightForm := nil.
+
+            mm := self graphicsDevice verticalPixelPerMillimeter.
+            barWidth := (1.5 * mm) rounded. "motif style width"
+        ].
+    ].
+    self computeBarHeight.
+
+    handleStyle == #mswindows ifTrue:[
+        barWidth := (ArrowButton new direction:#up) width + 1 
+    ].
+
+    "Modified: / 19-12-2010 / 09:31:29 / cg"
+!
+
+initialize
+    orientation isNil ifTrue:[orientation := #vertical].
+    super initialize.
+    self bitGravity:nil.
+
+    "Modified: / 29.7.1998 / 16:07:23 / cg"
+! !
+
+!VariablePanel methodsFor:'private'!
+
+anyNonRelativeSubviews
+    "return true, if any of my subviews has no relative origin/extent"
+
+    self subViews do:[:aComponent |
+        aComponent relativeCorner isNil ifTrue:[^ true].
+        aComponent relativeOrigin isNil ifTrue:[^ true]
+    ].
+    ^ false
+
+    "Modified: 28.1.1997 / 17:57:26 / cg"
+!
+
+expandSubView:expandedView
+    "expand one of my subviews to full size"
+
+    |pos subViews|
+
+    realRelativeSizes notNil ifTrue:[
+        "/ already expanded ..
+        ^ self
+    ].
+
+    pos := 0.0. 
+    subViews := self subViews.
+
+    orientation == #vertical ifTrue:[
+        realRelativeSizes := subViews collect:[:v | v relativeCorner y - v relativeOrigin y].
+    ] ifFalse:[
+        realRelativeSizes := subViews collect:[:v | v relativeCorner x - v relativeOrigin x].
+    ].
+
+    subViews do:[:aSubView |
+        aSubView == expandedView ifTrue:[
+            aSubView origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+            pos := 1.0
+        ] ifFalse:[
+            aSubView beInvisible.
+
+            orientation == #vertical ifTrue:[
+                aSubView origin:(0.0 @ pos) corner:(1.0 @ pos)
+            ] ifFalse:[
+                aSubView origin:(pos @ 0.0) corner:(pos @ 1.0)
+            ]
+        ]
+    ].
+    self resizeSubviews.
+
+    "Modified: 28.1.1997 / 17:56:20 / cg"
+!
+
+handleLabelAt:hIndex
+    handleLabels notNil ifTrue:[
+        ^ handleLabels at:hIndex ifAbsent:nil
+    ].
+    ^ nil
+!
+
+handleOriginsWithIndexDo:aBlock
+    "evaluate the argument block for every handle-origin"
+
+    self handleOriginsWithIndexFrom:1 to:(self subViews size) do:aBlock
+
+    "Modified: 28.1.1997 / 17:53:44 / cg"
+!
+
+handleOriginsWithIndexFrom:start to:stop do:aBlock
+    "evaluate the argument block for some handle-origins"
+
+    |x y hw hh hDelta vDelta subViews
+     first "{ Class: SmallInteger }"
+     last  "{ Class: SmallInteger }"|
+
+    (subViews := self subViews) notNil ifTrue:[
+        shadowForm notNil ifTrue:[
+            hw := shadowForm width.
+            hh := shadowForm height.
+        ] ifFalse:[
+            hw := hh := barWidth
+        ].
+
+        (handleStyle ~~ #normal and:[handleStyle ~~ #mswindows]) ifTrue:[
+            hDelta := barWidth // 2.
+            vDelta := barWidth // 2.
+        ] ifFalse:[
+            hDelta := vDelta := 0
+        ].
+
+        (handlePosition == #left) ifTrue:[
+            x := hDelta. 
+            y := vDelta.
+
+            orientation == #vertical ifTrue:[
+                x := x + barWidth
+            ] ifFalse:[
+                y := y + barWidth
+            ].
+            margin ~~ 0 ifTrue:[
+                x := x + 2
+            ].
+        ] ifFalse:[
+            (handlePosition == #right) ifTrue:[
+                x := width - hw - margin - hDelta.
+                y := height - hh - margin - vDelta.
+            ] ifFalse:[
+                x := width - barWidth // 2.
+                y := height - barWidth // 2
+            ]
+        ].
+        first := start + 1.
+        last := stop.
+
+        first to:last do:[:index |
+            |view|
+
+            view := subViews at:index.
+            orientation == #vertical ifTrue:[
+                y := view top "origin y" - barHeight + 1.
+            ] ifFalse:[
+                x := view left "origin x" - barHeight + 1.
+            ].
+            aBlock value:(x @ y) value:index
+        ]
+    ]
+
+    "Modified: / 1.11.1997 / 11:53:40 / cg"
+!
+
+redrawIfShown
+    shown ifTrue:[
+        self clear.
+    ].
+    self invalidate
+!
+
+resizeSubViewsTo:relativeSizeList
+    "change subviews sizes as defined in the argument list
+     (a collection of relative sizes)"
+
+    |pos subViews|
+
+    subViews := self subViews.
+
+    pos := 0.0.
+    subViews with:relativeSizeList do:[:aSubView :relSize |
+        orientation == #vertical ifTrue:[
+            aSubView origin:(0.0 @ pos) corner:(1.0 @ (pos + relSize))
+        ] ifFalse:[
+            aSubView origin:(pos @ 0.0) corner:((pos + relSize) @ 1.0)
+        ].
+        pos := pos + relSize.
+    ].
+    self resizeSubviews.
+
+!
+
+resizeSubviews
+    "readjust size of all subviews"
+
+    self resizeSubviewsFrom:1 to:(self subViews size)
+
+    "Modified: 28.1.1997 / 17:54:42 / cg"
+    "Modified: 22.3.1997 / 01:01:31 / stefan"
+!
+
+resizeSubviewsFrom:start to:stop
+    "readjust size of some subviews"
+
+    |step nSubviews subViews|
+
+    (subViews := self subViews) size > 0 ifTrue:[
+        (start <= stop) ifTrue:[
+            step := 1
+        ] ifFalse:[
+            step := -1
+        ].
+        nSubviews := subViews size.
+        start to:stop by:step do:[:index |
+            |bw view o1 o2 newOrg newCorner newExt|
+
+            view := subViews at:index.
+            bw := view borderWidth.
+
+            index == 1 ifTrue:[
+                o1 := 0.
+            ] ifFalse:[
+                o1 := barHeight // 2 - bw
+            ].
+            index ==  nSubviews ifTrue:[
+                o2 := 0.
+            ] ifFalse:[
+                o2 := barHeight // 2 - bw
+            ].
+
+            newOrg := view computeOrigin.
+            newOrg notNil ifTrue:[
+                (index ~~ 1) ifTrue:[
+                    orientation == #vertical ifTrue:[
+                        newOrg y:(newOrg y + o1)
+                    ] ifFalse:[
+                        newOrg x:(newOrg x + o1)
+                    ]
+                ].
+            ].
+            newExt := view computeExtent.
+            newExt notNil ifTrue:[
+                orientation == #vertical ifTrue:[
+                    newExt y:(newExt y - o2 - o1)
+                ] ifFalse:[
+                    newExt x:(newExt x - o2 - o1)
+                ]
+            ].
+            view pixelOrigin:newOrg extent:newExt.
+        ].
+        shown ifTrue:[
+            "/ must clear, since handles are copied automatically (by bitGravity)
+            self clear.
+            self invalidate.
+        ]
+    ]
+
+    "Modified: / 22.3.1997 / 01:02:21 / stefan"
+    "Modified: / 23.2.2000 / 18:32:37 / cg"
+!
+
+restoreSubViewRatios
+    "restore my subviews sizes to the state before the full-expand"
+
+    |pos|
+
+    realRelativeSizes isNil ifTrue:[
+        "/ not expanded - ignore
+        ^ self
+    ].
+
+    pos := 0.0.
+    self subViews with:realRelativeSizes do:[:aSubView :aRelativeSize |
+        orientation == #vertical ifTrue:[
+            aSubView origin:(0.0 @ pos) corner:(1.0 @ (pos+aRelativeSize))
+        ] ifFalse:[
+            aSubView origin:(pos @ 0.0) corner:((pos+aRelativeSize) @ 1.0)
+        ].
+        pos := pos + aRelativeSize.
+
+        aSubView shown ifFalse:[
+            aSubView hiddenOnRealize:false.
+            shown ifTrue:[aSubView beVisible].
+        ].
+    ].
+    realRelativeSizes := nil.
+    self resizeSubviews.
+
+    "Modified: 28.1.1997 / 17:56:20 / cg"
+!
+
+setupSubviewOrigins
+    "setup subviews origins 
+     if we only have relative extents 
+     (Variable Panels need relative origins and corners!!) (SV 16.1.95)"
+
+    |x y e eX eY subViews n "{ Class: SmallInteger }"|
+
+    x := y := 0.0.
+
+    subViews := self subViews.
+    n := subViews size.
+    1 to:n do:[:index |
+        |view|
+
+        view := subViews at:index.
+        e := view relativeExtent.
+        e notNil ifTrue:[
+            view relativeExtent:nil.
+            eX := e x.
+            eY := e y.
+            index == n ifTrue:[
+                view origin:(x @ y) corner:(1.0 @ 1.0)
+            ] ifFalse:[
+                orientation == #vertical ifTrue:[
+                    view origin:(x @ y) corner:(1.0 @ (y+eY))
+                ] ifFalse:[
+                    view origin:(x @ y) corner:((x+eX) @ 1.0)
+                ].
+            ].
+            orientation == #vertical ifTrue:[
+                y := y + eY.
+            ] ifFalse:[    
+                x := x + eX.
+            ]
+        ] ifFalse: [
+            view origin:(x @ y).
+            orientation == #vertical ifTrue:[
+                y := view relativeCorner y.
+            ] ifFalse:[
+                x := view relativeCorner x.
+            ]
+        ].
+    ]
+
+    "Modified: 21.8.1996 / 10:01:29 / stefan"
+    "Modified: 28.1.1997 / 17:55:21 / cg"
+!
+
+setupSubviews
+    "setup subviews sizes (in case of non-relative sizes)"
+
+    |pos delta subViews nSubViews "{ Class: SmallInteger }"|
+
+    "/ setup all subviews to spread evenly ...
+
+    subViews := self subViews.
+    nSubViews := subViews size.
+    nSubViews == 0 ifTrue:[^ self].
+
+    pos := 0.0. 
+    delta := 1.0 / nSubViews.
+
+    1 to:nSubViews do:[:index |
+        |view org corn|
+
+        view := subViews at:index.
+        orientation == #vertical ifTrue:[
+            org := (0.0 @ pos). 
+            index == subViews size ifTrue:[
+                corn := (1.0 @ 1.0)
+            ] ifFalse:[
+                corn := (1.0 @ (pos + delta))
+            ].
+        ] ifFalse:[
+            org := (pos @ 0.0).
+            index == subViews size ifTrue:[
+                corn := (1.0 @ 1.0)
+            ] ifFalse:[
+                corn := ((pos + delta) @ 1.0)
+            ].
+        ].
+        view origin:org corner:corn.
+        pos := pos + delta
+    ]
+
+    "Modified: / 23.2.2000 / 18:14:01 / cg"
+! !
+
+!VariablePanel methodsFor:'private-snap queries'!
+
+canChangeExtentOfViewAt:anIndex
+    "returns true if extent at an index is changable
+    "
+    |view|
+
+    view := subViews at:anIndex ifAbsent:[^ false].
+
+    orientation == #vertical ifTrue:[
+        view height > 2 ifFalse:[
+            view := subViews at:(anIndex + 1) ifAbsent:[^ false].
+            ^ view height > 2
+        ].
+        ^ true
+    ].
+
+    view width > 2 ifFalse:[
+        view := subViews at:(anIndex + 1) ifAbsent:[^ false].
+        ^ view width > 2
+    ].
+    ^ true
+!
+
+initSnapAdornment
+    |num icon level enterLevel selectedLevel color|
+
+    snapAdornment isNil ifTrue:[
+
+        snapAdornment := SnapAdornment "IdentityDictionary" new.
+
+        level         := styleSheet at:#'variablePanel.snapLevel'      default:1.
+        enterLevel    := styleSheet at:#'variablePanel.snapEnterLevel' default:level.
+        selectedLevel := styleSheet at:#'variablePanel.selectedLevel'  default:(level negated).
+
+        snapAdornment level:level.
+        snapAdornment enterLevel:enterLevel.
+        snapAdornment selectedLevel:selectedLevel.
+        snapAdornment mode:#min.
+
+        color := styleSheet 
+                    colorAt:#'variablePanel.snapSelectedBgColor'
+                    default:(StyleSheet colorAt:#'button.activeBackgroundColor').
+        color notNil ifTrue:[
+            snapAdornment selectedBgColor:(color onDevice:self graphicsDevice)
+        ].
+
+        color := StyleSheet 
+                    colorAt:#'variablePanel.snapEnterBgColor'
+                    default:(StyleSheet colorAt:#'button.enteredBackgroundColor').
+        color notNil ifTrue:[
+            snapAdornment enterBgColor:(color onDevice:self graphicsDevice)
+        ].
+
+        self class snapIcons keysAndValuesDo:[:aKey :anIcon|
+            anIcon device == self graphicsDevice ifTrue:[
+                icon := anIcon
+            ] ifFalse:[
+                icon := anIcon copy onDevice:self graphicsDevice.
+                icon clearMaskedPixels.
+                self graphicsDevice == Display ifTrue:[
+                    self class snapIcons at:aKey put:icon.
+                ]
+            ].
+            snapAdornment at:aKey put:icon
+        ].
+        "compute required snap extent including level and margins ..."
+
+        num  := level abs max:(enterLevel abs).
+        num  := num max:(selectedLevel abs).
+        num  := (num + 2) "margin into handle := 1" * 2.
+        icon := snapAdornment iconUp.
+
+        snapAdornment height:(icon height + num).
+        snapAdornment width:(icon width  + num).
+    ].
+
+    ^ snapAdornment
+
+    "Modified: / 31-10-2010 / 12:59:39 / cg"
+!
+
+snapAtIndexWillGrow:anIndex
+    "returns true if the view assigned to the snap at an index will grow
+     if pressing the snap
+    "
+    |view mode|
+
+    (mode := self snapMode) notNil ifTrue:[
+        (mode == #max or:[mode == #maxMin]) ifTrue:[
+            "on press the view is increased to bottom(vertical) or right(horizontal)"
+            view := subViews at:(anIndex + 1) ifAbsent:[^ false].
+            ^ orientation == #vertical ifTrue:[view height > 2] ifFalse:[view width  > 2]
+        ].    
+
+        (mode == #min or:[mode == #minMax]) ifTrue:[
+            "on press the view is decreased to top(vertical) or left (horizontal)"
+            view := subViews at:anIndex ifAbsent:[^ false].
+            ^ orientation == #vertical ifTrue:[view height <= 2] ifFalse:[view width  <= 2]
+        ].
+
+        self error:'unexepected snapMode state'.
+    ].    
+    ^ false     "snap is disabled"
+!
+
+snapLayoutAt:anIndex
+    "returns the layout of the snap at an index
+     or nil if snaps are disabled
+    "
+    |v1 v2 left top right bot w snapX snapY|
+
+    self hasSnapHandle ifFalse:[^ nil].         "snap disabled"
+
+    v1 := subViews at:anIndex     ifAbsent:[^ nil].
+    v2 := subViews at:anIndex + 1 ifAbsent:[^ nil].
+    w  := snapAdornment width ? 0.
+
+    handlePosition "snapHandlePosition" == #left ifTrue:[
+        snapX := snapY := margin. "/ ViewSpacing.
+    ] ifFalse:[
+        handlePosition "snapHandlePosition" == #right ifTrue:[
+            snapX := width - w.
+            snapY := height - w.
+        ] ifFalse:[
+            snapX := (width - w) // 2.
+            snapY := (height - w) // 2.
+        ].
+    ].
+
+    orientation == #vertical ifTrue:[
+        left := snapX. "/ v1 width - w // 2.
+        top := v1 bottom + 1.
+        right := left + w.
+        bot := v2 top.
+    ] ifFalse:[
+        top := snapY. "/ v1 height - w // 2.
+        left := v1 right + 1.
+        right := v2 left.
+        bot := top + w.
+    ].
+    ^ Rectangle left:left top:top right:right bottom:bot
+
+    "Modified: / 31-10-2010 / 12:47:16 / cg"
+! !
+
+!VariablePanel methodsFor:'queries'!
+
+hasSnapHandle
+    ^ snapAdornment notNil
+
+    "Created: / 31-10-2010 / 12:43:21 / cg"
+!
+
+isHorizontal
+    ^ orientation == #horizontal
+!
+
+isLayoutWrapper
+    "answer true, if this view defines the layout of it's subviews"
+
+    ^ true
+! !
+
+!VariablePanel methodsFor:'realization'!
+
+fixSize 
+    super fixSize.
+    self extentChangedFlag ifTrue:[
+        self resizeSubviews
+    ].
+
+    "Modified: 22.3.1997 / 01:19:55 / stefan"
+!
+
+realize
+    super realize.
+    self anyNonRelativeSubviews ifTrue:[
+        self setupSubviews.
+        self sizeChanged:nil.   "/ force recomputation of subviews
+    ].
+! !
+
+!VariablePanel::SnapAdornment methodsFor:'accessing'!
+
+enterBgColor
+    ^ enterBgColor
+!
+
+enterBgColor:something
+    enterBgColor := something.
+!
+
+enterLevel
+    ^ enterLevel
+!
+
+enterLevel:something
+    enterLevel := something.
+!
+
+height
+    ^ height
+!
+
+height:something
+    height := something.
+!
+
+iconDown
+    ^ iconDown
+!
+
+iconDown:something
+    iconDown := something.
+!
+
+iconLeft
+    ^ iconLeft
+!
+
+iconLeft:something
+    iconLeft := something.
+!
+
+iconLeftRight
+    ^ iconLeftRight
+!
+
+iconLeftRight:something
+    iconLeftRight := something.
+!
+
+iconRight
+    ^ iconRight
+!
+
+iconRight:something
+    iconRight := something.
+!
+
+iconUp
+    ^ iconUp
+!
+
+iconUp:something
+    iconUp := something.
+!
+
+iconUpDown
+    ^ iconUpDown
+!
+
+iconUpDown:something
+    iconUpDown := something.
+!
+
+level
+    ^ level
+!
+
+level:something
+    level := something.
+!
+
+mode
+    ^ mode
+!
+
+mode:something
+    mode := something.
+!
+
+selectedBgColor
+    ^ selectedBgColor
+!
+
+selectedBgColor:something
+    selectedBgColor := something.
+!
+
+selectedLevel
+    ^ selectedLevel
+!
+
+selectedLevel:something
+    selectedLevel := something.
+!
+
+width
+    ^ width
+!
+
+width:something
+    width := something.
+! !
+
+!VariablePanel::SnapAdornment methodsFor:'backward compatibility'!
+
+at:key 
+    ^ self perform:key
+
+    "Created: / 31-10-2010 / 12:38:58 / cg"
+!
+
+at:key ifAbsent:default
+    |value|
+
+    value := self perform:key.
+    ^ value ? default
+
+    "Created: / 31-10-2010 / 12:41:10 / cg"
+!
+
+at:key put:aValue
+    self perform:key asMutator with:aValue
+
+    "Created: / 31-10-2010 / 12:38:48 / cg"
+! !
+
+!VariablePanel class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VariablePanel.st,v 1.102 2014-04-03 14:33:38 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/VariablePanel.st,v 1.102 2014-04-03 14:33:38 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VariablePanelController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,561 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+Controller subclass:#VariablePanelController
+	instanceVariableNames:'movedHandle prevPos clickPos saveCursor startResizing resizeMode
+		opaqueResizing'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Controllers'
+!
+
+!VariablePanelController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+!
+
+documentation
+"
+    An abstract class for variablePanel controllers;
+    normally, not used directly by applications, these are created automatically
+    whenever a variablePanel is created.
+    Instances are responsible for tracking the mouse pointer and resize the
+    views (a panel) subviews as appropriate.
+
+    [author:]
+        Claus Gittinger
+"
+
+
+! !
+
+!VariablePanelController methodsFor:'event handling'!
+
+buttonMotion:state x:bx y:by
+    "mouse-button was moved while pressed;
+     clear prev handleBar and draw handle bar at new position
+    "
+    |nextPos layout entered hindex handle|
+
+    state == 0 ifTrue:[
+        movedHandle notNil ifTrue:[
+            "/ oops - how can this happen
+            self buttonRelease:1 x:bx y:bx.
+            movedHandle := nil
+        ].
+
+        view snapMode isNil ifTrue:[^ self].
+
+        handle := self detectHandleIndexAt:bx y:by.
+        handle isNil ifTrue:[^ self].
+"/
+"/        hindex ~~ handle ifTrue:[
+"/            self pointerLeave:0.
+"/            handle := hindex.
+"/        ].
+"/        handle isNil ifTrue:[^ self].
+
+        "check entering click button ...."
+        layout  := view snapLayoutAt:handle.
+        entered := layout notNil and:[layout containsPointX:bx y:by].
+
+        entered ~~ (self isSnapEntered) ifTrue:[
+            entered ifTrue:[
+                saveCursor := view cursor.
+                view cursor:(Cursor hand).
+            ] ifFalse:[
+                view cursor:saveCursor.
+                saveCursor := nil.
+            ].
+            view drawSnapAt:handle
+        ].
+        ^ self
+    ].
+
+    (movedHandle isNil or:[resizeMode isNil]) ifTrue:[^ self].
+
+    "/ kludge: workaround Windows bug, which sends a MOUSEMOVE
+    "/ (with same coordinate as previous MOUSE_DOWN
+    view orientation ~~ #vertical ifTrue:[
+        clickPos == bx ifTrue:[^ self].
+        prevPos == bx ifTrue:[^ self].
+    ] ifFalse:[
+        clickPos == by ifTrue:[^ self].
+        prevPos == by ifTrue:[^ self].
+    ].
+
+    "RESIZING"
+
+    "compute new position ...."
+
+    nextPos := self checkedHandleMovementX:bx y:by.
+"/    nextPos = prevPos ifTrue:[
+"/        ^ self
+"/    ].
+
+    resizeMode == #active ifTrue:[
+        "check position changed ..."
+"/        nextPos > 10 ifTrue:[
+"/            (prevPos - nextPos) abs < 2 ifTrue:[^ self].
+"/        ].
+        opaqueResizing ifFalse:[
+            self doInvertHandle   "undo the last invert"
+        ]
+    ] ifFalse:[
+"/        nextPos > 10 ifTrue:[
+"/            (clickPos - nextPos) abs < 5 ifTrue:[^ self].
+"/        ].
+        resizeMode := #active.
+
+        "/ restore the snap cursor
+        self isSnapEntered ifTrue:[
+            view grabPointerWithCursor:saveCursor.
+            saveCursor := nil.
+            view drawSnapAt:movedHandle.
+        ]
+    ].
+    prevPos := nextPos.
+
+    opaqueResizing ifFalse:[
+        self doInvertHandle.
+    ] ifTrue:[
+        self doResize.
+    ].
+
+    "Modified: / 24.8.2001 / 15:34:57 / cg"
+!
+
+buttonPress:button x:bx y:by
+    "button was pressed - setup resizing if a handle is hit
+    "
+    |handleView hindex isMin isMax layout|
+
+    (button == 1) ifFalse:[
+        movedHandle isNil ifTrue:[
+            self pointerLeave:0.
+            super buttonPress:button x:bx y:by.
+        ].
+        ^ self.
+    ].
+
+    view compressMotionEvents:true.
+    hindex := self detectHandleIndexAt:bx y:by.
+
+"/    movedHandle notNil ifTrue:[
+"/        hindex ~~ movedHandle ifTrue:[self pointerLeave:0].     "restore the cursor"
+"/    ].
+
+    (     (movedHandle := hindex) notNil
+     and:[(view canChangeExtentOfViewAt:movedHandle)]
+    ) ifFalse:[
+        ^ self
+    ].
+
+    view grabPointerWithCursor:(view cursor).
+    handleView := view subViews at:movedHandle.
+
+    "setup resizeing"
+    resizeMode := #init.
+
+    view orientation ~~ #vertical ifTrue:[
+        clickPos := bx.
+        prevPos  := handleView right.
+    ] ifFalse:[
+        clickPos := by.
+        prevPos  := handleView bottom.
+    ].
+    prevPos := prevPos + (view barHeight + 1 // 2).
+
+    "/ self pointerEnter:0 x:bx y:by.
+
+    opaqueResizing := self sensor shiftDown or:[UserPreferences current opaqueVariablePanelResizing == true].
+
+    self isSnapEntered ifTrue:[
+        "there is a snap under the cursor; redraw selected"
+        view snapMode == #both ifTrue:[
+            layout := view snapLayoutAt:movedHandle.
+            view orientation == #vertical ifTrue:[
+                isMax := bx > (layout right - (layout width//3)).
+                isMin := bx < (layout left + (layout width//3)).
+            ] ifFalse:[
+                isMax := by > (layout bottom - (layout height//3)).
+                isMin := by < (layout top + (layout height//3)).
+            ].
+            handleView objectAttributeAt:#snapPart  put:(isMin ifTrue:[#left] ifFalse:[ isMax ifTrue:[#right] ifFalse:[#middle]]).
+        ].
+        view drawSnapAt:movedHandle.
+    ] ifFalse:[
+        opaqueResizing ifFalse:[
+            self doInvertHandle.
+            resizeMode := #active.
+        ].
+    ].
+
+    "Modified: / 24.8.2001 / 15:35:27 / cg"
+!
+
+buttonRelease:button x:bx y:by
+    "end bar-move"
+
+    |layout aboveView|
+
+    (button == 1) ifFalse:[
+        movedHandle isNil ifTrue:[
+            resizeMode := nil.
+            super buttonRelease:button x:bx y:by
+        ].
+        ^ self.
+    ].
+
+    view compressMotionEvents:false.
+    view ungrabPointer.
+    movedHandle isNil ifTrue:[^ self].
+
+    resizeMode notNil ifTrue:[
+        resizeMode == #active ifTrue:[
+            (view snapMode == #both) ifFalse:[
+                aboveView := view subViews at:movedHandle.
+                aboveView objectAttributeAt:#vpext put:(aboveView relativeCorner).
+            ].
+            opaqueResizing ifFalse:[
+                self doResize
+            ].
+        ] ifFalse:[
+            (    (layout := view snapLayoutAt:movedHandle) notNil
+             and:[layout containsPointX:bx y:by]
+            ) ifTrue:[
+                self doSnapPressedX:bx y:by
+            ].
+        ].
+    ].
+    movedHandle := nil.
+    self pointerLeave:0.
+    self pointerEnter:0 x:bx y:by.      "check whether mouse on a handle"
+
+    "Modified: / 24.8.2001 / 15:35:33 / cg"
+!
+
+pointerEnter:state x:bx y:by
+    "this could be send by the KDE before a button press event;
+     test whether the state == 0
+    "
+    |handle|
+
+    state ~~ 0 ifTrue:[ ^ self ].
+
+    view snapMode notNil ifTrue:[
+        "/ test whether a handle is under the cursor
+        handle := self detectHandleIndexAt:bx y:by.
+
+        handle notNil ifTrue:[
+            "/ there is a handel; thus we have to setup the cursor...
+            self buttonMotion:state x:bx y:by
+        ].
+    ].
+!
+
+pointerLeave:state
+    "this could be send by the KDE before a button press event;
+     test whether the state == 0
+    "
+    state ~~ 0 ifTrue:[ ^ self ].
+
+    "/ the view is leave and no button is pressed
+    "/ restore the cursor and redraw the snap if not nil
+
+    saveCursor notNil ifTrue:[
+        "restore the cursor"
+        view cursor:saveCursor.
+        saveCursor := nil
+    ].
+
+    resizeMode := nil.
+
+    movedHandle notNil ifTrue:[
+        view drawSnapAt:movedHandle.
+        self buttonRelease:1 x:0 y:0.
+        movedHandle := nil.
+    ].
+! !
+
+!VariablePanelController methodsFor:'private'!
+
+checkedHandleMovementX:bx y:by
+    "check and return valid position a handle can be placed
+    "
+    |max min pos subViews halfBarHeight barHeight thisView nextView nextView2|
+
+    subViews := view subViews.
+    barHeight := view barHeight.
+"/    halfBarHeight := view barHeight + 1 // 2.
+    halfBarHeight := barHeight // 2.
+
+    thisView := subViews at:movedHandle.
+    nextView := subViews at:movedHandle + 1.
+    nextView2 := subViews at:movedHandle + 2 ifAbsent:nil.
+
+    view orientation == #vertical ifTrue:[
+        pos := by.
+        min := thisView top.
+        nextView2 isNil ifTrue:[
+            max := view height.
+        ] ifFalse:[
+            max := nextView2 top.
+        ].
+    ] ifFalse:[
+        pos := bx.
+        min := thisView left.
+        nextView2 isNil ifTrue:[
+            max := view width.
+        ] ifFalse:[
+            max := nextView2 left.
+        ].
+    ].
+
+    min := min + halfBarHeight "- 1".
+    barHeight odd ifTrue:[ min := min + 1 ].
+    movedHandle == 1 ifTrue:[
+        min := min + view margin
+    ].
+
+"/    max := max - halfBarHeight.
+"/    movedHandle == (subViews size-1) ifTrue:[
+"/        max := max - barHeight + 2.
+"/    ] ifFalse:[
+        max := max - halfBarHeight + 1.
+        barHeight odd ifTrue:[ max := max - 1 ].
+"/    ].
+
+    movedHandle == (subViews size-1) ifTrue:[
+        max := max - view margin
+    ].
+
+    pos < min ifTrue:[^ min].
+    pos > max ifTrue:[^ max].
+    ^ pos
+!
+
+detectHandleIndexAt:x y:y
+    "returns the handle index at position x@y or nil if none detected
+    "
+    |subViews
+     size "{ Class: SmallInteger }"|
+
+    subViews := view subViews.
+
+    (size := subViews size) > 1 ifTrue:[
+	view orientation == #vertical ifTrue:[
+	    2 to:size do:[:i|
+		(subViews at:i) top >= y ifTrue:[
+		    ^ (subViews at:(i-1)) bottom < y ifTrue:[i-1] ifFalse:[nil]
+		]
+	    ]
+	] ifFalse:[
+	    2 to:size do:[:i|
+		(subViews at:i) left >= x ifTrue:[
+		    ^ (subViews at:(i-1)) right < x ifTrue:[i-1] ifFalse:[nil]
+		]
+	    ]
+	]
+    ].
+    ^ nil
+
+
+! !
+
+!VariablePanelController methodsFor:'queries'!
+
+isSnapEntered
+    ^ saveCursor notNil
+!
+
+isSnapEntered:anIndex
+    ^ saveCursor notNil and:[anIndex == movedHandle]
+
+!
+
+isSnapPressed
+    ^ resizeMode notNil and:[resizeMode ~~ #active]
+! !
+
+!VariablePanelController methodsFor:'user operations'!
+
+doInvertHandle
+    "invert a handle
+    "
+    |pos|
+
+    pos := prevPos - (view barHeight + 1 // 2).
+    view invertHandleBarAtX:pos y:pos.
+!
+
+doResize
+    "perform the resize
+    "
+    |aboveView belowView aboveIndex belowIndex newRelPos subViews isVertical 
+     newCorner newOrigin halfBarHg|
+
+    "undo the last invert"
+    (resizeMode == #active and:[opaqueResizing not]) ifTrue:[
+        self doInvertHandle
+    ].
+    "check if position changed"
+    prevPos == clickPos ifTrue:[^ self].
+
+    "compute the new relative origins & corners"
+    isVertical := view orientation == #vertical.
+    aboveIndex := movedHandle.
+    belowIndex := movedHandle + 1.
+    subViews   := view subViews.
+    aboveView  := subViews at:aboveIndex.
+    belowView  := subViews at:belowIndex.
+    halfBarHg  := view barHeight + 1 // 2.
+
+    isVertical ifFalse:[
+        "X complains badly if you try to create/resize a view with a dimension <= 0
+        "
+        prevPos - halfBarHg == aboveView left ifTrue:[prevPos := prevPos + 1].
+
+        newRelPos := (prevPos / view width) asFloat.
+        newCorner := newRelPos @ aboveView relativeCorner y.
+        newOrigin := newRelPos @ belowView relativeOrigin y.
+    ] ifTrue:[
+        "X complains badly if you try to create/resize a view with a dimension <= 0
+        "
+        prevPos - halfBarHg == aboveView top ifTrue:[prevPos := prevPos + 1].
+
+        newRelPos := (prevPos / view height) asFloat.
+        newCorner := aboveView relativeCorner x @ newRelPos.
+        newOrigin := belowView relativeOrigin x @ newRelPos.
+    ].
+    view lockRedraw.
+
+    aboveView relativeCorner:newCorner.
+    belowView relativeOrigin:newOrigin.
+
+    prevPos > clickPos ifTrue:[ "above view grows"
+        view resizeSubviewsFrom:aboveIndex to:belowIndex.
+    ] ifFalse:[
+        view resizeSubviewsFrom:belowIndex to:aboveIndex
+    ].
+    view unlockRedraw.
+
+    prevPos := isVertical ifTrue:[aboveView bottom] ifFalse:[aboveView right].
+    prevPos := prevPos + (view barHeight + 1 // 2).
+!
+
+doSnapPressedX:x y:y
+    "perform the snap press
+    "
+    |layout handle curRCorner prvRCorner isVertical newPos mode isMax isMin doRememberPosition|
+
+    (mode := view snapMode) isNil ifTrue:[^ self].
+
+    layout     := view snapLayoutAt:movedHandle.
+    handle     := view subViews at:movedHandle.
+    isVertical := view orientation == #vertical.
+
+    curRCorner := handle relativeCorner.
+    prvRCorner := handle objectAttributeAt:#vpext.
+
+    isMax := isMin := false.
+    mode == #both ifTrue:[
+        isVertical ifTrue:[
+            isMax := x > (layout right - (layout width//3)).
+            isMin := x < (layout left + (layout width//3)).
+        ] ifFalse:[
+            isMin := y > (layout bottom - (layout height//3)).
+            isMax := y < (layout top + (layout height//3)).
+        ].
+        handle objectAttributeAt:#snapPart  put:(isMin ifTrue:[#left] ifFalse:[ isMax ifTrue:[#right] ifFalse:[#middle]]).
+        doRememberPosition := (isMin or:[isMax]) and:[prvRCorner isNil].
+    ] ifFalse:[
+        isMax := view snapAtIndexWillGrow:movedHandle.
+        isMin := isMax not.
+        isMax ifTrue:[
+           isMax := prvRCorner isNil or:[mode ~~ #min]
+        ] ifFalse:[
+           isMin := prvRCorner isNil or:[mode ~~ #max]
+        ].
+        doRememberPosition := true.
+    ].
+
+    isMax ifTrue:[
+        newPos := 99999        "set extent to max"
+    ] ifFalse:[
+        isMin ifTrue:[
+            newPos := 0        "set extent to min"
+        ] ifFalse:[
+            newPos := nil      "restore previous extent"
+        ]
+    ].
+
+    newPos isNil ifTrue:[
+        prvRCorner isNil ifTrue:[
+            "/ nothing to do
+            ^ self
+        ].
+
+        "restore previous extent"
+        newPos := isVertical ifTrue:[view height * prvRCorner y]
+                            ifFalse:[view width  * prvRCorner x].
+
+        newPos := self checkedHandleMovementX:newPos y:newPos.
+
+        (prevPos - newPos) abs < 2 ifTrue:[
+            "cannot resize; set extent to min or max dependent on the current extent"
+            isVertical ifTrue:[
+                newPos := handle height > 2 ifTrue:[0] ifFalse:[99999]
+            ] ifFalse:[
+                newPos := handle width  > 2 ifTrue:[0] ifFalse:[99999]
+            ].
+            newPos := self checkedHandleMovementX:newPos y:newPos.
+        ].
+
+        mode == #both ifTrue:[
+           handle objectAttributeAt:#vpext put:nil.         "clear previous corner"
+           doRememberPosition := false.
+        ].
+
+    ] ifFalse:[
+        newPos := self checkedHandleMovementX:newPos y:newPos
+    ].
+
+    (newPos - prevPos) abs < 2 ifFalse:[
+        doRememberPosition ifTrue:[
+            handle objectAttributeAt:#vpext put:curRCorner.         "save previous corner"
+        ].
+        prevPos := newPos.
+        self doResize.
+    ]
+! !
+
+!VariablePanelController class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VariablePanelController.st,v 1.41 2009-09-15 21:18:05 cg Exp $'
+
+
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VariableVerticalPanel.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,216 @@
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+VariablePanel subclass:#VariableVerticalPanel
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!VariableVerticalPanel class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1991 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    This class is only here for backward compatibility;
+    all functionality is now in VariablePanel. Its orientation can now
+    be changed dynamically.
+
+    A View to separate its subviews vertically by a movable bar;
+    the size-ratios of the subviews can be changed by moving this bar.
+
+    The bar-handle is either an exposed knob (style == #motif)
+    or the forms defined in Scroller (style ~~ #motif)
+    or nothing.
+
+    The subvies dimensions MUST be given as relative sizes;
+    typically creation is done as:
+
+        p := VariableVerticalPanel in:superView.
+        v1 := <someViewClass> origin:0.0 @ 0.0
+                              corner:1.0 @ 0.5
+                                  in:p.
+        v2 := <someViewClass> origin:0.0 @ 0.5 
+                              corner:1.0 @ 0.8 
+                                  in:p.
+        v3 := <someViewClass> origin:0.0 @ 0.8 
+                              corner:1.0 @ 1.0
+                                  in:p.
+
+
+    [see also:]
+        VariableHorizontalPanel
+        VerticalPanelView HorizontalPanelView PanelView
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples
+"
+   VariableVerticalPanel is simply setting its orientation
+   to #vertical. See more examples there.
+
+   example:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariableVerticalPanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/3) in:p.
+        v2 := View origin:0.0@(1/3) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+
+   example:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariableVerticalPanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+        p handleLevel:-1.
+
+        v1 := View origin:0.0@0.0 corner:1.0@(1/3) in:p.
+        v2 := View origin:0.0@(1/3) corner:1.0@(2/3) in:p.
+        v3 := View origin:0.0@(2/3) corner:1.0@1.0 in:p.
+
+        v1 viewBackground:(Color red).
+        v2 viewBackground:(Color green).
+        v3 viewBackground:(Color yellow).
+
+        top open
+                                                                        [exEnd]
+
+
+    example:
+                                                                        [exBegin]
+        |top p v1 v2 v3|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        p := VariableVerticalPanel 
+                 origin:0.0 @ 0.0
+                 corner:1.0 @ 1.0
+                 in:top.
+
+        v1 := ScrollableView for:SelectionInListView in:p.
+        v1 origin:0.0 @ 0.0 corner:1.0 @ 0.5.
+        v1 list:(FileDirectory directoryNamed:'/etc') contents.
+        v1 action:[:selNr |
+                |fullName stream text|
+                fullName := '/etc/' , v1 selectionValue.
+                stream := fullName asFilename readStream.
+                stream notNil ifTrue:[
+                    text := stream contents.
+                    v2 contents:text.
+                    v3 contents:text
+                ]
+        ].
+
+        v2 := TextView 
+                 origin:0.0 @ 0.5 corner:1.0 @ 0.8 in:p.
+
+        v3 := ScrollableView 
+                 for:TextView 
+                 in:p.
+        v3 origin:0.0 @ 0.8 corner:1.0 @ 1.0.
+        top open
+                                                                        [exEnd]
+
+    example: (dynamically adding/removing views):
+                                                                        [exBegin]
+        |top p v1 v2 b|
+
+        top := StandardSystemView new.
+        top extent:300@300.
+
+        b := Toggle label:'show' in:top.
+        b showLamp:false.
+        b origin:0.0 @ 0.0 corner:(1.0 @ 40).
+        b action:[:state |
+                state ifTrue:[
+                    b label:'hide'.
+                    v1 origin:0.0 @ 0.0 corner:1.0 @ 0.5.
+                    v2 := ScrollableView for:EditTextView.
+                    v2 origin:0.0 @ 0.5 corner:1.0 @ 1.0.
+                    v2 contents:'another text'.
+                    p addSubView:v2.
+                ] ifFalse:[
+                    b label:'show'.
+                    v2 destroy.
+                    v1 origin:0.0 @ 0.0 corner:1.0 @ 1.0
+                ]
+            ].
+
+        p := VariableVerticalPanel
+                origin:0.0 @ 0.0
+                corner:1.0 @ 1.0
+                in:top.
+        p topInset:50.
+
+        v1 := ScrollableView for:EditTextView in:p.
+        v1 origin:0.0 @ 0.0 corner:1.0 @ 1.0.
+        v1 contents:'some text'.
+
+        top open
+                                                                        [exEnd]
+"
+! !
+
+!VariableVerticalPanel methodsFor:'initialization'!
+
+initialize
+    orientation := #vertical.
+    super initialize.
+! !
+
+!VariableVerticalPanel class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VariableVerticalPanel.st,v 1.31 2011-09-29 11:20:04 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VariableVerticalPanelController.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,59 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+VariablePanelController subclass:#VariableVerticalPanelController
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Controllers'
+!
+
+!VariableVerticalPanelController class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    This is a leftover class - its no longer needed, but left for backward compatibility.
+    All functionality is in the VariablePanelController class.
+
+    Normally, not used directly by applications, these are created automatically
+    whenever a variableVerticalPanel is created.
+    Actually, these are simply panelControllers which initialize themself for
+    vertical orientation.
+
+    [see also:]
+        VariableVerticalPanel
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!VariableVerticalPanelController class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VariableVerticalPanelController.st,v 1.10 2011-09-29 11:19:09 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VerticalPanelView.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1118 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+PanelView subclass:#VerticalPanelView
+	instanceVariableNames:'rowHeight'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Views-Layout'
+!
+
+!VerticalPanelView class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a View which arranges its child-views in a vertical column.
+    All real work is done in PanelView - except the layout computation is
+    redefined here.
+
+    The layout is controlled by the instance variables: 
+	horizontalLayout and verticalLayout
+    in addition to 
+	horizontalSpace and verticalSpace.
+
+    The vertical layout can be any of:
+
+	#top            arrange elements at the top
+	#topSpace       arrange elements at the top, start with spacing
+	#bottom         arrange elements at the bottom
+	#bottomSpace    arrange elements at the bottom, start with spacing
+	#center         arrange elements in the center; ignore verticalSpace
+	#spread         spread elements evenly; ignore verticalSpace
+	#spreadSpace    spread elements evenly with spacing at ends; ignore verticalSpace
+	#fit            like #spread, but resize elements for tight packing; ignore verticalSpace
+	#fitSpace       like #fit, with spacing; ignore verticalSpace
+	#topFit         like #top, but resize the last element to fit
+	#topSpaceFit    like #topSpace, but resize the last element to fit
+	#bottomFit      like #bottom, but resize the first element to fit
+	#bottomSpaceFit like #bottomSpace, but resize the first element to fit
+
+    the horizontal layout can be:
+
+	#left           place element at the left
+	#leftSpace      place element at the left, offset by horizontalSpace
+	#center         place elements horizontally centered; ignore horizontalSpace
+	#right          place it at the right
+	#rightSpace     place it at the right, offset by horizontalSpace
+	#fit            resize elements horizontally to fit this panel; ignore horizontalSpace
+	#fitSpace       like #fit, but add spacing; ignore horizontalSpace
+
+	#leftMax        like #left, but resize elements to max of them
+	#leftSpaceMax   like #leftSpace, but resize elements
+	#centerMax      like #center, but resize elements
+	#rightMax       like #right, but resize elements to max of them
+	#rightSpaceMax  like #rightSpace, but resize elements
+
+    The defaults is #center for both directions.
+
+    The layout is changed by the messages #verticalLayout: and #horizontalLayout:.
+    For backward compatibility (to times, where only vLayout existed), the simple
+    #layout: does the same as #verticalLayout:. Do not use this old method.
+
+    The panel assumes, that the elements do not resize themselfes, after it
+    became visible. This is not true for all widgets (buttons or labels may
+    like to change). If you have changing elements, tell this to the panel
+    with 'aPanel elementsChangeSize:true'. In that case, the panel will react
+    to size changes, and reorganize things.
+
+    If none of these layout/space combinations is exactly what you need in
+    your application, create a subclass, and redefine the setChildPositions method.
+
+    CAVEAT: this class started with #top and no horizontal alignments;
+    as time went by, more layouts were added and the setup should be changed
+    to use different selectors for space, max-resize and alignment
+    (i.e. having more and more layout symbols makes things a bit confusing ...)
+
+    [see also:]
+	HorizontalPanelView
+	VariableVerticalPanel VariableHorizontalPanel
+	Label
+
+    [author:]
+	Claus Gittinger
+"
+!
+
+examples
+"
+    These examples demonstrate the effect of different layout
+    settings.
+    You should try more examples, combining spacing and different
+    verticalLayout:/horizontalLayout: combinations.
+
+
+    example: default layout (centered)
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'center (default)'.
+        p := VerticalPanelView in:v.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'b2' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+
+    example: rows
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'center (default)'.
+        p := VerticalPanelView in:v.
+        p rowHeight:50.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'b2' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+
+    example: horizontal centerMax
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'hL=centerMax'.
+        p := VerticalPanelView in:v.
+        p horizontalLayout:#centerMax.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'b2' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+
+    example: horizontal leftMax
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'hL=leftMax'.
+        p := VerticalPanelView in:v.
+        p horizontalLayout:#leftMax.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'b2' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: horizontal leftSpaceMax
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'hL=leftMax'.
+        p := VerticalPanelView in:v.
+        p horizontalLayout:#leftSpaceMax.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'b2' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: horizontal rightMax
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'hL=rightMax'.
+        p := VerticalPanelView in:v.
+        p horizontalLayout:#rightMax.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'b2' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: horizontal rightSpaceMax
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'hL=rightMaxSpace'.
+        p := VerticalPanelView in:v.
+        p horizontalLayout:#rightSpaceMax.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'b2' in:p.
+        b3 := Button label:'butt3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: top-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=top; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#top.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: topSpace-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=topSpace; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#topSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: top-layout; horizontal fit
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        p := VerticalPanelView in:v.
+        v label:'vL=top; hL=fit'.
+        p verticalLayout:#top.
+        p horizontalLayout:#fit.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: top-layout; horizontal fit with space
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=top; hL=fitSpace'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#top.
+        p horizontalLayout:#fitSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: topSpace-layout; horizontal fit with space
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=topSpace; hL=fitSpace'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#topSpace.
+        p horizontalLayout:#fitSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: bottom-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=bottom; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#bottom.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: bottomSpace-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=bottomSpace; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#bottomSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: topFit-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=topFit; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#topFit.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: topSpaceFit-layout; combined with horizontal #fitSpace
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=topFit; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#topSpaceFit.
+        p horizontalLayout:#fitSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: bottomFit-layout (arrange at bottom; resize first to fit)
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=bottomFit; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#bottomFit.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: bottomSpaceFit-layout (arrange at bottom; resize first to fit; with spacing
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=bottomSpaceFit; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#bottomSpaceFit.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: spread-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=spread; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#spread.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: spreadSpace-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=spreadSpace; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#spreadSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: fit-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=fit; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#fit.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: fitSpace-layout
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=fitSpace; hL=center (default)'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#fitSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: fully fitSpace
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=fitSpace; hL=fitSpace'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#fitSpace.
+        p horizontalLayout:#fitSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: combine fully fitSpace with scaling button labels
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=fitSpace; hL=fitSpace'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#fitSpace.
+        p horizontalLayout:#fitSpace.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b1 adjust:#fit.
+        b2 := Button label:'butt2' in:p.
+        b2 adjust:#fit.
+        b3 := Button label:'button3' in:p.
+        b3 adjust:#fit.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: from top, each at left:
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=top; hL=left'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#top.
+        p horizontalLayout:#left.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: center, right:
+                                                                        [exBegin]
+        |v p b1 b2 b3|
+
+        v := StandardSystemView new.
+        v label:'vL=center; hL=right'.
+        p := VerticalPanelView in:v.
+        p verticalLayout:#center.
+        p horizontalLayout:#right.
+        p origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+        b1 := Button label:'button1' in:p.
+        b2 := Button label:'butt2' in:p.
+        b3 := Button label:'button3' in:p.
+        v extent:100 @ 300.
+        v open
+                                                                        [exEnd]
+
+    example: a panel in a panel
+                                                                        [exBegin]
+        |v hp p b1 b2 b3|
+
+        v := StandardSystemView new.
+
+        hp := HorizontalPanelView in:v.
+        hp verticalLayout:#fit.
+        hp horizontalLayout:#fitSpace.
+        hp origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+
+        1 to:3 do:[:i |
+            p := VerticalPanelView in:hp.
+            p borderWidth:0.
+            p verticalLayout:#fitSpace.
+            p horizontalLayout:#fit.
+            b1 := Button label:('button1-' , i printString) in:p.
+            b2 := Button label:('butt2-' , i printString) in:p.
+            b3 := Button label:('button3-' , i printString) in:p.
+        ].
+
+        v extent:300 @ 100.
+        v open
+                                                                        [exEnd]
+
+    example: checkToggles in a panel
+                                                                        [exBegin]
+        |panel|
+
+        panel := VerticalPanelView new.
+        panel horizontalLayout:#left.
+
+        panel add:((CheckBox on:true asValue) label:'this is toggle number 1'; resize).
+        panel add:((CheckBox on:false asValue) label:'nr 2 '; resize).
+        panel add:((CheckBox on:true asValue) label:'number 3 '; resize).
+
+        panel extent:(panel preferredExtent).
+        panel open
+                                                                        [exEnd]
+    example: the topFit & bottomFit layouts are great to combine
+             labels or enterFields with a selectionInList or textView:
+                                                                        [exBegin]
+        |panel|
+
+        panel := VerticalPanelView new.
+        panel horizontalLayout:#fit.
+        panel verticalLayout:#topFit.
+
+        panel add:(Label new label:'this is label number 1'; font:(Font family:'courier' size:16)).
+        panel add:(EditField new).
+        panel add:(Label new label:'this is label number 1').
+        panel add:(ScrollableView for:SelectionInListView).
+
+        panel extent:(panel preferredExtent).
+        panel open
+                                                                        [exEnd]
+"
+! !
+
+!VerticalPanelView methodsFor:'accessing'!
+
+horizontalLayout
+    "return the horizontal layout as symbol.
+     the returned value is one of
+	#left           place element at the left
+	#leftSpace      place element at the left, offset by horizontalSpace
+	#center         place elements horizontally centered; ignore horizontalSpace
+	#right          place it at the right
+	#rightSpace     place it at the right, offset by horizontalSpace
+	#fit            resize elements horizontally to fit this panel; ignore horizontalSpace
+	#fitSpace       like #fit, but add spacing; ignore horizontalSpace
+
+	#leftMax        like #left, but resize elements to max of them
+	#leftSpaceMax   like #leftSpace, but resize elements
+	#centerMax      like #center, but resize elements
+	#rightMax       like #right, but resize elements to max of them
+	#rightSpaceMax  like #rightSpace, but resize elements
+      the default is #centered
+    "
+
+    ^ hLayout
+!
+
+horizontalLayout:aSymbol
+    "change the horizontal layout as symbol.
+     The argument, aSymbol must be one of:
+	#left           place element at the left
+	#leftSpace      place element at the left, offset by horizontalSpace
+	#center         place elements horizontally centered; ignore horizontalSpace
+	#right          place it at the right
+	#rightSpace     place it at the right, offset by horizontalSpace
+	#fit            resize elements horizontally to fit this panel; ignore horizontalSpace
+	#fitSpace       like #fit, but add spacing; ignore horizontalSpace
+
+	#leftMax        like #left, but resize elements to max of them
+	#leftSpaceMax   like #leftSpace, but resize elements
+	#centerMax      like #center, but resize elements
+	#rightMax       like #right, but resize elements to max of them
+	#rightSpaceMax  like #rightSpace, but resize elements
+      the default (if never changed) is #centered
+    "
+
+    (hLayout ~~ aSymbol) ifTrue:[
+	hLayout := aSymbol.
+	self layoutChanged
+    ]
+!
+
+layout:something
+    "OBSOLETE compatibility interface. Will vanish.
+     leftover for historic reasons - do not use any more.
+     In the meantime, try to figure out what is meant ... a kludge"
+
+    <resource:#obsolete>
+
+    something isLayout ifTrue:[^ super layout:something].
+
+    self obsoleteMethodWarning:'use #verticalLayout:'.
+    ^ self verticalLayout:something
+
+    "Modified: 31.8.1995 / 23:08:54 / claus"
+!
+
+rowHeight:something
+    rowHeight := something.
+!
+
+verticalLayout
+    "return the vertical layout as a symbol.
+     the returned value is one of
+	#top            arrange elements at the top
+	#topSpace       arrange elements at the top, start with spacing
+	#bottom         arrange elements at the bottom
+	#bottomSpace    arrange elements at the bottom, start with spacing
+	#center         arrange elements in the center; ignore verticalSpace
+	#spread         spread elements evenly; ignore verticalSpace
+	#spreadSpace    spread elements evenly with spacing at ends; ignore verticalSpace
+	#fit            like #spread, but resize elements for tight packing; ignore verticalSpace
+	#fitSpace       like #fit, with spacing; ignore verticalSpace
+	#topFit         like #top, but resize the last element to fit
+	#topSpaceFit    like #topSpace, but resize the last element to fit
+	#bottomFit      like #bottom, but resize the first element to fit
+	#bottomSpaceFit like #bottomSpace, but extend the first element to fit
+      the default is #centered
+    "
+
+    ^ vLayout
+
+    "Modified: 17.8.1997 / 15:20:13 / cg"
+!
+
+verticalLayout:aSymbol
+    "change the vertical layout as a symbol.
+     The argument, aSymbol must be one of:
+	#top            arrange elements at the top
+	#topSpace       arrange elements at the top, start with spacing
+	#bottom         arrange elements at the bottom
+	#bottomSpace    arrange elements at the bottom, start with spacing
+	#center         arrange elements in the center; ignore verticalSpace
+	#spread         spread elements evenly; ignore verticalSpace
+	#spreadSpace    spread elements evenly with spacing at ends; ignore verticalSpace
+	#fit            like #spread, but resize elements for tight packing; ignore verticalSpace
+	#fitSpace       like #fit, with spacing; ignore verticalSpace
+	#topFit         like #top, but resize the last element to fit
+	#topSpaceFit    like #topSpace, but resize the last element to fit
+	#bottomFit      like #bottom, but resize the first element to fit
+	#bottomSpaceFit like #bottomSpace, but extend the first element to fit
+      the default (if never changed) is #centered
+    "
+
+    (vLayout ~~ aSymbol) ifTrue:[
+	vLayout := aSymbol.
+	self layoutChanged
+    ]
+
+    "Modified: 17.8.1997 / 15:19:58 / cg"
+! !
+
+!VerticalPanelView methodsFor:'layout'!
+
+setChildPositions
+    "(re)compute position of every child"
+
+    |ypos space sumOfHeights numChilds l hEach hInside hL vL
+     maxWidth maxHeight resizeToMaxV resizeToMaxH m2 subViews restHeight y2 bw|
+
+    subViews := self subViewsToConsider.
+    subViews size == 0 ifTrue:[^ self].
+
+    bw := self borderWidth.
+
+"/    self extentChangedFlag ifTrue:[
+"/        ext := self computeExtent.
+"/        width := ext x.
+"/        height := ext y.
+"/    ].
+
+    space := verticalSpace.
+    numChilds := subViews size.
+
+    m2 := margin * 2.
+    hInside := height - m2 + (bw*2) - subViews last borderWidth.
+
+    hL := hLayout.
+    vL := vLayout.
+
+    resizeToMaxV := false.
+    (vL endsWith:'Max') ifTrue:[
+        resizeToMaxV := true.
+        hEach := maxHeight := subViews inject:0 into:[:maxSoFar :child | maxSoFar max:child heightIncludingBorder].
+        vL := (vL copyButLast:3) asSymbol.
+    ].
+
+    numChilds == 1 ifTrue:[
+        (vL == #topFit or:[vL == #bottomFit]) ifTrue:[
+            vL := #fit
+        ].
+        (vL == #topSpaceFit or:[vL == #bottomSpaceFit]) ifTrue:[
+            vL := #fitSpace
+        ].
+    ].
+
+    vL == #fitSpace ifTrue:[
+        "
+         adjust childs extents and set origins.
+         Be careful to avoid accumulation of rounding errors
+        "
+        hEach := (hInside - (numChilds + 1 * space)) / numChilds.
+        ypos := space + margin - bw.
+    ] ifFalse:[
+        vL == #fit ifTrue:[
+            "
+             adjust childs extents and set origins.
+             Be careful to avoid accumulation of rounding errors
+            "
+            hEach := (hInside - (numChilds - 1 * space)) / numChilds.
+            ypos := margin - bw.
+        ] ifFalse:[
+            l := vL.
+
+            "
+             compute net height needed
+            "
+            resizeToMaxV ifTrue:[
+                sumOfHeights := subViews inject:0 into:[:sumSoFar :child | sumSoFar + maxHeight + (child borderWidth*2)].
+            ] ifFalse:[
+                sumOfHeights := subViews inject:0 into:[:sumSoFar :child | sumSoFar + child heightIncludingBorder].
+
+                "/ adjust - do not include height of last(first) element if doing a fit
+                (vL == #topFit or:[vL == #topSpaceFit]) ifTrue:[
+                    sumOfHeights := sumOfHeights - subViews last heightIncludingBorder.
+                ] ifFalse:[
+                    (vL == #bottomFit or:[vL == #bottomSpaceFit]) ifTrue:[
+                        sumOfHeights := sumOfHeights - subViews first heightIncludingBorder.
+                    ]
+                ].
+            ].
+
+            restHeight := height - sumOfHeights "- (numChilds-1*space)".
+            ((l == #center) and:[numChilds == 1]) ifTrue:[l := #spread].
+            (l == #spread and:[numChilds == 1]) ifTrue:[l := #spreadSpace].
+
+            "
+             compute position of topmost subview and space between them;
+             if they do hardly fit, leave no space between them 
+            "
+            ((sumOfHeights > (height - m2))
+            and:[l ~~ #fixTopSpace and:[l ~~ #fixTop]]) ifTrue:[
+                "
+                 if we have not enough space for all the elements, 
+                 fill them tight, and show what can be shown (at least)
+                "
+                ypos := margin.
+                space := 0
+            ] ifFalse:[
+                l == #fixTopSpace ifTrue:[
+                    l := #topSpace
+                ] ifFalse:[
+                    l == #fixTop ifTrue:[
+                        l := #top 
+                    ]
+                ].
+                ((l == #bottom) or:[l == #bottomSpace
+                or:[l == #bottomFit or:[l == #bottomSpaceFit]]]) ifTrue:[
+                    ypos := restHeight - (space * (numChilds - 1)).
+"/
+"/                    bw == 0 ifTrue:[
+"/                        ypos := ypos + space 
+"/                    ].
+"/           
+                    (l == #bottomSpace
+                    or:[l == #bottomSpaceFit]) ifTrue:[
+                        ypos >= space ifTrue:[
+                            ypos := ypos - space
+                        ]
+                    ].
+                    ypos := ypos - margin.
+
+                    ypos < 0 ifTrue:[
+                        space := space min:(restHeight // (numChilds + 1)).
+                        ypos := restHeight - (space * numChilds).
+                    ].
+                    y2 := ypos.
+                ] ifFalse: [
+                    (l == #spread) ifTrue:[
+                        space := (restHeight - m2) // (numChilds - 1).
+                        ypos := margin.
+                        (space == 0) ifTrue:[
+                            ypos := restHeight // 2
+                        ]
+                    ] ifFalse: [
+                      (l == #spreadSpace) ifTrue:[
+                        space := (restHeight - m2) // (numChilds + 1).
+                        ypos := space + margin.
+                        (space == 0) ifTrue:[
+                            ypos := restHeight // 2
+                        ]
+                      ] ifFalse: [
+                        ((l == #top) or:[l == #topSpace
+                        or:[l == #topFit or:[l == #topSpaceFit]]]) ifTrue:[
+                            (l == #top or:[l == #topFit]) ifTrue:[
+                                space := space min:((restHeight - m2) // numChilds).
+                            ] ifFalse:[
+                                space := space min:((restHeight - m2) // (numChilds + 1)).
+                            ].
+                            (vL == #fixTop or:[vL == #fixTopSpace]) ifTrue:[
+                                space := space max:verticalSpace.
+                            ] ifFalse:[
+                                space := space max:0.
+                            ].
+                            (l == #topSpace or:[l == #topSpaceFit]) ifTrue:[
+                                ypos := space + margin.
+                            ] ifFalse:[
+                                "/
+                                "/ if the very first view has a 0-level AND
+                                "/ my level is non-zero, begin with margin
+                                "/
+                                true "(margin ~~ 0 and:[subViews first level == 0])" ifTrue:[
+                                    ypos := margin
+                                ] ifFalse:[
+                                    ypos := 0
+                                ]
+                            ]
+                        ] ifFalse:[
+                            "center"
+                            ypos := (restHeight - ((numChilds - 1) * space)) // 2.
+                            ypos < 0 ifTrue:[
+                                space := restHeight // (numChilds + 1).
+                                ypos := (restHeight - ((numChilds - 1) * space)) // 2.
+                            ]
+                        ]
+                      ]
+                    ]
+                ]
+            ].
+        ].
+    ].
+
+    resizeToMaxH := false.
+    (hL endsWith:'Max') ifTrue:[
+        resizeToMaxH := true.
+        maxWidth := subViews inject:0 into:[:maxSoFar :child | maxSoFar max:child widthIncludingBorder].
+        hL := (hL copyButLast:3) asSymbol.
+    ].
+
+    "
+     now set positions
+    "
+    subViews keysAndValuesDo:[:index :child |
+        |xpos advance bwChild wChild newWChild x2|
+
+        wChild := child widthIncludingBorder.
+        bwChild := child borderWidth.
+
+        elementsChangeSize ifTrue:[
+            "to avoid a recursion when we change the elements size"
+            child removeDependent:self.
+        ].
+        resizeToMaxH ifTrue:[
+            child width:(wChild := maxWidth - (bwChild  * 2)).
+        ].
+
+        hL == #left ifTrue:[
+            xpos := 0 - bw + margin.
+        ] ifFalse:[
+            hL == #leftSpace ifTrue:[
+                xpos := horizontalSpace + margin
+            ] ifFalse:[
+                hL == #right ifTrue:[
+                    xpos := width - wChild - margin
+                ] ifFalse:[
+                    hL == #rightSpace ifTrue:[
+                        xpos := width - horizontalSpace - wChild - margin.
+                    ] ifFalse:[
+                        hL == #fitSpace ifTrue:[
+                            xpos := horizontalSpace + margin.
+                            newWChild := width - m2 - (horizontalSpace + bwChild * 2)
+                        ] ifFalse:[
+                            hL == #fit ifTrue:[
+                                newWChild := width "- (bwChild * 2)".
+                                bw == 0 ifTrue:[
+                                    newWChild :=  newWChild - (bwChild * 2)
+                                ].
+                                true "child level == 0" ifTrue:[
+                                    xpos := margin - bw.
+                                    newWChild := newWChild - m2
+                                ] ifFalse:[
+                                    xpos := 0 - bw. 
+                                ].
+                            ] ifFalse:[
+                                "centered"
+                                 xpos := margin + ((width - m2 - wChild) // 2).
+                            ]
+                        ]
+                    ]
+                ]
+            ]
+        ].
+        newWChild notNil ifTrue:[
+            child width:newWChild
+        ].
+
+"/        (xpos < 0) ifTrue:[ xpos := 0 ].
+
+        x2 := xpos + child width - 1.
+
+        rowHeight notNil ifTrue:[
+            child origin:(xpos@ypos).
+            advance := rowHeight
+        ] ifFalse:[
+            (vL == #fit 
+            or:[vL == #fitSpace
+            or:[resizeToMaxV]]) ifTrue:[
+                child origin:(xpos @ (ypos rounded))
+                      corner:(x2 @ (ypos + hEach - bwChild - 1) rounded).
+                advance := hEach
+            ] ifFalse:[
+                child origin:(xpos@ypos).
+                advance := child heightIncludingBorder
+            ].
+        ].
+
+        index == numChilds ifTrue:[
+            |y|
+
+            (vL == #topFit or:[vL == #topSpaceFit]) ifTrue:[
+                y := height - margin - 1.
+                vL == #topSpaceFit ifTrue:[
+                    y := y - space
+                ].
+                child corner:x2 @ y
+            ].
+        ].
+        index == 1 ifTrue:[
+            (vL == #bottomFit or:[vL == #bottomSpaceFit]) ifTrue:[
+                ypos := margin + 0 + (child borderWidth * 2) - bw.
+                vL == #bottomSpaceFit ifTrue:[
+                    ypos := ypos + space
+                ].
+                advance := y2 ? 0.
+                child origin:((child origin x) @ ypos)
+                      corner:((child corner x) @ (ypos+advance))
+            ].
+        ].
+
+        ypos := ypos + advance + space.
+        elementsChangeSize ifTrue:[
+            "reinstall dependency that we removed above"
+            child addDependent:self.
+        ].
+    ]
+
+    "Modified: / 04-09-1995 / 18:43:29 / claus"
+    "Modified: / 10-10-2007 / 13:47:56 / cg"
+! !
+
+!VerticalPanelView methodsFor:'queries'!
+
+preferredExtent
+    "return a good extent, one that makes subviews fit"
+
+    |sumOfHeights maxWidth maxHeight m2 subViews bw|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    subViews := self subViewsToConsider.
+    (subViews size == 0) ifTrue:[
+        ^ super preferredExtent.
+        "/ ^ horizontalSpace @ verticalSpace].
+    ].
+
+    bw := self borderWidth.
+
+    "compute net height needed"
+
+    sumOfHeights := 0.
+    maxWidth := 0.
+    maxHeight := 0.
+
+    subViews do:[:child |
+        |childsPreference|
+
+        child realized ifTrue:[
+            childsPreference := child extent.
+        ] ifFalse:[
+            childsPreference := child preferredExtent.
+        ].
+        sumOfHeights := sumOfHeights + childsPreference y.
+        maxHeight := maxHeight max:childsPreference y.
+        maxWidth := maxWidth max:childsPreference x.
+
+"/        sumOfHeights := sumOfHeights + child heightIncludingBorder.
+"/        maxWidth := maxWidth max:(child widthIncludingBorder).
+"/        maxHeight := maxHeight max:(child heightIncludingBorder).
+    ].
+
+    bw ~~ 0 ifTrue:[
+        sumOfHeights := sumOfHeights + (verticalSpace * 2).
+        maxWidth := maxWidth + (horizontalSpace * 2).
+    ].
+
+    (vLayout == #fit or:[vLayout == #fitSpace]) ifTrue:[
+        sumOfHeights := maxHeight * subViews size.
+        bw ~~ 0 ifTrue:[
+            sumOfHeights := sumOfHeights + (verticalSpace * 2).
+        ].
+        vLayout == #fitSpace ifTrue:[
+            "/ care for spacing ...
+            sumOfHeights := sumOfHeights + (verticalSpace * (subViews size + 1)).
+        ].
+    ] ifFalse:[
+        sumOfHeights := sumOfHeights + ((subViews size - 1) * verticalSpace).
+        ((vLayout == #topSpace) or:[vLayout == #bottomSpace]) ifTrue:[
+            sumOfHeights := sumOfHeights + verticalSpace
+        ] ifFalse:[
+            ((vLayout == #center) or:[vLayout == #spread]) ifTrue:[
+                sumOfHeights := sumOfHeights + (verticalSpace * 2)
+            ]
+        ].
+    ].
+
+    ((hLayout == #leftSpace) or:[hLayout == #rightSpace]) ifTrue:[
+        maxWidth := maxWidth + horizontalSpace
+    ] ifFalse:[
+        ((hLayout == #fitSpace) or:[hLayout == #center]) ifTrue:[
+            maxWidth := maxWidth + (horizontalSpace * 2)
+        ]        
+    ].
+    m2 := margin * 2.
+    ^ (maxWidth + m2) @ (sumOfHeights + m2)
+
+    "Modified: / 17.1.1998 / 00:18:16 / cg"
+! !
+
+!VerticalPanelView class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VerticalPanelView.st,v 1.51 2013-04-25 13:09:54 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/VerticalPanelView.st,v 1.51 2013-04-25 13:09:54 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VistaToolbarIconLibrary.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,754 @@
+"
+ COPYRIGHT (c) 2008 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+XPToolbarIconLibrary subclass:#VistaToolbarIconLibrary
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Smalltalk'
+!
+
+!VistaToolbarIconLibrary class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2008 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    ToolbarIconLibrary := VistaToolbarIconLibrary
+
+    Notice and Warning:
+        only redefine existing icons here; never add ionly to here.
+        For every icon-method here, there MUST be a corresponding (albeit
+        possibly ugly) icon-method in GenericToolBarIcon.
+"
+! !
+
+!VistaToolbarIconLibrary class methodsFor:'image specs'!
+
+checkToggleOffDisabledIcon
+    "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 checkToggleOffDisabledIcon inspect
+     ImageEditor openOnClass:self andSelector:#checkToggleOffDisabledIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class checkToggleOffDisabledIcon'
+	ifAbsentPut:[(Depth4Image new) width: 13; height: 13; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'"H"H"H"H H&Y&YT,PXBI&Y%R1AFH"Y&UKDF; H&YH$F7L8BET$F7L@BA#DF7@@** HP[\J*&*(BK\0**)**@!!3B*)&Y& XLJ**Y&Y(B@**)&Y&ZD"H"H"H"H
+ @@a') ; colorMapFromArray:#[249 249 249 245 245 245 242 242 242 248 248 248 244 244 244 241 241 241 251 251 251 247 247 247 177 177 177 240 240 240 250 250 250 246 246 246 243 243 243]; yourself]
+!
+
+checkToggleOffEnteredIcon
+    "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 checkToggleOffEnteredIcon inspect
+     ImageEditor openOnClass:self andSelector:#checkToggleOffEnteredIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class checkToggleOffEnteredIcon'
+	ifAbsentPut:[(Depth24Image new) width: 13; height: 13; photometric:(#rgb); bitsPerSample:(#(8 8 8)); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
+UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#7/'':7/'':7/'':7/'':7/'':7/'':7/'':7/'':7/'':7/'':7/'':UXZ#UXZ#7/'':^\[9^\[9
+^\[9^\[9^\[9^\[9^\_9_L''9 L/97/'':UXZ#UXZ#7/'':^\[9,]?=,]?=,]?=,]?=-NG=->O=.>W= <;97/'':UXZ#UXZ#7/'':^\[9,]?=,]?=,-?=-^K=.^S=
+/^[=0N#=!!\?97/'':UXZ#UXZ#7/'':^\[9,.C=-NG=->K=.>W=/>_=0.''=1N+=$MS97/'':UXZ#UXZ#7/'':^<#9->O=.>W=/._=1N+=3^7=4N;=4.?=(=/:7/'':
+UXZ#UXZ#7/'':_,+9/^[=0^#=2N/=5_C>7_O>7/O>7_O>-NK;7/'':UXZ#UXZ#7/'': L390^#=2N/=4^?=7_O>8?W>9OW>8?W>/.[<7/'':UXZ#UXZ#7/'': <;9
+1>/=4^?=6_G>8/W>9?[>:O_>9?_>2N+<7/'':UXZ#UXZ#7/'':#MK9(]/:,^G;/^W<2^+<4.7=5N;=5N;=3>3=7/'':UXZ#UXZ#7/'':7/'':7/'':7/'':7/'':7/'':
+7/'':7/'':7/'':7/'':7/'':UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#') ; yourself]
+!
+
+checkToggleOffIcon
+    "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 checkToggleOffIcon inspect
+     ImageEditor openOnClass:self andSelector:#checkToggleOffIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class checkToggleOffIcon'
+	ifAbsentPut:[(Depth24Image new) width: 13; height: 13; photometric:(#rgb); bitsPerSample:(#(8 8 8)); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
+#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4#(>O#(>O=OS4++N9++N9
+++N9++N9++N9++N9+;R:-K&=.;;A=OS4#(>O#(>O=OS4++N92<?U2<?U2<?U2<?U4MOX5]#\6=7_0\OE=OS4#(>O#(>O=OS4++N92<?U2<?U3]GV4-WZ6M/^
+7]?!!8.O$1,_H=OS4#(>O#(>O=OS4++N93]GW4MSY5M_[6=7_8^K#9^[&:N#(3L7M=OS4#(>O#(>O=OS4,+^<5]#\6-3_8NG#:N#(;N3,;^7-;^7-5MWV=OS4
+#(>O#(>O=OS4.K.?7]?!!9NW%:.+*;>?/</K2</K2</K27M7^=OS4#(>O#(>O=OS4/K?B8>S%:^'');^7-</K2=OS4=_W5=OS48^K"=OS4#(>O#(>O=OS40,SF
+:^'');^7-<OC0=OS4=/[6=/[6=/[69.[&=OS4#(>O#(>O=OS42,/L5MSU6=/\8NG!!9._'':./+:>3,:>/,:^''*=OS4#(>O#(>O=OS4=OS4=OS4=OS4=OS4=OS4
+=OS4=OS4=OS4=OS4=OS4#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O') ; yourself]
+!
+
+checkToggleOnDisabledIcon
+    "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 checkToggleOnDisabledIcon inspect
+     ImageEditor openOnClass:self andSelector:#checkToggleOnDisabledIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class checkToggleOnDisabledIcon'
+	ifAbsentPut:[(Depth24Image new) width: 13; height: 13; photometric:(#rgb); bitsPerSample:(#(8 8 8)); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
+#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O>_''9>_''9>_''9>_''9>_''9>_''9>_''9>?/;?O3<>/+:>_''9#(>O#(>O>_''96M#X6M#X
+6M#X6M#X6M#X9^W%4-KR0,KB;.;.>/+:#(>O#(>O>_''96M#X9.[&9.[&9.[&9>_''=/[6-KR4+J2,7-;^>/+:#(>O#(>O>_''96M#X9.[&9.[&9>_''<OC06=/[
++J2,.+*:<?O3>_''9#(>O#(>O>_''96M#X:>/+<OC0:>/+>O#8-;^7+Z6-8NC ;^7->_''9#(>O#(>O>_''98>O#9.[&5-[V=/[67=?_+*:..+*:>?/;:.+*>_''9
+#(>O#(>O>_''9;>?//+:>+Z6-:^'').;.;+:>/7-;^>/+:;^7->_''9#(>O#(>O>_''99.[&;>?/+Z6-+*:.+:>/.K"8>?/;>_''9<OC0>_''9#(>O#(>O>_''98>O#
+=_W52</K+*:.+:>/6=/[?O3<>/+:</K2>_''9#(>O#(>O>_''99NS$;N3,<OC02</K3\7M>_''9=_W5=_W5=OS4>_''9#(>O#(>O>_''9>_''9>_''9>/+:?O3<>?/;
+>/+:>_''9>_''9>_''9>_''9#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O') ; yourself]
+!
+
+checkToggleOnEnteredIcon
+    "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 checkToggleOnEnteredIcon inspect
+     ImageEditor openOnClass:self andSelector:#checkToggleOnEnteredIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class checkToggleOnEnteredIcon'
+	ifAbsentPut:[(Depth24Image new) width: 13; height: 13; photometric:(#rgb); bitsPerSample:(#(8 8 8)); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
+UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#7/'':7/'':7/'':7/'':7/'':7/'':7/'':;O3<<?7=9/+;7/'':UXZ#UXZ#7/'':^\[9^\[9
+^\[9^\[9^\[9.NG<%ZGCWWB#:.738_'':UXZ#UXZ#7/'':^\[9,]?=,]?=,]?=,>C=>_+<H#2BABI1-[;U:O/;UXZ#UXZ#7/'':^\[9,]?=,]?=,-?=5.?>''*''H
+ABI1LD&J:__>7/'':UXZ#UXZ#7/'':^\[91N_=5.?>..O=?O3=I4FEABI1*[SO/.[;7/'':UXZ#UXZ#7/'':*-/;1L/^#I*>9OW>)+GMABI1J$RG?O3=)M/:7/'':
+UXZ#UXZ#7/'':8_O>O5ZRABI11L/^KTZHABI1''*''H;O#>-NK;7/'':UXZ#UXZ#7/'':+];;7NC+ABI1ABI1ABI1H#2B>_+<9OW>/.[<7/'':UXZ#UXZ#7/'':#]K9
+:.73X''V&ABI1ABI1$)?A<?/>9?_>2N+<7/'':UXZ#UXZ#7/'':#MK9-^O;8^W.ZG**Z76+=/_:5.?=5N;=3>3=7/'':UXZ#UXZ#7/'':7/'':7/'':9O+;</7=<_7=
+9O+;7/'':7/'':7/'':7/'':UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#UXZ#') ; yourself]
+!
+
+checkToggleOnIcon
+    "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 checkToggleOnIcon inspect
+     ImageEditor openOnClass:self andSelector:#checkToggleOnIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class checkToggleOnIcon'
+	ifAbsentPut:[(Depth24Image new) width: 13; height: 13; photometric:(#rgb); bitsPerSample:(#(8 8 8)); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
+#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O=OS4=OS4=OS4=OS4=OS4=OS4=OS4>O#8>_''9=/[6=OS4#(>O#(>O=OS4++N9++N9
+++N9++N9++N92\3P''Z_@]8Z+7M?$=_W5#(>O#(>O=OS4++N92<?U2<?U2<?U3MCV;^;1U6*]QE*R.[?P=/[6#(>O#(>O=OS4++N92<?U2<?U3]GV8NK&+;#O
+QU*RYW^%9>_(=OS4#(>O#(>O=OS4++N95]'']7>K%5]#\</O4W''F!!Q52T/LOV6=3\=OS4#(>O#(>O=OS41\''M2\?](:;H;^;..,GURU:VYGZ%>O#85]WV=OS4
+#(>O#(>O=OS47.C!![''>*Q52T3=S"Y7"''R6BW-;?U=/[67M7^=OS4#(>O#(>O=OS43\?Q7.G)RE6URU>VR6BWXWN$>O'':=OS48^K"=OS4#(>O#(>O=OS41,#J
+:.30"9&;R%>WSFFX,K''Q>_''9=/[69.[&=OS4#(>O#(>O=OS42,/L6-+[7>K)#I&:$I6=</O6;N7-:>/,:^''*=OS4#(>O#(>O=OS4=OS4=OS4=_W5>_''9>O#8
+=_W5=OS4=OS4=OS4=OS4#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O#(>O') ; yourself]
+!
+
+scrollDownActiveIcon
+    "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 scrollDownActiveIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollDownActiveIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollDownActiveIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ADWEAPTEAPTEAPTEAP)D A@O"H,M#X6@PDARQX=LB$@EBH!!O4!!HRDUEQT<%C3DT@AP,O0)QQ4\EAPTEAB4&E@@TM$!!QG" (SD1LSA%AS!!P@ECYHQ1<VE"\''
+I2\;ID8T@AP6RAXHJ L.P4QMGA1NE@@TM$ _E# GB1 BN2P$S!!P@ECYHJA<VP#$<I2=APT8T@AP6RB (G1<ZI1,YPTENE@@TM$ (JB (F1-LFTEAS!!P@ECX4
+Q2 (JD1LSD0YM48T@AQJL3IPTE@YFQ$YH4-NE@@TMTXSGQ4]PTEAM4,NS!!P@CP$ @ATUET9NS$9NS!!@+@C(MEAPTEAPTEAPTEAPLA @a') ; colorMapFromArray:#[203 226 236 211 239 250 69 137 173 105 160 189 111 201 239 131 209 242 152 178 198 30 75 99 35 88 116 189 217 232 198 234 249 50 125 165 64 116 156 79 126 162 98 177 211 109 198 235 139 179 201 153 177 195 162 186 204 171 219 239 24 89 138 201 224 234 204 236 250 64 114 153 80 144 178 108 196 233 18 46 61 141 213 243 157 211 233 170 217 236 176 225 247 192 231 249 206 231 241 221 243 251 238 249 253 105 192 228 134 201 228 138 212 243 161 203 221 163 221 245 175 225 247 43 94 132 49 123 162 60 112 152 234 247 253 104 190 226 130 176 200 139 208 238 157 201 223 167 211 230 175 225 246 190 231 248 201 235 249 218 241 251 231 246 252 102 185 220 14 34 45 22 55 72 163 183 199 161 217 241 37 94 124 189 230 248 204 222 233 211 239 251 69 120 158 102 186 221 13 31 41 145 185 207 157 193 212 159 220 245 174 223 244 186 229 248 202 236 249 211 238 250 227 244 252 100 182 216 111 202 240 143 184 206 158 199 217 158 219 245 173 222 243 187 230 248]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?=??7??_?=??7??_?=??7??_?=??7??_?=??7??_?<b') ; yourself); yourself]
+!
+
+scrollDownOffEntered1Icon
+    "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 scrollDownOffEntered1Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollDownOffEntered1Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollDownOffEntered1Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@A8QC@4MCP4MCP4MCP4PE @QLTIBP$EAN#$8MSL.IA@@BTIBPS8=OCD.KR,%F2XN@@%APS<<N3$-J"$&G1($C @IPS<=N3$6J"\%H!!8YI@8@BTD?OS8?OSP1
+LB8,FRPN@@%AO34EA1TXG"H]JQ$$C @IPS<=O0DDB@<LKB0YI@8@BTD?OS0=@@LFK"X&FRPN@@%AO349N3PBLB$^G!!$$C @IPS<=N3$6K3D,H!!8YI@8@BTD?
+OS,9M"(''IRH^FRPN@@%AO309NCP)I"P!!GA $C @IO309MSP2I"P!!G!!,WI@8@D3D=N3$9NB4+J"$(I!!<T@B@SB (JB (KB ,KB0,RH0@a') ; colorMapFromArray:#[52 52 50 56 56 60 68 70 70 80 78 80 100 100 100 112 112 110 120 118 120 144 144 140 148 146 150 152 152 150 152 154 150 156 154 150 156 158 160 160 158 160 160 160 160 164 162 160 164 166 170 168 168 170 172 170 170 172 172 170 172 174 170 176 178 180 188 188 190 188 190 190 192 192 190 192 192 200 192 194 200 196 196 200 196 198 200 200 198 200 200 200 200 200 202 200 204 204 200 204 204 210 204 206 210 208 206 210 208 208 210 208 210 210 212 212 210 212 214 220 216 214 220 216 216 220 216 218 220 220 218 220 220 220 220 220 222 220 224 224 230 224 226 230 228 226 230 228 228 230 228 230 230 232 230 230 232 232 230 232 234 230 232 234 240 236 234 230 236 234 240 236 236 240 236 238 240 240 238 240 240 240 240 240 242 240 244 242 240 244 244 240 244 244 250 244 246 250 248 246 250]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?=??7??_?=??7??_?=??7??_?=??7??_?=??7??_?<b') ; yourself); yourself]
+!
+
+scrollDownOffEntered2Icon
+    "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 scrollDownOffEntered2Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollDownOffEntered2Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollDownOffEntered2Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@A<NBP$IBP$IBP$IBP$KGP@PN41KR4-KRT%IRT%HM@,@BT1EP#<?O28.K"4(HDDI@@%KP#48NC &I"X&H!!,:BP@IR3<8M#X6H2L#H18ZM0$@BT,?NC1@PB</
+K2<,F#\I@@%KO3 EA1DSEQ$TJ1(7BP@IR3<8P@DDB@0JKBTZM0$@BT,?NC1@@@LFK2\ZF#\I@@%KO3 6OB<BK2(^F!!(7BP@IR3<8M#X6J"<*H18ZM0$@BT,?
+NCX6M"L#H2L^FC\I@@%KNST2L#H^G!!8^GA\7BP@IR#L1LC@0F!!(ZFA\VM0$@D#9GQ$QDQC\7M3\7M2$M@BPRBP$IBP$IBP$IBP$OHP@a') ; colorMapFromArray:#[12 38 52 13 41 57 17 56 76 20 66 91 28 91 124 32 106 145 34 113 155 45 148 203 46 151 207 60 127 177 66 161 212 71 123 162 76 166 214 89 143 184 92 144 183 93 147 188 97 149 188 103 179 220 105 154 191 128 192 226 141 198 229 143 199 229 148 192 216 152 198 222 155 201 226 155 205 232 156 202 227 159 206 232 160 208 233 162 186 204 164 213 239 166 191 209 166 215 241 167 194 214 168 218 245 169 219 246 174 195 211 177 213 233 181 224 247 183 222 242 185 226 248 187 202 213 187 227 248 192 221 237 197 228 245 197 231 249 198 231 249 200 232 249 207 229 242 209 231 244 211 235 247 212 236 248 213 226 235 213 237 250 214 238 251 219 221 223 220 240 251 222 241 252 223 225 227 223 234 242 223 242 252 226 242 252 227 235 241 227 244 252 229 244 252 231 234 236 233 246 253 234 234 234 238 239 240 238 248 253 240 240 242 244 245 246 250 252 254 251 253 254 253 253 255 253 254 255 254 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?=??7??_?=??7??_?=??7??_?=??7??_?=??7??_?<b') ; yourself); yourself]
+!
+
+scrollDownOffIcon
+    "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 scrollDownOffIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollDownOffIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollDownOffIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@DB@0LC@0LC@0LC@0PEA @A@ LC@0LC@0LC@0LDAPX@@PHC@0LC@0LC@0LCA@TF@@DB@0LC@0LC@0LC@0PEA @A@ LC@0LC@0LC@0LDAPX@@PHCAP HB@ H
+B@ GA@TF@@DB@0 RD1PUE!!\XB@PEA @A@ LEB@4NC1@QB@\DAPX@@PHC@0THB ,LB@\CA@TF@@DB@0LCAP IB@\C@0PEA @A@ LC@0LGB@\C@0LDAPX@@PHC
+@0LC@0LC@0LCA@TF@@DB@0LC@0LC@0LC@0PEA @A@ LC@0LC@0LC@0LDAPX@@PHC@0LC@0LC@0LCA@TF@@DB@0LC@0LC@0LC@0PEA @a') ; colorMapFromArray:#[228 228 230 232 232 230 236 238 240 240 240 240 240 242 240 244 242 240 236 234 230 244 244 240 244 246 250 44 46 50 32 30 30 52 54 50 92 92 90 32 34 30 72 74 70 120 122 120 140 140 140 136 134 130 84 86 90 120 120 120 156 158 160 176 174 170 184 184 180 192 192 190 184 182 180]; yourself]
+!
+
+scrollLeftActiveIcon
+    "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 scrollLeftActiveIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollLeftActiveIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollLeftActiveIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@BHIK2</K2</K2</K2</BQ!!QI2$3Q4]GQ4]GQ4\TQ"T2K2$<GQHRD!!HRD!!HGS!!AOK2<3GQ0[DQDGT@\QDT4.I"</Q1H[NTL:N2P;
+P4LZNC@/K4\RDTL:N3UEN4MCF# 0K2=GD!!D:N3<#@C-CP1(8LB</D1$MP!!]@LR-B@PDVO L/K1LYCP9BAQ=JP DAE#8CK2<SFP4AC$H^R4HA@QX>@2</B@<M
+@PDNP IB@PDVM@L/K3,6RQXVE"0DKAXVHD CK2<FCB(>O#8>O#8>MD K@2<=PT07@0LC@0LC@0LC@2EDKR /K2</K2</K2</K2=DB @a') ; colorMapFromArray:#[105 160 189 111 202 240 143 184 206 158 199 217 161 217 241 37 94 124 188 230 248 201 235 249 211 238 250 69 120 158 104 128 146 98 177 211 109 198 235 131 209 242 141 213 243 158 219 245 174 223 244 186 229 248 202 236 249 211 239 250 227 244 252 248 248 248 108 196 233 18 46 61 153 177 195 159 220 245 173 222 243 187 230 248 198 234 249 210 239 251 69 137 173 80 144 178 105 192 228 139 179 201 152 176 194 30 75 99 35 88 116 189 217 232 203 226 236 210 227 237 66 117 155 238 249 253 104 190 226 130 176 200 139 208 238 162 186 204 171 219 239 24 89 138 201 224 234 50 125 165 64 115 153 234 247 253 102 185 220 14 34 45 138 212 243 161 203 221 170 217 236 176 225 247 192 231 249 204 236 250 221 243 251 72 123 161 102 186 221 13 31 41 22 55 72 154 197 220 163 221 245 175 225 247 43 94 132 49 123 162 218 241 251 231 246 252 100 182 216 111 201 239 145 185 207 157 193 212 167 211 230 175 225 246 190 231 248 206 231 241 211 238 251 70 121 159]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C???????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollLeftOffEntered1Icon
+    "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 scrollLeftOffEntered1Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollLeftOffEntered1Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollLeftOffEntered1Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@=NC@1ZV%)ZC@0LC@0LS =NUQ 2L#H2L#H2L#H2L!!QNSVXKL"T%IRT>O#8>VD($L4AYL&TWE1\2Y#HWE2Q$U2]@B5 $U5]XL (2
+U5]$X3@''PCH1U1X$R08&R1XVBQT0I4@%OQX=VA-HJE <O@ ;RR]@H2EGH%@^FT<"NS% T"@''PC0.D3(/S@@*K0TEG2,SI4AVQ5MEXP\ZQ@]EQQE^Q"]@B@X8
+M3\-K$L.M3]^GV@''PFIE@14]GQ=TG14]M HRI4@:WQ1BP$IBP$IBMR%\KB]ATQ=_J2,+J2,+J2,+J1@@ACPMCP4MCP4MCP4MCP5[@P@a') ; colorMapFromArray:#[162 162 162 185 185 185 191 191 195 197 197 201 207 207 207 210 210 213 215 215 218 224 224 226 230 230 231 232 233 234 112 112 112 243 243 244 148 148 148 158 158 158 55 55 55 195 195 195 198 198 200 203 204 207 210 211 212 215 215 217 226 226 226 229 230 231 234 234 235 240 240 240 244 244 244 146 146 146 157 157 157 51 51 51 190 190 193 196 196 199 78 78 78 208 208 211 217 218 218 224 224 225 229 229 230 233 233 234 238 238 239 242 242 243 144 144 144 155 155 155 177 177 177 187 187 191 199 199 199 204 204 206 209 209 210 213 213 216 221 221 223 226 226 228 234 234 234 238 239 240 243 243 243 153 153 153 174 174 174 188 188 192 194 194 198 202 202 205 207 207 210 214 214 216 220 220 222 228 228 229 232 232 233 237 237 238 241 241 242 248 248 248 151 151 151 171 171 171 188 189 192 198 198 198 205 205 205 206 206 209 214 214 215 218 218 220 100 100 100 233 233 233 238 238 238 242 242 242 118 118 118 150 150 150 165 165 165 191 191 191 69 69 69 202 202 203 207 208 210 211 211 214 217 217 219 228 228 228 231 231 232 236 236 237 240 240 241 244 244 245 149 149 149 164 164 164 186 186 190 192 192 196 200 200 203 205 205 208 212 212 214 216 216 219 226 227 228 231 232 233 234 234 236 241 241 241 245 245 245]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C???????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollLeftOffEntered2Icon
+    "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 scrollLeftOffEntered2Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollLeftOffEntered2Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollLeftOffEntered2Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@CH0F!!(ZF!!(ZF!!(ZF!!(ZLB &H3$/K2</K2</K2</IQ@@F#$.BDEAPTEAPTEAFQ $HQ(/BD,,KB07SC\,K@X5NBDZK4D,R$("KQX-
+R$(+RQD!!F"=AKD("KPE@KT)JJ4$QHQ(/PR0"KP(LD25JR"-IDRDZBQ\DC#,TM$TNJR$CQ#<!!F $WACPNRD4]C"$)@4X?HQ(IE0P)M@8[O@8)JPMFO2DZBR@D
+JR$4C#DNJR$C@#<!!F $>L0LC@04*CPLCG ,?HQ)CQ1UFQ$YFQ$YF@ ,''O2D\AP\OO3<?O3<?O3<?O1=BOTP!!HRD!!HRD!!HRD!!HREBN @a') ; colorMapFromArray:#[92 144 183 13 41 57 155 201 226 164 213 239 181 224 247 207 222 233 213 237 250 231 234 236 232 246 253 251 253 254 12 38 52 152 198 222 28 91 124 183 222 242 200 232 249 223 225 227 227 235 241 238 239 240 248 248 248 103 179 220 20 66 91 159 206 232 32 106 145 198 231 249 212 236 248 222 241 252 60 127 177 66 161 212 100 152 191 143 199 229 160 208 233 187 202 213 197 231 249 52 110 153 223 242 252 229 237 245 244 245 246 253 253 255 98 150 189 148 192 216 166 191 209 169 219 246 197 228 245 211 235 247 220 240 251 229 244 252 238 248 253 253 254 255 97 149 188 141 198 229 165 190 208 168 218 245 187 227 248 209 231 244 46 151 207 227 243 252 240 240 242 254 255 255 117 142 160 17 56 76 155 205 232 176 200 218 185 226 248 219 221 223 45 148 203 227 244 252 71 123 162 250 252 254 94 146 185 128 192 226 156 202 227 166 215 241 34 113 155 207 229 242 214 238 251 225 242 252 233 245 252 76 166 214]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C???????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollLeftOffIcon
+    "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 scrollLeftOffIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollLeftOffIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollLeftOffIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@DA@PDA@PDA@PDA@PDA@PDB@ HB@ HB@ HB@ HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LCAP E@0LC@0LC@0LC@0LEBAHH
+B@LC@0LC@0LC@0LEB@4SB@ C@0LC@0LC@0LCB@(NE@ H@0LC@0LC@0LC@0$KC1THB@LC@0LC@0LC@0LHCA@VB@ C@0LC@0LC@0LCA0 QE0 H@0LC@0LC@0LC
+@0LGBA HB@LC@0LC@0LC@0LC@0LGB@\C@0LC@0PDA@PDA@PDA@PDA@PDA@PEAPTEAPTEAPTEAPTEAPTEA XFA XFA XFA XFA XFA @a') ; colorMapFromArray:#[228 228 230 232 232 230 236 238 240 240 240 240 240 242 240 244 242 240 236 234 230 244 244 240 244 246 250 44 46 50 32 30 30 52 54 50 92 92 90 32 34 30 72 74 70 120 122 120 140 140 140 136 134 130 84 86 90 120 120 120 156 158 160 176 174 170 184 184 180 192 192 190 184 182 180]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollRightActiveIcon
+    "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 scrollRightActiveIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollRightActiveIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollRightActiveIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@H/R$)JR$)JR$)JR$)JK0H/K$PID1LSD1LSD1L&ST@9R$QCIQDQDQDQDQDGDB-LR$(IIRP,H0\HA2L#H2HDKT)JD1D,C1%BE$IK
+FQ$5C#]JR!!LQH1$YP#IIP$,YMP87R$(SDRLYFTH2AQ-BR3TNM4)JGC8L@PDXJC KOA ^@A]JR!!0>C@DAFB@''O1 3G @WR$(\O 0A@Q 6CQ 3@Q8@E4)JD#PL
+@PDXN!! 3@PD^QQ]JR$IGQ!!8^OR(=G!!8^LP(WR$(ZES,@@@@@@@@@QP(TE4)NJRDCE1\WE1\WE1\WE1<FRA5JR$)JR$)JR$)JR$)A@ @a') ; colorMapFromArray:#[102 186 221 111 202 240 150 173 191 161 203 221 171 219 239 39 98 129 43 93 131 201 235 249 211 238 251 234 247 253 100 182 216 124 172 197 131 209 242 157 193 212 170 217 236 176 225 247 190 231 248 202 236 249 210 238 250 231 246 252 98 177 211 109 198 235 20 50 65 158 199 217 163 221 245 175 225 247 188 230 248 48 121 159 211 239 250 72 120 156 108 196 233 139 179 201 25 62 82 167 211 230 175 225 246 186 229 248 198 234 249 210 239 251 227 244 252 117 167 194 17 42 55 149 192 216 161 217 241 174 223 244 187 230 248 203 226 236 210 227 237 68 119 157 248 248 248 105 192 228 15 38 50 141 213 243 158 219 245 173 222 243 42 105 139 201 224 234 50 125 165 63 114 152 80 144 178 104 190 226 129 175 200 139 208 238 159 220 245 176 205 220 189 217 232 43 94 132 204 236 250 221 243 251 238 249 253 102 185 220 111 201 239 138 212 243 164 186 202 35 88 116 24 89 138 192 231 249 206 231 241 218 241 251 77 125 161]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C???????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollRightOffEntered1Icon
+    "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 scrollRightOffEntered1Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollRightOffEntered1Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollRightOffEntered1Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@DP5I2\''I2\''I2\''I2\''MTP[U3MMST5MST5MST5MY1T(F!!%MSU)ZV%)ZV%(XB40?CP@YSQ %IT@LPBT%IS<>B @@L0,?B )@DD@2
+B (>E$,@@CM&B#8>FDMYFC<>BRMX@@AMI#9%YRUCV4D%B#AJBP@@I@!!#UUT=JSQPM#4:NRD@@A\<N24-YFE]HFQVAQD.@@@1X1MFQ"INNBHTQ P+A @@BR8_
+G!!9IS4%"G!!8+@4 @@C4,QQ4]NP\9GQ4]W3]T@@@/J%8OC0<OC0<OTPH\D @ADQ= T5MST5MST5MST5IBQ09\WE1\WE1\WE1\WE1BQ@@a') ; colorMapFromArray:#[158 158 158 177 177 177 190 190 194 199 199 202 206 207 210 211 211 214 217 217 218 219 219 221 226 226 228 234 234 235 238 238 239 242 242 243 246 246 247 157 157 157 175 175 175 191 192 195 73 73 73 207 207 209 212 212 213 214 214 217 218 219 221 228 228 228 233 233 234 236 236 238 243 243 243 247 247 247 156 156 156 171 171 171 189 189 192 198 199 202 204 204 208 210 210 213 216 216 216 220 220 221 225 226 228 231 231 233 238 238 238 241 241 242 239 239 240 151 151 151 169 169 169 63 63 63 195 195 199 203 203 206 209 209 212 213 213 216 218 218 220 225 225 226 232 232 233 235 236 236 242 242 242 246 246 246 146 146 146 167 167 167 190 190 190 194 194 198 205 205 205 210 211 213 214 215 217 217 217 220 224 224 226 231 231 232 236 236 237 240 240 241 244 244 245 142 142 142 165 165 165 60 60 60 198 198 198 200 200 204 208 209 212 212 212 212 215 215 217 222 222 225 229 229 231 236 236 236 240 240 240 245 245 245 128 128 128 162 162 162 187 187 187 191 191 195 201 201 202 206 206 209 213 214 215 217 217 219 222 222 224 231 231 231 235 235 236 112 112 112 243 243 244 121 121 121 160 160 160 184 184 184 192 193 196 197 197 201 208 208 210 86 86 86 215 215 218 221 221 223 228 228 230 233 233 235 240 241 241 244 244 244]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C???????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollRightOffEntered2Icon
+    "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 scrollRightOffEntered2Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollRightOffEntered2Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollRightOffEntered2Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@A4HQ4]GQ4]GQ4]GQ4]GBA4HA"P[F1,[F1,[F1,[DS4RQ2PPMRH"H"H"H"H"Q$TGAD\[MR,NC!!$,FP8NC#LWF QGF2HNHRDOBP<E
+HRDMJS8DQ1,"C"D!!C2TBC0T!!CR$>AD\[H 8!!HP<%G2(OAP4)O QGO3,:G!!82D1 .GCIBI"@DQ3<;N!!8^L# 7ESH(P"X AD\?N3(^G#IDECH(G$H&H@QGO0L:
+G!!82M#H(G!!9BK2@DQ3<1I4IBP01CP$IBB$D AD\-NPD&I"X&I"X&K4D@H@Q@E#P<HB@ HB@ HB@ H@,#LD$DA@PDA@PDA@PDA@P#GP@a') ; colorMapFromArray:#[148 192 216 159 206 232 32 106 145 197 231 249 52 110 153 223 242 252 229 237 245 244 245 246 96 148 187 18 60 82 160 208 233 187 202 213 197 228 245 211 235 247 220 240 251 229 244 252 238 248 253 253 253 255 91 143 182 15 50 69 155 205 232 175 215 237 200 217 230 209 231 244 46 151 207 227 243 252 240 240 242 253 254 255 126 191 225 163 187 206 169 219 246 36 118 162 219 221 223 214 238 251 227 244 252 71 123 162 254 255 255 14 46 63 156 202 227 168 218 245 187 227 248 207 229 242 44 146 200 225 242 252 233 245 252 250 252 254 121 189 224 155 201 226 176 198 215 185 226 248 200 232 249 213 237 250 231 234 236 232 246 253 76 166 214 114 185 223 23 75 103 166 215 241 181 224 247 198 231 249 223 225 227 227 235 241 238 239 240 251 253 254 103 153 190 152 198 222 164 213 239 183 222 242 39 127 175 212 236 248 222 241 252 60 127 177 248 248 248 98 148 185]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C???????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollRightOffIcon
+    "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 scrollRightOffIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollRightOffIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollRightOffIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@DA@PDA@PDA@PDA@PDA@PDB@ HB@ HB@ HB@ HB@ HB@0LC@0LC@0LC@0LC@0LC@0LC@0LCAP E@0LC@0LC@0LC@0LC@0 RB@TC
+@0LC@0LC@0LC@0LHD04HAPLC@0LC@0LC@0LCBAPNB  G@0LC@0LC@0LC@0 UC0,IB@LC@0LC@0LC@0LHE!!@LB@\C@0LC@0LC@0LCBA\QB@\C@0LC@0LC@0LC
+@0 XB@\C@0LC@0LC@0LC@0LGB@\C@0LC@0LC@0PDA@PDA@PDA@PDA@PDA@PEAPTEAPTEAPTEAPTEAPTEA XFA XFA XFA XFA XFA @a') ; colorMapFromArray:#[228 228 230 232 232 230 236 238 240 240 240 240 240 242 240 244 242 240 236 234 230 244 244 240 244 246 250 44 46 50 32 30 30 52 54 50 92 92 90 32 34 30 72 74 70 120 122 120 140 140 140 136 134 130 84 86 90 120 120 120 156 158 160 176 174 170 184 184 180 192 192 190 184 182 180]; mask:((ImageMask new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????????????????????????????????????<b') ; yourself); yourself]
+!
+
+scrollUpActiveIcon
+    "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 scrollUpActiveIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollUpActiveIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollUpActiveIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@C(MEAPTEAPTEAPTEAPLA @MO"H,M#X6@PDARQX=LB,@EBH!!O4!!HRDUEQT<%C3DT@AP,O0)QQ4\EAPTEAB4&E@@TM$!!QG" (SD1LSA%AS!!P@ECYHJB (JA,[
+SA%APT8T@AP6RB (G1<ZI1,YPTENE@@TM$ (G1YBNS0''K4EAS!!P@ECYHG1X8A0,X@#,$ID8T@AP6RAXHJ L.P4QMGA1NE@@TM$!!GG1XVI2\''I3,$S!!P@ECX4
+Q2 (JD1LSD0YM48T@AQJL3IPTE@YFQ$YH4-NE@@TMTXSGQ4]PTEAM4,NS!!P@P@$ @ATUET9NS$9NS!!@)@ADWEAPTEAPTEAPTEAP)D @a') ; colorMapFromArray:#[203 226 236 211 239 250 69 137 173 105 160 189 111 201 239 131 209 242 152 178 198 30 75 99 35 88 116 189 217 232 198 234 249 50 125 165 64 116 156 79 126 162 98 177 211 109 198 235 139 179 201 153 177 195 162 186 204 171 219 239 24 89 138 201 224 234 204 236 250 64 114 153 80 144 178 108 196 233 18 46 61 141 213 243 157 211 233 170 217 236 176 225 247 192 231 249 206 231 241 221 243 251 238 249 253 105 192 228 134 201 228 138 212 243 161 203 221 163 221 245 175 225 247 43 94 132 49 123 162 60 112 152 234 247 253 104 190 226 130 176 200 139 208 238 157 201 223 167 211 230 175 225 246 190 231 248 201 235 249 218 241 251 231 246 252 102 185 220 14 34 45 22 55 72 163 183 199 161 217 241 37 94 124 189 230 248 204 222 233 211 239 251 69 120 158 102 186 221 13 31 41 145 185 207 157 193 212 159 220 245 174 223 244 186 229 248 202 236 249 211 238 250 227 244 252 100 182 216 111 202 240 143 184 206 158 199 217 158 219 245 173 222 243 187 230 248]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?=??7??_?=??7??_?=??7??_?=??7??_?=??7??_?<b') ; yourself); yourself]
+!
+
+scrollUpOffEntered1Icon
+    "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 scrollUpOffEntered1Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollUpOffEntered1Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollUpOffEntered1Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@B@SB (JB (KB ,KB0,RH0@SLTIBP$EAN#$8MSL.IAP@BTIBPS8=OCD.KR,%F2XN@@%APS<<N3$-J"$&G1($C @IPS<=N3$6J"\%H!!8YI@8@BTD?OS,9M"<1
+KBH^FRPN@@%AO349N3PBLB$^G!!$$C @IPS<=OC4@@0X.I"XYI@8@BTD?OS<AA@ OCB0,FRPN@@%AO34EA1TXG"H]JQ$$C @IPS<=O#<=MCD0K"0YI@8@BTD?
+OS,9M"(''IRH^FRPN@@%AO309NCP)I"P!!GA $C @IO309MSP2I"P!!G!!,WI@8@DSD=N3$9NB4+J"$(I!!<P@A8QC@4MCP4MCP4MCP4PE @a') ; colorMapFromArray:#[52 52 50 56 56 60 68 70 70 80 78 80 100 100 100 112 112 110 120 118 120 144 144 140 148 146 150 152 152 150 152 154 150 156 154 150 156 158 160 160 158 160 160 160 160 164 162 160 164 166 170 168 168 170 172 170 170 172 172 170 172 174 170 176 178 180 188 188 190 188 190 190 192 192 190 192 192 200 192 194 200 196 196 200 196 198 200 200 198 200 200 200 200 200 202 200 204 204 200 204 204 210 204 206 210 208 206 210 208 208 210 208 210 210 212 212 210 212 214 220 216 214 220 216 216 220 216 218 220 220 218 220 220 220 220 220 222 220 224 224 230 224 226 230 228 226 230 228 228 230 228 230 230 232 230 230 232 232 230 232 234 230 232 234 240 236 234 230 236 234 240 236 236 240 236 238 240 240 238 240 240 240 240 240 242 240 244 242 240 244 244 240 244 244 250 244 246 250 248 246 250]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?=??7??_?=??7??_?=??7??_?=??7??_?=??7??_?<b') ; yourself); yourself]
+!
+
+scrollUpOffEntered2Icon
+    "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 scrollUpOffEntered2Icon inspect
+     ImageEditor openOnClass:self andSelector:#scrollUpOffEntered2Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollUpOffEntered2Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@BPRBP$IBP$IBP$IBP$OHP@RN41KR4-KRT%IRT%HM@4@BT1EP#<?O28.K"4(HDDI@@%KP#48NC &I"X&H!!,:BP@IR3<8M#X6H2L#H18ZM0$@BT,?NCX6M"(/
+J"L^F#\I@@%KO3 6OB<BK2(^F!!(7BP@IR3<8OD@@@0X/I1(ZM0$@BT,?ND@AA@ LB"0%F#\I@@%KO3 EA1DSEQ$TJ1(7BP@IR3<8ODA@K2</K20ZM0$@BT,?
+NCX6M"L#H2L^FC\I@@%KNST2L#H^G!!8^GA\7BP@IR#L1LC@0F!!(ZFA\VM0$@DC9GQ$QDQC\7M3\7M2$K@A<NBP$IBP$IBP$IBP$KGP@a') ; colorMapFromArray:#[12 38 52 13 41 57 17 56 76 20 66 91 28 91 124 32 106 145 34 113 155 45 148 203 46 151 207 60 127 177 66 161 212 71 123 162 76 166 214 89 143 184 92 144 183 93 147 188 97 149 188 103 179 220 105 154 191 128 192 226 141 198 229 143 199 229 148 192 216 152 198 222 155 201 226 155 205 232 156 202 227 159 206 232 160 208 233 162 186 204 164 213 239 166 191 209 166 215 241 167 194 214 168 218 245 169 219 246 174 195 211 177 213 233 181 224 247 183 222 242 185 226 248 187 202 213 187 227 248 192 221 237 197 228 245 197 231 249 198 231 249 200 232 249 207 229 242 209 231 244 211 235 247 212 236 248 213 226 235 213 237 250 214 238 251 219 221 223 220 240 251 222 241 252 223 225 227 223 234 242 223 242 252 226 242 252 227 235 241 227 244 252 229 244 252 231 234 236 233 246 253 234 234 234 238 239 240 238 248 253 240 240 242 244 245 246 250 252 254 251 253 254 253 253 255 253 254 255 254 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?=??7??_?=??7??_?=??7??_?=??7??_?=??7??_?<b') ; yourself); yourself]
+!
+
+scrollUpOffIcon
+    "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 scrollUpOffIcon inspect
+     ImageEditor openOnClass:self andSelector:#scrollUpOffIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class scrollUpOffIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@DB@0LC@0LC@0LC@0PEA @A@ LC@0LC@0LC@0LDAPX@@PHC@0LC@0LC@0LCA@TF@@DB@0LC@0LC@0LC@0PEA @A@ LC@0LC@0LC@0LDAPX@@PHC@0LCA0 G
+@0LCA@TF@@DB@0LCAP IB@\C@0PEA @A@ LCAP JB00HA0LDAPX@@PHCAP MC <PDP GA@TF@@DB@0 RD1PUE!!\XB@PEA @A@ LEB@ HB@ HB@\DAPX@@PHC
+@0LC@0LC@0LCA@TF@@DB@0LC@0LC@0LC@0PEA @A@ LC@0LC@0LC@0LDAPX@@PHC@0LC@0LC@0LCA@TF@@DB@0LC@0LC@0LC@0PEA @a') ; colorMapFromArray:#[228 228 230 232 232 230 236 238 240 240 240 240 240 242 240 244 242 240 236 234 230 244 244 240 244 246 250 44 46 50 32 30 30 52 54 50 92 92 90 32 34 30 72 74 70 120 122 120 140 140 140 136 134 130 84 86 90 120 120 120 156 158 160 176 174 170 184 184 180 192 192 190 184 182 180]; yourself]
+! !
+
+!VistaToolbarIconLibrary class methodsFor:'image specs-09x09'!
+
+closeIndicatorInTree9x9Icon
+    "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 closeIndicatorInTree9x9Icon inspect
+     ImageEditor openOnClass:self andSelector:#closeIndicatorInTree9x9Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'VistaToolbarIconLibrary class closeIndicatorInTree9x9Icon'
+        ifAbsentPut:[(Depth4Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@AH@@C\@Q@@@M0AEP@@7@DXG@C\@Q&BEM0AFA0@7@DU@@C\@Q@@@M0@R@@@7') ; colorMapFromArray:#[232 232 232 200 202 200 242 242 242 0 0 0 168 168 168 232 232 232 255 255 255 152 152 152 132 132 132]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'LG<8_31?O''<?_39?OG<8_3A?') ; yourself); yourself]
+!
+
+openIndicatorInTree9x9Icon
+    "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 openIndicatorInTree9x9Icon inspect
+     ImageEditor openOnClass:self andSelector:#openIndicatorInTree9x9Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'VistaToolbarIconLibrary class openIndicatorInTree9x9Icon'
+        ifAbsentPut:[(Depth4Image new) width: 9; height: 9; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'DQDQDQDQDQHADADQH3DPDQH1LQDQH1D1F!!H1DSDPDCL3@Q@QDQDQDADQDQDS') ; colorMapFromArray:#[136 136 136 89 89 89 188 188 188 38 38 38]; mask:((Depth1Image new) width: 9; height: 9; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G<F_09?G''<>_79?_''<@_0A?') ; yourself); yourself]
+! !
+
+!VistaToolbarIconLibrary class methodsFor:'image-specs-12x12'!
+
+radioOff12x12Icon
+    "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 radioOff12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#radioOff12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class radioOff12x12Icon'
+	ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+OC0@G"PRD"P^@C0<OA(=B#@#H3@JOQ(<@@@]H HA@S<2GP@@G (OD2T6K ,-P0(^KB KE@L/A@8_I2 ,D"L\PAX LRDXCBLRD"L5PTH!!DDP;NA@IMA\7CRDP
+DP YJQ\4I#8*EPUDDSL:H38&@@@]J3$1A \ZGP@@OA(@O#@QDR >@A(<OC0@I"P[F20&@C0<') ; colorMapFromArray:#[162 163 163 181 186 191 198 201 205 203 207 213 213 216 220 225 226 226 233 234 234 238 238 239 245 245 245 147 148 148 185 186 186 197 200 204 208 209 210 213 214 216 220 222 224 233 234 235 239 239 239 244 244 244 145 146 146 179 184 189 190 195 201 205 206 207 211 214 218 221 221 221 232 232 233 238 238 238 243 243 243 142 143 143 180 185 189 195 195 195 207 208 208 211 212 215 219 221 223 233 233 233 237 237 238 242 242 242 170 171 171 189 194 199 206 206 206 212 213 213 220 220 220 232 232 232 236 236 237 240 240 241 169 169 169 190 193 197 201 206 211 206 210 215 219 219 219 228 228 229 237 238 238 241 241 241 167 168 168 187 190 194 200 205 210 207 209 211 219 220 220 226 227 227 235 235 235 239 239 240 255 255 255 163 164 164 186 187 187 200 203 206 205 209 214 215 218 221 224 225 227 235 236 236 240 240 240]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G8=?;7?/????????????????_>=?;1>O') ; yourself); yourself]
+!
+
+radioOffDisabled12x12Icon
+    "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 radioOffDisabled12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#radioOffDisabled12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class radioOffDisabled12x12Icon'
+	ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+OC1N!!B]_W2^DS#0<OD5(JD%GQ4$(ZD4<S$9TTT-)ZUUQUD9N!!B"EZ&5V\6QHBB"DR$%$SDU+[E9 A$%JW4]XS69^\QE4VT]_W4]" %\QQ$YFRTY&[1%Z\AEF
+SV]QF!!%/]WY7^DQFST\HQ7Y5S$9T^711DW9MUD9NOD5N]$%MST%6S$4<OC1N]R]?_4)5S#0<') ; colorMapFromArray:#[162 163 163 181 186 191 198 201 205 203 207 213 213 216 220 225 226 226 233 234 234 238 238 239 245 245 245 147 148 148 185 186 186 197 200 204 208 209 210 213 214 216 220 222 224 233 234 235 239 239 239 244 244 244 145 146 146 179 184 189 190 195 201 205 206 207 211 214 218 221 221 221 232 232 233 238 238 238 243 243 243 142 143 143 180 185 189 195 195 195 207 208 208 211 212 215 219 221 223 233 233 233 237 237 238 242 242 242 170 171 171 189 194 199 206 206 206 212 213 213 220 220 220 232 232 232 236 236 237 240 240 241 169 169 169 190 193 197 201 206 211 206 210 215 219 219 219 228 228 229 237 238 238 241 241 241 167 168 168 187 190 194 200 205 210 207 209 211 219 220 220 226 227 227 235 235 235 239 239 240 255 255 255 163 164 164 186 187 187 200 203 206 205 209 214 215 218 221 224 225 227 235 236 236 240 240 240 229 231 234 247 247 247 248 248 248 222 224 226 237 237 237 212 212 212 226 228 230 222 225 228 249 249 249 208 209 209 230 232 234 245 245 245 246 246 246 212 213 213 246 246 246 225 225 225 227 229 230 227 230 232 239 240 241 217 220 222 231 232 232 231 232 233 246 246 246 247 247 247 237 237 237 237 238 239 200 200 200 233 233 235 233 234 234 221 222 224 247 247 247 226 227 229 249 249 249 201 201 201 250 250 250 209 209 209 218 220 223 217 219 222 230 232 235 234 235 237 222 224 227 233 234 236 211 211 211 234 234 235 241 241 242 220 220 220 228 230 233 243 243 244 230 230 230 220 221 221 245 245 246 230 230 231 240 240 240 248 248 248 247 247 248 240 241 241 244 244 244 246 246 247 198 199 199 237 237 237 237 238 239 235 236 238 243 243 243 231 231 231 244 244 245]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G8=?;7?/????????????????_>=?;1>O') ; yourself); yourself]
+!
+
+radioOffEntered12x12Icon
+    "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 radioOffEntered12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#radioOffEntered12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class radioOffEntered12x12Icon'
+	ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@(XS@0HR!!@@@@@K1=!!*J/+:JF_[0@@G.I*</F1,*,"W,@(XZ*0<7S5MCE*XZ!! :SI3M#W6-;Q3*RC0J?C5-/]8NI12J?@0J?D6==1:N3*5Z7A *WO4.O)
+;.?+9JVB''8^)1=3,<N7&,X^_@G.I+-''!!9^^2"W,@@K1;!!:J4-JRG^;0@@@@@''8R>/(N_@@@@') ; colorMapFromArray:#[162 163 163 181 186 191 198 201 205 203 207 213 213 216 220 225 226 226 233 234 234 238 238 239 245 245 245 147 148 148 185 186 186 197 200 204 208 209 210 213 214 216 220 222 224 233 234 235 239 239 239 244 244 244 145 146 146 179 184 189 190 195 201 205 206 207 211 214 218 221 221 221 232 232 233 238 238 238 243 243 243 142 143 143 180 185 189 195 195 195 207 208 208 211 212 215 219 221 223 233 233 233 237 237 238 242 242 242 170 171 171 189 194 199 206 206 206 212 213 213 220 220 220 232 232 232 236 236 237 240 240 241 169 169 169 190 193 197 201 206 211 206 210 215 219 219 219 228 228 229 237 238 238 241 241 241 167 168 168 187 190 194 200 205 210 207 209 211 219 220 220 226 227 227 235 235 235 239 239 240 255 255 255 163 164 164 186 187 187 200 203 206 205 209 214 215 218 221 224 225 227 235 236 236 240 240 240 252 252 252 0 0 0 125 141 152 130 144 156 133 147 159 137 151 162 142 154 164 143 156 166 144 213 229 151 163 172 153 163 171 145 178 198 24 51 71 12 61 93 24 51 72 15 63 93 24 53 74 166 176 185 25 52 74 20 64 92 169 180 188 174 184 191 30 63 87 29 62 87 30 62 87 32 64 88 31 63 88 36 68 93 185 190 196 188 193 197 39 71 96 186 191 197 192 197 201 48 75 95 201 204 205 54 81 102 14 132 198 11 130 199 24 152 209 209 213 215 15 131 199 23 138 199 32 157 209 40 162 209 199 235 253 34 143 198 217 220 222 72 99 120 220 223 226 93 206 221 105 194 212 92 152 191 94 153 191 127 230 238 115 155 179 108 161 192 117 157 180 102 163 201 99 159 199 102 163 204 111 168 201 123 161 184 125 162 185 127 164 186 123 166 192 143 183 200 145 184 201 142 179 201 156 194 208 152 183 202 23 51 72 156 186 204 24 53 75 157 187 205 148 206 235 13 67 103 145 204 237 147 205 237 21 70 100 146 204 237 17 69 103 177 246 250 153 211 239 29 63 88 28 62 88 30 63 88 29 62 88 30 64 90 34 68 94 38 72 98 181 202 215 175 218 237 183 204 216 188 221 229 47 75 96 190 222 230 191 223 231 53 82 104 190 224 239 199 227 238 207 242 250 207 241 250 211 244 250 212 244 250 216 244 246 215 246 250 219 246 248 71 100 122 219 247 250 221 248 250 30 190 255 222 249 250 17 163 242 13 160 243 40 196 255 19 162 243 29 170 243 50 202 255 42 176 242 237 242 245 233 247 254 85 134 163 116 255 255 89 137 165 93 140 167 251 252 253 128 202 249 132 205 249 134 206 249 132 203 249 146 213 249 153 216 250 154 215 249 156 216 249 155 215 249 152 213 251 150 211 251 161 220 249 159 219 249 154 213 251 166 220 251 167 221 251 170 221 253 171 221 253 177 225 251 175 222 253 178 224 253 177 223 253 189 232 251 183 227 253 182 226 253 186 229 252 187 229 253 188 229 253 191 231 253 193 232 253 194 232 252 197 234 253 200 235 253 202 237 251 208 237 253 210 238 253 215 242 252 213 240 254 214 241 254 216 241 254 216 240 253 218 242 254 223 243 254 226 245 254 229 246 254 228 245 254]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G8=?;7?/????????????????_>=?;1>O') ; yourself); yourself]
+!
+
+radioOn12x12Icon
+    "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 radioOn12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#radioOn12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class radioOn12x12Icon'
+	ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+OC0@G"PRD"P^@C0<OA(=B#@#H3@JOQ(<@@@]H&QIRVH2GP@@G (OR&M4ZE9KP0(^KB!!!!XEA1]5!![Y2 ,D"MGY$56\F9SSBLRD"MHTWI/Z6%SS!!@IMA]%V5Q-
+Z%I_\1\4I#8*S51UU55ZH38&@@@]J61VVWTZGP@@OA(@O#@QDR >@A(<OC0@I"P[F20&@C0<') ; colorMapFromArray:#[162 163 163 181 186 191 198 201 205 203 207 213 213 216 220 225 226 226 233 234 234 238 238 239 245 245 245 147 148 148 185 186 186 197 200 204 208 209 210 213 214 216 220 222 224 233 234 235 239 239 239 244 244 244 145 146 146 179 184 189 190 195 201 205 206 207 211 214 218 221 221 221 232 232 233 238 238 238 243 243 243 142 143 143 180 185 189 195 195 195 207 208 208 211 212 215 219 221 223 233 233 233 237 237 238 242 242 242 170 171 171 189 194 199 206 206 206 212 213 213 220 220 220 232 232 232 236 236 237 240 240 241 169 169 169 190 193 197 201 206 211 206 210 215 219 219 219 228 228 229 237 238 238 241 241 241 167 168 168 187 190 194 200 205 210 207 209 211 219 220 220 226 227 227 235 235 235 239 239 240 255 255 255 163 164 164 186 187 187 200 203 206 205 209 214 215 218 221 224 225 227 235 236 236 240 240 240 252 252 252 0 0 0 125 141 152 130 144 156 133 147 159 137 151 162 142 154 164 143 156 166 144 213 229 151 163 172 153 163 171 145 178 198 24 51 71 12 61 93 24 51 72 15 63 93 24 53 74 166 176 185 25 52 74 20 64 92 169 180 188 174 184 191 30 63 87 29 62 87 30 62 87 32 64 88 31 63 88 36 68 93 185 190 196 188 193 197 39 71 96 186 191 197 192 197 201 48 75 95 201 204 205 54 81 102 14 132 198 11 130 199 24 152 209 209 213 215 15 131 199 23 138 199 32 157 209 40 162 209 199 235 253 34 143 198 217 220 222 72 99 120 220 223 226 93 206 221 105 194 212]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G8=?;7?/????????????????_>=?;1>O') ; yourself); yourself]
+!
+
+radioOnDisabled12x12Icon
+    "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 radioOnDisabled12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#radioOnDisabled12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class radioOnDisabled12x12Icon'
+	ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+N#(:E1UAPQTWN#(:N!!@CP08=OP9C@1@:N#$_A3,0LCHGG3$:E4LXP"4RF0@KFDLWC@X;M TYGRLQH@XLPS4/IB$JIQ0>EC5APS4&O!!L7@P$>A@<8I31DDQ(.
+PB0QJ#0''QSDXG  5MS<MMCEEN#$_Q#L(E"D+G3$:N!!@9LP8"H X1NQ@:N#(:QQTB@ 1EN#(:') ; colorMapFromArray:#[142 159 172 142 222 255 170 194 209 186 206 217 189 210 223 206 221 230 222 238 242 233 249 252 141 158 171 136 209 248 185 255 255 178 209 228 190 208 220 205 220 229 221 238 242 235 249 250 246 248 250 142 159 171 163 177 188 148 215 248 181 208 223 191 209 220 203 219 228 219 229 235 231 248 252 244 251 254 136 162 179 154 168 179 142 212 249 191 242 246 183 211 228 205 224 231 204 233 247 227 241 246 238 252 252 138 162 177 151 165 175 152 228 255 174 204 223 189 208 219 198 217 228 216 250 252 222 239 247 238 251 252 134 161 179 146 163 176 137 208 249 173 203 223 177 207 227 200 219 228 201 230 246 215 236 246 237 251 252 139 154 165 144 161 174 147 225 255 174 197 211 185 205 217 208 209 209 200 229 246 223 239 243 237 250 251 139 153 163 142 158 171 134 207 249 172 196 210 178 209 229 199 219 227 201 230 245 218 228 235 235 250 252]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G8=?;7?/????????????????_>=?;1>O') ; yourself); yourself]
+!
+
+radioOnEntered12x12Icon
+    "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 radioOnEntered12x12Icon inspect
+     ImageEditor openOnClass:self andSelector:#radioOnEntered12x12Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'VistaToolbarIconLibrary class radioOnEntered12x12Icon'
+	ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@(XS@0HR!!@@@@@K1=!!*J/+:JF_[0@@G.I*9Q?_9J,"W,@(XZ* I:0))1>*XZ!! :RQ''X:=^)NX%:RC0J=8(9Z?.+&K_J?@0J=9";.7,;VK!!Z7A *VO&IV8
+-)BZ):VB''8^) Y&M#Y.L,X^_@G.I+*BH"*"2"W,@@K1;!!:J4-JRG^;0@@@@@''8R>/(N_@@@@') ; colorMapFromArray:#[162 163 163 181 186 191 198 201 205 203 207 213 213 216 220 225 226 226 233 234 234 238 238 239 245 245 245 147 148 148 185 186 186 197 200 204 208 209 210 213 214 216 220 222 224 233 234 235 239 239 239 244 244 244 145 146 146 179 184 189 190 195 201 205 206 207 211 214 218 221 221 221 232 232 233 238 238 238 243 243 243 142 143 143 180 185 189 195 195 195 207 208 208 211 212 215 219 221 223 233 233 233 237 237 238 242 242 242 170 171 171 189 194 199 206 206 206 212 213 213 220 220 220 232 232 232 236 236 237 240 240 241 169 169 169 190 193 197 201 206 211 206 210 215 219 219 219 228 228 229 237 238 238 241 241 241 167 168 168 187 190 194 200 205 210 207 209 211 219 220 220 226 227 227 235 235 235 239 239 240 255 255 255 163 164 164 186 187 187 200 203 206 205 209 214 215 218 221 224 225 227 235 236 236 240 240 240 252 252 252 0 0 0 125 141 152 130 144 156 133 147 159 137 151 162 142 154 164 143 156 166 144 213 229 151 163 172 153 163 171 145 178 198 24 51 71 12 61 93 24 51 72 15 63 93 24 53 74 166 176 185 25 52 74 20 64 92 169 180 188 174 184 191 30 63 87 29 62 87 30 62 87 32 64 88 31 63 88 36 68 93 185 190 196 188 193 197 39 71 96 186 191 197 192 197 201 48 75 95 201 204 205 54 81 102 14 132 198 11 130 199 24 152 209 209 213 215 15 131 199 23 138 199 32 157 209 40 162 209 199 235 253 34 143 198 217 220 222 72 99 120 220 223 226 93 206 221 105 194 212 92 152 191 94 153 191 127 230 238 115 155 179 108 161 192 117 157 180 102 163 201 99 159 199 102 163 204 111 168 201 123 161 184 125 162 185 127 164 186 123 166 192 143 183 200 145 184 201 142 179 201 156 194 208 152 183 202 23 51 72 156 186 204 24 53 75 157 187 205 148 206 235 13 67 103 145 204 237 147 205 237 21 70 100 146 204 237 17 69 103 177 246 250 153 211 239 29 63 88 28 62 88 30 63 88 29 62 88 30 64 90 34 68 94 38 72 98 181 202 215 175 218 237 183 204 216 188 221 229 47 75 96 190 222 230 191 223 231 53 82 104 190 224 239 199 227 238 207 242 250 207 241 250 211 244 250 212 244 250 216 244 246 215 246 250 219 246 248 71 100 122 219 247 250 221 248 250 30 190 255 222 249 250 17 163 242 13 160 243 40 196 255 19 162 243 29 170 243 50 202 255 42 176 242 237 242 245 233 247 254 85 134 163 116 255 255 89 137 165 93 140 167]; mask:((Depth1Image new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G8=?;7?/????????????????_>=?;1>O') ; yourself); yourself]
+! !
+
+!VistaToolbarIconLibrary class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/VistaToolbarIconLibrary.st,v 1.11 2013-04-03 13:07:38 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/VistaToolbarIconLibrary.st,v 1.11 2013-04-03 13:07:38 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WarningBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,260 @@
+"
+ COPYRIGHT (c) 1993 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+InfoBox subclass:#WarningBox
+	instanceVariableNames:''
+	classVariableNames:'WarnBitmap ErrorBitmap'
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!WarningBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1993 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+   Historic note:
+        originally, ST/X had separate classes for the various entry methods;
+        there were YesNoBox, EnterBox, InfoBox and so on.
+        In the meantime, the DialogBox class (and therefore its alias: Dialog)
+        is going to duplicate most funcionality found in these classes.
+
+        In the future, those existing subclasses' functionality might
+        be moved fully into Dialog, and the subclasses be replaced by dummy
+        delegators. (They will be kept for backward compatibility, though).
+
+
+
+    this class implements a pop-up box to show an information message. 
+    WarningBoxes are basically InfoBoxes with a different bitmap-image.
+    (also, they add a beep when popping up)
+
+    They are created with:
+
+        aBox := WarningBox title:'some title'.
+
+    and shown with:
+
+        aBox showAtPointer
+
+    The default box shows 'yes' in its button; this can be changed with:
+
+        aBox okText:'some string'.
+
+    Since showing warnings is a common action, a convenient method has been
+    added to Object; thus you can use:
+
+        self warn:'oops - headcrash'
+
+    everywhere in your code.
+
+    [see also:]
+        DialogBox InfoBox YesNoBox
+        ( introduction to view programming :html: programming/viewintro.html )
+
+    [author:]
+        Claus Gittinger
+"
+!
+
+examples
+"
+    Notice, the preferred use is via the DialogBox class messages,
+    such as 
+                                                                        [exBegin]
+        Dialog warn:'Attention !!'
+                                                                        [exEnd]
+    these (DialogBox) mesages are compatible with VW and should therefore
+    be used for portability.
+
+    Direct reference to WarnBox is only required for highly specialized boxes.
+
+
+    standard warning dialogs
+    (recommended, since these are ST-80 compatible interfaces)
+                                                                        [exBegin]
+        Dialog warn:'you should not do this'
+                                                                        [exEnd]
+    since all objects support the #warn message,
+    you can also simply use (for any self):
+                                                                        [exBegin]
+        self warn:'you should not do this' 
+                                                                        [exEnd]
+
+    with attributed text:
+                                                                        [exBegin]
+        Dialog warn:(Text string:'you should not do this' 
+                          emphasis:#color->Color red)
+                                                                        [exEnd]
+        
+    specifying more details of the warnBox (low level entries).
+    label of OK-button:
+                                                                        [exBegin]
+        |aBox|
+
+        aBox := WarningBox title:'Press ''OK'' to continue'.
+        aBox okText:'OK'.
+        aBox showAtPointer.
+                                                                        [exEnd]
+
+    accessing the ok-Button component and changing its color:
+                                                                        [exBegin]
+        |aBox|
+
+        aBox := WarningBox title:'Do you really want to do this ?'.
+        aBox okText:'yes, go on'.
+        aBox okButton foregroundColor:Color red.
+        aBox showAtPointer.
+                                                                        [exEnd]
+    since warnboxes are much like infoBoxes, all of look can be changed
+    like described there:
+                                                                        [exBegin]
+        |image aBox|
+
+        aBox := WarningBox title:'Press ''OK'' to continue'.
+        aBox okText:'yes, continue'.
+        image := Image fromFile:'bitmaps/SmalltalkX.xbm' inPackage:'stx:libtool'.
+        aBox form:image.
+        aBox showAtPointer.
+                                                                        [exEnd]
+"
+! !
+
+!WarningBox class methodsFor:'icon bitmap'!
+
+errorIconBitmap
+    "return the bitmap shown as icon in my instances.
+     This is the default image; you can overwrite this in a concrete
+     instance with the image: message"
+
+    <resource: #style (#'errorBox.icon' #'errorBox.iconFile')>
+
+    ErrorBitmap isNil ifTrue:[
+        ErrorBitmap := self iconBitmapFromStyle:'errorBox.icon' orStyleFile:'errorBox.iconFile' orFilename:'bitmaps/Error.xbm'.
+        ErrorBitmap isNil ifTrue:[
+            ErrorBitmap := ToolbarIconLibrary errorIcon.
+        ].
+    ].
+    ^ ErrorBitmap
+
+    "
+     |box|
+
+     box := WarningBox title:'foo bar'.
+     box image:(WarningBox errorIconBitmap).
+     box showAtPointer.
+    "
+
+    "Created: / 17.11.1995 / 18:16:47 / cg"
+    "Modified: / 16.11.2001 / 15:02:54 / cg"
+!
+
+iconBitmap
+    "return the bitmap shown as icon in my instances.
+     This is the default image; you can overwrite this in a concrete
+     instance with the image: message"
+
+    ^ self warnIconBitmap
+
+    "
+     self warn:'foo bar'.
+
+     |box|
+     box := WarningBox title:'foo bar'.
+     box showAtPointer.
+
+     |box|
+     box := WarningBox title:'foo bar'.
+     box image:(Image fromFile:'QUESTION.xpm' inPackage:'stx:goodies/bitmaps/xpmBitmaps').
+     box showAtPointer.
+    "
+
+    "Created: / 17.11.1995 / 18:16:47 / cg"
+    "Modified: / 16.11.2001 / 15:02:38 / cg"
+!
+
+warnIconBitmap
+    "return the bitmap shown as icon in my instances.
+     This is the default image; you can overwrite this in a concrete
+     instance with the image: message"
+
+    <resource: #style (#'warningBox.icon' #'warningBox.iconFile')>
+
+    WarnBitmap isNil ifTrue:[
+        WarnBitmap := self iconBitmapFromStyle:'warningBox.icon' orStyleFile:'warningBox.iconFile' orFilename:'bitmaps/Warning.xbm'.
+        WarnBitmap isNil ifTrue:[
+            WarnBitmap := ToolbarIconLibrary warnIcon.
+        ].
+    ].
+    ^ WarnBitmap
+
+    "
+     self warn:'foo bar'.
+
+     |box|
+     box := WarningBox title:'foo bar'.
+     box showAtPointer.
+
+     |box|
+     box := WarningBox title:'foo bar'.
+     box image:(Image fromFile:'QUESTION.xpm' inPackage:'stx:goodies/bitmaps/xpmBitmaps').
+     box showAtPointer.
+    "
+
+    "Modified: / 25.5.1999 / 15:22:25 / cg"
+    "Created: / 16.11.2001 / 15:02:24 / cg"
+! !
+
+!WarningBox class methodsFor:'styles'!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables.
+     Here, the cached infoBitmap is simply flushed."
+
+    WarnBitmap := nil.
+    ErrorBitmap := nil.
+
+    "Modified: / 16.11.2001 / 15:00:43 / cg"
+! !
+
+!WarningBox methodsFor:'initialization'!
+
+initialize
+    super initialize.
+    label := 'Warning'
+! !
+
+!WarningBox methodsFor:'queries'!
+
+beepWhenOpening
+    ^ UserPreferences current beepForWarningDialog
+! !
+
+!WarningBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/WarningBox.st,v 1.35 2008-07-14 19:33:37 cg Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Windows8ToolbarIconLibrary.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,74 @@
+"{ Package: 'stx:libwidg' }"
+
+VistaToolbarIconLibrary subclass:#Windows8ToolbarIconLibrary
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Smalltalk'
+!
+
+!Windows8ToolbarIconLibrary class methodsFor:'documentation'!
+
+documentation
+"
+    ToolbarIconLibrary := Windows8ToolbarIconLibrary
+
+    Notice and Warning:
+        only redefine existing icons here; never add ionly to here.
+        For every icon-method here, there MUST be a corresponding (albeit
+        possibly ugly) icon-method in GenericToolBarIcon.
+"
+! !
+
+!Windows8ToolbarIconLibrary class methodsFor:'image specs'!
+
+downArrowEnteredIcon
+    "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 downArrowEnteredIcon inspect
+     ImageEditor openOnClass:self andSelector:#downArrowEnteredIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'Windows8ToolbarIconLibrary downArrowEnteredIcon'
+        ifAbsentPut:[(Depth1Image new) width: 15; height: 14; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@HH@1 C.@G0@N@@P@@@@@@@@@@@@@a') ; colorMapFromArray:#[240 240 240 0 0 0]; mask:((Depth1Image new) width: 15; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@D@@P@A@@DHHP1!!C.DG0PNA@PD@@P@A@@D@@P@a') ; yourself); yourself]
+!
+
+downArrowPassiveIcon
+    "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 downArrowPassiveIcon inspect
+     ImageEditor openOnClass:self andSelector:#downArrowPassiveIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'Windows8ToolbarIconLibrary downArrowPassiveIcon'
+        ifAbsentPut:[(Depth1Image new) width: 15; height: 14; photometric:(#palette); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@HH@1 C.@G0@N@@P@@@@@@@@@@@@@a') ; colorMapFromArray:#[240 240 240 96 96 96]; mask:((Depth1Image new) width: 15; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@D@@P@A@@DHHP1!!C.DG0PNA@PD@@P@A@@D@@P@a') ; yourself); yourself]
+! !
+
+!Windows8ToolbarIconLibrary class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/Windows8ToolbarIconLibrary.st,v 1.2 2013-04-03 13:07:34 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/Windows8ToolbarIconLibrary.st,v 1.2 2013-04-03 13:07:34 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Workspace.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,2303 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+TextCollector subclass:#Workspace
+	instanceVariableNames:'doItAction codeStartPosition errorFgColor errorBgColor
+		commentStrings autoDefineWorkspaceVariables simulatedSelf
+		autoDefineVariables compilerClass allowValueDrop
+		poolsConsideredInDoIts namespaceForDoits editedMethodOrClass
+		editedClass editedMethod editedLanguage'
+	classVariableNames:'DefaultViewBackground DefaultErrorForegroundColor
+		DefaultErrorBackgroundColor DefaultWarningBackgroundColor
+		DefaultWarningForegroundColor WorkspaceVariables DoItHistory
+		Sniplets'
+	poolDictionaries:''
+	category:'Interface-Smalltalk'
+!
+
+Workspace comment:''
+!
+
+!Workspace class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    a view for editable text which can evaluate expressions.
+    I.e. its basically a view for editable text, with added
+    'doIt', 'printIt' and 'inspectIt' functions on the popup-menu.
+
+    The action to be performed on doIt is defined by a block,
+    which can be defined by the owner of this view.
+    (thus you can put a workspace into more complex widgets, and
+     control what should happen on 'doIt').
+
+    A useful default action is automatically defined, which simply 
+    evaluates the selection as a smalltalk expression. 
+    (but, a lisp or prolog workspace would define its own action,
+     to call for another compiler/interpreter  ...)
+
+    Special workspace- and doIt variables:
+        workspaces can be configured to automatically define undefined variables
+        as either workspace- or doIt variables. When encountering undefined variables,
+        the parser asks for an action, which is responded with #workspace or doIt if a
+        workspace is the requestor of a doIt. Both are implemented as value holders, and
+        the parser will generate code sending value/value: instead of normal assignment.
+        Workspace variables are kept in the Workspace class and will both persist between doIts
+        and also be visible across workspaces. They are perfect for scripting (and therefore anabled
+        by default when stx is started with one of the scripting options).
+        DoIt variables are only valid during a single doIt.
+        Be aware that when you ask from the outside via workspaceVariableAt:, you'll get a valueHolder.
+        This is by purbose, as it allows for easy monitoring and tracing of changes.
+            
+    Caveat:
+        in this version, Workspace does not yet support doIt in MVC setups.
+        For now, simulate this by setting the doItAction, to notify the
+        model manually about the doIt.
+
+
+    [instance variables:]
+
+      doItAction      <Block>         block to evaluate for doIt
+
+      errorFgColor    <Color>         fg-Color to be used when highlighting errors 
+
+      errorBgColor    <Color>         bg-Color to be used when highlighting errors
+
+      codeStartPosition               private temporary
+
+
+    [styleSheet values:]
+
+      codeErrorSelectionForegroundColor     fg color to highlight errors
+                                            (default: selection fg)
+
+      codeErrorSelectionBackgroundColor     bg color to highlight errors
+                                            (default: selection bg)
+
+    [start with:]
+        Workspace open
+
+    [see also:]
+        Workspace EditTextView 
+        Parser ByteCodeCompiler
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!Workspace class methodsFor:'accessing'!
+
+sniplets
+    Sniplets isNil ifTrue:[
+        Sniplets := Dictionary new.
+        self initializeDefaultAbbreviations.
+    ].
+    ^ Sniplets
+
+    "
+     Sniplets := nil
+    "
+!
+
+sniplets:something
+    Sniplets := something.
+! !
+
+!Workspace class methodsFor:'defaults'!
+
+defaultCompletionSupportClass
+    ^ WorkspaceCompletionSupport
+
+    "Created: / 26-09-2013 / 17:59:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+defaultLabel
+    "my default window label"
+
+    ^ 'Workspace'
+
+    "Created: / 16.5.1998 / 16:53:37 / cg"
+!
+
+initializeDefaultAbbreviations
+    "default snippets/abbreviations. TODO: save/load sniplets"
+
+    "flush and reinitialize sniplets with:
+         Sniplets := Dictionary new.
+    "
+    "after a code change below, update with:
+         self initializeDefaultAbbreviations.
+    "
+
+    #(
+        't'     'true'    
+        'f'     'false'
+        's'     'self'
+        'su'    'super'                  
+        'ss'    'super '            
+        'n'     'nil'
+        'y'     'yourself.'
+
+        'in'    'isNil '
+        'nn'    'notNil '
+        'ie'    'isEmpty '
+        'ne'    'notEmpty '
+        'ien'   'isEmptyOrNil '
+        'nen'   'notEmptyOrNil '
+
+        'it'    'ifTrue:[!!'
+        'if'    'ifFalse:[!!'
+        'itf'   'ifTrue:[!!] ifFalse:[].'
+        'int'   'isNil ifTrue:[!!].'
+        'inf'   'isNil ifFalse:[!!].'
+        'ints'  'isNil ifTrue:[^ self].'
+        'infs'  'isNil ifFalse:[^ self].'
+        'nnt'   'notNil ifTrue:[!!].'
+        'nnf'   'notNil ifFalse:[!!].'
+        'iet'   'isEmpty ifTrue:[!!].'
+        'net'   'notEmpty ifTrue:[!!].'
+        'ief'   'isEmpty ifFalse:[!!].'
+        'nef'   'notEmpty ifFalse:[!!].'
+
+        'wt'    'whileTrue:[!!]'
+        'wf'    'whileFalse:[!!]'
+
+        'do'    'do:[:each |!!]'
+        'd:'    'do:[:each |!!]'
+        'kdo'   'keysAndValuesDo:[:eachKey :eachValue |!!]'
+        'kvd'   'keysAndValuesDo:[:eachKey :eachValue |!!]'
+        'kv:'   'keysAndValuesDo:[:eachKey :eachValue |!!]'
+        'k:'    'keysDo:[:eachKey | !!]'
+        'dt'    'detect:[:each | !!]'   
+        'de'    'detect:[:each | !!]'
+        'det'   'detect:[:each | !!]'
+        'dtn'   'detect:[:each | !!] ifNone:[]'
+        'cl'    'collect:[:each | !!]'
+        'co'    'collect:[:each | !!]'
+        'col'   'collect:[:each | !!]'
+        'sl'    'select:[:each | !!]'
+        'se'    'select:[:each | !!]'
+        'sel'   'select:[:each | !!]'
+        'rj'    'reject:[:each | !!]'
+        're'    'reject:[:each | !!]'
+        'rej'   'reject:[:each | !!]'
+        'inj'   'inject:!! into:[:accum :each | ]'
+
+        'ex'    'Error handle:[ex | !!] do:[].'
+        'sh'    'self halt.'
+        'mt'    'MessageTally spyOn:[!!].'
+
+        'ih'    '!! ifTrue:[ self halt ].'
+        'ik'    'includesKey: #'
+        'is'    'includesString: #'
+
+        'af'    'asFilename '
+        'as'    'asString '
+        'aoc'   'asOrderedCollection '
+
+        'np'    'nextPut: '
+        'npa'   'nextPutAll: '
+        'npl'   'nextPutLine: '
+
+        'ps'    'printString'
+        'sr'    'self subclassResponsibility.'
+
+        'ati'   'at:!! ifAbsent: '
+        'atip'  'at:!! ifAbsentPut:[ ] '
+        'ap'    'at:!! '
+
+        'st'    'Smalltalk'
+        'ts'    'Transcript showCR:''!!''.'
+        'trs'   'Transcript showCR:''!!''.'
+        'abb'   'Workspace sniplets inspect.'
+        'ws'    'Delay waitForSeconds: 1.' 
+        'wfs'   'Delay waitForSeconds: 1.' 
+        'wfm'   'Delay waitForMilliseconds: 1000.' 
+        'ini'   'initialize\    super initialize.\    '
+        'newi'  'new\    ^ super new initialize.'
+        'upd'   'update:something with:aParameter from:changedObject\    !!\    ^ super update:something with:aParameter from:changedObject.'
+        'OC'    'OrderedCollection'
+        'oc'    'OrderedCollection'
+        'SC'    'SortedCollection'
+        'sc'    'SortedCollection'
+        'D'     'Dictionary'
+        'ID'    'IdentityDictionary'
+        'Id'    'IdentityDictionary'
+        'id'    'IdentityDictionary'
+        'iD'    'IdentityDictionary'
+        'OCn'   'OrderedCollection new.'
+        'ocn'   'OrderedCollection new.'
+        'SCn'   'SortedCollection new.'
+        'IDn'   'IdentityDictionary new'
+        'idn'   'IdentityDictionary new'
+        'Dn'    'Dictionary new'
+        'dn'    'Dictionary new'
+        'Sn'    'Set new'
+        'sn'    'Set new'
+        'A'     'Array'
+        'a'     'Array'
+        'An'    'Array new:'
+        'an'    'Array new:'
+        'Aw'    'Array with:'
+        'aw'    'Array with:'
+        'Aww'   'Array with:!! with:'
+        'sww'   'Array with:!! with:'
+        'Awww'  'Array with:!! with: with:'
+        'awww'  'Array with:!! with: with:'
+        'Awwww' 'Array with:!! with: with: with:'
+        'awwww' 'Array with:!! with: with: with:'
+        'aw2'   'Array with:!! with:'
+        'aw3'   'Array with:!! with: with:'
+        'aw4'   'Array with:!! with: with: with:'
+        '0'     '(0.0 @ 0.0)'
+        '1'     '(1.0 @ 1.0)'
+        '['     '[:!! ]'
+        '('     '(!! )'                                    
+
+        "/ typos...
+        'eslf'  'self'
+        'slef'  'self'
+        'sefl'  'self'
+        'elf'   'self'
+        'slf'   'self'
+        'sef'   'self'
+
+        'iftrue'   'ifTrue'
+        'iffalse'  'ifFalse'
+        'iftrue:'  'ifTrue:'
+        'iffalse:' 'ifFalse:'
+    ) pairWiseDo:[:abbrev :text |
+        Sniplets
+            at:abbrev put:text "/ ifPresent:[ self error:'duplicate abbreviation key' ]
+    ].
+
+    "Modified: / 26-09-2012 / 14:48:42 / cg"
+!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables"
+
+    <resource: #style (#'codeErrorSelection.foregroundColor'
+                       #'codeErrorSelection.backgroundColor'
+                       #'codeView.backgroundColor' )>
+
+    DefaultErrorForegroundColor := StyleSheet colorAt:'codeErrorSelection.foregroundColor'.
+    DefaultErrorBackgroundColor := StyleSheet colorAt:'codeErrorSelection.backgroundColor'.
+    DefaultViewBackground := StyleSheet colorAt:'codeView.backgroundColor'.
+! !
+
+!Workspace class methodsFor:'getting a new Workspace'!
+
+open
+    "launch a new workspace"
+
+    |scr topView workspace f|
+
+    topView := StandardSystemView 
+                label:(self classResources string:(self defaultLabel)) 
+                " minExtent:(100 @ 100)".
+
+    scr := HVScrollableView for:self in:topView.
+    scr origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
+    workspace := scr scrolledView.
+
+    "/ adjust topViews extent according to my font
+
+    f := workspace font.
+    topView extent:((f widthOf:'x') * 40) @ (f height * 10).
+    topView open.
+    ^ workspace
+
+    "
+     Workspace open
+    "
+
+    "Modified: / 16.5.1998 / 16:53:53 / cg"
+!
+
+openForRemote:hostName
+    "launch a new workspace to evaluate expression on some remote machine.
+     Entered expressions are sent over to some partner machine, evaluated there,
+     and the result is shown here.
+     This requires the RemoteObjects package to be loaded."
+
+    |server remoteCompiler workspace|
+
+    RemoteObjectServer isNil ifTrue:[
+        self warn:'no remoteObjectServer available'.
+        ^ nil
+    ].
+
+    server := RemoteObjectServer on:hostName.
+    remoteCompiler := server get:#Compiler.
+
+    workspace := self open.
+    workspace topView 
+        label:(self classResources string:'Remote Workspace {%1}' with:hostName).
+
+    workspace doItAction:
+                [:theCode |
+                    remoteCompiler 
+                        evaluate:theCode 
+                        in:nil 
+                        receiver:nil 
+                        notifying:workspace 
+                        logged:true 
+                        ifFail:nil 
+                ]
+    "
+     Workspace openForRemote:'andi'
+    "
+
+    "Modified: / 16.5.1998 / 16:57:38 / cg"
+!
+
+openWith:initialText selected:selectedBoolean
+    "launch a new workspace with some initial contents"
+
+    |workspace|
+
+    workspace := self open.
+    workspace contents:initialText selected:selectedBoolean.
+    ^ workspace
+
+    "
+     Workspace openWith:'Transcript showCR:''hello world'''
+    "
+! !
+
+!Workspace class methodsFor:'history'!
+
+clearDoItHistory
+    DoItHistory := nil
+!
+
+doItHistory
+    ^ DoItHistory
+!
+
+doItHistorySize
+    "the number of remembered doIts"
+
+    ^ 20
+!
+
+rememberDoIt:aString
+    |string|
+
+    string := aString asString string withoutSeparators.
+    (string asCollectionOfWords size <= 1) ifTrue:[
+        Error handle:[:ex |
+            "/ unparsable
+            ^ self
+        ] do:[
+            ((Scanner new scanTokens:string) size <= 1) ifTrue:[
+                "it's a variable only"
+                ^ self
+            ]
+        ]
+    ].
+
+    DoItHistory isNil ifTrue:[
+        DoItHistory := OrderedCollection new.
+    ].
+    DoItHistory remove:string ifAbsent:nil.
+    DoItHistory addFirst:string.
+    DoItHistory size > self doItHistorySize ifTrue:[
+        DoItHistory removeLast
+    ].
+! !
+
+!Workspace class methodsFor:'queries'!
+
+isVisualStartable
+    "returns whether this application class can be started via #open
+     (i.e. via a double click on the class in the browser)"
+
+    ^ self == Workspace
+
+    "Created: / 16.5.1998 / 16:59:00 / cg"
+    "Modified: / 16.5.1998 / 16:59:39 / cg"
+! !
+
+!Workspace class methodsFor:'workspace variables'!
+
+addWorkspaceVariable:name
+    "create a new workspace variable"
+
+    |holder|
+
+    holder := self workspaceVariables at:name ifAbsentPut:[ ValueHolder new ].
+    ^ holder
+!
+
+anyWorkspaceVariableIsDefined
+    ^ WorkspaceVariables notEmptyOrNil
+
+    "Created: / 20-04-2005 / 11:57:53 / cg"
+!
+
+removeAllWorkspaceVariables
+    "delete all workspace variables"
+
+    WorkspaceVariables := nil
+
+
+!
+
+removeWorkspaceVariable:name
+    "delete a workspace variable"
+
+    WorkspaceVariables notNil ifTrue:[
+        WorkspaceVariables removeKey:name ifAbsent:nil.
+        WorkspaceVariables := WorkspaceVariables asNilIfEmpty.
+    ].
+!
+
+workspaceVariableAt:name
+    "retrieve a workspace variable's value"
+
+    ^ (self workspaceVariableHolderAt:name) value
+
+    "
+     Workspace workspaceVariableAt:'foo' put:1234.
+     Workspace workspaceVariableAt:'foo' 
+    "
+!
+
+workspaceVariableAt:name put:aValue
+    "set or define a workspace variable"
+
+    (self workspaceVariables at:name ifAbsentPut:[ ValueHolder new]) value:aValue
+!
+
+workspaceVariableHolderAt:name
+    "retrieve a workspace variable (actually, a holder onto it)"
+
+    WorkspaceVariables isNil ifTrue:[^ nil].
+    ^ WorkspaceVariables at:name ifAbsent:nil.
+
+    "
+     Workspace workspaceVariableAt:'foo' put:1234.
+     Workspace workspaceVariableAt:'foo' put:1234.
+    "
+!
+
+workspaceVariableNames
+    "retrieve the collection of workspace variable names only"
+
+    WorkspaceVariables isNil ifTrue:[^ #()].
+    ^ WorkspaceVariables keys
+
+    "Created: / 20-04-2005 / 11:42:45 / cg"
+!
+
+workspaceVariables
+    "retrieve the collection of workspace variable holders.
+     That is a dictionary associating names to values."
+
+    WorkspaceVariables isNil ifTrue:[
+        WorkspaceVariables := Dictionary new.
+    ].
+    ^ WorkspaceVariables
+
+    "Modified: / 20-04-2005 / 11:43:14 / cg"
+! !
+
+!Workspace methodsFor:'accessing'!
+
+allowValueDrop:aBoolean
+    "if on (the default), any smalltalk value can be dropped and leads to a workspace variable
+     holding on to that being defined. Can be turned off, if youdont like this (for standAlone apps)"
+
+    allowValueDrop := aBoolean.
+
+    "Created: / 28-11-2006 / 16:13:02 / cg"
+!
+
+autoDefineVariables
+    "undefined variables handling:
+        are automatically defined as workspace variable if autoDefineVariables is #workspace.
+        are automatically defined as doit variable if autoDefineVariables is #doit.
+        are left undefined if autoDefineVariables is nil."
+
+    ^ autoDefineVariables 
+!
+
+autoDefineVariables:nilOrSymbol
+    "undefined variables handling:
+        are automatically defined as workspace variable if nilOrSymbol is #workspace.
+        are automatically defined as doit variable if nilOrSymbol is #doit.
+        are left undefined if nilOrSymbol is nil."
+
+    autoDefineVariables := nilOrSymbol.
+
+    "Modified: / 28-11-2006 / 16:21:01 / cg"
+!
+
+commentStrings:anArrayOfCommentStrings
+    "define the comment strings"
+
+    "/ The argument must be of the form:
+    "/    #(
+    "/        '"/'
+    "/        ('"' '"')
+    "/    )
+    "/ where simple string elements define the EOL comment sequence, 
+    "/ and pairs define regular comment opening/closing seqeuences.
+
+    commentStrings := anArrayOfCommentStrings
+
+    "Created: / 9.11.1997 / 01:05:25 / cg"
+!
+
+doItAction
+    "return the action to be performed when 'doIt' is selected"
+
+    ^ doItAction
+!
+
+doItAction:aOneArgBlock
+    "define the action to be performed when 'doIt' is selected.
+     The block will be evaluated, passing the selection as a String argument. 
+     A default doItAction is set for you in the initialize method."
+
+    doItAction := aOneArgBlock
+
+    "Modified: 27.2.1996 / 15:31:37 / cg"
+!
+
+editedClass
+    "for the code completion"
+
+    editedMethodOrClass isNil ifTrue:[^ nil].
+    ^ editedMethodOrClass isBehavior ifTrue:[editedMethodOrClass] ifFalse:[editedMethodOrClass mclass]
+!
+
+editedLanguage
+    editedLanguage notNil ifTrue:[
+        ^ editedLanguage
+    ].
+    editedMethod notNil ifTrue:[
+        ^ editedMethod programmingLanguage.
+    ].
+    editedClass notNil ifTrue:[
+        editedClass programmingLanguage.
+    ].
+    ^ nil
+
+    "Modified: / 18-09-2013 / 12:58:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+editedLanguage:aProgrammingLanguageOrNil
+    editedLanguage := aProgrammingLanguageOrNil.
+    aProgrammingLanguageOrNil notNil ifTrue:[
+        commentStrings := aProgrammingLanguageOrNil commentStrings.
+    ].
+!
+
+editedMethod
+    "for the code completion"
+
+    editedMethodOrClass isNil ifTrue:[^ nil].
+    ^ editedMethodOrClass isBehavior ifTrue:[nil] ifFalse:[editedMethodOrClass]
+!
+
+editedMethodOrClass
+    "for the code completion"
+
+    ^ editedMethodOrClass.
+!
+
+editedMethodOrClass:aMethodOrClass
+    "for the code completion"
+
+    editedMethodOrClass := aMethodOrClass.
+!
+
+errorBackgroundColor
+    errorBgColor notNil ifTrue:[ ^ errorBgColor ].
+    DefaultErrorBackgroundColor notNil ifTrue:[ ^ DefaultErrorBackgroundColor ].
+    self graphicsDevice hasColors ifTrue:[ ^ Color red ].
+
+    ^ selectionBgColor
+!
+
+errorForegroundColor
+    errorFgColor notNil ifTrue:[ ^ errorFgColor ].
+    DefaultErrorForegroundColor notNil ifTrue:[ ^ DefaultErrorForegroundColor ].
+    ^ selectionFgColor
+!
+
+nameSpaceForDoits
+    "can be used by the embedding application to control doIt execution
+     (especially: for tools like expecco, to provide better workspaces"
+
+    ^ namespaceForDoits ? Smalltalk
+!
+
+nameSpaceForDoits:aNameSpaceOrNil
+    "can be used by the embedding application to control doIt execution
+     (especially: for tools like expecco, to provide better workspaces"
+
+    namespaceForDoits := aNameSpaceOrNil.
+
+    "Created: / 26-07-2012 / 23:06:04 / cg"
+!
+
+namespaceForDoits:aNameSpaceOrNil
+    "can be used by the embedding application to control doIt execution
+     (especially: for tools like expecco, to provide better workspaces"
+
+    <resource: #obsolete>
+
+    namespaceForDoits := aNameSpaceOrNil.
+
+    "Created: / 04-03-2012 / 13:34:51 / cg"
+!
+
+poolsConsideredInDoIts:aCollectionOfPools
+    "can be used by the embedding application to control doIt execution
+     (especially: for tools like expecco, to provide better workspaces"
+
+    poolsConsideredInDoIts := aCollectionOfPools.
+
+    "Modified (format): / 04-03-2012 / 13:35:00 / cg"
+!
+
+simulatedSelf:anObject
+    "define what self is in an evaluation"
+
+    simulatedSelf := anObject
+!
+
+warningBackgroundColor
+    DefaultWarningBackgroundColor notNil ifTrue:[ ^ DefaultWarningBackgroundColor ].
+    self graphicsDevice hasColors ifTrue:[ ^ Color orange ].
+
+    ^ selectionBgColor
+!
+
+warningForegroundColor
+    DefaultWarningForegroundColor notNil ifTrue:[ ^ DefaultWarningForegroundColor ].
+    ^ selectionFgColor
+! !
+
+!Workspace methodsFor:'compiler interface'!
+
+compilerClass
+    ^ compilerClass "? Compiler"
+
+    "Modified: / 19-07-2012 / 17:04:35 / cg"
+!
+
+compilerClass:aCompilerClass
+    compilerClass := aCompilerClass
+!
+
+currentSourceCode
+    "special interface to compiler - called by parser
+     to get the updated source code after a corrected error"
+
+    ^ self contents
+!
+
+wantChangeLog
+    "sent by the compiler to ask if a changeLog entry should
+     be written. Return true here."
+
+    ^ true
+! !
+
+!Workspace methodsFor:'compiler interface-error handling'!
+
+correctableError:aString position:relPos to:relEndPos from:aCompiler
+    "compiler notifies us of a correctable error;
+     hilight the error (relPos to relEndPos) and show a Box asking for continue/correct/abort;
+     this method should return true to the compiler if user wants the error
+     to be corrected; false otherwise"
+
+    |action sameForAllHolder possibleFixes doNotShowAgainHolder doNotShowAgainForThisMethodHolder|
+
+    "/ the declare/correct fixes are here for backward compatibility
+    "/ (in previous versions, these two were always offered as fix,
+    "/ and compilers which honor the old interface will not anwer the PossibleCorrectionsQuery)
+    possibleFixes := Parser possibleCorrectionsQuery query.
+
+    sameForAllHolder := false asValue.
+
+    self highlightingErrorPosition:relPos to:relEndPos do:[
+        doNotShowAgainHolder := false asValue.
+        doNotShowAgainForThisMethodHolder := false asValue.
+
+        Dialog aboutToOpenBoxNotificationSignal handle:[:ex |
+            |box declareButton makeSpaceOnlyOnce|
+
+            box := ex box.
+            (box isKindOf:OptionBox) ifFalse:[ ex reject ].   "/ a bad hack for subDialogs... needs fix
+            makeSpaceOnlyOnce := [ box addVerticalSpace:10. makeSpaceOnlyOnce := nil ].
+
+            DoNotShowCompilerWarningAgainActionQuery isHandled ifTrue:[
+                makeSpaceOnlyOnce value.
+                box verticalPanel 
+                    add:(CheckBox 
+                            label: "addCheckBoxAtBottom:" 'Do not show this dialog again (reenable via Launcher''s settings dialog)' 
+                            model:doNotShowAgainHolder).
+            ].
+            DoNotShowCompilerWarningAgainForThisMethodActionQuery isHandled ifTrue:[
+                makeSpaceOnlyOnce value.
+                box verticalPanel
+                    add:(CheckBox
+                            label:(resources string:'Do not warn in this method (for %1 - reenable earlier via Launcher''s settings dialog)' with:ParserFlags perMethodDisableWarningTimeDuration)  
+                            model:doNotShowAgainForThisMethodHolder).
+            ].
+            SameForAllNotification isHandled ifTrue:[
+                box addVerticalSpace:10.
+                box addCheckBoxAtBottom:'Same action for all' on:sameForAllHolder
+            ].
+
+            declareButton := box buttons at:2.
+            declareButton pressAction:declareButton controller releaseAction.
+            declareButton controller beTriggerOnDown.
+        ] do:[
+            |buttonLabels actions|
+
+            buttonLabels := OrderedCollection new.
+            actions := OrderedCollection new.
+            buttonLabels add:'Cancel'. actions add:#abort.
+            possibleFixes do:[:each |
+                buttonLabels add:(each buttonLabel). actions add:each.
+            ].
+            buttonLabels add:'Continue'. actions add:#continue.
+
+            action := OptionBox 
+                          request:aString
+                          label:(resources string:'Correctable Error')
+                          image:(WarningBox iconBitmap)
+                          buttonLabels:(resources array:buttonLabels)
+                          values:actions
+                          default:#continue
+                          onCancel:#abort.
+        ].
+    ].
+
+    sameForAllHolder value ifTrue:[
+        SameForAllNotification notify
+    ].
+    doNotShowAgainHolder value == true ifTrue:[
+        DoNotShowCompilerWarningAgainActionQuery actionQuery value
+    ].
+    doNotShowAgainForThisMethodHolder value == true ifTrue:[
+        DoNotShowCompilerWarningAgainForThisMethodActionQuery actionQuery value
+    ].
+
+    action == #cancel ifTrue:[
+        ^ false
+    ].
+
+    action == #abort ifTrue:[
+        AbortOperationRequest raise.
+        ^ false
+    ].
+    ^ action
+
+    "Modified: / 28-02-2012 / 10:42:27 / cg"
+!
+
+correctableSelectorWarning:aString position:relPos to:relEndPos from:aCompiler
+    "compiler notifies us of a correctable selector warning;
+     hilight the error (relPos to relEndPos) and show a Box asking for continue/correct/abort;
+     this method should return true to the compiler if user wants the error
+     to be corrected; false otherwise"
+
+    |action doNotShowAgainHolder|
+
+    self highlightingWarningPosition:relPos to:relEndPos do:[
+        doNotShowAgainHolder := false asValue.
+        Dialog aboutToOpenBoxNotificationSignal handle:[:ex |
+            MessageNotUnderstood catch:[
+                (aCompiler notNil and:[DoNotShowCompilerWarningAgainActionQuery isHandled]) ifTrue:[
+                    ex box addCheckBoxAtBottom:'Do not show this dialog again (reenable via Launchers Settings Dialog)' on:doNotShowAgainHolder.
+                ].
+            ].
+        ] do:[
+            action := OptionBox 
+                      request:aString
+                      label:(resources string:'Warning')
+                      image:(WarningBox iconBitmap)
+                      buttonLabels:(resources array:#('Cancel' 'Correct...' 'Generate' 'Continue'))
+                      values:#(#abort #correct #generate #continue)
+                      default:#continue
+                      onCancel:#abort.
+        ].
+        doNotShowAgainHolder value == true ifTrue:[
+            DoNotShowCompilerWarningAgainActionQuery actionQuery value
+        ].
+    ].
+
+    action == #generate ifTrue:[
+        ^ action
+    ].
+
+    (action isNil or:[action == #abort]) ifTrue:[
+        AbortOperationRequest raise.
+        ^ false
+    ].
+    ^ action == #correct
+
+    "Created: / 19-01-2000 / 16:27:28 / cg"
+    "Modified: / 28-02-2012 / 10:42:37 / cg"
+!
+
+correctableWarning:aString position:relPos to:relEndPos from:aCompiler
+    "compiler notifies us of a correctable warning;
+     hilight the error (relPos to relEndPos) and show a Box asking for continue/correct/abort;
+     this method should return true to the compiler if user wants the error
+     to be corrected; false otherwise"
+
+    ^ self correctableError:aString position:relPos to:relEndPos from:aCompiler
+
+    "Created: / 02-11-2010 / 13:29:01 / cg"
+!
+
+error:aString position:relPos to:relEndPos asWarning:asWarning
+    "obsolete - no longer invoked"
+
+    ^ self error:aString position:relPos to:relEndPos from:nil asWarning:asWarning
+!
+
+error:aString position:relPos to:relEndPos from:aCompiler
+    "compiler notifies us of an error; hilight the error (relPos to relEndPos) 
+     and show a Box asking for continue/abort.
+     Return true for correction, false of not (or not possible)"
+
+    ^ self error:aString position:relPos to:relEndPos from:aCompiler asWarning:false
+
+    "Modified (Comment): / 30-06-2011 / 19:47:36 / cg"
+!
+
+error:aString position:relPos to:relEndPos from:aCompiler asWarning:asWarning
+    "compiler notifies us of an error; hilight the error (relPos to relEndPos)
+     and show a Box asking for continue/abort."
+
+    |answer fg bg|
+
+    fg := asWarning ifTrue:[ self warningForegroundColor ] ifFalse:[ self errorForegroundColor ].
+    bg := asWarning ifTrue:[ self warningBackgroundColor ] ifFalse:[ self errorBackgroundColor ].
+
+    self
+        highlightingErrorPosition:relPos to:relEndPos
+        withForeground:fg andBackground:bg
+        do:[
+            |box lbl doNotShowAgainHolder doNotShowAgainForThisMethodHolder l1 y1 y2 l2|
+
+"/            Warning isHandled ifTrue:[
+"/                Warning raiseErrorString:aString.
+"/                ^ false
+"/            ].
+
+            lbl := aCompiler isNil ifTrue:['Compiler'] ifFalse:[aCompiler class name].
+            asWarning ifTrue:[
+                lbl := lbl , ' Warning'
+            ] ifFalse:[
+                lbl := lbl , ' Error'.
+            ].
+
+            "
+             ask if we should abort or continue
+            "
+            Dialog aboutToOpenBoxNotificationSignal handle:[:ex |
+                |box makeSpace|
+
+                doNotShowAgainHolder := false asValue.
+                doNotShowAgainForThisMethodHolder := false asValue.
+
+                box := ex box.
+                box label:lbl.
+                box perform:#image: with:(WarningBox iconBitmap) ifNotUnderstood:[].
+
+                aCompiler notNil ifTrue:[
+                    makeSpace := [ box addVerticalSpace:10. makeSpace := nil ].
+                    DoNotShowCompilerWarningAgainActionQuery isHandled ifTrue:[
+                        makeSpace value.
+                        box verticalPanel
+                            add:(CheckBox label:'Do not show this dialog again (reenable via Launcher''s settings dialog)' 
+                                          model:doNotShowAgainHolder).
+                    ].
+                    DoNotShowCompilerWarningAgainForThisMethodActionQuery isHandled ifTrue:[
+                        makeSpace value.
+                        box verticalPanel
+                            add:(CheckBox label:(resources string:'Do not warn in this method (for %1 - reenable earlier via Launcher''s settings dialog)' with:ParserFlags perMethodDisableWarningTimeDuration) 
+                                          model:doNotShowAgainForThisMethodHolder).
+                    ].
+                ].
+            ] do:[
+                answer := OptionBox
+                        request:aString 
+                        buttonLabels:(resources array:#('Abort'  "'Keep Selected'" 'Continue')) 
+                        values:#(false "#keepSelected" true)
+                        default:(asWarning ifTrue:true ifFalse:false).
+                answer := answer ? false.   "/ if escaped
+            ].
+"/            box := YesNoBox
+"/                    title:aString
+"/                    yesText:(resources string:'Continue')
+"/                    noText:(resources string:'Abort').
+"/
+"/            box label:lbl.
+"/            box image:(WarningBox iconBitmap).
+"/
+"/            (aCompiler notNil and:[DoNotShowCompilerWarningAgainActionQuery isHandled]) ifTrue:[
+"/                doNotShowAgainHolder := false asValue.
+"/                box addCheckBox:'Do not show this dialog again (reenable via Launchers Settings Dialog)' on:doNotShowAgainHolder.
+"/            ].
+"/
+"/            "/ answer := box confirm.
+"/            answer := box confirm.
+
+            doNotShowAgainHolder value == true ifTrue:[
+                DoNotShowCompilerWarningAgainActionQuery actionQuery value
+            ].
+            doNotShowAgainForThisMethodHolder value == true ifTrue:[
+                DoNotShowCompilerWarningAgainForThisMethodActionQuery actionQuery value
+            ].
+
+"/            box destroy.
+        ].
+
+    answer == #keepSelected ifTrue:[
+        self hideCursor.
+        "redraw selection in normal color"
+        self invalidate.
+        AbortOperationRequest raise.
+    ].
+
+    "
+     do the abort if we have to
+    "
+    answer ifFalse:[
+        "redraw selection in normal color"
+        self invalidate.
+        AbortOperationRequest raise.
+    ].
+    ^ false
+
+    "Created: / 24-11-1995 / 22:56:34 / cg"
+    "Modified: / 08-03-2012 / 10:24:21 / cg"
+!
+
+highlightingErrorLine:lineNr do:aBlock
+    "evaluate aBlock while some selection is shown highlighted with error colors."
+
+    |linePosition|
+
+    linePosition := self characterPositionOfLine:lineNr col:1.
+    self highlightingErrorPosition:linePosition to:nil do:aBlock
+!
+
+highlightingErrorPosition:relPos to:relEndPos do:aBlock
+    "evaluate aBlock while some selection is shown highlighted with error colors."
+
+    self 
+        highlightingErrorPosition:relPos to:relEndPos 
+        withForeground:(self errorForegroundColor) andBackground:(self errorBackgroundColor) 
+        do:aBlock
+!
+
+highlightingErrorPosition:relPos to:relEndPos withForeground:hilightFg andBackground:hilightBg do:aBlock
+    "evaluate aBlock while some selection is shown highlighted with colors passed as args."
+
+    |absPosition oldFg oldBg|
+
+    "
+     change color of selection & hide cursor
+    "
+    oldFg := selectionFgColor.
+    oldBg := selectionBgColor.
+    selectionBgColor := hilightBg.
+    selectionFgColor := hilightFg.
+    self hideCursor.
+
+    "
+     select the text - relEndPos may be nil in which case the whole line is selected
+     we have to adjust the positions given by the compiler, since they
+     are relative to the texts start (the compiler did stream-read the code).
+    "
+    codeStartPosition isNil ifTrue:[codeStartPosition := 1].
+    absPosition := codeStartPosition + (relPos ? 1) - 1.
+    relEndPos isNil ifTrue:[
+        self selectFromCharacterPosition:absPosition.
+        "/ self selectLineWhereCharacterPosition:absPosition.
+    ] ifFalse:[
+        self selectFromCharacterPosition:absPosition to:(codeStartPosition + (relEndPos ? 1) - 1)
+    ].
+    expandingTop := true.       "/ hack to make the top of the selection visible
+    self makeSelectionVisible.
+
+    self flush.
+
+    aBlock ensure:[
+        "
+         undo selection color change and show cursor again
+        "
+        selectionFgColor := oldFg.
+        selectionBgColor := oldBg.
+        self showCursor.
+    ].
+
+    "Modified: / 30-06-2011 / 17:24:04 / cg"
+!
+
+highlightingWarningPosition:relPos to:relEndPos do:aBlock
+    "evaluate aBlock while some selection is shown highlighted with warning colors."
+
+    self 
+        highlightingErrorPosition:relPos to:relEndPos 
+        withForeground:(self warningForegroundColor) andBackground:(self warningBackgroundColor) 
+        do:aBlock
+!
+
+unusedVariableWarning:aString position:relPos to:relEndPos from:aCompiler
+    "compiler notifies us of a (or some) unused variables;
+     hilight the error (relPos to relEndPos) and show a Box asking for continue/correct/abort;
+     this method should return true to the compiler if user wants the error
+     to be corrected; false otherwise"
+
+    |action doNotShowAgainHolder doNotShowAgainForThisMethodHolder|
+
+    self highlightingWarningPosition:relPos to:relEndPos do:[
+        doNotShowAgainHolder := false asValue.
+        doNotShowAgainForThisMethodHolder := false asValue.
+        Dialog aboutToOpenBoxNotificationSignal handle:[:ex |
+            |box makeSpace|
+
+            box := ex box.
+            aCompiler notNil ifTrue:[
+                makeSpace := [ box addVerticalSpace:10. makeSpace := nil ].
+                DoNotShowCompilerWarningAgainActionQuery isHandled ifTrue:[
+                    makeSpace value.
+                    box verticalPanel 
+                        add:(CheckBox 
+                                label: "addCheckBoxAtBottom:" 'Do not show this dialog again (reenable via Launcher''s settings dialog)' 
+                                model:doNotShowAgainHolder).
+                ].
+                DoNotShowCompilerWarningAgainForThisMethodActionQuery isHandled ifTrue:[
+                    makeSpace value.
+                    box verticalPanel
+                        add:(CheckBox
+                                label:(resources string:'Do not warn in this method (for %1 - reenable earlier via Launcher''s settings dialog)' with:ParserFlags perMethodDisableWarningTimeDuration)  
+                                model:doNotShowAgainForThisMethodHolder).
+                ].
+            ].
+        ] do:[
+            action := OptionBox 
+                      request:aString
+                      label:(resources string:'Warning')
+                      image:(WarningBox iconBitmap)
+                      buttonLabels:(resources array:#('Cancel' 'Remove Variable(s)' 'Continue'))
+                      values:#(#abort #correct #continue)
+                      default:#continue.
+            action isNil ifTrue:[ action := #abort].
+        ].
+        doNotShowAgainHolder value == true ifTrue:[
+            DoNotShowCompilerWarningAgainActionQuery actionQuery value
+        ].
+        doNotShowAgainForThisMethodHolder value == true ifTrue:[
+            DoNotShowCompilerWarningAgainForThisMethodActionQuery actionQuery value
+        ].
+    ].
+
+    action == #abort ifTrue:[
+        "/ self halt.
+        AbortOperationRequest raise.
+        ^ false
+    ].
+    ^ action == #correct
+
+    "Modified: / 08-03-2012 / 10:23:58 / cg"
+!
+
+warning:aString position:relPos to:relEndPos from:aCompiler 
+    "compiler notifies us of a warning - same behavior as error"
+
+    self error:aString position:relPos to:relEndPos from:aCompiler asWarning:true 
+! !
+
+!Workspace methodsFor:'drag & drop'!
+
+canDrop:aDropContext
+    "if allowValueDrop is true, any text- or file-object can be dropped into workspace
+     (printString); otherwise, only ..."
+
+    self isReadOnly ifTrue:[^ false].
+
+    allowValueDrop ifTrue:[^ true].
+    ^ super canDrop:aDropContext
+
+"/    ^ aDropContext dropObjects 
+"/        contains:[:someObject| (someObject isTextObject or:[ someObject isFileObject ])].
+
+    "Created: / 16-08-2005 / 22:01:13 / janfrog"
+    "Modified: / 28-11-2006 / 16:18:51 / cg"
+!
+
+doDrop:aDropContext
+    <resource: #obsolete>
+    self obsoleteMethodWarning:'should no longer be reached'.
+    self drop:aDropContext
+
+    "Modified: / 28-11-2006 / 16:14:51 / cg"
+    "Modified (format): / 28-02-2012 / 11:20:38 / cg"
+!
+
+drop:aDropContext
+    "Any object can be dropped into workspace..."
+
+    |textObjects nonTextObjects answer text|
+
+    textObjects := aDropContext dropObjects 
+                            select:[:dropObject | dropObject isTextObject 
+                                                  or:[ dropObject isFileObject ]].
+    nonTextObjects := aDropContext dropObjects 
+                            reject:[:dropObject | dropObject isTextObject 
+                                                  or:[ dropObject isFileObject ]].
+
+    self dropObjects:textObjects.
+
+    nonTextObjects notEmpty ifTrue:[
+        answer := Dialog
+                confirmWithCancel:(resources 
+                                        string:'Drop as textual representation or as object reference ?')
+                labels:(resources array:#('Cancel' 'Reference' 'Name' 'Text'))
+                values:#(nil #ref #name #text)
+                default:4.
+        answer isNil ifTrue:[^ self].
+        (answer == #text or:[answer == #name]) ifTrue:[
+            text := String streamContents:[:s |
+                        nonTextObjects do:[:dropObject |
+                            |obj|
+
+                            obj := dropObject theObject.
+                            obj isMethod ifTrue:[
+                                s nextPutAll:(answer == #name ifTrue:[obj selector] ifFalse:[obj source]).
+                            ] ifFalse:[
+                                obj isClass ifTrue:[
+                                    s nextPutAll:(answer == #name ifTrue:[obj name] ifFalse:[obj source asString])
+                                ] ifFalse:[
+                                    s nextPutAll:(answer == #name ifTrue:[obj className] ifFalse:[obj printString]) .
+                                ].
+                            ].
+                        ].
+                    ].
+            self paste:text.
+        ] ifFalse:[
+            nonTextObjects do:[:dropObject |
+                name := Dialog 
+                        request:(resources 
+                                    string:'Name of the new Workspace Variable (refers to the dropped %1):'
+                                    with:dropObject theObject class name allBold
+                                 )
+                        initialAnswer:'droppedObject'
+                        okLabel:'Add'
+                        title:'Enter Variable Name'.
+
+                name notEmptyOrNil ifTrue:[
+                    Workspace addWorkspaceVariable:name.
+                    Workspace workspaceVariableAt:name put:dropObject theObject.
+                    self paste:name.
+                ].
+            ].
+        ]
+    ].
+
+    "Created: / 13-10-2006 / 17:34:07 / cg"
+! !
+
+!Workspace methodsFor:'editing'!
+
+commentFrom:line1 to:line2
+    "convenient function to comment out a block.
+     All lines from line1 to line2 get an end-of-line comment
+     in the first col 
+     (if no eol comment is available, a bracketing comment is used)."
+
+    |eolComment opening closing|
+
+    eolComment := commentStrings at:1.
+    eolComment isNil ifTrue:[
+        opening := (commentStrings at:2) at:1.
+        closing := (commentStrings at:2) at:2.
+        (opening isNil or:[closing isNil]) ifTrue:[^ self].
+    ].
+
+    line1 to:line2 do:[:lineNr |
+        |l|
+
+        l := self listAt:lineNr.
+        l isNil ifTrue:[l := ''].
+        eolComment notNil ifTrue:[
+            l := eolComment , l
+        ] ifFalse:[
+            l := opening , l , closing
+        ].
+        self replaceLine:lineNr with:l.
+        widthOfWidestLine notNil ifTrue:[
+            widthOfWidestLine := widthOfWidestLine max:(self widthOfLineString:l).
+        ].
+    ].
+    self textChanged.
+
+    "Created: / 09-11-1997 / 01:05:35 / cg"
+    "Modified: / 09-10-2006 / 10:46:44 / cg"
+!
+
+commentSelection
+    "convenient function to comment out a block.
+     All lines from line1 to line2 get an end-of-line comment
+     in the first col."
+
+    |e commentPair opening closing|
+
+    (self checkModificationsAllowed) ifFalse:[ ^ self].
+    commentStrings isNil ifTrue:[ self beep. ^ self].
+
+    selectionStartLine isNil ifTrue:[ 
+        self 
+            undoableDo:[ self commentFrom:cursorLine to:cursorLine ]
+            info:'Comment'.
+        ^ self
+    ].
+
+    self 
+        undoableDo:
+            [
+                (selectionStartCol == 1 and:[selectionEndCol == 0]) ifTrue:[
+                    self commentFrom:selectionStartLine to:selectionEndLine-1
+                ] ifFalse:[
+                    commentPair := commentStrings at:2 ifAbsent:nil.
+                    commentPair isNil ifTrue:[
+                        self beep.
+                    ] ifFalse:[
+                        opening := commentPair at:1.
+                        closing := commentPair at:2.
+                        (opening isNil or:[closing isNil]) ifTrue:[^ self].
+
+                        e := selectionEndCol.
+
+                        self insertString:closing atLine:selectionEndLine col:e+1.
+                        self insertString:opening atLine:selectionStartLine col:selectionStartCol.
+
+                        selectionStartLine == selectionEndLine ifTrue:[e := e + opening size].
+                        self selectFromLine:selectionStartLine col:selectionStartCol
+                                     toLine:selectionEndLine col:e+closing size.
+                    ]
+                ]
+            ]
+        info:'comment'
+
+    "Created: / 9.11.1997 / 01:05:40 / cg"
+    "Modified: / 5.4.1998 / 16:52:23 / cg"
+!
+
+uncommentFrom:line1 to:line2
+    "convenient function to comment out a block.
+     All lines from line1 to line2 get an end-of-line comment
+     in the first col.
+     (if no eol comment is available, a bracketing comment is removed)"
+
+    |eolComment opening closing rest|
+
+    eolComment := commentStrings at:1.
+    eolComment isNil ifTrue:[
+        opening := (commentStrings at:2) at:1.
+        closing := (commentStrings at:2) at:2.
+        (opening isNil or:[closing isNil]) ifTrue:[^ self].
+    ] ifFalse:[
+        rest := eolComment size + 1.
+    ].
+
+    line1 to:line2 do:[:lineNr |
+        |l|
+
+        l := self listAt:lineNr.
+        l notNil ifTrue:[
+            eolComment notNil ifTrue:[
+                (l startsWith:eolComment) ifTrue:[
+                    l := l copyFrom:rest
+                ]
+            ] ifFalse:[
+                ((l startsWith:opening)
+                and:[l endsWith:closing]) ifTrue:[
+                    l := l copyFrom:opening size + 1.
+                    l := l copyButLast:closing size.
+                ]
+            ].
+            self replaceLine:lineNr with:l.
+        ]
+    ].
+    widthOfWidestLine := nil.
+    self textChanged.
+
+    "Created: / 09-11-1997 / 01:05:43 / cg"
+    "Modified: / 09-10-2006 / 10:46:59 / cg"
+!
+
+uncommentSelection
+    "convenient function to comment out a block.
+     All lines from line1 to line2 get an end-of-line comment
+     in the first col."
+
+    |e commentPair opening closing sz1 sz2 l1 l2 c1 c2|
+
+    (self checkModificationsAllowed) ifFalse:[ ^ self].
+    selectionStartLine isNil ifTrue:[ 
+        self 
+            undoableDo:[
+                self uncommentFrom:cursorLine to:cursorLine
+            ]
+            info:'Uncomment'.
+        ^ self
+    ].
+
+    self 
+        undoableDo:
+            [
+                (selectionStartCol == 1 and:[selectionEndCol == 0]) ifTrue:[
+                    self uncommentFrom:selectionStartLine to:selectionEndLine-1
+                ] ifFalse:[
+                    commentPair := commentStrings at:2.
+                    opening := commentPair at:1.
+                    closing := commentPair at:2.
+                    (opening isNil or:[closing isNil]) ifTrue:[^ self].
+
+                    sz1 := opening size.
+                    sz2 := closing size.
+
+                    ((self 
+                        stringAtLine:selectionStartLine 
+                        from:selectionStartCol
+                        to:selectionStartCol+sz1 - 1) = opening
+                    and:[(self 
+                        stringAtLine:selectionEndLine 
+                        from:selectionEndCol - sz2 + 1
+                        to:selectionEndCol) = closing ]) ifTrue:[
+
+                        l2 := selectionEndLine.   c2 := selectionEndCol.
+                        l1 := selectionStartLine. c1 := selectionStartCol.
+                        self deleteCharsAtLine:l2 fromCol:c2-sz2+1 toCol:c2.
+                        self deleteCharsAtLine:l1 fromCol:c1 toCol:c1+sz1-1.
+
+                        e := c2 - sz2.
+                        l1 == l2 ifTrue:[e := e - sz1].
+                        self selectFromLine:l1 col:c1 toLine:l2 col:e.
+                    ]
+                ]
+            ]
+        info:'uncomment'
+
+    "Modified: / 7.1.1997 / 20:13:32 / cg"
+    "Created: / 9.11.1997 / 01:05:46 / cg"
+! !
+
+!Workspace methodsFor:'event handling'!
+
+keyPress:key x:x y:y
+    <resource: #keyboard (#DoIt #InspectIt #PrintIt #ReplaceIt 
+                          #BrowseIt #ImplementorsOfIt #ExpandAbbreviation
+                          #CommentSelection #UncommentSelection)>
+
+    (key == #DoIt)      ifTrue:[self doIt. ^ self].
+    (key == #InspectIt) ifTrue:[self inspectIt. ^ self].
+    (key == #PrintIt)   ifTrue:[self printIt. ^ self].
+    (key == #ReplaceIt) ifTrue:[self replaceIt. ^ self].
+    (key == #BrowseIt)  ifTrue:[self browseIt. ^ self].
+    (key == #ImplementorsOfIt)   ifTrue:[self browseImplementorsOfIt. ^ self].
+    (key == #ExpandAbbreviation) ifTrue:[self expandAbbreviation. ^ self].
+    (key == #CommentSelection)    ifTrue:[self commentSelection. ^ self].
+    (key == #UncommentSelection)  ifTrue:[self uncommentSelection. ^ self].
+
+    super keyPress:key x:x y:y
+
+    "Modified: / 08-11-2007 / 11:29:45 / cg"
+! !
+
+!Workspace methodsFor:'executing'!
+
+do:code withValueDo:aBlock
+    "helper for doIt, printIt and inspectIt. 
+     Evaluate the selection and, if all went well, evaluate the argument, 
+     aBlock with the value.
+     Most work is in preparing for proper cleanup in case of abort
+     or other exception while the evaluation is performed.
+     (restore cursor, selectionColors etc.)"
+
+    |selLine selCol endLine endCol cLine cCol cleanUp executeBlock|
+
+    code notNil ifTrue:[
+        code asString withoutSeparators isEmpty ifTrue:[ ^ self ].
+
+        codeStartPosition := self characterPositionOfSelection.
+
+        "
+         remember selection for later - if there is an error,
+         the notification method will highlight it.
+         thus destroying the current selection
+        "
+        selLine := selectionStartLine.
+        selCol := selectionStartCol.
+        endLine := selectionEndLine.
+        endCol := selectionEndCol.
+        cCol := cursorCol.
+        cLine := cursorLine.
+
+        "
+         cleanup: restore previous selection and cursor positions
+        "
+        cleanUp := [
+                self selectFromLine:selLine col:selCol toLine:endLine col:endCol.
+                cLine notNil ifTrue:[
+                    self cursorLine:cLine col:cCol
+                ].
+        ].
+
+        "
+         perform the action.
+         Be careful to release the reference to the value;
+         otherwise, we could keep lots of garbage from being freed
+         until the view gets closed
+        "
+        executeBlock := [
+                [
+                    AbortOperationRequest handle:[:ex |
+                         "/ aBlock value:'** Abortsignal cought **'.
+                         ex return
+                    ] do:[
+                        |value|
+
+                        doItAction notNil ifTrue:[
+                            value := doItAction value:(code asString).
+                            cleanUp value. cleanUp := nil.
+                            aBlock notNil ifTrue:[
+                                aBlock value:value.
+                            ].
+                            value := nil.
+                            self class rememberDoIt:code.
+                        ]
+                    ]
+                ] ensure:[
+                    cleanUp notNil ifTrue:[
+                        cleanUp value. cleanUp := nil
+                    ].
+                ]
+            ].
+        aBlock isNil ifTrue:[
+            "no action is performed with the result - give the user a visible
+             feedback, that something has been done"
+            self topView withVisibleCursor:Cursor execute do:executeBlock.
+        ] ifFalse:[
+            self topView withCursor:Cursor execute do:executeBlock.
+        ].
+    ]
+
+    "Modified: / 22.4.1998 / 21:56:13 / ca"
+    "Created: / 22.4.1998 / 21:57:05 / ca"
+    "Modified: / 26.9.2001 / 17:32:59 / cg"
+!
+
+executeDoIt:theCode
+    "the core of doIt, printIt, inspectIt, browseIt actions"
+
+    | result compiler |
+
+    "JV@2012-03-19: Changed to reflect value of autoDefineVariables"
+    [
+        result := ( compiler := (self compilerClass ? Compiler) new ) 
+                currentNameSpace:namespaceForDoits;
+                moreSharedPools:poolsConsideredInDoIts;
+                evaluate:theCode 
+                in:nil 
+                receiver:simulatedSelf 
+                notifying:self 
+                logged:true 
+                ifFail:nil
+    ] on: Parser undefinedVariableNotification do:[:ex|
+        (ex parser == compiler and:[autoDefineVariables notNil]) ifTrue:[
+            ex proceedWith: #declare
+        ] ifFalse:[
+            ex proceedWith: nil
+        ].
+    ] on: Parser askForVariableTypeOfUndeclaredQuery do:[:ex|
+        autoDefineVariables == #workspace ifTrue:[
+            ex proceedWith:#WorkspaceVariable
+        ].
+        autoDefineVariables == #doIt ifTrue:[
+            ex proceedWith:#DoItTemporary
+        ].
+        ex pass.
+    ].
+    ^result
+
+    "Modified: / 27-07-2012 / 09:33:39 / cg"
+    "Modified: / 24-06-2013 / 15:31:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Workspace methodsFor:'initialization & release'!
+
+initStyle
+    "setup viewStyle specifics"
+
+    super initStyle.
+
+    DefaultViewBackground notNil ifTrue:[
+        viewBackground := DefaultViewBackground.
+        self backgroundColor:viewBackground.
+    ].
+!
+
+initialize
+    super initialize.
+
+    autoIndent := UserPreferences current autoIndentInCodeView.
+    scrollWhenUpdating := #beginOfText.
+    showMatchingParenthesis := true.
+    allowValueDrop := true.
+
+    commentStrings := #(
+                        '"/'
+                        ('"' '"')
+                       ).
+
+    self initializeDoITAction.
+    self initializeDragAndDrop.
+
+    "Modified: / 28-11-2006 / 16:11:55 / cg"
+!
+
+initializeDoITAction
+    "set up the block to be evaluated for doIts.
+     This is done here in a separate method to allow easier
+     redefinition in subclasses"
+
+    doItAction := [:theCode | self executeDoIt:theCode].
+!
+
+initializeDragAndDrop
+    |target|
+
+    target := DropTarget 
+                    receiver:self
+                    argument:nil
+                    dropSelector:#drop:
+                    canDropSelector:#canDrop:.
+    self dropTarget:target
+
+    "Created: / 16-08-2005 / 22:03:36 / janfrog"
+    "Modified: / 13-10-2006 / 12:37:18 / cg"
+! !
+
+!Workspace methodsFor:'menu & menu actions'!
+
+browseClass
+    "user selected 'browseClass' from menu; evaluate the code
+     and open a browser on the resulting class (if it evaluates to one)"
+
+    ^ self 
+        do:(self selectionAsString) 
+        withValueDo:[:result | 
+            result isBehavior ifTrue:[
+                result browserClass openInClass:result selector:nil
+            ] ifFalse:[
+                self warn:'Selection does not evaluate to a class'
+            ]
+        ].
+
+    "Modified: / 26.9.2001 / 17:37:35 / cg"
+!
+
+browseImplementorsOfIt
+    "open a browser on the implementors of the selected text,
+     or - if I support syntax elements, on the syntax element at the cursor position"
+
+    |selectedText selector browserClass na|
+
+    selectedText := self selectedTextOrSyntaxElement.
+    selectedText notEmptyOrNil ifTrue:[
+        self windowGroup withWaitCursorDo:[
+            "/ hack, for now and expecco; must ask the Parser eventually...
+            (compilerClass notNil and:[compilerClass includesBehavior:JavaScriptParser]) ifTrue:[
+                "/ selector is in one piece anyway
+                (selectedText includes:$_) ifFalse:[
+                    "/ zero or one args - sigh (need to parse more to figure this out)
+                    selector := JavaScriptParser basicNew translatedSmalltalkSelectorFor:selectedText numArgs:1.
+                    selectedText := JavaScriptParser basicNew translatedSmalltalkSelectorFor:selectedText numArgs:0.
+                ] ifTrue:[
+                    "/ count _#s plus one arg - sigh
+                    na := (selectedText occurrencesOf:$_) + 1. 
+                    selector := JavaScriptParser basicNew translatedSmalltalkSelectorFor:selectedText numArgs:na
+                ].
+            ] ifFalse:[
+                selector := SystemBrowser extractSelectorFrom:selectedText.
+            ].
+            browserClass := UserPreferences systemBrowserClass.
+
+            (selector notNil and:[selector ~= selectedText]) ifTrue:[
+                (SystemBrowser 
+                        findImplementorsOfAny:(Array with:selectedText) 
+                        in:(Smalltalk allClasses) 
+                        ignoreCase:false) isEmpty ifTrue:[
+                    browserClass browseImplementorsOf:selector
+                ] ifFalse:[
+                    browserClass browseImplementorsOfAny:(Set with:selector with:selectedText)
+                ].
+            ] ifFalse:[
+                browserClass browseImplementorsOf:(selector ? selectedText)
+            ]
+        ]
+    ].
+
+    "Created: / 5.11.2001 / 17:32:23 / cg"
+    "Modified: / 19.11.2001 / 22:15:17 / cg"
+!
+
+browseIt
+    "evaluate the code and open a browser on the resulting class (if it evaluates to one),
+     or the class of the resulting object (if it does not evaluate to a class).
+
+     Added feature: if selection is of the form class >> selector,  immediately switch to that selector."
+
+    |codeToEvaluate el idx selector evaluatedValue classToBrowse gotResult|
+
+    (self selection isEmptyOrNil 
+        and:[ self supportsSyntaxElements 
+        and:[ (el := self syntaxElementForVariableUnderCursor) notNil ]])
+    ifTrue:[ 
+        codeToEvaluate := el name
+    ] ifFalse:[
+        codeToEvaluate := (self selectionOrTextOfCursorLine ? '') withoutSeparators.
+    ].
+    idx := codeToEvaluate indexOfSubCollection:'>>'.
+    idx ~~ 0 ifTrue:[
+        selector := (codeToEvaluate copyFrom:idx+2) withoutSeparators string.
+        (selector startsWith:'#') ifTrue:[
+            selector := Symbol readFrom:selector.
+        ].
+        codeToEvaluate := codeToEvaluate copyTo:idx-1.   
+    ].
+
+    (Parser parseErrorSignal , MessageNotUnderstood) handle:[:ex |
+        |className|
+
+        (classToBrowse := Smalltalk classNamed:codeToEvaluate) isNil ifTrue:[
+            "/ fallback, if garbage is selected, look for matching classes.
+            className := SystemBrowser
+                askForClassNameMatching:codeToEvaluate 
+                inEnvironment:nil 
+                for:nil.
+
+            className isNil ifTrue:[^ self].
+            classToBrowse := Smalltalk classNamed:className.
+        ]
+    ] do:[
+        gotResult := false.
+
+        self 
+            do:codeToEvaluate 
+            withValueDo:[:result | evaluatedValue := result. gotResult := true.].
+
+        gotResult ifFalse:[^ self].
+
+        evaluatedValue isNil ifTrue:[                       
+            codeToEvaluate asCollectionOfWords size == 1 ifTrue:[
+                codeToEvaluate isUppercaseFirst ifTrue:[
+                    Dialog information:(codeToEvaluate allBold , ' is unbound or nil').
+                    ^ self.
+                ].
+            ]
+        ].
+        classToBrowse := evaluatedValue isBehavior 
+                        ifTrue:[ evaluatedValue ] 
+                        ifFalse:[ evaluatedValue class ].
+    ].
+
+    classToBrowse browserClass openInClass:classToBrowse selector:selector
+
+    "Modified: / 28-02-2012 / 11:23:06 / cg"
+!
+
+browseItsClass
+    "user selected 'browseItsClass' from menu; evaluate the code
+     and open a browser on the results class"
+
+    ^ self 
+        do:(self selectionAsString) 
+        withValueDo:[:result | 
+                        result class browserClass openInClass:result class selector:nil
+                    ]
+
+    "Modified: / 26.9.2001 / 17:38:06 / cg"
+!
+
+browseReferencesToIt
+    "open a browser on all references to the selected global, poolvar or namespace class"
+
+    |nameOfGlobal browserClass|
+
+    nameOfGlobal := self selectedTextOrSyntaxElement.
+    nameOfGlobal notEmptyOrNil ifTrue:[
+        browserClass := UserPreferences systemBrowserClass.
+        self windowGroup withWaitCursorDo:[
+            |cls privateClass|
+
+            "/ is it a class variable?
+            ((cls := self editedClass) notNil
+            and:[ (cls theNonMetaclass allClassVarNames includes:nameOfGlobal) ]) ifTrue:[
+                browserClass
+                    browseRefsTo:nameOfGlobal 
+                    classVars:true 
+                    in:(cls whichClassDefinesClassVar:nameOfGlobal) withAllSubclasses 
+                    modificationsOnly:false.
+            ] ifFalse:[
+                "/ is it a private class?
+                (cls notNil
+                and:[ (privateClass := cls theNonMetaclass privateClassNamed:nameOfGlobal) notNil ]) ifTrue:[
+                    browserClass browseReferendsOf:(privateClass name)
+                ] ifFalse:[
+                    |pool nsClass|
+
+                    "/ is it a pool variable?
+                    cls notNil ifTrue:[
+                        pool := cls theNonMetaclass sharedPools 
+                                detect:[:pool | pool classVarNames includes:nameOfGlobal]
+                                ifNone:nil.
+                    ].
+                    pool notNil ifTrue:[
+                        browserClass browseReferendsOf:(pool name,':',nameOfGlobal)
+                    ] ifFalse:[
+                        (cls notNil
+                          and:[ cls nameSpace notNil
+                          and:[ nameOfGlobal knownAsSymbol
+                          and:[ (nsClass := cls nameSpace at:nameOfGlobal asSymbol) notNil
+                        ]]]) notNil ifTrue:[
+                            "/ a namespace class
+                            browserClass browseReferendsOf:nsClass name
+                        ] ifFalse:[
+                            "/ no, assume global
+                            browserClass browseReferendsOf:nameOfGlobal
+                        ]
+                    ]
+                ]
+            ]
+        ].
+    ].
+
+    "Created: / 5.11.2001 / 17:32:23 / cg"
+    "Modified: / 5.11.2001 / 17:32:38 / cg"
+!
+
+browseSendersOfIt
+    "open a browser on the senders of the selected text"
+
+    |selectedText selector|
+
+    selectedText := self selectedTextOrSyntaxElement.
+    selectedText notEmptyOrNil ifTrue:[
+        self windowGroup withWaitCursorDo:[
+            selector := SystemBrowser extractSelectorFrom:selectedText.
+            (UserPreferences systemBrowserClass)
+                browseAllCallsOn:(selector ? selectedText)
+        ]
+    ].
+
+    "Created: / 5.11.2001 / 17:32:23 / cg"
+    "Modified: / 19.11.2001 / 22:15:27 / cg"
+!
+
+browseSharedPoolOfIt
+    "open a browser on the shared pool in which the selected variable is"
+
+    |sel|
+
+    sel := self selectedTextOrSyntaxElement.
+    sel notEmptyOrNil ifTrue:[
+        sel := sel asSymbol.
+        self windowGroup withWaitCursorDo:[
+            SharedPool allSubclassesDo:[:eachPool |
+                (eachPool includesKey:sel) ifTrue:[
+                    (UserPreferences systemBrowserClass) 
+                        openInClass:eachPool class selector:#initialize
+                ].
+            ].
+        ].
+    ].
+
+    "Created: / 15-01-2011 / 14:01:39 / cg"
+!
+
+doIt
+    "user selected 'doIt' from menu; show a wait-cursor, evaluate the code
+     and finally restore cursor; return result of evaluation"
+
+    ^ self 
+        do:(self selectionOrTextOfCursorLine) 
+        withValueDo:nil
+
+    "Modified: / 16.5.1998 / 16:45:01 / cg"
+!
+
+editMenu
+    "return my popUpMenu; thats the superclasses menu
+     PLUS st-evaluation items: doIt, printIt and inspectIt."
+
+    <resource: #keyboard (#DoIt #PrintIt #InspectIt 
+                          #CommentSelection #UncommentSelection
+                          #BrowseIt #ImplementorsOfIt
+                         )>
+    <resource: #programMenu>
+
+    |m sub subsub idx sensor sel2 sel selectedSymbol|
+
+    m := super editMenu.
+    ((sensor := self sensor) notNil and:[sensor ctrlDown and:[sensor shiftDown not]]) ifTrue:[
+        sub := m.
+        m := nil.
+    ] ifFalse:[
+        sub := m subMenuAt:#others.
+    ].
+
+    sub notNil ifTrue:[
+        "
+         workspaces support #browse, implementors etc. add them after paste.
+        "
+        sub 
+            addItemList:#(
+                ('-'                                                                        )
+                ('Browse'                       browseIt                BrowseIt            )
+                ('Browse Pool'                  browseSharedPoolOfIt                        )
+                ('Senders of It'                browseSendersOfIt                           )
+                ('Implementors of It'           browseImplementorsOfIt  ImplementorsOfIt    )
+                ('References to It'             browseReferencesToIt                        )
+"/                ('Classes Containing It in Name'    browseClassesContainingItInName           )
+"/                ('Methods Contaníning It in Name'   browseMethodsContainingItInName           )
+"/                ('Methods Contaníning It in Source' browseMethodsContainingItInSource         )
+                ('-'                                                                )
+                ('TimeIt'               timeIt                                      )
+                ('SpyOnIt'              spyOnIt                                     ))
+          resources:resources  
+          after:#gotoLine.
+
+        subsub := sub subMenuAt:#tools.
+        subsub notNil ifTrue:[
+            subsub
+                addItemList:#(
+                    ('-'                                                                )
+                    ('CommentIt'            commentSelection        CommentSelection    )
+                    ('UncommentIt'          uncommentSelection      UncommentSelection  ))
+              resources:resources  
+              after:#'indent'.
+        ].
+
+        self hasSelection ifFalse:[
+            sub disableAll:#(browseImplementorsOfIt browseSendersOfIt 
+                             browseReferencesToIt timeIt spyOnIt
+                             browseSharedPoolOfIt browseIt). 
+            self supportsSyntaxElements ifTrue:[
+                self syntaxElementForSelectorUnderCursor notNil ifTrue:[
+                    sub enableAll:#(browseImplementorsOfIt browseSendersOfIt ) 
+                ] ifFalse:[
+                    |el|
+
+                    (el := self syntaxElementForVariableUnderCursor) notNil ifTrue:[
+                        el isGlobal ifTrue:[
+                            sub enable: #browseReferencesToIt
+                        ].
+                        el isClass ifTrue:[
+                            sub enable:#browseIt
+                        ]
+                    ]
+                ]
+            ].
+        ] ifTrue:[
+            sel := self selectionAsString.
+            sel notNil ifTrue:[
+                sel asSymbolIfInterned isNil ifTrue:[
+                    sel2 := SystemBrowser extractSelectorFrom:sel.
+                    sel2 notNil ifTrue:[
+                        sel2 := sel2 asSymbolIfInterned.
+                    ].
+                ].
+            ].
+            (sel2 isNil and:[sel isNil]) ifTrue:[
+                sub disableAll:#(browseImplementorsOfIt browseSendersOfIt).
+            ].
+            "/ a global or namespace-var selected ?
+            sel isNil ifTrue:[
+                sub disable:#browseReferencesToIt.
+            ] ifFalse:[
+                selectedSymbol := sel asSymbolIfInterned.
+                (selectedSymbol notNil
+                 and:[(Smalltalk includesKey:selectedSymbol)
+                      or:[(NameSpace allNameSpaces contains:[:ns | ns includesKey:selectedSymbol]) ]]
+                ) ifTrue:[
+                    "/ a global or namespace var selected
+                ] ifFalse:[
+                    |cls|
+
+                    cls := self editedClass.
+                    cls notNil ifTrue:[
+                        cls := cls theNonMetaclass.
+                        ((cls allClassVarNames includes:sel)
+                          or:[ (cls theNonMetaclass privateClassNamed:sel) notNil]) ifTrue:[
+                            "/ a classvar or private class
+                        ] ifFalse:[
+                            |pool|
+                            "/ is it a pool variable?
+                            pool := cls sharedPools 
+                                    detect:[:pool | pool classVarNames includes:sel]
+                                    ifNone:nil.
+                            pool isNil ifTrue:[
+                                "/ todo: an instvar selected?
+                                sub disable:#browseReferencesToIt.
+                            ].
+                        ].
+                    ] ifFalse:[
+                        sub disable:#browseReferencesToIt.
+                    ].
+                ].
+            ].
+            (selectedSymbol notNil 
+             and:[SharedPool allSubclasses contains:[:pool | pool includesKey:selectedSymbol]]) ifFalse:[
+                sub disable:#browseSharedPoolOfIt.
+            ].
+        ].
+        self isReadOnly ifTrue:[
+            sub disableAll:#(commentSelection uncommentSelection) 
+        ].
+    ].
+
+    m notNil ifTrue:[
+        "
+         workspaces support #doIt, #printIt and #inspectIt
+         add them after paste.
+        "
+        idx := m indexOf:#paste.
+        idx == 0 ifTrue:[idx := m indexOf:#pasteOrReplace].
+        idx ~~ 0 ifTrue:[
+            m 
+              addItemList:#(
+                ('-'                                )
+                ('DoIt'         doIt        DoIt     )
+                ('PrintIt'      printIt     PrintIt  )
+                ('InspectIt'    inspectIt   InspectIt))
+              resources:resources  
+              after:idx.
+
+        ].
+
+        (self hasSelectionOrTextInCursorLine) ifFalse:[
+            |lNr line|
+
+            lNr := self cursorLine.
+            line := self listAt:lNr.
+            line isEmptyOrNil ifTrue:[
+                m disableAll:#(printIt doIt inspectIt browseIt) 
+            ].
+        ].
+        self isReadOnly ifTrue:[
+            m disable:#printIt 
+        ].
+    ].
+
+    ^ m ? sub.
+
+    "Modified: / 22-04-1998 / 21:49:06 / ca"
+    "Modified: / 20-12-2011 / 11:22:20 / cg"
+!
+
+inspectIt
+    "user selected 'inspectIt' from menu; use doIt to evaluate the code
+     and start an inspector on the result"
+
+    |shifted|
+
+    shifted := self sensor shiftDown.
+
+    ^ self 
+        do:(self selectionOrTextOfCursorLine) 
+        withValueDo:[:result | shifted ifTrue:[result basicInspect] ifFalse:[result inspect] ]
+
+    "Modified: / 16.5.1998 / 16:44:56 / cg"
+!
+
+printIt
+    "user selected 'printIt' from menu; use doIt to evaluate the code
+     and insert result of evaluation into my text.
+     If the text is readOnly, do nothing."
+
+    self isReadOnly ifTrue:[
+        self beep.
+        ^ self.
+    ].
+    self 
+        undoableDo:[
+            self 
+                do:(self selectionOrTextOfCursorLine) 
+                withValueDo:[:result |
+                    |s printer|
+
+                    self cursorLine:selectionEndLine col:(selectionEndCol + 1).
+                    (self editedLanguage notNil
+                    and:[(printer := self editedLanguage valuePrinterClass) notNil]) ifTrue:[
+                        s := printer printStringForPrintItOf:result
+                    ] ifFalse:[
+                        (result isInteger 
+                        and:[ result > 10 
+                        and:[ InspectorView defaultIntegerDisplayRadix ~= 10 ]]) ifTrue:[
+                            s := result displayString , ' "',(result radixPrintStringRadix: InspectorView defaultIntegerDisplayRadix),'"'.
+                        ] ifFalse:[
+                            s := result printStringForPrintIt "old: displayString" "very old: printString"
+                        ].
+                    ].
+                    self insertSelectedStringAtCursor:s
+                ]
+        ] 
+        info:'PrintIt'
+
+    "Modified: / 08-03-2012 / 16:14:34 / cg"
+!
+
+profileIt
+    "user selected 'profileIt' from menu; show a wait-cursor, profile the code
+     and finally restore the cursor. Open a visual profiler on the sample data."
+
+    self spyOnItUsing:Tools::Profiler
+!
+
+replaceIt
+    "like printIt, but replace the selection with the result, instead of
+     pasting it after the selection."
+
+    self isReadOnly ifTrue:[
+        self beep.
+        ^ self
+    ].
+
+    self 
+        undoableDo:[
+            self 
+                do:(self selectionOrTextOfCursorLine) 
+                withValueDo:[:result |
+                    self replaceSelectionBy:(result displayString "printString")
+                ].
+                undoSupport actionInfo:'ReplaceIt'.
+        ]
+        info:'ReplaceIt'
+
+    "Created: / 08-11-2007 / 11:31:54 / cg"
+!
+
+spyOnIt
+    "user selected 'spyOnIt' from menu; show a wait-cursor, evaluate the code
+     and finally restore the cursor. Show profile data on the Transcript"
+
+    self spyOnItUsing:MessageTally
+!
+
+spyOnItUsing:aProfiler
+    "common code for spyOnIt / profileIt.
+     Show a wait-cursor, evaluate the code with profier on it,
+     and finally restore the cursor. Show profile data as per profiler"
+
+    |code|
+
+    compilerClass == Smalltalk::Compiler ifFalse:[
+        "sigh - this measurement will include the time to compile - sigh"
+        aProfiler spyDetailedOn:[ self doIt ].
+        ^ self.
+    ].
+
+    code := aProfiler name,' spyDetailedOn:[' , (self selectionOrTextOfCursorLine), ']'.
+    self do:code withValueDo:[:value| ].
+!
+
+timeIt
+    "user selected 'timeIt' from menu; show a wait-cursor, evaluate the code
+     and finally restore cursor; return result of evaluation"
+
+    |code t|
+
+    compilerClass == Smalltalk::Compiler ifFalse:[
+        "sigh - this measurement will include the time to compile - sigh"
+        t := Time millisecondsToRun:[ self doIt ].
+        Transcript showCR:'execution time: ' , t printString , ' ms'.
+        ^ self.
+    ].
+
+    code := '|t| t := Time millisecondsToRun:[' , self selectionAsString, '].
+             Transcript showCR:''execution time: '' , t printString , '' ms''.'.
+    self do:code withValueDo:[:value | ].
+
+    "Modified: / 22-04-1998 / 22:03:51 / ca"
+    "Modified (format): / 02-06-2012 / 00:38:51 / cg"
+! !
+
+!Workspace methodsFor:'misc'!
+
+expandAbbreviation
+    "after receiving an Alt-shift key-event, look for the string before the
+     cursor, find an abbrev for it and expand."
+
+    |expandedString abortExpandAction oldSelectionStartLine oldSelectionStartCol oldSelectionEndLine oldSelectionEndCol oldCursorLine oldCursorCol
+     newCursorPos replStartCol|
+
+    oldCursorLine := self cursorLine.
+    oldCursorCol := self cursorCol.
+    oldSelectionStartLine := self selectionStartLine.
+    oldSelectionStartCol := self selectionStartCol.
+    oldSelectionEndLine := self selectionEndLine.
+    oldSelectionEndCol := self selectionEndCol.
+
+    abortExpandAction := 
+        [
+            self 
+                selectFromLine:oldSelectionStartLine col:oldSelectionStartCol 
+                toLine:oldSelectionEndLine col:oldSelectionEndCol.
+            self cursorLine:oldCursorLine col:oldCursorCol.
+        ].                                  
+
+    expandedString := self selectAbbreviationKeyBeforeCursor. "/ returns the new string AND selects the key
+    expandedString isNil ifTrue:[
+        abortExpandAction value.
+        ^ self
+    ].
+    newCursorPos := expandedString indexOf:$!!.
+    newCursorPos ~~ 0 ifTrue:[
+        expandedString := expandedString copyWithout:$!!.
+    ].
+    replStartCol := self selectionStartCol.
+    self
+        undoableDo:[
+            self replaceSelectionBy: expandedString
+        ]
+        info:'Replace'.
+
+    newCursorPos == 0 ifTrue:[
+        "/ cursor already fine (at the end)
+    ] ifFalse:[
+        self cursorCol:replStartCol+newCursorPos-1
+    ]
+!
+
+findAbbreviationKeyBeforeCursor
+    "after receiving an Alt-shift key-event, look for the string before the
+     cursor, find an abbrev for it, return the key and the abbreviation for it.   
+     If none is found, return nil"
+
+    |snippets keys minMax maxKeyLen minKeyLen stringBeforeCursor|
+
+    snippets := self class sniplets.
+    keys := snippets keys.
+
+    minMax := (keys collect:[:k | k size]) minMax.
+    minKeyLen := minMax first.
+    maxKeyLen := minMax second.
+
+    stringBeforeCursor := self lineStringBeforeCursor.
+    maxKeyLen := maxKeyLen min:stringBeforeCursor size.
+
+    maxKeyLen to:minKeyLen by:-1 do:[:keyLen |
+        |lCharactersBeforeCursor expandedString|
+
+        lCharactersBeforeCursor := stringBeforeCursor last:keyLen.
+        expandedString := snippets at:lCharactersBeforeCursor ifAbsent:nil.
+        expandedString notNil ifTrue:[
+            ^ { lCharactersBeforeCursor . expandedString withCRs }
+        ].
+    ].
+    ^ nil.
+
+    "Modified: / 29-10-2010 / 10:22:38 / cg"
+!
+
+selectAbbreviationKeyBeforeCursor
+    "after receiving an Alt-shift key-event, look for the string before the
+     cursor, find an abbrev for it, select it and return the abbreviation for it.   
+     If none is found, do not select and return nil"
+
+    |keyAndSnippet snippet key|
+
+    (keyAndSnippet := self findAbbreviationKeyBeforeCursor) notNil ifTrue:[
+        key := keyAndSnippet first.
+        snippet := keyAndSnippet second.
+        self selectFromLine:cursorLine col:cursorCol-key size toLine:cursorLine col:cursorCol-1.
+        ^ snippet
+    ].
+    ^ nil.
+
+    "Modified: / 29-10-2010 / 10:22:38 / cg"
+!
+
+selectedTextOrSyntaxElement
+    |selectedText el|
+
+    selectedText := self selectionAsString.
+    selectedText isEmptyOrNil ifTrue:[
+        self supportsSyntaxElements ifTrue:[
+            el := self syntaxElementForSelectorUnderCursor.
+            el notNil ifTrue:[ selectedText := el value ].
+        ]
+    ].
+    ^ selectedText 
+!
+
+syntaxElementForSelectorUnderCursor
+    "we do not support syntax elements, but subclasses do"
+
+    ^ nil
+! !
+
+!Workspace methodsFor:'queries'!
+
+isWorkspace
+    "back-query from the compiler to ask if this is an interactive view
+     (for error feedback)"
+
+    ^ true
+
+    "Modified (comment): / 07-03-2012 / 17:52:59 / cg"
+! !
+
+!Workspace class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.329 2014-05-12 21:03:54 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.329 2014-05-12 21:03:54 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WorkspaceCompletionSupport.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,248 @@
+"{ Package: 'stx:libwidg' }"
+
+EditTextViewCompletionSupport subclass:#WorkspaceCompletionSupport
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Smalltalk'
+!
+
+!WorkspaceCompletionSupport class methodsFor:'documentation'!
+
+documentation
+"
+    A completion support using DWIM to complete code for Smalltalk (and JavaScript)
+
+    [author:]
+        Claus Gittinger
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+        DoWhatIMeanSupport
+
+"
+! !
+
+!WorkspaceCompletionSupport methodsFor:'private'!
+
+computeCompletions
+
+    |suggestions implementations actions anyFound contextOrNil|
+
+    "/ a hack
+    (editView topView isKindOf: DebugView) ifTrue:[
+        contextOrNil := editView topView selectedContext.
+    ].
+
+    UserInformation ignoreIn:[
+        anyFound := false.
+        DoWhatIMeanSupport 
+            codeCompletionFor: editView codeAspect
+            language: editView editedLanguage
+            method:editView editedMethod
+            orClass:editView editedClass 
+            context:contextOrNil 
+            codeView:editView 
+            into:[:listOfSuggestions :listOfActions :titleWhenAsking |
+"/ (listOfSuggestions contains:[:l | l isEmptyOrNil]) ifTrue:[self halt].
+                    suggestions := listOfSuggestions collect:[:entry | entry isArray ifTrue:[entry first] ifFalse:[entry]].
+                    implementations := listOfSuggestions collect:[:entry | entry isArray ifTrue:[entry second] ifFalse:[nil]].                            
+                    actions := listOfActions.
+                    anyFound := true.
+                    nil "/ must return nil to avoid DWIM to do it itself (for now)
+            ]
+    ].
+    "/ anyFound ifFalse:[self halt].
+    "/ Transcript show:'suggestions: '; showCR:suggestions.
+    "/ Transcript show:'actions: '; showCR:actions.  
+    editView sensor
+        pushUserEvent:#'suggestionsArrived:implementations:actions:autoSelect:'
+        for:self
+        withArguments:{suggestions . implementations . actions . autoSelect }
+
+    "Created: / 26-09-2013 / 17:44:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+suggestionsArrived:suggestionsArg implementations:implementationsArg actions:actionsArg autoSelect:autoSelectArg
+    "the background process has generated some suggestions"
+
+    |v suggestions implementations actions suggestionOffset keyAndSnippet indexOfSnippet|
+
+    (editView sensor hasKeyPressEventFor:nil) ifTrue:[ 
+        self closeCompletionView. 
+        ^ self
+    ].
+
+    implementations := implementationsArg.
+    actions := actionsArg.
+
+    suggestions := suggestionsArg ? #().
+    suggestions size > 20 ifTrue:[ 
+        suggestions := suggestions copyTo:20.
+        implementations := implementations copyTo:20.
+        actions isArray ifTrue:[ actions := actions copyTo:20 ].
+    ].
+
+    "/ append snipplet, if any (can be easily reached via CRSR-up)
+    suggestionOffset := 0.
+    indexOfSnippet := nil.
+    UserPreferences current appendAbbreviationsToCompletionSuggestions ifTrue:[
+        (keyAndSnippet := editView findAbbreviationKeyBeforeCursor) notNil ifTrue:[
+            |abbrev sniplet i line|
+
+            abbrev := keyAndSnippet first.
+            sniplet := keyAndSnippet second.
+
+            "/ if the abbreviation is simply at the end of a longer word, ignore the abbrev.
+            line := editView lineStringBeforeCursor.
+            i := line findLast:[:ch | ch isLetterOrDigit not].
+            (i < (line size - abbrev size - 1)) ifFalse:[
+                sniplet := sniplet copyWithout:$!!.
+
+                "/ true, false and self are often found in both lists
+                (suggestions includes:sniplet) ifFalse:[   
+                    suggestions isEmpty ifFalse:[ suggestions := suggestions copyWith: '-' ]. 
+                    suggestions := suggestions copyWith: ( '%1 %2'
+                                            bindWith:(sniplet asStringCollection first "contractTo:25")
+                                            with: ( ('("',abbrev,'" snippet)') colorizeAllWith:Color grey)).
+                    indexOfSnippet := suggestions size.
+
+                    "/ change below, when reversing the order in above code
+                    "/ suggestionOffset := 2.
+                ]
+            ]
+        ].
+    ].
+
+    suggestions isEmptyOrNil ifTrue:[
+        self closeCompletionView.
+        ^ self
+    ].
+    (v := completionView) isNil ifTrue: [
+        ^ self
+    ].
+
+    v sensor
+        pushUserEvent:#value
+        for:[
+            |top idx preselectIdx performCompletion|
+
+            (v == completionView) ifTrue: [
+                top := v topView.
+                autoSelectArg ifTrue:[
+                    LastCompletions notNil ifTrue:[
+                        "/ one of the last completions in list?
+                        idx := LastCompletions findFirst:[:compl | suggestions includes:compl].
+                        idx ~~ 0 ifTrue:[
+                            preselectIdx := suggestions indexOf:(LastCompletions at:idx).
+                        ].
+                    ].
+                    (preselectIdx isNil and:[suggestions size == 1]) ifTrue:[
+                        preselectIdx := 1.
+                    ].
+                ].
+                preselectIdx notNil ifTrue:[
+                    |pref|
+
+                    pref := suggestions at:preselectIdx.
+                    pref notNil ifTrue:[
+                        "/ for now, do not move to front (action needs the index)
+                        suggestions at:preselectIdx put:(pref allBold).
+"/                    suggestions removeAtIndex:preselectIdx.                    
+"/                    suggestions addFirst:(pref allBold).
+"/                    implementations notNil ifTrue:[
+"/                        implementations removeAtIndex:preselectIdx.
+"/                        implementations addFirst:implementations.
+"/                    ]
+                    ].
+                ].
+
+                performCompletion :=
+                    [:selectedListIndex | 
+                        |indexInSuggestions|
+
+                        self closeCompletionView.
+                        indexInSuggestions := selectedListIndex - suggestionOffset.
+                        (selectedListIndex == indexOfSnippet) ifTrue:[
+                            "/ replace the sniplet
+                            editView sensor pushUserEvent:#expandAbbreviation for:editView
+                        ] ifFalse:[
+                            LastCompletions isNil ifTrue:[
+                                LastCompletions := OrderedCollection new.
+                            ].
+                            LastCompletions add:(suggestions at:indexInSuggestions).
+                            LastCompletions size > 200 ifTrue:[
+                                LastCompletions removeLast
+                            ].
+
+                            actions notNil ifTrue:[
+                                actions isBlock ifTrue:[
+                                    actions value:indexInSuggestions
+                                ] ifFalse:[
+                                    (actions at:indexInSuggestions) value
+                                ].
+                            ].
+                        ].
+                        "/ disabled - user has made his choice; so don't show more suggestions
+                        "/ editView sensor pushUserEvent:#updateCompletionList for:self
+                    ].
+
+                (autoSelectArg 
+                    and:[ (suggestions size == 1) 
+                    and:[ preselectIdx == 1
+                    and:[ preselectIdx ~~ indexOfSnippet ]]]) ifTrue:[
+                    "/ do it, right here and now
+                    performCompletion value:preselectIdx.
+                ] ifFalse:[
+                    top open.
+                    v list:suggestions 
+                            expandTabs:false scanForNonStrings:false
+                            includesNonStrings:false redraw:true.
+
+                    implementations notNil ifTrue:[
+                        implementations keysAndValuesDo:[:idx :impls |
+                            |implsMenu|
+
+                            impls notEmptyOrNil ifTrue:[
+                                implsMenu := Menu new.
+                                impls do:[:each |
+                                    implsMenu addItem:(MenuItem new label:each name).
+                                ].
+                                v subMenuAt:idx put:implsMenu
+                            ].
+                        ].
+                    ].
+
+                    v enable:true.
+                    preselectIdx notNil ifTrue:[
+                        "/ very disturbing!!
+                        v selection:preselectIdx.
+                    ].
+                    v extent:completionView preferredExtentForContents.
+                    v action:performCompletion.
+
+                    (top ~~ v) ifTrue:[
+                        top resizeToFit.
+                        top bottom > v device usableHeight ifTrue:[
+                            top origin:((top origin x) @ (v device usableHeight - v height)).
+                        ].
+                        top raise.
+                    ]
+                ]
+            ]
+        ]
+! !
+
+!WorkspaceCompletionSupport class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/WorkspaceCompletionSupport.st,v 1.7 2014-01-28 19:27:02 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/WorkspaceCompletionSupport.st,v 1.7 2014-01-28 19:27:02 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XPToolbarIconLibrary.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4977 @@
+"
+ COPYRIGHT (c) 2004 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+GenericToolbarIconLibrary subclass:#XPToolbarIconLibrary
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Smalltalk'
+!
+
+!XPToolbarIconLibrary class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2004 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    ToolbarIconLibrary := XPToolbarIconLibrary.
+
+    Notice and Warning:
+        only redefine existing icons here; never add ionly to here.
+        For every icon-method here, there MUST be a corresponding (albeit
+        possibly ugly) icon-method in GenericToolBarIcon.
+"
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs'!
+
+addBreakPointIcon2
+    "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 addBreakPointIcon2 inspect
+     ImageEditor openOnClass:self andSelector:#addBreakPointIcon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class addBreakPointIcon2'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 21; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'EUUT_??=_:+=_%V=^TA-^P@-^P@-^P@-_ B=_:+=_??=_:+=_**=^)V-^%U-^%U-^UU-_%V=_:+=_??=EUUT') ; colorMapFromArray:#[255 0 0 63 63 63 0 0 0 127 127 127]; mask:((Depth1Image new) width: 12; height: 21; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_>C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<G? ') ; yourself); yourself]
+!
+
+addOverlayIcon
+    "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 addOverlayIcon inspect
+     ImageEditor openOnClass:self andSelector:#addOverlayIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class addOverlayIcon'
+	ifAbsentPut:[(Depth8Image new) width: 11; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+R@@@RT%RST1LTD9H@D%IT%MRSD1PS$!!RT$5RUEILT%INT%UVT%YWU%IVUUIHT%!!YV%-ZVU!!RWD!!MT%Y[@E-VT%5\RD1RU%,@V5YRWU1HT%!!YV%-ZVU!!RWEIU
+U%IVU5YRU%URZ%IR@EITT ART&,@@@@@T%MR@@@@@@@@@@@@T @@@@@@') ; colorMapFromArray:#[255 248 248 63 144 224 64 152 232 79 160 232 64 152 224 64 144 224 63 136 224 48 128 216 48 120 216 47 112 216 47 112 208 32 104 208 32 96 208 31 88 200 16 88 200 16 80 200 15 72 192 15 64 192 0 64 192 0 56 184 0 56 176 0 48 160 143 200 248 128 200 248 127 192 248 112 184 248 111 176 248 96 168 248 95 160 248 80 152 248 79 144 248 64 128 248 63 120 248 48 112 248 32 104 248 31 96 248 16 88 248 15 80 248 0 72 248 0 64 240 0 48 168 112 176 248 111 168 248 96 160 248 95 152 248 80 144 248 79 136 248 63 128 248 48 120 248 47 112 248 15 72 248 0 48 176 95 168 232 191 224 248 191 216 248 176 208 248 175 208 248 175 200 248 160 200 248 160 192 248 159 192 248 159 184 248 144 184 248 144 176 248 143 168 248 128 168 248 128 160 248 127 160 248 127 152 240 31 72 176 111 168 232 127 160 216 207 216 240 240 240 248 240 232 240 63 88 176 239 232 240 240 240 240 48 88 176 96 168 224 224 224 232 96 160 224 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200 48 80 176 223 216 224 96 152 224 96 152 216 95 152 216 48 120 208 80 144 208 80 136 208 79 128 200 79 120 200 79 120 192 64 112 192 64 104 184 63 104 184 63 96 184 15 56 160]; mask:((Depth1Image new) width: 11; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A@@N@F;@?>A?0G>@O8A?0O? [,@N@@P@') ; yourself); yourself]
+!
+
+addOverlayIcon2
+    "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 addOverlayIcon2 inspect
+     ImageEditor openOnClass:self andSelector:#addOverlayIcon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class addOverlayIcon2'
+	ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@% <@@@@@@@@@@@@@@C/P&.4@@@@@@@@@@@@@WGDIZ@@@@@@@@@@@@@B?B:Y(@@@@@@@@@@@@@N<AQ$8@@@@@@@CXFF=//:% S''L#^''(@H\''@X6ET
+:4XINT=JR.T/PYMY\WEF78#DRL;N#@CHS$9N4P$+H7)2&I @@@@@@@B@RT=^@@@@@@@@@@@@@M%OFYD@@@@@@@@@@@@@W3CN" @@@@@@@@@@@@C'''' :4@@@@
+@@@@@@@@@@@BIP@@@@@@@@@a') ; colorMapFromArray:#[176 175 128 176 240 159 143 159 128 240 240 208 240 223 128 192 160 112 192 159 79 191 160 111 255 240 208 127 208 96 255 255 224 175 239 144 239 239 176 191 176 175 15 79 0 160 176 95 255 208 128 255 240 224 208 207 192 192 160 111 239 223 111 175 160 159 255 240 207 47 32 31 0 160 0 64 176 48 95 80 79 176 160 128 111 128 48 143 128 127 208 208 207 255 240 223 208 207 191 112 159 95 79 64 63 0 96 0 240 224 160 144 159 143 255 255 223 239 224 176 224 223 127 176 160 127 160 159 144 96 207 80 240 224 128 224 224 223 223 207 207 127 159 111 63 175 48 160 144 96 112 111 96 175 159 112 240 239 176 255 224 127 239 223 143 176 144 96 191 159 111 96 207 79 224 224 175 80 176 64 240 239 143 223 208 159 176 127 64 144 144 143 240 224 159 31 159 31 240 239 175 223 208 191 208 207 144 160 144 143 143 224 112 240 239 208 64 176 63 95 207 79 63 160 47 207 191 144 160 128 64 255 224 176 0 127 0 80 191 64 208 192 143 239 207 112 223 192 96 160 143 111 176 240 144 239 224 192 255 239 160 207 192 176 223 191 95 143 239 112 255 224 175 240 224 207 15 160 15 80 79 79 16 95 16 0 80 0 143 224 111 191 240 159 255 224 143 175 240 144 208 176 80 207 191 143 63 63 48 240 208 128 15 127 15 255 239 191 192 192 191 207 207 207 207 176 112 63 48 47 112 112 111 0 175 0 223 207 191 144 239 127 0 79 0 0 112 0 239 224 223 159 159 144 224 223 192 223 192 160 111 96 47 191 176 159 0 95 0 255 255 240 239 224 191 192 191 191 176 176 175 207 175 112 15 112 15 208 192 192 144 143 96 240 223 143 223 192 159 223 191 128 176 160 112 175 175 175 111 207 80 96 95 80 16 79 16 176 160 144 15 79 15 159 144 143 240 240 176 128 127 112 224 223 191 16 80 16 192 175 127 128 223 111 191 159 96 31 31 16 159 159 63 80 80 79 15 64 15 160 159 159 31 144 16 255 240 192 240 240 224 208 207 207 16 80 15 64 64 63 160 160 160 160 143 96 143 144 128 224 208 143 255 239 143 176 144 111 128 224 111 159 144 128 255 240 191 176 239 159 96 96 95 111 111 96 207 207 192 160 160 159 240 208 144 175 143 111 240 223 160 255 208 112 223 223 208 192 176 112 95 112 80 144 128 80 240 224 144 255 240 239 255 255 208 192 192 176 207 191 160 160 144 128 240 208 143 32 32 31 224 223 208 15 175 15 144 224 127 64 63 48 48 48 47 144 112 48 95 192 79 240 224 192 240 239 160 239 192 96 31 95 15 32 160 31 159 143 80 175 175 160 224 223 207 223 208 208 48 159 47 191 176 176 32 159 31 15 128 15 224 224 191 240 224 191 240 239 159 192 192 175 176 175 160 79 79 64 95 160 47 0 111 0 127 112 111 223 208 207 208 191 128 207 176 128 191 191 176 127 223 96 255 224 159 31 16 15 255 239 176 207 192 192 192 175 111 15 80 0 240 240 192 64 112 63 240 255 208 223 192 175 192 191 176 159 239 127 191 191 175 95 159 79 240 208 112 16 175 16]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@0@G @^@A8@G G?8??3??G?8A8@G @^@A8@C@@@a') ; yourself); yourself]
+!
+
+addOverlayIcon3
+    "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 addOverlayIcon3 inspect
+     ImageEditor openOnClass:self andSelector:#addOverlayIcon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class addOverlayIcon3'
+	ifAbsentPut:[(Depth8Image new) width: 12; height: 12; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@K_ 5^ @@@@@@@@@@LGI*,\@@@@@@@@@@M*+5<\@@@@@@@@@@N&(.[4@@@@@8*;H2M+X1K7K,\3L7-/F1[?''.Z*6/+3%.MK@2\&99L;\.-?P7[6=/^F*
+,;GL2-ST@@@@@L6;/,H@@@@@@@@@@NN>+=D@@@@@@@@@@LN57<<@@@@@@@@@@N[V+M$@@@@@') ; colorMapFromArray:#[255 248 248 63 144 224 64 152 232 79 160 232 64 152 224 64 144 224 63 136 224 48 128 216 48 120 216 47 112 216 47 112 208 32 104 208 32 96 208 31 88 200 16 88 200 16 80 200 15 72 192 15 64 192 0 64 192 0 56 184 0 56 176 0 48 160 143 200 248 128 200 248 127 192 248 112 184 248 111 176 248 96 168 248 95 160 248 80 152 248 79 144 248 64 128 248 63 120 248 48 112 248 32 104 248 31 96 248 16 88 248 15 80 248 0 72 248 0 64 240 0 48 168 112 176 248 111 168 248 96 160 248 95 152 248 80 144 248 79 136 248 63 128 248 48 120 248 47 112 248 15 72 248 0 48 176 95 168 232 191 224 248 191 216 248 176 208 248 175 208 248 175 200 248 160 200 248 160 192 248 159 192 248 159 184 248 144 184 248 144 176 248 143 168 248 128 168 248 128 160 248 127 160 248 127 152 240 31 72 176 111 168 232 240 240 248 240 232 240 63 88 176 239 232 240 240 240 240 48 88 176 96 168 224 224 224 232 96 160 224 223 216 232 48 80 176 224 224 240 223 216 224 96 152 224 96 152 216 95 152 216 239 232 232 208 208 224 48 120 208 80 144 208 80 136 208 79 128 200 79 120 200 79 120 192 64 112 192 64 104 184 63 104 184 63 96 184 15 56 160 0 0 0 207 216 240 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200 227 227 236 225 225 234 244 244 249 242 242 247 218 217 230 212 211 224 234 234 242 253 253 254 251 251 252 227 226 235 226 226 237 243 243 247 220 220 231 240 239 244 237 237 244 233 233 240 52 89 178 231 231 238 50 87 176 229 229 239 248 248 251 246 246 249 223 223 233 222 221 232 238 238 244 56 94 181 55 92 180 53 90 178 233 232 239 51 88 176 232 232 241 251 251 253 249 249 251 228 228 237 225 224 234 241 241 246 238 237 243 56 93 180 254 254 255 229 229 237 227 227 238 246 246 250 244 244 248 219 219 230 236 236 243 255 255 255 51 88 177 231 230 238 249 249 252 247 247 250 241 241 247 239 239 245 236 235 242 54 91 179 231 231 240 176 175 128 176 240 159 143 159 128 127 208 96 175 239 144 15 79 0 160 176 95 0 160 0 64 176 48 112 159 95 0 96 0 144 159 143 96 207 80 127 159 111 63 175 48 96 207 79 80 176 64 31 159 31 143 224 112 64 176 63 95 207 79 63 160 47 0 127 0 80 191 64 176 240 144 143 239 112 15 160 15 16 95 16 0 80 0 143 224 111 191 240 159 175 240 144 15 127 15 0 175 0 144 239 127 0 79 0 0 112 0 0 95 0 15 112 15 111 207 80 16 79 16 15 79 15 16 80 16 128 223 111 159 159 63 15 64 15 31 144 16 16 80 15 128 224 111 176 239 159 95 112 80 15 175 15 144 224 127 95 192 79 31 95 15 32 160 31 48 159 47 32 159 31 15 128 15 95 160 47 0 111 0 127 223 96 15 80 0 64 112 63 159 239 127 95 159 79 16 175 16]; mask:((ImageMask new) width: 12; height: 12; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C0,O@@<EC0G?<O?0??C?<@<FC0DO@@<@') ; yourself); yourself]
+!
+
+changesBrowser18x22Icon
+    "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 changesBrowser18x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#changesBrowser18x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class changesBrowser18x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 18; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ HB@ HB@ HB@ HA@@@@@@@@@" (JBL HB@ H@XA
+@@@@@@HB@ HB@ HB@ HB@P A@@@@@@H(JB #HB@ HB@F@P(A@@@B@ HB@ HB@ HB@ DH@PLA@@@BJB (H2@ HB@ A DJ@PPA@ HB@ HB@ HB@ HAB@DC@PXA
+@" (JBL HB@ H@ AB DD@P8A@" A@PD#@RHXF@ A@0DF@PDA@" (JBT#H2LZE@(AA@DN@P@@@" AJ@D#@Q\TB LAA DA@P@@@" (JB\%GQ4LAPPAC D@@@@@
+@" A@PD^@P$IA0XA@PD@@@@@@" ''I!!$YEALPC08A@@@@@@@@@PDA@PDA@PDA@PDA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 78 78 91 127 127 127 201 201 218 204 204 219 206 206 221 208 208 223 210 210 224 211 211 225 213 213 228 215 215 229 216 216 230 218 218 231 219 219 232 220 220 233 222 222 235 224 224 236 225 225 237 228 228 238 229 229 239 230 230 240 232 232 241 234 234 243 235 235 244 236 236 244 238 238 245 239 239 246 240 240 247 241 241 248 242 242 249 243 243 249 244 244 250 245 245 252 246 246 253 248 248 254 249 249 254 250 250 255 252 252 255 253 253 255 254 254 255 255 255 255]; mask:((Depth1Image new) width: 18; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@??@@??@C??@C??@O??@O??@???@???@???@??<@??<@??0@??0@??@@??@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+changesBrowser22x24Icon2
+    "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 changesBrowser22x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#changesBrowser22x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class changesBrowser22x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ HB@ HB@ D@@@@@@@@@@@@@@(>O#8VB (JB %XA@@@@@@@@@@@B@ HB@ HB@ HB@ E[@P@@@@@@
+@@@@@(>O#8VB (JB %XAWPD@@@@@@@@B@ HB@ HB@ HB@ E[@T A@@@@@@@@@(>O#8VB (JB %,AWPEI@P@@@@@@@@JO@PDA!!V 3APPHEQ,=]PD@@@@@@@@B
+#8>O!!4<KE3]EQ$D0FAIV@@@@@@@@@(<A#4<\VH>O#8>O#8>OBEX@@@@@@@JO#6P]TX>O#8>O#8>O#1<E]P@@@@@B#0D5K8>O@PDA@X<A@X<BDBH@@@@@@(=(
+IH>O#8>O#8>O#8>O@#@CY @@@@DAYA6O@X<A#0DA@X<A#0IBA6P@@@@@@FP]#8>O#8>O#8>O#8<BVP5$@@@@@@A$GX<A@PDA#0DA#0FO@%PMY@@@@@@@YA88
+#8>O#8>O#8>O^@IRAFP@@@@@@GT4I HB@ HB@ HB@ HBM )5@@@@@@@@S0<0UDMGVV)8_X>OZP1V@@@@@@@@^&PTC3!!UUU%%YV)=]"L,@@@@@@@@#''%LD0XO
+I4AUYU%RO"L-]P@@@@@@#X.JR1EMQATIC!!X%H29D]@@@@@@@#X2JX2(!!Y A&S$QPU5Y&@@@@@@@@@H2JX2, L @@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 78 78 91 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 156 156 182 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 201 201 218 204 204 219 206 206 221 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 210 210 224 211 211 225 213 213 228 215 215 229 216 216 230 218 218 231 219 219 232 220 220 233 222 222 235 223 128 63 223 223 224 223 255 255 224 224 224 224 224 236 224 224 239 224 239 240 224 255 255 225 225 237 228 228 238 229 229 239 230 230 240 232 232 241 234 234 243 235 235 244 236 236 244 238 238 245 239 239 224 239 239 239 239 239 240 239 239 246 239 255 255 240 207 144 240 239 223 240 240 239 240 240 247 240 255 255 241 241 248 242 242 249 243 243 249 244 244 250 245 245 252 246 246 253 248 248 254 249 249 254 250 250 255 252 252 255 253 253 255 254 254 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255]; mask:((Depth1Image new) width: 22; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@_? @_? A?? A?? G?? G?? G?? G?? G??0G??8G??8G??<G??<A??<A??<A??<A??<@??8A??0C??0G?? O;>@O0@@') ; yourself); yourself]
+!
+
+cut19x22Icon
+    "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 cut19x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#cut19x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cut19x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@%JQ@@@@@@@@!!P@@@@@@@@@@@J!!-F@@@@@@@@HT@@@@@@@@@@@AR!!TP@@@@@Q0^E@@@@@@@@@@@@TXUV@@@@ T4BI@@@@@@@@@@@@A.U P@@
+]''2E@"P@@@@@@@@@@@@+HD8@DU:EXRPG@@@@@@@@@@@@GH%]YW4]KZ=''!!P@@@@@@@@@@@J6[[;L- *YB@HT@@@@@@@@@@@A5 RP>FI^W@@BE@@@@@S>D]@@@
+C2!!RJ(52@@@@!!PA4P1TYBH>$M0-Q[GN_@@@@@HU4NINPOJ-$#1PJ_:^_@@@@@@BE#$&2,@AW]0!!1@3%+DAAP@@@@!!UQ&E @@VX19R)IOA#TF^8P@@HVXX:(@
+@KA[ @V.H"I@IS,^^0BECJELCZ2GD$N%LX!!S")YH"6@@!!WQ8(S5*,RD3@E).''@@@ZP$_@HT@]E0DPR<@@@BZ_$X@@DX,V@BE@@@@@@@@@@@@I2%(@@@6*Q(@
+!!P@@@@@@@@@@@I&]'')QE(7@:@HT@@@@@@@@@@@A4D:J (C@W@@BE@@@@@@@@@@@@@GRCH4,4@@@@!!P@a') ; colorMapFromArray:#[0 0 0 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 207 207 219 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 129 71 26 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 126 69 26 154 92 27 242 140 1 227 168 29 143 83 26 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 134 77 26 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 159 96 27 187 117 28 241 241 246 149 87 27 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 254 254 255 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 139 77 23 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 255 255 255 136 77 26 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191]; mask:((Depth1Image new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G@@@G@@@GC@@GG @GO @G_ @G?@@G>@@G<@G''8@_?0@?? @=?8@9?<@9?>@??>@?7N@_GN@@GN@@G>@@G<@@C8@') ; yourself); yourself]
+!
+
+deleteFile17x22Icon
+    "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 deleteFile17x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#deleteFile17x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class deleteFile17x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 17; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+M@0LC@0LCBP&E4!!HV%)ZV%(LV%)ZV%)BM1!!)CC!!HV%)ZV 1ZV%)ZV$I_Y#<LW"EHV%)ZCE)ZV%)ZV&1LY 0F[B-HV%(LV%)ZV%)Z[E=&CE=ZS"EHV 1ZV%)Z
+V%),H3\HB@ HB@ HCE)ZV%)ZV$H3SC@0Z$Y$IS8LV%)ZV%)ZP&1LFF(8M@A#O 1ZV%(VR%)DL3\!!UR][BTL>CE)ZB QEXE<7FFDNF$-''FS8LV%(RDU0/VF)-
+C!!4,T# +O 1ZV!!<;J@<<G 8]K@,6M# >CE)BP#(MOPDNGR0[HT$SM#8LV$9NS MOC!!4,EF)+HT%IO 1ZSD1LVP8]K@T"JSH!!W!!L>CE)LSB4NGR0PPCTGYU4!!
+RS8LV$0-C!!4,TT5(NS$1U2EIO 1ZSEL]KAU&FFIANS$.HT$>CE)LHEQPM6XXFB)AQ2D!!RS8LV#\7M0I&FA!!VZV)+HU8SO 1Z[F1,H2MNM6XXA#A*Z2D>GC8>
+O#8>O#8>O#8>O#8>O#8b') ; colorMapFromArray:#[204 208 220 255 103 69 245 246 250 247 223 219 255 187 164 255 40 16 240 242 248 252 45 46 140 145 163 212 215 227 255 232 223 239 162 158 207 211 222 254 140 110 255 87 55 255 133 101 254 53 31 255 173 147 255 191 170 227 230 238 245 154 147 249 171 164 255 236 229 193 197 211 241 243 248 214 218 228 248 99 77 241 163 159 210 214 224 255 71 41 245 177 166 255 240 235 248 237 238 231 233 241 252 64 51 249 250 252 201 206 218 200 204 217 196 200 213 221 214 221 255 147 116 236 223 229 240 194 200 220 223 233 255 55 27 250 191 180 239 161 166 255 167 142 238 240 247 251 45 46 234 236 243 250 251 252 205 209 221 255 10 0 225 228 237 245 247 250 223 226 235 255 0 0 253 234 228 255 168 141 252 142 115 255 119 85 116 120 133 240 241 248 255 24 6 254 15 15 253 254 254 211 214 226 252 252 253 255 188 167 207 210 222 243 148 152 178 183 200 229 231 240 255 251 249 219 210 217 247 248 251 244 202 202 246 248 250 254 112 80 249 172 164 248 170 163 234 170 169 253 117 92 253 91 69 233 185 181 241 242 248 233 219 227 242 235 239 249 191 180 255 255 255 213 217 227 255 162 133 232 234 242 230 232 240 248 249 251 253 248 246 239 181 173 244 197 201 202 207 219 201 205 218 236 222 229 243 245 249 217 220 230 254 25 16 237 239 246 235 237 244 234 237 243 251 252 253 242 184 175]; mask:((Depth1Image new) width: 17; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??@@?? @??0@??8@??<@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@') ; yourself); yourself]
+!
+
+desktopIcon1
+    "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 desktopIcon1 inspect
+     ImageEditor openOnClass:self andSelector:#desktopIcon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class desktopIcon1'
+	ifAbsentPut:[(Depth24Image new) width: 24; height: 24; photometric:(#rgb); bitsPerSample:(#(8 8 8)); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@(:N#(:N#&I"X&I"X&I"X&I"X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(:N#(:N#&I"X&I"X&I"X&I"X (JB
+$YFQ+:>/-[V5$9NS@@@@@@@@@@@@@@@@@@@@@@@@@@@@&I"X&I"X&I"X&I"X 8NC(:N#+:>/.+*:4MCP6=/[9^[&=/[6?_/:??;;??+4>OK-;^7-Y&Y&@@@@
+@@@@@@@@&I"X&I"X_G1<#X6M''Y6]-;^70\GA3\7M8>O#;.;.>O#8???>???>???=??/6=^?/8^K)''+; )<_$;.7,X6M#@@@@@@@@&I"XRD!!H)JR$1\WE5MST
+7=?_</K2>?/:>?/:</K2</K2;.;.Y:'' Y:'' Y:'' Y:'' QY; I9''#@I/.Q[?7=OS2X&I"@@@@@@@@J2,+[6=/.K"8????????:/C9!!++*X:7''P*O&EZC,CJ[1
+B:;5E+?>GLS?F\O?">C?SL3=">C?V\3;Q<#=<_G1XFA @@@@@@@@J2,+[&9..;.;????9^79MYO_CJ;6C;[:D;3<F<K?G,O?HLK>G+7;G[/:D+[:0^/=0^/=
+0^/=U<_9Q\O:<N?/W6A @@@@@@@@J2,+[&9..;.;????.MG/BI7,G,G>G+?<G[7;GK'':GK''9GK_9F;W7F;S7DKC6/N''<">C?Q;?7L[[4RLC8;.;.W5=_@@@@
+@@@@J2,+[&9..;.;???>-\?,CI/*F+G5F[G5FJ?4FJ;3FJ33FJ32E:''1E:#0DZW0^<76P+[2">C?T+''1P[W2:>+*WU5]@@@@@@@@J2,+[&9..;.;???:,<7)
+B)_(E:/2E:+1E:''1E*_0E*[/EZ[/EZO-EJK-BY7+/>W:0^/=0^/=T[W/O;C0:^'')WE1\@@@@@@@@J2,+[&9..;.;??36,\3''BYO&EZW/EZS.EZO-EJG,EJC+
+D9?+D97*D)7*A9_(..K8">C?PJ3+J*C(P*7.:N_''V5-[@@@@@@@@J2,+[&9./K2<?_[0+L_#A(+!!DY''(DY#(DY_''DIW&DIW%C9O%C9G#C)C#BX3"]K?/N*K&
+">C?R:#''N:G)9NS$V%)Z@@@@@@@@J2,+[&9./K2<>OO,*,W AXW^C9O%C)K%C9G#C(?"C(;"CX7!!CH/ CH+ @XS]/];60^/=0^/=R*S$N)3%8>K#VU%Y@@@@
+@@@@J2,+[&9./K2<=^?**LO^AHG\CX7!!CH3!!CX/ CH''_CH#_B8_^B(W]B(S\@G7Z.-35">C?O9/"JX7]OY+$8^G!!VE!!X@@@@@@@@J2,+[&9./K2<;>''#)K?Z
+@W''XBXG[BXCZBG?YBG7XA73WA7/WA''''VA''#VA''_V@F?R@WKSAGOS@F_ON)C^7=?^U%YV@@@@@@@@J2,+[&9./K2<:>[_([3W@GSUA7/WA7+WA''''VA''_UAW[T
+AWWTAGOS@7KR@''CQ@F3P@F#N@FOL@E3I^KO*:NO_UUUU@@@@@@@@J2,+[&9./[6=:NK\'';+V@GCSAWWUAWSTAGSSAGGR@V?Q@F/O@FSL@FKK@FKLCWCRJ(CX
+^:?$)<30^:?$2,''HU5]W@@@@@@@@J2,+[&9./[6=8=3V%;SQ@E7KAV''OFW[SFW[SFW[SOH''ZOH''Z^:?$^:?$9^CZ9^CZ9^CZ.+*9):^''&Y&Y"H"H@@@@@@@@
+@@@@J"(*\GA0/;>?6MWR,<KQ^:?$^:?$^:?$^:?$^:?$8-7V6MSP1<[D/K2;,KB1$IFQ&I"X&I"X2,''H2,''H@@@@@@@@@@@@@@@@J"(*TEAP-+Z63,;O4\;M
+:.S]8=;Z5-SR3,7L/;>?,[F1(JB &I"X&I"X2,''H2,''H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(:N#_G1<^W%9W%9^&I"X(:N#(:N#2,''H@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@') ; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@C<@A?<A??>O??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??<_??8_?>@G>@@@@@@') ; yourself); yourself]
+!
+
+directory22x22Icon
+    "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 directory22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#directory22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class directory22x22Icon'
+        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8B0,0L@\@@@@@@@@@@@@@@@@@@@@GA!!L$H" 0LC@0LC@0LC@0LH1="0@@A2 (
+JB (X6M.[&9.[&9.[&:K#'',@@E((X3M.[#L3N3-[V26U%IBYM&5 @@@!!L5,3N3-KKQP5EBBS$YZRA ROJ @@HQQKKQP BP$G]''Y6D9^WG9]/B9 @@BE3XVDO
+BP9#X6M#IBP(JC<_YR*X@@AFZ4)QK&8<N3, HB@3L68JO1\*@@@@QUD%W4\ \2@ RD +EAHR]Q(,@@@@@GDUL''P U3EHLT!!UUQPRD''TZK@@@@@@MNQ$[W"M*
+\@T^APUS^T5$M@@@@@@@CWYP^U%YVQ0\Y34XOTP7U @@@@@@@@L>WT1LI$0&X$9&VAXQ[@@@@@@@@@A\P$QRPF!!2BG]AJT$@@@@@@@@@@@@@RTM)GS(BD@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[223 191 95 128 127 112 160 144 128 175 143 112 224 223 207 255 224 127 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 192 176 144 239 224 223 175 143 111 239 224 176 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 240 208 127 160 127 63 176 159 112 255 224 96 207 160 64 224 208 175 239 208 144 240 223 95 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 255 255 224 255 223 112 255 240 223 255 223 143 255 208 64 208 192 191 255 255 223 160 143 127 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 255 224 144 239 208 112 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 207 191 128 239 208 111 144 112 96 255 240 191 255 239 192 240 224 95 192 144 48 240 239 208 224 192 64 144 112 95 160 127 47 127 80 47 255 224 111 176 144 96 176 159 96 240 223 176 240 239 144 176 175 159 240 224 144 255 239 191 240 208 64 255 239 128 239 208 79 223 208 208 191 144 64 240 223 143 240 208 63 255 239 127 240 240 192 255 239 159 144 112 79 240 224 143 191 159 63 240 223 80 207 176 112 240 240 191 175 143 127 224 192 112 240 223 112 208 176 80 176 159 127 255 224 160 240 223 79 255 240 208 207 191 112 239 239 207 208 176 79 255 223 95 192 160 63 128 111 48 255 223 127 255 224 159 159 127 95 176 160 112 255 240 207 255 255 240 240 224 112 176 143 96 160 143 48 240 239 160 207 160 80 239 223 175 239 192 96 143 111 64 160 143 95 255 224 128 255 248 200 255 248 24 15 56 160 255 248 88 239 232 240 240 240 240 255 248 152 48 80 176 255 248 96 48 88 176 240 240 248 207 216 240 223 216 224 255 248 48 224 224 232 255 248 176 255 248 248 240 144 24 255 248 136 63 96 184 240 208 24 239 239 224 176 159 111 240 207 96 207 160 127 240 207 111 191 191 160 223 208 175 240 208 111 255 255 239 192 176 175 208 207 176]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@O0@@_??@_??@_??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+directoryOpen18x18Icon
+    "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 directoryOpen18x18Icon inspect
+     ImageEditor openOnClass:self andSelector:#directoryOpen18x18Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryOpen18x18Icon'
+	ifAbsentPut:[(Depth8Image new) width: 18; height: 18; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@EMST5MS@IJRA0\G@@@@@@AST5MST5MSRQ=M)''MGMUA%L8>O#8=ST5MS]1^B (HW\WEZ]Q%[-H=ST5MS]8JB (JBEHJB (JB (=ST5MS
+]5QTUEQTUEQTM $IBP$IBP$I](NC 8NC 8LIW@8$S4=NOC0%LXRDT"@F#8=!!^WM3\7N%_WHBF3>.+Z!!O)0UDP$IBP$JJRC @LE]#YB"B (JB (JB $HA''7AS
+]F6V)B\''I2\''I2\''I2]Y$P5SWP>3"ADQDQDQDQDQDQDS&%MSQ'')KUUUUUUUUUUUUU[H *UMSF"HH,[F1,[F1,V-QHY@;T5MS(;L-!!XVE W8K*$TLJ)L@T5MS
+QVE**71&QS-0G AST5MST5MSQTT9DJ@@T5MST5MST5MST5MST5MST5MST5MST5MST5MST5MS') ; colorMapFromArray:#[254 201 107 255 238 154 231 208 160 194 135 4 196 136 7 255 255 199 209 157 23 209 166 33 255 242 193 217 175 45 217 158 32 217 165 32 201 152 48 248 240 224 255 255 238 231 172 54 209 168 80 255 242 119 255 221 103 251 230 118 255 254 147 255 212 110 255 201 106 255 252 167 238 221 165 255 251 187 191 130 2 197 139 10 255 233 177 203 146 20 239 224 192 247 238 206 222 173 41 222 177 44 213 165 49 239 239 231 255 255 237 213 174 74 235 177 62 255 252 128 255 255 136 255 202 86 218 184 112 255 224 122 230 206 136 255 225 139 255 217 142 191 131 2 196 138 8 198 140 12 202 144 16 213 167 32 202 143 11 217 176 45 226 197 61 222 159 31 213 174 59 192 136 16 241 240 236 205 160 64 255 255 248 248 183 66 222 189 103 255 198 83 122 152 175 255 252 150 255 255 159 234 213 147 255 255 176 189 129 1 192 131 3 242 230 186 255 255 202 204 147 20 204 151 25 247 237 204 251 244 211 255 255 222 255 242 213 255 255 230 238 209 79 238 199 71 242 198 74 255 255 255 255 251 127 255 229 108 255 204 88 255 191 80 255 206 103 255 238 140 238 217 147 255 252 173 238 222 173 193 135 4 198 140 11 201 144 16 204 146 19 242 230 193 247 237 203 217 154 26 251 247 217 230 196 63 197 138 6 241 242 237 217 175 68 247 238 109 242 191 74 251 216 94 242 187 79 247 188 80 255 206 95 255 238 135 222 192 127 234 209 143 238 222 156 255 255 189 194 136 6 251 242 188 201 143 14 203 146 19 202 147 21 255 255 213 213 154 28 222 166 36 213 156 24 255 255 229 234 187 59 238 197 70 252 248 240 247 202 80 255 255 129 255 230 109 255 213 96 255 212 94 238 211 121 230 203 129 255 246 158 255 255 172 255 238 167 192 132 4 197 138 9 201 142 13 203 145 18 202 151 29 202 146 13 213 173 46 213 159 38 235 216 176 217 169 52 238 222 89 217 173 66 240 244 246 247 209 86 0 0 0 213 176 96 255 206 89 255 189 76 248 194 95 136 162 181 247 238 154 227 200 144 255 252 181 191 130 1 191 129 1 255 254 196 255 238 187 255 255 206 255 255 212 247 238 207 243 232 208 202 144 11 226 169 41 240 240 233 213 173 70 238 181 57 251 247 119 255 238 116 255 222 103 255 199 84 226 197 119 255 254 154]; mask:((Depth1Image new) width: 18; height: 18; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_@@@??0@??0@??0@???@???@???@??>@??>@??>@??<@??<@??8@??0@?<@@>@@@@@@@') ; yourself); yourself]
+!
+
+directoryOpen22x24Icon1
+    "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 directoryOpen22x24Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#directoryOpen22x24Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryOpen22x24Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+T5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5L@@@@@@@@@@@@@@@@@@@AST5MST5MS@@@@@@@@@@@@@@@@@@@@T5MST5MST0@@
+@@@@@@@@@@@@@@@@@EMST5MST5L@@@@@@@@@@@@@@@@@@@AST5MST5MS@@@@@@@@@@@@@@@@@@@@T5MST5MST0@@@IJRA0\G@@@@@@AST5MST5MST5L@@D$_
+SZY3Q3UPYSNO#8>OT5MST5MS@@A7E8JB !!]1\U)5FU.4#5MST5MST0@@]8JB (JBEHJB (JB (=ST5MST5L@@G]TUEQTUEQTUCXIBP$IBP$IBUMS@@A6 8NC
+ 8NC 0%\C"QOK$8<OBUST0@@LXRDT"@F#8=!!^WM3\5"%_WHBT5L@@A,?+*6(S:\EQDIBP$I."$ 8@EMS@@@0U6M$JHJB (JB (JB&0F_\EMST0@@]F6V)B\''
+I2\''I2\''I5YY$P5ST5L@@E4O,8 QDQDQDQDQDQD)D9)ST5MS@@AF^$-UUUUUUUUUUUUU,"B)T5MST0@@F"HH,[F1,[F1,V-QHY@;T5MST5MST:N3KXVE!!XE>
+B:)ECB*S@EMST5MST5MEXV*+_FYEN7@^@EMST5MST5MST5MSQTT9DJ@@T5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MS') ; colorMapFromArray:#[254 201 107 255 238 154 231 208 160 194 135 4 196 136 7 255 255 199 209 157 23 209 166 33 255 242 193 217 175 45 217 158 32 217 165 32 201 152 48 248 240 224 255 255 238 231 172 54 209 168 80 255 242 119 255 221 103 251 230 118 255 254 147 255 212 110 255 201 106 255 252 167 238 221 165 255 251 187 191 130 2 197 139 10 255 233 177 203 146 20 239 224 192 247 238 206 222 173 41 222 177 44 213 165 49 239 239 231 255 255 237 213 174 74 235 177 62 255 252 128 255 255 136 255 202 86 218 184 112 255 224 122 230 206 136 255 225 139 255 217 142 191 131 2 196 138 8 198 140 12 202 144 16 213 167 32 202 143 11 217 176 45 226 197 61 222 159 31 213 174 59 192 136 16 241 240 236 205 160 64 255 255 248 248 183 66 222 189 103 255 198 83 122 152 175 255 252 150 255 255 159 234 213 147 255 255 176 189 129 1 192 131 3 242 230 186 255 255 202 204 147 20 204 151 25 247 237 204 251 244 211 255 255 222 255 242 213 255 255 230 238 209 79 238 199 71 242 198 74 255 255 255 255 251 127 255 229 108 255 204 88 255 191 80 255 206 103 255 238 140 238 217 147 255 252 173 238 222 173 193 135 4 198 140 11 201 144 16 204 146 19 242 230 193 247 237 203 217 154 26 251 247 217 230 196 63 197 138 6 241 242 237 217 175 68 247 238 109 242 191 74 251 216 94 242 187 79 247 188 80 255 206 95 255 238 135 222 192 127 234 209 143 238 222 156 255 255 189 194 136 6 251 242 188 201 143 14 203 146 19 202 147 21 255 255 213 213 154 28 222 166 36 213 156 24 255 255 229 234 187 59 238 197 70 252 248 240 247 202 80 255 255 129 255 230 109 255 213 96 255 212 94 238 211 121 230 203 129 255 246 158 255 255 172 255 238 167 192 132 4 197 138 9 201 142 13 203 145 18 202 151 29 202 146 13 213 173 46 213 159 38 235 216 176 217 169 52 238 222 89 217 173 66 240 244 246 247 209 86 0 0 0 213 176 96 255 206 89 255 189 76 248 194 95 136 162 181 247 238 154 227 200 144 255 252 181 191 130 1 191 129 1 255 254 196 255 238 187 255 255 206 255 255 212 247 238 207 243 232 208 202 144 11 226 169 41 240 240 233 213 173 70 238 181 57 251 247 119 255 238 116 255 222 103 255 199 84 226 197 119 255 254 154]; mask:((Depth1Image new) width: 22; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@G0@@O?<@O?<@O?<@O??0O??0O??0O?? O?? O?? O??@O??@O?>@O?<@O?@@O @@@@@@') ; yourself); yourself]
+!
+
+directoryOpen22x24Icon2
+    "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 directoryOpen22x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#directoryOpen22x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryOpen22x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+T5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5L@@@@@@@@@@@@@@@@@@@AST5MST5MS@@@@@@@@@@@@@@@@@@@@T5MST5MST0@@
+@@@@@@@@@@@@@@@@@EMST5MST5L@@@@@@@@@@@@@@@@@@@AST5MST5MS@@@@@@@@@@@@@@@@@@@@T5MST5MST0@@@IJRA0\G@@@@@@AST5MST5MST5L@@D$_
+SZY3Q3UPYSNO#8>OT5MST5MS@@A7E8JB !!]1\U)5FU.4#5MST5MST0@@]8JB (JBEHJB (JB (=ST5MST5L@@G]TUEQTUEQTUCXIBP$IBP$IBUMS@@A6 8NC
+ 8NC 0%\C"QOS48<OBUST0@@LXRDT"@F#8=!!^WM3\7N%_WHBT5L@@A,?+*6(S:\EQDIBP$IB"$ 8@EMS@@@0U6M$JHJB (JB (JBP F_\EMST0@@]F6V)B\''
+I2\''I2\''I2]Y$P5ST5L@@E4O,8 QDQDQDQDQDQDQD9)ST5MS@@AF^$-UUUUUUUUUUUUU,"B)T5MST0@@F"HH,[F1,[F1,V-QHY@;T5MST5MST:N3KXVE!!XE>
+B:)ECB*S@EMST5MST5MEXV*+_FYEN7@^@EMST5MST5MST5MSQTT9DJ@@T5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MST5MS') ; colorMapFromArray:#[254 201 107 255 238 154 231 208 160 194 135 4 196 136 7 255 255 199 209 157 23 209 166 33 255 242 193 217 175 45 217 158 32 217 165 32 201 152 48 248 240 224 255 255 238 231 172 54 209 168 80 255 242 119 255 221 103 251 230 118 255 254 147 255 212 110 255 201 106 255 252 167 238 221 165 255 251 187 191 130 2 197 139 10 255 233 177 203 146 20 239 224 192 247 238 206 222 173 41 222 177 44 213 165 49 239 239 231 255 255 237 213 174 74 235 177 62 255 252 128 255 255 136 255 202 86 218 184 112 255 224 122 230 206 136 255 225 139 255 217 142 191 131 2 196 138 8 198 140 12 202 144 16 213 167 32 202 143 11 217 176 45 226 197 61 222 159 31 213 174 59 192 136 16 241 240 236 205 160 64 255 255 248 248 183 66 222 189 103 255 198 83 122 152 175 255 252 150 255 255 159 234 213 147 255 255 176 189 129 1 192 131 3 242 230 186 255 255 202 204 147 20 204 151 25 247 237 204 251 244 211 255 255 222 255 242 213 255 255 230 238 209 79 238 199 71 242 198 74 255 255 255 255 251 127 255 229 108 255 204 88 255 191 80 255 206 103 255 238 140 238 217 147 255 252 173 238 222 173 193 135 4 198 140 11 201 144 16 204 146 19 242 230 193 247 237 203 217 154 26 251 247 217 230 196 63 197 138 6 241 242 237 217 175 68 247 238 109 242 191 74 251 216 94 242 187 79 247 188 80 255 206 95 255 238 135 222 192 127 234 209 143 238 222 156 255 255 189 194 136 6 251 242 188 201 143 14 203 146 19 202 147 21 255 255 213 213 154 28 222 166 36 213 156 24 255 255 229 234 187 59 238 197 70 252 248 240 247 202 80 255 255 129 255 230 109 255 213 96 255 212 94 238 211 121 230 203 129 255 246 158 255 255 172 255 238 167 192 132 4 197 138 9 201 142 13 203 145 18 202 151 29 202 146 13 213 173 46 213 159 38 235 216 176 217 169 52 238 222 89 217 173 66 240 244 246 247 209 86 0 0 0 213 176 96 255 206 89 255 189 76 248 194 95 136 162 181 247 238 154 227 200 144 255 252 181 191 130 1 191 129 1 255 254 196 255 238 187 255 255 206 255 255 212 247 238 207 243 232 208 202 144 11 226 169 41 240 240 233 213 173 70 238 181 57 251 247 119 255 238 116 255 222 103 255 199 84 226 197 119 255 254 154]; mask:((Depth1Image new) width: 22; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@G0@@O?<@O?<@O?<@O??0O??0O??0O?? O?? O?? O??@O??@O?>@O?<@O?@@O @@@@@@') ; yourself); yourself]
+!
+
+directoryUp22x24Icon2
+    "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 directoryUp22x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#directoryUp22x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryUp22x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@ L@@@@@@@@@@@@@@@@@@@@@@@@DAPXGB@$@@@@@@@@@@@@@@@@@@@@@B ,LCP8OD@@@@@@@@@@@
+@@@@@@@@@P\LCQDRD!!LTEP@@@@@@@@@@@@@@E TLCQDRE1 XFQ([@@@@@@@@@@@@@@(\CQ4^E1 XG2@!!H"L@@@@@@BT%IRT"I  HI1 XJB$@@@@@@@@@@B(+
+KB4.K3@@@CDYJCH)@@@@@@@@@@@3MCT5MSX7L3L8NSH:JP@@@@@@@@@@IS,5MST5OCT5MS$:OR$3L3L@@@@@@CL?O3<?O3<?PDEBOTL)QDQEQ @@@@@*Q4!!H
+RD!!HRTEJR4MLJTUEQDX@@@@@ST9OTDEAPTEJOD-LSED-KTX$@@@@@EISUEUJMB9VOC1KSE]XME%F@@@@@@AZV51]MST5MST8R41^W5YF@@@@@@@@XVI#MC<?
+O3<?W&Q%Y&\<Z@@@@@@@@F%*Z61@PDA@NF5%[$A/Q''@@@@@@@@A)\U5HRD!!HRGI3]D!!H]TX@@@@@@@@@ZRU6[6=/[6=7^G%MQ%H@@@@@@@@@@F%U^715_W9R
+ZW>@ V@@@@@@@@@@@@A)K4FBZXNDO @@@@@@@@@@@@@@@@@@ZV&E^ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[240 240 232 160 192 160 16 104 16 144 184 144 224 232 224 16 112 16 16 152 8 15 120 0 63 136 56 208 224 208 79 144 72 16 144 8 31 160 8 47 176 24 47 160 16 31 120 16 143 176 128 48 176 24 79 184 32 47 144 16 47 128 40 192 216 192 224 232 216 80 192 40 96 200 48 79 176 40 16 120 8 127 168 112 16 136 8 47 168 24 64 176 32 79 176 32 32 136 16 31 128 16 0 96 0 95 152 88 240 232 216 223 176 56 16 120 16 31 136 16 111 200 48 47 144 24 223 168 40 239 216 152 255 248 216 255 248 224 255 248 200 240 232 200 223 192 120 32 112 0 112 208 56 223 168 48 255 248 208 255 248 152 255 248 184 239 216 160 159 184 88 64 160 32 112 216 64 255 248 160 255 248 168 127 224 72 224 208 160 255 248 144 255 240 136 223 176 48 63 160 32 128 224 72 240 224 184 255 248 248 207 152 8 255 232 152 255 232 128 240 216 104 255 248 232 64 160 40 143 240 88 223 168 32 255 224 136 255 216 120 239 200 80 47 128 32 208 160 24 255 216 128 240 200 88 224 192 112 255 248 192 95 192 56 128 160 72 255 240 184 208 160 16 255 208 120 224 168 40 255 240 216 32 128 16 239 216 128 239 224 200 208 152 8 255 200 112 223 176 64 144 248 96 48 144 32 159 192 88 255 224 128 223 192 96 207 152 0 240 192 96 239 208 136 255 240 176 63 152 32 128 168 64 255 224 120 239 224 184 224 184 72 64 128 32 16 104 8 175 192 88 255 208 104 255 240 208 159 176 72 224 192 80 224 184 56 239 216 176 255 224 160 255 216 112 239 192 80 224 176 48 208 168 40 223 184 104 224 208 144 208 160 8 208 168 56 223 192 112 224 200 128]; mask:((Depth1Image new) width: 22; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C @@G8@@G<@@O?@@_? @_?0G?<@O?<@O?<@O?? O??0O??0O??0O?? O??@O??@O??@O?>@O?<@O?8@O<@@O@@@@@@@') ; yourself); yourself]
+!
+
+displayScreen22x27Icon
+    "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 displayScreen22x27Icon inspect
+     ImageEditor openOnClass:self andSelector:#displayScreen22x27Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary displayScreen22x27Icon'
+        ifAbsentPut:[(Depth8Image new) width:22; height:27; bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q4\-+''QMD"0,KI:^''&UWZ7(@@@@@@DV\C>5!!''):^B0N,-H^GPVPNLP@@@@@@@MQYVZ2,;>< <QPR#^X+4[0@@@@@
+M$]GKZ94SQH,KB0,N87&;S03@@@@@CYE''@?-XT8F)*Z&) YNX^4<30@@@@@)BGTV#"/&#X4FA(5NXR.NE)@@@@@@JUM7]P>NJ6G&9.[&XR.NE''V!!@@@@@B$*
+GG]5C8;-J6E!!J>6NE''U7P @@@@@)I81Z,Q@PFA XFA@P,U*LW''L@@@@@@K.:L(2L,[F1,[F1#H02:1?X@@@@@@A+!!./+L#H2#H02L#K+:8@G-0@@@@@@[J\G
+ HC+:>/+:>.@ @]^1[\@@@@@@E%*5-XGA6]''Y6\GG<,(6BD@@@@@@@AY6XG_8][V5 _(7]WXK.L@@@@@@@@@V[W[ XFAG9U?K'':)"0@@@@@@@@@@@@B<E8F0
+S@WX_,''IMG;0@@@@@@@@@@@@86AW2HL.K)Q>_+^76 ,@@@@@@@C.;.N!!TP/"Z5G#(YRT%F,3@@@@@@C.M&&^JV$6D\A+[IBP$JE,Z0@@@@@@5CY)"X%)M!!DI
+L6M:^''(1Z6/^@@@@@AD6ZV%)M!!DQ8$C.;H^G!!6-+7 @@@@C"DSX6M#XQ8 &RX2+/;>?^Z3L@@@@@;!!DQDQDQ8.HI3 N>Q0P>Z6,K@@@@@@C.8.K"8 $IB0/,
+!!8_^[F,K@@@@@@@@@@C.VP$IB0.J",CZ^P,@@@@@@@@@@@@@@@@@B0,KB0,K@@@@@@@@@@@@') ; colorMapFromArray:#[128 128 160 31 80 159 96 160 224 176 176 207 127 127 159 175 175 223 191 240 255 63 176 255 143 160 191 208 208 223 15 48 127 207 207 223 63 63 112 112 112 176 128 159 192 143 224 255 111 207 255 224 224 224 176 223 239 47 63 127 175 207 223 31 95 160 143 223 255 16 160 255 111 208 255 160 160 176 112 112 175 31 64 128 112 208 255 79 79 128 112 175 223 79 176 255 144 160 191 143 143 208 31 95 159 127 143 160 15 32 96 79 80 128 160 160 175 128 160 207 143 159 208 239 239 240 176 176 192 159 239 255 207 255 255 144 144 160 143 143 207 0 79 159 111 111 144 127 127 176 80 192 255 144 144 192 96 96 192 112 143 208 239 239 239 95 127 160 15 80 159 191 191 192 32 95 159 191 255 255 143 192 239 80 95 143 127 127 175 48 64 127 144 144 191 143 144 191 112 143 207 111 128 176 64 111 160 143 175 191 63 96 159 144 144 159 31 32 96 0 63 128 111 159 224 159 175 160 176 207 239 160 192 223 175 240 255 143 143 176 80 112 176 160 160 208 0 0 0 160 175 192 16 31 95 47 96 159 96 96 144 192 192 224 224 224 240 207 207 208 95 207 255 112 112 160 143 143 175 111 112 144 95 175 240 32 80 159 144 192 240 160 239 255 112 160 207 192 192 223 143 175 207 191 191 223 128 128 208 63 191 255 111 111 176 240 240 240 80 144 223 160 160 207 175 175 208 159 255 111 16 80 159 15 47 112 80 111 160 0 64 128 48 80 143 128 128 207 159 176 192 128 223 255 112 127 175 127 208 255 79 111 175 175 175 207 128 128 176 159 159 176 15 47 111 80 95 128 111 111 192 160 175 223 64 191 255 32 175 255 111 111 175 127 127 192 64 64 127 176 176 176 79 176 240 128 128 175 159 159 175 255 255 255 192 192 208 111 111 191 95 192 255 176 240 255 144 224 255 208 208 239 127 127 191 111 128 159 160 160 192 47 48 111 112 112 192 144 207 240 0 79 144 176 176 223 143 159 176 79 112 159 32 47 96 159 160 160 128 207 224 31 80 144 223 223 239 79 111 160 175 175 192 112 112 191 128 143 176 0 79 143 127 223 255 112 143 176 192 255 255 79 175 239 31 47 96 95 95 191 0 64 143 95 112 176 160 160 191 144 159 192 144 160 176 31 48 112 112 192 255 96 207 255 112 143 175 48 96 159 144 144 176 112 144 208 112 191 239 111 111 207 95 96 144 79 111 159 79 192 255 159 160 192 143 143 192 15 63 127 192 192 192 15 48 112 191 191 208 144 144 175 16 32 95 112 128 176 96 127 175 112 159 223 64 80 143 48 95 159 159 159 208 96 96 207 143 143 191 127 176 239 64 79 128 127 143 191 191 191 207 128 128 191 144 159 176 143 176 223 15 80 144 143 159 191 223 223 224 144 144 208 48 176 255 16 31 80 127 127 207 96 144 208 176 176 208 31 160 255 160 175 207 144 176 224 159 159 192 47 175 255 111 111 159 47 176 255 223 223 223 144 144 207 159 159 207 128 144 191 175 239 255 111 112 160 111 191 240 127 127 160 175 175 224 79 191 255 159 159 191 159 224 255 208 208 224 143 143 160 207 207 224 160 176 207]; mask:((Depth1Image new) width:22; height:27; bits:(ByteArray fromPackedString:'@@@@@@? @_?0C??0O??0O??0O??0O??0O??0O??0G??0G??0G??0G?? G??@G?<@C?>@C??@O??@_??@_?? _?? _?? _?? O??@C?<@@_ @') ; yourself); yourself]
+!
+
+displayScreen22x32Icon
+    "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 displayScreen22x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#displayScreen22x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class displayScreen22x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@T @@@@@@@@@@@@@@@@@@@@@@@@@@T%H@@@@@@@@@@@@@@@AWU6UWZ7(@@@@@@@@@@@@@''):^B0N,-H^GPVPNLP@@@@C"
+J]QYVQ''/;>< <QPR#^X+4[0@@@@@M$]GKZ94SQH,KB0,N87&;S03@@@@@CYE''@?-XT8F)*Z&) YNX^4<30@@@@@)BGTV#"/&#X4FA(5NXR.NE)@@@@@@JUM7
+]P>NJ6G&9.[&XR.NE''V!!<@@@@B$*GG]5C8;-J6E!!J>6NE''U7P((@@@@@"+X\]7TVC8:N#(8OE''U7GCUQ@@@@@@,^DA17]WU5E!!Y5]ZQ7GAAJK @@@@C0X+DP
+GA17]7]7]7\\FAB1@"8@@@@@JR^LV+DPDA XFA PDKEZ#E93@@@@@@B;.#JL#KF1,[F1,X2LL.,_6@@@@@@@Z8[+:3H2L(2LL#H2:>.@A;\@@@@@@F2''A8B@
+:>/+:>/+ H@GW,V7@@@@@@CZZ-[VA0]''Y6]''A1?KJM !!@@@@@@@@J]&A7>GV5-XG:M7U6B;#@@@@@@@@@@B568FA Q>U_29>*X,@@@@@@@@@@@@@/A^A,D0E
+6G;I2SQ><@@@@@@@@@@@@NM U<"CK":T_'':7-=(K@@@@@@@@;.;#(UDK8&-Q8:FT%IQ+L0@@@@@@;#Y)''"%)M!!G@Z62P$IB!![F,@@@@@@MP6ZX&IZSXQBSM#
+^''):LV-+7 @@@@@QM&%)ZSXQD^I@;.2G!!8]+Z=8@@@@@8!!D6M#X6D^HI$&L*;>?/7&,3@@@@@N8QDQDQD^K"B\8C/$\DO&-+B0@@@@@@;.K"8.HIBP,K;H^G
+7&1+B0@@@@@@@@@@;%$IBP,K"(+@6''$K@@@@@@@@@@@@@@@@@@,KB0,KB0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[128 128 160 31 80 159 96 160 224 176 176 207 127 127 159 175 175 223 191 240 255 63 176 255 143 160 191 208 208 223 15 48 127 207 207 223 63 63 112 112 112 176 128 159 192 143 224 255 111 207 255 224 224 224 176 223 239 47 63 127 175 207 223 31 95 160 143 223 255 16 160 255 111 208 255 160 160 176 112 112 175 31 64 128 112 208 255 79 79 128 112 175 223 79 176 255 144 160 191 143 143 208 31 95 159 127 143 160 15 32 96 79 80 128 160 160 175 128 160 207 143 159 208 239 239 240 176 176 192 159 239 255 207 255 255 144 144 160 143 143 207 0 79 159 111 111 144 127 127 176 80 192 255 144 144 192 96 96 192 112 143 208 239 239 239 95 127 160 15 80 159 191 191 192 32 95 159 191 255 255 143 192 239 80 95 143 127 127 175 48 64 127 144 144 191 143 144 191 112 143 207 111 128 176 64 111 160 143 175 191 63 96 159 144 144 159 31 32 96 0 63 128 111 159 224 159 175 160 176 207 239 160 192 223 175 240 255 143 143 176 80 112 176 160 160 208 0 0 0 160 175 192 16 31 95 47 96 159 96 96 144 192 192 224 224 224 240 207 207 208 95 207 255 112 112 160 143 143 175 111 112 144 95 175 240 32 80 159 144 192 240 160 239 255 112 160 207 192 192 223 143 175 207 191 191 223 128 128 208 63 191 255 111 111 176 240 240 240 80 144 223 160 160 207 175 175 208 159 255 111 16 80 159 15 47 112 80 111 160 0 64 128 48 80 143 128 128 207 159 176 192 128 223 255 112 127 175 127 208 255 79 111 175 175 175 207 128 128 176 159 159 176 15 47 111 80 95 128 111 111 192 160 175 223 64 191 255 32 175 255 111 111 175 127 127 192 64 64 127 176 176 176 79 176 240 128 128 175 159 159 175 255 255 255 192 192 208 111 111 191 95 192 255 176 240 255 144 224 255 208 208 239 127 127 191 111 128 159 160 160 192 47 48 111 112 112 192 144 207 240 0 79 144 176 176 223 143 159 176 79 112 159 32 47 96 159 160 160 128 207 224 31 80 144 223 223 239 79 111 160 175 175 192 112 112 191 128 143 176 0 79 143 127 223 255 112 143 176 192 255 255 79 175 239 31 47 96 95 95 191 0 64 143 95 112 176 160 160 191 144 159 192 144 160 176 31 48 112 112 192 255 96 207 255 112 143 175 48 96 159 144 144 176 112 144 208 112 191 239 111 111 207 95 96 144 79 111 159 79 192 255 159 160 192 143 143 192 15 63 127 192 192 192 15 48 112 191 191 208 144 144 175 16 32 95 112 128 176 96 127 175 112 159 223 64 80 143 48 95 159 159 159 208 96 96 207 143 143 191 127 176 239 64 79 128 127 143 191 191 191 207 128 128 191 144 159 176 143 176 223 15 80 144 143 159 191 223 223 224 144 144 208 48 176 255 16 31 80 127 127 207 96 144 208 176 176 208 31 160 255 160 175 207 144 176 224 159 159 192 47 175 255 111 111 159 47 176 255 223 223 223 144 144 207 159 159 207 128 144 191 175 239 255 111 112 160 111 191 240 127 127 160 175 175 224 79 191 255 159 159 191 159 224 255 208 208 224 143 143 160 207 207 224 160 176 207]; mask:((Depth1Image new) width: 22; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@?@@?? _?? _?? _?? _?? _??0_??0O??0O??0O??0O??0G??0G??0G??0G?? G??@C?<@C?>@C??@O??@_??@_?? _?? _?? _?? O??@C?<@
+@_ @@@@@') ; yourself); yourself]
+!
+
+edit17x22Icon
+    "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 edit17x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#edit17x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class edit17x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 17; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UA,[F1,[F3=DI''M/ZV4O"H ["H"H"H!!+V"6(WP6%MC!!R"A.H"H"H"F.Q''&^-HXA>\PNHF8"H"H"H"J97UX(% UXIC8 ["H"H"H"H+)FTHJDL]@!!3"A.H"H"H
+"H".RA8(*% #Y!!\WF8"H"H"H"F- EE1:DJ2XPFT["H"H"H"HR%BFGE:''G0BVYQ.H"H"H"H"MI8]$#G2IFV1%F8"H"H"HZ1)!!B#A0[*B K&T["H"H"H /SVNY
+B4I=A5-KYQ.H"H"HZ9NRQ0X5()AYVU,SF8!!+Z6-AD!!6Z''@EINWY9X!! ["G!!8^G<>S$1W#:$<&2(*Z!!.H]7]7\"PNAI>N@$X)!!HU*F8!!7]7\6MADUN).[''XL)
+J&(["G]7]344)(,,&9.] 2$*FA.H]7]7QPU(]WV[&96C '',SF8!!7]7]OJ3]5]Y.[P9T9]&T["E)ZV%>$L#H3%5N+NY@"YQ.H+*:.N3-8V)8-E%F)*3%%LVU%
+YVU%YVU%YVU%YVU%YVTb') ; colorMapFromArray:#[204 208 220 222 120 43 215 217 224 183 59 8 254 203 97 163 140 130 254 191 54 224 227 236 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 115 119 132 254 226 7 248 201 137 240 242 248 140 145 163 106 109 123 212 215 227 247 181 30 207 211 222 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 227 230 238 242 102 12 254 226 119 254 191 0 193 197 211 254 231 26 254 203 3 208 210 219 207 208 218 169 113 95 210 207 211 241 243 248 214 218 228 249 210 160 254 176 36 210 214 224 229 231 236 228 229 235 254 231 201 254 165 69 241 195 142 219 221 226 234 184 145 231 233 241 186 100 65 249 250 252 228 231 238 226 180 137 254 239 98 201 206 218 200 204 217 245 209 172 220 114 42 217 219 227 196 200 213 161 124 106 211 213 221 254 197 55 247 233 220 222 209 212 252 246 238 220 223 233 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 238 240 247 166 46 5 232 234 241 205 209 221 241 212 187 254 136 5 254 184 94 254 144 8 225 228 237 245 247 250 223 226 235 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 211 214 223 254 207 47 254 181 24 116 120 133 145 109 112 240 241 248 193 129 103 223 153 96 105 108 122 253 254 254 211 214 226 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 178 183 200 254 116 14 217 219 225 229 231 240 247 248 251 246 248 250 224 227 235 254 171 10 219 221 230 207 90 27 222 218 223 254 161 10 248 203 113 254 162 0 254 158 0 211 213 222 209 211 220 207 209 218 205 207 216 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 230 232 240 248 249 251 254 231 65 249 193 57 240 178 78 224 226 234 202 207 219 222 224 232 201 205 218 254 191 42 254 201 65 214 216 224 254 184 75 212 214 222 243 245 249 228 142 66 217 220 230 254 167 2 195 120 93 0 0 17 231 233 237 254 214 81 248 214 181 248 122 26 237 239 246 235 237 244 254 167 5 234 237 243 197 82 32 232 174 56 251 252 253]; mask:((Depth1Image new) width: 17; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??8@??<@??<@??<@??<@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@??>@') ; yourself); yourself]
+!
+
+editorOverlayIcon
+    "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 editorOverlayIcon inspect
+     ImageEditor openOnClass:self andSelector:#editorOverlayIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class editorOverlayIcon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C4HO@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@<IBXSA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O 2>1Z8;A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CJD28?^U/A
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CJU[1:AE7A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CJ*C6;B#OA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@CJ1FB_G3/A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CJFF(+''JSA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CJP22)O,''A@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@V1SV+H\3A@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@VDKZJ!!YSA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A7+EXB[%CK@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@BY-2 UY27K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4T81>"<,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%15%"
+G@X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FDS]ELP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 230 230 229 242 108 0 21 232 231 255 186 105 101 75 66 186 160 156 234 234 236 163 163 163 250 163 90 255 188 108 228 228 230 104 104 105 226 226 228 102 102 103 167 102 48 137 61 2 114 91 85 218 218 220 128 58 3 59 58 54 226 160 119 90 53 35 84 84 85 147 68 5 82 82 83 80 80 81 182 182 181 200 156 136 88 88 92 247 247 248 255 187 104 21 231 230 249 184 108 186 186 188 184 184 186 237 237 238 111 89 88 235 235 236 180 180 182 191 120 84 231 231 232 5 237 237 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 213 213 214 99 91 79 254 232 208 253 196 141 101 62 48 221 111 4 101 101 104 114 80 64 133 233 234 150 150 152 89 89 92 255 200 146 85 85 88 218 115 4 254 184 102 254 127 3 174 239 241 172 217 216 215 165 133 134 60 4 0 129 126 85 77 68 0 125 126 110 110 109 69 69 72 105 104 104 19 230 230 0 138 139 102 102 101 3 135 132 116 116 118 165 165 166 254 232 217 161 161 162 19 234 233 137 78 56 84 84 83 139 65 5 220 102 2 97 94 99 95 96 97 172 104 77 90 90 92 253 205 143 88 88 90 255 199 145 86 86 88 84 84 86 219 112 4 56 56 55 231 173 141 5 141 143 21 231 231 3 189 187 115 113 116 252 217 191 107 107 108 2 191 189 223 115 4 247 184 110 134 137 141 225 225 227 250 157 80 221 221 223 0 134 131 219 219 221 254 254 252 205 198 194 159 97 83 89 89 90 105 105 109 91 51 26 193 193 192 254 184 100 254 129 1 95 95 99 185 185 184 110 113 117 219 162 125 144 146 147 91 91 95 89 89 93 9 238 238 216 154 122 253 198 145 246 163 82 173 173 172 120 116 120 186 187 188 238 238 239 247 120 7 249 219 197 174 106 74 181 181 183 254 204 149 108 108 108 230 230 231 2 190 188 2 186 188 179 170 171 243 174 115 116 116 119 0 133 130 165 165 167 223 217 214 75 37 16 216 216 217 108 108 111 255 190 110 175 249 249 190 190 188 255 132 1 96 96 99 135 225 226 251 251 251 90 90 93 255 201 146 88 88 91 101 104 107 137 137 139 145 68 5 254 128 3 133 225 227 251 120 0 133 59 3 0 128 126 111 111 110 11 243 242 109 109 108 240 110 9 159 158 157 106 103 105 5 237 236 88 135 130 215 106 4 119 58 22 173 233 233 107 107 109 122 123 127 254 136 9 222 113 4 85 85 84 173 235 236 213 213 216 138 138 139 190 118 68 83 83 85 187 187 187 136 62 5 133 58 2 164 165 161 127 70 39 138 243 244 254 202 147 78 38 4 201 153 138 254 200 147]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@@@@@8@@@@_@@@@O8@@@A?@@@@O8@@@A?@@@@O8@@@A?@@@@O8@@@A?@@@@O8@@@A?@@@@O8@@@A>@@@@O
+0@@@A<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+editorOverlayIcon2
+    "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 editorOverlayIcon2 inspect
+     ImageEditor openOnClass:self andSelector:#editorOverlayIcon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class editorOverlayIcon2'
+	ifAbsentPut:[(Depth8Image new) width: 17; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@A/ZV4O"H @@@@@@@@@@@@@WP6%MC!!R"@@@@@@@@@@@@@B-HXA>\PNH@@@@@@@@@@@@UX(% UXINH @@@@@@@@@@@BTHJDL]@ @"@@@@@@@
+@@@@@A8(*% #Y @@@@@@@@@@@@A EE1:DJ0@@@@@@@@@@@@@@EBFGE:''G0@@@@@@@@@@@@BMI8]$#G2I@@@@@@@@@@@@@A)!!B#A0[ @@@@@@@@@@@@@/SVNY
+B4H@@@@@@@@@@@@@@INRQ0X5( @@@@@@@@@@@@AAD!!6Z''@EI@@@@@@@@@@@@@G<>S$1W#0@@@@@@@@@@@@@@\"PNAI>N@@@@@@@@@@@@@@@6MADUN @@@@@@
+@@@@@@@@@C44)(,@@@@@@@@@@@@@@@@@QPU(@@@@@@@@@@@@@@@@@@AOJ0@@@@@@@@@@@@@@@@@@@E<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[204 208 220 222 120 43 215 217 224 183 59 8 254 203 97 163 140 130 254 191 54 224 227 236 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 115 119 132 254 226 7 248 201 137 240 242 248 140 145 163 106 109 123 212 215 227 247 181 30 207 211 222 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 227 230 238 242 102 12 254 226 119 254 191 0 193 197 211 254 231 26 254 203 3 208 210 219 207 208 218 169 113 95 210 207 211 241 243 248 214 218 228 249 210 160 254 176 36 210 214 224 229 231 236 228 229 235 254 231 201 254 165 69 241 195 142 219 221 226 234 184 145 231 233 241 186 100 65 249 250 252 228 231 238 226 180 137 254 239 98 201 206 218 200 204 217 245 209 172 220 114 42 217 219 227 196 200 213 161 124 106 211 213 221 254 197 55 247 233 220 222 209 212 252 246 238 220 223 233 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 238 240 247 166 46 5 232 234 241 205 209 221 241 212 187 254 136 5 254 184 94 254 144 8 225 228 237 245 247 250 223 226 235 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 211 214 223 254 207 47 254 181 24 116 120 133 145 109 112 240 241 248 193 129 103 223 153 96 105 108 122 253 254 254 211 214 226 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 178 183 200 254 116 14 217 219 225 229 231 240 247 248 251 246 248 250 224 227 235 254 171 10 219 221 230 207 90 27 222 218 223 254 161 10 248 203 113 254 162 0 254 158 0 211 213 222 209 211 220 207 209 218 205 207 216 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 230 232 240 248 249 251 254 231 65 249 193 57 240 178 78 224 226 234 202 207 219 222 224 232 201 205 218 254 191 42 254 201 65 214 216 224 254 184 75 212 214 222 243 245 249 228 142 66 217 220 230 254 167 2 195 120 93 0 0 17 231 233 237 254 214 81 248 214 181 248 122 26 237 239 246 235 237 244 254 167 5 234 237 243 197 82 32 232 174 56]; mask:((Depth1Image new) width: 17; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A8@@C<@@C<@@G<@@G8@@G8@@O0@@O0@@_0@@_ @@?@@@?@@A?@@A>@@A>@@A<@@A8@@A0@@A @@A@@@@@@@@@@@') ; yourself); yourself]
+!
+
+editorPenOverlay
+    "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 editorPenOverlay inspect
+     ImageEditor openOnClass:self andSelector:#editorPenOverlay
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class editorPenOverlay'
+	ifAbsentPut:[(Depth8Image new) width: 11; height: 20; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@1,OD# @@@@@@@K*L9JN&-@@@@@@@:Y+O3\"C@@@@@KWU'']B6"JX@@@@@7Y''""<*G@@@@@@BW''>^8&<D@@@@@/YJ928?(@@@@@@B34YV;9) @@@@@
+6I;R0M_L@@@@@@BT/(&"1<T@@@@@([B?7(*+@@@@@@C\6:6F)NL@@@@@*)FV7>BB@@@@@@CN*[F/-=(@@@@@@L&\#XS!!@@@@@@@@)ZNP$:\@@@@@@@B((>WV
+@@@@@@@@@J2E0 @@@@@@@@@@,*@@@@@@@@@@@@B<@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[160 160 160 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 72 122 199 116 116 120 237 236 242 72 141 255 212 211 224 32 101 209 63 143 226 153 188 255 106 175 235 170 204 255 7 66 194 0 50 164 58 137 224 75 160 234 66 135 255 140 175 255 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 80 149 255 55 95 181 125 160 253 52 89 178 50 87 176 105 172 233 104 170 232 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 2 56 178 3 73 255 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 81 136 209 101 170 255 36 107 211 54 123 255 56 94 181 126 161 253 55 92 180 53 90 178 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 96 157 223 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 28 97 255 109 178 255 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 39 109 255 93 161 255 157 192 255 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 181 215 255 255 255 255 52 90 178 51 88 177 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 87 145 215 84 153 255 78 131 206 10 79 255 91 168 235 127 162 254 54 91 179 14 77 199 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 11; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@<@G8@_ C>@O0@?@G8@_ C<@O0A>@G8@?@C<@O @>@C0@N@@0@B@@@@a') ; yourself); yourself]
+!
+
+fileBrowser26x24Icon
+    "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 fileBrowser26x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser26x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileBrowser26x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADQDQDQDQDQDQDQDQDQDP@@@@@@@@@@@@@@DQD[F1,[F1,[F1,[
+F1,[C0(@@@@@@@@@@@@QDQD5MSP4MCP1LSD1LSD1FP0@@@@@@@@@@AD!!MQDLC@0LC@0LC@0LC@0LC@0@@@@@@@@@DR@4M@0C@0LC@0LC@0LC@0LC@0,@@@@@
+@@@QHCP4C@HCA@\C@0LC@C,;N#(:N#(:N#(@@AD^L3LLA@LG@0LC@0@;OC0<OC0<OC0<N30@DQ83L00-H@LC@0LC@@0LC@0LC@0LC@0LC@0QGSL1CA$YKR@C
+@0L@CCX3LSD,KB$&I"P CAD[LSDL@@@YFR4-@0@LL3L1I"0)JRX$IB@LDQ,1LC@0KP@@FQ$-H@03LSDVC0(JC2P H@0QF#@0C@0LC@0@@A$YCCL1LR0)JRX$
+IB@ CADZLB4LMSP1LB4L@@@LLSD,KB$&I"P HB@LDQ$-KP04L3D&KB$)I 0LC@0LC@0LC@0LC@0QFR4-CCP1LAXOB (OIB@ CBXP@@@@@@@@@ADXKB0LL3D0
+KB$)I"P$HB@LI!!@@@@@@@@@@DQH&I 01LB4,JBX&IB@ H@0 D@@@@@@@@@@QDRX&C@0LC@0LC@0LC@0LCB@P@@@@@@@@@ADQIBP$IBL#H2D HB@ HB@^G!!@@
+@@@@@@@@E!!@$IBL#H2L!!HR@ HB@ G!!8^D@@@@@@@@@@TEA8PDA@PDA@PDA@PDA@PDA@^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 72 0 144 54 51 0 55 60 0 64 66 0 70 30 120 0 36 18 78 75 0 87 36 138 6 48 33 103 108 0 12 59 36 127 132 0 66 71 69 12 72 54 151 156 0 160 162 0 168 168 0 174 171 0 175 180 0 184 186 0 90 95 93 183 186 0 187 187 5 184 192 6 192 198 6 200 204 6 209 209 7 0 119 60 203 215 7 213 220 8 137 58 242 221 226 8 231 231 9 120 120 120 222 237 9 232 242 10 123 134 129 238 244 14 132 132 132 226 244 26 232 243 33 135 147 141 0 144 72 236 243 39 243 243 45 144 144 144 165 93 237 222 242 52 228 242 58 148 101 235 233 241 65 240 240 72 215 239 79 222 238 86 227 237 93 0 179 90 0 180 90 0 191 96 8 254 255 56 237 255]; mask:((Depth1Image new) width: 26; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@C?? @@??>@@O??0@C??>@@???0@O???0C???>@????0O???<C????@????0O???<C????@????0O??8@C??>@@??? @O??8@C??>@@_?? @C??
+8@@@@@@@') ; yourself); yourself]
+!
+
+fileContents19x22Icon
+    "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 fileContents19x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileContents19x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileContents19x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+IQTFA XFA XND@ _G2T%IRT%IRTFIRT%IRT[E0$/A!! _IRT%IRT%A"T%IRT%F1,[F0X(CA<%IRT%IPX%ISL3L2T3L3LF@3HQG2T%IRTFIRT%IRT%IRT%A"$%
+H 0_IRT%A"T%L3L3ISL3L0PDA@PDA@P%IPX%IRT%IRT%IRTRKR4&J0<YIRTFIRT3L2T%L3H3BSL3L0@*FRT%A"T%IRT%IQ4TE00XKRXEGA$%IPX%ISL%L1,%
+L3L FCL3K (YIRTFIRT%IRT[IS@1CA G@!! QFRT%A"T%ISL3E3L3L@03L1XVFA$%IPX%F1,[@20C@2<0F@0 A1XYIRTFIRH3BSLAL0$$K3L3L2@ FRT%A"T!!
+HRDWE2LIIB<0D00(A1$%IPX%HSL3HPD3HSL/K3L''CB@YIRTFIRD!!HRDAHP$IK2<0I00 FRT%A"T!!L3L3@SL3BR<3LCLLHA$%IPX%HRD!!HQ\!!BP$/LC@0CB@Y
+IRTFIQ\3E3L,L3L3K3@3CB GFRT%A"T2L#HMCRHWK@$CD#@1CA$%IP,YFQ$YFQ$YFQ$YFQ$YFQ$YIP@a') ; colorMapFromArray:#[204 208 220 245 246 250 224 227 236 240 242 248 140 145 163 212 215 227 207 211 222 227 230 238 193 197 211 241 243 248 214 218 228 210 214 224 231 233 241 249 250 252 201 206 218 200 204 217 196 200 213 220 223 233 238 240 247 234 236 243 250 251 252 205 209 221 225 228 237 245 247 250 223 226 235 116 120 133 240 241 248 253 254 254 211 214 226 252 252 253 207 210 222 178 183 200 229 231 240 247 248 251 246 248 250 242 244 249 241 242 248 255 255 255 213 217 227 232 234 242 230 232 240 248 249 251 202 207 219 201 205 218 243 245 249 219 222 232 217 220 230 237 239 246 235 237 244 234 237 243 251 252 253 0 0 0]; mask:((Depth1Image new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_? @_?0@_?8@_?<@_?>@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@') ; yourself); yourself]
+!
+
+fileImageContents19x22Icon
+    "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 fileImageContents19x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileImageContents19x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class fileImageContents19x22Icon'
+        ifAbsentPut:[(Depth8Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+IQTFA XFA XND@ _G2T%IRT%IRTFIRT%IRT[E0$/A!! _IRT%IRT%A"T%IRT%H!!\,BPX(CA<%IRT%IPX%IRT%IP4"E20F@3HQG2T%IRTFIRT%IRTMH!!\,A"$%
+H 0_IRT%A"T%M#X6M#X6M PDA@PDA@P%IPX%ISX6M#X6M#X6M#X8J0<YIRTFIRT6MST5MST5MSX6N@@*FRT%A"T%MST5MS\5M3T5M# EGA$%IPX%IST5MST5
+MST5MSX8K (YIRTFIRT5MST5MST5MST6NA QFRT%A"T%MST5M3T5MST5M# VFA$%IPX%F3T5MST5MST5MSX8A1XYIRTFIRH6MST5MST7MST6NB@ FRT%A"T!!
+MST5MST5MST5M# (A1$%IPX%HSX5MST4MST6M#X8CB@YIRTFIRD6M#X6MCX6M#X6N@0 FRT%A"T!!M#X6M#P6M#X6M# LHA$%IPX%HS\7M3\4M3\7M3\8CB@Y
+IRTFISH2CP4"E20I@1H0LB GFRT%A"T2L#HMCRHWK@$CD#@1CA$%IP,YFQ$YFQ$YFQ$YFQ$YFQ$YIP@a') ; colorMapFromArray:#[204 208 220 245 246 250 224 227 236 240 242 248 140 145 163 212 215 227 207 211 222 227 230 238 193 197 211 241 243 248 214 218 228 210 214 224 231 233 241 249 250 252 201 206 218 200 204 217 196 200 213 220 223 233 238 240 247 234 236 243 250 251 252 205 209 221 225 228 237 245 247 250 223 226 235 116 120 133 240 241 248 253 254 254 211 214 226 252 252 253 207 210 222 178 183 200 229 231 240 247 248 251 246 248 250 242 244 249 241 242 248 255 255 255 213 217 227 232 234 242 230 232 240 248 249 251 202 207 219 201 205 218 243 245 249 219 222 232 217 220 230 237 239 246 235 237 244 234 237 243 251 252 253 0 0 0 133 60 36 0 206 0 174 218 230 0 137 0 130 163 172]; mask:((Depth1Image new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_? @_?0@_?8@_?<@_?>@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@') ; yourself); yourself]
+!
+
+fileIn18x22Icon
+    "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 fileIn18x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileIn18x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileIn18x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 18; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@]GQ4]GQ4]GQ4]GQ4]@@@@@@@]GQ4]GQ4]GQ4]GQ4]@@@@@@@]GQ4]GQ4]GQ4]GQ4]EQTUEQTUEQTTGQ4]GQ4]GQ4]EQ4]GQDDI2XUEA4]GQ4]GQ4]
+EQ4]GP$K@"XUG!!P]GQ4]GQ4]EQ4]GP$QA"XTEAPTGQ4]GQ4]EQ4]GP<QARX_GBDTGR$]GQ4]EQ4]GQLIFQ,%E!!\TGR$)GQ4]EQ4]GQ4IH"X)JR$)JR$)JQ4]
+EQ4]D1DDJAH)JR$)JR$)JR$]EQ4SC1 [G0()JR$)JR$)JR$)EQ4]DQ([C!!@)JR$)JR$)JR$]EQ4OC@TFI 8)JR$)JR$)JQ4]EQ4@H TFI 8(B DTGR$)GQ4]
+EQ4DH TZF08(B DTGR$]GQ4]EQ4"FQ(F@ 8_B DTGQ4]GQ4]EP$"H TFI 8(B DTGQ4]GQ4]EAPTEAPTEAPTEAPTGQ4]GQ4]@@@@@@@]GQ4]GQ4]GQ4]GQ4]
+@@@@@@@]GQ4]GQ4]GQ4]GQ4]@@@@@@@@@@@@@@@@GQ4]GQ4]') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240 248 0 0]; mask:((Depth1Image new) width: 18; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@?8@@?<@@?>@@??@@??P@??X@??<@??>@???@??>@??<@??X@??P@??@@??@@??@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+fileSave19x19Icon
+    "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 fileSave19x19Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileSave19x19Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileSave19x19Icon'
+	ifAbsentPut:[(Depth8Image new) width: 19; height: 19; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@CT4MCH0K20)I2P$H2H!!G14\@CV%(/SL4][4=OS4=OS4=OQ@OP(4(Y;4F1,[=OS4=OS4<.W^PC4HL9"W=A.#&/S4=OS4;NOW43$4A3JU$_P[''974=OS49]/S
+3,PYFP\1#H+'':^/3<?O38=/S1<BNFA GK8RD^7Y.Y59ZT$1HP3<9F1TUA2:@_GM-ZU9ZT$5GP389F1,UEP\-]''M,Y&AXUD1JP389NQ,[EQTGJ&)/Y6M]U5EK
+RTD=NS$9MQTUA2%#X.S$8-?Z5MCM2LN6,[DUEPX''V%+"8-?Z5MCM2LO@*ZZ)FQ$DI5UU8K.9-;R1+::-&X"E*Q X@2YNS-?_6-SP2LO@-JZ\$:LUEPT&RT'']
+.KV2,J:-&8"A^WRVEQTGITIB6-+T4L"<*ZZ\$8.G#1TUA2U@PM^6,Z.(&YJE_W]1[H8UEP\%OC2P$H6F 7)5Z6U_WE%VEAPH@@$IBP$HB@ HB@ HB@ HB@ H
+@@@a') ; colorMapFromArray:#[0 0 0 28 33 37 34 41 60 37 45 83 39 48 89 42 51 96 45 55 103 49 60 112 54 65 115 54 66 115 54 66 116 57 70 107 57 70 109 59 59 58 65 79 121 65 80 125 66 80 124 68 83 130 74 71 70 77 81 85 78 95 152 80 98 153 81 98 151 83 47 28 85 102 157 86 103 157 88 101 128 90 110 162 94 106 146 94 106 147 95 83 66 95 107 147 96 74 37 97 108 148 98 109 148 98 109 149 99 110 149 101 111 150 101 111 151 101 112 151 102 102 107 102 113 151 102 113 152 103 86 54 103 113 151 103 113 152 103 114 152 104 114 152 105 115 152 105 115 153 106 116 153 107 116 154 107 117 154 108 117 154 116 124 137 123 85 65 123 107 74 125 143 184 126 64 32 126 139 158 126 143 183 127 145 185 128 145 184 129 146 185 129 147 186 130 148 186 131 148 187 131 149 187 132 141 160 133 141 159 133 143 164 134 151 188 134 151 189 134 152 189 135 152 189 136 153 190 137 154 191 138 154 191 139 156 193 141 151 173 142 69 67 142 157 193 142 158 193 143 62 26 143 158 193 143 159 194 144 157 200 144 161 195 145 161 195 146 158 202 146 162 196 147 89 55 147 160 203 147 162 196 148 165 197 149 161 204 149 164 197 150 166 198 150 166 199 151 167 199 152 149 137 152 163 206 152 168 199 153 169 201 154 96 64 154 169 201 154 170 201 155 167 207 155 171 202 156 171 202 156 171 203 157 172 203 157 173 182 157 173 203 159 147 111 159 174 204 159 175 204 160 170 210 160 174 204 160 176 205 162 172 191 162 178 207 163 173 212 163 177 206 164 177 207 164 180 207 165 147 99 165 165 166 165 178 207 166 182 208 167 147 95 167 177 214 167 181 209 169 185 209 170 179 216 170 186 215 171 185 210 172 162 152 172 185 212 172 187 217 173 186 212 174 182 218 174 188 219 175 190 221 176 184 220 176 189 214 176 190 213 176 190 218 177 145 64 177 190 215 179 193 223 180 192 216 181 193 216 181 194 214 181 195 218 182 194 214 182 195 221 183 196 219 184 195 218 184 197 219 185 95 37 185 196 219 185 197 219 185 197 222 186 185 192 187 198 220 187 200 223 188 171 94 188 199 217 192 204 226 194 97 38 195 206 220 196 168 100 196 206 218 198 207 220 202 211 222 203 212 222 205 214 224 207 215 224 208 101 40 209 217 225 210 217 226 210 219 227 212 220 227 213 220 227 214 221 228 217 103 41 217 223 229 217 224 237 219 101 37 222 177 45 222 225 232 223 228 241 224 187 54 225 105 42 226 231 241 226 231 243 228 196 63 230 202 70 230 234 245 230 235 243 232 240 251 233 208 76 233 235 240 233 236 247 233 237 244 233 237 246 235 214 82 235 238 245 236 239 248 237 239 242 238 241 249 239 242 247 240 242 242 240 242 249 240 243 249 242 220 141 242 242 227 242 244 249 242 244 250 244 244 245 244 246 250 244 246 251 245 247 250 246 247 250 246 247 251 247 248 251 247 248 252 248 249 251 248 249 252 249 99 39 249 249 253 250 147 56 250 250 253 251 169 79 251 251 253 251 252 253 252 99 38 252 178 84 252 187 89 252 199 96 252 206 99 252 252 253 252 252 254 253 253 254]; mask:((Depth1Image new) width: 19; height: 19; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_??@??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? _??@') ; yourself); yourself]
+!
+
+fileSaveAs22x19Icon
+    "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 fileSaveAs22x19Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileSaveAs22x19Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileSaveAs22x19Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 19; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@EV[&2N]_>1!!M#$9@;FJ[5CY@@@@@EW83CMQA8L3L3L3L3L3L3LB[(UOX B[Z\435-[VL3L3L3L3)4^?@&;>F!!B(HDTSL=[[7#L3L3L3?IC0,+)I,ORB82N>
+U3OVP@<3L3L3Q2^2\LR^P\E3F2+*J_EFZ8#:>/+:EB]]&J+7<$,A8_''C_;Z6C-==134J\W1_YS+%%-T&49H@0<X?CEX% S4J\Q?+++LI#[.S^^D@@LM 75Z@
+;6^KCW1>++M&2OTV(SCN@@CC*>6\1<&56-7)1S#O%7ZT]C@E3 @@06GI+=KR.IG@A,*7M^!!Z&!!#XP)<@@LL6B *8.IG@KA67[TN4LZV,D]E(@@CCM-3\SA''B
+)(\R8(<""S-^QE/6^0@@0:5:^)EI))UI\$&D;.O 95"=9$8@@LN-1\U7RT''PRZAIRZH>T+1*T5ON@@CCX3\70L@,2''I,Y@.YMK%M#%MS3 @@06LB@/CKD#0\
+?WW3#EP$ D)ST<8@@LM#B@#T5M\W^CK;RNQYKR:#G!!:$@@CC@B</K2>$)JR$)JR$)JR$)JR$@@@@00@a') ; colorMapFromArray:#[0 0 0 142 69 67 129 147 186 98 109 149 242 51 50 86 103 157 240 242 242 236 239 248 126 143 183 165 147 99 146 162 196 187 200 223 164 177 207 143 158 193 163 177 206 183 196 219 147 89 55 66 80 124 205 214 224 180 192 216 247 248 252 203 212 222 255 100 39 170 179 216 123 107 74 217 223 229 186 185 192 77 81 85 188 199 217 242 242 227 78 95 152 138 154 191 107 116 154 226 231 241 242 220 141 106 116 153 157 173 203 156 171 202 255 106 42 242 244 250 247 105 44 173 186 212 83 47 28 196 206 218 239 242 247 147 160 203 146 158 202 54 66 115 95 83 66 225 105 42 163 173 212 253 253 254 176 190 218 222 177 45 101 112 151 131 148 187 130 148 186 99 110 149 129 146 185 96 74 37 195 206 220 148 165 197 166 182 208 165 178 207 184 197 219 188 171 94 81 98 151 255 236 120 133 141 159 181 193 216 249 249 253 248 249 252 155 167 207 88 101 128 174 188 219 250 147 56 246 247 250 170 186 215 42 51 96 154 96 64 94 106 147 233 236 247 162 178 207 80 98 153 160 176 205 108 117 154 159 174 204 176 189 214 141 151 173 149 161 204 252 99 38 57 70 107 213 220 227 233 235 240 126 139 158 134 151 189 103 113 152 102 113 151 254 107 43 101 111 150 192 204 226 150 166 198 159 147 111 149 164 197 39 48 89 185 196 219 179 193 223 250 250 253 217 224 237 222 225 232 127 145 185 95 107 147 233 237 246 142 158 193 230 235 243 165 165 166 208 101 40 176 190 213 252 199 96 244 246 250 167 177 214 185 95 37 139 156 193 37 45 83 137 154 191 156 171 203 135 152 189 104 114 152 155 171 202 154 169 201 102 102 107 240 242 249 34 41 60 54 66 116 210 217 226 209 217 225 251 251 253 219 101 37 97 108 148 145 161 195 164 180 207 230 202 70 175 190 221 172 162 152 246 247 251 245 247 250 28 33 37 255 101 39 254 99 38 237 239 242 233 208 76 224 187 54 230 234 245 182 195 221 217 103 41 107 117 154 157 172 203 105 115 152 177 145 64 45 55 103 198 207 220 194 97 38 171 185 210 144 157 200 54 65 115 103 86 54 212 220 227 252 252 253 255 117 45 182 194 214 223 228 241 102 113 152 162 172 191 101 111 151 131 149 187 150 166 199 244 244 245 98 109 148 238 241 249 128 145 184 249 99 39 147 162 196 167 181 209 233 237 244 247 248 251 172 187 217 125 143 184 252 178 84 159 175 204 65 80 125 177 190 215 244 246 251 242 244 249 157 173 182 214 221 228 255 255 255 226 231 243 134 152 189 103 114 152 153 169 201 228 196 63 151 167 199 235 238 245 210 219 227 185 197 219 184 195 218 49 60 112 152 149 137 207 215 224 65 79 121 248 249 251 143 62 26 176 184 220 251 169 79 90 110 162 174 182 218 85 102 157 94 106 146 144 161 195 185 197 222 143 159 194 142 157 193 181 195 218 160 174 204 132 141 160 74 71 70 202 211 222 126 64 32 152 163 206 167 147 95 68 83 130 133 143 164 252 206 99 136 153 190 105 115 153 134 151 188 103 113 151 154 170 201 123 85 65 152 168 199 240 243 249 172 185 212 235 214 82 169 185 209 232 240 251 252 187 89 57 70 109 196 168 100 187 198 220 59 59 58 252 252 254 160 170 210 251 252 253 181 194 214 116 124 137]; mask:((Depth1Image new) width: 22; height: 19; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_??@???8???<???<???<???8???0??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? _??@') ; yourself); yourself]
+!
+
+heartOverlay
+    "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 heartOverlay inspect
+     ImageEditor openOnClass:self andSelector:#heartOverlay
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class heartOverlay'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 15; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+O3<NC0<?O3<?O4EAL4@?O3<8C =^@PD?L%MAL3L3TC= XC,DGPH@L$<''F%D6CCMPA \"UAAEJU<5WR((M6%)T@Y$OFDCM11DF4LMMEI\ZU@?G%\_Q",QQ3$,
+F!!(RI%APO1%VRPU"UT :KRABF&]PO3<?B4(SX286HR TP$5PO3<?O3=(K1THYU!!KOSAPO3<?O3<?O6 #E %&VU)PO3<?O3<?O3<?SC9EJTAPO3<?O3<?O3<?
+O2T1IE-PO3<?O3<?O3<?O3<?S!!\JTC<?O3<?O3<?O3<?O3<XTC<?O3<?O3<?O3<?O3<?TE@?O3<?O3<?') ; colorMapFromArray:#[237 93 63 240 72 43 255 96 56 255 110 74 255 125 93 255 116 81 244 165 152 255 175 155 255 102 64 255 95 55 96 57 66 215 109 88 224 81 58 255 52 2 230 114 94 241 101 71 255 107 70 255 94 54 255 87 44 255 136 106 255 61 12 255 113 78 255 104 67 252 101 65 208 79 60 223 96 73 255 55 5 255 71 26 255 92 51 255 105 68 252 134 104 255 138 109 255 58 8 255 80 37 255 186 169 255 130 99 255 100 62 190 136 133 236 53 17 255 56 6 255 70 24 255 89 47 255 51 1 255 104 66 255 64 17 255 67 20 255 99 60 255 164 142 109 41 45 252 109 74 197 81 70 241 57 15 255 57 7 255 68 22 255 90 48 255 101 63 236 144 129 255 75 30 255 77 33 255 167 145 255 180 162 255 63 15 255 108 72 255 255 255 159 49 39 241 51 8 255 52 1 255 61 13 255 81 38 255 98 59 255 111 75 255 85 42 255 87 45 255 162 139 255 183 164 255 73 28 238 109 78 120 41 44 212 97 79 248 64 20 77 77 77 255 84 41 255 97 58 247 36 9 255 129 98 255 97 57 252 170 150 255 181 162 255 83 40 255 76 32 120 45 46 220 64 38 252 51 2 255 58 9 239 97 68 241 73 37 241 132 110 255 128 96 255 106 69 255 109 72 255 178 158 255 93 52 255 86 43 114 46 52 212 117 99 248 53 7]; mask:((Depth1Image new) width: 16; height: 15; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'NC1>?/???????7??_?8??A?8C?@G8@_@@<@A @F@') ; yourself); yourself]
+!
+
+help28x28Icon2
+    "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 help28x28Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#help28x28Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class help28x28Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@@@@3H@@@@@@@@@@@@@@@@CL2@@@@@@@@@@@@@@@@L3L @@@@@@@@@@@@@@@3L3@@@@@@@@@@@@@BLCL3
+L0@@@@L3@@@@@CL0L3L3@@H3L3L0@@A@L3@3L3LBH#L3L3A@@D@3LCL3L0H"L3L3LD@@PCL0L3L3@"D3L1L0P@A@L3@3L3LBH!!L1L3A@@D@3LCL3L0H"HQL3
+LD@@PCL0L3L3@"H#D3L0P@A@L3@3L3LBH"D1L3A@A@L3LBL3L0H"D3LSLD@D@3L0H#L3@"D#L3D0P@PCL3LBH#LBHRL3L3A@A@L3L3@"H0H"H3L3LD@D@3L3
+L H"@"H#L3L0P@PCL3L"@"HBH"L3L3A@A@H"H"H H H"H#L2HD@D@@H"H"HB@"H"H"H@P@ADP@H"H HBH"H @DQ@@@@DP@@"H@H"H@Q@@@@@@@@@Q@@B@ @D
+P@@@@@@@@@@@AD@@Q@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[64 64 64 0 128 92 192 192 192 253 253 253 191 191 0]; mask:((ImageMask new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@X@@@@G @@@A<@@@@_ @@@G<@@@G?@\@C?9? C????A????0_???<G????A????0_???<G????A????0????<O????C????0????<O????C????0????<O??
+??C????0O???8@_?? @@?? @@A?@@@@a') ; yourself); yourself]
+!
+
+helpIcon
+    ^ self help22x22Icon
+!
+
+hexToggle19x22Icon
+    "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 hexToggle19x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#hexToggle19x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class hexToggle19x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+IQTFA XFA XND@ _G2T%IRT%IRTFIRT%IRT[E0$/A!! _IRT%IRT%A"T%IRT%F1,[F0X(CA<%IRT%IPX%ISL3L2T3L3LF@3HQG2T%IRTFIRT3IRT%L2D3A"$%
+H 0_IRT%A"T%L3L3ISL3L0PDA@PDA@P%IPX%IRT%L2T3ECLRL243J0<YIRTFIRT3L2T%L3H3BSL3L0@*FRT%A"T%IRT%IQ4TE00XKRXEGA$%IPX%ISL3L1,3
+L3L L3L3K (YIRTFIRT%ISL[L3@1CCLG@!! QFRT%A"T%ISL3E3L3L@03L1XVFA$%IPX%F1,[L203@2<0L00 A1XYIRTFIRH3L3LAL0$$K3L3L2@ FRT%A"T!!
+HRDWE2LIIB<0D00(A1$%IPX%HSL3L0D3L3L/K3L''CB@YIRTFIRD3HSLAL0$IK3L0L00 FRT%A"T!!L3L3@SL3BR<3LCLLHA$%IPX%HSL!!L1\3BP$/L3@3CB@Y
+IRTFIQ\3E3L,L3L3K3@3CB GFRT%A"T2L#HMCRHWK@$CD#@1CA$%IP,YFQ$YFQ$YFQ$YFQ$YFQ$YIP@a') ; colorMapFromArray:#[204 208 220 245 246 250 224 227 236 240 242 248 140 145 163 212 215 227 207 211 222 227 230 238 193 197 211 241 243 248 214 218 228 210 214 224 231 233 241 249 250 252 201 206 218 200 204 217 196 200 213 220 223 233 238 240 247 234 236 243 250 251 252 205 209 221 225 228 237 245 247 250 223 226 235 116 120 133 240 241 248 253 254 254 211 214 226 252 252 253 207 210 222 178 183 200 229 231 240 247 248 251 246 248 250 242 244 249 241 242 248 255 255 255 213 217 227 232 234 242 230 232 240 248 249 251 202 207 219 201 205 218 243 245 249 219 222 232 217 220 230 237 239 246 235 237 244 234 237 243 251 252 253 0 0 0]; mask:((Depth1Image new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_? @_?0@_?8@_?<@_?>@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@') ; yourself); yourself]
+!
+
+historyOverlayIcon
+    "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 historyOverlayIcon inspect
+     ImageEditor openOnClass:self andSelector:#historyOverlayIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class historyOverlayIcon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+7M0@^E]G/+Z"]K5#PP@@@M3\7&H(NG7!!P,YCR9AF@@C\0*@$H-FR7S;OASWP[L\@%6AJ.F.YLUJ,2''A.ML]O@GTY61ZE$ZZK0XM)HC''KW,^@CA@*_5.''U(0B
+,H&XHU5O3+,^+)>Z ''-''T^BOE5!!>S2X.AJE&_IOVN7J#UM"%74>D2D97GAU(S\Q!!3H#CV'')OM0%PI5&G*-T6^P,HK=+ES:53/1P=]!!H]*BN^''K11J<\,!!-I-
+Z"$[L@Z]T064G0(@[3H3&5TS2S0A2(7TYZ,+@@LG,[(ZIZSYRTUL##*J@@@C*[)HK]N5 ]>/8%>N@@@@@:$@@B5OS4=OS>H@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 210 226 249 14 16 17 130 130 154 76 115 210 167 187 210 222 247 254 128 128 152 123 181 246 200 202 216 55 55 77 146 201 252 218 219 227 149 200 245 56 56 68 6 6 9 134 176 227 4 4 7 202 241 254 206 236 248 133 192 249 133 190 249 167 214 246 95 162 248 42 42 54 224 220 226 182 182 198 219 243 254 120 179 246 209 246 254 122 178 238 122 120 149 140 184 216 117 135 177 200 208 222 189 232 254 227 226 232 163 169 189 209 206 211 119 179 248 219 216 224 206 242 254 169 220 254 102 100 129 137 139 160 121 121 141 170 189 222 99 167 248 233 253 254 233 251 254 131 131 154 188 185 200 159 163 188 178 182 200 176 225 254 182 181 194 218 218 226 122 159 211 83 82 110 2 3 4 175 181 230 164 214 252 185 202 233 43 43 54 57 57 71 123 123 149 190 198 218 201 198 209 39 39 50 150 161 182 87 87 107 177 177 192 69 69 86 163 171 198 228 227 232 168 167 183 125 129 154 60 64 67 82 134 224 56 57 73 103 158 228 46 60 73 197 213 241 187 235 254 97 160 245 162 190 213 214 254 254 163 163 181 77 115 189 143 197 247 76 111 188 194 236 254 0 0 1 149 145 167 111 110 133 57 57 80 183 184 197 46 62 79 182 182 196 124 124 149 24 24 31 122 120 147 142 197 249 18 22 25 71 92 110 44 54 57 181 231 254 194 227 247 92 92 114 142 178 219 141 178 218 139 139 160 198 243 254 112 117 150 68 90 110 213 210 216 170 170 187 168 168 185 187 230 253 103 160 240 166 166 183 168 220 254 137 135 161 116 145 160 134 191 247 206 209 222 153 150 170 184 230 253 184 183 197 162 162 182 164 208 230 158 188 201 201 198 207 202 242 254 178 177 191 163 214 252 102 164 245 145 192 231 13 13 19 219 248 254 160 194 206 169 207 228 124 123 151 144 200 253 123 123 150 209 241 254 228 238 243 62 76 90 37 37 49 33 33 45 31 31 43 169 169 185 128 185 247 226 249 254 178 226 253 179 183 198 142 200 254 206 241 254 167 215 252 166 215 251 192 192 204 116 163 235 189 188 201 94 134 177 179 187 201 57 95 187 213 242 254 203 243 254 203 241 254 136 136 162 170 218 248 82 81 109 210 232 251 153 153 172 154 208 252 129 128 155 36 47 57 110 110 133 90 90 110 40 40 51 106 123 162 160 159 182 200 197 208 36 36 47 171 191 219 28 28 39 166 166 181 191 201 222 107 158 222 141 141 163 192 191 203 142 169 210 170 170 188 224 254 254 167 168 185 71 131 236 47 63 77 127 123 149 196 197 210 159 158 177 177 192 221 241 254 254 221 254 254 166 166 187 65 98 134 57 57 70 201 198 208 195 221 235 178 177 192 201 216 231 192 195 209 155 154 176 118 133 166 153 196 220 55 51 48 11 11 18 39 88 214 151 154 195 94 120 172 181 195 221 171 171 188 149 158 216 167 167 184 146 146 170 154 206 247 189 200 222 105 105 133]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G? ??G?>??;????????????????????>??9??C?8C>@b') ; yourself); yourself]
+!
+
+imageEditor19x26Icon
+    "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 imageEditor19x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor19x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class imageEditor19x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 19; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@!!H!!LF@@@@@@@@@@@@@@@@@@@]N&I,I0(C@0LC@0LC@0LC@0LCI&QHQ4@N@00LC@0LC@0LC@0LJ#QUQC<$I0LLC@0LC@0LC@0LCB!!&
+R4T=FP@CC@0L@ HB@ HBC@03V41AJ0T@@00L@ HB@ HB@PH,ZEAMO!!TC@@LL@ HB@ DB@ HBLFEOQ#HP@0@CC@HB@ HB@ HBLV)XTTHXC@L@@00B@ HB@ HB
+@R=%UD9CD 0C@@LL@ HB@ HA@#$<W%YIG 0L@0@CC@HB@ DB@ H8Z5%WR!!PLC@L@@00B@ HB@ H.N6MZT!!< C@0C@@LLC@HB@ HBM&5_WELZC@0L@0@CC@HB
+@ HB@"5)XE4%E00LC@L@@00B@ HDA@P)[F\5C00LC@0C@@LLC@HB@ PDH607CP0LC@0L@0@CC@0LC@0DA@ IDP0LC@0LC@L@@00LC@0LA@PGB00LC@0LC@0C
+@@LLC@0L@PPDF00LC@0LC@0L@0@CC@0A@PDA@PDA@PDAC@0LC@L@@00A@PDA@PDA@PDA@PDAC@0C@@LC@0LC@0LC@0LC@0LC@0LC@0@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 137 0 0 206 0 87 87 87 133 60 36 145 109 112 155 31 0 160 115 98 161 124 106 163 140 130 166 46 5 169 113 95 174 218 230 182 93 58 183 59 8 186 100 65 192 147 138 193 129 103 193 132 116 195 100 52 195 120 93 197 82 32 204 208 220 205 177 176 207 90 27 210 109 64 210 140 105 213 175 169 213 217 227 215 172 138 220 114 42 222 120 43 222 209 212 223 137 33 223 153 96 226 180 137 228 90 9 228 142 66 232 174 56 234 184 145 240 178 78 241 195 142 241 212 187 242 102 12 242 177 95 245 202 137 245 209 172 247 181 30 247 183 8 247 198 128 248 122 26 248 194 1 248 198 0 248 201 137 248 203 113 248 214 181 249 193 57 249 210 160 250 206 0 253 222 69 253 226 47 254 116 14 254 128 21 254 136 5 254 141 47 254 144 8 254 147 36 254 147 47 254 158 0 254 158 1 254 159 21 254 161 10 254 162 0 254 165 54 254 165 69 254 167 2 254 167 5 254 171 10 254 176 36 254 177 17 254 178 11 254 181 24 254 184 75 254 184 94 254 187 34 254 191 0 254 191 42 254 191 54 254 194 26 254 197 55 254 201 65 254 203 3 254 203 78 254 203 97 254 207 47 254 209 81 254 212 90 254 213 16 254 214 81 254 216 73 254 219 0 254 220 37 254 223 0 254 225 166 254 226 7 254 226 119 254 231 26 254 231 65 254 231 201 254 239 98]; mask:((Depth1Image new) width: 19; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@O@@@_ ??? ??? ???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+inspect22x24Icon
+    "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 inspect22x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#inspect22x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class inspect22x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ HB@ HB@ D@@@@@@@@@@@@@@(>O#8VB (JB %,A@@@@@@@@@@@@
+@@JO#8>E (JB (I[@P@@@@@@@@@@@@@B#0DA!!PDA  FBV0D@@@@@@@@@@@@@@(>O#8VB (JB %,AWP@@@@@@@@@@@@JO@PDA!!V 3APPHEQ,=]P@@@@@@@@@B
+#8>O!!4<KE3]EQ$D0FAIV@@@@@@@@@(<A#4<\VH>O#8>O#8>OBEX@@@@@@@JO#6P]TX>O#8>O#8>O#1<E]P@@@@@B#0D5K8>O@PDA@X<A@X<BDBH@@@@@@(=(
+IH>O#8>O#8>O#8>O@#@CY @@@@DAYA6O@X<A#0DA@X<A#0IBA6P@@@@@@FP]#8>O#8>O#8>O#8<BVP5$@@@@@@A$GX<A@PDA#0DA#0FO@%PMY@@@@@@@YA88
+#8>O#8>O#8>O^@IRAFP@@@@@@GT4I HB@ HB@ HB@ HBM )5@@@@@@@@S0<0UDMGVV)8_X>OZP1V@@@@@@@@^&PTC3!!UUU%%YV)=]"L,@@@@@@@@#''%LD0XO
+I4AUYU%RO"L-]P@@@@@@#X.JR1EMQATIC!!X%H29D]@@@@@@@#X2JX2(!!Y A&S$QPU5Y&@@@@@@@@@H2JX2, L @@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 78 78 91 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 156 156 182 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 201 201 218 204 204 219 206 206 221 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 210 210 224 211 211 225 213 213 228 215 215 229 216 216 230 218 218 231 219 219 232 220 220 233 222 222 235 223 128 63 223 223 224 223 255 255 224 224 224 224 224 236 224 224 239 224 239 240 224 255 255 225 225 237 228 228 238 229 229 239 230 230 240 232 232 241 234 234 243 235 235 244 236 236 244 238 238 245 239 239 224 239 239 239 239 239 240 239 239 246 239 255 255 240 207 144 240 239 223 240 240 239 240 240 247 240 255 255 241 241 248 242 242 249 243 243 249 244 244 250 245 245 252 246 246 253 248 248 254 249 249 254 250 250 255 252 252 255 253 253 255 254 254 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255]; mask:((Depth1Image new) width: 22; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@G?8@G?8@G?8@G?8@G?<@G??@G?? G??0G??8G??8G??<G??<A??<A??<A??<A??<@??8A??0C??0G?? O;>@O0@@') ; yourself); yourself]
+!
+
+magnifyingGlassOverlay
+    "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 magnifyingGlassOverlay inspect
+     ImageEditor openOnClass:self andSelector:#magnifyingGlassOverlay
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class magnifyingGlassOverlay'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ADEQPX
+IR)P@@@@@@@@@@@@@@@@@@@@@A,''RE!!YUD@(H&\@@@@@@@@@@@@@@@@@J6$@@@@@@@@@JQ!!''@@@@@@@@@@@@@@@,X @@@@@@@@@@@D@U@@@@@@@@@@@@@DX?
+ P@@@@@@@@@@@HE@LP@@@@@@@@@@@CMR@@@@@@@@@@@@@@A@D0@@@@@@@@@@@B1Y@@@@@@@@@@@@@@A&E0@@@@@@@@@@@B1&@@@@@@@@@@@@@@A&GP@@@@@@
+@@@@@B1Y@@@@@@@@@@@@@@A&GP@@@@@@@@@@@B5I@@@@@@@@@@@@@@A&E@@@@@@@@@@@@DT5@@@@@@@@@@@@@@AGF @@@@@@@@@@@@@_P@@@@@@@@@@@@F,\
+Y0@@@@@@@@@@@@@$G4%&@@@@@@@@ CH<@@@@@@@@@@BP %4#E!!<6T6Y1Z&MQL#4@@@@@@@@@@H>M#E0!!@@@%FQ8&MCH>U0@@@@@@@@@@#8:L[S(0@@@@@@@@
+@@@@@@@@@@@@@@@@#(1-N2<@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 32 223 32 40 255 124 50 255 112 51 255 109 54 229 139 62 255 87 62 255 88 62 255 91 62 255 136 64 64 64 73 255 115 83 255 62 91 255 73 94 255 74 101 255 84 105 255 85 112 255 96 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 170 170 170 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 176 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 183 183 183 190 190 190 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 196 196 196 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 217 217 217 223 32 32 223 128 63 223 192 255 223 223 32 223 223 224 223 255 255 224 224 224 224 224 239 224 239 240 224 255 255 231 207 255 231 208 255 238 191 255 238 192 255 239 159 232 239 191 255 239 223 255 239 224 255 239 239 224 239 239 239 239 239 240 239 255 255 240 207 144 240 239 223 240 240 239 240 255 255 246 176 255 247 175 255 247 207 255 247 239 255 254 160 255 254 191 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O8@@_>@@0G@A C@C C C@A C@A C@A C@A C@A C@A A C A8G@O?>@_O<@?@@@>@@@') ; yourself); yourself]
+!
+
+menuEditor19x26Icon
+    "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 menuEditor19x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#menuEditor19x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class menuEditor19x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 19; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@A5\''L=@@@@@@@@@@@@@@@@@@A)N9MRUVLEK"8.K"8.K"8.K"8.&D%>_G\2AP<OC0<OC0<OC0<OYHQL_6T7UPTOC0<OC0<OC0<OC81H
+$S)9M @EC0<OC0<OC0<OC0=FS)Y''R''@@AP<OC0<OC0<OC0=,PV!!:O)\@@A,[F1,[F1,[F1,[X(ADZ)UG@@@C@0LC@0LC@0LC!!46A[8Y; 0@@CALSD1LSD1LS
+D4M-NEE6]@@@@@0SD1LSD1LSD5A_[(49V!!P@@@@LD1LSD1LSD1NK"%05T9HT@@@@KB0,KB0,KB1YPDVN#3D,E@@@@@T.K"8.K"8._U!! W&ZIK!!P@@@@EC0<O
+C0<OC7!!KOCNP"@<T@@@@AP<OC0<OC0=TT#=BU <OE@@@@@TOC0<OC0<OU5JT!!P<OC1P@@@@[F1,[F1,[F5,4\Q,$EAPT@@@@AR8.K"8.K"9!!S28.K"8.E@@@
+@@TKC0<OC0<OZ0<OC0<OC1P@@@@EJP<OC0<OC0<OC0<OC0<T@@@@B!!8OC0<OC0<OC0<OC0<OE@@@@@8AFA<IGRL"@!!X E!!@TIAP@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 106 103 105 108 108 111 21 232 231 3 189 187 226 226 228 104 104 105 109 109 108 21 231 231 82 82 83 213 213 214 187 187 187 133 233 234 21 231 230 90 90 92 186 186 188 108 108 108 135 225 226 138 243 244 2 186 188 85 85 88 133 225 227 107 107 109 182 182 181 107 107 108 19 230 230 0 129 126 102 102 103 0 128 126 85 85 84 180 180 182 101 101 104 105 105 109 111 111 110 84 84 85 88 88 90 96 96 99 0 125 126 2 191 189 0 138 139 97 94 99 193 193 192 110 110 109 19 234 233 5 141 143 95 95 99 254 254 252 2 190 188 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 19; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@O@@@_ ??? ??? ???@???@??>@??>@??>@??<@??<@??<@??<@??<@??<@??<@??<@??<@??<@??<@??<@??<@??<@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+menuEditor22x26Icon3
+    "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 menuEditor22x26Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#menuEditor22x26Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class menuEditor22x26Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]WI3OP@@@@@@@@@@@@@@@@@@@@@@ZS.ST%U#@@@@@@@@@@@@@@@@@@@@@I!!I_''17L T.
+K"8.K"8.K"8.K"8.K&RDSG=%M5TEC0<OC0<OC0<OC0<OC0>LRID:^SX@AP<OC0<OC0<OC0<OC0<OQ$:VY4)0@@TOC0<OC0<OC0<OC0<O[DE(^#:W@@@[F1,[
+F1,[F1,[F1,[F6J@QF*UQ0@@@0LC@0LC@0LC@0LC@8]M V>F^8L@@@0SD1LSD1LSD1LSD1MC[S!!Q]''P@@@@LD1LSD1LSD1LSD1MPW6:MNU(T@@@@CALSD1LS
+D1LSD1LS"8)\MUNRE@@@@B0,KB0,KB0,KB0,VTAE#(<1KAP@@@@EK"8.K"8.K"8.K''5XXE9&"R8T@@@@AP<OC0<OC0<OC0=8R303$H OE@@@@@TOC0<OC0<O
+C0<OUEH?P%XOC1P@@@@EC0<OC0<OC0<OC5]R%HTOC0<T@@@@F1,[F1,[F1,[F1-[MGD[IAPTE@@@@@T.K"8.K"8.K"8.XT<.K"8.K!!P@@@@EB0<OC0<OC0<O
+C6,OC0<OC0<T@@@@AR$OC0<OC0<OC0<OC0<OC0<OE@@@@@(^E0<OC0<OC0<OC0<OC0<OC1P@@@@N@P\*HQ _BQ4#H HVHAXPEBPT@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 106 103 105 108 108 111 21 232 231 3 189 187 226 226 228 104 104 105 109 109 108 21 231 231 82 82 83 213 213 214 187 187 187 133 233 234 21 231 230 90 90 92 186 186 188 108 108 108 135 225 226 138 243 244 2 186 188 85 85 88 133 225 227 107 107 109 182 182 181 107 107 108 19 230 230 0 129 126 102 102 103 0 128 126 85 85 84 180 180 182 101 101 104 105 105 109 111 111 110 84 84 85 88 88 90 96 96 99 0 125 126 2 191 189 0 138 139 97 94 99 193 193 192 110 110 109 19 234 233 5 141 143 95 95 99 254 254 252 2 190 188 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 22; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@A8@@C<@@C<???<???8???8???0???0???0??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? @@@@@@@@') ; yourself); yourself]
+!
+
+newFile20x22Icon
+    "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 newFile20x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#newFile20x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class newFile20x22Icon'
+        ifAbsentPut:[(Depth8Image new) width: 20; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+IQTFA XFA XND@ _G2T;IRT%IP@%A"T%IRT%F1\IK0XXN30;IRT%@BTFIRT%IRT[F1,;N2 ;OS,%N3,@IPX%ISL3L2T3N38?N3=@O3,?O#,%A"T%IRT%IRT%
+N4EBP4QCP$D;@BTFIRT3L3L%L3L8N3=DMDP?N2T@IPX%IRT%IRT%IRT;O4P4QC<;IP@%A"T%L3L%ISL2N4EBP4QCP$D;@BTFIRT%IRT%GS,>O3,?PC<;O38;
+IPX%ISL%L1,%L3,;FC,=N0(;N0@%A"T%IRT%F2T0LP0XN30;DQ$%@BTFIRT%L3LWL3L0CCL3N1XXFRT@IPX%F1,[@20C@2<0F@0 A1XYIP@%A"T"L0$3@SLI
+IB<3L3L HA$%@BTFIRD!!HQ\WH0$$K3@SCB GFRT@IPX%HSL3HPD3HSL/K3L''CB@YIP@%A"T!!HRD!!@RDIBR</LB\LHA$%@BTFIRD3L3LAL3LIK3L0L00 FRT@
+IPX%HRD!!HQ\!!BP$/LC@0CB@YIP@%A"TWL1\3KCL3L2<0L00(A1$%@BTFISH2L 4MH!!\,BPLRLCDLFRT@IP,YFQ$YFQ$YFQ$YFQ$YFQ$YIP@b') ; colorMapFromArray:#[204 208 220 245 246 250 224 227 236 240 242 248 140 145 163 212 215 227 207 211 222 227 230 238 193 197 211 241 243 248 214 218 228 210 214 224 231 233 241 249 250 252 201 206 218 200 204 217 196 200 213 220 223 233 238 240 247 234 236 243 250 251 252 205 209 221 225 228 237 245 247 250 223 226 235 116 120 133 240 241 248 253 254 254 211 214 226 252 252 253 207 210 222 178 183 200 229 231 240 247 248 251 246 248 250 242 244 249 241 242 248 255 255 255 213 217 227 232 234 242 230 232 240 248 249 251 202 207 219 201 205 218 243 245 249 219 222 232 217 220 230 237 239 246 235 237 244 234 237 243 251 252 253 0 0 0 255 248 248 207 216 240 240 240 248 239 232 240 240 240 240 48 88 176 224 224 232 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200]; mask:((Depth1Image new) width: 20; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?(@_?<@_?= _??0_?? _??@_??@_?? _??0_?? _??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@') ; yourself); yourself]
+!
+
+newImage22x22Icon
+    "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 newImage22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#newImage22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class newImage22x22Icon'
+        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@0MC@@@@@@@@@LC@0LC@0LC@0LLC@LLC 0CC@0@@@@C@0LC@0LC@0LLC1@LDADPCA@OC@@@
+@0LC@ HB@ HB@ 0RD1PUEALRC@@@@@LC@ HB@ HB@ HICA@UAQTPC@@@@@@C@ HB@ HD@ HD@ 0PEPTUD@0@@@@@@0HB@ HB@ HB@ 0RD1PUEALRC@@@@@LB
+A@HB@ HB@ 0OD@0PDQ@LD@<L@@@C@ HB@ HBA@HDC@0BC@8L@00L@@@@@0HB@ HD@ HB@ HB@ 0MC@L@@@@@@@LB@ HB@ HB@ HB@ HCC@LC@@@@@@@C@0HB
+@ HB@ HD@ HB@0LC@0@@@@@@@0HD@ HB@ HB@ HB@ LC@0L@@@@@@@LB@ HB@PDA@ HB@0LC@0LC@@@@@@@C@0HB@ HA@PHB@0LC@0LC@0@@@@@@@0LC@0LC
+@PDC@0LC@0LC@0L@@@@@@@LC@0LC@0DA@0LC@0LC@0LC@@@@@@@DA@PDA@PA@PPDA@PDA@LC@0@@@@@@A@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[87 87 87 133 60 36 0 206 0 174 218 230 0 137 0 255 248 248 207 216 240 240 240 248 239 232 240 240 240 240 48 88 176 224 224 232 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@BC_??3_??;_???_??;_??3_??3_??;_???_??;_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3@@@C') ; yourself); yourself]
+!
+
+openEditApplicationIcon
+    <resource:#programImage>
+    ^ self openEditApplication32x32Icon
+!
+
+openViewerApplicationIcon
+    <resource:#programImage>
+    ^ self openViewerApplication32x32Icon
+
+    "Created: / 04-04-2011 / 14:26:20 / cg"
+!
+
+removeBreakPointIcon2
+    "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 removeBreakPointIcon2 inspect
+     ImageEditor openOnClass:self andSelector:#removeBreakPointIcon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class removeBreakPointIcon2'
+	ifAbsentPut:[(Depth2Image new) width: 12; height: 21; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'EUUT_??=_:+=_**=^)V-^%U-^%U-^UU-_%V=_:+=_??=_:+=_%V=^TA-^P@-^P@-^0@-_ B=_:+=_??=EUUT') ; colorMapFromArray:#[0 255 0 63 63 63 0 0 0 127 127 127]; mask:((Depth1Image new) width: 12; height: 21; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_>C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<O?0??C?<G? ') ; yourself); yourself]
+!
+
+removeTab14x14Icon
+    "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 removeTab14x14Icon inspect
+     ImageEditor openOnClass:self andSelector:#removeTab14x14Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class removeTab14x14Icon'
+	ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@HD4JB (JB (JB 0\ BAM8BL"8.K"8.K#HP6YCE"[&]''YV]''Y&Y''[V /JVMXVD1+T%MYVUMXWCH,X5%N$Y5,SY&YV%-]MRE[TU:Z'')2W'')9@N5X%E5]HPR*X
+&9.[HBL3NQ8QXT]FP(JV%(4-R%U0F@Y*QDU6]75/^''!!< 8 R@V%COR-IGQ(>N#2E# 0@]E@.D1$''S1,TUH&OC T?R2X"IC!!__''NG!!)@DG0];\VA5_8*R%IRS
+EQX@G@HKB@$JCP<OD@LV@@@a') ; colorMapFromArray:#[129 65 62 131 63 61 131 74 71 135 64 67 135 67 67 138 81 79 146 67 67 149 71 67 155 76 70 155 78 70 156 76 70 157 76 71 158 69 70 158 79 68 159 71 71 159 78 68 161 79 68 162 70 71 170 73 75 171 71 80 172 95 104 175 84 71 175 138 136 178 74 75 179 74 79 181 123 128 182 88 95 183 97 105 184 150 150 186 125 132 189 75 82 191 162 161 194 135 141 199 79 81 203 59 91 206 61 78 207 61 87 207 103 107 209 63 91 211 62 81 213 77 82 213 81 86 213 162 165 213 207 210 214 81 86 214 91 102 215 83 98 215 86 92 216 92 97 217 102 106 217 105 110 218 62 87 218 100 105 218 102 109 218 105 109 218 106 110 219 63 91 220 61 85 220 225 226 221 110 128 222 102 112 222 116 121 222 225 226 223 83 95 223 154 164 224 147 158 225 136 142 226 119 122 226 132 137 226 134 138 226 142 147 226 142 148 226 150 160 226 230 231 227 63 85 227 83 97 227 152 165 227 153 165 227 153 166 228 64 86 228 107 110 228 156 167 228 156 168 228 157 169 229 68 83 229 70 90 229 151 163 229 155 166 229 158 170 229 159 171 229 161 172 229 161 173 229 162 174 229 163 176 229 166 176 230 67 91 230 111 80 230 146 153 230 164 174 230 164 177 230 165 168 230 167 178 230 168 179 230 169 179 230 169 180 231 122 126 231 136 142 231 168 178 231 169 179 231 170 180 231 171 181 231 230 231 233 70 90 233 107 80 233 177 180 234 68 88 234 109 112 234 113 80 234 226 227 234 236 238 235 232 234 235 235 235 235 236 238 236 85 83 236 102 116 236 238 240 238 68 88 238 115 80 238 196 202 238 203 204 238 230 230 240 70 86 240 202 208 241 70 87 241 71 91 242 71 91 242 74 90 242 75 90 242 116 80 242 212 218 242 213 220 242 240 240 243 74 90 244 75 91 244 75 92 245 223 227 246 118 79 247 117 81 247 118 79 247 247 247 247 247 248 248 237 238 248 246 246 249 241 243 250 248 248 250 250 250 251 248 248 252 249 249 252 252 252]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?/???????????????????????????????=?>0@a') ; yourself); yourself]
+!
+
+removeTabEntered14x14Icon
+    "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 removeTabEntered14x14Icon inspect
+     ImageEditor openOnClass:self andSelector:#removeTabEntered14x14Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class removeTabEntered14x14Icon'
+	ifAbsentPut:[(Depth8Image new) width: 14; height: 14; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@HD4JB (JB (JB 0\ BAQ(.Q$YFQ$YFQ$X1FYCF@ HB@ HB@ HB@ H@/JXA2\''J@\''I2\''I2 CH, GI2%9.@\)"X\(B@MRF@\(B['')6Y'')92XWH%E7I2[''JZ
+''):^J#,;N18Q\&-+YH6[&9%DN6%)F@Y$YFQ8#X5:#W5!!ZV$R@U]!!XS97J"A/[4])ZP0@XTYDFQ<;N2@ ZV%)C UDQC,;N3-)ZV%)ZV$DG1%)ZV%)ZV%)ZV%)
+GQX@G@HKB@$JCP<OD@LV@@@a') ; colorMapFromArray:#[129 65 62 131 63 61 131 74 71 135 64 67 135 67 67 138 81 79 146 67 67 149 71 67 155 76 70 155 78 70 156 76 70 157 76 71 158 69 70 158 79 68 159 71 71 159 78 68 161 79 68 162 70 71 170 73 75 171 71 80 172 95 104 175 84 71 175 138 136 178 74 75 179 74 79 181 123 128 182 88 95 183 97 105 184 150 150 186 125 132 189 75 82 191 162 161 194 135 141 199 79 81 203 59 91 206 61 78 207 61 87 207 103 107 209 63 91 211 62 81 213 77 82 213 81 86 213 162 165 213 207 210 214 81 86 214 91 102 215 83 98 215 86 92 216 92 97 217 102 106 217 105 110 218 62 87 218 100 105 218 102 109 218 105 109 218 106 110 219 63 91 220 61 85 220 225 226 221 110 128 222 102 112 222 116 121 222 225 226 223 83 95 223 154 164 224 147 158 225 136 142 226 119 122 226 132 137 226 134 138 226 142 147 226 142 148 226 150 160 226 230 231 227 63 85 227 83 97 227 152 165 227 153 165 227 153 166 228 64 86 228 107 110 228 156 167 228 156 168 228 157 169 229 68 83 229 70 90 229 151 163 229 155 166 229 158 170 229 159 171 229 161 172 229 161 173 229 162 174 229 163 176 229 166 176 230 67 91 230 111 80 230 146 153 230 164 174 230 164 177 230 165 168 230 167 178 230 168 179 230 169 179 230 169 180 231 122 126 231 136 142 231 168 178 231 169 179 231 170 180 231 171 181 231 230 231 233 70 90 233 107 80 233 177 180 234 68 88 234 109 112 234 113 80 234 226 227 234 236 238 235 232 234 235 235 235 235 236 238 236 85 83 236 102 116 236 238 240 238 68 88 238 115 80 238 196 202 238 203 204 238 230 230 240 70 86 240 202 208 241 70 87 241 71 91 242 71 91 242 74 90 242 75 90 242 116 80 242 212 218 242 213 220 242 240 240 243 74 90 244 75 91 244 75 92 245 223 227 246 118 79 247 117 81 247 118 79 247 247 247 247 247 248 248 237 238 248 246 246 249 241 243 250 248 248 250 250 250 251 248 248 252 249 249 252 252 252]; mask:((Depth1Image new) width: 14; height: 14; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?/???????????????????????????????=?>0@a') ; yourself); yourself]
+!
+
+sUnit24x24Icon
+    "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 sUnit24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#sUnit24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary sUnit24x24Icon'
+        ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+AEUUUUUUUUUUUTAEH"H"H"H"H"H"UEH"H"H"H"H"H"\5T"H"H"H"H"H"\3URH"H"H"H"H"\3MUH"H"H"H"H"\3L5T"H"H"H"H!!DCL3URH"H"H"H!!DEL3MUH"
+HQH"H!!D@T3L5T"H DRH!!D@T3L3URH"HAD!!D@T3L3MUH"H @QD@T3L3L5T"H"T@D@T3L3L3URH"H%@@T3L3L3MUH"H"]PT3L3L3L5T"H"\3T3L3L3L3URH"\3
+L3L3L3L3MUH"\3L3L3L3L3L5T"\3L3L3L3L3L3UR\3L3L3L3L3L3MTT3L3L3L3L3L3MTAEUUUUUUUUUUUT@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 170 170 170 127 127 127 127 127 127 214 132 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_??8???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<_??8') ; yourself); yourself]
+!
+
+saveAsMethod19x22Icon2
+    "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 saveAsMethod19x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#saveAsMethod19x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class saveAsMethod19x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 19; height: 21; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@5MCP2LB<,JR\$IBL"HQ<]G@@5)ZK43MGV=OS4=OS4=OS4PC4JMJF^=LE(0_S4=LE(0_K%7$@=BCNX%?SAZF#A=LE(ZLG!!
+5=L9M@\2%YG40V#AZOQ(0V#A4<7MFQ$GLX2J9<E(<6!!(ZNM(0\_M3Q XA2>D!!N_AZOO3ZOOPZLGM3\4UEP\. G3''0V#3<?O34F#A3\7MEQTGKWY39<E(<?OP
+4MA(0\7M3QTUA2)*[>_$:?O34MCP4MCP4M@UEP\)X6K$9NK_6-WP3\7M3\7MEQTFI5)Z8.K_6-SP3\#C0J&&*Q$YAB]UU^B;.[^4,Z>.+Y&H!!Z$XF@L&S$;_
+7=+T4L#C0KR&''IN#EQTEI$%I7["5,+B.+Y.H W%4%!!TUA2UBP-+Z5MCH/J&&''INK!!8<UEP\%PDCW-+F+*I&R!!W57\V2NEQTGIS0<$IBM!!(M:]V-%W51YU!!PT
+B@@IBP$IB@ HB@ HB@ HB@ HB@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 28 33 37 34 41 60 37 45 83 39 48 89 42 51 96 45 55 103 49 60 112 54 65 115 54 66 115 54 66 116 57 70 107 57 70 109 59 59 58 65 79 121 65 80 125 66 80 124 68 83 130 74 71 70 77 81 85 78 95 152 80 98 153 81 98 151 83 47 28 85 102 157 86 103 157 88 101 128 90 110 162 94 106 146 94 106 147 95 83 66 95 107 147 96 74 37 97 108 148 98 109 148 98 109 149 99 110 149 101 111 150 101 111 151 101 112 151 102 102 107 102 113 151 102 113 152 103 86 54 103 113 151 103 113 152 103 114 152 104 114 152 105 115 152 105 115 153 106 116 153 107 116 154 107 117 154 108 117 154 116 124 137 123 85 65 123 107 74 125 143 184 126 64 32 126 139 158 126 143 183 127 145 185 128 145 184 129 146 185 129 147 186 130 148 186 131 148 187 131 149 187 132 141 160 133 141 159 133 143 164 134 151 188 134 151 189 134 152 189 135 152 189 136 153 190 137 154 191 138 154 191 139 156 193 141 151 173 142 69 67 142 157 193 142 158 193 143 62 26 143 158 193 143 159 194 144 157 200 144 161 195 145 161 195 146 158 202 146 162 196 147 89 55 147 160 203 147 162 196 148 165 197 149 161 204 149 164 197 150 166 198 150 166 199 151 167 199 152 149 137 152 163 206 152 168 199 153 169 201 154 96 64 154 169 201 154 170 201 155 167 207 155 171 202 156 171 202 156 171 203 157 172 203 157 173 182 157 173 203 159 147 111 159 174 204 159 175 204 160 170 210 160 174 204 160 176 205 162 172 191 162 178 207 163 173 212 163 177 206 164 177 207 164 180 207 165 147 99 165 165 166 165 178 207 166 182 208 167 147 95 167 177 214 167 181 209 169 185 209 170 179 216 170 186 215 171 185 210 172 162 152 172 185 212 172 187 217 173 186 212 174 182 218 174 188 219 175 190 221 176 184 220 176 189 214 176 190 213 176 190 218 177 145 64 177 190 215 179 193 223 180 192 216 181 193 216 181 194 214 181 195 218 182 194 214 182 195 221 183 196 219 184 195 218 184 197 219 185 95 37 185 196 219 185 197 219 185 197 222 186 185 192 187 198 220 187 200 223 188 171 94 188 199 217 192 204 226 194 97 38 195 206 220 196 168 100 196 206 218 198 207 220 202 211 222 203 212 222 205 214 224 207 215 224 208 101 40 209 217 225 210 217 226 210 219 227 212 220 227 213 220 227 214 221 228 217 103 41 217 223 229 217 224 237 219 101 37 222 177 45 222 225 232 223 228 241 224 187 54 225 105 42 226 231 241 226 231 243 228 196 63 230 202 70 230 234 245 230 235 243 232 240 251 233 208 76 233 235 240 233 236 247 233 237 244 233 237 246 235 214 82 235 238 245 236 239 248 237 239 242 238 241 249 239 242 247 240 242 242 240 242 249 240 243 249 242 220 141 242 242 227 242 244 249 242 244 250 244 244 245 244 246 250 244 246 251 245 247 250 246 247 250 246 247 251 247 248 251 247 248 252 248 249 251 248 249 252 249 99 39 249 249 253 250 147 56 250 250 253 251 169 79 251 251 253 251 252 253 252 99 38 252 178 84 252 187 89 252 199 96 252 206 99 252 252 253 252 252 254 253 253 254]; mask:((Depth1Image new) width: 19; height: 21; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_??@??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? _??@@@@@') ; yourself); yourself]
+!
+
+searchOverlay2
+    "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 searchOverlay2 inspect
+     ImageEditor openOnClass:self andSelector:#searchOverlay2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class searchOverlay2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+.[&9S\DQ''C59HRJ9.[&9.[&9.[&9.[&9)4]>.5!!JKM4: BB9.[&9.[&9.[&98RV[X%M,[F1,M;48\+&9.[&9.[&9Q#1PL*<]] ",.F1,(Y*9.[&9.[&9.PBP
+FZ?JX@627K!!,NV3^9+&9.[&9.[$8 3JWB3C3#N^8.CQ]]_R9.PB9.[&9_JO2P*,#^>)=.F8K$3[C.[&9.[&9.T?W''Y6K:9%@[ST5MSW"20B9.[&9.[%OO?JB
+%4R3Z]P5J^LJ/L @.[&9.[&9EKZ:4%$SRS;GJM"J=V/&@K&9.[&9.Z@*#I5''%T$MI7QW/527N0B9.[&9.[$@^!!BB+9XFPG54U;=EU@@@.[&9.[&9.RA1Z)UB
+E+8U)DL-F<-_@K&9.[&9.[$@5.5LE=2>G--%"I:T"Z8/.[&9.[&9@@@@!!MGI2^P[I AK*L6Q]<Z9.[&9@@@@@@@@@@@@@@@@@OFA8M=7U+&9.P@@@@@@@@@@
+@@@@@@A&[1+ 76!![.[$@@@@@@@@@@@@@@@@@@JY/''8>1@5:9@@@@@@@@@@@@@@@@@@@@B]$BX]CUX0@@@@@@@@@@@@@@@@@@@@@+3%HN$X\@@@@@@@@@@@@@
+@@@@@@@@.Q#D0AH.@@@@@@@@@@@@@@@@@@@@@K&9!!Q#)L0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[190 190 203 179 214 235 253 233 159 206 121 14 178 214 234 181 215 227 221 251 253 200 204 216 208 240 250 148 126 112 216 232 238 229 254 254 245 246 250 228 252 253 246 211 132 164 169 187 189 230 251 188 204 227 160 107 51 219 249 254 135 145 175 224 246 249 216 247 251 207 244 252 138 79 26 196 229 251 253 232 155 111 112 138 240 242 248 215 247 253 221 246 249 140 145 163 177 180 196 192 198 214 195 195 207 243 254 254 207 211 222 163 190 225 170 172 189 231 251 252 230 249 251 230 247 251 149 187 221 151 87 25 143 210 248 213 223 231 140 128 133 207 127 27 240 254 254 227 230 238 200 234 251 92 92 122 220 252 254 227 247 251 216 246 250 170 205 228 167 177 202 203 237 247 152 195 230 188 191 206 170 190 218 152 189 230 227 253 254 174 211 235 225 251 252 241 243 248 216 248 253 230 242 247 216 246 253 213 220 227 198 198 209 175 196 226 210 214 224 224 253 254 144 211 248 201 202 215 172 208 226 219 219 226 231 233 241 129 156 197 172 214 249 249 250 252 253 235 160 178 214 235 95 95 124 243 244 246 187 112 26 232 241 245 140 207 247 210 242 253 168 204 225 176 105 25 227 235 240 205 238 248 166 98 25 188 190 205 228 254 254 246 213 133 174 210 234 156 91 25 176 211 226 174 187 201 212 185 159 207 240 253 210 124 15 234 253 253 195 235 251 199 212 222 200 234 246 233 251 252 224 252 253 198 136 46 202 233 238 128 150 182 166 166 183 238 240 247 228 243 247 178 208 221 213 245 252 218 131 16 138 143 162 179 198 222 124 137 168 231 249 253 144 168 204 229 249 251 134 188 237 175 211 231 178 184 201 241 208 124 211 243 253 159 201 235 155 156 175 130 73 25 245 247 250 153 93 31 92 94 123 164 150 144 230 240 245 207 239 252 206 239 251 151 156 174 149 154 172 246 214 135 151 191 230 230 160 50 189 212 221 224 251 252 167 167 183 216 248 254 215 248 253 215 246 253 141 146 164 214 246 252 156 162 182 154 197 236 166 195 228 204 237 252 136 136 159 253 233 158 132 132 155 162 214 237 186 212 221 170 207 235 227 244 248 229 231 240 207 182 159 213 213 221 175 161 154 247 248 251 246 248 250 230 254 254 197 231 248 192 227 243 208 130 31 209 242 253 154 159 176 236 167 55 206 238 250 227 252 254 242 244 249 241 242 248 166 207 237 160 165 185 214 247 251 255 255 255 205 238 252 125 194 246 210 230 237 151 213 245 219 246 249 233 238 243 246 222 150 218 218 225 232 234 242 138 139 163 179 124 48 230 232 240 197 120 26 230 251 253 130 131 155 101 115 143 221 252 254 128 129 153 125 125 150 198 129 40 185 129 47 187 222 237 236 166 54 111 118 146 198 232 251 243 245 249 227 251 253 202 118 14 206 206 216 174 209 234 233 246 249 192 132 47 195 229 238 222 245 248 215 246 251 137 206 247 156 184 203 236 168 57 246 214 136 206 208 219 187 212 220 230 246 249 101 112 139 143 148 167 144 146 168 222 247 251 237 239 246 122 110 120 213 246 252 214 244 253 235 237 244 113 126 154 234 237 243 139 144 163 251 252 253 191 119 39 203 237 252 242 253 254 134 134 158 219 232 238]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G>@CO? C_?0C??0C??8C??8C??8C??8C??8C??8C??8C_?0C_?8CO?>CC>?C@@_#@@_3@@O;@@G?@@C?@@A?@@@?') ; yourself); yourself]
+!
+
+uiPainter19x26Icon
+    "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 uiPainter19x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter19x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class uiPainter19x26Icon'
+        ifAbsentPut:[(Depth8Image new) width: 19; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@BX&X%2@@@@@@@@@@@@@@@@@@BT-]7''''7$0N#$2J"D^GA(XEALS''-?C0+.AN&1 UT-GPC /G1,[(:?P/;*\''4I)W$9IQC84JQ4YFZG!!
+1,B8#0AJ!!W==_G)7\7E0\GB.5,^<)F<@WIFQ$YFQ$YFQ$YF%8</H.X, @E.Q(JB (JBQ(JB *-3J0Z6FH@AZ$ZBQ$YE_$ZBQ*>WS3K6N$R@@VIF $YFQW9FJ
+$Z'' 3<&>"ID @E^Q(IFQ$U>Q(KR76]GD%YFQH@AV$U=_W5=_$U>39-SR1X*Q$R@@UIFQ$YFQ$YF''--;U3YZQ$YD @ENQW5=_W5=_,^#Z5<:PW:2QH@AR$U>(
+*J"(*J[$6="]*IF,$R@@TYE_*J"(*J""9>J0 :"Q+ID @EBQW:"(*J"(&>^2 J2($Z2QH@AO$U>,+J2,+GY8!!:2,+IF,$R@@SYE_$YFQ$YE4^9FQ$YFQ+IDJ
+@D2QW:2,+J2,$*2,+J2,+J2QH@AL$YFQ$YFQ$YFQ$YFQ$YFQ$R@@SIFQ$YFQ$YFQ$YFQ$YFQ$YD @B]HP34;M34=M20%HB@ HB@ CP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 50 164 0 50 171 1 50 177 2 56 178 3 64 241 3 67 246 3 73 255 4 74 255 5 63 191 7 66 194 10 71 196 10 79 255 12 59 167 12 82 255 14 77 199 18 83 201 19 88 255 21 91 255 23 89 204 27 95 206 28 97 255 29 72 179 30 100 255 32 101 209 36 106 255 36 107 211 39 109 255 41 113 214 45 115 255 45 119 216 48 118 255 50 87 176 50 125 219 51 88 176 51 88 177 52 89 178 52 90 178 53 90 178 53 127 212 54 91 179 54 123 255 54 131 221 55 92 180 55 95 181 56 93 180 56 94 181 57 127 255 57 149 229 58 99 184 58 137 224 61 104 187 63 132 255 63 143 226 64 108 190 66 113 193 66 135 255 67 149 229 68 157 232 69 117 196 71 155 231 72 122 199 72 141 255 75 126 202 75 144 255 75 160 234 77 163 236 78 131 206 80 149 255 81 136 209 84 140 212 84 153 255 87 145 215 88 157 255 91 168 235 93 161 255 94 154 222 96 157 223 96 165 255 97 159 225 98 160 225 98 162 226 99 163 227 100 165 228 101 166 229 101 170 255 102 167 230 103 169 231 104 170 232 104 173 255 105 172 233 105 174 234 106 175 235 109 178 255 112 180 255 116 116 120 117 186 255 119 187 255 122 154 245 125 160 253 125 193 255 126 161 253 126 194 255 127 162 254 130 165 254 132 200 255 132 201 255 135 170 255 139 207 255 140 175 255 144 179 255 145 109 112 149 184 255 153 188 255 155 31 0 157 192 255 160 115 98 160 160 160 161 124 106 162 196 255 163 140 130 166 46 5 166 200 255 169 113 95 170 204 255 174 208 255 177 212 255 181 215 255 182 93 58 183 59 8 185 219 255 186 100 65 188 222 255 191 225 255 192 147 138 193 129 103 193 132 116 195 100 52 195 120 93 197 82 32 204 208 220 205 177 176 207 90 27 210 109 64 210 140 105 212 211 224 213 175 169 213 217 227 215 172 138 220 114 42 222 120 43 222 209 212 223 137 33 223 153 96 225 225 234 226 180 137 228 90 9 228 142 66 232 174 56 234 184 145 237 236 242 240 178 78 241 195 142 241 212 187 242 102 12 242 177 95 245 202 137 245 209 172 245 244 247 247 181 30 247 183 8 247 198 128 247 246 249 248 122 26 248 194 1 248 198 0 248 201 137 248 203 113 248 214 181 249 193 57 249 210 160 250 206 0 253 222 69 253 226 47 254 116 14 254 128 21 254 136 5 254 141 47 254 144 8 254 147 36 254 147 47 254 158 0 254 158 1 254 159 21 254 161 10 254 162 0 254 165 54 254 165 69 254 167 2 254 167 5 254 171 10 254 176 36 254 177 17 254 178 11 254 181 24 254 184 75 254 184 94 254 187 34 254 191 0 254 191 42 254 191 54 254 194 26 254 197 55 254 201 65 254 203 3 254 203 78 254 203 97 254 207 47 254 209 81 254 212 90 254 213 16 254 214 81 254 216 73 254 219 0 254 220 37 254 223 0 254 225 166 254 226 7 254 226 119 254 231 26 254 231 65 254 231 201 254 239 98]; mask:((Depth1Image new) width: 19; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@O@@@_ ??? ??? ???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@???@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+viewInspect22x22Icon
+    "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 viewInspect22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewInspect22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class viewInspect22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+\GA0\GA0\GA0\GA0\GA0\GA0\GA0\C@:PS09MSH*HQ8\F!! TD1@OB0(IA@D:\''A#W55UR4]@NB<_F1\RC  GA0TBP&=%XE9YS$%DO#P)GQ$UDP0GA0\F@4*-
+):Z%)IZU%INF!!XRB\7E.ZFQ"XQY\</K2</K2<)9)Y61>!!:#+:^[#8M .V?K2</K2<''V@(*>0+I6A^;[#8M;RKU+2</K2<("7-[V5-[V5.XM,-.C^4"-X<$A@
+PH&3X6M#X6M#X6M#''V''\6,0(U?I@''JB6-+Z6-+Z6-+Z6X;V]#]WHI%[2PI2O*+Z6-+Z6-+Z6-&N5''V[U2BQT<$B\"[B6-+Z6-+Z6-+Y#-[U+3<L#T?I@''H&5
+-+Z6-+Z6-+Z6X;V5]<7AH%K2PI2I,KZ6-+Z6-+Z6-&N5-W_M0RAQ<$A@"*N6-+Z6-+Z6-+Y#-[U''2[8 TOK2<)>Q-+Z6-+Z6-+Z6X;V!!]LZ=HD?23<?O^Y66
+-+Z6-+Z6-&N5]+[F/RAM<,?O3759(6M#X6M#X6M##)''D0+, SN#15;I<Z''&5-[V5-[V)#)*=/K.9HB_0;.61^+,;_&58_9BN&::;.;.;.070;>6?%80 HB@
+HB@ HB@ HB@ HB@ ;>6?&H-0\GA0\GA0\GA0\GA0\GA0\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 50 164 0 50 171 1 50 177 2 56 178 3 64 241 3 67 246 3 73 255 4 74 255 5 63 191 7 66 194 10 71 196 10 79 255 12 59 167 12 82 255 14 77 199 18 83 201 19 88 255 21 91 255 23 89 204 27 95 206 28 97 255 29 72 179 30 100 255 32 101 209 36 106 255 36 107 211 39 109 255 41 113 214 45 115 255 45 119 216 48 118 255 50 87 176 50 125 219 51 88 176 51 88 177 52 89 178 52 90 178 53 90 178 53 127 212 54 91 179 54 123 255 54 131 221 55 92 180 55 95 181 56 93 180 56 94 181 57 127 255 57 149 229 58 99 184 58 137 224 61 104 187 63 132 255 63 143 226 64 108 190 66 113 193 66 135 255 67 149 229 68 157 232 69 117 196 71 155 231 72 122 199 72 141 255 75 126 202 75 144 255 75 160 234 77 163 236 78 131 206 80 149 255 81 136 209 84 140 212 84 153 255 87 145 215 88 157 255 91 168 235 93 161 255 94 154 222 96 157 223 96 165 255 97 159 225 98 160 225 98 162 226 99 163 227 100 165 228 101 166 229 101 170 255 102 167 230 103 169 231 104 170 232 104 173 255 105 172 233 105 174 234 106 175 235 109 178 255 112 180 255 117 186 255 119 187 255 122 154 245 125 160 253 125 193 255 126 161 253 126 194 255 127 127 175 127 128 175 127 162 254 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 130 165 254 132 200 255 132 201 255 135 170 255 139 207 255 140 175 255 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 179 255 144 191 239 149 184 255 153 188 255 157 192 255 159 159 192 159 160 192 159 160 207 159 160 208 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 162 196 255 166 200 255 170 204 255 174 208 255 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 177 212 255 181 215 255 185 219 255 188 222 255 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 225 255 192 192 208 192 239 255 192 240 255 207 143 95 207 207 191 207 223 239 207 239 240 207 255 255 208 208 223 208 224 239 208 255 255 212 211 224 217 217 217 218 217 230 219 219 230 220 220 231 222 221 232 223 128 63 223 255 255 225 225 234 226 226 237 227 227 236 227 227 238 228 228 237 229 229 239 231 230 238 231 231 238 231 231 240 232 232 241 233 232 239 233 233 240 234 234 242 235 234 241 236 236 243 237 236 242 237 237 244 238 237 243 239 238 243 239 239 240 239 239 245 239 255 255 240 207 144 240 239 244 241 240 245 241 241 246 242 242 246 242 242 247 243 243 247 244 244 248 245 244 247 246 246 249 246 246 250 247 246 249 247 247 250 248 248 251 249 249 250 249 249 251 249 249 252 250 250 251 251 251 252 251 251 253 253 253 254 254 254 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????????>@@C') ; yourself); yourself]
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-16x16'!
+
+copy16x16Icon
+    "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 copy16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#copy16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copy16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@B\''@ HLB3$@@@@@@@@@@@@''B@ HB@EDN@@@@@@@@@@@@  HB@ S@1,8@@@@@@@@@@0HFA\EK@P1LP47M2D@@@@AB@ RDPXDB@ H
+BB8@J@@@GP VI"45K0 HB@ 6A@$ @ALHP3(FAQTHC 8OOP$IL @,P245MQ0^B@ HP0YAB3H@KADEPA<0O  .EC4$I@,+@B0?O3<?O2THBADEPSDAP @@@@@@
+@@@JBC4$IBP$GTH@@@@@@@@@MDLKB0,AGQL*@@@@@@@@@C0IBSH2P$H*JP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[48 104 192 160 176 192 176 192 208 192 200 208 176 200 240 208 224 240 224 232 240 246 246 246 255 255 255 48 88 176 96 136 208 160 176 208 176 184 208 160 184 240 144 176 255 208 216 240 245 245 245 240 240 255 255 248 255 144 168 192 112 152 224 160 184 224 160 200 255 176 208 255 192 216 255 244 244 244 250 250 250 96 112 144 112 152 208 160 168 192 144 168 224 192 208 224 197 207 229 210 222 242 243 243 243 249 249 249 80 128 208 112 144 208 144 184 240 176 192 224 197 211 233 32 64 128 32 64 144 32 72 160 144 160 176 128 176 224 128 168 240 160 192 240 192 200 224 176 192 240 32 80 160 248 248 248 80 120 192 112 160 224 112 152 240 144 176 240 211 215 220 216 219 226 240 240 240 247 247 247 64 112 192 96 144 224 128 160 224 48 72 96 208 216 224 192 208 240 32 72 144 240 248 255 96 128 160]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C>@O<@?8C?>O?<??;??/?>??;?? O>@?8C? @@@@@b') ; yourself); yourself]
+!
+
+cut16x16Icon
+    "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 cut16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#cut16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cut16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@PAT@@@@YO@@@@@@@@@@@@BP;P @\CA\@@@@@@@@@@@@@B$ @A!!,6@@@@@@@@@@@@@CP^M04#M @@@@@@@@@@@@@?N2 ]
+D@@@@@@@@@@@@@@@C14[H3(@@@@@@@@@@@@@@@@&H1(*@@@@@@@@@@@@@B8DG0HTL"EJ@@@@@@@@@B8>B0$0QQP1@P@@@@@@@@@V@ALQI1P@MQD@@@@@@@@@
+@@@@DP@T@B@E@@@@@@@@@A<@H$,@Q$<XJP@@@@@@@@@=S1D+@D%AC$\@@@@@@@@@@49AL0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[80 136 224 143 161 197 131 159 220 175 190 217 142 170 242 48 64 112 225 233 240 243 243 243 249 249 249 74 97 165 144 152 176 89 135 225 176 176 192 192 200 208 44 67 104 221 221 225 89 89 104 48 80 144 248 248 248 64 104 176 80 120 208 170 177 184 131 170 230 191 197 203 48 64 96 225 225 225 80 104 128 96 112 128 244 248 252 112 128 144 144 144 160 80 128 224 165 176 200 142 167 222 176 188 219 80 96 112 229 232 235 232 234 238 104 120 135 109 131 175 169 175 181 44 44 59 184 190 202 57 78 99 210 218 232 213 221 238 218 226 245 247 247 247 72 100 156 64 104 192 89 127 210 157 167 192 180 180 195 177 192 219 219 219 219 228 228 228 225 230 241 246 246 246 121 126 132 144 152 160 165 171 176 110 142 214 104 150 240 187 192 209 208 208 217 59 67 104 233 234 237 245 245 245 250 250 250 74 119 195 110 143 201 157 171 193 183 193 203 176 191 218 189 202 229 48 80 128 213 222 241 244 244 244 71 106 156 64 96 176]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@FL@]0@7@C<@O @>@A8@_8C? O6@%XB7 O^@<@@@@b') ; yourself); yourself]
+!
+
+indent16x16Icon1
+    "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 indent16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#indent16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class indent16x16Icon1'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MCP4M@@4MCP4MCP4MCP@@@@@@@@@@@@@@@@@@@@@@J2@&@@@@CP4M
+CP4MCP4M@BLJJ"HT@@4MCP4MCP4MCPPDB!!0!!A @@@@@@@@@@@@@@G"TFIA<@CP4MCP4M@@@@@B$(I0@@@@4MCP4MCP@@@@@@@@@@@@@@@@@@@@@@@@@@@@4M
+CP4@CP4MCP4MCP4M@@@@@@@@@@@@@@@@@@@@@@@@CP4MCP@MCP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4@@@@@@@@@@@@a') ; colorMapFromArray:#[248 248 248 84 110 149 144 166 207 121 145 206 80 136 224 64 96 160 48 80 144 96 136 240 247 247 247 80 128 208 80 128 224 143 157 197 64 88 144 0 0 0 250 250 250 80 120 208 246 246 246 226 230 240 244 244 244 153 185 234 224 229 238 213 219 231 249 249 249 235 238 241 245 245 245 228 232 246 243 243 243 152 182 242 64 96 176 238 241 247 213 222 234 185 197 215 86 135 227 48 88 144 144 171 216 209 219 245 72 100 156 64 88 160 202 218 242 209 217 227 97 127 169 97 123 189 64 120 224 89 135 225]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A@@@@O_<@@GG?__?<@G78\_ @@C7?@@@= @@@@P@b') ; yourself); yourself]
+
+    "Created: / 06-04-2011 / 18:38:27 / cg"
+!
+
+paste16x16Icon
+    "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 paste16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#paste16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class paste16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@PTEME@@@@@@@@@ASS$9NH10\MS$KI - @@@@S%1]V5!![R1%UN"]HXP@@@D9]WR=BJ@0$ETX+NBH@@@AOWPL0E%UTUFD.
+G# ;@@@@F%47P3QEQTT,NC 8GP@@@@@\CU$JKSXOJQ,ASA @@@@@P3<2RR4OIRT3OS0IX0@@V 9"RQ<QJRUPTB(HX5H @BX4RQ<RDQ,3OS1VQ4( A TK@!!<-
+D@PAOUAPJ#YQM#YDPD 8NC 8SC1VQ2EQW5<6Q@\0XQM^QA HM#X6M#X6M$P@@@@@@@@IQDQDQDQDQDQD@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[160 152 128 112 128 160 240 200 112 255 240 160 208 152 0 64 64 64 64 72 80 218 214 210 208 224 240 80 104 128 240 208 80 144 136 112 224 216 128 240 224 128 240 216 128 144 152 176 224 168 0 224 160 0 240 168 0 96 80 64 224 221 218 176 152 80 128 112 96 249 249 249 96 112 144 208 200 128 160 160 144 128 136 160 240 232 160 64 56 48 144 112 32 240 184 16 64 80 96 192 200 224 112 88 80 160 144 96 224 200 96 255 255 255 144 136 128 240 192 96 240 232 144 128 144 176 160 168 192 160 128 32 208 152 16 240 176 16 112 88 64 144 136 96 144 128 96 248 248 248 240 200 80 255 248 255 240 208 112 224 216 144 144 160 176 255 232 160 208 144 0 112 104 64 128 96 48 96 72 64 224 232 240 240 240 240 247 247 247 240 216 96 144 128 112 192 176 128 208 200 144 240 224 144 64 48 32 208 160 16 96 88 64 192 208 224 240 184 32 240 192 48 80 88 112 137 130 111 96 120 144 176 160 128 176 168 144 176 160 144 160 176 192 176 192 208 192 200 208 216 213 202 112 104 80 128 112 80 208 216 240 243 243 243 160 152 112 240 216 112 160 144 128 240 240 160 240 240 176 255 240 176 80 64 48 176 184 208 222 220 214 112 96 80 240 200 64 80 96 128]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@G O?8??#?>O?8??#?>O?<??;??????????0O?@@@b') ; yourself); yourself]
+!
+
+redo16x16Icon
+    "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 redo16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#redo16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class redo16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@%S@TOP0@@@@@@@@@@@@@PP LCC$(-@@@@@@@@@@@FFPD<L#L+R"8@@C\@@@@@FB@IG$\@EC9JID,M@@@@@CXAD3$@MP(J
+O0HWE @@@@@6@P@@@@@#OPIICC8@@@@@PR(@@@@@@C8WCB$4@@@@@C  @@@@@DP(Q @3G0@@@@@@RQ<,@@@@@@@@@@@@@@@@@D@ EP@@@@@@@@@@@@@@@@@@
+RB@D@@@@@@@@@@@@@@@@@BHKHD4@@@@@@@@@@@@@@@@@@BDZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[64 104 192 74 127 225 112 160 240 142 177 241 176 194 231 170 192 241 184 198 241 226 232 244 246 246 246 64 96 160 64 96 176 80 120 208 80 128 240 128 168 240 156 184 241 170 194 242 180 195 240 217 225 245 240 242 248 59 97 165 64 112 192 97 130 201 112 152 224 112 152 240 170 198 241 165 187 240 188 206 242 231 234 239 242 243 246 250 250 250 86 128 184 64 120 224 80 136 240 153 181 225 183 195 223 197 209 229 188 208 244 208 217 244 239 241 247 249 249 249 48 88 176 48 112 224 89 135 225 105 150 240 193 203 221 169 194 242 183 203 243 222 228 238 244 244 244 245 245 245 64 104 176 64 112 208 80 128 224 160 181 216 157 187 241 144 168 240 187 205 236 226 232 238 243 243 243 248 248 248 59 105 180 109 126 176 96 144 224 104 150 240 173 194 229 165 192 242 170 191 241 210 225 246 48 80 144 247 247 247 48 96 176 97 133 194 89 127 210 96 144 240 144 176 240 176 202 241 182 206 242 203 213 239]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@O A?@O>P??C7<NO08_C#<G@@\@@8@C0@C@@@@@@@b') ; yourself); yourself]
+!
+
+removeTab16x16Icon
+    "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 removeTab16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#removeTab16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class removeTab16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@RA HA@PDA@PDA@PHFD @@A#=2\WA-[F-*ZV!!"M@X@@@M5YEUQSTU@OS$6Q&LN@@@A]%=W^U%AN$I8MSA''CP@@@WQX^''9=S$]=
+_''\*Y 0@@@E3T%)=_''5=_''4;J&TL@@@A[#01O''1>_''0-HRA^B0@@@V@2JC]<_''9<I1(VS@(@@@E]K#M<_''1<_'',$ED$I@@@AWB1/_''0)I7->XQMHB@@@@U,&
+H6<''G14$XQ$WQ@\@@@QVNBH^GQ(XEQL[J4LO@@@PK5QSTD=KR$%HQDL%D@@@GADE@PDA@PDA@PDEDQ0@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 167 25 15 173 52 41 174 53 42 178 59 50 178 60 51 181 74 64 184 45 32 184 46 32 184 47 34 185 53 39 186 57 42 186 59 43 186 60 45 187 74 60 188 71 59 188 89 81 188 91 82 195 132 118 207 64 48 208 65 49 209 65 49 209 66 49 209 69 52 210 66 49 210 78 64 211 67 51 211 71 54 211 157 147 212 69 51 213 69 52 213 70 52 213 79 57 215 80 59 218 79 62 218 84 67 219 107 95 221 84 63 221 84 67 221 109 96 222 76 56 222 110 96 222 113 79 223 87 67 223 87 70 223 115 99 225 89 72 225 105 91 225 117 84 227 89 64 227 91 73 227 112 98 227 115 95 227 122 92 228 113 83 228 113 99 229 102 87 230 115 84 230 117 81 230 142 117 231 102 80 231 116 86 231 120 103 231 131 119 232 118 88 232 119 82 233 143 117 234 99 76 234 102 79 234 119 89 234 127 100 234 145 119 235 104 82 235 106 86 236 108 89 236 110 92 236 113 92 236 121 91 236 146 119 237 113 95 237 115 98 237 122 92 237 132 100 238 117 101 238 119 104 238 123 93 238 123 109 238 131 98 238 133 102 238 146 120 238 148 121 239 125 112 239 127 115 239 129 118 239 131 105 239 134 102 240 135 122 240 200 196 242 135 113 242 141 116 242 141 119 242 145 116 242 147 118 242 148 120 243 137 115 243 138 118 243 141 121 243 142 123 243 144 126 243 145 129 243 151 134 243 202 197 244 147 132 244 149 135 244 152 137 244 163 142 244 164 145 245 160 143 245 164 146 245 213 204 246 213 203 248 215 205 249 215 206 252 244 243 253 244 243 253 247 245 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A??''?>_?9??''?>_?9??''?>_?9??''?>_?9??''?>@@@b') ; yourself); yourself]
+!
+
+removeTabEntered16x16Icon
+    "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 removeTabEntered16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#removeTabEntered16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class removeTabEntered16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@M@0D@@@@@@@@@@@DCCP@@@1)HRD]EQDMBPD@>FPL@@@EHPC\7M3P4MCL1NS8J@@@@RC(4P3\1K#UAK"8<BP@@@D\7P4%IMSUI
+RTD,N0 @@@AGM3UIRT%IRT$4KC,G@@@@QCD*K4!!IRTX+IRP8A0@@@DH,I25HRT%FJRD_L \@@@A@KB5HRTYFRTX''G"<F@@@@PB(?RTX)JTYIOA4-AP@@@C8(
+I#4)H2H''OBD^J0P@@@H;LBX#H"D G14_I",L@@@KFC 8M#T2LB<-J2,WB0@@C ,B@@@@@@@@@@@BB08@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[160 24 8 175 48 40 176 56 48 176 72 64 191 56 40 191 56 48 191 64 48 191 72 56 191 72 64 191 80 64 191 88 72 191 88 80 192 80 64 192 128 112 208 152 144 208 208 192 223 208 192 223 216 200 224 216 208 224 224 208 239 224 216 239 232 216 239 232 224 240 120 112 240 168 152 240 176 160 240 208 200 240 232 224 240 240 224 255 88 72 255 96 72 255 96 80 255 104 80 255 104 88 255 112 88 255 112 96 255 120 96 255 120 104 255 128 112 255 136 120 255 144 120 255 144 128 255 152 128 255 152 136 255 160 136 255 160 144 255 168 144 255 168 152 255 168 160 255 176 152 255 176 160 255 184 152 255 184 160 255 184 168 255 184 176 255 192 168 255 192 176 255 192 184 255 200 176 255 208 192 255 208 200 255 208 208 255 216 200 255 216 208 255 224 208 255 224 216 255 232 216 255 232 224 255 240 224 255 240 232 255 240 240 255 248 232 255 248 240 255 248 248]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@A??''?>_?9??''?>_?9??''?>_?9??''?>_?9??''?>@@@b') ; yourself); yourself]
+!
+
+stop16x16Icon
+    "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 stop16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#stop16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class stop16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@CT1"PQ$B1<5@@@@@@@@](\5IU]WU5\%\&-6@@@@]%8&B#>L#H2LO0(9JGX@@E8A]$RASRP$SXED]''-"@CUR^XBHKR@ZF"@-WQXQ_#T3L")CR"4-W5<-
+KQMZL@A3FU-1HQT<KTA@KQ +]G=*A1-''XGT#I0X-KX9:_49NCFX\JV4P#2)@KR5@\D9NS 0MR8P,KC -KTUEKR5/C@1XY''"DVEL-KV1LSF0-KXMX!!C45VW\W
+K70H!!HPH_B<W]5@5@F-(_V$T!!W5=!!QQ)_X,^@@A6C695Y84WE85'']XXB] @@@GX:M0!!GQ4]GBDH]] @@@@@@@CTNUC9FXUX5@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[253 28 28 232 83 83 125 1 1 191 0 0 204 16 16 114 0 0 254 236 236 171 0 0 254 65 65 151 0 0 254 216 216 201 16 16 245 0 0 168 0 0 176 21 21 159 1 1 254 12 12 254 150 150 128 0 0 254 242 242 254 71 71 254 117 117 254 163 163 254 38 38 253 231 231 206 4 4 254 130 130 204 2 2 202 0 0 127 2 2 125 0 0 197 18 18 254 189 189 254 64 64 162 0 0 254 31 31 254 169 169 254 215 215 233 99 99 254 90 90 159 0 0 254 11 11 254 103 103 245 58 58 253 0 0 254 254 254 156 0 0 254 221 221 247 53 53 208 18 18 254 96 96 207 7 7 153 0 0 232 107 107 190 0 0 220 36 36 254 89 89 224 99 99 152 2 2 150 0 0 254 240 240 167 0 0 175 21 21 254 207 207 254 253 253 147 0 0 214 36 36 254 141 141 254 187 187 254 233 233 172 21 21 254 62 62 146 2 2 144 0 0 254 246 246 201 0 0 253 51 51 254 167 167 238 0 0 161 0 0 211 3 3 141 0 0 231 62 62 253 77 77 177 22 22 158 0 0 166 21 21 254 206 206 252 0 0 225 3 3 251 114 114 254 61 61 155 0 0 254 245 245 192 0 0 254 166 166 254 41 41 171 22 22 152 0 0 189 0 0 202 16 16 112 0 0 169 0 0 254 34 34 226 13 13 254 47 47 243 0 0 166 0 0 254 231 231 254 14 14 224 24 24 248 87 87 246 85 85 254 73 73 225 107 107 174 1 1 240 0 0 254 40 40 254 178 178 254 7 7 200 0 0 254 145 145 243 52 52 221 83 83 254 237 237 254 20 20 218 57 57 237 0 0 254 158 158 254 204 204 140 0 0 252 77 77 254 0 0 254 13 13 215 24 24 194 0 0 254 243 243 207 16 16 117 0 0 214 13 13 254 210 210 254 39 39 253 232 232 254 6 6]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?@??G?>_?;?????????????????????_?9??#?<C?@b') ; yourself); yourself]
+!
+
+tabAdd16x16Icon
+    "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 tabAdd16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#tabAdd16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class tabAdd16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+QTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTTGR$)JA4)J
+R$)JR$)JQTTGR$PWA4)DE1$FS!!89R$TGBTQDA0%DQDM8^BDLB$(GQDQDA4QD^G @^G !!^G!!JA1@VE \P^G]5^G]7^GU7^@\[E$PGF1Y8\7Y4]GY3^D(GMP<N
+A3TOC''!!5^W%5^GEJA2MPOP\#TG!!3]''Q4]''M8R \=N08GOW!!7]W!!7]7!!5]7 GC"!!TA08(^G V^G 4^G!!JA0\GA0\GA0]J\''!!8R$)JR @@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[218 221 227 252 102 76 239 157 162 250 154 143 255 219 207 234 236 239 232 234 237 112 122 139 219 205 211 181 188 200 251 251 252 250 206 195 247 247 248 255 87 55 199 205 214 197 203 212 196 201 211 255 72 45 50 55 61 253 196 181 238 239 242 255 193 173 212 216 223 210 214 221 233 164 161 227 229 234 255 172 146 171 179 192 254 71 43 243 150 154 245 246 248 244 222 224 247 99 102 243 244 246 246 160 160 188 194 205 255 66 37 237 191 187 243 137 127 249 200 192 202 207 215 255 131 99 246 107 110 251 141 118 255 7 7 254 223 213 221 224 230 254 9 9 254 107 81 238 152 141 237 239 242 235 237 240 233 235 238 178 185 197 249 188 181 253 120 96 250 139 126 250 250 251 200 206 215 196 202 211 245 235 236 194 200 209 255 233 226 241 211 209 254 12 8 254 71 44 241 240 245 215 219 226 213 217 224 255 255 255 229 232 236 254 118 86 255 160 133 252 102 84 176 184 197 255 46 21 254 96 66 244 245 247 242 243 245 253 47 32 191 197 208 247 112 105 255 67 37 248 208 201 205 210 218 246 244 245 243 240 242 253 102 74 246 135 123 0 0 0 0 0 5 0 0 152 0 0 196 0 0 3 0 0 160 0 0 200 0 0 133 0 0 136 0 0 48 0 0 20 0 0 74 0 0 72 0 0 10 0 0 1 0 0 232 0 0 149 0 0 8 0 0 26 0 0 144 0 0 27 0 0 24 0 0 14 0 0 172 244 244 246 153 153 153 255 255 93 255 255 182 255 198 0 255 255 140 255 255 26 255 149 0 255 255 204]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@A??O?=???????????????????????<b') ; yourself); yourself]
+!
+
+tabRemove16x16Icon
+    "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 tabRemove16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#tabRemove16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class tabRemove16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+QTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTUEQTTGR$)JA4)J
+R$)JR$)JQTTGR$PWA4)DE1$FS!!89R$TGBTQDA0%DQDMFARDLB$(GQDQDA4QDQC8DA#L!!ISDHA1@VE \PE!!XUF!!LTO0D\F@\[E$PGF1YDKT )J5]AI$(GMP<N
+A3TOC$PKQ05RVEUJA2MPOP\#TC4:T40$R5EVR \=N08GOS,NI3@QRT=@HD(GC"!!TA08(UC]RNA<"KB<BA0\GA0\GA0\6@30GP!!4*QP@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[218 221 227 252 102 76 239 157 162 250 154 143 255 219 207 234 236 239 232 234 237 112 122 139 219 205 211 181 188 200 251 251 252 250 206 195 247 247 248 255 87 55 199 205 214 197 203 212 196 201 211 255 72 45 50 55 61 253 196 181 238 239 242 255 193 173 212 216 223 210 214 221 233 164 161 227 229 234 255 172 146 171 179 192 254 71 43 243 150 154 245 246 248 244 222 224 247 99 102 243 244 246 246 160 160 188 194 205 255 66 37 237 191 187 243 137 127 249 200 192 202 207 215 255 131 99 246 107 110 251 141 118 255 7 7 254 223 213 221 224 230 254 9 9 254 107 81 238 152 141 237 239 242 235 237 240 233 235 238 178 185 197 249 188 181 253 120 96 250 139 126 250 250 251 200 206 215 196 202 211 245 235 236 194 200 209 255 233 226 241 211 209 254 12 8 254 71 44 241 240 245 215 219 226 213 217 224 255 255 255 229 232 236 254 118 86 255 160 133 252 102 84 176 184 197 255 46 21 254 96 66 244 245 247 242 243 245 253 47 32 191 197 208 247 112 105 255 67 37 248 208 201 205 210 218 246 244 245 243 240 242 253 102 74 246 135 123]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@A??O?=???????????????????????<b') ; yourself); yourself]
+!
+
+undent16x16Icon1
+    "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 undent16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#undent16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class undent16x16Icon1'
+        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MCP4M@@4MCP4MCP4MCP@@@@@@@@@@@@@@@@@@@@@@@A4S@0@@CP4M
+CP4MCP4MFQ,GBQP@@@4MCP4MCP4MCPPJC10LA @@@@@@@@@@@@@Q@ TFEP@@CP4MCP4M@@@@@@@WB0D@@@4MCP4MCP@@@@@@@@@@@@@@@@@@@@@@@@@@@@4M
+CP4@CP4MCP4MCP4M@@@@@@@@@@@@@@@@@@@@@@@@CP4MCP@MCP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4@@@@@@@@@@@@a') ; colorMapFromArray:#[248 248 248 84 110 149 144 166 207 121 145 206 80 136 224 64 96 160 48 80 144 96 136 240 247 247 247 80 128 208 80 128 224 143 157 197 64 88 144 0 0 0 250 250 250 80 120 208 246 246 246 226 230 240 244 244 244 153 185 234 224 229 238 213 219 231 249 249 249 235 238 241 245 245 245 228 232 246 243 243 243 152 182 242 64 96 176 238 241 247]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A@@@@O_<@@C''?>_?<@O''8N_ @@C7?@@@= @@@@P@b') ; yourself); yourself]
+
+    "Created: / 06-04-2011 / 18:38:35 / cg"
+!
+
+undo16x16Icon
+    "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 undo16x16Icon inspect
+     ImageEditor openOnClass:self andSelector:#undo16x16Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class undo16x16Icon'
+	ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ACC0ULIP@@@@@@@@@@@@@-R 8C@4HP@@@@@@@7@@@.R",3L#0AFPX@@@@@CT,$R#8T@D\^BR@X@@@@@AXW@#<JB#T@
+NQLAM @@@@@>CD$BORL@@@@@@SX@@@@@MB$LE38@@@@@@B)A@@@@@A<3@DX(Q@@@@@@ N@@@@@@@@@@@@@@@@B0_RP@@@@@@@@@@@@@@@@@UHD@@@@@@@@@@
+@@@@@@@DHD @@@@@@@@@@@@@@@AMH@,"@@@@@@@@@@@@@@@@F"D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[64 104 192 74 127 225 112 160 240 142 177 241 176 194 231 170 192 241 184 198 241 226 232 244 246 246 246 64 96 160 64 96 176 80 120 208 80 128 240 128 168 240 156 184 241 170 194 242 180 195 240 217 225 245 240 242 248 59 97 165 64 112 192 97 130 201 112 152 224 112 152 240 170 198 241 165 187 240 188 206 242 231 234 239 242 243 246 250 250 250 86 128 184 64 120 224 80 136 240 153 181 225 183 195 223 197 209 229 188 208 244 208 217 244 239 241 247 249 249 249 48 88 176 48 112 224 89 135 225 105 150 240 193 203 221 169 194 242 183 203 243 222 228 238 244 244 244 245 245 245 64 104 176 64 112 208 80 128 224 160 181 216 157 187 241 144 168 240 187 205 236 226 232 238 243 243 243 248 248 248 59 105 180 109 126 176 96 144 224 104 150 240 173 194 229 165 192 242 170 191 241 210 225 246 48 80 144 247 247 247 48 96 176 97 133 194 89 127 210 96 144 240 144 176 240 176 202 241 182 206 242 203 213 239]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@A<@O8I?0??C><O10>GC<\@C @N@A0@O@@0@@@@@@b') ; yourself); yourself]
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-20x22'!
+
+copy20x22Icon
+    "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 copy20x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copy20x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copy20x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+EQTUEQTUEQTUEQTTGQ4]GQ4]GQ4UGQ4]DPPDABX&I!!P]GQ4]GQ4]GQT]GQ4IB0P&I"X_EA4]GQ4]GQ4]EQ4]GP$QABX&I!!<TGQ4]GQ4]GQ4UGQ4]C1DEI!!<_
+G1P]GQ4]GQ4]GQT]GPPDA@P&I"X_EA4]GQ4]GQ4]EQ4]B0,DABXUEQTUEQTUEQTUEQPUGQ4QDP,DD!!T]GQ4QA@PDI"X&EAT]D1DQDPPJEQ4]GP$KABX&I!!<T
+EQ4]DQ([C!!@UGQ4]BQDDI"X&G1PUGP<LAPX&C!!T]GQ4ODPT&G1<_EAT]@BHEA"XNEQ4]A@PDABX&I!!<TEQ4DH TZF08UGQ4KB0PDABX&I!!PUGRHYF XBC!!T]
+GQDQB0P&I"X&EATIH"HEA"XNEQ4SDQDQABX&I"XTEAPTEAPTEAPUGQ4QF!!DEI!!<&I!!P]GQ4]GQ4]GQT]C00EA"XNG2@REA4]GQ4]GQ4]EQ4@H TFI 8(B DT
+GQ4]GQ4]GQ4UGPP"AQ([C" J@QP]GQ4]GQ4]GQT]H!!$ZA HNG0(AEA4]GQ4]GQ4]EP$"H TFI 8(B DTGQ4]GQ4]GQ4TEAPTEAPTEAPTEAPb') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240]; mask:((Depth1Image new) width: 20; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??@@??@@??@@??@@??@@??@@???0???0???0???0???0???0???0???0???0???0@O?0@O?0@O?0@O?0@O?0@O?0') ; yourself); yourself]
+!
+
+copyFile20x22Icon
+    "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 copyFile20x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copyFile20x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyFile20x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 20; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+EQTUEQTUEQTTGQ4]GQ4]GQ4]GQ4UGQ4]DPP''I!!TTGQ4]GQ4]GQ4]GQT]GQ4IB0H&EQ8TGQ4]GQ4]GQ4]EQ4]GP$QA"XTEAPTGQ4]GQ4]GQ4UGQ4]C1DEI!!<\
+HQP]GQ4]GQ4]GQT]GQ4SBQ$[IQXWEA4]GQ4]GQ4]EQ4]GQ4IH"XUEQTUEQTUEQP]GQ4UGQ4SDPP(D!!T]GQ4QAB\&EQP]GQT]D0<XF1<JEQ4]GP$K@"XUG!!P]
+EQ4]DQ([C!!@UGQ4]BQDFI!!PTEAPUGP<LAPX&C!!T]GQ4ODPT&G10!!EAT]@BHEA"XNEQ4]GQLIFQ,%E!!\TEQ4DH TZF08UGQ4]GP$"I LHEQPUGRHYF XBC!!T]
+GQLQAB RI@4GEATIH"HEA"XNEQ4SC1 [G0(RH2PTEAPTEAPTEAPUGQ4QF!!,ND@(AD!!P]GQ4]GQ4]GQT]C00EA"XNG2@REA4]GQ4]GQ4]EQ4@H TFI 8(B DT
+GQ4]GQ4]GQ4UGPP"AQ([C" J@QP]GQ4]GQ4]GQT]H!!$ZA HNG0(AEA4]GQ4]GQ4]EP$"H TFI 8(B DTGQ4]GQ4]GQ4TEAPTEAPTEAPTEAPb') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240]; mask:((Depth1Image new) width: 20; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?8@@?<@@?>@@??@@??@@??@@??>@???@??? ???0???0???0???0???0???0???0@O?0@O?0@O?0@O?0@O?0@O?0') ; yourself); yourself]
+!
+
+copyItem20x22Icon
+    "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 copyItem20x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copyItem20x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyItem20x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]7]7]7]7\@@@@GUUUUUUT7@@@@A5QDQDQDY0@@@@]TQDQDQF\@@@@GUDQD]7]7]7]7]5QDQGDQDQDQD7
+]TQDQ1L3L3L3I7M&Y&\SL3L3L2]7]7]7D3L3L3L'']7]7]1L3L3L3I7]7]7\SL3L3L2]7]7]7L"H"H"H''@@@@A7]7]7]7]0@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 0 184 184 16 228 224 0 128 120 64 64 64]; mask:((Depth1Image new) width: 20; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@?? @?? @?? @?? @???0???0???0???0???0@_?0@_?0@_?0@_?0@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+copyWidget20x22Icon
+    "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 copyWidget20x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copyWidget20x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyWidget20x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@L3L3L3L @@@@@CH"H"H"D@@@@@@2H"H"H!!@@@@@@L"H"H"HP@@@@@CH"H"H"D@@@@@@2H"H"H!!@@@@@@L"H"@@@@@@@@@CH"H L3L3L3L
+@2H"HCH"H"H"D@L"H"@2H"H"H!!@CH"H L"H"H"HP@2H"HCH"H"H"D@HQDQ@2H"H"H!!@@@@@@L"H"H"HP@@@@@CH"H"H"D@@@@@@2H"H"H!!@@@@@@L"H"H"HP
+@@@@@CH"H"H"D@@@@@@2H"H"H!!@@@@@@HQDQDQDP@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 127 127 127 170 170 170 255 255 255]; mask:((Depth1Image new) width: 20; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?? @?? @?? @?? @?? @?? @?? @???0???0???0???0???0???0???0???0@_?0@_?0@_?0@_?0@_?0@_?0@_?0') ; yourself); yourself]
+!
+
+copyWidget20x22Icon2
+    "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 copyWidget20x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#copyWidget20x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyWidget20x22Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 20; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+]7]7]7]7\@@@@GUUUUUUT7@@@@A5QDQDQDY0@@@@]TQDQDQF\@@@@GUDQDQDQ''@@@@A5QDQDQDY0@@@@]TQDQDQF\@@@@GUDQD]7]7]7]7]5QDQGDQDQDQD7
+]TQDQ1L3L3L3I7UDQD\SL3L3L2]5QDQGD3L3L3L'']TQDQ1L3L3L3I7M&Y&\SL3L3L2]7]7]7D3L3L3L''@@@@A1L3L3L3I0@@@@\SL3L3L2\@@@@GD3L3L3L''
+@@@@A1L3L3L3I0@@@@\SL3L3L2\@@@@GL"H"H"H''@@@@A7]7]7]7]0@a') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 0 184 184 16 228 224 0 128 120 64 64 64]; mask:((Depth1Image new) width: 20; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?? @?? @?? @?? @?? @?? @?? @???0???0???0???0???0???0???0???0@_?0@_?0@_?0@_?0@_?0@_?0@_?0') ; yourself); yourself]
+!
+
+fileContents20x22Icon
+    "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 fileContents20x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileContents20x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class fileContents20x22Icon'
+        ifAbsentPut:[(Depth8Image new) width: 20; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+IQTFA XFA XND@ _G2T%IRT%IP@%A"T%IRT%F1\IK0XXG2T%IRT%@BTFIRT%IRT[F1,[A" LG2T%IRT@IPX%ISL3L2T3L3LF@3HQG2T%IP@%A"T%IRT%IRT%
+IPX)IRHLG2T%@BTFIRT3L3L%L3L3A@PDA@PDABT@IPX%IRT%IRT%IRTRKR4&J0<YIP@%A"T%L3L%ISL2L0$3L3L@J!!$%@BTFIRT%IRT%GQPWCA -I T\FRT@
+IPX%ISL%L1,%L3L FCL3K (YIP@%A"T%IRT%F2T0LP0XA0HXDQ$%@BTFIRT%L3LWL3L0CCL3E!!XXFRT@IPX%F1,[@20C@2<0F@0 A1XYIP@%A"T"L0$3@SLI
+IB<3L3L HA$%@BTFIRD!!HQ\WH0$$K3@SCB GFRT@IPX%HSL3HPD3HSL/K3L''CB@YIP@%A"T!!HRD!!@RDIBR</LB\LHA$%@BTFIRD3L3LAL3LIK3L0L00 FRT@
+IPX%HRD!!HQ\!!BP$/LC@0CB@YIP@%A"TWL1\3KCL3L2<0L00(A1$%@BTFISH2L 4MH!!\,BPLRLCDLFRT@IP,YFQ$YFQ$YFQ$YFQ$YFQ$YIP@b') ; colorMapFromArray:#[204 208 220 245 246 250 224 227 236 240 242 248 140 145 163 212 215 227 207 211 222 227 230 238 193 197 211 241 243 248 214 218 228 210 214 224 231 233 241 249 250 252 201 206 218 200 204 217 196 200 213 220 223 233 238 240 247 234 236 243 250 251 252 205 209 221 225 228 237 245 247 250 223 226 235 116 120 133 240 241 248 253 254 254 211 214 226 252 252 253 207 210 222 178 183 200 229 231 240 247 248 251 246 248 250 242 244 249 241 242 248 255 255 255 213 217 227 232 234 242 230 232 240 248 249 251 202 207 219 201 205 218 243 245 249 219 222 232 217 220 230 237 239 246 235 237 244 234 237 243 251 252 253 0 0 0]; mask:((Depth1Image new) width: 20; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_? @_?0@_?8@_?<@_?>@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@_??@') ; yourself); yourself]
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-22x22'!
+
+addBuffer22x22Icon
+    "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 addBuffer22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#addBuffer22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class addBuffer22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@FX@@@@@@@@:NC(:OC0<O#8JJB (JFY''Y" (JB :MST5M#X8NC(:J@A&Y A&ZFYGY&X(NCT5M#X7NC$:N2!!&ZV)&Z&-*Y&))Y#!!G
+T%IRT%IRMVT(@FY,[V9/[&5,Y$T(JB (JB (JB (J@AKY&)/@F=*Y$!!IJ@@@@@@@@@@@@@@@@FY*[0A/Z&YJRR @@@@@@@@@@@@@@FY,[V9/[&5,Y$0(@@@@
+@@@@@@@@@FY)Z&Y*Z6)&Z&%&J@@@@@@@@@@@@@@@Y&X@Y&!!&R6Y&SB @@@@@@@@@@@@@@@@@Q6Y''Y$)JS$0(@@@@@@@@@@@@@@@@Q4]KY$)JR$9LJ@@@@@@@
+@@@@@@@@Q4]KR4)JR$)NSB @@@@@@@@@@@@@Q4]KR4)JR$)JTED(@@@@@@@@@@@@Q4]KR4)JR$)JT%AQJ@@@@@@@@@@@Q4]KR4)JR$)JT$9STR @@@@@@@@@
+Q4]KR4)JR$)JT$9NT5D(@@@@@@@@Q4]GR4)JR$)JT$9NS%MQJ@@@Q4-KR4)JR%]NS$9NTEAST5MXTU%ZV5-\WU9_W6A!!X$1LTUEQTUEQTVL@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 248 248 63 144 224 64 152 232 79 160 232 64 152 224 64 144 224 63 136 224 48 128 216 48 120 216 47 112 216 47 112 208 32 104 208 32 96 208 31 88 200 16 88 200 16 80 200 15 72 192 15 64 192 0 64 192 0 56 184 0 56 176 0 48 160 143 200 248 128 200 248 127 192 248 112 184 248 111 176 248 96 168 248 95 160 248 80 152 248 79 144 248 64 128 248 63 120 248 48 112 248 32 104 248 31 96 248 16 88 248 15 80 248 0 72 248 0 64 240 0 48 168 112 176 248 111 168 248 96 160 248 95 152 248 80 144 248 79 136 248 63 128 248 48 120 248 47 112 248 15 72 248 0 48 176 95 168 232 191 224 248 191 216 248 176 208 248 175 208 248 175 200 248 160 200 248 160 192 248 159 192 248 159 184 248 144 184 248 144 176 248 143 168 248 128 168 248 128 160 248 127 160 248 127 152 240 31 72 176 111 168 232 240 240 248 240 232 240 63 88 176 239 232 240 240 240 240 48 88 176 96 168 224 224 224 232 96 160 224 223 216 232 48 80 176 224 224 240 223 216 224 96 152 224 96 152 216 95 152 216 239 232 232 208 208 224 48 120 208 80 144 208 80 136 208 79 128 200 79 120 200 79 120 192 64 112 192 64 104 184 63 104 184 63 96 184 15 56 160 0 0 0 207 216 240 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@BC_???????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+addBuffer22x22Icon2
+    "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 addBuffer22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#addBuffer22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class addBuffer22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@:NC(:OC0<O#8JWE1\WE1\WE1\WB :MST5M#X8NC(:WI6]''YY7^IB!!!!W4(NCT5M#X7NC$:N52]'']N-^IB!!!!Y*TJC!!G
+T%IRT%IRMVU\''[_ 5^"P(XVZ%DU\WE1\WE1\WE1\WI7A2Z+G^IB!!!!W6IW@@@@@@@@@@@@I6]6*/W19B!!!!Y*T%U0@@@@@@@@@@@B]''^&(.[56(XU3)H)\@@@@
+@@@@@NJ.2L#Z6LR=2;GL$7>%W@@@@@@@@KC^6<[E/>^9*+Z>/NVA"50@@@@@@@B4.MK@2\&99L;\.-?P%8A\@@@@@@@@@M6=/[7!!*+N13L+T''GB^W@@@@@@@
+@@@@@JBD3[.>0*M>''GY1#U0@@@@@@@@@@@A2''^N>+=E6(XVN!!(I\@@@@@@@@@@@@&WKC-]?O''GZN)(^BW@@@@@@@@@@@Q7I;9-Z,6WZN)(M< %0@@@@@@@@@
+Q4]2''Y6),''!!6(XVX&8I\@@@@@@@@Q4]G(*NH''GZN)(NX^''RBW@@@Q4-KR4)JR(2_$W&R!!(]<&7Q5 %%ZV5-\WU9_W6A!!X$1LTUEQTUEQTVL@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 248 248 63 144 224 64 152 232 79 160 232 64 152 224 64 144 224 63 136 224 48 128 216 48 120 216 47 112 216 47 112 208 32 104 208 32 96 208 31 88 200 16 88 200 16 80 200 15 72 192 15 64 192 0 64 192 0 56 184 0 56 176 0 48 160 143 200 248 128 200 248 127 192 248 112 184 248 111 176 248 96 168 248 95 160 248 80 152 248 79 144 248 64 128 248 63 120 248 48 112 248 32 104 248 31 96 248 16 88 248 15 80 248 0 72 248 0 64 240 0 48 168 112 176 248 111 168 248 96 160 248 95 152 248 80 144 248 79 136 248 63 128 248 48 120 248 47 112 248 15 72 248 0 48 176 95 168 232 191 224 248 191 216 248 176 208 248 175 208 248 175 200 248 160 200 248 160 192 248 159 192 248 159 184 248 144 184 248 144 176 248 143 168 248 128 168 248 128 160 248 127 160 248 127 152 240 31 72 176 111 168 232 240 240 248 240 232 240 63 88 176 239 232 240 240 240 240 48 88 176 96 168 224 224 224 232 96 160 224 223 216 232 48 80 176 224 224 240 223 216 224 96 152 224 96 152 216 95 152 216 239 232 232 208 208 224 48 120 208 80 144 208 80 136 208 79 128 200 79 120 200 79 120 192 64 112 192 64 104 184 63 104 184 63 96 184 15 56 160 0 0 0 207 216 240 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200 227 227 236 225 225 234 244 244 249 242 242 247 218 217 230 212 211 224 234 234 242 253 253 254 251 251 252 227 226 235 226 226 237 243 243 247 220 220 231 240 239 244 237 237 244 233 233 240 52 89 178 231 231 238 50 87 176 229 229 239 248 248 251 246 246 249 223 223 233 222 221 232 238 238 244 56 94 181 55 92 180 53 90 178 233 232 239 51 88 176 232 232 241 251 251 253 249 249 251 228 228 237 225 224 234 241 241 246 238 237 243 56 93 180 254 254 255 229 229 237 227 227 238 246 246 250 244 244 248 219 219 230 236 236 243 255 255 255 51 88 177 231 230 238 249 249 252 247 247 250 241 241 247 239 239 245 236 235 242 54 91 179 231 231 240 176 175 128 176 240 159 143 159 128 127 208 96 175 239 144 15 79 0 160 176 95 0 160 0 64 176 48 112 159 95 0 96 0 144 159 143 96 207 80 127 159 111 63 175 48 96 207 79 80 176 64 31 159 31 143 224 112 64 176 63 95 207 79 63 160 47 0 127 0 80 191 64 176 240 144 143 239 112 15 160 15 16 95 16 0 80 0 143 224 111 191 240 159 175 240 144 15 127 15 0 175 0 144 239 127 0 79 0 0 112 0 0 95 0 15 112 15 111 207 80 16 79 16 15 79 15 16 80 16 128 223 111 159 159 63 15 64 15 31 144 16 16 80 15 128 224 111 176 239 159 95 112 80 15 175 15 144 224 127 95 192 79 31 95 15 32 160 31 48 159 47 32 159 31 15 128 15 95 160 47 0 111 0 127 223 96 15 80 0 64 112 63 159 239 127 95 159 79 16 175 16]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C_???????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+addBuffer22x22Icon3
+    "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 addBuffer22x22Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#addBuffer22x22Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class addBuffer22x22Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@B78MW(@@@@@@@:NC(:OC0<O#8JWE1\0\&*151\WB :MST5M#X8NC(:WI6]'']*+5<^!!!!W4(NCT5M#X7NC$:N52]''Y7)*K&=!!Y*TJC!!G
+T%IRT%IRMVW"+,#H6-#D/\.13L1\WE1\WE1\WE1\7-/F1[?''.Z*6/+3%W@@@@@@@@@@@@K#R0L''I.^SN7K+_4E0@@@@@@@@@@@C]/[6=8Z*3,\3J5MQ\@@@@
+@@@@@@@@@@@@@L6;/,J&''W>%W@@@@@@@@I6]''Y6]''Y7#/*?Q''ZZA"50@@@@@@@B]''Y6]''Y6]0;W_396&%8A\@@@@@@@@''Y6]''Y6]''^[V+M&&)''B^W@@@@@@@
+@@@@@JBD!!HRD!!JM>''GY1#U0@@@@@@@@@@@A2''WY6]''Y6(XVN!!(I\@@@@@@@@@@@@&ZY2\''I2)''ZN)(^BW@@@@@@@@@@@Q7J&^:Z&)*ZN)(M< %0@@@@@@@@@
+Q4]2\''I2)''I6)(VX&8I\@@@@@@@@Q4]G(*NH''GY6)(NX^''RBW@@@Q4-KR4)JR(2_$W&R!!(]<&7Q5 %%ZV5-\WU9_W6A!!X$1LTUEQTUEQTVL@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 248 248 63 144 224 64 152 232 79 160 232 64 152 224 64 144 224 63 136 224 48 128 216 48 120 216 47 112 216 47 112 208 32 104 208 32 96 208 31 88 200 16 88 200 16 80 200 15 72 192 15 64 192 0 64 192 0 56 184 0 56 176 0 48 160 143 200 248 128 200 248 127 192 248 112 184 248 111 176 248 96 168 248 95 160 248 80 152 248 79 144 248 64 128 248 63 120 248 48 112 248 32 104 248 31 96 248 16 88 248 15 80 248 0 72 248 0 64 240 0 48 168 112 176 248 111 168 248 96 160 248 95 152 248 80 144 248 79 136 248 63 128 248 48 120 248 47 112 248 15 72 248 0 48 176 95 168 232 191 224 248 191 216 248 176 208 248 175 208 248 175 200 248 160 200 248 160 192 248 159 192 248 159 184 248 144 184 248 144 176 248 143 168 248 128 168 248 128 160 248 127 160 248 127 152 240 31 72 176 111 168 232 240 240 248 240 232 240 63 88 176 239 232 240 240 240 240 48 88 176 96 168 224 224 224 232 96 160 224 223 216 232 48 80 176 224 224 240 223 216 224 96 152 224 96 152 216 95 152 216 239 232 232 208 208 224 48 120 208 80 144 208 80 136 208 79 128 200 79 120 200 79 120 192 64 112 192 64 104 184 63 104 184 63 96 184 15 56 160 0 0 0 207 216 240 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200 227 227 236 225 225 234 244 244 249 242 242 247 218 217 230 212 211 224 234 234 242 253 253 254 251 251 252 227 226 235 226 226 237 243 243 247 220 220 231 240 239 244 237 237 244 233 233 240 52 89 178 231 231 238 50 87 176 229 229 239 248 248 251 246 246 249 223 223 233 222 221 232 238 238 244 56 94 181 55 92 180 53 90 178 233 232 239 51 88 176 232 232 241 251 251 253 249 249 251 228 228 237 225 224 234 241 241 246 238 237 243 56 93 180 254 254 255 229 229 237 227 227 238 246 246 250 244 244 248 219 219 230 236 236 243 255 255 255 51 88 177 231 230 238 249 249 252 247 247 250 241 241 247 239 239 245 236 235 242 54 91 179 231 231 240 176 175 128 176 240 159 143 159 128 127 208 96 175 239 144 15 79 0 160 176 95 0 160 0 64 176 48 112 159 95 0 96 0 144 159 143 96 207 80 127 159 111 63 175 48 96 207 79 80 176 64 31 159 31 143 224 112 64 176 63 95 207 79 63 160 47 0 127 0 80 191 64 176 240 144 143 239 112 15 160 15 16 95 16 0 80 0 143 224 111 191 240 159 175 240 144 15 127 15 0 175 0 144 239 127 0 79 0 0 112 0 0 95 0 15 112 15 111 207 80 16 79 16 15 79 15 16 80 16 128 223 111 159 159 63 15 64 15 31 144 16 16 80 15 128 224 111 176 239 159 95 112 80 15 175 15 144 224 127 95 192 79 31 95 15 32 160 31 48 159 47 32 159 31 15 128 15 95 160 47 0 111 0 127 223 96 15 80 0 64 112 63 159 239 127 95 159 79 16 175 16]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@OC_???????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+bufferedView22x22Icon
+    "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 bufferedView22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#bufferedView22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class bufferedView22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@:NC(:OC0<O#8JJB (JB (JB (JB :MST5M#X8NC(:JI6]''YY7^IB!!!!W4(NCT5M#X7NC$:N2"]''YY7^IB!!!!Y*TJC!!G
+T%IRT%IRMVT(''Y6V]7"P(XVZ%DT(JB (JB (JB (JI6]''YY7^IB!!!!W6IJ@@@@@@@@@@@@I6]''YY7^IB!!!!Y*T%R @@@@@@@@@@@B]''Y6S]7!!6(XU3)H((@@@@
+@@@@@@@@''YY7#9B!!!!Y)3$7>%J@@@@@@@@@@@@IZ]#9BD!!Y);$:NA"2 @@@@@@@@@@@A2''Y6S^G!!6(XU>%8@(@@@@@@@@@@@@#:BD!!Y);$:M>''GB^J@@@@@@@
+@@@@@JBD&Y);$:M>''GY1#R @@@@@@@@@@@A2''Y6S]7!!6(XVN!!(H(@@@@@@@@@@@@&WJ]$:NH''GZN)(^BJ@@@@@@@@@@@Q7I;$:NH''GZN)(M< " @@@@@@@@@
+Q4]2''Y6]^G!!6(XVX&8H(@@@@@@@@Q4]G(*NH''GZN)(NX^''RBJ@@@Q4-KR4)JR(2_$W&R!!(]<&7Q5 %%ZV5-\WU9_W6A!!X$1LTUEQTUEQTVL@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 248 248 63 144 224 64 152 232 79 160 232 64 152 224 64 144 224 63 136 224 48 128 216 48 120 216 47 112 216 47 112 208 32 104 208 32 96 208 31 88 200 16 88 200 16 80 200 15 72 192 15 64 192 0 64 192 0 56 184 0 56 176 0 48 160 143 200 248 128 200 248 127 192 248 112 184 248 111 176 248 96 168 248 95 160 248 80 152 248 79 144 248 64 128 248 63 120 248 48 112 248 32 104 248 31 96 248 16 88 248 15 80 248 0 72 248 0 64 240 0 48 168 112 176 248 111 168 248 96 160 248 95 152 248 80 144 248 79 136 248 63 128 248 48 120 248 47 112 248 15 72 248 0 48 176 95 168 232 191 224 248 191 216 248 176 208 248 175 208 248 175 200 248 160 200 248 160 192 248 159 192 248 159 184 248 144 184 248 144 176 248 143 168 248 128 168 248 128 160 248 127 160 248 127 152 240 31 72 176 111 168 232 240 240 248 240 232 240 63 88 176 239 232 240 240 240 240 48 88 176 96 168 224 224 224 232 96 160 224 223 216 232 48 80 176 224 224 240 223 216 224 96 152 224 96 152 216 95 152 216 239 232 232 208 208 224 48 120 208 80 144 208 80 136 208 79 128 200 79 120 200 79 120 192 64 112 192 64 104 184 63 104 184 63 96 184 15 56 160 0 0 0 207 216 240 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200 227 227 236 225 225 234 244 244 249 242 242 247 218 217 230 212 211 224 234 234 242 253 253 254 251 251 252 227 226 235 226 226 237 243 243 247 220 220 231 240 239 244 237 237 244 233 233 240 52 89 178 231 231 238 50 87 176 229 229 239 248 248 251 246 246 249 223 223 233 222 221 232 238 238 244 56 94 181 55 92 180 53 90 178 233 232 239 51 88 176 232 232 241 251 251 253 249 249 251 228 228 237 225 224 234 241 241 246 238 237 243 56 93 180 254 254 255 229 229 237 227 227 238 246 246 250 244 244 248 219 219 230 236 236 243 255 255 255 51 88 177 231 230 238 249 249 252 247 247 250 241 241 247 239 239 245 236 235 242 54 91 179 231 231 240]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C_???????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+changesBrowser22x22Icon
+    "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 changesBrowser22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#changesBrowser22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class changesBrowser22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@(JB (JB (JB (JB\@@@@@
+@@@@@@@@JA4]GQDDA@PDAAT''@@@@@@@@@@@(JB (JB (JB (JB\^I0@@@@@@@@@@JA4]GQDDA@PDAAT''GB\@@@@@@@@(JB (JB (JB (JB\^I2D''@@@@@@@@
+JA4]GQDDA@PDAAT''GB\WI0@@@@@(JB (JB (JB (JB\^I2D''ER\@@@@@JA4]GQDDA@PDAA8''GB\WI2P''@@@@@B ]I2\''DR\K@ H^I2D''ER\''I0@@@@@(GQ4]
+BQDQDPX_GB\WI2P''EAP@@@@@JA4''GR\QI2X_GBD''ER\''I0@@@@@@@B ]GQ4SBQ$YIQXWI2P''EAP@@@@@@@@(GR\''I2H''@0LHER\''I0@@@@@@@@@@JA4SC1,[
+G0(RH2P''EAP@@@@@@@@@@B\''I2\''I2\''I2\''I0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 78 78 91 127 127 127]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@O?0@O?0@??0@??0C??0C??0O??0O??0O??0O??@O??@O?<@O?<@O?0@O?0@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+copy22x22Icon
+    "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 copy22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copy22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copy22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+GQTUEQTUEQTUEQTUEA4]GQ4]GQ4]GQ4UGQ4]DPPDABX&I!!P]GQ4]GQ4]GQ4]EQ4]GP$KABX&I!!<TGQ4]GQ4]GQ4]GQT]GQ4IDPP&I"X_EA4]GQ4]GQ4]GQ4U
+GQ4]C1DEI!!<_G1P]GQ4]GQ4]GQ4]EQ4]A@PDABX&I!!<TGQ4]GQ4]GQ4]GQT]GP,KA@P&EQTUEQTUEQTUEQTTGQ4UGQ4QDP,DD!!T]GQ4QA@PDI"X&EA4]EQ4S
+DQDQA@(UGQ4]BP,DI"X&G1P]GQT]GQDZF08PEQ4]GP$QABX&I!!<TGQ4UGP<LAPX&C!!T]GQ4ODPT&G1<_EA4]EQ4@H TFI 8UGQ4DA@PDI"X&G1P]GQT]ABHE
+F!!,NEQ4]B0,DA@P&I"XTGQ4UGRHYF XBC!!T]GQDQB0P&I"X&EA4]EP$"H TFI 8UGQLQDQDDI"X&I!!P]GQPTEAPTEAPTEQ4]DQ(QARX_I"XTGQ4]GQ4]GQ4]
+GQT]C00EA"XNG2@REA4]GQ4]GQ4]GQ4UGP@"APX&C" J@QP]GQ4]GQ4]GQ4]EQ4DH TZF08(B DTGQ4]GQ4]GQ4]GQT]H!!$ZA HNG0(AEA4]GQ4]GQ4]GQ4U
+BRH"APX&C" J@QP]GQ4]GQ4]GQ4]EAPTEAPTEAPTEAPTGP@a') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_? @_? @_? @_? @_? @_? @_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8@G?8@G?8@G?8@G?8@G?8@G?8') ; yourself); yourself]
+!
+
+copyFile22x22Icon
+    "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 copyFile22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copyFile22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyFile22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+GQTUEQTUEQTUEA4]GQ4]GQ4]GQ4]GQ4UGQ4]DPP''I!!TTGQ4]GQ4]GQ4]GQ4]EQ4]GP$K@"XUG!!P]GQ4]GQ4]GQ4]GQT]GQ4IDPX&EAPTEA4]GQ4]GQ4]GQ4U
+GQ4]C1DEI!!<\HQP]GQ4]GQ4]GQ4]EQ4]GQLIFQ,%E!!\TGQ4]GQ4]GQ4]GQT]GQ4]BRH&EQTUEQTUEQTTGQ4]GQ4UGQ4SDPP(D!!T]GQ4QAB\&EQP]GQ4]EQ4S
+C1 [G0(UGQ4]BP,BI!!T^EA4]GQT]GQDZF08PEQ4]GP$QA"XTEAPTGQ4UGP<LAPX&C!!T]GQ4ODPT&G10!!EA4]EQ4@H TFI 8UGQ4]D0$YF2TVE1P]GQT]ABHE
+F!!,NEQ4]GQ4IH"XCBATTGQ4UGRHYF XBC!!T]GQLQAB RI@4GEA4]EP$"H TFI 8UGQLOFA,_B!!H#IAP]GQPTEAPTEAPTEQ4]DQ([C!!@J@QHTGQ4]GQ4]GQ4]
+GQT]C00EA"XNG2@REA4]GQ4]GQ4]GQ4UGP@"APX&C" J@QP]GQ4]GQ4]GQ4]EQ4DH TZF08(B DTGQ4]GQ4]GQ4]GQT]H!!$ZA HNG0(AEA4]GQ4]GQ4]GQ4U
+BRH"APX&C" J@QP]GQ4]GQ4]GQ4]EAPTEAPTEAPTEAPTGP@a') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_<@@_>@@_?@@_? @_? @_? @_??@_?? _??0_??8_??8_??8_??8_??8_??8_??8@G?8@G?8@G?8@G?8@G?8@G?8') ; yourself); yourself]
+!
+
+copyItem22x22Icon
+    "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 copyItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copyItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyItem22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A7]7]7]7]0@@@@@GUUUUUUT7@@@@@@]TQDQDQF\@@@@@A5QDQDQDY0@@@@@GUDQD]7]7]7]7\@]T
+QDQ1DQDQDQM0A5QDQGD3L3L3L''@GM&Y&\SL3L3L2\@]7]7]1L3L3L3I0A7]7]7D3L3L3L''@G]7]7\SL3L3L2\@]7]7]3H"H"H"I0@@@@@G]7]7]7]7@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 0 184 184 16 228 224 0 128 120 64 64 64]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@_?0@_?0@_?0@_?0@_??8_??8_??8_??8_??8@O?8@O?8@O?8@O?8@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+copyWidget22x22Icon
+    "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 copyWidget22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#copyWidget22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyWidget22x22Icon'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@DQDQDQD0@@@@@@@SL3L3L2@@@@@@@AL3L3L3H@@@@@@@D3L3L3L @@@@@@@SL3L3L2@@@@@@@AL3L3L3H@@@@@@@D3L3@@@@@@@@@@@S
+L3LADQDQDQL@@AL3L0D3L3L3L @@D3L3@SL3L3L2@@@SL3LAL3L3L3H@@AL3L0D3L3L3L @@L"H"@SL3L3L2@@@@@@@AL3L3L3H@@@@@@@D3L3L3L @@@@@@
+@SL3L3L2@@@@@@@AL3L3L3H@@@@@@@D3L3L3L @@@@@@@SL3L3L2@@@@@@@CH"H"H"H@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?0@_?0@_?0@_?0@_?0@_?0@_?0@_??8_??8_??8_??8_??8_??8_??8_??8@O?8@O?8@O?8@O?8@O?8@O?8@O?8') ; yourself); yourself]
+!
+
+copyWidget22x22Icon2
+    "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 copyWidget22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#copyWidget22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class copyWidget22x22Icon2'
+	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A7]7]7]7]0@@@@@GUUUUUUT7@@@@@@]TQDQDQF\@@@@@A5QDQDQDY0@@@@@GUDQDQDQ''@@@@@@]TQDQDQF\@@@@@A5QDQDQDY0@@@@@GUDQD]7]7]7]7\@]T
+QDQ1DQDQDQM0A5QDQGD3L3L3L''@GUDQD\SL3L3L2\@]TQDQ1L3L3L3I0A5QDQGD3L3L3L''@GM&Y&\SL3L3L2\@]7]7]1L3L3L3I0@@@@@GD3L3L3L''@@@@@@
+\SL3L3L2\@@@@@A1L3L3L3I0@@@@@GD3L3L3L''@@@@@@\SL3L3L2\@@@@@A3H"H"H"I0@@@@@G]7]7]7]7@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 0 184 184 16 228 224 0 128 120 64 64 64]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?0@_?0@_?0@_?0@_?0@_?0@_?0@_??8_??8_??8_??8_??8_??8_??8_??8@O?8@O?8@O?8@O?8@O?8@O?8@O?8') ; yourself); yourself]
+!
+
+cut22x22Icon
+    "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 cut22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#cut22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cut22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+!!XT@@@@@@@@@@@@BT)D@@@@@@@BE!!XVE@@@@@@@@@@@@*F4X@@@@@@@@!!XVE!!P@@@@@@@@@@@EJEQ@@@@@AGA8VE!!XT@@@@@@@@@@@AQ!!UX@@@BASPH$!!XVE
+@@@@@@@@@@@@F9VA@@A6_HTBIHVE!!P@@@@@@@@@@@B, S @QW(U!!I@^E!!XT@@@@@@@@@@@@\"U5%_Q4-+6^E!!XVE@@@@@@@@@@@@+Y-/,26B)$H@!!XVE!!P@@
+@@@@@@@@@GVAIC8X%9\@@HVE!!XT@@@@AO8Q4@@@OJEH*#WH@@@BE!!XVE@GQCEQ$H#:P7B5E,\9<@@@@@!!XVE!!WP8$9@<*6ROE@)?)9<@@@@@@HVE!!XVNR[J0
+@E]7BGDCNV,PDE@@@@BE!!XVEUFXV@@AY#G%J$$<FMPY;!!@@@!!XVE!!Y!!#* @@,E.@AZ8"H$@%N19;@HVE!!XTL(T0M+H\RP:T1"ENJ%$"KX@BE!!XVE]G"!!OV*1
+HSL@V&:\@@A)BQ<@!!XVE!!PA4W@QAK0@@@I)>Q @@Q"1X@HVE!!XT@@@@@@@@@@@@''JV @@CZ)F BE!!XVE@@@@@@@@@@@@&Y6^%DV#\C(@!!XVE!!P@@@@@@@@@@
+@GPS(*B LA\@@HVE!!XT@@@@@@@@@@@@@]HL#R3P@@@BE!!P@a') ; colorMapFromArray:#[0 0 0 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 207 207 219 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 129 71 26 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 126 69 26 154 92 27 242 140 1 227 168 29 143 83 26 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 134 77 26 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 159 96 27 187 117 28 241 241 246 149 87 27 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 254 254 255 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 139 77 23 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 255 255 255 136 77 26 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A0@@A0@@A00@A18@A38@A78@A?0@A? @A?@A9>@G?<@O?8@O_>@N_?@N_? O?? O=3 G13 @A3 @A? @A?@@@>@') ; yourself); yourself]
+!
+
+cutFile22x22Icon
+    "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 cutFile22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#cutFile22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cutFile22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+GQTUEQTUEQTUEA4]J7^/GQ4]GQ4]GQ4UGQ4]DPP''I!!TTG\XSPA4]GQ4]GQ4]EQ4]GP$K@"XUG!!Q7GV$]GQ4][C@]GQT]GQ4IDPX&EAPT]!!5:GQ4](WH+SA4U
+GQ4]C1DEI!!<\HTN3(Q4]%90]J40]EQ4]GQLIFQ,%E!!]RRGL]NXH]!!D00GQT]GQ4]BRH&@0 UQJ^A!!95EUL6I@A4UGQ4SDPP(D"PMA<.9$MET(,Q''@@@]EQ4S
+C1 [G0(RH2RV(T1#PKV5@@@@GQT]GQDZJ&R$%PDRM4=7TZ.S@@@@@A4UGP>UZC5ALZ7BWCQ6#)R=@@@@@@@]EQ6UW[F.X\&F+S03''<V=@@@@@@@@GQT]+F;P
+3!!-;&CFRKE:MNC!!5@@@@@A4UGW&HO XB_Z*Z[;A4K5(/&:P@@@@]EP&6!!\ FI,9?(B;LR$)%SVAF&0@@GQPTM[=1M,*%N&#CU:Y8*KQ-*XL@@A4]GYVY/6JL
+34%X@G:O. @@"3IG@@@]GQ4]%X@-Y%T@@@B8''&,@@F-S_@@@GQ4]GQ4]@@@@@@@@S%BJ@@A[14H@@A4]GQ4]GP@@@@@@@K^;/KI*0YE_@@@]GQ4]GQ4@@@@@
+@@BUN<B>/%X?@@@@GQ4]GQ4]@@@@@@@@@IV#R7AY@@@@@@@a') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240 0 0 0 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 154 92 27 242 140 1 227 168 29 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 187 117 28 241 241 246 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_<8@_>8@_?8X_?8<_?9<_?;<_??8_??0_?? _??@_?>@_?<@_??@_?? _??0_??0G>90C890@@90@@?0@@? @@_@') ; yourself); yourself]
+!
+
+cutIcon
+    "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 cutIcon inspect
+     ImageEditor openOnClass:self andSelector:#cutIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cutIcon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+!!XT@@@@@@@@@@@@BT)D@@@@@@@BE!!XT@@@@@@@@@@@@@*F4X@@@@@@@@!!XVE@@@@@@@@@@@@@EJEQ@@@@@AGA8VE!!P@@@@@@@@@@@@AQ!!UX@@@BASPH$!!XT@
+@@@@@@@@@@@@F9VA@@A6_HTBIHVE@@@@@@@@@@@@@B, S @QW(U!!I@BE!!P@@@@@@@@@@@@@\"U5%_Q4-+0BE!!XT@@@@@@@@@@@@@+Y-/,26B) @@!!XVE@@@@
+@@@@@@@@@GVAIC8X%0@@@HVE!!P@@@@@AO8Q4@@@OJEH*#P@@@@BE!!P@@@GQCEQ$H#:P7B5E,\0@@@@@@!!XVE@GP8$9@<*6ROE@)?)9<@@@@@@HVE!!PBNR[J0
+@E]7BGDCNV,PDE@@@@BE!!XT@UFXV@@AY#G%J$$<FMPY;!!@@@!!XVE@I!!#* @@,E.@AZ8"H$@%N19;@HVE!!P@L(T0M+H\RP:T1"ENJ%$"KX@BE!!XT@]G"!!OV*1
+HSL@V&:\@@A)BQ<@!!XVE!!PA4W@QAK0@@@I)>Q @@Q"1X@HVE!!XT@@@@@@@@@@@@''JV @@CZ)F BE!!XVE@@@@@@@@@@@@&Y6^%DV#\C(@!!XVE!!P@@@@@@@@@@
+@GPS(*B LA\@@HVE!!XT@@@@@@@@@@@@@]HL#R3P@@@BE!!P@a') ; colorMapFromArray:#[0 0 0 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 207 207 219 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 129 71 26 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 126 69 26 154 92 27 242 140 1 227 168 29 143 83 26 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 134 77 26 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 159 96 27 187 117 28 241 241 246 149 87 27 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 254 254 255 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 139 77 23 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 255 255 255 136 77 26 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A0@@A0@@A00@A18@A38@A70@A? @A?@@A>@A9<@G?8@O?8@O_>@N_?@N_? O?? O=3 G13 @A3 @A? @A?@@@>@') ; yourself); yourself]
+!
+
+cutItem22x22Icon
+    "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 cutItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#cutItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cutItem22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+!!P@@@@@@@@@@@@@BT)D@@@@@@@BE!!XT@@@@@@@@@@@@@*F4X@@@@@@@@!!XVE@@@@@@@@@@@@@EJEQKT@@@AGA8VE!!P@@@@@@@@@@@@AQ!!UZ4@@BASPH$!!XT@
+@@@@@@@@@@@@F9VA-@A6_HTBIHVE@K^7-;^7-;^7-2, S+REW(U!!I@^E!!PB7-+Z6-+Z6-+X\"U5%_Q4-+6\@!!XT@-;Z6-+Z6-+Z6+Y-/,26B)$J8@HVE@K^6
+-+Z6-+Z6-''VAIC8X%9^6.@BE!!PB7-+XAO8Q4-+XOJEH*#WJ6-+ @!!XT@.GQCEQ$H#:P7B5E,\9>8.K"8@HVE@GP8$9@<*6ROE@)?)9<@@@@@@@BE!!PBNR[J0
+@E]7BGDCNV,PDE@@@@BE!!XT@UFXV@@AY#G%J$$<FMPY;!!@@@!!XVE@I!!#* @@,E.@AZ8"H$@%N19;@HVE!!P@L(T0M+H\RP:T1"ENJ%$"KX@BE!!XT@]G"!!OV*1
+HSL@V&:\@@A)BQ<@!!XVE!!PA4W@QAK0@@@I)>Q @@Q"1X@HVE!!XT@@@@@@@@@@@@''JV @@CZ)F BE!!XVE@@@@@@@@@@@@&Y6^%DV#\C(@!!XVE!!P@@@@@@@@@@
+@GPS(*B LA\@@HVE!!XT@@@@@@@@@@@@@]HL#R3P@@@BE!!P@a') ; colorMapFromArray:#[64 64 64 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 207 207 219 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 129 71 26 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 126 69 26 154 92 27 242 140 1 227 168 29 143 83 26 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 134 77 26 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 159 96 27 187 117 28 241 241 246 149 87 27 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 254 254 255 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 139 77 23 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 255 255 255 136 77 26 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191 127 127 127 170 170 170 0 184 184 16 228 224 0 128 120]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A0@@A0@@A80@A98_??8_??8_??8_??8_??8_??8_??8_??8O_>@N_?@N_? O?? O=3 G13 @A3 @A? @A?@@@>@') ; yourself); yourself]
+!
+
+cutWidget22x22Icon
+    "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 cutWidget22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#cutWidget22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cutWidget22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+!!XT@@@@@@@@@@@@BT)D@@@@@@@BE!!XT@@@@@@@@@@@@@*F4X@@@@@@@@!!XVE@HVE!!XVE!!XVE!!UJEQKT@@@AGA8VE!!PBE-[V5-[V5-[UQ!!UZ4@@BASPH$!!XT@
+!![V5-[V5-[V5F9VA-@A6_HTBIHVE@HV5-[V5-[V5-R, S+PQW(U!!I@^E!!PBE-[V5-[V5-[T\"U5%_Q4-+6^E!!XT@!![V5-[V5-[V5+Y-/,26B)$H@!!XVE@HV5
+-[V5-[V5-WVAIC8X%9\@@HVE!!PBE-[TAO8Q4-[TOJEH*#WH@@@BE!!XT@!!WQCEQ$H#:P7B5E,\9<@@@@@!!XVE@GP8$9@<*6ROE@)?)9<@@@@@@HVE!!PBNR[J0
+-U]7BGDCNV,PDE@@@@BE!!XT@UFXV-[UY#G%J$$<FMPY;!!@@@!!XVE@I!!#*+V5,E.@AZ8"H$@%N19;@HVE!!P@L(T0M+H\RP:T1"ENJ%$"KX@BE!!XT@]G"!!OV*1
+HSL@V&:\@@A)BQ<@!!XVE!!PA4W@QAK0@@@I)>Q @@Q"1X@HVE!!XT@@@@@@@@@@@@''JV @@CZ)F BE!!XVE@@@@@@@@@@@@&Y6^%DV#\C(@!!XVE!!P@@@@@@@@@@
+@GPS(*B LA\@@HVE!!XT@@@@@@@@@@@@@]HL#R3P@@@BE!!P@a') ; colorMapFromArray:#[0 0 0 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 207 207 219 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 129 71 26 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 126 69 26 154 92 27 242 140 1 227 168 29 143 83 26 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 134 77 26 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 159 96 27 187 117 28 241 241 246 149 87 27 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 254 254 255 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 139 77 23 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 255 255 255 136 77 26 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191 127 127 127 170 170 170]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A0@_?<@_?<0_?=8_??8_??8_??0_?? _??@_?>@_?<@_?<@_?>@_??@_?? _?? _?? G13 @A3 @A? @A?@@@>@') ; yourself); yourself]
+!
+
+cutWidget22x22Icon2
+    "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 cutWidget22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#cutWidget22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class cutWidget22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+!!XT@@@@@@@@@@@@BT)D@@@@@@@BE!!XV9.[&9.[&9.[&9*F4X.[&9@@@@!!XVE.["8.K"8.K"8.EJEQK"5.PAGA8VE!![&8-+Z6-+Z6-+YQ!!UZ6-K&ASPH$!!XV9
+.KZ6-+Z6-+Z6F9VA-+Q6_HTBIHVE.["6-+Z6-+Z6-", S+XQW(U!!I@^E!![&8-+Z6-+Z6-+X\"U5%_Q4-+6^E!!XV9.KZ6-+Z6-+Z6+Y-/,26B)$H@!!XVE.["6
+-+Z6-+Z6-''VAIC8X%9\@@HVE!![&8-+XAO8Q4-+XOJEH*#WH@@@BE!!XV9.GQCEQ$H#:P7B5E,\;Z9@@@@!!XVE.WP8$9@<*6ROE@)?)9>6.P@@@HVE!![&NR[J0
+-%]7BGDCNV,PDE@@@@BE!!XV9UFXV-+YY#G%J$$<FMPY;!!@@@!!XVE.Y!!#*+Z6,E.@AZ8"H$@%N19;@HVE!![$L(T0M+H\RP:T1"ENJ%$"KX@BE!!XV9]G"!!OV*1
+HSN9V&:\.[%)BQ<@!!XVE!!PA4W@QAK0@@@I)>Q @@Q"1X@HVE!!XT@@@@@@@@@@@@''JV @@CZ)F BE!!XVE@@@@@@@@@@@@&Y6^%DV#\C(@!!XVE!!P@@@@@@@@@@
+@GPS(*B LA\@@HVE!!XT@@@@@@@@@@@@@]HL#R3P@@@BE!!P@a') ; colorMapFromArray:#[0 0 0 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 207 207 219 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 129 71 26 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 126 69 26 154 92 27 242 140 1 227 168 29 143 83 26 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 134 77 26 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 159 96 27 187 117 28 241 241 246 149 87 27 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 254 254 255 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 139 77 23 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 255 255 255 136 77 26 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191 127 127 127 170 170 170 0 184 184 0 184 184 16 228 224 64 64 64]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@A0@_?>@_?>0_??8_??8_??8_??0_?? _??@_?>@_?>@_?>@_?>@_??@_?? _?? _?? G13 @A3 @A? @A?@@@>@') ; yourself); yourself]
+!
+
+diff22x22Icon2
+    "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 diff22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#diff22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class diff22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DB@0PEA XGB@$JB00MC <PDQHSEATBE!!\XFQ([GA4^G2@!!H"L$IRX&I"\(@1\XFR$*J20-K"<0LRH#ICH&I"X''L3P5
+M#X7M3 9N#,<OS8?PDEBP4MCQDUF@@@@@@@@@@@@Q4 @@@@@@@AIRT)KQ @@@@@@@@@@@D]H@@@@@@AIRT%LR4X@YVU%YVU%YPAGR@@@@@@@@D%MSD9F@@@@
+@@@@@@@@Q4 @@@AIRT%MST1NS0A''Y6]''Y6]''@D]H@F]''Y6]''Y6]PS%D@@@@@@@@@@@AGR@@@RT%MST1LTD9Q@@@@@@@@@@@@Q4 @Y&Y&Y&Y&Y%ANTP@@@@@@
+@@@@@D]HRT%MST1LSD1PS%D@Y6]''Y6]''Y0AGRD%''Y6]''Y6]''T%MQ@@@@@@@@@@@@Q4!!MST5MST5LUEISTPA''Y6]''Y6]''RT]HSV]''Y6]''Y6]UT5X@@@@@@@@@
+RT%GRD1LSD1LUEAPUUMW@F]''Y6]''Y6]IQ4!!LY6]''Y6]''Y5USV@@@RT5MST1LSD]HTEAPT%IUUUUYT5)[WE1]W%= XFE"X49NT5MST5MST6P@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 248 248 63 144 224 64 152 232 79 160 232 64 152 224 64 144 224 63 136 224 48 128 216 48 120 216 47 112 216 47 112 208 32 104 208 32 96 208 31 88 200 16 88 200 16 80 200 15 72 192 15 64 192 0 64 192 0 56 184 0 56 176 0 48 160 143 200 248 128 200 248 127 192 248 112 184 248 111 176 248 96 168 248 95 160 248 80 152 248 79 144 248 64 128 248 63 120 248 48 112 248 32 104 248 31 96 248 16 88 248 15 80 248 0 72 248 0 64 240 0 48 168 112 176 248 111 168 248 96 160 248 95 152 248 80 144 248 79 136 248 63 128 248 48 120 248 47 112 248 15 72 248 0 48 176 95 168 232 191 224 248 191 216 248 176 208 248 175 208 248 175 200 248 160 200 248 160 192 248 159 192 248 159 184 248 144 184 248 144 176 248 143 168 248 128 168 248 128 160 248 127 160 248 127 152 240 31 72 176 111 168 232 127 160 216 207 216 240 240 240 248 240 232 240 63 88 176 239 232 240 240 240 240 48 88 176 96 168 224 224 224 232 96 160 224 223 216 232 48 80 176 224 224 240 223 216 224 96 152 224 96 152 216 95 152 216 208 208 224 48 120 208 80 144 208 80 136 208 79 128 200 79 120 200 79 120 192 64 112 192 64 104 184 63 104 184 63 96 184 15 56 160 248 0 0 0 252 0 24 24 24]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+directoryBookmarks22x22Icon
+    <resource:#programImage>
+    ^ self directoryBookmarks22x22Icon2
+!
+
+directoryBookmarks22x22Icon1
+    "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 directoryBookmarks22x22Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#directoryBookmarks22x22Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryBookmarks22x22Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@M60@@@@@@@@@@@@@@@@@@@@@@@@@H2''/JD@@@@@@@@@@@@@@@@@@@@@@@B@58.&@@@@@@@@@@@@@@@@@@@@@@@@/<+K&0@@@@@@@@@@
+@@@@@@@@@@@@0KOP4H"N@@@@@@@@@@@@@@CD3JI;*-;X4MBP1Y6V,*2/@@@8B0,0.JSI_G26-+Z6-+Z4_H6A5 @GA!!L$H""O6*.G!!8^G!!8^G+XJ^(0@@A2 (
+JB (X8CM1(&I"X&I(MNZ_0@@@E((X3M.[#L3$-1>_''9>_)F>3&5 @@@!!L5,3N3-KKYRC!!HRE!!HR7!!*<?X@@@HQQKKQP BP&)"''6%.\^._\KYO0D@@BE3XVDO
+BP9#.-KU6<"=*MRU72(@@@AFZ4)QK&8<"[.\4\D3L<;O$9$@@@@@QUD%W4\ \9RW4[D+EAHR&I?C@@@@@GDUL''P U3FW-T!!UUT!!UUR?]00@@@@@MNQ$[W"M*
+\@T^APUS^T5$M@@@@@@@CWYP^U%YVQ0\Y34XOTP7U @@@@@@@@L>WT1LI$0&X$9&VAXQ[@@@@@@@@@A\P$QRPF!!2BG]AJT$@@@@@@@@@@@@@RTM)GS(BD@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[223 191 95 128 127 112 160 144 128 175 143 112 224 223 207 255 224 127 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 192 176 144 239 224 223 175 143 111 239 224 176 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 240 208 127 160 127 63 176 159 112 255 224 96 207 160 64 224 208 175 239 208 144 240 223 95 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 255 255 224 255 223 112 255 240 223 255 223 143 255 208 64 208 192 191 255 255 223 160 143 127 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 255 224 144 239 208 112 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 207 191 128 239 208 111 144 112 96 255 240 191 255 239 192 240 224 95 192 144 48 240 239 208 224 192 64 144 112 95 160 127 47 127 80 47 255 224 111 176 144 96 176 159 96 240 223 176 240 239 144 176 175 159 240 224 144 255 239 191 240 208 64 255 239 128 239 208 79 223 208 208 191 144 64 240 223 143 240 208 63 255 239 127 240 240 192 255 239 159 144 112 79 240 224 143 191 159 63 240 223 80 207 176 112 240 240 191 175 143 127 224 192 112 240 223 112 208 176 80 176 159 127 255 224 160 240 223 79 255 240 208 207 191 112 239 239 207 208 176 79 255 223 95 192 160 63 128 111 48 255 223 127 255 224 159 159 127 95 176 160 112 255 240 207 255 255 240 240 224 112 176 143 96 160 143 48 240 239 160 207 160 80 239 223 175 239 192 96 143 111 64 160 143 95 255 224 128 0 0 0 245 140 6 254 247 77 254 167 8 254 198 21 195 71 0 239 120 0 217 118 18 251 198 41 239 136 3 254 183 14 254 181 14 220 106 4 254 229 40 234 151 34 254 214 30 243 141 3 243 177 49 240 121 0 251 220 73 228 130 21 247 128 0 250 231 85 254 191 23 239 147 25 220 89 0 240 174 62 247 126 3 213 100 6 217 95 0 190 64 0 190 62 0 209 92 2 226 112 2 234 105 0 222 124 21 207 92 3 187 60 0 254 207 32 231 111 0 248 131 0 194 69 0 251 174 39 254 151 9 228 107 0 242 136 7 219 96 1 234 147 32 243 151 21 253 226 50 198 74 0 254 225 41 254 166 8 195 70 0 239 119 0 212 88 0 213 107 14 242 163 29 254 247 70 219 97 0 254 247 50 254 180 14 253 137 0 248 136 8 231 133 21 225 106 2 237 131 7 203 78 0 213 97 3 239 126 2 237 118 0 210 85 0 231 113 4 183 56 0 254 138 0 225 127 21 250 194 22 248 147 7 207 83 0 254 240 95 253 245 84 253 243 84 251 136 0 239 136 8 197 72 0 197 70 0 254 254 55 214 90 0 250 142 2 243 169 28 251 140 3 251 130 3 194 68 0 247 181 38 251 234 78 191 66 0 245 142 3 226 102 1 234 127 2 242 122 0 240 146 21 188 62 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@X@@@<@@@<@@@<@@A>@@??<O??<_??8_??0_??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+directoryBookmarks22x22Icon2
+    "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 directoryBookmarks22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#directoryBookmarks22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryBookmarks22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@BH"X$@@@@@@K.;+[(@@@@@@@@@@@B2"H''X^7,@+L6;+Z6-2 @@@@@@@@CZ6+U>%71:+L&!!%L.0!!*7J@@@@@@@@ HF\3(*?(=&/5:R",^O#2 @@
+@@@@@HC^---=,YZ>%[6G+,3V8<(@@@@@@@@@&MFY0JVK0[N&%IRL(L+J@@@8B0,0LIOP07?\3<J4)9*<%NGJ@@@GA!!L$H" 0!!\RM7Z"0&:JN/L_J@@@@A2 (
+JB (X6O"*X>B7=KE-:+J@@@@@E((X3M.[#L3N>J]$HO 4=SJM&5 @@@!!L5,3N3-KKQP51+"?(;+JO3<?X@@@HQQKKQP BP$G])>+''-WJD6=/O0D@@BE3XVDO
+BP9#X6M#2IFD2#<_YR(@@@AFZ4)QK&8<N3, HBBR2&8JO1\@@@@@QUD%W4\ \2@ RD +2,(R]Q(,@@@@@GDUL''P U3EHLT!!UUT!!UUR=8I0@@@@@MNQ$[W"M*
+\@T^APUS^T5$M@@@@@@@CWYP^U%YVQ0\Y34XOTP7U @@@@@@@@L>WT1LI$0&X$9&VAXQ[@@@@@@@@@A\P$QRPF!!2BG]AJT$@@@@@@@@@@@@@RTM)GS(BD@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[223 191 95 128 127 112 160 144 128 175 143 112 224 223 207 255 224 127 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 192 176 144 239 224 223 175 143 111 239 224 176 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 240 208 127 160 127 63 176 159 112 255 224 96 207 160 64 224 208 175 239 208 144 240 223 95 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 255 255 224 255 223 112 255 240 223 255 223 143 255 208 64 208 192 191 255 255 223 160 143 127 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 255 224 144 239 208 112 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 207 191 128 239 208 111 144 112 96 255 240 191 255 239 192 240 224 95 192 144 48 240 239 208 224 192 64 144 112 95 160 127 47 127 80 47 255 224 111 176 144 96 176 159 96 240 223 176 240 239 144 176 175 159 240 224 144 255 239 191 240 208 64 255 239 128 239 208 79 223 208 208 191 144 64 240 223 143 240 208 63 255 239 127 240 240 192 255 239 159 144 112 79 240 224 143 191 159 63 240 223 80 207 176 112 240 240 191 175 143 127 224 192 112 240 223 112 208 176 80 176 159 127 255 224 160 240 223 79 255 240 208 207 191 112 239 239 207 208 176 79 255 223 95 192 160 63 128 111 48 255 223 127 255 224 159 159 127 95 176 160 112 255 240 207 255 255 240 240 224 112 176 143 96 160 143 48 240 239 160 207 160 80 239 223 175 239 192 96 143 111 64 160 143 95 255 224 128 237 93 63 240 72 43 255 96 56 255 110 74 255 125 93 255 116 81 244 165 152 255 175 155 255 102 64 255 95 55 96 57 66 215 109 88 224 81 58 255 52 2 230 114 94 241 101 71 255 107 70 255 94 54 255 87 44 255 136 106 255 61 12 255 113 78 255 104 67 252 101 65 208 79 60 223 96 73 255 55 5 255 71 26 255 92 51 255 105 68 252 134 104 255 138 109 255 58 8 255 80 37 255 186 169 255 130 99 255 100 62 190 136 133 236 53 17 255 56 6 255 70 24 255 89 47 255 51 1 255 104 66 255 64 17 255 67 20 255 99 60 255 164 142 109 41 45 252 109 74 197 81 70 241 57 15 255 57 7 255 68 22 255 90 48 255 101 63 236 144 129 255 75 30 255 77 33 255 167 145 255 180 162 255 63 15 255 108 72 255 255 255 159 49 39 241 51 8 255 52 1 255 61 13 255 81 38 255 98 59 255 111 75 255 85 42 255 87 45 255 162 139 255 183 164 255 73 28 238 109 78 120 41 44 212 97 79 248 64 20 77 77 77 255 84 41 255 97 58 247 36 9 255 129 98 255 97 57 252 170 150 255 181 162 255 83 40 255 76 32 120 45 46 220 64 38 252 51 2 255 58 9 239 97 68 241 73 37 241 132 110 255 128 96 255 106 69 255 109 72 255 178 158 255 93 52 255 86 43 114 46 52 212 117 99 248 53 7]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@NC0@_/8@??<@??<@??<@_?<O??8_??0_?? _??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+directoryUp22x22Icon1
+    "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 directoryUp22x22Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#directoryUp22x22Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryUp22x22Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C\+2?\@@@@@@@@@@@@@@@@@@@@@@MSC9JB>:P@@@@@@@@@@@@@@@@@@@MQVV,1"5+9(@@@@@@@@@@@@
+@@@@AMP4J[@''#/EOCO\@@@@@@@@@@@@@@F &L>EFD-T37/QC=0@@@@@@@@A0X_ L(OF&RB\004?,KZRZ@@@@@@A!!JDIEI++@!!FTUX/TH/I_>]P@@@@@@,%AP
+1]EV/$35Z]93HZ!!3<9$@@@@@@EO])ZV_$''>3#K*P*E;Z4C#=[]29@@@N,7^SW)M^HJ#2<":/VNUYCP(DV0@@ORA,[C3[4 @TX0F]G>7-N>7_D>8@@C7''.;,[
+DA''A''Q"''*4%PTG8;1U,@@@BJ59F!!W=59]5V\''D]*Z-4Q_"(@@@@@"ZEJ.H,<930<^7-\HA8^;3I]@@@@@NL$Y>(<+VRMYH6)*X6)*VC:S @@@@@W]CD5-4SS
+8@,:B0.#?IWBZ0@@@@@@E?Z^?KF1,SX63W(/^(].+@@@@@@@@@%<-)RTR9QK/9[F+"T]6@@@@@@@@@B4!!X^" \;&C?&CUH<@@@@@@@@@@@@@#8[ONWXGG@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[223 191 95 96 144 255 208 208 207 128 127 112 239 239 224 207 192 191 207 191 176 160 144 128 80 111 191 175 143 112 224 223 207 255 224 127 79 96 176 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 208 239 255 192 176 144 63 80 159 175 208 255 239 224 223 175 143 111 95 128 240 239 224 176 80 80 79 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 176 176 191 64 64 63 79 79 64 240 208 127 160 127 63 80 112 192 192 224 255 239 239 192 160 192 239 176 159 112 96 112 192 127 127 112 111 143 239 64 80 160 255 224 96 176 223 255 207 160 64 224 208 175 159 191 240 95 112 207 239 208 144 240 223 95 191 192 208 176 159 111 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 207 207 192 175 160 160 208 192 192 175 175 160 255 255 224 79 95 175 255 223 112 191 192 207 191 223 240 143 144 160 95 127 208 255 240 223 255 223 143 255 208 64 176 191 192 175 160 159 208 192 191 128 175 239 255 255 223 192 192 191 223 223 208 192 176 111 160 143 127 143 144 159 95 127 207 224 224 223 240 207 96 207 160 127 160 191 240 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 175 207 255 111 144 255 255 224 144 80 111 207 208 207 192 239 208 112 191 191 208 159 192 255 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 191 176 175 207 191 128 143 128 127 96 95 80 64 96 176 239 208 111 191 191 207 144 112 96 255 240 191 144 143 128 255 239 192 240 224 95 208 207 160 192 144 48 191 191 176 240 239 208 208 208 191 111 96 96 224 192 64 176 175 160 144 112 95 80 127 207 160 127 47 127 80 47 255 224 111 192 191 176 176 144 96 176 159 96 240 223 176 64 95 176 240 239 144 191 208 255 176 175 159 128 176 255 240 224 144 175 191 176 255 239 191 240 208 64 255 239 128 239 208 79 111 159 255 160 159 144 224 223 223 223 208 208 111 96 95 48 79 144 63 80 144 191 144 64 224 224 192 143 175 240 240 223 143 240 208 63 255 239 127 63 95 159 240 240 192 175 207 240 80 128 240 64 95 175 255 239 159 207 192 176 63 80 143 144 112 79 240 224 143 191 159 63 240 207 111 207 224 255 240 223 80 207 176 112 240 240 191 175 143 127 112 112 111 224 192 112 240 223 112 208 176 80 176 159 127 143 176 255 255 224 160 112 159 239 208 207 207 79 111 191 240 223 79 144 176 240 255 240 208 207 191 112 80 112 207 223 208 207 239 239 207 208 176 79 79 64 63 159 144 143 239 224 208 128 127 127 95 112 191 176 208 255 255 223 95 192 160 63 128 111 48 191 191 160 80 96 176 239 192 127 255 223 127 191 192 223 191 223 255 143 176 240 255 224 159 159 127 95 96 96 95 223 208 175 239 223 144 176 160 112 255 240 207 159 191 255 255 255 240 240 224 112 192 223 255 176 176 175 176 143 96 143 176 239 240 208 111 160 143 48 240 239 160 80 79 64 176 191 208 207 160 80 112 111 96 128 175 255 255 255 239 192 176 175 239 223 175 95 95 80 160 207 255 127 160 255 80 95 144 127 159 239 64 96 191 239 192 96 176 191 207 191 160 127 143 111 64 160 143 95 224 223 208 255 224 128 208 207 176 63 95 175]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@G @@O0@@_8@A?<@A?>@O??@_??@_??@_??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+dosShellTerminal22x22Icon
+    "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 dosShellTerminal22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#dosShellTerminal22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class dosShellTerminal22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+ XFA XFA XFA XFA XFA XFA XFA XFAPX)8%QL9U9LQ]T52^(@/K2</ XFAGDFA XFA XFA XFA:>/+:>2ANRVA TJA(Q(ZF!!(ZF!!+#9^W%9^S- _H% XF[
+ ^[K*;OZ7^C!!+]OA0?W:>8G.IXFAF8G&2:.''):_ 8Z7S0\O5>/.A<BVA R^A9-2''3\7Q)>F-4<G9=_+; _H% XEJ ^J6);B07^C!!+]OA>_W:>8G.IXFA\XG"
+*:^0,M618Z6''0_''5>/.A<BVA S:A8*.'',KB0,Z7J0\OY=_+; _@% XE!! ^J?)=GQ7Z6-4<GC6_+;?XG/IXFAL8G",:_R4-6-+]N''6S?U>O>A;2VA X6A8;B''
+7]61)=.*4L#U3?36 _L% XE- ^O],Z^'')=SL5,B).[''>=(G1IXFA[XG%+*:;1=,++;SH/\?8??^A<RVA V6A XFA XFA XFA XFA XFA _P% XE-</K.;/C/
+;?O3<?G1<_O3<_G1IXFA RT%IRT%IRT%IRT%IRT%IRT%IXFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA
+ XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA P@a') ; colorMapFromArray:#[109 243 0 55 187 0 11 108 0 18 149 0 55 167 0 213 232 255 218 229 250 217 227 249 62 176 0 90 104 197 79 200 0 226 234 251 96 230 0 210 230 255 69 185 0 86 215 0 42 150 0 142 156 218 187 197 239 158 177 227 201 255 153 32 135 0 197 206 242 49 159 0 22 122 0 39 148 0 160 173 232 131 157 220 147 178 229 224 238 255 73 206 0 56 168 0 221 232 252 29 131 0 73 190 0 90 224 0 19 118 0 63 67 120 63 177 0 126 151 218 16 146 0 53 164 0 70 186 0 33 164 0 214 224 248 213 222 247 132 255 21 99 106 198 16 114 0 60 173 0 216 232 253 101 118 203 30 162 0 111 245 0 184 194 238 47 180 0 224 237 254 154 172 225 223 235 253 214 232 254 194 203 241 64 178 0 111 131 209 17 149 0 133 145 214 167 193 234 142 171 226 249 252 255 61 194 0 216 225 249 44 152 0 105 239 0 34 139 0 7 102 0 121 144 215 209 230 255 246 250 255 128 139 212 24 124 0 68 185 0 102 235 0 4 98 0 48 157 0 21 122 0 206 255 162 45 177 0 11 107 0 150 167 223 72 196 0 219 230 251 156 255 66 62 195 0 168 180 234 1 94 0 191 200 240 89 214 0 106 240 0 106 124 206 69 202 0 8 103 0 218 232 253 159 255 72 32 164 0 113 247 0 59 191 0 164 176 233 42 149 0 76 209 0 76 195 0 85 97 195 49 164 0 49 158 0 190 255 132 116 137 212 123 134 209 83 216 0 12 122 0 137 151 216 119 252 2 118 252 1 166 187 231 194 222 255 118 128 207 36 141 0 97 226 0 87 221 0 16 113 0 77 210 0 113 122 205 255 255 255 23 128 0 40 146 0 30 151 0 225 238 255 13 111 0 101 235 0 47 179 0 222 234 252 170 192 234 252 253 255 121 253 3 96 111 201 180 191 237 220 234 253 54 166 0 212 231 255 27 129 0 147 161 221 115 249 0 162 182 229 61 183 0 61 175 0 176 187 236 41 173 0 217 232 253 137 164 224 68 184 0 4 135 0 4 133 0 85 212 0 14 112 0 226 239 255 31 134 0 215 232 254 92 225 0 172 183 235 243 249 255 0 0 0 123 255 0 15 139 0 32 165 0 103 255 0 144 255 27 46 203 0 56 194 0 29 157 0 90 248 0 60 217 0 192 255 130 94 251 0 23 151 0 206 255 147 111 255 0 148 255 63 37 167 0 10 132 0 27 154 0 51 187 0 130 254 18 14 139 0 48 201 0 102 255 0 21 148 0 28 183 0 164 255 71 18 174 0 55 192 0 167 224 170 171 255 81 45 179 0 18 142 0 116 255 0 42 191 0 113 255 0 32 162 0 93 251 0 43 178 0 6 128 0 23 152 0 84 241 0 84 239 0 37 192 0 37 168 0 10 133 0 27 155 0 159 255 70 0 98 0 14 166 0 85 242 0 41 175 0 112 255 0 75 231 0 135 255 26 31 160 0 65 222 0 55 211 0 141 157 224 164 175 229 178 194 242 178 187 232 130 147 221 46 145 54 47 129 47 46 132 45 46 133 45 250 255 255 241 249 255 195 206 251 184 201 251 178 197 251 182 200 251 170 192 251 187 202 251 177 197 251 166 191 251 7 162 0 0 111 0 0 107 0 1 122 0 16 173 0 0 154 0 0 142 0 0 120 0 0 118 0 0 116 0 0 114 0]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O??0_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8O??0@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+fileBrowser22x22Icon
+    "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 fileBrowser22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileBrowser22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@,KLC@G@@@@@@00LC@0S0@@@@@@A0XSIBH(LC@0LC@0A )TUCX@@@@@@@\(JB (JFM#[&9.L3L3L3L6@@@@@@AZ
+JFL3[&83L3,;V4-KEB5!!@3Y-X@@@HSM[L3,;+8F2/8%;"=2T@3<?O6@@@BDTR24T!!I#B3;^+1<V5-II/[3<A@@@!!\6E!!!!J^;5[2:&:/[ L2I$&T*@@@@Q&-J
+7:&_5]WH I68''Y.+4KJT@@@@@DUQIW6O/MVF18:N#(:N*:.V) @@@@A1EZ?X1J7H*)6@&:/[6:/[1ZSS@@@@CS''_*Z.+ H:@6=.\''I2\68BU70@@@@567:''[
+#+"Y*=.\+Z6-+Y2\5-<@@@@CO->)*8BL#'':\+[2</J:-.-[_@@@@WDK_$M&+''XC[''J:<!!(Z<+XJ?70@@@D%C%M7M*9&@6:6./MWU5Z;C29P@@@@@@@BD-,V:
+&7:\++2F5]V 0YH@@@@@@@BS7<B66]/[''J6-+([!!*MD@@@@@@@CF,9*0,[ZM.].-''HJ,*G>T@@@@@@CZ2\*>/Y:Q^:VW",:( 9FE@@@@@@CZ(<*G(''3S@MO^
+$^CT$-L@@@@@@@@@(<*G"M_R@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[223 191 95 128 127 112 160 144 128 175 143 112 224 223 207 255 224 127 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 192 176 144 239 224 223 175 143 111 239 224 176 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 240 208 127 160 127 63 176 159 112 255 224 96 207 160 64 224 208 175 239 208 144 240 223 95 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 255 255 224 255 223 112 255 240 223 255 223 143 255 208 64 208 192 191 255 255 223 160 143 127 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 255 224 144 239 208 112 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 207 191 128 239 208 111 144 112 96 255 240 191 255 239 192 240 224 95 192 144 48 240 239 208 224 192 64 144 112 95 160 127 47 127 80 47 255 224 111 176 144 96 176 159 96 240 223 176 240 239 144 176 175 159 240 224 144 255 239 191 240 208 64 255 239 128 239 208 79 223 208 208 191 144 64 240 223 143 240 208 63 255 239 127 240 240 192 255 239 159 144 112 79 240 224 143 191 159 63 240 223 80 207 176 112 240 240 191 175 143 127 224 192 112 240 223 112 208 176 80 176 159 127 255 224 160 240 223 79 255 240 208 207 191 112 239 239 207 208 176 79 255 223 95 192 160 63 128 111 48 255 223 127 255 224 159 159 127 95 176 160 112 255 240 207 255 255 240 240 224 112 176 143 96 160 143 48 240 239 160 207 160 80 239 223 175 239 192 96 143 111 64 160 143 95 255 224 128 191 175 143 144 159 192 160 144 159 176 191 208 192 255 255 175 175 192 191 239 255 176 176 207 207 239 240 175 175 207 207 207 223 239 239 224 240 255 255 223 128 63 175 111 95 128 143 191 144 160 192 159 159 192 160 223 255 160 192 224 176 224 255 175 191 223 159 160 208 192 192 208 208 208 223 240 239 223 239 239 239 128 143 176 143 175 208 143 159 192 143 143 191 176 239 255 207 207 191 191 240 255 208 255 255 175 223 255 207 207 207 207 223 239 224 239 240 240 240 239 175 111 80 255 191 95 127 127 175 128 144 191 160 160 191 159 160 192 160 175 207 159 160 207 176 223 255 192 240 255 191 207 224 223 255 255 224 255 255 224 224 239 144 159 160 128 143 175 128 128 175 240 207 144 144 144 191 144 160 208 143 159 207 192 239 255 160 208 255 191 224 240 207 240 255 208 224 239 239 255 255 144 143 143 207 143 95 127 128 175 144 159 191 143 144 191 144 160 207 176 208 224 191 223 239 175 208 240 255 208 159 191 224 255 207 239 255 255 191 80 255 175 79 143 143 176 144 191 239 160 191 224 160 176 208 176 208 239 159 192 239 175 160 192 176 175 207 224 224 224 208 208 224 255 255 255 143 159 191 160 128 144 160 175 208 176 223 240 255 207 144 207 255 255 191 191 208 176 176 208 207 207 208 223 223 224 207 208 223 239 239 240]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O0?@_??@_??@_??8_??8_??8_??0_?? _?? _??0_??0_??0_??0_??0_??0C?? G??@O??@_?>@?/8@?@@@') ; yourself); yourself]
+!
+
+fileBrowser22x22Icon2
+    "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 fileBrowser22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileBrowser22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\&U%\GA.@@@@@I90\GA0"P@@@@@@[''N=7^C_\GA0\GA0\;N</FX@@@@@@F;_7=?_7=3\6=/[6-+Z6-)&@@@@@@A/
+7=3Z6=/Z6-''Y.=[V5[_POVYKR @@YM*;6-''Y$48G@0(\H5.!!O["8.D(@@FSU5+_U]08^T&!!)W4P_FXK!!8[ F@@A$-]CP]2RD8.#(:N#(:B@J )<.@@@@RL>2
+""U98.#(:N#(:N#(I0^!!@@@@@D^,2UAC:N#(:N#(:N#(:F$SL @@@@AF)9L4:N#(:N#(:N#(:N#(Q@JR@@@@OI"JI^#(:N#(:N#(:N#(:F@I" @@@C2V""W(
+:N#(:N#(:N#(:N"EDH(@@@@=X((%:N#(:N#(:N#(:N#(_ABJ@@@@O""JI%O(:N#(:N#(:N#(:G(C" @@@D0A(T<6:.+*:.+*:.+*:.)QCZD@@@@@@@A7D$Q<
+:X.K"8.K"8.TC8H@@@@@@@B9"!!,RT75=!!X.K"8.KL4@@@@@@@@CE)GPZBAH7W''6K!!W)\L4F!!@@@@@@CC0\A+FGU''G@,QGST3P&^ @@@@@@CC0,BFN#BR@II6
+Y7"C )H@@@@@@@@@0,BFN2)M@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 127 80 47 127 127 175 127 128 175 128 96 64 128 111 48 128 127 112 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 111 64 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 112 48 144 112 79 144 112 95 144 112 96 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 159 112 64 159 127 95 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 127 47 160 127 63 160 128 144 160 143 48 160 143 95 160 143 127 160 144 111 160 144 128 160 144 159 160 159 112 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 175 111 80 175 111 95 175 143 111 175 143 112 175 143 127 175 159 128 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 143 96 176 144 96 176 159 96 176 159 112 176 159 127 176 160 112 176 175 159 176 175 207 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 191 144 64 191 159 63 191 175 143 191 175 160 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 144 48 192 160 63 192 160 111 192 176 144 192 176 159 192 192 208 192 239 255 192 240 255 192 255 255 207 143 95 207 160 64 207 160 80 207 175 112 207 176 112 207 176 127 207 191 112 207 191 128 207 192 160 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 176 79 208 176 80 208 176 111 208 192 191 208 208 223 208 208 224 208 224 239 208 255 255 223 128 63 223 191 95 223 192 111 223 208 208 223 223 224 223 255 255 224 192 64 224 192 112 224 192 128 224 207 111 224 208 175 224 223 207 224 224 224 224 224 239 224 239 240 224 255 255 239 192 96 239 208 79 239 208 111 239 208 112 239 208 144 239 223 159 239 223 175 239 224 176 239 224 223 239 239 207 239 239 224 239 239 239 239 239 240 239 255 255 240 207 144 240 208 63 240 208 64 240 208 127 240 223 79 240 223 80 240 223 95 240 223 112 240 223 143 240 223 176 240 224 95 240 224 112 240 224 127 240 224 143 240 224 144 240 224 191 240 239 144 240 239 160 240 239 175 240 239 176 240 239 208 240 239 223 240 240 175 240 240 191 240 240 192 240 240 208 240 240 239 240 255 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 64 255 208 159 255 223 95 255 223 112 255 223 127 255 223 143 255 224 96 255 224 111 255 224 127 255 224 128 255 224 144 255 224 159 255 224 160 255 239 127 255 239 128 255 239 159 255 239 175 255 239 176 255 239 191 255 239 192 255 240 176 255 240 191 255 240 192 255 240 207 255 240 208 255 240 223 255 240 224 255 255 223 255 255 224 255 255 240 255 255 255 247 255 255 247 255 255 239 255 255 231 255 255 223 255 255 255 247 223 223 247 255 191 167 151]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O0?@_??@_??@_??8_??8_??8_??0_?? _?? _??0_??0_??0_??0_??0_??0C?? G??@O??@_?>@?/8@?@@@') ; yourself); yourself]
+!
+
+fileIn22x22Icon
+    "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 fileIn22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileIn22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileIn22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@GQ4]GQ4]GQ4]GQ4]GQ4]GP@@@@@@@A4]GQ4]GQ4]GQ4]GQ4]GQ4@@@@@@@@]GQ4]GQ4]GQ4]GQ4]GQ4]@ATUEQTUEQTUEA4]GQ4]GQ4]GQ4]GP@U
+GQ4]DPP''I!!TTGQ4]GQ4]GQ4]GQ4@EQ4]GP$K@"XUG!!P]GQ4]GQ4]GQ4]@AT]GQ4IDPX&EAPTEA4]GQ4]GQ4]GP@UGQ4]C1DEI!!<\HQP]JQ4]GQ4]GQ4@EQ4]
+GQLIFQ,%E!!\TGR$)GQ4]GQ4]@AT]GQ4]BRH&JR$)JR$)JR$]GQ4]GP@UGQ4SDPP(D"$)JR$)JR$)JQ4]GQ4@EQ4SC1 [G0()JR$)JR$)JR$)GQ4]@AT]GQDZ
+F08PJR$)JR$)JR$)GQ4]GQ4UGP<LAPX&C"$)JR$)JR$)GQ4]GQ4]EQ4@H TFI 8(B DTGR$)GQ4]GQ4]GQT]ABHEF!!,NJ@(AEA4)GQ4]GQ4]GQ4UGRHYF XB
+C!!<J@QP]GQ4]GQ4]GQ4]EP$"H TFI 8(B DTGQ4]GQ4]GQ4]@APTEAPTEAPTEAPTEA4]GQ4]GQ4]GP@@@@@@@A4]GQ4]GQ4]GQ4]GQ4]GQ4@@@@@@@@]GQ4]
+GQ4]GQ4]GQ4]GQ4]@@@@@@@@@@@@@@@@@A4]GQ4]GQ4]GP@a') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240 248 0 0]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@_<@@_>@@_?@@_? @_?(@_?,@_?>@_??@_?? _??@_?>@_?,@_?(@_? @_? @_? @@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+fileOpen22x22Icon
+    "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 fileOpen22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileOpen22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileOpen22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"G!!8^G!!$"H"H"H"H"H"H"H"H"H"H"H"$TJQ8HGB@^H"H"H"H"H"H"H"H"H"H"H"H"H"H^G@TZ
+G"H"H"H"H"H"H"H"H"H"H"H"H"H"G"@]G"H"H"H"H"H"H"H"H"H"H"H"H"H"H!!(]AQ8"H"H"H"H"A@PDA@P"H"H"H"H"H!!(]D18"H"H"H"HDI!!TNCATDH"H"
+H $^EB@SD18^@"H"H"HDDB(*B D,A@PDAA8 GQLSD1LSG"H"H"HDJ (JB (AA X*B (^HALSD1L^H"H"H"H[B (JB (JB (JB"TOH2@SD18"H"H"H"H[HRD!!
+HRD!!HRT-I0@@@@,]G!!\"H"H"H"H[D!!H+D @DAB\M@PDAF@8^BRP"H"H"H"H-J2,D@B0CDQ@FA XFFA P@2P"H"H"H"H-A1,N@R(*J"(*J"(*D!! AIBH"H"H"
+H"H-A1,PB (JB (JB (JD!! *IBH"H"H"H"H-E"XFB (!!B"DJHP(!!J1H$H"H"H"H"H"H$G1T*D"D!!HRD!!HRD!!J2,$H"H"H"H"H"H$AADRD!!HRD!!HRD!!HRC2P"
+H"H"H"H"H"H$@AD+J2,+J2,O@A,$IBH"H"H"H"H"H"H$KA +A1<DKRP[F1,"H"H"H"H"H"H"H"H$J@P$IA,[H"H"H"H"H"H"H"H"H"H"H"H$IA,"H"H"H"H"
+H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"') ; colorMapFromArray:#[224 189 75 255 253 212 114 169 125 244 219 172 224 180 55 105 195 48 255 253 194 253 210 112 27 163 14 139 188 141 254 253 153 67 140 42 245 230 190 245 250 242 238 222 158 240 212 96 254 253 228 249 239 209 254 233 132 135 224 88 62 138 68 241 209 144 254 198 97 148 180 81 255 227 154 39 125 38 61 166 37 216 172 46 46 153 24 113 206 71 25 131 15 240 198 86 79 187 37 254 243 141 255 255 255 69 123 9 205 154 5 249 235 113 225 193 100 218 179 65 241 239 199 10 113 5 254 251 173 254 221 123 230 203 126 213 166 29]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@>@@C?@@@O @@G @@C0G0C0O8_<O??<O??8O??0O??0O??0O??0O?? O?? O??@O??@O?>@O?<@O?0@O8@@N@@@@@@@') ; yourself); yourself]
+!
+
+fileSave22x22Icon
+    "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 fileSave22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileSave22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileSave22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@CT4MCH0K20)I2P$H2H!!G14\@@@@@CV%(/SL4][4=OS4=OS4=OQ@OP(@@@@4(Y;4F1,[=OS4=OS4<.W^PC4H@@@@L9"W=A.#&/S4=OS4;NOW43$4A0@@@CJU
+$_P[''974=OS49]/S3,PYFP\@@@@1#H+'':^/3<?O38=/S1<BNFA G@@@@K8RD^7Y.Y59ZT$1HP3<9F1TUA0@@@B:@_GM-ZU9ZT$5GP389F1,UEP\@@@@-]''M,
+Y&AXUD1JP389NQ,[EQTG@@C<J&)/Y6M]U5EKRTD=NS$9MQTUA0@@?B%#X.S$8-?Z5MCM2LN6,[DUEPX@@O0''V%+"8-?Z5MCM2LO@*ZZ)FQ$D@@C<I5UU8K.9
+-;R1+::-&X"E*Q X@0@@?BYNS-?_6-SP2LO@-JZ\$:LUEPT@@O0&RT''].KV2,J:-&8"A^WRVEQTG@@C<ITIB6-+T4L"<*ZZ\$8.G#1TUA0@@?BU@PM^6,Z.(
+&YJE_W]1[H8UEP\@@O0%OC2P$H6F 7)5Z6U_WE%VEAPH@@C<@@$IBP$HB@ HB@ HB@ HB@ H@@@@?@@@@@@@@@@@@@@@@@@@@@@@@@@@@O0@@@@@@@@@@@@@
+@@@@@@@@@@@@@@C<?O3<?O3<?O3<?O3<?O3<?O3<?O3<?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 28 33 37 34 41 60 37 45 83 39 48 89 42 51 96 45 55 103 49 60 112 54 65 115 54 66 115 54 66 116 57 70 107 57 70 109 59 59 58 65 79 121 65 80 125 66 80 124 68 83 130 74 71 70 77 81 85 78 95 152 80 98 153 81 98 151 83 47 28 85 102 157 86 103 157 88 101 128 90 110 162 94 106 146 94 106 147 95 83 66 95 107 147 96 74 37 97 108 148 98 109 148 98 109 149 99 110 149 101 111 150 101 111 151 101 112 151 102 102 107 102 113 151 102 113 152 103 86 54 103 113 151 103 113 152 103 114 152 104 114 152 105 115 152 105 115 153 106 116 153 107 116 154 107 117 154 108 117 154 116 124 137 123 85 65 123 107 74 125 143 184 126 64 32 126 139 158 126 143 183 127 145 185 128 145 184 129 146 185 129 147 186 130 148 186 131 148 187 131 149 187 132 141 160 133 141 159 133 143 164 134 151 188 134 151 189 134 152 189 135 152 189 136 153 190 137 154 191 138 154 191 139 156 193 141 151 173 142 69 67 142 157 193 142 158 193 143 62 26 143 158 193 143 159 194 144 157 200 144 161 195 145 161 195 146 158 202 146 162 196 147 89 55 147 160 203 147 162 196 148 165 197 149 161 204 149 164 197 150 166 198 150 166 199 151 167 199 152 149 137 152 163 206 152 168 199 153 169 201 154 96 64 154 169 201 154 170 201 155 167 207 155 171 202 156 171 202 156 171 203 157 172 203 157 173 182 157 173 203 159 147 111 159 174 204 159 175 204 160 170 210 160 174 204 160 176 205 162 172 191 162 178 207 163 173 212 163 177 206 164 177 207 164 180 207 165 147 99 165 165 166 165 178 207 166 182 208 167 147 95 167 177 214 167 181 209 169 185 209 170 179 216 170 186 215 171 185 210 172 162 152 172 185 212 172 187 217 173 186 212 174 182 218 174 188 219 175 190 221 176 184 220 176 189 214 176 190 213 176 190 218 177 145 64 177 190 215 179 193 223 180 192 216 181 193 216 181 194 214 181 195 218 182 194 214 182 195 221 183 196 219 184 195 218 184 197 219 185 95 37 185 196 219 185 197 219 185 197 222 186 185 192 187 198 220 187 200 223 188 171 94 188 199 217 192 204 226 194 97 38 195 206 220 196 168 100 196 206 218 198 207 220 202 211 222 203 212 222 205 214 224 207 215 224 208 101 40 209 217 225 210 217 226 210 219 227 212 220 227 213 220 227 214 221 228 217 103 41 217 223 229 217 224 237 219 101 37 222 177 45 222 225 232 223 228 241 224 187 54 225 105 42 226 231 241 226 231 243 228 196 63 230 202 70 230 234 245 230 235 243 232 240 251 233 208 76 233 235 240 233 236 247 233 237 244 233 237 246 235 214 82 235 238 245 236 239 248 237 239 242 238 241 249 239 242 247 240 242 242 240 242 249 240 243 249 242 220 141 242 242 227 242 244 249 242 244 250 244 244 245 244 246 250 244 246 251 245 247 250 246 247 250 246 247 251 247 248 251 247 248 252 248 249 251 248 249 252 249 99 39 249 249 253 250 147 56 250 250 253 251 169 79 251 251 253 251 252 253 252 99 38 252 178 84 252 187 89 252 199 96 252 206 99 252 252 253 252 252 254 253 253 254 254 99 38 254 107 43 255 100 39 255 101 39 255 106 42 255 117 45 255 236 120 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_??C???#???#???#???#???#???#???#???#???#???#???#???#???#???#???#???#???#_??C@@@C@@@C@@@C') ; yourself); yourself]
+!
+
+fileSaveAs22x22Icon
+    "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 fileSaveAs22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileSaveAs22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileSaveAs22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@EV[&2N]_>1!!M#$9@;FJ[5CY@@@@@EW83CMQA8L3L3L3L3L3L3LB[(UOX B[Z\435-[VL3L3L3L3)4^?@&;>F!!B(HDTSL=[[7#L3L3L3?IC0,+)I,ORB82N>
+U3OVP@<3L3L3Q2^2\LR^P\E3F2+*J_EFZ8#:>/+:EB]]&J+7<$,A8_''C_;Z6C-==134J\W1_YS+%%-T&49H@0<X?CEX% S4J\Q?+++LI#[.S^^D@@LM 75Z@
+;6^KCW1>++M&2OTV(SCN@@CC*>6\1<&56-7)1S#O%7ZT]C@E3 @@06GI+=KR.IG@A,*7M^!!Z&!!#XP)<@@LL6B *8.IG@KA67[TN4LZV,D]E(@@CCM-3\SA''B
+)(\R8(<""S-^QE/6^0@@0:5:^)EI))UI\$&D;.O 95"=9$8@@LN-1\U7RT''PRZAIRZH>T+1*T5ON@@CCX3\70L@,2''I,Y@.YMK%M#%MS3 @@06LB@/CKD#0\
+?WW3#EP$ D)ST<8@@LM#B@#T5M\W^CK;RNQYKR:#G!!:$@@CC@B</K2>$)JR$)JR$)JR$)JR$@@@@00@@@@@@@@@@@@@@@@@@@@@@@@@@@LL@@@@@@@@@@@@@
+@@@@@@@@@@@@@@CC0<OC0<OC0<OC0<OC0<OC0<OC0<OC00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 142 69 67 129 147 186 98 109 149 242 51 50 86 103 157 240 242 242 236 239 248 126 143 183 165 147 99 146 162 196 187 200 223 164 177 207 143 158 193 163 177 206 183 196 219 147 89 55 66 80 124 205 214 224 180 192 216 247 248 252 203 212 222 255 100 39 170 179 216 123 107 74 217 223 229 186 185 192 77 81 85 188 199 217 242 242 227 78 95 152 138 154 191 107 116 154 226 231 241 242 220 141 106 116 153 157 173 203 156 171 202 255 106 42 242 244 250 247 105 44 173 186 212 83 47 28 196 206 218 239 242 247 147 160 203 146 158 202 54 66 115 95 83 66 225 105 42 163 173 212 253 253 254 176 190 218 222 177 45 101 112 151 131 148 187 130 148 186 99 110 149 129 146 185 96 74 37 195 206 220 148 165 197 166 182 208 165 178 207 184 197 219 188 171 94 81 98 151 255 236 120 133 141 159 181 193 216 249 249 253 248 249 252 155 167 207 88 101 128 174 188 219 250 147 56 246 247 250 170 186 215 42 51 96 154 96 64 94 106 147 233 236 247 162 178 207 80 98 153 160 176 205 108 117 154 159 174 204 176 189 214 141 151 173 149 161 204 252 99 38 57 70 107 213 220 227 233 235 240 126 139 158 134 151 189 103 113 152 102 113 151 254 107 43 101 111 150 192 204 226 150 166 198 159 147 111 149 164 197 39 48 89 185 196 219 179 193 223 250 250 253 217 224 237 222 225 232 127 145 185 95 107 147 233 237 246 142 158 193 230 235 243 165 165 166 208 101 40 176 190 213 252 199 96 244 246 250 167 177 214 185 95 37 139 156 193 37 45 83 137 154 191 156 171 203 135 152 189 104 114 152 155 171 202 154 169 201 102 102 107 240 242 249 34 41 60 54 66 116 210 217 226 209 217 225 251 251 253 219 101 37 97 108 148 145 161 195 164 180 207 230 202 70 175 190 221 172 162 152 246 247 251 245 247 250 28 33 37 255 101 39 254 99 38 237 239 242 233 208 76 224 187 54 230 234 245 182 195 221 217 103 41 107 117 154 157 172 203 105 115 152 177 145 64 45 55 103 198 207 220 194 97 38 171 185 210 144 157 200 54 65 115 103 86 54 212 220 227 252 252 253 255 117 45 182 194 214 223 228 241 102 113 152 162 172 191 101 111 151 131 149 187 150 166 199 244 244 245 98 109 148 238 241 249 128 145 184 249 99 39 147 162 196 167 181 209 233 237 244 247 248 251 172 187 217 125 143 184 252 178 84 159 175 204 65 80 125 177 190 215 244 246 251 242 244 249 157 173 182 214 221 228 255 255 255 226 231 243 134 152 189 103 114 152 153 169 201 228 196 63 151 167 199 235 238 245 210 219 227 185 197 219 184 195 218 49 60 112 152 149 137 207 215 224 65 79 121 248 249 251 143 62 26 176 184 220 251 169 79 90 110 162 174 182 218 85 102 157 94 106 146 144 161 195 185 197 222 143 159 194 142 157 193 181 195 218 160 174 204 132 141 160 74 71 70 202 211 222 126 64 32 152 163 206 167 147 95 68 83 130 133 143 164 252 206 99 136 153 190 105 115 153 134 151 188 103 113 151 154 170 201 123 85 65 152 168 199 240 243 249 172 185 212 235 214 82 169 185 209 232 240 251 252 187 89 57 70 109 196 168 100 187 198 220 59 59 58 252 252 254 160 170 210 251 252 253 181 194 214 116 124 137]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_??C???;???????????????;???3???#???#???#???#???#???#???#???#???#???#???#_??C@@@C@@@C@@@C') ; yourself); yourself]
+!
+
+fitImageSizeToView22x22Icon
+    "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 fitImageSizeToView22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#fitImageSizeToView22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fitImageSizeToView22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+,;N3,;N3,;N3,;N3,;N3,;N3,;N3,3H<P38;M3P,H2@^GA(VEQHQCP0KA D<[&-%XU=WST%BN#D!!GQ$TD@(IBP\BQF(A@PDA@T-FPCX+G1,W@PDA@PDHAT23
+@[N3,;N3,;N3,;N3,;N3,;LA&1!!^,0F3@PDA,;N3,;N3,;HA@PF)@Y,0W[LA,0F3,;N3,;N3,;J1+:0A) FWK523@[LA,0@@@@@@@@@@@@B&@ZXA%25Z,;N3
+,;L@^G!!8^G!!8^G @(:N ''YD*V[N3,;N3@G DA@PDA@Q8@JN!!''Y*MJE"3,;N3,0A8^@PDA@Q8^@B](Y6Z#RYV,;N3,;L@^G!!8[G!!8^G @&)*V%H %U[N3,;N3
+@G!!8^F18^G!!8@I*V%IJEIER3,;N3,0@C@0M,@0M8^@BT%)RR!!RIS,;N3,;L@@0LC@0LC@0L@$)JO#(H"T+LA,0F1@@@@@@@@@@@@@IHA# FAH%F3@[LA,Z*''
+)JJ^&)"T$(>N@X8A RIO,0F1@PDA):R"'')*X%IHA@PFI@W<"S*4A*J^''):^''$9BL"(^D#8>O @E>H"&-@PDA@PF'')9NP#H*G!!@DA@PDA @<)R$!!GQTD?OS$8
+MSL.I2H"H"H"H"HO,;N3,;N3,;N3,;N3,;N3,;N3,;N3,0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 50 164 0 50 171 0 137 0 0 206 0 1 50 177 2 56 178 3 64 241 3 67 246 3 73 255 4 74 255 5 63 191 7 66 194 10 71 196 10 79 255 12 59 167 12 82 255 14 77 199 18 83 201 19 88 255 21 91 255 23 89 204 27 95 206 28 97 255 29 72 179 30 100 255 32 101 209 36 106 255 36 107 211 39 109 255 41 113 214 45 115 255 45 119 216 48 118 255 50 87 176 50 125 219 51 88 176 51 88 177 52 89 178 52 90 178 53 90 178 53 127 212 54 91 179 54 123 255 54 131 221 55 92 180 55 95 181 56 93 180 56 94 181 57 127 255 57 149 229 58 99 184 58 137 224 61 104 187 63 132 255 63 143 226 64 108 190 66 113 193 66 135 255 67 149 229 68 157 232 69 117 196 71 155 231 72 122 199 72 141 255 75 126 202 75 144 255 75 160 234 77 163 236 78 131 206 80 149 255 81 136 209 84 140 212 84 153 255 87 145 215 88 157 255 91 168 235 93 161 255 94 154 222 96 157 223 96 165 255 97 159 225 98 160 225 98 162 226 99 163 227 100 165 228 101 166 229 101 170 255 102 167 230 103 169 231 104 170 232 104 173 255 105 172 233 105 174 234 106 175 235 109 178 255 112 180 255 117 186 255 119 187 255 122 154 245 125 160 253 125 193 255 126 161 253 126 194 255 127 162 254 130 165 254 132 200 255 132 201 255 133 60 36 135 170 255 139 207 255 140 175 255 144 179 255 149 184 255 153 188 255 157 192 255 162 196 255 166 200 255 170 204 255 174 208 255 174 218 230 177 212 255 181 215 255 185 219 255 188 222 255 191 225 255 212 211 224 218 217 230 219 219 230 220 220 231 222 221 232 223 223 233 225 224 234 225 225 234 226 226 237 227 226 235 227 227 236 227 227 238 228 228 237 229 229 239 231 230 238 231 231 238 231 231 240 232 232 241 233 232 239 233 233 240 234 234 242 235 234 241 236 236 243 237 236 242 237 237 244 238 237 243 238 238 244 239 238 243 239 239 245 240 239 244 241 240 245 241 241 246 241 241 247 242 242 246 242 242 247 243 243 247 243 243 248 244 244 248 244 244 249 245 244 247 246 246 249 246 246 250 247 246 249 247 247 250 248 248 251 249 249 250 249 249 251 250 250 251 250 250 252 251 251 252 251 251 253 253 253 254 254 254 255 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????????@@@C') ; yourself); yourself]
+!
+
+history22x22Icon
+    "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 history22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#history22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class history22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ATUEQTUEQTUE@@@@@@@@@@@@@@@@@@UGQ4]DPP''I!!TT@@@@@@@@@@@@@@@@EQ4]GP$K@"XUG!!PT@@@@@@@@@@@@@AT]GQ4IDPX&EAPTEAP@@@@@@@@@@@@U
+GQ4]C1DEI!!<\HQP^EAP@@@@@@@@@EQ4]GQLIFQ,%E!!\TEAPTE@@@@@@@@AT]GQ4]BRH&@0 UEA0!!EA8TE@@@@@@UGQ4SDPP(D"PMA1PVE1PTEAPT@@@@EQ4S
+C1 [G0(RH2PTBATTGBDTG!!P@@AT]GQDZF08PB DRE@4GEAXWEAPTE@@UGP<LAPX&C!!< D!!P#IAPHEQP\HQP@EQ4@H TFI 8(B DT@QHTCP\TE!!\T@AT]ABHE
+F!!,NJ@(AEB@REBL$E@ UE@@UGRHYF XBC!!<J@QPJ@QPAD!!PMA1P@EP$"H TFI 8(B DTB DTHAHTH2PT@APTEAPTEAPTEAPTE@(AE@(AE@DRE@@@@@@UBRH"
+APX&C" J@QPJ@QP D!!P@@@@@EAPTEAPTEAPTEAPTB DTB DT@@@@@@@@@ATIH"HEA"XNJ@(AE@(AE@@@@@@@@@@TEAPTEAPTEAPTEAPJ@QP@@@@@@@@@@@@@
+EP$"H TFI 8(B DT@@@@@@@@@@@@@APTEAPTEAPTEAPTE@@a') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_<@@_>@@_? @_?0@_?<@_?>@_?? _??0_??8_??<_??<_??<_??<_??<_??<_??<C??<C??<@_?<@_?<@C?<@C?<') ; yourself); yourself]
+!
+
+history22x22Icon2
+    "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 history22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#history22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class history22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@ATUEQTUEQTUE@@@@@@@@@@@@@@@@@@UGQ4]DPP''I!!TT@@@@@@@@@@@@@@@@EQ4]GP$K@"XUG!!PT@@@@@@@@@@@@@AT]GQ4IDPX&EAPTEAP@@@@@@@@@@@@U
+GQ4]C1DEI!!<\HQP^EAP@@@@@@@@@EQ4]GQOW5=_W51\TEAPTE@@@@@@@@AT]GY!!9Z]_Q/9SV!!FP!!EA8TE@@@@@@UG_RCSU6]=6W^Y&60ZAPTEAPT@@@@E]*=
+RT_(,/M#9"9Z983_GBDTG!!P@@KRA[MJK-%Y42^JP#%''_\QXWEAPTE@BUO/D<)[GC*=&#"TU^87?_EQP\HQSW(CT7S9==1G",J<6)-TY>\P\TE!!\T5>WTP<.<
+-:J[!!7O6+35:''''D$E@ UEM]KT26>!!)23;VBR0G[.0/U1D!!PMA1SW)NA0%4D;"F?\ .R(672Z\QHTH2PT5502\$1;)<_,V9$4LUS07WDAE@DREM_J$= :X)X8
+P,UH.;''U$UC_@QP D!!P@TZ[)#X)NPET/.''T634P3B DTB DT@H=WVK!!7N^E!!J.J-:8WHT@(AE@(AE@@@LL;SO4+A;6-''[*9_*!!PTEAPJ@QP@@@CSZ%K*4JG5
+3O"@+ TFI 8(B DT@@@@@@AR\WE1\WG8EAPTEAPTEAPTE@@a') ; colorMapFromArray:#[250 250 255 225 225 237 236 236 244 213 213 228 245 245 252 241 241 248 239 239 246 216 216 230 210 210 224 252 252 255 229 229 239 248 248 254 244 244 250 219 219 232 234 234 243 253 253 255 232 232 241 249 249 254 224 224 236 254 254 255 156 156 182 208 208 223 206 206 221 204 204 219 246 246 253 242 242 249 240 240 247 238 238 245 215 215 229 255 255 255 211 211 225 230 230 240 228 228 238 201 201 218 243 243 249 222 222 235 220 220 233 218 218 231 235 235 244 233 233 242 231 231 240 0 0 0 210 226 249 14 16 17 130 130 154 76 115 210 167 187 210 222 247 254 128 128 152 123 181 246 200 202 216 55 55 77 146 201 252 218 219 227 149 200 245 134 176 227 202 241 254 206 236 248 133 192 249 133 190 249 167 214 246 95 162 248 224 220 226 182 182 198 219 243 254 120 179 246 209 246 254 122 178 238 122 120 149 140 184 216 117 135 177 200 208 222 189 232 254 227 226 232 163 169 189 209 206 211 119 179 248 219 216 224 206 242 254 169 220 254 102 100 129 137 139 160 121 121 141 170 189 222 99 167 248 233 253 254 233 251 254 131 131 154 188 185 200 159 163 188 178 182 200 176 225 254 182 181 194 218 218 226 122 159 211 83 82 110 2 3 4 175 181 230 164 214 252 185 202 233 123 123 149 190 198 218 201 198 209 150 161 182 87 87 107 177 177 192 69 69 86 163 171 198 228 227 232 168 167 183 125 129 154 60 64 67 82 134 224 56 57 73 103 158 228 46 60 73 197 213 241 187 235 254 97 160 245 162 190 213 214 254 254 163 163 181 77 115 189 143 197 247 76 111 188 194 236 254 149 145 167 111 110 133 57 57 80 183 184 197 46 62 79 182 182 196 124 124 149 122 120 147 142 197 249 18 22 25 71 92 110 44 54 57 181 231 254 194 227 247 92 92 114 142 178 219 141 178 218 139 139 160 198 243 254 112 117 150 68 90 110 213 210 216 170 170 187 168 168 185 187 230 253 103 160 240 166 166 183 168 220 254 137 135 161 116 145 160 134 191 247 206 209 222 153 150 170 184 230 253 184 183 197 162 162 182 164 208 230 158 188 201 201 198 207 202 242 254 178 177 191 163 214 252 102 164 245 145 192 231 13 13 19 219 248 254 160 194 206 169 207 228 124 123 151 144 200 253 123 123 150 209 241 254 228 238 243 62 76 90 169 169 185 128 185 247 226 249 254 178 226 253 179 183 198 142 200 254 206 241 254 167 215 252 166 215 251 192 192 204 116 163 235 189 188 201 94 134 177 179 187 201 57 95 187 213 242 254 203 243 254 203 241 254 136 136 162 170 218 248 82 81 109 210 232 251 153 153 172 154 208 252 129 128 155 36 47 57 110 110 133 106 123 162 160 159 182 200 197 208 171 191 219 166 166 181 191 201 222 107 158 222 141 141 163 192 191 203 142 169 210 224 254 254 167 168 185 71 131 236 47 63 77 127 123 149 196 197 210 159 158 177 177 192 221 241 254 254 221 254 254 166 166 187 65 98 134 201 198 208 195 221 235 178 177 192 201 216 231 192 195 209 155 154 176 118 133 166 153 196 220 55 51 48 39 88 214 151 154 195 94 120 172 181 195 221 171 171 188 149 158 216 167 167 184 146 146 170 154 206 247 189 200 222 105 105 133]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_<@@_>@@_? @_?0@_?<@_?>@_?? _??0_??8_??<_??<???<???<???<???<???<???<_??<_??<O??<G??<A??<') ; yourself); yourself]
+!
+
+image22x22Icon
+    "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 image22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#image22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class image22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@LC@0LC@0LC@0LC@0LC@0LC@@@@@@@C@0LC@0LC@0LC@0LC@0LC@0@@@@@@
+@0LC@ HB@ HB@ LC@0LC@0L@@@@@@@LC@ HB@ HB@ HB@0LC@0LC@@@@@@@C@ HB@ HD@ HD@ HC@0LC@0@@@@@@@0HB@ HB@ HB@ HB@ LC@0L@@@@@@@LB
+A@HB@ HB@ HB@ HC@0LC@@@@@@@C@ HB@ HBA@HD@ HB@0LC@0@@@@@@@0HB@ HD@ HB@ HB@ LC@0L@@@@@@@LB@ HB@ HB@ HB@ HC@0LC@@@@@@@C@0HB
+@ HB@ HD@ HB@0LC@0@@@@@@@0HD@ HB@ HB@ HB@ LC@0L@@@@@@@LB@ HB@PDA@ HB@0LC@0LC@@@@@@@C@0HB@ HA@PHB@0LC@0LC@0@@@@@@@0LC@0LC
+@PDC@0LC@0LC@0L@@@@@@@LC@0LC@0DA@0LC@0LC@0LC@@@@@@@DA@PDA@PA@PPDA@PDA@LC@0@@@@@@A@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[87 87 87 133 60 36 0 206 0 174 218 230 0 137 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3@@@C') ; yourself); yourself]
+!
+
+imageEditor22x22Icon3
+    "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 imageEditor22x22Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor22x22Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class imageEditor22x22Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@D)GRAH@@@@@@@@@@@@@@@@@@@@@@C8PZB\*N@@@@@@@@@@@@@@@@@@@@@A-G%MQS@\@@@@@@0LC@0LC@0LC@0L9VRETN 0*@@@@
+@@LC@0LC@0LC@0LCXQ5&C48K@@@@@@@C@0LB@ HB@ HC@1,#Z30_QP@@@@@@@0LB@ HB@ HD@$DVOT<S[@@@@@@@@@LB@ HBA@HB@ H7UQ$?Z!!0@@@@@@@@C
+@ HB@ HB@ I\H%YDV5@C@@@@@@@@@0HB@ HB@ HDFDHMI$-I@0@@@@@@@@LB@ HB@ PBISQCX 8/@0L@@@@@@@@C@ HBA@HB@&A_LP((Y0LC@@@@@@@@@0HB
+@ HB@"8UF&M$A#HC@0@@@@@@@@LC@ HB@ IRKST3N58C@0L@@@@@@@@C@ HB@ HBSR@QBFU]@0LC@@@@@@@@@0HB@ DA@R$''EA\+@0LC@0@@@@@@@@LC@ HB
+@PD,I6%Z@0LC@0L@@@@@@@@C@0LC@0DAL@%F@0LC@0LC@@@@@@@@@0LC@0LA@SX$@0LC@0LC@0@@@@@@@@LC@0LD@PE@@0LC@0LC@0L@@@@@@@@C@0PDA@PD
+A@PDA@PC@0LC@@@@@@@@@0PDA@PDA@PDA@PDA@PC@0@@@@@@@@PDA@PDA@PDA@PDA@PDA@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[87 87 87 133 60 36 0 206 0 174 218 230 0 137 0 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 22; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C0@@G8O??8O??8O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0O??0@@@@@@@@') ; yourself); yourself]
+!
+
+loadFromFile22x22Icon
+    "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 loadFromFile22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#loadFromFile22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class loadFromFile22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BF''(^H@@@@@@@@@@@@
+@@@@@@@@@@BF%IFK#8P@@@@@@@@@@@@@@@@@@@B_!!)F@ (J#(0@@@@@@@@@8B0,0L@^_*Z&Q 8J$#((@@@@@@@@GA!!L$H(ZY*:^[%XNB)G6#(0@@@@@@A2 (
+JJJ# IY?&9VC *RP_Y4@@@@@@E((X9I;%)ZV_9.U 8JM)HXCM&5 @@@!!L72A%)ZV%''>[%XNL)(XCO3<?X@@@HQQK_IZVBP$G]''Y6]''XSD6=/O0D@@BE3XW0O
+BP9#X6M#IBP(JC<_YR(@@@AFZ4)QK&8<N3, HB@3L68JO1\@@@@@QUD%W4\ \2@ RD +EAHR]Q(,@@@@@GDUL''P U3EHLT!!UUT!!UUR=8I0@@@@@MNQ$[W"M*
+\@T^APUS^T5$M@@@@@@@CWYP^U%YVQ0\Y34XOTP7U @@@@@@@@L>WT1LI$0&X$9&VAXQ[@@@@@@@@@A\P$QRPF!!2BG]AJT$@@@@@@@@@@@@@RTM)GS(BD@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[223 191 95 128 127 112 160 144 128 175 143 112 224 223 207 255 224 127 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 192 176 144 239 224 223 175 143 111 239 224 176 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 240 208 127 160 127 63 176 159 112 255 224 96 207 160 64 224 208 175 239 208 144 240 223 95 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 255 255 224 255 223 112 255 240 223 255 223 143 255 208 64 208 192 191 255 255 223 160 143 127 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 255 224 144 239 208 112 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 207 191 128 239 208 111 144 112 96 255 240 191 255 239 192 240 224 95 192 144 48 240 239 208 224 192 64 144 112 95 160 127 47 127 80 47 255 224 111 176 144 96 176 159 96 240 223 176 240 239 144 176 175 159 240 224 144 255 239 191 240 208 64 255 239 128 239 208 79 223 208 208 191 144 64 240 223 143 240 208 63 255 239 127 240 240 192 255 239 159 144 112 79 240 224 143 191 159 63 240 223 80 207 176 112 240 240 191 175 143 127 224 192 112 240 223 112 208 176 80 176 159 127 255 224 160 240 223 79 255 240 208 207 191 112 239 239 207 208 176 79 255 223 95 192 160 63 128 111 48 255 223 127 255 224 159 159 127 95 176 160 112 255 240 207 255 255 240 240 224 112 176 143 96 160 143 48 240 239 160 166 166 166 239 223 175 239 192 96 143 111 64 160 143 95 255 224 128 0 0 0 226 226 226 181 181 181 231 231 231 144 144 144 252 252 255 246 246 246 211 211 211 234 234 251 239 239 254 120 120 120 240 240 240 195 195 195 130 130 130 135 135 135 93 93 93 114 114 114 219 219 219 224 224 224 219 219 219 238 238 253 224 224 224 229 229 229 243 243 255 159 159 159 143 143 143 134 134 134 242 242 255 255 255 255 168 168 168 123 123 123 138 138 138 91 91 91 248 248 255 135 135 135 107 107 107 133 133 133 138 138 138 83 83 83 161 161 161 172 172 172 172 172 172 232 232 232 135 135 135 201 201 201 253 253 255 121 121 121 231 231 231 46 46 46 206 206 206]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@A8@@C<@@G>@O?>@_??@_??@_??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+loadFromMethod22x22Icon2
+    "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 loadFromMethod22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#loadFromMethod22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class loadFromMethod22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4/A0\GOS4=OS4=OS4=
+OS4=OS4=OS4/A6X?QPL=OS4=OS4=OS4=OS4=OS4IK6ZETE@^G#4=OS4=OS45KR43L3DIQTVE!!UAOT@D=OS4=OS41M&Q? "<IM8RE!!XVES4T^G#4=OS4=LXFA
+ Q8^YXVE!!X^E!!T=EQP@=OS4=OSJA_!!AE!!HVE!!X^G!!8VES2<[K"P#OS4,_BX<!!HVE!!X^G!!8^EM2<[X&I"H34=KG]8I(RDP$H1Q$YFQ$Y$YHNCX X=OR1!!\"X>
+P$5>_''9>_7>A VJ@S!!X=OS4!!\U9XN''59^0I6]''XB@!!E_X"H=OS4=HE!!+NU%6XPI6@&@B]0I:SDPXOS4=OQ=SRQ%6WQDB\@HB]PHQ]T,TN34=OS4ZRCAJU6$B
+V69\[&8B[7P4GS4=OS4=F$X''[5TQ@%YVZE),V&5CB34=OS4=OQ,*PUIRY5I''UD\8JAHNC34=OS4=OS4\DV5QPB,SB  LERT=OS4=OS4=OS4=IPHEA@4WJS4=
+OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OP@a') ; colorMapFromArray:#[111 104 104 112 112 112 127 80 40 127 120 120 128 96 64 128 104 48 128 120 112 128 128 128 143 104 64 143 136 136 144 112 48 144 112 72 144 112 88 144 112 96 159 112 64 159 120 88 159 152 152 160 120 40 160 120 56 160 136 48 160 136 88 160 136 120 160 144 104 160 144 128 160 152 112 160 160 160 175 136 104 175 136 112 175 136 120 175 152 128 175 168 168 176 136 96 176 144 96 176 152 96 176 152 112 176 152 120 176 160 112 176 168 152 176 176 176 191 144 64 191 152 56 191 168 160 192 144 48 192 160 56 192 160 104 192 176 144 192 176 152 192 192 192 207 160 64 207 168 112 207 176 112 207 176 120 207 184 112 207 184 128 207 192 160 207 200 200 208 176 72 208 176 80 208 176 104 208 192 184 208 208 208 223 184 88 223 192 104 223 216 216 224 192 64 224 192 112 224 192 128 224 200 104 224 208 168 224 224 224 239 192 96 239 208 72 239 208 104 239 208 112 239 208 144 239 216 152 239 216 168 239 224 176 239 232 200 239 232 232 239 232 248 240 208 56 240 208 64 240 208 120 240 216 72 240 216 80 240 216 88 240 216 112 240 216 136 240 216 176 240 224 88 240 224 112 240 224 120 240 224 136 240 224 144 240 224 184 240 232 144 240 232 160 240 232 208 240 240 168 240 240 208 240 240 240 240 240 248 255 208 64 255 216 88 255 216 112 255 216 120 255 216 136 255 224 96 255 224 104 255 224 120 255 224 128 255 224 144 255 224 152 255 224 160 255 232 120 255 232 128 255 232 152 255 232 168 255 232 176 255 232 184 255 232 192 255 240 176 255 240 184 255 240 192 255 240 200 255 240 208 255 240 216 255 240 224 255 248 216 255 248 224 255 248 240 255 248 248 168 216 224 0 136 0 0 204 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@A8@@C<@@G>@O?>@_??@_??@_??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+loadImageFromFile22x22Icon
+    "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 loadImageFromFile22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#loadImageFromFile22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class loadImageFromFile22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4/A0\GOS4=OS4=OS4=
+OS4=OS4=OS4/A6X?QPL=OS4=OS4=OS4=OS4=OS4IK6ZETE@^G#4=OS4=OS45KR43L3DIQTVE!!UAOT@D=OS4=OS41M&Q? "<IM8RE!!XVES4T^G#4=OS4=LXFA
+ Q8^YXVE!!X^E!!T=EQP@=OS4=OSJA_!!AE!!HVE!!X^G!!8VES2<[K"P#OS4,_BX<!!HVE!!X^G!!8^EM2<[X&I"H34=KG]8I(RDP$H1Q$YFQ$Y$YHNCX X=OR1!!\"X>
+P$5>_''9>_7>A VJ@S!!X=OS4!!\U9XN''59^7-6]''Y<_G5_X"H=OS4=HE!!+NU%6XWY6XFA#]7):SDPXOS4=OQ=SRQ%6WWA \FA5]VA5]T,TN34=OS4ZRCAJU6%*
+V69\[&93[7P4GS4=OS4=F$X''[5UUUUYVZE),V&5CB34=OS4=OQ,*PUIRY5I''UD\8JAHNC34=OS4=OS4\DV5QPB,SB  LERT=OS4=OS4=OS4=IPHEA@4WJS4=
+OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4=OP@a') ; colorMapFromArray:#[111 104 104 112 112 112 127 80 40 127 120 120 128 96 64 128 104 48 128 120 112 128 128 128 143 104 64 143 136 136 144 112 48 144 112 72 144 112 88 144 112 96 159 112 64 159 120 88 159 152 152 160 120 40 160 120 56 160 136 48 160 136 88 160 136 120 160 144 104 160 144 128 160 152 112 160 160 160 175 136 104 175 136 112 175 136 120 175 152 128 175 168 168 176 136 96 176 144 96 176 152 96 176 152 112 176 152 120 176 160 112 176 168 152 176 176 176 191 144 64 191 152 56 191 168 160 192 144 48 192 160 56 192 160 104 192 176 144 192 176 152 192 192 192 207 160 64 207 168 112 207 176 112 207 176 120 207 184 112 207 184 128 207 192 160 207 200 200 208 176 72 208 176 80 208 176 104 208 192 184 208 208 208 223 184 88 223 192 104 223 216 216 224 192 64 224 192 112 224 192 128 224 200 104 224 208 168 224 224 224 239 192 96 239 208 72 239 208 104 239 208 112 239 208 144 239 216 152 239 216 168 239 224 176 239 232 200 239 232 232 239 232 248 240 208 56 240 208 64 240 208 120 240 216 72 240 216 80 240 216 88 240 216 112 240 216 136 240 216 176 240 224 88 240 224 112 240 224 120 240 224 136 240 224 144 240 224 184 240 232 144 240 232 160 240 232 208 240 240 168 240 240 208 240 240 240 240 240 248 255 208 64 255 216 88 255 216 112 255 216 120 255 216 136 255 224 96 255 224 104 255 224 120 255 224 128 255 224 144 255 224 152 255 224 160 255 232 120 255 232 128 255 232 152 255 232 168 255 232 176 255 232 184 255 232 192 255 240 176 255 240 184 255 240 192 255 240 200 255 240 208 255 240 216 255 240 224 255 248 216 255 248 224 255 248 240 255 248 248 168 216 224 0 136 0 0 204 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@A8@@C<@@G>@O?>@_??@_??@_??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+loadImageFromMethod22x22Icon
+    "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 loadImageFromMethod22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#loadImageFromMethod22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class loadImageFromMethod22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+OS4=OS4=OS4=OS4=OS4=OS4=OS4=OS4@@@@@@C4=OS4=OS4=OS4=OS4=OS4=@@@@@@@=OS4=OS4=OS4=OS4=OS4=@@@@@@@@OS4=OS4/A0\?OS4=OS4=OP@@
+@@@@@@@=OS4/A6X?G#<=OS4=OS4@@@@@@@@=OS4IK6ZE!!E@^O34=OS4=OP@@@@@@@@@IQTVE!!XQOT@$=OS4=OP@@@@@@@B<IM8RE!!XVE!!DT?BS4=OS4@@@@@
+@A8^YXVE!!X^E!!T>DQS<IOS4=@@@@@AAE!!HVE!!X^G!!8VE!!D<?I @@OP@@@BX<!!HVE!!X^G!!8^E!!XRDI @@@C4@@@@@I(RD!!XVG!!8^G!!XRDI @@@@@=@@@@@BX<
+!!HREB(^G!!XQPI @@@@@=OPBI"X&II#2D!!HVE!!TUPI(&I"X&I"S4@"X2L#H0&!!HRD!!TUPK82L#H2L"8$=@H&L"H"H"BYE!!DT/K8"H"H"H"H*IOPBI#H"H"(*J
+"(*J"(*J"(*J"H"J"S4@"X2H"H"H"H"H"H"H"H"H"H"H"($=@H&L"H"H"H"H"H"H"H"H"H"H"H*IOPBI"8*J"(*J"(*J"(*J"(*J"(*J"S4@"X&I"X&I"X&I
+"X&I"X&I"X&I"X$=@@@@@@@@@@@@@@@@@@@@@@@@@@@=OP@a') ; colorMapFromArray:#[111 104 104 112 112 112 127 80 40 127 120 120 128 96 64 128 104 48 128 120 112 128 128 128 143 104 64 143 136 136 144 112 48 144 112 72 144 112 88 144 112 96 159 112 64 159 120 88 159 152 152 160 120 40 160 120 56 160 136 48 160 136 88 160 136 120 160 144 104 160 144 128 160 152 112 160 160 160 175 136 104 175 136 112 175 136 120 175 152 128 175 168 168 176 136 96 176 144 96 176 152 96 176 152 112 176 152 120 176 160 112 176 168 152 176 176 176 191 144 64 191 152 56 191 168 160 192 144 48 192 160 56 192 160 104 192 176 144 192 176 152 192 192 192 207 160 64 207 168 112 207 176 112 207 176 120 207 184 112 207 184 128 207 192 160 207 200 200 208 176 72 208 176 80 208 176 104 208 192 184 208 208 208 223 184 88 223 192 104 223 216 216 224 192 64 224 192 112 224 192 128 224 200 104 224 208 168 224 224 224 239 192 96 239 208 72 239 208 104 239 208 112 239 208 144 239 216 152 239 216 168 239 224 176 239 232 200 239 232 232 239 232 248 240 208 56 240 208 64 240 208 120 240 216 72 240 216 80 240 216 88 240 216 112 240 216 136 240 216 176 240 224 88 240 224 112 240 224 120 240 224 136 240 224 144 240 224 184 240 232 144 240 232 160 240 232 208 240 240 168 240 240 208 240 240 240 240 240 248 255 208 64 255 216 88 255 216 112 255 216 120 255 216 136 255 224 96 255 224 104 255 224 120 255 224 128 255 224 144 255 224 152 255 224 160 255 232 120 255 232 128 255 232 152 255 232 168 255 232 176 255 232 184 255 232 192 255 240 176 255 240 184 255 240 192 255 240 200 255 240 208 255 240 216 255 240 224 255 248 216 255 248 224 255 248 240 255 248 248 168 216 224 0 136 0 0 204 0 32 223 32 64 64 64 16 111 16 170 170 170 199 247 199]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@A8@@C<@@G>@@O>@@??@A?? C?? G??@C?>@C?<@_??8_??8_??8_??8_??8_??8_??8_??8@@@@') ; yourself); yourself]
+!
+
+make22x22Icon
+    "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 make22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#make22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class make22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@DA@PDA@PD@@@@@@@@A@PDA@PDA@P@A@PDA@PDA@@@@@@@@@PDA@PDA@PD@@PDA@PDA@P@B@0P@@@DA@PDA@PDA@@DA@PDA@PTFA0 IB ,LCPDA@PDA@P@A
+@PDA@P8LC@,LC1@QC1HA@PDA@PDA@PDA@PDCD1LSD1LSD1LTEQXA@PDA@PDA@PDWFA$YFQLZFQ$YF1$SG@DA@PDA@Q4^G2@!!F2H#IBT&HRD!!D2\A@PDA@PDX
+G1<_G2 )@@DAJ",_HR0A@PDA@PDAKR8/LCD''@@@A@SH3LA<4MPDA@P@@@@@6M3 9@PDA@PDAN#,8NBX5@PD@@A4<OS4=O DA@PDA@SX?OS5@MPDA@@AAP$MC
+OTPA@PDA@SH3OS=EQ DA@P@@Q4!!IP4MJ@PDA@PEKSDMCSPDA@PD@@@ANM$=PTUHA@PESUEAPTE@5@PDA@@@@UUYWU5]XVU%ZV5AWWE1]@PDA@PD@@EU^U5]W
+U5]XU5]WU5= XPDA@P@A@@@@X&L6YFQ$YFQ$YFQ%@@@A@PD@@P@@@@A&N&]''ZF]''ZV)$W0@@@PDA@@D@@@@@@TE+R ]''Y61-[ @@@@DA@P@A@@@@@@DA[4Y0
+\S9!!@@@@@@@A@PD@\''I2\''I2\''HA@PE2\''I2\''I2@PDA\ @a') ; colorMapFromArray:#[240 240 224 240 232 224 176 184 208 143 144 200 143 144 208 175 176 216 207 200 224 144 160 192 111 112 208 111 104 208 128 136 184 143 152 200 112 112 208 175 168 216 128 144 200 112 112 216 127 128 208 112 120 208 111 104 168 127 120 216 127 120 176 160 176 208 192 200 224 208 208 232 144 160 200 127 120 224 127 120 208 128 128 224 208 208 216 175 176 208 143 144 216 143 136 232 128 136 224 128 128 232 112 112 176 143 136 152 176 176 184 160 168 192 143 136 216 160 160 168 112 112 168 191 184 184 175 176 200 143 144 224 127 120 144 207 200 208 144 152 208 143 144 240 143 136 240 128 128 208 223 216 232 144 160 208 159 152 216 191 184 192 159 168 200 144 144 232 144 144 248 127 120 168 159 168 208 144 144 240 144 152 224 159 152 248 144 144 168 159 152 240 143 136 208 160 168 200 159 152 232 160 160 248 160 160 184 128 128 160 176 176 176 192 200 208 144 144 192 159 160 232 160 160 200 175 184 208 159 160 224 176 176 216 208 216 216 160 168 240 175 168 248 160 160 232 223 216 224 192 200 216 159 160 208 160 176 200 160 168 224 176 176 248 176 176 240 224 224 240 176 184 216 159 168 216 175 168 240 143 136 192 175 176 240 143 136 160 191 184 200 175 168 176 159 160 192 159 152 192 191 184 248 175 168 208 176 184 200 192 192 248 176 184 240 160 160 208 175 176 232 191 184 232 144 144 160 175 176 184 159 152 160 192 200 200 176 176 192 144 152 176 239 232 224]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@@C@G@C@_<C@?<C@??CA??#G??#G<_CG8O#C0O3O0O3O0_#O0_CG8?#G??CG??CC?<CA?<C@?8C@_ C@@@G') ; yourself); yourself]
+!
+
+newBookmark22x22Icon
+    "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 newBookmark22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#newBookmark22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class newBookmark22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@C<?C <OO3<?O3=APSM@O3<@@@@@@@@?N@8OW DAO3ISPSL3L5@?@@@@@@@@XF@;AA4B@CIOI1)QM 03T@@@@@@@@@XGH%PPQR%_MU4*JG])ZU@@@@@@@@@F
+YC1!!@3\\QA-CCW]4]6%P@@@@@@@@O19WG4X+DT]7]1)7\7]P]7\@@@@@@C<YU$$EX%U7[7%7^WI9]7%/]0@@@@@?O0-JD6L.M'']0^GU.]W!!0]0@@@@@@O3<?
+ZB<UBFU1]7%.]&99]0@@@@@@@C<?O3=(H1XIZ7]9[''Y.^W\@@@@@@@@?O3<?O40>QW]0^GU.]W!!0]0@@@@@@O3<?O3<%LW]/^W]9\''%7^V=7@@@@@C<?O3<?
+O49-]7],]7M7O7]7@@@@@@@?O3<?O3<?FE@?O7]4]3<?@@@@@@@@O3<?O3<?O5APO3<?]3<?O0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[237 93 63 240 72 43 255 96 56 255 110 74 255 125 93 255 116 81 244 165 152 255 175 155 255 102 64 255 95 55 96 57 66 215 109 88 224 81 58 255 52 2 230 114 94 241 101 71 255 107 70 255 94 54 255 87 44 255 136 106 255 61 12 255 113 78 255 104 67 252 101 65 208 79 60 223 96 73 255 55 5 255 71 26 255 92 51 255 105 68 252 134 104 255 138 109 255 58 8 255 80 37 255 186 169 255 130 99 255 100 62 190 136 133 236 53 17 255 56 6 255 70 24 255 89 47 255 51 1 255 104 66 255 64 17 255 67 20 255 99 60 255 164 142 109 41 45 252 109 74 197 81 70 241 57 15 255 57 7 255 68 22 255 90 48 255 101 63 236 144 129 255 75 30 255 77 33 255 167 145 255 180 162 255 63 15 255 108 72 255 255 255 159 49 39 241 51 8 255 52 1 255 61 13 255 81 38 255 98 59 255 111 75 255 85 42 255 87 45 255 162 139 255 183 164 255 73 28 238 109 78 120 41 44 212 97 79 248 64 20 77 77 77 255 84 41 255 97 58 247 36 9 255 129 98 255 97 57 252 170 150 255 181 162 255 83 40 255 76 32 120 45 46 220 64 38 252 51 2 255 58 9 239 97 68 241 73 37 241 132 110 255 128 96 255 106 69 255 109 72 255 178 158 255 93 52 255 86 43 114 46 52 212 117 99 248 53 7 223 191 95 239 224 223 255 239 176 240 240 191 255 248 200 255 248 24 255 248 88 240 240 240 255 248 152 255 248 96 255 248 48 255 248 176 255 248 248 240 144 24 255 248 136 240 208 24]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@A0^@C=?@G?? G?? G?? C??0C??8A??0@?? @_? @O?0@O?8@G>0@CN@@CD@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+newDirectory22x22Icon
+    "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 newDirectory22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#newDirectory22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class newDirectory22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 20; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@HL@@@@@@@@@@@@@@@@@@@@@@@@@@HN@ 0@@@@@@@@@@@@@@@@@@@@BC 0BC_8L@ 8L@@@@8B0,0L@\@@@BC^8VC!!W:E 8U; 0@G
+A!!L$H" 0LC@0LHM=!!HE< XQ= 0@@A2 (JB (X6M.[&83 8U< ''2E 0@@@E((X3M.[#L3N3-[R8NE_HI<!!XM @@@!!L5,3N3-KKQP5EHM=!!HE< XQ= 0@@HQQK
+KQP BP$G](M;!!XNE_(VC!!W.C@BE3XVDOBP9#X6M# 8L( 7>CYXNC@@AFZ4)QK&8<N3, HB@3L8N@ 1\@@@@@QUD%W4\ \2@ RD +EAHR 1(,@@@@@GDUL''P
+U3EHLT!!UUT!!UUR=8I0@@@@@MNQ$[W"M*\@T^APUS^T5$M@@@@@@@CWYP^U%YVQ0\Y34XOTP7U @@@@@@@@L>WT1LI$0&X$9&VAXQ[@@@@@@@@@A\P$QRPF!!2
+BG]AJT$@@@@@@@@@@@@@RTM)GS(BD@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[223 191 95 128 127 112 160 144 128 175 143 112 224 223 207 255 224 127 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 192 176 144 239 224 223 175 143 111 239 224 176 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 240 208 127 160 127 63 176 159 112 255 224 96 207 160 64 224 208 175 239 208 144 240 223 95 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 255 255 224 255 223 112 255 240 223 255 223 143 255 208 64 208 192 191 255 255 223 160 143 127 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 255 224 144 239 208 112 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 207 191 128 239 208 111 144 112 96 255 240 191 255 239 192 240 224 95 192 144 48 240 239 208 224 192 64 144 112 95 160 127 47 127 80 47 255 224 111 176 144 96 176 159 96 240 223 176 240 239 144 176 175 159 240 224 144 255 239 191 240 208 64 255 239 128 239 208 79 223 208 208 191 144 64 240 223 143 240 208 63 255 239 127 240 240 192 255 239 159 144 112 79 240 224 143 191 159 63 240 223 80 207 176 112 240 240 191 175 143 127 224 192 112 240 223 112 208 176 80 176 159 127 255 224 160 240 223 79 255 240 208 207 191 112 239 239 207 208 176 79 255 223 95 192 160 63 128 111 48 255 223 127 255 224 159 159 127 95 176 160 112 255 240 207 255 255 240 240 224 112 176 143 96 160 143 48 240 239 160 207 160 80 239 223 175 239 192 96 143 111 64 160 143 95 255 224 128 0 0 0 255 248 24 255 248 200 255 248 88 255 248 152 255 248 96 255 248 48 255 248 176 255 248 248 240 144 24 255 248 136 240 208 24]; mask:((Depth1Image new) width: 22; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@B@@@G@@@7XO1?<_??8_??0_??8_??8_??<_??8_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@@@@@') ; yourself); yourself]
+!
+
+newDirectory22x22Icon2
+    "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 newDirectory22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#newDirectory22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class newDirectory22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@H,@@@@@@@@@@@@@@@@@@@@@@@@@@H.G"0@@@@@@@@@@@@@@@@@@@@BK"0BK (,@"8,@@@@@@@@@@@@@@@BK^8:K#(BN"89;"0@@
+@@@@@@@@@@@@@H-=#H%:"X1="0@@@@@@@@@@@@@@@@A?"89:"''*N"0@@@@@8B0,0L@\@@@@@CH.N^():#(,@@@@GA!!L$H" 0LC@0LH-=#H%:"X1="0@@A2 (
+JB (X6M.[(-;#(.N H:K#''.K@E((X3M.[#L3N3-["8,T"8JKM(.K@@@!!L5,3N3-KKQP5EB@D@H.G"3<?X@@@HQQKKQP BP$G]''Y6]''XS"6=/O0D@@BE3XVDO
+BP9#X6M#IBP(JC<_YR(@@@AFZ4)QK&8<N3, HB@3L68JO1\@@@@@QUD%W4\ \2@ RD +EAHR]Q(,@@@@@GDUL''P U3EHLT!!UUT!!UUR=8I0@@@@@MNQ$[W"M*
+\@T^APUS^T5$M@@@@@@@CWYP^U%YVQ0\Y34XOTP7U @@@@@@@@L>WT1LI$0&X$9&VAXQ[@@@@@@@@@A\P$QRPF!!2BG]AJT$@@@@@@@@@@@@@RTM)GS(BD@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[223 191 95 128 127 112 160 144 128 175 143 112 224 223 207 255 224 127 207 192 160 207 175 112 144 112 48 224 192 128 240 224 191 192 176 144 239 224 223 175 143 111 239 224 176 223 192 111 191 175 160 159 112 64 255 240 176 240 240 208 255 239 176 240 208 127 160 127 63 176 159 112 255 224 96 207 160 64 224 208 175 239 208 144 240 223 95 128 96 64 240 224 127 255 240 224 255 239 175 192 160 111 255 255 224 255 223 112 255 240 223 255 223 143 255 208 64 208 192 191 255 255 223 160 143 127 160 144 111 240 240 175 160 159 112 240 239 176 208 176 111 239 223 159 207 176 127 255 224 144 239 208 112 255 240 192 175 159 128 240 239 175 192 176 159 224 207 111 207 191 128 239 208 111 144 112 96 255 240 191 255 239 192 240 224 95 192 144 48 240 239 208 224 192 64 144 112 95 160 127 47 127 80 47 255 224 111 176 144 96 176 159 96 240 223 176 240 239 144 176 175 159 240 224 144 255 239 191 240 208 64 255 239 128 239 208 79 223 208 208 191 144 64 240 223 143 240 208 63 255 239 127 240 240 192 255 239 159 144 112 79 240 224 143 191 159 63 240 223 80 207 176 112 240 240 191 175 143 127 224 192 112 240 223 112 208 176 80 176 159 127 255 224 160 240 223 79 255 240 208 207 191 112 239 239 207 208 176 79 255 223 95 192 160 63 128 111 48 255 223 127 255 224 159 159 127 95 176 160 112 255 240 207 255 255 240 240 224 112 176 143 96 160 143 48 240 239 160 207 160 80 239 223 175 239 192 96 143 111 64 160 143 95 255 224 128 255 248 200 255 248 24 15 56 160 255 248 88 239 232 240 240 240 240 255 248 152 48 80 176 255 248 96 48 88 176 240 240 248 207 216 240 223 216 224 255 248 48 224 224 232 255 248 176 255 248 248 240 144 24 255 248 136 63 96 184 240 208 24]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@B@@@G@@@7X@A?<@@?8@@?0O0?0_??8_??<_??8_??8_??8_??0_?? _?? _?? _??@_?>@_?<@_? @_0@@@@@@') ; yourself); yourself]
+!
+
+newItem22x22Icon
+    "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 newItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#newItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class newItem22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+!!P@@@@@@@@@@@@@@@@@@@@@@@@@@!!XT@@@@@@@@@@@@@@@@@@@@@@@@@@HVE@@@@@@@@@@@@@@@@@@@@0@@@@@BE!!P@@@@@@@@@@@@@@@@@@0LG@@@@@!!XT@
+@@@@@@@@@@@@@LC@@LCB0@C@0HVE@K^7-;^7-;^7-<CC1LCD1\S@1LO@!!PB7-+Z6-+Z6-+Z60L[G2L''H1<[@!!XT@-;Z6-+Z6-+Z6-+7@1L&92\S@@HVE@K^6
+-+Z6-+Z6-+Z60LSI.\''D0@BE!!PB7-+Z6-+Z6-+Z60L[G2L''H1<[@!!XT@.K"8.K"8.K"80LOD0LSE1LCD0<BE@@@@@@@@@@@@@@C@0@C@0,@@0LBE!!P@@@@@@
+@@@@@@@@@@@@0LG@@@BE!!XT@@@@@@@@@@@@@@@@@@@C@@@@@@HVE@@@@@@@@@@@@@@@@@@@@@@@@@@BE!!P@@@@@@@@@@@@@@@@@@@@@@@@@@!!XT@@@@@@@@@
+@@@@@@@@@@@@@@@@@HVE@@@@@@@@@@@@@@@@@@@@@@@@@@BE!!P@@@@@@@@@@@@@@@@@@@@@@@@@@!!XT@@@@@@@@@@@@@@@@@@@@@@@@@@HVE@@@@@@@@@@@@
+@@@@@@@@@@@@@@BE!!P@@@@@@@@@@@@@@@@@@@@@@@@@@!!P@a') ; colorMapFromArray:#[64 64 64 190 120 28 223 223 232 255 230 45 187 107 15 198 129 29 248 208 38 188 188 204 255 233 38 254 192 24 182 178 92 164 150 134 190 106 11 138 79 26 207 207 219 115 109 132 212 137 29 120 120 150 248 180 21 166 97 20 245 208 41 235 178 28 153 91 27 142 82 26 195 195 210 255 218 34 160 96 27 189 189 204 164 164 186 241 241 245 207 139 30 178 110 28 239 239 243 176 110 26 255 230 37 198 108 8 158 158 180 255 220 37 129 71 26 190 120 23 127 127 156 252 168 11 181 181 199 177 177 195 255 192 17 227 227 234 126 69 26 154 92 27 242 140 1 227 168 29 143 83 26 172 106 28 133 76 26 251 214 39 192 121 21 218 141 30 186 118 25 230 170 35 151 90 27 255 223 36 224 156 29 255 160 0 213 213 223 197 125 29 255 211 36 164 98 23 130 130 158 186 118 28 184 184 201 154 89 23 176 109 28 180 180 197 249 193 30 245 162 13 253 213 37 181 99 13 166 95 18 205 205 218 147 147 171 255 235 42 211 137 29 201 201 214 199 199 212 229 161 30 183 109 18 134 77 26 172 172 192 219 142 30 169 103 27 198 126 29 222 157 26 248 186 25 177 99 15 133 133 160 189 189 205 159 96 27 187 117 28 241 241 246 149 87 27 232 138 6 255 228 38 100 100 134 250 158 7 150 150 173 156 92 27 211 142 28 255 169 5 224 161 34 121 121 151 254 254 255 252 189 25 119 119 149 208 127 15 255 242 44 90 90 127 86 86 123 209 134 29 142 142 168 140 140 166 246 190 32 240 130 0 255 223 34 139 77 23 218 153 31 192 192 207 188 188 203 243 171 19 130 125 146 250 195 29 159 159 181 211 211 222 151 85 21 203 130 29 255 255 255 136 77 26 230 156 19 255 218 30 228 228 235 221 144 30 237 180 29 237 176 29 91 91 127 154 91 27 243 200 38 234 170 26 197 197 211 220 158 32 255 191 20 133 75 26 249 249 252 218 142 30 110 110 142 202 116 11 151 89 27 211 142 23 218 218 228 197 126 29 251 156 6 211 127 13 77 77 116 255 153 0 255 151 0 255 149 0 242 149 7 215 144 30 186 117 28 129 129 157 113 93 95 181 181 198 245 163 13 137 78 26 241 181 32 164 99 26 152 152 176 231 178 32 148 148 172 183 115 28 219 142 17 205 134 23 171 171 191 127 127 127 170 170 170 0 184 184 16 228 224 0 128 120 255 248 248 207 216 240 240 240 248 239 232 240 240 240 240 48 88 176 224 224 232 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@B@@@G@_??8_??<_??8_??8_??8_??8_??<_??8@@G@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+newWindowSpecIcon
+    "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 newWindowSpecIcon inspect
+     ImageEditor openOnClass:self andSelector:#newWindowSpecIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class newWindowSpecIcon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)_F%)ZV%)R@?EPY%C!!QKGW5ZM050ROG2<R,+KQL?Q7<>YE@6W''UIE#C1<U71<?F@<_EVVTIUSTY2U4@!!B6O1=OW1=_[5<_W4<W ^
+[#I''V6@QS''1_C?G7>O'':>_#7<Q PC@0LC@0LC@0LC@3.<_W::/+5<P09V@0JB (JB (JB 0LB/G5>.+:=_DLT"XLB 0LC@0LC@$LCOG7>O'':>_#7<S,''C@(L
+C@0LC@0ICOG4=_G5=/W1=_S1[@0JC@0LC@0LBP0L<_DL<_O1COG1OF4LBP$IBP$IBP$LC@$IB_G2<P$ICBP(C@0LC@0LC@0LC@0LC@0L<P0LC@1*[00IBP$I
+BP$IBP$IBP$IBP$IBP$LOWDLBPLC@0LC@0LC@0LC@0LC@0HACBT*C@$C@0LC@0LC@0LC@0LC@0LB@P0%_ 0I@0LC@0LC@0LC@0LC@0LC@ DLIWLLBPHB@ HB
+@ HB@ HB@ HB@ HACBUCC@$A@PDA@PDA@PDA@PDA@PDA@P0%K@0LC@0LC@0LC@0LC@0LC@0LC@0LIR0LC@0LC@0LC@0LC@0LC@0LC@0LCBT,C@0LC@0LC@0L
+C@0LC@0LC@0LC@0%Y''P4MWXGBEESB@!!SH&$%IRT%IRT%Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[160 160 160 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 72 122 199 116 116 120 237 236 242 72 141 255 212 211 224 32 101 209 63 143 226 153 188 255 106 175 235 170 204 255 7 66 194 0 50 164 58 137 224 75 160 234 66 135 255 140 175 255 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 80 149 255 55 95 181 125 160 253 52 89 178 50 87 176 105 172 233 104 170 232 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 2 56 178 3 73 255 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 81 136 209 101 170 255 36 107 211 54 123 255 56 94 181 126 161 253 55 92 180 53 90 178 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 96 157 223 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 28 97 255 109 178 255 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 39 109 255 93 161 255 157 192 255 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 181 215 255 255 255 255 52 90 178 51 88 177 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 87 145 215 84 153 255 78 131 206 10 79 255 91 168 235 127 162 254 54 91 179 14 77 199 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56 255 248 248 207 216 240 240 240 248 239 232 240 240 240 240 48 88 176 224 224 232 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@BC????????????????????????????????????????????????????????????????????????????????????') ; yourself); yourself]
+!
+
+pasteFile22x22Icon
+    "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 pasteFile22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#pasteFile22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class pasteFile22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@0LC@0LBD@@@@@@EMST5MST0@@@@AEX%MST5L%D0@@@EMST5MST5L[BAU2UUL3L3L3X@42EP!!ST5MST5MSJT(/A4A(ZF!!(ZF!!@NB<=JUMST5MST4XN
+C!!Q@PDA@PDA@PD NZSUST5MST5MGQDP*EAPTEAPTEAP*QB, T5MST5MSAV=/[6=/[6=/PTEAPTEAPTD?T5MST58$IBP$IBP$IDEST5L6E7A.PS=ST5MV[F1,
+[F1,[F1AT5MSG2LK[$ETO5MSC5=_W5=_W5=_PUMST1<6FV8?O3<?T4<\GA0\GA0\GDEST5L-M!!!!.U5I]O5L(V5-[[QXRV%)AT5MSO!!=KS&YBP3=SN0)PG $I
+BP$IPUMST5L_X68LGTD?T6DPN DA@PDA@TEST386E7D7YR\ZO5LCMF]''Y6]''Y6]AT38-RT9WH#]$YS=SLU1\WE1\WE1\PUMSM$5NKB8"A#\?T6-QTUEQTUEQ
+TTESKRXXFV8,U5$7O5MLA@PDA@PDA@QAT0I#FA%.KGD"A#=SDS1*Z&)*Z&)*PULWX1!!MS"11H X?T5MXNS$9NS$9NTESX4-MFP,,U2HFO5MST5MST5MST5MA
+G6M#FA%.KGD"A#=ST5MST5MST5MSO3<?O3<?O3<?O3<?T0@a') ; colorMapFromArray:#[0 0 0 238 175 55 250 250 255 146 100 44 231 151 25 187 141 61 225 225 237 139 135 136 216 146 43 240 181 63 241 206 77 236 236 244 213 213 228 139 139 162 254 252 139 157 113 54 239 199 68 123 73 37 242 189 71 125 125 151 133 132 129 217 147 43 242 193 74 245 245 252 241 241 248 239 239 246 216 216 230 214 145 43 244 218 92 210 210 224 240 186 65 252 252 255 198 144 60 136 136 161 229 229 239 248 248 254 249 235 116 151 151 172 244 244 250 219 219 232 148 104 50 204 137 42 200 195 127 253 239 126 234 234 243 253 253 255 232 232 241 244 227 137 137 137 161 146 97 41 153 126 104 245 245 247 237 182 54 204 148 58 249 249 254 224 224 236 138 134 135 144 86 32 238 180 58 147 103 48 222 140 19 232 198 98 254 254 255 156 156 182 196 196 208 208 208 223 206 206 221 204 204 219 253 246 131 126 126 152 204 151 60 198 150 64 132 131 128 246 246 253 232 198 107 242 242 249 145 89 35 240 240 247 238 238 245 149 106 52 241 204 76 233 157 32 215 215 229 255 255 255 211 211 225 139 139 164 167 122 56 230 230 240 123 73 36 228 228 238 242 187 70 243 212 84 235 163 40 201 201 218 177 131 59 246 223 100 237 237 240 147 101 46 152 152 173 243 243 249 222 222 235 220 220 233 218 218 231 236 169 47 227 227 233 254 249 137 229 145 17 145 90 37 248 229 108 242 203 79 235 235 244 251 240 124 233 233 242 231 231 240 154 127 105]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A>@@C?@@??8@??<@??<@??<@???@??? ???0???8???8???8???8???8???8???8???8???8???8_??8@G?8@G?8') ; yourself); yourself]
+!
+
+pasteItem22x22Icon
+    "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 pasteItem22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#pasteItem22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class pasteItem22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@0LC@0LBD@@@@@@EMST5MST0@@@@AEX%MST5L%D0@@@EMST5MST5L[BAU2UUL3L3L3X@42EP!!ST5MST5MSJT(/A4A(ZF!!(ZF!!@NB<=JUMST5MST4XN
+C!!Q@PDA@PDA@PD NZSUST5MST5MGQDP*EAPTEAPTEAP*QB, T5MST5MSAV=/[6=/[6=/]WU5]WU5]WU5]WU5]U8$IBP$IBP$IGUST5MST5MST5MS]GUV[F1,
+[F1,[F15T7Q4]GQ4]GQ4]GM5C5=_W5=_W5=_]UM4]GQ4]GQ4]GQ3]T<\GA0\GA0\GGUS]GQ4]GQ4]GQ4\7T(V5-[[QXRV%)5T7Q4]GQ4]GQ4]GM5N0)PG $I
+BP$I]UM4]GQ4]GQ4]GQ3]VDPN DA@PDA@WU4\7M3\7M3\7M3\7TCMF]''Y6]''Y6]5]WU5]WU5]WU5]WU5LU1\WE1\WE1\Z&)*Z&)*NP@@@@@@@F-QTUEQTUEQ
+TV)*Z&)*Z#$@@@@@@@ALA@PDA@PDA@Q*Z&)*Z&(9@@@@@@@@DS1*Z&)*Z&)*Z&)*Z&)*NP@@@@@@@EMXNS$9NS$9NS$9NS$9NS$@@@@@@@AST5MST5MST0@@
+@@@@@@@@@@@@@@@@T5MST5MST5L@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 238 175 55 250 250 255 146 100 44 231 151 25 187 141 61 225 225 237 139 135 136 216 146 43 240 181 63 241 206 77 236 236 244 213 213 228 139 139 162 254 252 139 157 113 54 239 199 68 123 73 37 242 189 71 125 125 151 133 132 129 217 147 43 242 193 74 245 245 252 241 241 248 239 239 246 216 216 230 214 145 43 244 218 92 210 210 224 240 186 65 252 252 255 198 144 60 136 136 161 229 229 239 248 248 254 249 235 116 151 151 172 244 244 250 219 219 232 148 104 50 204 137 42 200 195 127 253 239 126 234 234 243 253 253 255 232 232 241 244 227 137 137 137 161 146 97 41 153 126 104 245 245 247 237 182 54 204 148 58 249 249 254 224 224 236 138 134 135 144 86 32 238 180 58 147 103 48 222 140 19 232 198 98 254 254 255 156 156 182 196 196 208 208 208 223 206 206 221 204 204 219 253 246 131 126 126 152 204 151 60 198 150 64 132 131 128 246 246 253 232 198 107 242 242 249 145 89 35 240 240 247 238 238 245 149 106 52 241 204 76 233 157 32 215 215 229 255 255 255 211 211 225 139 139 164 167 122 56 230 230 240 123 73 36 228 228 238 242 187 70 243 212 84 235 163 40 201 201 218 177 131 59 246 223 100 237 237 240 147 101 46 152 152 173 243 243 249 222 222 235 220 220 233 218 218 231 236 169 47 227 227 233 254 249 137 229 145 17 145 90 37 248 229 108 242 203 79 235 235 244 251 240 124 233 233 242 231 231 240 154 127 105 127 127 127 170 170 170 64 64 64]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A>@@C?@@??8@??<@??<@??<@???<???<???<???<???<???<???<???<???<??<@??<@??<@??<@_?<@@@@@@@@@') ; yourself); yourself]
+!
+
+pasteWidget22x22Icon
+    "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 pasteWidget22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#pasteWidget22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class pasteWidget22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@0LC@0LBD@@@@@@EMST5MST0@@@@AEX%MST5L%D0@@@EMST5MST5L[BAU2UUL3L3L3X@42EP!!ST5MST5MSJT(/A4A(ZF!!(ZF!!@NB<=JUMST5MST4XN
+C!!Q@PDA@PDA@PD NZSUST5MST5MGQDP*EAPTEAPTEAP*QB, T5MST5MSAV=/[6=/[6=/@@@@@@@@@@@@@@@@@E8$IBP$IBP$I@AST5MST5MST5MS]@AV[F1,
+[F1,[F0@T7Q4]GQ4]GQ4]GL@C5=_W5=_W5=_@EM4]GQ4]GQ4]GQ3@D<\GA0\GA0\G@AS]GQ4]GQ4]GQ4\0@(V5-[[QXRV%(@T7Q4]GQ4]GQ4]GL@N0)PG $I
+BP$I@EM4]GQ4]GQ4]GQ3@FDPN DA@PDA@PAS]GQ4]GQ4]GQ4\0@CMF]''Y6]''Y6\@T7Q4]GQ4]GQ4]GL@LU1\WE1\WE1\@EM4]GQ4]GQ4]GQ3@F-QTUEQTUEQ
+TPAS]GQ4]GQ4]GQ4\0ALA@PDA@PDA@P@T7Q4]GQ4]GQ4]GL@DS1*Z&)*Z&)*@EM4]GQ4]GQ4]GQ3@EMXNS$9NS$9NPA4\7M3\7M3\7M3\0AST5MST5MST5L@
+@@@@@@@@@@@@@@@@T5MST5MST5L@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 238 175 55 250 250 255 146 100 44 231 151 25 187 141 61 225 225 237 139 135 136 216 146 43 240 181 63 241 206 77 236 236 244 213 213 228 139 139 162 254 252 139 157 113 54 239 199 68 123 73 37 242 189 71 125 125 151 133 132 129 217 147 43 242 193 74 245 245 252 241 241 248 239 239 246 216 216 230 214 145 43 244 218 92 210 210 224 240 186 65 252 252 255 198 144 60 136 136 161 229 229 239 248 248 254 249 235 116 151 151 172 244 244 250 219 219 232 148 104 50 204 137 42 200 195 127 253 239 126 234 234 243 253 253 255 232 232 241 244 227 137 137 137 161 146 97 41 153 126 104 245 245 247 237 182 54 204 148 58 249 249 254 224 224 236 138 134 135 144 86 32 238 180 58 147 103 48 222 140 19 232 198 98 254 254 255 156 156 182 196 196 208 208 208 223 206 206 221 204 204 219 253 246 131 126 126 152 204 151 60 198 150 64 132 131 128 246 246 253 232 198 107 242 242 249 145 89 35 240 240 247 238 238 245 149 106 52 241 204 76 233 157 32 215 215 229 255 255 255 211 211 225 139 139 164 167 122 56 230 230 240 123 73 36 228 228 238 242 187 70 243 212 84 235 163 40 201 201 218 177 131 59 246 223 100 237 237 240 147 101 46 152 152 173 243 243 249 222 222 235 220 220 233 218 218 231 236 169 47 227 227 233 254 249 137 229 145 17 145 90 37 248 229 108 242 203 79 235 235 244 251 240 124 233 233 242 231 231 240 154 127 105 127 127 127 170 170 170]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A>@@C?@@??8@??<@??<@??<@???<???<???<???<???<???<???<???<???<???<???<???<???<_??<@G?<@@@@') ; yourself); yourself]
+!
+
+saveAsMethod22x22Icon2
+    "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 saveAsMethod22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#saveAsMethod22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class saveAsMethod22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MSP4L#@/KB$''IBP#H"D_GQ0@@@@@MZV"=L3Q5/S4=OS4=OS4=D@=B @@@CR!!''/SAZLG4=OSAZLG29]9@OP @@@@3
+&I_40V!!(0_SAZF#A8]_SNSPG@@@@L)VQ=LE(0V#4ZLE(0]OM3Q$YA0@@@CFL"._AZOM(ZF##ZLGG3\4XF@\@@@@/!!HS''0V#3<6#34F#A3\7MEQTG@@@@K(A<
+9<E(<?O3<=A(0\7M3QTUA0@@@B56\>_AZOO34MCPZLGM3\4UEP\@@@@*Z&?''9N/3<=CP4MCP4MCPEQTG@@@@JVM"9NS"7=+U4L7M3\7M3QTUA @@@B]ZV.K"
+7=+T4L7H0<B))*$YFPP@@@@''UUW .;&7-KF/+*6Y"HV)FA C@@@@I$9N7=?Z5MCH0<B4))2S(1TUAP@@@BYIR]68-[J0+*6["HE9]IXUEP\@@@@%P$KZ6-SP
+2K2)))2S"8^OEQTG@@@@ITA@5;Z1*:"Y$(U=]7E,#!!TUA0@@@BT<OIBP#XZC^''U+YU=\VUXTE@ @@@@@BP$IBP HB@ HB@ HB@ HB@ @@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 28 33 37 34 41 60 37 45 83 39 48 89 42 51 96 45 55 103 49 60 112 54 65 115 54 66 115 54 66 116 57 70 107 57 70 109 59 59 58 65 79 121 65 80 125 66 80 124 68 83 130 74 71 70 77 81 85 78 95 152 80 98 153 81 98 151 83 47 28 85 102 157 86 103 157 88 101 128 90 110 162 94 106 146 94 106 147 95 83 66 95 107 147 96 74 37 97 108 148 98 109 148 98 109 149 99 110 149 101 111 150 101 111 151 101 112 151 102 102 107 102 113 151 102 113 152 103 86 54 103 113 151 103 113 152 103 114 152 104 114 152 105 115 152 105 115 153 106 116 153 107 116 154 107 117 154 108 117 154 116 124 137 123 85 65 123 107 74 125 143 184 126 64 32 126 139 158 126 143 183 127 145 185 128 145 184 129 146 185 129 147 186 130 148 186 131 148 187 131 149 187 132 141 160 133 141 159 133 143 164 134 151 188 134 151 189 134 152 189 135 152 189 136 153 190 137 154 191 138 154 191 139 156 193 141 151 173 142 69 67 142 157 193 142 158 193 143 62 26 143 158 193 143 159 194 144 157 200 144 161 195 145 161 195 146 158 202 146 162 196 147 89 55 147 160 203 147 162 196 148 165 197 149 161 204 149 164 197 150 166 198 150 166 199 151 167 199 152 149 137 152 163 206 152 168 199 153 169 201 154 96 64 154 169 201 154 170 201 155 167 207 155 171 202 156 171 202 156 171 203 157 172 203 157 173 182 157 173 203 159 147 111 159 174 204 159 175 204 160 170 210 160 174 204 160 176 205 162 172 191 162 178 207 163 173 212 163 177 206 164 177 207 164 180 207 165 147 99 165 165 166 165 178 207 166 182 208 167 147 95 167 177 214 167 181 209 169 185 209 170 179 216 170 186 215 171 185 210 172 162 152 172 185 212 172 187 217 173 186 212 174 182 218 174 188 219 175 190 221 176 184 220 176 189 214 176 190 213 176 190 218 177 145 64 177 190 215 179 193 223 180 192 216 181 193 216 181 194 214 181 195 218 182 194 214 182 195 221 183 196 219 184 195 218 184 197 219 185 95 37 185 196 219 185 197 219 185 197 222 186 185 192 187 198 220 187 200 223 188 171 94 188 199 217 192 204 226 194 97 38 195 206 220 196 168 100 196 206 218 198 207 220 202 211 222 203 212 222 205 214 224 207 215 224 208 101 40 209 217 225 210 217 226 210 219 227 212 220 227 213 220 227 214 221 228 217 103 41 217 223 229 217 224 237 219 101 37 222 177 45 222 225 232 223 228 241 224 187 54 225 105 42 226 231 241 226 231 243 228 196 63 230 202 70 230 234 245 230 235 243 232 240 251 233 208 76 233 235 240 233 236 247 233 237 244 233 237 246 235 214 82 235 238 245 236 239 248 237 239 242 238 241 249 239 242 247 240 242 242 240 242 249 240 243 249 242 220 141 242 242 227 242 244 249 242 244 250 244 244 245 244 246 250 244 246 251 245 247 250 246 247 250 246 247 251 247 248 251 247 248 252 248 249 251 248 249 252 249 99 39 249 249 253 250 147 56 250 250 253 251 169 79 251 251 253 251 252 253 252 99 38 252 178 84 252 187 89 252 199 96 252 206 99 252 252 253 252 252 254 253 253 254]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@CO??#_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3O??#@@@C@@@C') ; yourself); yourself]
+!
+
+saveAsMethodAs22x22Icon2
+    "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 saveAsMethodAs22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#saveAsMethodAs22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class saveAsMethodAs22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@00AU&9,#''W?,XSX9NPN1"&=P6P@@@@AU>L03TP^CL3L3L3L3L3L3@&:ES6H@&6''ML9]O%3L3L9]O%:]G/0I.?!!(P*BAE
+D3NWS4>WL9]OS9^P<KJ:R[C4 .L#/%\3%4>WS3MO%4>W,''CD''$GA\1,*:"''1Q)]O>$=OS1QO%9"*=?IK@^G907>6-$ZWS?+:S?+JS9^79Y[UI-NR@LOFO01F
+%4?:>/+:2$>WBX6;$7''!!@@CCXM=VQ)]O>/+J2,)OY,#5E*D03 @@0:/-''D[R"O+:2,+J39]6%GP0A\8@@LM!!2Z?R4+"Q0@[J-3W(V)(X6DJ_@@CCM (J.K"Q
+0B0]-65C-CF%+AGQZ@@@03[\7D0Y0*ZGD.JOH($;W$Q[='',@@LN-^''*QRZZURWII!!N;#8N]X/^YN@@CC+\WE]4%I4D& RT&"O%J<Z%MS3 @@06L7M<C@KL)2
+[FPK&SR9SX9ST<8@@LM#@ K021H<GO55<81TIHAJT5ON@@CCX0 H5MSWE7 2>4#$VR4.(18^)@@@00@/K2</)JR$)JR$)JR$)JR$)@@@@LL@@@@@@@@@@@@@
+@@@@@@@@@@@@@@CC@@@@@@@@@@@@@@@@@@@@@@@@@@@@00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 142 69 67 129 147 186 98 109 149 242 51 50 86 103 157 240 242 242 236 239 248 126 143 183 165 147 99 146 162 196 187 200 223 164 177 207 143 158 193 163 177 206 183 196 219 147 89 55 66 80 124 205 214 224 180 192 216 247 248 252 203 212 222 255 100 39 170 179 216 123 107 74 217 223 229 186 185 192 77 81 85 188 199 217 242 242 227 78 95 152 138 154 191 107 116 154 226 231 241 242 220 141 106 116 153 157 173 203 156 171 202 255 106 42 242 244 250 247 105 44 173 186 212 83 47 28 196 206 218 239 242 247 147 160 203 146 158 202 54 66 115 95 83 66 225 105 42 163 173 212 253 253 254 176 190 218 222 177 45 101 112 151 131 148 187 130 148 186 99 110 149 129 146 185 96 74 37 195 206 220 148 165 197 166 182 208 165 178 207 184 197 219 188 171 94 81 98 151 255 236 120 133 141 159 181 193 216 249 249 253 248 249 252 155 167 207 88 101 128 174 188 219 250 147 56 246 247 250 170 186 215 42 51 96 154 96 64 94 106 147 233 236 247 162 178 207 80 98 153 160 176 205 108 117 154 159 174 204 176 189 214 141 151 173 149 161 204 252 99 38 57 70 107 213 220 227 233 235 240 126 139 158 134 151 189 103 113 152 102 113 151 254 107 43 101 111 150 192 204 226 150 166 198 159 147 111 149 164 197 39 48 89 185 196 219 179 193 223 250 250 253 217 224 237 222 225 232 127 145 185 95 107 147 233 237 246 142 158 193 230 235 243 165 165 166 208 101 40 176 190 213 252 199 96 244 246 250 167 177 214 185 95 37 139 156 193 37 45 83 137 154 191 156 171 203 135 152 189 104 114 152 155 171 202 154 169 201 102 102 107 240 242 249 34 41 60 54 66 116 210 217 226 209 217 225 251 251 253 219 101 37 97 108 148 145 161 195 164 180 207 230 202 70 175 190 221 172 162 152 246 247 251 245 247 250 28 33 37 255 101 39 254 99 38 237 239 242 233 208 76 224 187 54 230 234 245 182 195 221 217 103 41 107 117 154 157 172 203 105 115 152 177 145 64 45 55 103 198 207 220 194 97 38 171 185 210 144 157 200 54 65 115 103 86 54 212 220 227 252 252 253 255 117 45 182 194 214 223 228 241 102 113 152 162 172 191 101 111 151 131 149 187 150 166 199 244 244 245 98 109 148 238 241 249 128 145 184 249 99 39 147 162 196 167 181 209 233 237 244 247 248 251 172 187 217 125 143 184 252 178 84 159 175 204 65 80 125 177 190 215 244 246 251 242 244 249 157 173 182 214 221 228 255 255 255 226 231 243 134 152 189 103 114 152 153 169 201 228 196 63 151 167 199 235 238 245 210 219 227 185 197 219 184 195 218 49 60 112 152 149 137 207 215 224 65 79 121 248 249 251 143 62 26 176 184 220 251 169 79 90 110 162 174 182 218 85 102 157 94 106 146 144 161 195 185 197 222 143 159 194 142 157 193 181 195 218 160 174 204 132 141 160 74 71 70 202 211 222 126 64 32 152 163 206 167 147 95 68 83 130 133 143 164 252 206 99 136 153 190 105 115 153 134 151 188 103 113 151 154 170 201 123 85 65 152 168 199 240 243 249 172 185 212 235 214 82 169 185 209 232 240 251 252 187 89 57 70 109 196 168 100 187 198 220 59 59 58 252 252 254 160 170 210 251 252 253 181 194 214 116 124 137]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C_??C???;???????????????;???3???#???#???#???#???#???#???#???#???#???#???#_??C@@@C@@@C') ; yourself); yourself]
+!
+
+saveImage22x22Icon
+    "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 saveImage22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveImage22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class saveImage22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@BHGO3<?O3<?O3<?O3<?O3<?EB1F@CT3RR8.K"8.K"8.K"8.K"8.K!!P C",NAD$.K"8.K"8.K"8.K"8.K"8THCL+C#MIK"8;N3,;N3,;N3,;N28.EB@NJ083
+RR8.K"8.K"8.K"8.K"8.K!!P OB,NL4$.K#,;N3,;N3,;N3,;K"8TC30+C#MIK"8.K"8.K"8.K"8.K"8.E@<<J083RR8.N3,;N3,;N3,;N3,.K!!POOB,NL4$.
+K"8.K"8.K"8.K"8.K"8TC30EMSMIK"8.K"8.K"8.K"8.K"8.EC4*J08NA#((E!!\?O3<?O3<?O3<?F!!P!!J",5L2@=M1,AGA0\GA0\GA0\G@(9MT EM PDA@PD
+MR4-KR4-KSYHKST5KSUHASXDA@P3MBT9BQ-APTDIP!!H"CP4NR@T6ACLDC$XLC@0LC@0LJR82P@UFC$ EM#L3C 8XCB0,KB<]G4\.B4@+Q#MHASX3MSL6F@0,
+KB0@G38$K -@J4XNR@T6C 8NM!! LKB0,P4\QBB81NB-FL4 EM 85C#XXCB0,K@LYBD)JN# +Q 9HASXNC#T6F@0,KB0WK  YDAL#J4X3R@T6C#T5M!! LI01G
+FP QQ2$SH2-FL2(+@BD=OQ +I!!8^@#,BEQ5DLBL+J34X@@@a') ; colorMapFromArray:#[107 132 173 123 148 206 189 198 198 198 206 222 0 115 214 0 49 148 8 66 165 16 57 156 247 255 255 90 148 206 132 165 206 140 156 206 206 214 222 0 82 181 0 107 206 0 66 173 247 247 239 247 247 247 57 115 198 123 140 189 148 173 214 189 189 198 198 206 231 222 231 239 0 57 165 239 247 247 239 231 239 82 140 198 123 165 214 189 189 189 198 189 189 214 214 222 0 74 173 0 82 189 0 74 181 0 33 148 247 247 255 66 140 206 140 148 173 181 189 189 165 181 214 231 231 222 0 99 198 0 49 156 0 41 148 0 99 214 255 255 255 90 115 156 107 123 173 132 156 206 148 156 206 0 115 206 0 90 189 0 107 214 0 99 206 33 99 181 0 24 148 90 148 214 132 148 198 198 198 198 0 107 198 0 66 165 231 231 231 231 231 239 0 24 140 66 132 189 99 165 222 156 173 198 198 198 189 236 233 216 0 57 156 231 239 239 0 90 198 24 74 165 255 255 247]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_??8???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<_??8') ; yourself); yourself]
+!
+
+saveImageAsMethod22x22Icon
+    "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 saveImageAsMethod22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveImageAsMethod22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class saveImageAsMethod22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+OS4=OS4=OS4=OS4=OS4=O]OP4Y,=OS4@@@@@@C4=OS4=OS4=O\^Y<[B30S4=@@@@@@@=OS4=OS4=OS76)=3Z5Y@=@@@@@@@@OS4=OS4/A0_B8*+]09V3OP@@
+@@@@@@@=OS4/A6X?:*[/&M^TOS4@@@@@@@@=OS4IK6ZE!!JR,=LV(3#4=OP@@@@@@@@@IQTVE!!\*_1-"\=S4=OP@@@@@@@B<IM8RE!!XW@7*KH<:T=OS4@@@@@
+@A8^YXVE!!X_%*=?M9M''!!OS4=@@@@@AAE!!HVE!!X^G(\.V+=SRI @@OP@@@BX<!!HVE!!X^G++7L:9^8I @@@C4@@@@@I(RD!!XVG!!>''(.)N1<@@@@@@=@@@@@BX<
+!!HREB+^^(>3-#;,@@@@=OPBI"X&II#2D!!HW[-+:<1N^I"X&I"S4@"X2L#H0&!!HRD5*&Z$^;&#H2L"8$=@H&L"H"H"BYE!!KJ0''ZB4"H"H"H*IOPBI#H"H"(*J
+"(*5,OK#"(*J"H"J"S4@"X2H"H"H"H"H.YKO"H"H"H"H"($=@H&L"H"H"H"H"K>-"H"H"H"H"H*IOPBI"8*J"(*J"(+I"(*J"(*J"(*J"S4@"X&I"X&I"X&I
+"X&I"X&I"X&I"X$=@@@@@@@@@@@@@@@@@@@@@@@@@@@=OP@a') ; colorMapFromArray:#[111 104 104 112 112 112 127 80 40 127 120 120 128 96 64 128 104 48 128 120 112 128 128 128 143 104 64 143 136 136 144 112 48 144 112 72 144 112 88 144 112 96 159 112 64 159 120 88 159 152 152 160 120 40 160 120 56 160 136 48 160 136 88 160 136 120 160 144 104 160 144 128 160 152 112 160 160 160 175 136 104 175 136 112 175 136 120 175 152 128 175 168 168 176 136 96 176 144 96 176 152 96 176 152 112 176 152 120 176 160 112 176 168 152 176 176 176 191 144 64 191 152 56 191 168 160 192 144 48 192 160 56 192 160 104 192 176 144 192 176 152 192 192 192 207 160 64 207 168 112 207 176 112 207 176 120 207 184 112 207 184 128 207 192 160 207 200 200 208 176 72 208 176 80 208 176 104 208 192 184 208 208 208 223 184 88 223 192 104 223 216 216 224 192 64 224 192 112 224 192 128 224 200 104 224 208 168 224 224 224 239 192 96 239 208 72 239 208 104 239 208 112 239 208 144 239 216 152 239 216 168 239 224 176 239 232 200 239 232 232 239 232 248 240 208 56 240 208 64 240 208 120 240 216 72 240 216 80 240 216 88 240 216 112 240 216 136 240 216 176 240 224 88 240 224 112 240 224 120 240 224 136 240 224 144 240 224 184 240 232 144 240 232 160 240 232 208 240 240 168 240 240 208 240 240 240 240 240 248 255 208 64 255 216 88 255 216 112 255 216 120 255 216 136 255 224 96 255 224 104 255 224 120 255 224 128 255 224 144 255 224 152 255 224 160 255 232 120 255 232 128 255 232 152 255 232 168 255 232 176 255 232 184 255 232 192 255 240 176 255 240 184 255 240 192 255 240 200 255 240 208 255 240 216 255 240 224 255 248 216 255 248 224 255 248 240 255 248 248 168 216 224 0 136 0 0 204 0 32 223 32 64 64 64 16 111 16 170 170 170 199 247 199 0 0 0 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C0@@G8@@G8@A?8@C?0@G?0@O? @?? A?? C?? G??@C?>@C?>@_??8_??8_??8_??8_??8_??8_??8_??8@@@@') ; yourself); yourself]
+!
+
+saveImageBlack22x22Icon
+    "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 saveImageBlack22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#saveImageBlack22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class saveImageBlack22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@DR@0LC@0LC@0LC@0LC@0LCDALW@@HZ@P\GA0\GA0\GA0\GA0\GA1@RF!!LBF DGA0\GA0\GA0\GA0\GA0\PD!!(W@!!(AA0\XFA XFA XFA XF@\GDAHBD0HZ
+@P\GA0\GA0\GA0\GA0\GA1@R@!!LBF DGA1 XFA XFA XFA XA0\PD HS@!!(AA0\GA0\GA0\GA0\GA0\GDAHBE0HZ@P\GFA XFA XFA XFA GA1@R@!!LBF DG
+A0\GA0\GA0\GA0\GA0\PD HS@!!([A0\GA0\GA0\GA0\GA0\GDAHBD0HZD!!DY@A0C@0LC@0LC@0LC@1@[F1LBF DRF TQCP4MCP4MCP4MCQ@I@!!,S@!!(ZF!!(Z
+@ HB@ HB@!!,[@ HB@ H[D0HZF!!(ZF0TNBP$EB TIDP(R@PDBF1LBF!!(Z@!!\DA@PDA@PD@0\MB1LWF!!,S@!!(ZF HWAALSD0XTA@ GCQXSE1([D0HZF!!(BE0PS
+D1LIA@LLA04VD1\ZF1LB@ HB@!!\DD1LSEP LA0\ME!!LWF!!,S@ HB@ HWAALSD0@LA0\GDQXSE1([D0HB@ HBE0PSD1LCA0\LC@8VD1\ZF1LB@ HB@!!\DE@PC
+C@\L@0LNE!!LWF HS@@DRD!!\SDQPTFA XEAPXAQXWE1HW@@@a') ; colorMapFromArray:#[206 206 206 66 66 66 82 82 82 231 231 231 214 214 214 123 123 123 107 107 107 255 255 255 239 239 239 132 132 132 115 115 115 24 24 24 247 247 247 156 156 156 140 140 140 236 233 216 165 165 165 148 148 148 57 57 57 41 41 41 189 189 189 173 173 173 33 33 33 49 49 49 198 198 198 181 181 181 90 90 90 74 74 74 222 222 222]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_??8???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<???<_??8') ; yourself); yourself]
+!
+
+searchFile22x22Icon
+    <resource: #programImage>
+
+    "/ ^ self searchFile22x22Icon1
+    ^ self searchFile22x22Icon2
+!
+
+searchFile22x22Icon1
+    "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 searchFile22x22Icon1 inspect
+     ImageEditor openOnClass:self andSelector:#searchFile22x22Icon1
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class searchFile22x22Icon1'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+.[&9S\DQ''C59HRJ9.[&9.[&9.[&9.[&9)4]>.5!!JKM4: BB9.[&9.[&9.[&98RV[X%LD_3]ZM;48\+&9.[&9.[&9Q#1PL*<]] ",@Z5$(Y*9.[&9.[&9.PBP
+FZ?JX@627L=,NPW^9+&9.[&9.[$8 3JWB3C3#N_Z.CQ]]_R9.PB9.[&9_JO2P*,#^>)=\F8K$3[C.[&9.[&9.T?W''Y6K:9%@[ZJR$)K"20>9.[&9.[%OO?JB
+%4R3Z]P5J^LJ/L!!8.[&9.[&9EKZ:4%$SRS;GJM"J=V/&;;&9.[&9.Z@*#I5''%T$MI7QW/527N>>9.[&9.[''L^!!BB+9XFPG54U;=EU@\_.[&9.[&9.RA1Z)UB
+E+8U)DL-F<-_G;&9.[&9.[$$5.5LE=2>G--%"I:T"Z8/.[&9.[&9IK%U!!MGI2^P[I$!!K*L6Q]<Z9.[&9.RR9*(XL44F5:N3.S/FA8M=7U+&9.[$$.Z&F!!+QA
+-^#,;$9&[1+ 76!![.[&9IK&)* 3SPTG(:N3BS*Y/''8>1@5:9.RR9*Z*F44EA:N#,S$:%B]$BX]CUX;$$.XXL44EA-^#,;$;ELY +3%HN$X^9IK''0TUF*!!-MA
+GGO,;$:X.Q#D0AH..T"0#X6M#X6M#X6N#(:N9[&9!!Q#)L0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[190 190 203 179 214 235 253 233 159 206 121 14 178 214 234 181 215 227 221 251 253 200 204 216 208 240 250 148 126 112 216 232 238 229 254 254 245 246 250 228 252 253 246 211 132 164 169 187 189 230 251 188 204 227 160 107 51 219 249 254 135 145 175 224 246 249 216 247 251 207 244 252 138 79 26 196 229 251 253 232 155 111 112 138 240 242 248 215 247 253 221 246 249 140 145 163 177 180 196 192 198 214 195 195 207 243 254 254 207 211 222 163 190 225 170 172 189 231 251 252 230 249 251 230 247 251 149 187 221 151 87 25 143 210 248 213 223 231 140 128 133 207 127 27 240 254 254 227 230 238 200 234 251 92 92 122 220 252 254 227 247 251 216 246 250 170 205 228 167 177 202 203 237 247 152 195 230 188 191 206 170 190 218 152 189 230 227 253 254 174 211 235 225 251 252 241 243 248 216 248 253 230 242 247 216 246 253 213 220 227 198 198 209 175 196 226 210 214 224 224 253 254 144 211 248 201 202 215 172 208 226 219 219 226 231 233 241 129 156 197 172 214 249 249 250 252 253 235 160 178 214 235 95 95 124 243 244 246 187 112 26 232 241 245 140 207 247 210 242 253 168 204 225 176 105 25 227 235 240 205 238 248 166 98 25 188 190 205 228 254 254 246 213 133 174 210 234 156 91 25 176 211 226 174 187 201 212 185 159 207 240 253 210 124 15 234 253 253 195 235 251 199 212 222 200 234 246 233 251 252 224 252 253 198 136 46 202 233 238 128 150 182 166 166 183 238 240 247 228 243 247 178 208 221 213 245 252 218 131 16 138 143 162 179 198 222 124 137 168 231 249 253 144 168 204 229 249 251 134 188 237 175 211 231 178 184 201 241 208 124 211 243 253 159 201 235 155 156 175 130 73 25 245 247 250 153 93 31 92 94 123 164 150 144 230 240 245 207 239 252 206 239 251 151 156 174 149 154 172 246 214 135 151 191 230 230 160 50 189 212 221 224 251 252 167 167 183 216 248 254 215 248 253 215 246 253 141 146 164 214 246 252 156 162 182 154 197 236 166 195 228 204 237 252 136 136 159 253 233 158 132 132 155 162 214 237 186 212 221 170 207 235 227 244 248 229 231 240 207 182 159 213 213 221 175 161 154 247 248 251 246 248 250 230 254 254 197 231 248 192 227 243 208 130 31 209 242 253 154 159 176 236 167 55 206 238 250 227 252 254 242 244 249 241 242 248 166 207 237 160 165 185 214 247 251 255 255 255 205 238 252 125 194 246 210 230 237 151 213 245 219 246 249 233 238 243 246 222 150 218 218 225 232 234 242 138 139 163 179 124 48 230 232 240 197 120 26 230 251 253 130 131 155 101 115 143 221 252 254 128 129 153 125 125 150 198 129 40 185 129 47 187 222 237 236 166 54 111 118 146 198 232 251 243 245 249 227 251 253 202 118 14 206 206 216 174 209 234 233 246 249 192 132 47 195 229 238 222 245 248 215 246 251 137 206 247 156 184 203 236 168 57 246 214 136 206 208 219 187 212 220 230 246 249 101 112 139 143 148 167 144 146 168 222 247 251 237 239 246 122 110 120 213 246 252 214 244 253 235 237 244 113 126 154 234 237 243 139 144 163 251 252 253 191 119 39 203 237 252 242 253 254 134 134 158 219 232 238]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G>@CO? C_?0C??0C??8C??8C??8C??<C??<C??<C??<C??<C_?<C_?>C_??C_??#_??3_??;_???_???_?=?_?<?') ; yourself); yourself]
+!
+
+searchFile22x22Icon2
+    "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 searchFile22x22Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#searchFile22x22Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class searchFile22x22Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+L#H2^7-<_W9? HD2L#H2L#H2L#H2L#H2 (ND!!XZG"HZI"(,2L#H2L#H2L#H2#H6N#9BQ$YFQ$)NT%SH2L#H2L#H2 IZW&I&Y&Y&Z&YFQ&902L#H2L#H2L)6^
+&)&_(JBX&Y&Q$YF!!(#H2L#H2L#JT(9"Y(JR$&JVY&Y>X)*\2L#H2L#H2*J&X'':B$(I& &ZB (JV*J"(4L#H2L*.O&I"X&Y& +J6-+Z6.)5-[ISH2L#J+#9"Y
+&ZV +JB-+Z6/,J]2\"T2L#H2,[JX,9&_(JB (KR5+;Z"U6 TIQ0[L*^7&I"8'':B (KV9.+.<''SHTVE!!XF3H2/[:Y&[>_(JB5.[+@0S-\WG%9V@L2L(/B,9>_
+)ZV-+[W@0:^]]5!!6QA@2L#HY1LWF.I&%)ZWG0\"U2\+KVA(2L#H2FD1!!3L7N3,;C35SP4]KS5MTRL#H2L!!]GO"],TVYTY%Q+Z=[W6M''T6#H2L#HSORX?R5=
+S6QPYFS[7M7X6];_L#H2D3,^YT%IRT)JW$9"S.C\7^G"8>P2L!!P!!M$YFWTY]RC0.G00I9]K]8^K&93HUB6MEMRHMAPPGC142L#K(:^+!!4>\2GP@B@P QHCH2
+L#H2L#H2L./,;^;/L#H2L#H2L#H2L#H2L#H2L#H2<N/10P@a') ; colorMapFromArray:#[127 80 47 128 96 64 128 111 48 128 127 112 143 111 64 144 112 48 144 112 79 144 112 95 144 112 96 159 112 64 159 127 95 160 127 47 160 127 63 160 143 48 160 143 95 160 143 127 160 144 111 160 144 128 160 159 112 175 143 111 175 143 112 175 143 127 175 159 128 176 143 96 176 144 96 176 159 96 176 159 112 176 159 127 176 160 112 176 175 159 191 144 64 191 159 63 191 175 160 192 144 48 192 160 63 192 160 111 192 176 144 192 176 159 207 160 64 207 160 80 207 175 112 207 176 112 207 176 127 207 191 112 207 191 128 207 192 160 208 176 79 208 176 80 208 176 111 208 192 191 223 191 95 223 192 111 223 208 208 224 192 64 224 192 112 224 192 128 224 207 111 224 208 175 224 223 207 239 192 96 239 208 79 239 208 111 239 208 112 239 208 144 239 223 159 239 223 175 239 224 176 239 224 223 239 239 207 240 208 63 240 208 64 240 208 127 240 223 79 240 223 80 240 223 95 240 223 112 240 223 143 240 223 176 240 224 95 240 224 112 240 224 127 240 224 143 240 224 144 240 224 191 240 239 144 240 239 160 240 239 175 240 239 176 240 239 208 240 240 175 240 240 191 240 240 192 240 240 208 255 208 64 255 223 95 255 223 112 255 223 127 255 223 143 255 224 96 255 224 111 255 224 127 255 224 128 255 224 144 255 224 159 255 224 160 255 239 127 255 239 128 255 239 159 255 239 175 255 239 176 255 239 191 255 239 192 255 240 176 255 240 191 255 240 192 255 240 207 255 240 208 255 240 223 255 240 224 255 255 223 255 255 224 255 255 240 255 248 248 223 216 224 191 200 224 160 192 224 159 184 224 176 192 216 192 192 208 192 192 200 208 208 216 175 192 224 128 184 232 127 192 240 143 200 240 144 208 248 143 208 248 159 192 224 176 184 200 176 176 192 207 208 216 160 184 224 159 192 232 175 208 232 176 208 232 207 232 240 175 200 224 144 208 240 160 176 200 160 160 176 175 184 216 175 208 248 207 232 248 208 240 248 192 224 248 160 208 232 159 160 176 191 184 200 144 184 224 223 248 248 224 248 248 159 184 200 144 144 168 159 200 232 240 248 248 223 240 248 176 208 216 128 128 152 144 168 200 175 200 232 143 136 160 128 152 192 239 248 248 224 240 248 191 208 216 223 232 232 208 224 232 128 144 168 160 200 232 192 232 248 239 240 248 224 240 240 192 208 216 144 184 216 207 240 248 239 240 240 239 232 240 224 232 240 160 160 184 127 136 168 191 224 248 208 248 248 208 216 224 95 88 120 128 144 176 111 112 136 207 200 216 112 120 152 175 208 224 175 184 200 143 136 152 160 144 144 208 128 24 207 120 24 159 152 168 111 112 144 96 112 136 175 168 184 207 200 208 175 160 152 192 128 40 224 160 48 223 128 16 192 120 24 191 112 32 240 208 120 240 208 136 239 168 56 191 112 24 208 184 152 192 136 40 255 232 152 208 120 8 176 104 24 207 176 152 240 208 128 239 160 48 207 120 8 160 96 24 144 120 112 207 112 8 159 88 24 144 80 24 191 128 40 255 232 160 143 72 24 176 120 48 240 216 144 160 104 48 143 128 128 128 72 24 127 104 120]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G>@@O? @_?0@??0@??8@??8@???@???@???@???8???8_??8_??0_?? _?? _?? _??0_??8_??<_?#<_0A<@@@<') ; yourself); yourself]
+!
+
+terminal22x22Icon
+    "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 terminal22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#terminal22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class terminal22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+ XFA XFA XFA XFA XFA XFA XFA XFAPX)8%QL9U9LQ]T52^(@/K2</ XFAGDFA XFA XFA XFA:>/+:>2ANRVA TJA(Q(ZF!!(ZF!!+#9^W%9^S- _H% XF[
+ ^[K*;OZ7^C!!+]OA0?W:>8G.IXFAF8G&2:.36-7 8Z7S0\O5>/.A<BVA R^A9-2+3]G]8NF-4<G9=_+; _H% XEJ ^J6/;CR7^C!!+]OA>_W:>8G.IXFA\XG"
+*;>04-618Z7S0_''5>/.A<BVA S:A8*.36-7 ,Z7J0\OY=_+; _@% XE!! ^J?,MG]8NF-4<GC6_+;?XG/IXFAL8G",=+R7[G!!+]OA6S?U>O>A;2VA X6A8;CR
+7[F>2-.*4L#U3?36 _L% XE- ^O],\R;3-SL5,B).[''>=(G1IXFA[XG%+*:;1=,++;SH/\?8??^A<RVA V6A XFA XFA XFA XFA XFA _P% XE-</K.;/C/
+;?O3<?G1<_O3<_G1IXFA RT%IRT%IRT%IRT%IRT%IRT%IXFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA
+ XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA P@a') ; colorMapFromArray:#[109 243 0 55 187 0 11 108 0 18 149 0 55 167 0 213 232 255 218 229 250 217 227 249 62 176 0 90 104 197 79 200 0 226 234 251 96 230 0 210 230 255 69 185 0 86 215 0 42 150 0 142 156 218 187 197 239 158 177 227 201 255 153 32 135 0 197 206 242 49 159 0 22 122 0 39 148 0 160 173 232 131 157 220 147 178 229 224 238 255 73 206 0 56 168 0 221 232 252 29 131 0 73 190 0 90 224 0 19 118 0 63 67 120 63 177 0 126 151 218 16 146 0 53 164 0 70 186 0 33 164 0 214 224 248 213 222 247 132 255 21 99 106 198 16 114 0 60 173 0 216 232 253 101 118 203 30 162 0 111 245 0 184 194 238 47 180 0 224 237 254 154 172 225 223 235 253 214 232 254 194 203 241 64 178 0 111 131 209 17 149 0 133 145 214 167 193 234 142 171 226 249 252 255 61 194 0 216 225 249 44 152 0 105 239 0 34 139 0 7 102 0 121 144 215 209 230 255 246 250 255 128 139 212 24 124 0 68 185 0 102 235 0 4 98 0 48 157 0 21 122 0 206 255 162 45 177 0 11 107 0 150 167 223 72 196 0 219 230 251 156 255 66 62 195 0 168 180 234 1 94 0 191 200 240 89 214 0 106 240 0 106 124 206 69 202 0 8 103 0 218 232 253 159 255 72 32 164 0 113 247 0 59 191 0 164 176 233 42 149 0 76 209 0 76 195 0 85 97 195 49 164 0 49 158 0 190 255 132 116 137 212 123 134 209 83 216 0 12 122 0 137 151 216 119 252 2 118 252 1 166 187 231 194 222 255 118 128 207 36 141 0 97 226 0 87 221 0 16 113 0 77 210 0 113 122 205 255 255 255 23 128 0 40 146 0 30 151 0 225 238 255 13 111 0 101 235 0 47 179 0 222 234 252 170 192 234 252 253 255 121 253 3 96 111 201 180 191 237 220 234 253 54 166 0 212 231 255 27 129 0 147 161 221 115 249 0 162 182 229 61 183 0 61 175 0 176 187 236 41 173 0 217 232 253 137 164 224 68 184 0 4 135 0 4 133 0 85 212 0 14 112 0 226 239 255 31 134 0 215 232 254 92 225 0 172 183 235 243 249 255 0 0 0 123 255 0 15 139 0 32 165 0 103 255 0 144 255 27 46 203 0 56 194 0 29 157 0 90 248 0 60 217 0 192 255 130 94 251 0 23 151 0 206 255 147 111 255 0 148 255 63 37 167 0 10 132 0 27 154 0 51 187 0 130 254 18 14 139 0 48 201 0 102 255 0 21 148 0 28 183 0 164 255 71 18 174 0 55 192 0 167 224 170 171 255 81 45 179 0 18 142 0 116 255 0 42 191 0 113 255 0 32 162 0 93 251 0 43 178 0 6 128 0 23 152 0 84 241 0 84 239 0 37 192 0 37 168 0 10 133 0 27 155 0 159 255 70 0 98 0 14 166 0 85 242 0 41 175 0 112 255 0 75 231 0 135 255 26 31 160 0 65 222 0 55 211 0 141 157 224 164 175 229 178 194 242 178 187 232 130 147 221 46 145 54 47 129 47 46 132 45 46 133 45 250 255 255 241 249 255 195 206 251 184 201 251 178 197 251 182 200 251 170 192 251 187 202 251 177 197 251 166 191 251 7 162 0 0 111 0 0 107 0 1 122 0 16 173 0 0 154 0 0 142 0 0 120 0 0 118 0 0 116 0 0 114 0]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O??0_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8O??0@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+uiPainter22x22Icon3
+    "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 uiPainter22x22Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter22x22Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class uiPainter22x22Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)R@?EPY%C!!QKGW5ZM050RL[C1H8+KQL?Q7<>YE@6W''UIE#@EW[*L9JN&-HAVVTIUSTY2U4@!!B6L8UA3)&,?M2HLYLW ^
+[#I''V6@QS''1_C4*55Y7P-("&SA PC@0LC@0LC@0LC@0L7Y''""<*GC@09V@0JB (JB (JB 0LB)^_9;"[0P(LT"XLB 0LC@0LC@$LCK6R.\.O:@0ICC,''C@(L
+C@0LC@0IC@234YV;9) LBP1:[@0JC@0LC@0LBP3X''-K@5<3TC@$LOF4LBP$IBP$IBP$L%K:I(,_EBP$ICBP(C@0LC@0LC@0L([B?7(*+C@0LC@1*[00IBP$I
+BP$IB]3[+XZ$80$IBP$LOWDLBPLC@0LC@:*Q%-?  *8C@0HACBT*C@$C@0LC@0ON*[F/-=(C@0LB@P0%_ 0I@0LC@0LC2Y2M!!NGY@ LC@ DLIWLLBPHB@ HB
+@*V#$IN''@ HB@ HACBUCC@$A@PDA@PF((>WV@PDA@PDA@P0%K@0LC@0LC@0L+HWBC@0LC@0LC@0LIR0LC@0LC@0LCKJ C@0LC@0LC@0LCBT,C@0LC@0LC@2<
+C@0LC@0LC@0LC@0%Y''P4MWXGBEESB@!!SH&$%IRT%IRT%Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[160 160 160 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 72 122 199 116 116 120 237 236 242 72 141 255 212 211 224 32 101 209 63 143 226 153 188 255 106 175 235 170 204 255 7 66 194 0 50 164 58 137 224 75 160 234 66 135 255 140 175 255 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 80 149 255 55 95 181 125 160 253 52 89 178 50 87 176 105 172 233 104 170 232 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 2 56 178 3 73 255 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 81 136 209 101 170 255 36 107 211 54 123 255 56 94 181 126 161 253 55 92 180 53 90 178 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 96 157 223 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 28 97 255 109 178 255 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 39 109 255 93 161 255 157 192 255 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 181 215 255 255 255 255 52 90 178 51 88 177 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 87 145 215 84 153 255 78 131 206 10 79 255 91 168 235 127 162 254 54 91 179 14 77 199 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????????????') ; yourself); yourself]
+!
+
+uiPainter32x32Icon3a
+    "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 uiPainter32x32Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter32x32Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class uiPainter32x32Icon3a'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)R@?EPY%C!!QKGW5ZM050RL[C1H8+KQL?Q7<>YE@6W''UIE#@EW[*L9JN&-HAVVTIUSTY2U4@!!B6L8UA3)&,?M2HLYLW ^
+[#I''V6@QS''1_C4*55Y7P-("&SA PC@0LC@0LC@0LC@0L7Y''""<*GC@09V@0JB (JB (JB 0LB)^_9;"[0P(LT"XLB 0LC@0LC@$LCK6R.\.O:@0ICC,''C@(L
+C@0LC@0IC@234YV;9) LBP1:[@0JC@0LC@0LBP3X''-K@5<3TC@$LOF4LBP$IBP$IBP$L%K:I(,_EBP$ICBP(C@0LC@0LC@0L([B?7(*+C@0LC@1*[00IBP$I
+BP$IB]3[+XZ$80$IBP$LOWDLBPLC@0LC@:*Q%-?  *8C@0HACBT*C@$C@0LC@0ON*[F/-=(C@0LB@P0%_ 0I@0LC@0LC2Y2M!!NGY@ LC@ DLIWLLBPHB@ HB
+@*V#$IN''@ HB@ HACBUCC@$A@PDA@PF((>WV@PDA@PDA@P0%K@0LC@0LC@0L+HWBC@0LC@0LC@0LIR0LC@0LC@0LCKJ C@0LC@0LC@0LCBT,C@0LC@0LC@2<
+C@0LC@0LC@0LC@0%Y''P4MWXGBEESB@!!SH&$%IRT%IRT%Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[160 160 160 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 72 122 199 116 116 120 237 236 242 72 141 255 212 211 224 32 101 209 63 143 226 153 188 255 106 175 235 170 204 255 7 66 194 0 50 164 58 137 224 75 160 234 66 135 255 140 175 255 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 80 149 255 55 95 181 125 160 253 52 89 178 50 87 176 105 172 233 104 170 232 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 2 56 178 3 73 255 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 81 136 209 101 170 255 36 107 211 54 123 255 56 94 181 126 161 253 55 92 180 53 90 178 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 96 157 223 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 28 97 255 109 178 255 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 39 109 255 93 161 255 157 192 255 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 181 215 255 255 255 255 52 90 178 51 88 177 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 87 145 215 84 153 255 78 131 206 10 79 255 91 168 235 127 162 254 54 91 179 14 77 199 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????????????') ; yourself); yourself]
+!
+
+unixShellTerminal22x22Icon
+    "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 unixShellTerminal22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#unixShellTerminal22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class unixShellTerminal22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+ XFA XFA XFA XFA XFA XFA XFA XFAPX)8%QL9U9LQ]T52^(@/K2</ XFAGDFA XFA XFA XFA:>/+:>2ANRVA TJA(Q(ZF!!(ZF!!+#9^W%9^S- _H% XF[
+ ^[K*;OZ7^C!!+]OA0?W:>8G.IXFAF8G&2:.''):_ 8Z7S0\O5>/.A<BVA R^A9-2''3Z_Q)>F-4<G9=_+; _H% XEJ ^J6);B''7^C!!+]OA>_W:>8G.IXFA\XG"
+*:^0)=618Z7S0_''5>/.A<BVA S:A8*.3):^'',Z7J0\OY=_+; _@% XE!! ^J?,MF''7Z^-4<GC6_+;?XG/IXFAL8G",=+R)=6''+]OA6S?U>O>A;2VA X6A8;B''
+7Z^1)=.*4L#U3?36 _L% XE- ^O],Z^'')=SL5,B).[''>=(G1IXFA[XG%+*:;1=,++;SH/\?8??^A<RVA V6A XFA XFA XFA XFA XFA _P% XE-</K.;/C/
+;?O3<?G1<_O3<_G1IXFA RT%IRT%IRT%IRT%IRT%IRT%IXFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA
+ XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA P@a') ; colorMapFromArray:#[109 243 0 55 187 0 11 108 0 18 149 0 55 167 0 213 232 255 218 229 250 217 227 249 62 176 0 90 104 197 79 200 0 226 234 251 96 230 0 210 230 255 69 185 0 86 215 0 42 150 0 142 156 218 187 197 239 158 177 227 201 255 153 32 135 0 197 206 242 49 159 0 22 122 0 39 148 0 160 173 232 131 157 220 147 178 229 224 238 255 73 206 0 56 168 0 221 232 252 29 131 0 73 190 0 90 224 0 19 118 0 63 67 120 63 177 0 126 151 218 16 146 0 53 164 0 70 186 0 33 164 0 214 224 248 213 222 247 132 255 21 99 106 198 16 114 0 60 173 0 216 232 253 101 118 203 30 162 0 111 245 0 184 194 238 47 180 0 224 237 254 154 172 225 223 235 253 214 232 254 194 203 241 64 178 0 111 131 209 17 149 0 133 145 214 167 193 234 142 171 226 249 252 255 61 194 0 216 225 249 44 152 0 105 239 0 34 139 0 7 102 0 121 144 215 209 230 255 246 250 255 128 139 212 24 124 0 68 185 0 102 235 0 4 98 0 48 157 0 21 122 0 206 255 162 45 177 0 11 107 0 150 167 223 72 196 0 219 230 251 156 255 66 62 195 0 168 180 234 1 94 0 191 200 240 89 214 0 106 240 0 106 124 206 69 202 0 8 103 0 218 232 253 159 255 72 32 164 0 113 247 0 59 191 0 164 176 233 42 149 0 76 209 0 76 195 0 85 97 195 49 164 0 49 158 0 190 255 132 116 137 212 123 134 209 83 216 0 12 122 0 137 151 216 119 252 2 118 252 1 166 187 231 194 222 255 118 128 207 36 141 0 97 226 0 87 221 0 16 113 0 77 210 0 113 122 205 255 255 255 23 128 0 40 146 0 30 151 0 225 238 255 13 111 0 101 235 0 47 179 0 222 234 252 170 192 234 252 253 255 121 253 3 96 111 201 180 191 237 220 234 253 54 166 0 212 231 255 27 129 0 147 161 221 115 249 0 162 182 229 61 183 0 61 175 0 176 187 236 41 173 0 217 232 253 137 164 224 68 184 0 4 135 0 4 133 0 85 212 0 14 112 0 226 239 255 31 134 0 215 232 254 92 225 0 172 183 235 243 249 255 0 0 0 123 255 0 15 139 0 32 165 0 103 255 0 144 255 27 46 203 0 56 194 0 29 157 0 90 248 0 60 217 0 192 255 130 94 251 0 23 151 0 206 255 147 111 255 0 148 255 63 37 167 0 10 132 0 27 154 0 51 187 0 130 254 18 14 139 0 48 201 0 102 255 0 21 148 0 28 183 0 164 255 71 18 174 0 55 192 0 167 224 170 171 255 81 45 179 0 18 142 0 116 255 0 42 191 0 113 255 0 32 162 0 93 251 0 43 178 0 6 128 0 23 152 0 84 241 0 84 239 0 37 192 0 37 168 0 10 133 0 27 155 0 159 255 70 0 98 0 14 166 0 85 242 0 41 175 0 112 255 0 75 231 0 135 255 26 31 160 0 65 222 0 55 211 0 141 157 224 164 175 229 178 194 242 178 187 232 130 147 221 46 145 54 47 129 47 46 132 45 46 133 45 250 255 255 241 249 255 195 206 251 184 201 251 178 197 251 182 200 251 170 192 251 187 202 251 177 197 251 166 191 251 7 162 0 0 111 0 0 107 0 1 122 0 16 173 0 0 154 0 0 142 0 0 120 0 0 118 0 0 116 0 0 114 0]; mask:((ImageMask new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@O??0_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8O??0@@@@@@@@@@@@@@@@') ; yourself); yourself]
+!
+
+view22x22Icon
+    "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 view22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#view22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class view22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)SM"H Z!!D2E5LLRMU1J.\";APA=BRRA"\\Y!!(G5U$;]3ID8E$T4D#6=KR<^D#FVC]7B0"&L5C9=X "=<K[%KR4,,S;,1
++EB$#)0\^LNZEWR)I&QQ/%,7]",[)ZV%)ZV%)ZV%)ZV%)XXWFF&3Q2)Z":V%)ZV%)ZV%)ZV%)XXWFF&3Q9Q> C2%)ZV%)ZV%)ZV%)ZVFE1!!),4^T_%0=)ZV%
+)ZV%)ZV%)XXWZF&3Q9PI^##@**V%)ZV%)ZV%)XZ%ZF%EQ9P''^+0:W*.%)ZV%)ZV%)ZVF)V!!)QT^TI7*<N#$?)ZV%)ZV%)ZTWZKIEQ9P''^+04(0B''+ZV%)ZV%
+)ZTWZKIE$)P''^+04(1XBXJ>%)ZV%)ZV%E6"2QYJTI7*<MJLV@#-A)ZV%)ZTWZL%E$  ''^+1Y(1Y&2D0;1ZV%)ZTWZL%E$  ''^+1Y(1Y&2DP)N;F%)ZV%E6#I
+QYHHI7*<VZLVY,!!DJS-'')ZTWZL%E$ !!9.+1Y(1Y&2DRPIP4;P8 Z@PNV&I,NWU>(Z15-R$0)&P4PN:J6T%R8A0-? Y6^L#Z&N3,;N3,;N6:%)ZV%)ZV%)ZV%
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[227 227 236 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 244 244 249 242 242 247 118 118 122 72 122 199 116 116 120 218 217 230 237 236 242 72 141 255 212 211 224 141 141 141 32 101 209 63 143 226 133 133 133 153 188 255 234 234 242 253 253 254 251 251 252 127 127 127 249 249 250 106 175 235 170 204 255 227 226 235 135 135 138 7 66 194 0 50 164 58 137 224 75 160 234 123 123 126 66 135 255 226 226 237 140 175 255 243 243 247 119 119 122 220 220 231 240 239 244 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 237 237 244 80 149 255 55 95 181 125 160 253 233 233 240 52 89 178 231 231 238 50 87 176 105 172 233 104 170 232 138 138 140 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 229 229 239 248 248 251 124 124 126 246 246 249 122 122 124 2 56 178 223 223 233 3 73 255 222 221 232 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 128 128 133 81 136 209 101 170 255 126 126 131 36 107 211 54 123 255 238 238 244 56 94 181 126 161 253 55 92 180 235 234 241 53 90 178 233 232 239 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 232 232 241 96 157 223 251 251 253 249 249 251 125 125 126 228 228 237 123 123 124 225 224 234 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 243 243 248 241 241 246 117 117 121 28 97 255 109 178 255 238 237 243 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 132 132 132 254 254 255 128 128 128 250 250 251 229 229 237 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 227 227 238 39 109 255 246 246 250 93 161 255 244 244 248 120 120 123 242 242 246 118 118 121 241 240 245 219 219 230 157 192 255 239 238 243 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 236 236 243 181 215 255 255 255 255 52 90 178 51 88 177 231 230 238 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 249 249 252 247 247 250 123 123 125 121 121 123 87 145 215 84 153 255 78 131 206 10 79 255 241 241 247 91 168 235 239 239 245 115 115 120 127 162 254 236 235 242 54 91 179 14 77 199 138 138 139 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 231 231 240 250 250 252]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+viewAdd22x22Icon
+    "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 viewAdd22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewAdd22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class viewAdd22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)R-UG@ZLDA-&JJ):R >YX2Z(M1$9O!!)UX*1T"65I JA$GTLE_$K*.VA@PJ54^U!!3ZFF[]5X-CX)K\"_U,,+VPD@$QJP)
+%4VO^8\WZZ&EDVVT4KR7,T8/Y2LV$IBP$IBP$IBP$IBP$L_I6+F^ORIM^IBP$IBP$IBP$IBP$GV?.L7DOXE.\CRP$IBP$IBP$IC-8=''Y1;;Q1L;[74<5$IBP
+$IBP$IB3<\CF;<K+3[_&2<# %YBP$IBP$IBP7[+^0;R43_KX-^_W7IZP$IBP$IBP$ICA1LSD;K_!!6=?09SD6$IBP$IBP$I@SV94<O[/)2<T,# BR&IBP$IBP
+$I@SV94<_8GT2;CO#!!HBT9*P$IBP$IBPD5.]OG>A:K3W4(8R@#L8$IBP$I@SV:<<_0  Z>KS9KYY+$D3*9BP$I@SV:<<_0  Z:UL/^9Y+#,!!L92P$IBPD5./
+OG<HHF.%SH8RVZ8;HSMZ$I@SV:<<_0!!*(:UL#!!IY+#-=G ,3N''XU@PNB 8XLTEJSWQ!!^O4D!!!!@,NL86_Q4"!!A0)/\X"IJ":QL3L3L3L3L5>%)ZV%)ZV%)ZV%
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[227 227 236 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 244 244 249 242 242 247 72 122 199 218 217 230 237 236 242 72 141 255 212 211 224 32 101 209 63 143 226 153 188 255 234 234 242 253 253 254 251 251 252 249 249 250 106 175 235 170 204 255 227 226 235 7 66 194 0 50 164 58 137 224 75 160 234 66 135 255 226 226 237 140 175 255 243 243 247 220 220 231 240 239 244 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 237 237 244 80 149 255 55 95 181 125 160 253 233 233 240 52 89 178 231 231 238 50 87 176 105 172 233 104 170 232 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 229 229 239 248 248 251 246 246 249 2 56 178 223 223 233 3 73 255 222 221 232 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 81 136 209 101 170 255 36 107 211 54 123 255 238 238 244 56 94 181 126 161 253 55 92 180 235 234 241 53 90 178 233 232 239 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 232 232 241 96 157 223 251 251 253 249 249 251 228 228 237 225 224 234 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 243 243 248 241 241 246 28 97 255 109 178 255 238 237 243 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 254 254 255 250 250 251 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 227 227 238 39 109 255 246 246 250 93 161 255 244 244 248 242 242 246 241 240 245 219 219 230 157 192 255 239 238 243 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 236 236 243 181 215 255 255 255 255 52 90 178 51 88 177 231 230 238 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 249 249 252 247 247 250 87 145 215 84 153 255 78 131 206 10 79 255 241 241 247 91 168 235 239 239 245 127 162 254 54 91 179 14 77 199 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 231 231 240 250 250 252 64 176 48 15 127 15 32 159 31 112 159 95 144 239 127 95 192 79 95 112 80 127 208 96 176 240 159 160 176 95 31 159 31 15 112 15 63 175 48 143 159 128 176 239 159 16 175 16 144 224 127 31 95 15 176 240 144 143 239 112 0 127 0 16 95 16 175 240 144 15 175 15 63 160 47 175 239 144 31 144 16 80 191 64 176 175 128 143 224 112 0 112 0 16 80 16 15 160 15 143 224 111 16 79 16 16 80 15 0 111 0 80 176 64 95 159 79 48 159 47 111 207 80 0 175 0 128 224 111 0 96 0 15 79 15 127 159 111 128 223 111 0 95 0 15 80 0 96 207 80 64 112 63 0 160 0 15 79 0 15 64 15 96 207 79 64 176 63 0 80 0 95 207 79 159 159 63 159 239 127 15 128 15 95 160 47 144 159 143 191 240 159 0 79 0 32 160 31 127 223 96]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+viewDetails22x22Icon
+    "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 viewDetails22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewDetails22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class viewDetails22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)SM"H Z!!D2E5LLRMU1J.\";APA=BRRA"\\Y!!(G5U$;]3ID8E$T4D#6=KR<^D#FVC]7B0"&L5C9=X "=<K[%KR4,,S;,1
++EB$#)0\^LNZEWR)I&QQ/%,7]",[)ZV%)ZV%)ZV%)ZV%)XXWFF&3Q2)Z":V%)ZV%)ZV%)ZV%)XXWFF&3Q9Q> C2%)XTYFQ&%)X^G)Q''JE<.4,4 I/50=)ZV%
+)ZV%)ZV%)XXWZF&3Q9PI^##@**V%)ZV%)ZV%)XZ%ZF%EQ9P''^+0:W*.%)QPYFQ&%)Q&G)T[KE4"5,2L4"S$?)ZV%)ZV%)ZTWZKIEQ9P''^+04(0B''+ZV%)ZV%
+)ZTWZKIE$)P''^+04(1XBXJ>%)Q$YFQDWZDX>)T"5E2 J,5M&R#-A)ZV%)ZTWZL%E$  ''^+1Y(1Y&2D0;1ZV%)ZTWZL%E$  ''^+1Y(1Y&2DP)N;F%)Q''JZ,IE
+$$ ^)R (E7,L,5ZP&S-'')ZTWZL%E$ !!9.+1Y(1Y&2DRPIP4;P8 Z@PNV&I,NWU>(Z15-R$0)&P4PN:J6T%R8A0-? Y6^L#Z&N3,;N3,;N6:%)ZV%)ZV%)ZV%
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[227 227 236 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 244 244 249 242 242 247 118 118 122 72 122 199 116 116 120 218 217 230 237 236 242 72 141 255 212 211 224 141 141 141 32 101 209 63 143 226 133 133 133 153 188 255 234 234 242 253 253 254 251 251 252 127 127 127 249 249 250 106 175 235 170 204 255 227 226 235 135 135 138 7 66 194 0 50 164 58 137 224 75 160 234 123 123 126 66 135 255 226 226 237 140 175 255 243 243 247 119 119 122 220 220 231 240 239 244 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 237 237 244 80 149 255 55 95 181 125 160 253 233 233 240 52 89 178 231 231 238 50 87 176 105 172 233 104 170 232 138 138 140 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 229 229 239 248 248 251 124 124 126 246 246 249 122 122 124 2 56 178 223 223 233 3 73 255 222 221 232 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 128 128 133 81 136 209 101 170 255 126 126 131 36 107 211 54 123 255 238 238 244 56 94 181 126 161 253 55 92 180 235 234 241 53 90 178 233 232 239 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 232 232 241 96 157 223 251 251 253 249 249 251 125 125 126 228 228 237 123 123 124 225 224 234 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 243 243 248 241 241 246 117 117 121 28 97 255 109 178 255 238 237 243 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 132 132 132 254 254 255 128 128 128 250 250 251 229 229 237 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 227 227 238 39 109 255 246 246 250 93 161 255 244 244 248 120 120 123 242 242 246 118 118 121 241 240 245 219 219 230 157 192 255 239 238 243 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 236 236 243 181 215 255 255 255 255 52 90 178 51 88 177 231 230 238 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 249 249 252 247 247 250 123 123 125 121 121 123 87 145 215 84 153 255 78 131 206 10 79 255 241 241 247 91 168 235 239 239 245 115 115 120 127 162 254 236 235 242 54 91 179 14 77 199 138 138 139 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 231 231 240 250 250 252 126 126 127 124 124 125]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+!
+
+viewFlyByInfo22x22Icon
+    "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 viewFlyByInfo22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewFlyByInfo22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class viewFlyByInfo22x22Icon'
+        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+\GA0\GA0\GA0\GA0\GA0\GA0\GA0\C@:PS09MSH*HQ8\F!! TD1@OB0(IA@D:\''A#W55UR4]@NB<_F1\RC  GA0TBP&=%XE9YS$%DO#P)GQ$UDP0GA0\F@4*-
+):Z%)IZU%INF!!XRB\7E.ZFQ"XQY\</K2</K2<.X@@@@@@@@@@@@@@M .V?K2</K2</K2<?G1<_G1<_G1<PCRKU+2</K2</K2</O1<_G1<_G1<_D@<"-X<$A@
+PDA@PDC3<_O3<?O1<_G1@OH(U?I@-+Z6-+X@<?G1<_G1<_G1<PC2I%[2PKZ6-+X@<_G1<?O3<_G1<_D@<"QT<$B6-+X@<_G1<_G1<_G1<_G1@OH#T?I@-+Z6
+@@@@@OG3<?O1<_G1<PC2H%K2PKZ6-+Z6POO1<_G1<_G1<_D@<"AQ<$A@PDA@PDC3<_O3<?O1<_G1@OH TOK2</K2</K2<?G1<_G1<_G1<PC2HD?23?K2</K2
+</O1<?O3<?G1<_D@<"AM</K2</K2</K3<_G1<_G1<_G1@OH SN#2</K2</K2<?O3<?O3<?O3<?O2HBC(:N#(:N#(:N#(:N#(:N#(</K2< 4 HB@ HB@ HB@J
+HB@ HB@ HB@ HB@ @@@@@@@@@GA0\GA0\GA0\GA0\GA0\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 50 164 0 50 171 1 50 177 2 56 178 3 64 241 3 67 246 3 73 255 4 74 255 5 63 191 7 66 194 10 71 196 10 79 255 12 59 167 12 82 255 14 77 199 18 83 201 19 88 255 21 91 255 23 89 204 27 95 206 28 97 255 29 72 179 30 100 255 32 101 209 36 106 255 36 107 211 39 109 255 41 113 214 45 115 255 45 119 216 48 118 255 50 87 176 50 125 219 51 88 176 51 88 177 52 89 178 52 90 178 53 90 178 53 127 212 54 91 179 54 123 255 54 131 221 55 92 180 55 95 181 56 93 180 56 94 181 57 127 255 57 149 229 58 99 184 58 137 224 61 104 187 63 132 255 63 143 226 64 108 190 66 113 193 66 135 255 67 149 229 68 157 232 69 117 196 71 155 231 72 122 199 72 141 255 75 126 202 75 144 255 75 160 234 77 163 236 78 131 206 80 149 255 81 136 209 84 140 212 84 153 255 87 145 215 88 157 255 91 168 235 93 161 255 94 154 222 96 157 223 96 165 255 97 159 225 98 160 225 98 162 226 99 163 227 100 165 228 101 166 229 101 170 255 102 167 230 103 169 231 104 170 232 104 173 255 105 172 233 105 174 234 106 175 235 109 178 255 112 180 255 117 186 255 119 187 255 122 154 245 125 160 253 125 193 255 126 161 253 126 194 255 127 127 175 127 128 175 127 162 254 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 130 165 254 132 200 255 132 201 255 135 170 255 139 207 255 140 175 255 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 179 255 144 191 239 149 184 255 153 188 255 157 192 255 159 159 192 159 160 192 159 160 207 159 160 208 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 162 196 255 166 200 255 170 204 255 174 208 255 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 177 212 255 181 215 255 185 219 255 188 222 255 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 225 255 192 192 208 192 239 255 192 240 255 207 143 95 207 207 191 207 223 239 207 239 240 207 255 255 208 208 223 208 224 239 208 255 255 212 211 224 217 217 217 218 217 230 219 219 230 220 220 231 222 221 232 223 128 63 223 255 255 225 225 234 226 226 237 227 227 236 227 227 238 228 228 237 229 229 239 231 230 238 231 231 238 231 231 240 232 232 241 233 232 239 233 233 240 234 234 242 235 234 241 236 236 243 237 236 242 237 237 244 238 237 243 239 238 243 239 239 240 239 239 245 239 255 255 240 207 144 240 239 244 241 240 245 241 241 246 242 242 246 242 242 247 243 243 247 244 244 248 245 244 247 246 246 249 246 246 250 247 246 249 247 247 250 248 248 251 249 249 250 249 249 251 249 249 252 250 250 251 251 251 252 251 251 253 253 253 254 254 254 255 255 175 79 255 191 80 255 191 95 255 207 144 247 241 170 255 255 255 0 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????????@@@C') ; yourself); yourself]
+!
+
+viewNoDetails22x22Icon
+    "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 viewNoDetails22x22Icon inspect
+     ImageEditor openOnClass:self andSelector:#viewNoDetails22x22Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class viewNoDetails22x22Icon'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)SM"H Z!!D2E5LLRMU1J.\";APA=BRRA"\\Y!!(G5U$;]3ID8E$T4D#6=KR<^D#FVC]7B0"&L5C9=X "=<K[%KR4,,S;,1
++EB$#)0\^LNZEWR)I&QQ/%,7]",[)ZV%)ZV%)ZV%)ZV%)XXWFF&3Q2)Z":V%)ZV%)ZV%)ZV%)XXWFF&3Q9Q> C2%)XTYFQ&%)ZV%)ZU:E1 V,4\I/50=)ZV%
+)ZV%)ZV%)XXWZF&3Q9PI^##@**V%)ZV%)ZV%)XZ%ZF%EQ9P''^+0:W*.%)QPYFQ&%)ZTH)ZU:FA V,4\4"S$?)ZV%)ZV%)ZTWZKIEQ9P''^+04(0B''+ZV%)ZV%
+)ZTWZKIE$)P''^+04(1XBXJ>%)Q$YFQDWZJTH)ZU:E1 V,4]&R#-A)ZV%)ZTWZL%E$ "%^+1Y(1Y&2D0;1ZV%)ZTWZL%E$  ''^+1Y(1Y&2DP)N;F%)Q''JZ,IE
+$*TH)ZV%FA V,4^P&S-'')ZTWZL%E$ !!9.+1Y(1Y&2DRPIP4;P8 Z@PNV&I,NWU>(Z15-R$0)&P4PN:J6T%R8A0-? Y6^L#Z&N3,;N3,;N6:%)ZV%)ZV%)ZV%
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[227 227 236 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 244 244 249 242 242 247 118 118 122 72 122 199 116 116 120 218 217 230 237 236 242 72 141 255 212 211 224 141 141 141 32 101 209 63 143 226 133 133 133 153 188 255 234 234 242 253 253 254 251 251 252 127 127 127 249 249 250 106 175 235 170 204 255 227 226 235 135 135 138 7 66 194 0 50 164 58 137 224 75 160 234 123 123 126 66 135 255 226 226 237 140 175 255 243 243 247 119 119 122 220 220 231 240 239 244 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 237 237 244 80 149 255 55 95 181 125 160 253 233 233 240 52 89 178 231 231 238 50 87 176 105 172 233 104 170 232 138 138 140 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 229 229 239 248 248 251 124 124 126 246 246 249 122 122 124 2 56 178 223 223 233 3 73 255 222 221 232 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 128 128 133 81 136 209 101 170 255 126 126 131 36 107 211 54 123 255 238 238 244 56 94 181 126 161 253 55 92 180 235 234 241 53 90 178 233 232 239 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 232 232 241 96 157 223 251 251 253 249 249 251 125 125 126 228 228 237 123 123 124 225 224 234 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 243 243 248 241 241 246 117 117 121 28 97 255 109 178 255 238 237 243 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 132 132 132 254 254 255 128 128 128 250 250 251 229 229 237 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 227 227 238 39 109 255 246 246 250 93 161 255 244 244 248 120 120 123 242 242 246 118 118 121 241 240 245 219 219 230 157 192 255 239 238 243 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 236 236 243 181 215 255 255 255 255 52 90 178 51 88 177 231 230 238 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 249 249 252 247 247 250 123 123 125 121 121 123 87 145 215 84 153 255 78 131 206 10 79 255 241 241 247 91 168 235 239 239 245 115 115 120 127 162 254 236 235 242 54 91 179 14 77 199 138 138 139 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 231 231 240 250 250 252 126 126 127]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????@@@C@@@C') ; yourself); yourself]
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-24x24'!
+
+browseClassExtensions24x24Icon
+    "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 browseClassExtensions24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#browseClassExtensions24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class browseClassExtensions24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NP(JB (JB (JB (JNP@@@@@@@@@@@@@@B)FQ$YFQ$YFQ$YD9B @@@@@@@@@@@@@@B)E,[F1,[F1,[F0RB @@@@@@@@@@@@@@B)E,[F1,[F1,[F0RB @@@K:X
+@@@@@@@@B)E,[F1,[F1,[F0RB @@(,/@40@@@@@@B#$RD!!HRD!!HRD!!HRB @@+KRU, @@@@@@NP(JB (JB (JB (JNP@@1Y[B, @@@@@@@@@@@@@@@@ADEQPX
+IR)P5IN$*@@@@@@@@@@@@@@@@A,''RE!!YUD@(H&^/*KZ\-;\@@@@@@@@@J6%1\WECA TEJQ!!''%ZF)):_P@@@@@@@,X''E1\WECA LES%$U.\^%2,*;@@@@@DX?
+ WE1\WECA PDS%$ L[^5/;<@@@@@@CMR\U-NS$9NA 4MS$9ND0@@@@@@@@@@@B1YVT8KB@4MC 8NC 4EE0@@@@@@@@@@@B1&R4LKA 4NC0<OC08EGP@@@@@@
+@@@@@B1YUTLKC@8ODQDQD@<EGP@@@@@@@@@@@B5IVT5CP4MCB0,KP4MCE@@@@@@@@@@@@DT5VU%YVU%CB0,KP5%YF @@@@@@@@@@@@@_PE%YVU%CB0,KP5$\
+Y0@@@@@@@@@@@@@$G4%&VU%CB0,KP3H<@@@@@@@@@@BP %4#E!!<6T6Y1Z&MQL#4@@@@@@@@@@H>M#E0!!@@@%FQ8&MCH>U0@@@@@@@@@@#8:L[S(0@@@@@@@@
+@@@@@@@@@@@@@@@@#(1-N2<@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 32 223 32 40 255 124 50 255 112 51 255 109 54 229 139 62 255 87 62 255 88 62 255 91 62 255 136 64 64 64 73 255 115 83 255 62 91 255 73 94 255 74 101 255 84 105 255 85 112 255 96 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 170 170 170 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 176 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 183 183 183 190 190 190 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 196 196 196 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 217 217 217 223 32 32 223 128 63 223 192 255 223 223 32 223 223 224 223 255 255 224 224 224 224 224 239 224 239 240 224 255 255 231 207 255 231 208 255 238 191 255 238 192 255 239 159 232 239 191 255 239 223 255 239 224 255 239 239 224 239 239 239 239 239 240 239 255 255 240 207 144 240 239 223 240 240 239 240 255 255 246 176 255 247 175 255 247 207 255 247 239 255 254 160 255 254 191 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255 176 175 128 176 240 159 143 159 128 127 208 96 175 239 144 15 79 0 160 176 95 0 160 0 64 176 48 112 159 95 0 96 0 144 159 143 96 207 80 127 159 111 63 175 48 96 207 79 80 176 64 31 159 31 143 224 112 64 176 63 95 207 79 63 160 47 0 127 0 80 191 64 176 240 144 143 239 112 15 160 15 16 95 16 0 80 0 143 224 111 191 240 159 175 240 144 15 127 15 0 175 0 144 239 127 0 79 0 0 112 0 0 95 0 15 112 15 111 207 80 16 79 16 15 79 15 16 80 16 128 223 111 159 159 63 15 64 15 31 144 16 16 80 15 128 224 111 176 239 159 95 112 80 15 175 15 144 224 127 95 192 79 31 95 15 32 160 31 48 159 47 32 159 31 15 128 15 95 160 47 0 111 0 127 223 96 15 80 0 64 112 63 159 239 127 95 159 79 16 175 16]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?? @?? @?? @??#@??'' ??'' ??'' @O? @_?>@???A???C??>C?? C?? C?? C?? C?? C?? A?? A??@O?>@_O<@?@@@>@@@') ; yourself); yourself]
+!
+
+changesBrowser24x24Icon2
+    "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 changesBrowser24x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#changesBrowser24x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class changesBrowser24x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@ HB@ HB@ HB@ HB@ HA@@@@@@@@@@@B#8>O#8>O#8VB (JB %XA@@@@@@@@@ HB@ HB@ HB@ HB@ HB
+@U,A@@@@@@@@@(>O#8VB#8>E (JB (IV@U4A@@@@@@HB@ HB@ HB@ HB@ HB@ E[@T A@@@@@@JO#8>E (JB!!XJB (JBV0E]@T$A@@@@@@JO@PDA!!V 3APPH
+EQ,=]PE]@T$A@@@@@@JO#8>GS0,WM4UFPS@XD%Y]@T$A@@@@@@JO@X=OGE"O#8>O#8>O#0!!V@T$A@@@@@@JO#6P]TX>O#8>O#8>O#1<E]T$A@@@@@@JO@ST/
+#8>R$)JR#9JR#9DPH DA@@@@@@JOZBRO#8>O#8>O#8>O#9D0@6X@@@@@@@DAYA6O$(>R#9JR$(>R#9EBA6P@@@@@@@@@YA6O#8>O#8>O#8>O#9EYCVP@@@@@
+@@@@YA6O$)JR$(>R$(>R#9ETCVP@@@@@@@@@YA88#8>O#8>O#8>O$IERAFP@@@@@@@@@]SP&$YFQ$YFQ$YFQ$YD6B''T@@@@@@@@@@D<OLEQCQ5%*^G6O#6$L
+U @@@@@@@@@@^&PTC3!!UUU%%YV)=]"L,@@@@@@@@@@BN^T0SA <''PEU%VUH>H255@@@@@@@@@H6K"$,QSTPUBP8VIRL.QGP@@@@@@@@@#X2JX2(!!Y A&S$QP
+U5Y&@@@@@@@@@@@@#H)#J2@2@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 78 78 91 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 156 156 182 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 201 201 218 204 204 219 206 206 221 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 210 210 224 211 211 225 213 213 228 215 215 229 216 216 230 218 218 231 219 219 232 220 220 233 222 222 235 223 128 63 223 223 224 223 255 255 224 224 224 224 224 236 224 224 239 224 239 240 224 255 255 225 225 237 228 228 238 229 229 239 230 230 240 232 232 241 234 234 243 235 235 244 236 236 244 238 238 245 239 239 224 239 239 239 239 239 240 239 239 246 239 255 255 240 207 144 240 239 223 240 240 239 240 240 247 240 255 255 241 241 248 242 242 249 243 243 249 244 244 250 245 245 252 246 246 253 248 248 254 249 249 254 250 250 255 252 252 255 253 253 255 254 254 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255 247 255 255 191 191 191 166 166 173]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@A??8A??8G??8G??8_??8_??8_??8_??8_??8_??8_??8_??0_??0G??0G??0G??0G??0C?? G??@O??@_?>@?/8@?@@@') ; yourself); yourself]
+!
+
+fileBrowser24x24Icon
+    "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 fileBrowser24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileBrowser24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C0@@@@@@@@@@C@0@A XFA XFA XFA XF
+@@@@@@@@@@@@C@0@A @@@@@@@@@@@@@F@@@@@@@@@@@@C@0@A @NC 8NC 8NC @F@@@@@@@@@@@@C@0@A @NC 8@@@@@@@@@@@@@@@@@@@@@C@0@A @NC 8@
+DA@PDA@PDA@P@@@@@@@@C@0@A @@C 8@DA@PDA@PDA@P@@@@@@@@C@0@A @A@@8@DA@P@@@@@A@P@@@@@@@@C@0@A @@@P@@DA@P@A@P@A@P@@@@@@@@C@0@
+A @@@@D@DA@PDA@PDA@P@@@@@@@@C@0@A @@@@@@DA@PDA@PDA@P@@@@@@@@C@0@A @P@@@@DA@PDA@PDA@P@@@@@@@@C@0@A @PD@@@@@@@@@@@@@@@@@@@
+@@@@C@0@A @PD@@@@@@@@@@@@@@@@@@@@@@@C@0@A @PDA@PDA@PD@@F@@@@@@@@@@@@C@0@A @PDA@PDA@PD@@F@@@@@@@@@@@@C@0@A @@@@@@@@@@@@@F
+@@@@@@@@@@@@@@0@A XFA XFA XFA XF@@@@@@@@@@@@@@@@A XFA XFA XFA XF@@@@@@@@@@@@@@@O@@@@@@@@@@@@@@@@C0@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[64 64 64 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170 227 227 22]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@O?? O?? O?? O?? O??<O??<O??<O??<O??<O??<O??<O??<O??<O?? O?? O?? O?? G?? C?? A?? @@@@@@@@') ; yourself); yourself]
+!
+
+leftArrow24x24Icon
+    "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 leftArrow24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#leftArrow24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class leftArrow24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%)ZVM3^V%)X7M3\7M3\7%)ZVM3\7M3^V%)ZVM3^V%)X7M3\7]1 @%)ZVM3\7M3^V%)ZVM3^V%)X7M3]&TT01M9ZVM3\7M3^V%)ZVM3^V%)X7$U8,I3TKM9ZV
+M3\7M3^V%)ZVM3^V%)ZQTSL>FSTKM9ZVM3\7M3^V%)ZVM3^V%%H$!!!!%]"#TKM9ZVM3\7M3^V%)ZVM3^V!!RP?"%Y ]STKM9ZVM3\7M3^V%)ZVM3^NS@16^B!!
+]CT5MST5MST5N0$@M3\7M58EHWQ#XQQ \9^W%6=/MCP4H@EEM3^QTUQ\MH!!!!JBY_TD9MIRT"RP<9LCTKM5JG_)\HJB TI%<6M 9+#8<ZA2-,#STKM8]2DFQN
+XFA W3X6C&-W#4E;^%MG"3TKM8\RVFI W5>DM#XNZ4NOGV!!UK&\^TCTKM7\;#DIP@GA0H 9+U3H_B )UT6\^@#TKM3^PA#5OE 8NC%&RH9NS_8A)_UU)ISTK
+M3\7 (L:RS1+U4P_S"T%IWA0H"JTVPDKDQDQDT)%IA,S$1=)H#T5MST5MST5@W$KDQDQDQEJ RPDC#HJP3U<B0,KB0,KB0-*DQDQDQDQR L$\X<]PCTK[$)J
+R$)JR$)JDQDQDQDQDQD\A&4UJ#TKR!!DQDQDQDQDQDQDQDQDQDQDQK8MFV#TKR!!DQDQDQDQDQDQDQDQDQDQDQDV:IV3TKR!!DQDQDQDQDQDQDQDQDQDQDQDQEJ
+CQ\KR!!DQDQDQDQDQDQDQDQDQDQDQDQDQR$ 1R!!DQDQDQ') ; colorMapFromArray:#[132 239 107 16 150 16 132 239 123 189 215 181 57 199 49 41 166 41 41 158 41 82 231 82 173 251 148 57 166 57 90 211 74 214 211 214 173 235 156 148 199 148 115 239 99 107 235 107 189 251 173 247 243 239 107 211 99 132 247 123 140 247 123 66 227 57 148 247 132 33 154 33 123 195 123 231 255 214 90 231 82 90 227 82 222 227 214 99 223 82 90 207 82 99 215 82 181 251 173 181 239 165 115 239 107 115 227 99 8 150 8 123 239 115 140 247 115 206 243 181 148 247 123 173 170 156 74 231 66 74 227 74 49 166 49 115 142 222 82 203 66 222 231 214 173 251 165 222 223 222 99 223 90 82 182 74 189 255 173 0 146 0 123 243 107 247 243 247 247 239 247 123 239 123 24 162 24 24 154 24 148 251 132 41 174 41 222 251 206 140 215 132 90 235 82 90 235 90 173 251 156 107 239 90 99 219 82 222 219 222 0 158 0 99 211 90 231 227 231 115 235 107 247 239 239 255 255 255 16 154 16 132 243 123 140 243 123 140 243 132 148 243 132 41 162 41 206 227 206 74 203 66 66 178 57 82 207 74 181 251 156 107 235 90 181 251 165 107 235 99 33 211 24 0 150 0 189 247 173 198 251 173 90 182 90 132 243 115 140 243 115 148 251 123 148 243 123 156 251 132 156 243 132 123 190 123 132 199 132 74 199 66 90 215 74 90 215 82 222 219 214 107 239 99 99 227 99 8 170 8 239 235 231 189 255 181 123 239 107 24 182 24 115 211 99 206 255 189 214 255 189 214 255 198 222 255 198 198 223 198 165 251 140 49 162 49 82 215 74 90 223 82 214 207 206 90 211 82 82 190 74 99 219 90 99 215 90 156 203 156 239 235 239 82 174 82 132 243 107 173 215 173 107 195 99 24 158 24 156 251 123 115 186 107 222 255 206 156 243 140 66 190 57 165 251 156 140 203 140 99 235 90 222 227 222 231 239 231 107 227 90 107 223 90 115 235 99 239 243 239 247 247 247 198 255 181]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@0@@A8@@G8@@O8@@_8@@?8@A??>C???O???_???_???_???_???O???G???C???A???@?<@@O8@@G8@@C8@@A8@@@8@') ; yourself); yourself]
+!
+
+leftArrow24x24disabledIcon
+    "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 leftArrow24x24disabledIcon inspect
+     ImageEditor openOnClass:self andSelector:#leftArrow24x24disabledIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class leftArrow24x24disabledIcon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@PD@@@@A@PDA@PDA@@@@@PDA@PD@@@@@@PD@@@@A@PDA@ LD@@@@@PDA@PD@@@@@@PD@@@@A@PDEA \H@P@@@PDA@PD@@@@@@PD@@@@ABP(KC@4N@P@@
+@PDA@PD@@@@@@PD@@@@IA <PDP4N@P@@@PDA@PD@@@@@@PD@@AHSEADUE 4N@P@@@PDA@PD@@@@@@PD@E1LXE!!$ZD@4N@P@@@PDA@PD@@@@@@PD[A10]G!!<Z
+H@4MCP4MCP4MHRHD@PDA@P(#G"@$IRXZI2 (JATUEQTUBB$Y@PDIA"(HER,%G20-K"<0LSD2L3P5M 4N@QH7NB 9G1<&KB4DAC(;OC0=O#=@PP4N@S\>P$L/
+F!!(ZKPPDN#-DOA-EQ$\?R@4N@S]IR"XZKR4-A@P:N1 <O$-LST8TK 4N@PH!!S1H.ACD1L#(;Q@TCQ$YLQ48TT@4N@PDLTUH,P3(:N#P[T5QTUUYWQ$1WLP4N
+@PDAHE!!YL10;QDTCK3D1LSD1L#H;MB$NDQDQDU)KD38/U@MWL 4MCP4MCP4MJRLNDQDQDQEZFALON UFF@4+C 8NC 8NC 86DQDQDQDQV"8SV30>W@4NBU)Z
+V%)ZV%)ZDQDQDQDQDQEBTU5FU 4NV!!DQDQDQDQDQDQDQDQDQDQDQW%!!_X@4NV!!DQDQDQDQDQDQDQDQDQDQDQDP%LXP4NV!!DQDQDQDQDQDQDQDQDQDQDQDQEZ
+X%4NV!!DQDQDQDQDQDQDQDQDQDQDQDQDQV&LHV!!DQDQDQDQDQ') ; colorMapFromArray:#[251 251 251 249 249 249 234 234 234 210 210 210 224 224 224 213 213 213 184 184 184 176 176 176 238 238 238 245 245 245 200 200 200 187 187 187 240 240 240 171 171 171 233 233 233 198 198 198 246 246 246 249 249 249 236 236 236 174 174 174 207 207 207 241 241 241 247 247 247 226 226 226 219 219 219 237 237 237 227 227 227 216 216 216 231 231 231 247 247 247 234 234 234 229 229 229 245 245 245 178 178 178 188 188 188 185 185 185 232 232 232 231 231 231 228 228 228 244 244 244 242 242 242 175 175 175 193 193 193 232 232 232 228 228 228 225 225 225 229 229 229 227 227 227 226 226 226 223 223 223 221 221 221 220 220 220 219 219 219 223 223 223 237 237 237 179 179 179 200 200 200 236 236 236 221 221 221 220 220 220 217 217 217 214 214 214 213 213 213 210 210 210 215 215 215 235 235 235 239 239 239 230 230 230 218 218 218 212 212 212 208 208 208 202 202 202 230 230 230 211 211 211 238 238 238 209 209 209 205 205 205 204 204 204 201 201 201 197 197 197 225 225 225 183 183 183 187 187 187 217 217 217 214 214 214 212 212 212 211 211 211 209 209 209 196 196 196 180 180 180 248 248 248 186 186 186 215 215 215 180 180 180 240 240 240 174 174 174 196 196 196 172 172 172 216 216 216 241 241 241]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@0@@A8@@G8@@O8@@_8@@?8@A??>C???O???_???_???_???_???O???G???C???A???@?<@@O8@@G8@@C8@@A8@@@8@') ; yourself); yourself]
+!
+
+right2Arrow24x24Icon
+    "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 right2Arrow24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#right2Arrow24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class right2Arrow24x24Icon'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HC@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HDAP@@@@@@@@@@@@@@@@@@@@@@@@@@@@HFA0 I@@@@
+@@@@@@@@@@@@@@@@@@@@@@HJB00MC @@@@@@@@@@@@@@@@@@@@@@@@HODADRD1P@@@@@@@@@@@@@@@@@@@@@@@HSFQXWFALY@@@@@@@@@ALZF1,[F1,[F1,_
+AB@!!G!!<DHBD@@@@@HPHWB0,KB0,KB0,%I"\(JRT&I2 )J"(*HPHWJ20-K"</K#@3J3P[CST+MA,MMR(*HPH6M3 8KC$9LC@=O#<4PDEBO3Q@PTH*HPHPKSD8
+NC 0P3EHO$%JR4(SRT)KR!!MLHPIMGSD1LSD1GDP>TUH>T4(ST#9SR!!MTHPIUETP:GC(:QT<>RUYWVE%ZU%]XVU)THPI[EQ0\GA1\WE1IWE5^W6A\WU9_X@@@
+HPHUXVE!!GS 8NFI$Q&U&Y6QFYVY''@@@*JQLB@ HB@ HB@ I*@&-''QF(BZ6\@@B(*JR%T[V5-[V5-[PHS\GE.[1M0\P@@J"(*J"()JR$)JR$)JPI.\''M4D5)1
+@@@*J"(*J"(*J"(*J"(*J I5]'']_XEP@J"(*J"(*J"(*J"(*J"(*J I8^VY:@@@*J"(*J"(*J"(*J"(*J"(*J HB^6\@@@@*J"(*J"(*J"(*J"(*J"(*J I<
+[P@@J"(*J"(*J"(*J"(*J"(*J"(*J''5>@@@*J"(*J"(*J"(*') ; colorMapFromArray:#[240 240 240 223 224 216 0 144 0 159 200 152 16 144 16 112 184 112 207 240 184 48 160 48 80 176 80 224 232 224 239 248 208 208 248 192 80 176 72 47 152 40 224 224 224 224 248 208 191 248 168 223 248 200 96 192 88 15 144 8 192 216 192 127 240 112 159 248 144 207 248 184 128 208 120 144 192 144 32 152 24 63 168 48 112 240 104 128 240 120 192 248 184 159 232 144 128 192 128 240 232 240 127 248 104 111 240 96 111 240 104 176 248 168 160 232 152 47 160 32 80 168 80 240 232 232 240 240 232 159 240 136 143 240 112 143 240 120 143 248 120 144 248 120 128 248 112 127 240 104 96 240 96 95 240 88 160 240 152 224 224 216 192 248 176 144 240 128 128 240 112 143 248 112 112 240 96 111 232 96 96 224 88 95 208 80 80 200 72 112 216 104 79 184 64 31 152 24 192 216 184 127 248 112 112 232 96 111 224 88 96 216 80 96 208 80 95 208 72 79 200 64 95 200 80 144 240 136 239 224 224 176 248 160 112 224 88 111 216 88 111 216 80 80 200 64 79 192 64 143 232 128 223 216 208 160 248 152 96 208 88 143 232 120 63 184 48 31 144 24 175 192 160 159 248 136 112 224 96 112 224 104 32 168 32 32 152 32 192 200 192 128 248 120 128 232 112 95 200 72 112 232 104 16 160 16 79 168 72 208 208 200 239 232 224 80 208 72 79 208 64 112 176 112 224 216 216 208 208 208 96 232 88 48 192 40 128 184 120 223 208 208 80 216 72 95 232 72 31 176 24 80 232 72 63 216 56 15 160 8 32 208 32 0 152 0 207 200 192 111 176 96 128 184 128 208 224 200 223 216 216]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@B@@@C@@@C @@C8@@C<@@C>@@C?@_??0???8???<???>???????????????<???8???0??? @C?@@C>@@C8@@C0@@C @@C@@') ; yourself); yourself]
+!
+
+rightArrow24x24Icon
+    "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 rightArrow24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#rightArrow24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class rightArrow24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HC@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HDAP@@@@@@@@@@@@@@@@@@@@@@@@@@@@HFA0 I@@@@
+@@@@@@@@@@@@@@@@@@@@@@HJB00MC @@@@@@@@@@@@@@@@@@@@@@@@HODADRD1P@@@@@@@@@@@@@@@@@@@@@@@HQEQXWFALY@@@@@@@@@ALZF1,[F1,[F1,K
+EQ0]G!!<DHBD@@@@@HPHWB0,KB0,KB0,KH!!0#IBT&I2 )J"(*HPHWJ20-K"</K#@0LQ0#L#L+MA,MMR(*HPH6M3 8KC$9LC@"GC(;OC4>O3Q@PTH*HPHPKSD8
+NC 0P3D\QDUFQ4 >RT)KR!!MLHPIMGSD1LSD1GDQNS5AGRC9QT#9SR!!MTHPIUETP:GC(:QT=OQ$\=RC9IU%]XVU)THPI[EQ0\GA1\WE1\Q4!!HO$%\WU9_X@@@
+HPHUXVE!!GS 8NFH-RFL>O&QFYVY''@@@*JQLB@ HB@ HB@ H8O%E)QF(BZ6\@@B(*JR%T[V5-[V5-[PIDRT!!.[1M0\P@@J"(*J"()JR$)JR$)JPI.\''M4D5)1
+@@@*J"(*J"(*J"(*J"(*J I5]'']_XEP@J"(*J"(*J"(*J"(*J"(*J I8^VY:@@@*J"(*J"(*J"(*J"(*J"(*J HB^6\@@@@*J"(*J"(*J"(*J"(*J"(*J I<
+[P@@J"(*J"(*J"(*J"(*J"(*J"(*J''5>@@@*J"(*J"(*J"(*') ; colorMapFromArray:#[240 240 240 223 224 216 0 144 0 159 200 152 16 144 16 112 184 112 207 240 184 48 160 48 80 176 80 224 232 224 239 248 208 208 248 192 80 176 72 47 152 40 224 224 224 224 248 208 191 248 168 223 248 200 96 192 88 15 144 8 192 216 192 127 240 112 159 248 144 207 248 184 128 208 120 144 192 144 32 152 24 63 168 48 112 240 104 128 240 120 192 248 184 159 232 144 128 192 128 240 232 240 127 248 104 111 240 96 111 240 104 176 248 168 160 232 152 47 160 32 80 168 80 240 232 232 240 240 232 159 240 136 143 240 112 143 240 120 143 248 120 144 248 120 128 248 112 127 240 104 96 240 96 95 240 88 160 240 152 224 224 216 192 248 176 144 240 128 128 240 112 143 248 112 112 240 96 111 232 96 96 224 88 95 208 80 80 200 72 112 216 104 79 184 64 31 152 24 192 216 184 127 248 112 112 232 96 111 224 88 96 216 80 96 208 80 95 208 72 79 200 64 95 200 80 144 240 136 239 224 224 176 248 160 112 224 88 111 216 88 111 216 80 80 200 64 79 192 64 143 232 128 223 216 208 160 248 152 96 208 88 143 232 120 63 184 48 31 144 24 175 192 160 159 248 136 112 224 96 112 224 104 32 168 32 32 152 32 192 200 192 128 248 120 128 232 112 95 200 72 112 232 104 16 160 16 79 168 72 208 208 200 239 232 224 80 208 72 79 208 64 112 176 112 224 216 216 208 208 208 96 232 88 48 192 40 128 184 120 223 208 208 80 216 72 95 232 72 31 176 24 80 232 72 63 216 56 15 160 8 32 208 32 0 152 0 207 200 192 111 176 96 128 184 128 208 224 200 223 216 216]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@B@@@C@@@C @@C8@@C<@@C>@@C?@_??0???8???<???>???????????????<???8???0??? @C?@@C>@@C8@@C0@@C @@C@@') ; yourself); yourself]
+!
+
+rightArrow24x24disabledIcon
+    "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 rightArrow24x24disabledIcon inspect
+     ImageEditor openOnClass:self andSelector:#rightArrow24x24disabledIcon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class rightArrow24x24disabledIcon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HC@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HDAP@@@@@@@@@@@@@@@@@@@@@@@@@@@@HFA0 I@@@@
+@@@@@@@@@@@@@@@@@@@@@@HJB00MA @@@@@@@@@@@@@@@@@@@@@@@@HN@P<PDQH@@@@@@@@@@@@@@@@@@@@@@@HOD1PUE!!DW@@@@@@@@@ADXFQ$YFQ$YFQ$K
+D1([A!!0DGP<@@@@@C0HUB0,KB0,KB0,KG!!(_HBD"H2P%I"X&C0HUI2 (JR(*JR (J1(_@20''KQ$MK"X&C0HFK1LSJBH"JB ^F"@CE3@1L"43MB\&C0HAJB,S
+D1L(JB,Z@3T]LCX1M3 /NADIC0H9F2,+J2,+F L5N#,0M#D7OCD[NAD9C0H=D0L F"@ MS(:GS@0M#D7O!!,?PDD9C0HTD1(ZF!!)BP$IBLCX6LS]BP2MDQP@@
+C0HSQ$YFF1LSD1((M T1LTD]MD\-@@@&IQDB@ HB@ HB@ HSLS\8@4 BM24@@BX&IRT9RT%IRT%IRPHCM3X5R!!D6OP@@I"X&I"X%IRT%IRT%IPH5M$-LDTD=
+@@@&I"X&I"X&I"X&I"X&I H;RD5DQS$@I"X&I"X&I"X&I"X&I"X&I HHDT\\@@@&I"X&I"X&I"X&I"X&I"X&I HBS"4@@@@&I"X&I"X&I"X&I"X&I"X&I H0
+RP@@I"X&I"X&I"X&I"X&I"X&I"X&I$<!!@@@&I"X&I"X&I"X&') ; colorMapFromArray:#[247 247 247 238 238 238 170 170 170 218 218 218 173 173 173 205 205 205 239 239 239 185 185 185 196 196 196 241 241 241 248 248 248 242 242 242 195 195 195 182 182 182 245 245 245 245 245 245 203 203 203 173 173 173 230 230 230 224 224 224 232 232 232 242 242 242 215 215 215 213 213 213 179 179 179 189 189 189 221 221 221 224 224 224 228 228 228 210 210 210 226 226 226 220 220 220 221 221 221 236 236 236 228 228 228 184 184 184 193 193 193 244 244 244 247 247 247 230 230 230 226 226 226 229 229 229 229 229 229 223 223 223 218 218 218 231 231 231 239 239 239 227 227 227 208 208 208 203 203 203 214 214 214 197 197 197 178 178 178 215 215 215 207 207 207 202 202 202 205 205 205 236 236 236 213 213 213 212 212 212 200 200 200 233 233 233 208 208 208 194 194 194 176 176 176 219 219 219 216 216 216 216 216 216 179 179 179 225 225 225 227 227 227 193 193 193 204 204 204 231 231 231 194 194 194 214 214 214 186 186 186 178 178 178 201 201 201 235 235 235]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@B@@@C@@@C @@C8@@C<@@C>@@C?@_??0???8???<???>???????????????<???8???0??? @C?@@C>@@C8@@C0@@C @@C@@') ; yourself); yourself]
+!
+
+systemBrowser24x24Icon
+    "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 systemBrowser24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#systemBrowser24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class systemBrowser24x24Icon'
+	ifAbsentPut:[(Depth4Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+P"H"H"H"P@@@@@@@I7]7]7]4H@@@@@@@I5UUUUUSH@@@@@@@I5UUUUUSH@@@@@@@I5UUUUUSH@@@@@@@ICL3L3L3H@@@@@@@P"H"H"H"P@@@@@@@@@@@L@@@
+@@@@@@@@@@@@L@@@@@@@@@@@@@@@L@@DH"H"H"H$@@@@L@@B]7]7]7]B@@@CH0@B\QDQDQD2@@@B\#L3\QDQDQD2@@@CH0@B\QDQDQD2@@@@L@@BP3L3L3L2
+@@@@L@@DH"H"H"H$@@@@L@@@@@@@@@@@@@@@L@@DH"H"H"H$@@@@L@@B]7]7]7]B@@@CH0@B]&Y&Y&X2@@@B\#L3]&Y&Y&X2@@@CH0@B]&Y&Y&X2@@@@@@@B
+P3L3L3L2@@@@@@@DH"H"H"H$') ; colorMapFromArray:#[0 0 0 32 223 32 64 64 64 127 127 127 170 170 170 223 32 32 223 223 32 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?? @?? @?? @?? @?? @?? @?? @@ @@@ @@@!!??@!!??A1??A???A1??@!!??@!!??@ @@@!!??@!!??A1??A???A1??@A??@A??') ; yourself); yourself]
+!
+
+systemBrowser24x24Icon2
+    "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 systemBrowser24x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#systemBrowser24x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class systemBrowser24x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+NP(JB (JB (JB (JNP@@@@@@@@@@@@@@B)FQ$YFQ$YFQ$YD9B @@@@@@@@@@@@@@B)E,[F1,[F1,[F0RB @@@@@@@@@@@@@@B)E,[F1,[F1,[F0RB @@@@@@
+@@@@@@@@B)E,[F1,[F1,[F0RB @@@@@@@@@@@@@@B#$RD!!HRD!!HRD!!HRB @@@@@@@@@@@@@@NP(JB (JB (JB (JNP@@@@@@@@@@@@@@@@@@@@@@@@ADEQPX
+IR)P@@@@@@@@@@@@@@@@@@@@@A,''RE!!YUD@(H&\@@@@@@@@@@@@@@@@@J6&Q XFA XEUJQ!!''B (JB (9@@@@@@@,X%,KB0 C@ LGA TU_9FQ$S$J@@@@@DX?
+ U,KBPPDA@PDA X LPDA@QHJ@@@@@CMR\U,K@0 GA 4MA 4ED0DA@QHJ@@@@@B1YVT8KB@4MC 8NC 4EE0DA@QHJ@@@@@B1&R4LKA 4NC0<OC08EGQHRD!!HJ
+@@@@@B1YUTLKC@8ODQDQD@<EGP(JB (9@@@@@B5IVT4KB0,KB0,KB0,KE@@@@@@@@@@@@DT5VT4KB0,KB0,KB0-GF (JB (9@@@@@@@_PD5MST9NS$9NS&,\
+Y9FQ$S$J@@@@@@@$G4%&Y&)1\WVE CH<[6=/[1HJ@@BP %4#E!!<6T6Y1Z&MQL#6B[6=/[1HJ@H>M#E0!!@@@%FQ8&MCH>U8I/[6=/[1HJ#8:L[S(0@@@@@@@@
+K2<RD!!HRD!!HRD!!HJ#(1-N2<@@@@@@@@@B (JB (JB (JB (9') ; colorMapFromArray:#[0 0 0 32 223 32 40 255 124 50 255 112 51 255 109 54 229 139 62 255 87 62 255 88 62 255 91 62 255 136 64 64 64 73 255 115 83 255 62 91 255 73 94 255 74 101 255 84 105 255 85 112 255 96 127 127 127 127 127 175 127 128 175 128 128 175 128 143 175 128 143 176 128 143 191 128 144 191 143 143 176 143 143 191 143 144 191 143 159 191 143 159 192 143 159 207 143 175 208 144 143 143 144 144 191 144 159 160 144 159 191 144 159 192 144 160 192 144 160 207 144 160 208 144 191 239 159 159 192 159 160 192 159 160 207 159 160 208 159 192 239 160 128 144 160 144 159 160 160 191 160 175 207 160 175 208 160 176 208 160 191 224 160 192 224 160 208 255 160 223 255 170 170 170 175 111 80 175 111 95 175 160 192 175 175 192 175 175 207 175 191 223 175 208 240 175 223 255 176 175 207 176 176 176 176 176 207 176 176 208 176 191 208 176 208 224 176 208 239 176 223 240 176 223 255 176 224 255 176 239 255 183 183 183 190 190 190 191 175 143 191 191 208 191 207 224 191 223 239 191 224 240 191 224 255 191 239 255 191 240 255 192 192 208 192 239 255 192 240 255 192 255 255 196 196 196 207 143 95 207 207 191 207 207 207 207 207 208 207 207 223 207 208 223 207 223 239 207 239 240 207 239 255 207 240 255 207 255 255 208 208 223 208 208 224 208 224 239 208 255 255 217 217 217 223 32 32 223 128 63 223 192 255 223 223 32 223 223 224 223 255 255 224 224 224 224 224 239 224 239 240 224 255 255 231 207 255 231 208 255 238 191 255 238 192 255 239 159 232 239 191 255 239 223 255 239 224 255 239 239 224 239 239 239 239 239 240 239 255 255 240 207 144 240 239 223 240 240 239 240 255 255 246 176 255 247 175 255 247 207 255 247 239 255 254 160 255 254 191 255 255 175 79 255 191 80 255 191 95 255 207 144 255 208 159 255 255 255]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?? @?? @?? @?? @?? @?? @?? @@O8@@_>@@???A???C???C???C???C???C???C?? C???A???A???O???_O???@??>@??') ; yourself); yourself]
+!
+
+workspace24x24Icon
+    "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 workspace24x24Icon inspect
+     ImageEditor openOnClass:self andSelector:#workspace24x24Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class workspace24x24Icon'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+APTEAPTEAPTEAPTEAPTEAY6Z&6TEAPTEA XFA XFA XFA XFA XF$VN:^''6KA HEA TEAPTEAPTEAPTEAPTE/7F&)I=ZAPHEA TEAPTEAPTEAPTEAPVL*7R''
+#U==APHBA TEAPTEAPTEAPTEAPV3\K!!"(U8EAPHBA TEAPTEAPTEAPTEAPU.]+6O\) EAPHBA TEAPTEAPTEAPTEAYQ)$JI&/ DEAPHBA TEAPTEAPTEAPTE
+AX*([IJ<[0TEAPHBA TEAPTEAPTEAPTE+''V)%:6#APTEAPHBA TEAPTEAPTEAPTEZ9U ^Y:\APTEAPHBA TEAPTEAPTEAPU8!!9Z4XXHEAPTEAPHBA TEAPTE
+APTEAPV2,XQ]^;$EAPTEAPHBA TEAPTEAPTEAXE([[V6VPTEAPTEAPHBA TEAPTEAPTEAZV@"HZN,@TEAPTEAPHBA TEAPTEAPTEAZA3YE.7+0TEAPTEAPHB
+A W@0LC@0\C@0G1:Y6)>0LC@0L@EAPHBA W@0LC@0\C@0G=:.:3@0LCA0L@EAPHBA W@0LC@0\C@0HM\&\CA0LGA0\@EAPHBA W@0LGA0LC@0X%70LC@0LCA
+0L@EAPHBA W@0\C@0\CA0IOA0LCA0LCA0L@EAPHBA W@0\C@0\CA0LCA0LCA0LCA0L@EAPHBA W@0LGA0LC@0\G@0LCA0LCA0L@EAPHBA W@0LC@0LC@0LC@
+0LC@0LC@0L@EAPHBA HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB') ; colorMapFromArray:#[64 64 64 160 160 160 128 128 128 0 0 128 88 88 88 255 255 255 195 195 195 242 108 0 255 186 105 186 160 156 250 163 90 255 188 108 167 102 48 137 61 2 114 91 85 128 58 3 226 160 119 90 53 35 147 68 5 200 156 136 255 187 104 249 184 108 111 89 88 191 120 84 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 99 91 79 253 196 141 101 62 48 221 111 4 114 80 64 255 200 146 218 115 4 254 184 102 254 127 3 215 165 133 134 60 4 85 77 68 254 232 217 137 78 56 139 65 5 220 102 2 172 104 77 253 205 143 255 199 145 219 112 4 231 173 141 252 217 191 223 115 4 247 184 110 250 157 80 254 254 252 91 51 26 254 184 100 254 129 1 219 162 125 216 154 122 253 198 145 246 163 82 247 120 7 249 219 197 174 106 74 254 204 149 243 174 115 75 37 16 255 190 110 255 132 1 255 201 146 145 68 5 254 128 3 251 120 0 133 59 3 240 110 9 215 106 4 119 58 22 254 136 9 222 113 4 190 118 68 136 62 5 133 58 2 127 70 39 254 202 147 78 38 4 201 153 138 254 200 147 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56 32 220 32 0 0 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C0???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>???>') ; yourself); yourself]
+!
+
+workspace24x24Icon2
+    "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 workspace24x24Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#workspace24x24Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class workspace24x24Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+APTEAPTEAPTEAPTEAPTE@@@@@@@@APTE@@XFA XFA XFA XFA XFA XFA XFA HE@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHE@@XE0LC@0LG@0LC@0LC@0LC@
+0LC@APHB@@XE0LC@0LG@0LC@0LC@0LC@0\C@APHB@@XE0LC@0LG@0LC@0LC@0\CA0\G@APHB@@XE0LCA0\C@0LGA0LC@0LC@0\C@APHB@@XE0LG@0LG@0\C@
+0\C@0\C@0\C@APHB@@XE0LG@0LG@0\C@0\C@0\C@0\C@APHB@@XE0LCA0\C@0LGA0LC@0\C@0\C@APHB@@XE0LC@0LC@0LC@0LC@0LC@0LC@APHB@@XEAPTE
+APTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB
+@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTE
+APTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XEAPTEAPTEAPTEAPTEAPTEAPTEAPHB@@XB@ HB@ HB@ HB
+@ HB@ HB@ HB@ HB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[64 64 64 160 160 160 128 128 128 0 0 128 88 88 88 255 255 255 195 195 195 242 108 0 255 186 105 186 160 156 250 163 90 255 188 108 167 102 48 137 61 2 114 91 85 128 58 3 226 160 119 90 53 35 147 68 5 200 156 136 255 187 104 249 184 108 111 89 88 191 120 84 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 99 91 79 253 196 141 101 62 48 221 111 4 114 80 64 255 200 146 218 115 4 254 184 102 254 127 3 215 165 133 134 60 4 85 77 68 254 232 217 137 78 56 139 65 5 220 102 2 172 104 77 253 205 143 255 199 145 219 112 4 231 173 141 252 217 191 223 115 4 247 184 110 250 157 80 254 254 252 91 51 26 254 184 100 254 129 1 219 162 125 216 154 122 253 198 145 246 163 82 247 120 7 249 219 197 174 106 74 254 204 149 243 174 115 75 37 16 255 190 110 255 132 1 255 201 146 145 68 5 254 128 3 251 120 0 133 59 3 240 110 9 215 106 4 119 58 22 254 136 9 222 113 4 190 118 68 136 62 5 133 58 2 127 70 39 254 202 147 78 38 4 201 153 138 254 200 147 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56 32 220 32 0 0 0]; mask:((Depth1Image new) width: 24; height: 24; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>_??>@@@@') ; yourself); yourself]
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-26x26'!
+
+currentDirectoryIcon26x26Icon
+    "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 currentDirectoryIcon26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#currentDirectoryIcon26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class currentDirectoryIcon26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV'';:O*54.K @@@IZV%)ZV%)ZV%)ZV%)ZV%)>&%ZTS2,9AM<<@@IZV%)ZV%)ZV%)ZV%)Z_BW TZV%)
+C0?I,%[C@IZV%)ZV%)ZV%)ZV''0%8U:0VDWNI1C6OAQWA@IZV%)ZV%)ZV%)=(''&HC4H(Q_(VY^Z9,[BF6@IZV%)ZV%)Z_ZJU-F=@V);<-,[6T+;B0IP5L@IZV
+%)ZV''6"%J=A/E(*?)4!!I&*>0,KB00G4,@IZV%)Y_#"@V"((Q/;=S2$HR,KB0,KB00IMP@IZV%*/O.B@O);=>T2^OX[B0,KB0,KB0NU"\@IZV%,\(BKGBL ?I
+^W^0,KB0,KB0,KB0Y6:7%)ZVN72QAD7BRHM\,KB0,KB0,KB0,K@;3K^V%)X;$L <&HMQ]+B0,KB0,KB0,KB0,C,@@IZV%#.4FY5&V,1$,KB0,KB0,KB0,KB0
+N0@@%)ZVN;P@)G*W$%:0,KB0,C,;,KB0,K@;@@BV%)X;-@@X,@D]4[B0,K@;N3.0,KB0,C,@@IZV%#.4@A"0/A(P,KB0,K@;,KB0,KB0N0@@%)ZVN4:[FKB<
+C!!B0,KB0,KB0,KB0,K@;@@BV%)[@ $9 ,K0NDKB0,KB0,KB0,KB0,C,@@IZV% AK !!=C/@8P,KB0,KB0,KB0,KB0N0@@%)ZV% C@ #F[C!!B0,KB0,KB0,KB0
+,K@;@@BV%)ZV@@CF (5CDKB0,KB0,@JHCC.;(# @@IZV%)ZV@@AE!!%WQ,KAU@#-1Z<C@1 @@@@@@%)ZV%)ZV% A$@(I1NFWF@@@@@@@@@@@@@@BV%)ZV%)ZV
+% @@@@@@@@@@@@@@@@@@%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV% @a') ; colorMapFromArray:#[198 219 239 165 190 214 123 134 156 255 219 66 140 101 24 156 150 148 231 235 239 74 77 82 181 146 57 148 101 33 214 211 222 239 231 231 140 154 173 115 101 82 181 203 222 247 215 82 255 251 255 239 199 41 173 170 173 222 199 90 255 235 115 132 125 123 247 207 49 181 186 198 198 215 231 165 186 206 181 199 214 255 215 57 255 247 247 148 166 198 123 203 255 189 195 214 255 231 107 132 121 115 222 203 181 123 125 140 198 207 214 165 174 181 123 134 148 239 211 99 132 89 24 214 203 189 231 227 222 255 227 99 140 117 82 239 199 57 189 158 123 140 146 156 107 109 115 181 195 206 247 211 74 255 255 255 206 211 222 115 121 132 107 65 8 156 117 33 156 162 181 181 182 189 198 203 206 99 117 148 123 130 140 239 207 90 255 251 247 206 207 214 231 243 247 181 150 57 140 105 57 214 223 239 239 239 239 198 199 198 49 52 57 115 190 239 247 227 99 198 162 66 206 203 206 173 182 189 107 85 41 222 190 82 214 219 231 239 235 231 148 130 99 189 150 57 57 65 66 247 223 90 189 190 206 148 162 181 123 89 49 255 239 115 82 56 16 214 215 222 123 121 123 82 89 99 165 146 123 165 125 82 222 223 231 132 93 16 206 223 239 173 174 173 255 235 107 82 174 222 214 211 214 173 174 189 132 150 181 99 105 123 165 125 49 247 215 74 247 243 247 148 158 173 165 166 181 255 231 99 82 52 8 247 211 49 231 231 239 132 142 165 99 101 115 239 190 41 222 219 222 247 239 239 156 130 99 173 166 156 247 227 115 148 109 33 156 174 198 231 227 231 132 138 156 107 89 66 239 190 33 222 215 214 189 190 198 206 211 214 107 121 148 173 134 49 74 154 206 239 203 57 115 125 148 132 134 148 99 113 132 231 186 33 247 203 49 247 247 247 90 97 107 165 178 198 247 223 107 140 97 33 156 170 189 123 101 82 132 158 189 107 81 49 148 125 107 239 223 107 247 243 239 140 158 189 123 89 41 247 219 99 132 105 66 214 227 239 181 162 140 132 154 181 255 235 123 206 182 156 222 219 214 189 170 156 140 150 173 165 174 189 189 207 231 247 231 115 140 101 33 239 199 49 231 223 222 132 138 148 99 105 115 156 117 66 247 215 66 181 186 206 148 142 132 165 170 181 189 211 231 247 227 107 214 186 82 214 223 231 231 239 247 74 73 82 107 73 33 198 186 173 231 207 99 239 243 255 198 199 206 107 125 148 189 207 222 173 138 49 132 85 24 239 195 41 173 178 189 90 65 16 255 227 107 90 60 16 239 207 74 189 178 165 198 195 198 107 101 107 123 142 173 247 223 99 214 190 82 214 211 206 123 113 99 74 81 90 189 158 57 156 113 33 247 211 57 239 235 239]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@O0G<@C<C?0@?A??@O0??8C<_??@?O??8O7???C=???8?_???O3???;<???>?O??>O3???#<???8?O??>O3???#<???8?O??>O1???#<O??8?A??>O0O?
+<C<A?@@?@@@@O0@@@C<b') ; yourself); yourself]
+!
+
+directoryBookmarks26x26Icon
+    "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 home26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#home26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class directoryBookmarks26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV'';:O*54.K"H"%)ZV%)ZV%)ZV%)ZV%)ZV%)>&%ZTS2,9AM<<6(YZV%)ZV%)ZV%)ZV%)Z_BW TZV%)
+C0?I,%[C1YZV%)ZV%)ZV%)ZV''0%8U:0VDWNI1C6OAQWAJYZV%)ZV%)ZV%)=(''&HC4H(Q_(VY^Z9,[BF6J)ZV%)ZV%)Z_ZJU-F=@V);<-,[6T+:<%IP5LJ)ZV
+%)ZV''6"%J=A/E(*?)4!!I&*<W JN/0G4,]YZV%)Y_#"@V"((Q/;=S2$HR+P8XB&TW0IMP]YZV%*/O.B@O);=>T2^OXS&3!!D\>.%QTNU"\]YZV%,\(BKGBL ?I
+^W^@Y@Y#G#8KV[($Y6:7%)ZVN72QAD7BRHM\.(EO"4B9O$>K]CP;3K^V%)X;$L <&HMQ]#(?QD=OS4=D"8.K\C/K*IZV%#.4FY5&V,1$O4>V"38P4VPPGC83
+N6Q5%)ZVN;P@)G*W$%9;%)Y*LKUFQ#L>O#L;YGVV%)X;-@@X,@D]4WVV%&)R-P]RL1@PL3-$]YZV%#.4@A"0/A(P%)Y*Z+VL#KT3DA@3N6Q5%)ZVN4:[FKB<
+C!!BV%&)*3S@03SLPDCL;YGVV%)[@ $9 ,K0NDIZV"6)[MSU[L1@PL3-$]YZV%''UK !!=C/@8P%)ZKDH0#*X03DA@3N6Q5%)ZV%*#@ #F[C!!BVZ(,P\(\/\#L3
+\E$;YGVV%)ZV]Z#F (5CDH,\DCN*I JHCC.;(#!!$]YZV%)ZV]R)E!!%WQMA]U@#-1Z<C@1$+K27=5%)ZV%)ZV% -$@(I1NFWFR,/KYG> *B(KS9ZV%)ZV%)ZV
+%$>(_6Q?(J *B4=5]WVV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV% @a') ; colorMapFromArray:#[198 219 239 165 190 214 123 134 156 255 219 66 140 101 24 156 150 148 231 235 239 74 77 82 181 146 57 148 101 33 214 211 222 239 231 231 140 154 173 115 101 82 181 203 222 247 215 82 255 251 255 239 199 41 173 170 173 222 199 90 255 235 115 132 125 123 247 207 49 181 186 198 198 215 231 165 186 206 181 199 214 255 215 57 255 247 247 148 166 198 123 203 255 189 195 214 255 231 107 132 121 115 222 203 181 123 125 140 198 207 214 165 174 181 123 134 148 239 211 99 132 89 24 214 203 189 231 227 222 255 227 99 140 117 82 239 199 57 189 158 123 140 146 156 107 109 115 181 195 206 247 211 74 255 255 255 206 211 222 115 121 132 107 65 8 156 117 33 156 162 181 181 182 189 198 203 206 99 117 148 123 130 140 239 207 90 255 251 247 206 207 214 231 243 247 181 150 57 140 105 57 214 223 239 239 239 239 198 199 198 49 52 57 115 190 239 247 227 99 198 162 66 206 203 206 173 182 189 107 85 41 222 190 82 214 219 231 239 235 231 148 130 99 189 150 57 57 65 66 247 223 90 189 190 206 148 162 181 123 89 49 255 239 115 82 56 16 214 215 222 123 121 123 82 89 99 165 146 123 165 125 82 222 223 231 132 93 16 206 223 239 173 174 173 255 235 107 82 174 222 214 211 214 173 174 189 132 150 181 99 105 123 165 125 49 247 215 74 247 243 247 148 158 173 165 166 181 255 231 99 82 52 8 247 211 49 231 231 239 132 142 165 99 101 115 239 190 41 222 219 222 247 239 239 156 130 99 173 166 156 247 227 115 148 109 33 156 174 198 231 227 231 132 138 156 107 89 66 239 190 33 222 215 214 189 190 198 206 211 214 107 121 148 173 134 49 74 154 206 239 203 57 115 125 148 132 134 148 99 113 132 231 186 33 247 203 49 247 247 247 90 97 107 165 178 198 247 223 107 140 97 33 156 170 189 123 101 82 132 158 189 107 81 49 148 125 107 239 223 107 247 243 239 140 158 189 123 89 41 247 219 99 132 105 66 214 227 239 181 162 140 132 154 181 255 235 123 206 182 156 222 219 214 189 170 156 140 150 173 165 174 189 189 207 231 247 231 115 140 101 33 239 199 49 231 223 222 132 138 148 99 105 115 156 117 66 247 215 66 181 186 206 148 142 132 165 170 181 189 211 231 247 227 107 214 186 82 214 223 231 231 239 247 74 73 82 107 73 33 198 186 173 231 207 99 239 243 255 198 199 206 107 125 148 189 207 222 173 138 49 132 85 24 239 195 41 173 178 189 90 65 16 255 227 107 90 60 16 239 207 74 189 178 165 198 195 198 107 101 107 123 142 173 247 223 99 214 190 82 214 211 206 123 113 99 74 81 90 189 158 57 156 113 33 247 211 57 239 235 239]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@O0G?@C<C?<@?A?? O0??<C<_?? ?O??<O7???#=???<?_???/3???;<???>?O???/3???;<???>?O???/3???;<???>?O???/3???;<_??>?G???/0??
+?;<C??<?@_?0O0@@@C<b') ; yourself); yourself]
+!
+
+home26x26Icon
+    "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 home26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#home26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class home26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV'';:O*54.K @@%)ZV%)ZV%)ZV%)ZV%)ZV%)>&%ZTS2,9AM<<6@IZV%)ZV%)ZV%)ZV%)Z_BW TZV%)
+C0?I,%[C@IZV%)ZV%)ZV%)ZV''0%8U:0VDWNI1C6OAQWA@IZV%)ZV%)ZV%)=(''&HC4H(Q_(VY^Z9,[BF6@IZV%)ZV%)Z_ZJU-F=@V);<-,[6T+:<%IP5L@IZV
+%)ZV''6"%J=A/E(*?)4!!I&*<W JN/0G4,@IZV%)Y_#"@V"((Q/;=S2$HR+P8XB&TW0IMP@IZV%*/O.B@O);=>T2^OXS&3!!D\>.%QTNU"\@IZV%,\(BKGBL ?I
+^W^@Y@Y#G#8KV[($Y6:7%)ZVN72QAD7BRHM\.(EO"4B9O$>K]CP;3K^V%)X;$L <&HMQ]#(?QD=OS4=D"8.K\C,@@IZV%#.4FY5&V,1$O4>V"38P4VPPGC83
+N0@@%)ZVN;P@)G*W$%9;%)Y*LKUFQ#L>O#L;@@BV%)X;-@@X,@D]4WVV%&)R-P]RL1@PL3,@@IZV%#.4@A"0/A(P%)Y*Z+VL#KT3DA@3N0@@%)ZVN4:[FKB<
+C!!BV%&)*3S@03SLPDCL;@@BV%)[@ $9 ,K0NDIZV"6)[MSU[L1@PL3,@@IZV% AK !!=C/@8P%)ZKDH0#*X03DA@3N0@@%)ZV% C@ #F[C!!BVZ(,P\(\/\#L3
+\E$;@@BV%)ZV@@CF (5CDH,\DCN*I JHCC.;(# @@IZV%)ZV@@AE!!%WQMA]U@#-1Z<C@1 @@@@@@%)ZV%)ZV@@A$@(I1NFWF@@@@@@@@@@@@@@BV%)ZV%)ZV
+% @@@@@@@@@@@@@@@@@@%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV% @a') ; colorMapFromArray:#[198 219 239 165 190 214 123 134 156 255 219 66 140 101 24 156 150 148 231 235 239 74 77 82 181 146 57 148 101 33 214 211 222 239 231 231 140 154 173 115 101 82 181 203 222 247 215 82 255 251 255 239 199 41 173 170 173 222 199 90 255 235 115 132 125 123 247 207 49 181 186 198 198 215 231 165 186 206 181 199 214 255 215 57 255 247 247 148 166 198 123 203 255 189 195 214 255 231 107 132 121 115 222 203 181 123 125 140 198 207 214 165 174 181 123 134 148 239 211 99 132 89 24 214 203 189 231 227 222 255 227 99 140 117 82 239 199 57 189 158 123 140 146 156 107 109 115 181 195 206 247 211 74 255 255 255 206 211 222 115 121 132 107 65 8 156 117 33 156 162 181 181 182 189 198 203 206 99 117 148 123 130 140 239 207 90 255 251 247 206 207 214 231 243 247 181 150 57 140 105 57 214 223 239 239 239 239 198 199 198 49 52 57 115 190 239 247 227 99 198 162 66 206 203 206 173 182 189 107 85 41 222 190 82 214 219 231 239 235 231 148 130 99 189 150 57 57 65 66 247 223 90 189 190 206 148 162 181 123 89 49 255 239 115 82 56 16 214 215 222 123 121 123 82 89 99 165 146 123 165 125 82 222 223 231 132 93 16 206 223 239 173 174 173 255 235 107 82 174 222 214 211 214 173 174 189 132 150 181 99 105 123 165 125 49 247 215 74 247 243 247 148 158 173 165 166 181 255 231 99 82 52 8 247 211 49 231 231 239 132 142 165 99 101 115 239 190 41 222 219 222 247 239 239 156 130 99 173 166 156 247 227 115 148 109 33 156 174 198 231 227 231 132 138 156 107 89 66 239 190 33 222 215 214 189 190 198 206 211 214 107 121 148 173 134 49 74 154 206 239 203 57 115 125 148 132 134 148 99 113 132 231 186 33 247 203 49 247 247 247 90 97 107 165 178 198 247 223 107 140 97 33 156 170 189 123 101 82 132 158 189 107 81 49 148 125 107 239 223 107 247 243 239 140 158 189 123 89 41 247 219 99 132 105 66 214 227 239 181 162 140 132 154 181 255 235 123 206 182 156 222 219 214 189 170 156 140 150 173 165 174 189 189 207 231 247 231 115 140 101 33 239 199 49 231 223 222 132 138 148 99 105 115 156 117 66 247 215 66 181 186 206 148 142 132 165 170 181 189 211 231 247 227 107 214 186 82 214 223 231 231 239 247 74 73 82 107 73 33 198 186 173 231 207 99 239 243 255 198 199 206 107 125 148 189 207 222 173 138 49 132 85 24 239 195 41 173 178 189 90 65 16 255 227 107 90 60 16 239 207 74 189 178 165 198 195 198 107 101 107 123 142 173 247 223 99 214 190 82 214 211 206 123 113 99 74 81 90 189 158 57 156 113 33 247 211 57 239 235 239]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@O0G<@C<C?8@?A??@O0??8C<_??@?O??8O7???C=???8?_???O3???;<???>?O??>O3???#<???8?O??>O3???#<???8?O??>O1???#<O??8?A??>O0O?
+<C<A?@@?@@@@O0@@@C<b') ; yourself); yourself]
+!
+
+make26x26Icon
+    "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 make26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#make26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class make26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+D!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRHSM@M!!HRD!!HRD!!HRD!!HRD!!HRD!!HRM1 6D"0YFQ$JA!!@RD!!HRD!!HRD!!HRD!!HRD$@HFR<B
+BQ$YQCH''P0AMD!!HRD!!HRD!!HRD!!HRP1,[BCH[F1,2L$PYFTLED!!HRD!!HRD!!HRD!!HJF0 (JCIDN3H2N1,HQCH+D!!HRD!!HRD"P6@$P[BB 2L#H2L#,;N3-DN30R
+D!!HRD!!I@QDMDB@!!DL#H2L#,;N3,;QDP^OQHRD!!HRIC-DBDQDQCH2L$T%I"$UN4QDQC@)D!!HRD!!HSLDQDJCH2L#H9CCXRD$,OQDQDB@ !!GAHRD!!IAN3H2L#H2
+IRHRD!!HRKT\0B@ HBDUJD!!HRD X;N3H2L#(=D!!HRD!!IKQ1<HB@ HLT(RD!!A@I3,;N3H;GSXRD!!HRID]GI0 HP1PVM!!HRH3H2L#H;N3,LD!!HRD!!HM@4!!CB@ K
+R!!HRD!!H!!L#H2N3,;P4(RD!!HRO D4MA,[BAPRD!!HRD$@(L#,;N3-DOQHRD")CLB\HF1,[BB$RD!!HRD$DCL#,;QDQNHA\ZBP%CBA,[F1$HC!!HRD!!HRD PQDSID
+QDP[F1,HB@ [F0 0BTXGD!!HRD!!H7EQ<_L$QDB@ HBA,[F1,HB01LOQHRD!!HRD"POEQ=DQ@ HB@ [F1,[F4LVD!!HRD!!HRD!!HRD$%HI0!!DI3,HF1,HBA$YBT0R
+D!!HRD!!HRD!!HRD$5BO0<OMQ,[P0-KB@%FOQHRD!!HRD!!HRD!!HRD!!H8J4,5FQ-FR#X)C"HRD!!HRD!!HRD!!HRD!!HRD!!HRM"8^G!!XRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HR
+D!!HRD#YMGAHRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD!!HRD @a') ; colorMapFromArray:#[192 159 96 223 159 63 192 159 128 223 127 64 192 128 96 192 159 159 192 160 159 191 191 191 255 223 63 224 192 63 224 160 64 159 127 96 160 160 160 223 159 96 159 128 128 223 96 64 224 223 192 255 128 63 224 224 223 223 191 191 160 127 96 224 127 63 160 160 159 255 224 128 223 160 128 255 255 63 224 223 64 255 224 63 224 223 223 160 159 127 191 127 95 224 128 63 192 192 160 223 128 95 192 191 191 223 128 96 223 192 191 160 159 96 160 160 128 224 159 63 255 159 63 191 159 128 223 192 128 191 160 159 223 159 128 223 127 96 191 128 128 224 191 64 224 160 63 192 128 64 255 160 63 223 159 95 223 128 63 223 127 63 223 223 192 223 191 160 192 192 192 160 159 95 223 160 64 255 191 63 159 128 127 191 191 160 223 191 128 223 128 64 223 159 127 191 159 159 191 128 127 224 191 63 255 192 63 223 159 64 160 127 95 192 95 64 192 96 64 192 191 160 192 192 191 192 96 95 191 160 160 223 192 192 192 191 96]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@O0@G C<@;>@?@_?8O0G??C<A??8?C??>O1???#<???8?O?3?/1?0?;<_8O>?_>G?/7?A?#=?0?0?_<_>O3???#<_??8?O??<O3??8C<_?>@?C?? O0O?
+0C<@>@@?@C @O0@@@C<b') ; yourself); yourself]
+!
+
+menu26x26Icon
+    "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 menu26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#menu26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class menu26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@EK"8.K"8.K"8.K"8.K"8.K"8T@@@@@@@@@@TOC0<OC0<OC0<OC0<OC0<OC1P@@@@@@@@@AP<OC0<OC0<OC0<OC0<OC0<OE@@@
+@@@@@@@EC0<OC0<OC0<OC0<OC0<OC0<T@@@@@@@@@A,[F1,[F1,[F1,[F1,[F1,[F1P@@@@@@@@@@0LC@0LC@0LC@0LC@0LC@0LCE@@@@@@@@@@LD1LSD1LS
+D1LSD1LSD1LSD1LT@@@@@@@@@@0SD1LSD1LSD1LSD1LSD1LSD1P@@@@@@@@@CALSD1LSD1LSD1LSD1LSD1LSE@@@@@@@@@@,KB0,KB0,KB0,KB0,KB0,KB0T
+@@@@@@@@@@T.K"8.K"8.K"8.K"8.K"8.K!!P@@@@@@@@@AP<OC0<OC0<OC0<OC0<OC8 OE@@@@@@@@@@EC0<OC0<OC0<OC0<OC0<OC0<T@@@@@@@@@@TOC0<O
+C0<OC0<OC0<OC0<OC1P@@@@@@@@@F1,[F1,[F1,[F1,[F1,[IAPTE@@@@@@@@@@EK"8.K"8.K"8.K"8.K"8.K"8T@@@@@@@@@@TKC0<OC0<OC0<OC0<OC0<O
+C1P@@@@@@@@@AR$OC0<OC0<OC0<OC0<OC0<OE@@@@@@@@@@JG!!\OC0<OC0<OC0<OC0<OC0<T@@@@@@@@@@8AA2(!!FA<IGRL"@!!X E!!@TIAP@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 106 103 105 108 108 111 21 232 231 3 189 187 226 226 228 104 104 105 109 109 108 21 231 231 82 82 83 213 213 214 187 187 187 133 233 234 21 231 230 90 90 92 186 186 188 108 108 108 135 225 226 138 243 244 2 186 188 85 85 88 133 225 227 107 107 109 182 182 181 107 107 108 19 230 230 0 129 126 102 102 103 0 128 126 85 85 84 180 180 182 101 101 104 105 105 109 111 111 110 84 84 85 88 88 90 96 96 99 0 125 126 2 191 189 0 138 139 97 94 99 193 193 192 110 110 109 19 234 233 5 141 143 95 95 99 254 254 252 2 190 188 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A??
+?@@_??0@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+newMenu26x26Icon
+    "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 newMenu26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#newMenu26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class newMenu26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B (Z@@@@@@@@@@@@@@@@@@@@@@@@@@@JB @JB"(@B (@@@@@@@@@@@@@@@@@@@
+@@B (:R )JV$(JR#(@@@@@@EK"8.K"8.K"8.K": )*^(*Z"'')*@@@@@@@@TOC0<OC0<OC0<OC96 )J&Y*ZR @@@@@@@@AP<OC0<OC0<OC0<OC:B$*Y&))J@@
+@@@@@@@EC0<OC0<OC0<OC0> )*^(*Z"'')*@@@@@@@A,[F1,[F1,[F1,[(JN$(JR%)JB$(:@@@@@@@0LC@0LC@0LC@0LC(J@C(JJ EJB @@@@@@@LD1LSD1LS
+D1LSD1LSD1N (Z@T@@@@@@@@@@0SD1LSD1LSD1LSD1LSD1N D1P@@@@@@@@@CALSD1LSD1LSD1LSD1LSD1LSE@@@@@@@@@@,KB0,KB0,KB0,KB0,KB0,KB0T
+@@@@@@@@@@T.K"8.K"8.K"8.K"8.K"8.K!!P@@@@@@@@@AP<OC0<OC0<OC0<OC0<OC8 OE@@@@@@@@@@EC0<OC0<OC0<OC0<OC0<OC0<T@@@@@@@@@@TOC0<O
+C0<OC0<OC0<OC0<OC1P@@@@@@@@@F1,[F1,[F1,[F1,[F1,[IAPTE@@@@@@@@@@EK"8.K"8.K"8.K"8.K"8.K"8T@@@@@@@@@@TKC0<OC0<OC0<OC0<OC0<O
+C1P@@@@@@@@@AR$OC0<OC0<OC0<OC0<OC0<OE@@@@@@@@@@JG!!\OC0<OC0<OC0<OC0<OC0<T@@@@@@@@@@8AA2(!!FA<IGRL"@!!X E!!@TIAP@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 106 103 105 108 108 111 21 232 231 3 189 187 226 226 228 104 104 105 109 109 108 21 231 231 82 82 83 213 213 214 187 187 187 133 233 234 21 231 230 90 90 92 186 186 188 108 108 108 135 225 226 138 243 244 2 186 188 85 85 88 133 225 227 107 107 109 182 182 181 107 107 108 19 230 230 0 129 126 102 102 103 0 128 126 85 85 84 180 180 182 101 101 104 105 105 109 111 111 110 84 84 85 88 88 90 96 96 99 0 125 126 2 191 189 0 138 139 97 94 99 193 193 192 110 110 109 19 234 233 5 141 143 95 95 99 254 254 252 2 190 188 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56 255 248 248 207 216 240 240 240 248 239 232 240 240 240 240 48 88 176 224 224 232 240 144 24 255 248 48 255 248 96 255 248 24 240 208 24 255 248 152 255 248 88 255 248 136 255 248 176 255 248 200]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@P@@@@N@@@@[,@@@O? A???0@_??8@G??>@A???0@_??>@G???@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A??
+?@@_??0@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+printer26x26Icon
+    "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 printer26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#printer26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class printer26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CTTPA$PDA@PDA@PDA@WP@@@@@@@@@@@@@@@MQQT[-M 8NC 8NC 057%P@@@@@@@@@@@@@@5EEQ@M$A@PDA@PDA
+]DCX@@@@@@@@@@@@@@CTTUD@\QLC@0LC@0LCT%<@@@@@@@@@@@@@@MQQTP@@H&=/[6=/[6>BP@@@@@@@@@@@@@@@R[0@@@BR)ZV%)ZV%)ZU@B @@@@@@@@@@
+@@AI/@@@@LP$S4=OS4=OS1I_@@@@@@@@@@@@@D&</@@@@KR9.[&9.[&94S<@@@@@@@@@@@@@R[2<@@@@U(FA W@73MB,RE @@@@@@@@@@@AI/K0@@D][][@9
+T1>WY\CIDZLG- @@@@@@@D&</@@@Q<+J,WY<_CR2_Y%8O[(-" @@@@@@R[0@@)G@G3%&,*<:+Y<XQS4^2 2DPP@@@@@@@I(.%A\+F#LTN*6_FDT2BA6W_@B:
+'' @@@@CK)7H.%A]L+6V-''3H1571<0C%+SC%;@@@@@G(=)7H.%A]2_RU<_AXZ+:>"''\A<I2<@@@@@*,/ZBGH.%A\#JQ8=BKH@&HXN$<U,O@@@@@@\EA+ZHX8.
+%E@W.E$''QC/C28,V%#UF@@@@@KFOEI<H32F5''J%NNC ;*B5<E#M<G4X@@@@@@KNOEI<=B@,ENC-Y&HP-_H5*BVJ=Q @@@@A._D-CEI<=)3$''V)"DVPPO-7M:
+!!DPUM @@@@CNWFT#EI<=%E*X^*ATXK]3^(R]_\A?@@@@@@@@18 WZI==&HP*U6B7\6+M%LF+K@@@@@@@@@@@@HB8K''JDKSCB)G$.''LE''D@@@@@@@@@@@@@@@
+@@A^[HU#P!!%>UQ/S/0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[184 184 184 238 247 255 210 209 203 225 240 255 139 139 139 146 146 146 239 237 218 199 198 192 218 218 218 101 101 101 185 184 198 178 178 178 211 211 211 234 236 243 152 152 152 113 113 113 228 226 211 165 165 185 165 178 212 187 197 223 245 245 245 186 185 180 189 189 189 205 205 205 238 238 238 215 213 196 206 206 206 171 170 163 166 166 166 200 200 200 231 231 231 195 195 195 222 219 205 155 155 155 146 152 191 232 232 232 176 206 242 180 180 180 206 204 202 167 167 167 224 221 212 227 227 227 142 142 154 222 222 222 218 216 202 182 182 182 216 216 216 178 176 168 149 149 158 207 207 207 233 233 233 194 194 194 193 193 193 151 189 132 204 202 188 191 224 255 129 129 129 209 209 209 243 243 243 143 143 143 184 182 173 234 234 234 237 234 217 151 151 186 150 150 185 200 198 191 204 202 186 249 249 249 156 156 156 236 236 236 189 187 178 170 170 170 168 168 196 238 235 218 237 234 216 221 221 221 220 220 220 215 216 230 142 142 142 187 221 255 210 210 210 240 237 220 173 177 206 197 197 197 68 68 68 172 172 180 132 151 198 78 78 85 189 188 191 165 165 165 169 169 169 245 248 251 183 183 181 205 204 205 185 184 181 154 154 188 95 95 95 238 235 217 90 90 90 167 165 157 146 145 175 192 192 192 196 196 196 191 190 185 237 237 237 240 237 218 154 154 154 224 224 224 149 149 149 238 235 216 206 204 190 217 236 255 181 218 255 188 187 195 223 223 223 133 133 133 233 242 251 228 240 253 181 181 181 154 154 187 230 230 232 172 172 175 144 144 144 194 192 184 185 185 185 219 219 219 161 159 171 191 190 183 179 178 173 170 213 255 204 219 241 251 253 255 176 176 176 145 145 144 171 171 171 221 219 205 185 185 184 223 220 205 196 194 188 160 160 160 237 235 219 174 174 174 208 208 208 251 251 251 238 234 216 172 172 172 159 160 187 132 132 132 212 212 212 219 217 211 143 182 125 187 187 187 175 175 175 228 228 230 208 208 207 238 236 219 199 199 199 198 198 198 221 219 204 239 239 239 76 76 76 223 221 205 214 214 214 175 175 174 131 131 163 204 229 255 238 236 218 226 226 226 163 163 163 159 159 159 154 155 154 188 187 184 215 225 236 241 241 241 237 235 217 228 228 228 204 217 230 177 177 177 203 203 203 253 253 253 151 174 217 186 186 186 212 210 199 103 103 103 188 188 188 179 217 255 202 202 202 197 196 199 239 236 219 204 204 204 238 236 217 230 227 211 190 190 190 186 186 185 134 134 175 130 130 130 180 178 190 125 125 125 237 235 216 201 199 190 239 236 218 169 169 186 230 230 230 137 137 137 213 234 255 213 213 213 212 210 197 157 157 157 211 228 243 175 208 246 237 235 215 197 196 190 239 238 220 239 237 219 230 228 215 191 191 191 178 177 194 154 154 183 151 151 151]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@O1?<@C<_? @?C?8@O0?>@C<G? @?A?<@O0_?@C<C?0@?@?>@O0_?<C<G?? ?G??<O3???#=???8?_??>O7???#=???8?_??>O7???#=???<?O???O0??
+?#<C?? ?@O? O0@@@C<b') ; yourself); yourself]
+!
+
+search26x26Icon
+    "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 search26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#search26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class search26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+JB (JB (JB (JB (JB (JB (JB (JB (JB (JB (JB (JB (JB 6A3%GC0DQZ1((JB (JB (JB (JB (JB (B!!=JWC<2TD8<N1 (JB (JB (JB (JB (J@(.
+P6IDP"H2Z YYC1 (JB (JB (JB (JB!!.LBY"X%DFID@$H#I]NQ((JB (JB (JB (J@LUQFHLTAPTEAPTL#H]KR (JB (JB (JB 6Y444TSD$A"H2Z&(2Z$8+
+XB (JB (JB (JF80L#HFE@Y*Z"L#H2M*A!!1.JB (JB (JB ([#A*ED@ L&(#MCP4MBL#YV8(JB (JB (JB!!.LCHFD!!PDH3QDQDP5MDI%[" (JB (JB (JF8V
+ZCH$A&(#MTPLCDP4BD].JB (JB (JB (F&1ZL"@FZ#P5QFI"X#UKU1((JB (JB (JB (B#5NP"HDH3UDCFI"I4$XJB (JB (JB (JA%.RC5(Z&(#MCP5CG@/
+W" (JB (JB (JB!!ON"D7NC4SPV(4H0 3K0TZJB (JB (JB (ZUQUQ$T%E0D,G!!A[K0$WB2 (JB (JB (JF$*UP4)@&@(XF4W[6DXXB (JB (JB (JB!!)J%TM
+C&Y_@B (JB (JB (JB (JB (JB (ZVMUCP9XBP@(JB (JB (JB (JB (JB (JF%#UP4NY%H@JB (JB (JB (JB (JB (JB!!LX5TMC&YR@B (JB (JB (JB (
+JB (JB (J@AUCP9&T @(JB (JB (JB (JB (JB (JB (YELNY%H@JB (JB (JB (JB (JB (JB (JB >U!!,I@B (JB (JB (JB (JB (JB (JB (F!!(ZF!!(Z
+F!!(ZF!!(ZF!!(ZF ,KF!!(KB0,KB0,ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZB0,ZF ,KB0,KB0@a') ; colorMapFromArray:#[191 175 143 144 159 192 160 144 159 176 191 208 192 255 255 175 175 192 191 239 255 176 176 207 207 239 240 175 175 207 207 207 223 239 239 224 240 255 255 223 128 63 175 111 95 128 143 191 144 160 192 159 159 192 160 223 255 160 192 224 176 224 255 175 191 223 159 160 208 192 192 208 208 208 223 240 239 223 239 239 239 143 127 128 128 143 176 143 175 208 143 159 192 143 143 191 176 239 255 207 207 191 191 240 255 208 255 255 175 223 255 207 207 207 207 223 239 224 239 240 240 240 239 175 111 80 255 191 95 127 127 175 128 144 191 160 160 191 159 160 192 160 175 207 159 160 207 176 223 255 192 240 255 191 207 224 223 255 255 224 255 255 224 224 239 144 159 160 128 143 175 128 128 175 240 207 144 144 144 191 144 160 208 143 159 207 207 207 192 192 239 255 160 208 255 191 224 240 207 240 255 208 224 239 239 255 255 144 143 143 207 143 95 127 128 175 144 159 191 143 144 191 144 160 207 176 208 224 255 208 144 191 223 239 175 208 240 255 208 159 191 224 255 207 239 255 175 160 207 143 112 96 255 191 80 255 175 79 160 159 159 143 143 176 159 128 144 144 191 239 160 191 224 160 176 208 176 208 239 159 192 239 175 160 192 176 175 207 224 224 224 208 208 224 255 255 255 255 192 95 175 175 160 143 159 191 160 128 144 160 175 208 176 223 240 255 207 144 207 255 255 191 191 208 176 176 208 207 207 208 223 223 224 207 208 223 239 239 240]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@O0@O>C<@G?0?@C?>O0A??3<@_?<?@O??/0C??;<@??>?@O??/0C??;<@??>?@G??O0C??#<A??8?@??<O0_7<C<O8@@?G<@@O3>@@C=?@@@?_ @@O70@
+@C=8@@@?@@@@O0@@@C<b') ; yourself); yourself]
+!
+
+stxHome26x26Icon
+    "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 stxHome26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#stxHome26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class stxHome26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV'';:O*54.K @@@IZV%)ZV%)ZV%)ZV%)ZV%)>&%ZTS2,9AM<<@@IZV%)ZV%)ZV%)ZV%)Z_BW TZV%)
+C0?I,%[C@IZV%)ZV%)ZV%)ZV''0%8U:0VDWNI1C6OAQWA@IZV%)ZV%)ZV%)=(''&HC4H(Q_(VY^Z9,[BF6@IZV%)ZV%)Z_ZJU-F=@V);<-,[6T+5-[IP5L@IZV
+%)ZV''6"%J=A/E(*?)4!!I&*=[V5-[0G4,@IZV%)Y_#"@V"((Q/;=S2$HRV5-[V5-[0IMP@IZV%*/O.B@O);=>T2^OXU-[V5-[V5-[NU"\@IZV%,\(BKGBL ?I
+^W][45-[V5-[45-[Y6:7%)ZVN72QAD7BRHM\V5/S4=M[V=OSV5,;3K^V%)X;$L <&HMQ]%-[V5/S45-[45-[V3,@@IZV%#.4FY5&V,1$V5-[V5/S4=OSV5-[
+N0@@%)ZVN;P@)G*W$%9[V5-[V5/S4=M[V5,;@@BV%)X;-@@X,@D]4U-[V5-[4=OS45-[V3,@@IZV%#.4@A"0/A(PV5-[V5/SV;WSV5-[N0@@%)ZVN4:[FKB<
+C!!A[V5-[4=M[3]OSV5,;@@BV%)[@ $9 ,K0NDE-[V=OSV5-[V=M[V3,@@IZV% AK !!=C/@8PV5-[4=M[V5-[4=M[N0@@%)ZV% C@ #F[C!!A[V5-[V5-[\%-[
+V5,;@@BV%)ZV@@CF (5CDE-[V5.*I JHCC.;(# @@IZV%)ZV@@AE!!%WQV5-U@#-1Z<C@1 @@@@@@%)ZV%)ZV% A$@(I1NFWF@@@@@@@@@@@@@@BV%)ZV%)ZV
+% @@@@@@@@@@@@@@@@@@%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV% @a') ; colorMapFromArray:#[198 219 239 165 190 214 123 134 156 255 219 66 140 101 24 156 150 148 231 235 239 74 77 82 181 146 57 148 101 33 214 211 222 239 231 231 140 154 173 115 101 82 181 203 222 247 215 82 255 251 255 239 199 41 173 170 173 222 199 90 255 235 115 132 125 123 247 207 49 181 186 198 198 215 231 165 186 206 181 199 214 255 215 57 255 247 247 148 166 198 123 203 255 189 195 214 255 231 107 132 121 115 222 203 181 123 125 140 198 207 214 165 174 181 123 134 148 239 211 99 132 89 24 214 203 189 231 227 222 255 227 99 140 117 82 239 199 57 189 158 123 140 146 156 107 109 115 181 195 206 247 211 74 255 255 255 206 211 222 115 121 132 107 65 8 156 117 33 156 162 181 181 182 189 198 203 206 99 117 148 123 130 140 239 207 90 255 251 247 206 207 214 231 243 247 181 150 57 140 105 57 214 223 239 239 239 239 198 199 198 49 52 57 115 190 239 247 227 99 198 162 66 206 203 206 173 182 189 107 85 41 222 190 82 214 219 231 239 235 231 148 130 99 189 150 57 57 65 66 247 223 90 189 190 206 148 162 181 123 89 49 255 239 115 82 56 16 214 215 222 123 121 123 82 89 99 165 146 123 165 125 82 222 223 231 132 93 16 206 223 239 173 174 173 255 235 107 82 174 222 214 211 214 173 174 189 132 150 181 99 105 123 165 125 49 247 215 74 247 243 247 148 158 173 165 166 181 255 231 99 82 52 8 247 211 49 231 231 239 132 142 165 99 101 115 239 190 41 222 219 222 247 239 239 156 130 99 173 166 156 247 227 115 148 109 33 156 174 198 231 227 231 132 138 156 107 89 66 239 190 33 222 215 214 189 190 198 206 211 214 107 121 148 173 134 49 74 154 206 239 203 57 115 125 148 132 134 148 99 113 132 231 186 33 247 203 49 247 247 247 90 97 107 165 178 198 247 223 107 140 97 33 156 170 189 123 101 82 132 158 189 107 81 49 148 125 107 239 223 107 247 243 239 140 158 189 123 89 41 247 219 99 132 105 66 214 227 239 181 162 140 132 154 181 255 235 123 206 182 156 222 219 214 189 170 156 140 150 173 165 174 189 189 207 231 247 231 115 140 101 33 239 199 49 231 223 222 132 138 148 99 105 115 156 117 66 247 215 66 181 186 206 148 142 132 165 170 181 189 211 231 247 227 107 214 186 82 214 223 231 231 239 247 74 73 82 107 73 33 198 186 173 231 207 99 239 243 255 198 199 206 107 125 148 189 207 222 173 138 49 132 85 24 239 195 41 173 178 189 90 65 16 255 227 107 90 60 16 239 207 74 189 178 165 198 195 198 107 101 107 123 142 173 247 223 99 214 190 82 214 211 206 123 113 99 74 81 90 189 158 57 156 113 33 247 211 57 239 235 239 0 0 0 0 203 49]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@O0G<@C<C?0@?A??@O0??8C<_??@?O??8O7???C=???8?_???O3???;<???>?O??>O3???#<???8?O??>O3???#<???8?O??>O1???#<O??8?A??>O0O?
+<C<A?@@?@@@@O0@@@C<b') ; yourself); yourself]
+!
+
+workspace26x26Icon
+    "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 workspace26x26Icon inspect
+     ImageEditor openOnClass:self andSelector:#workspace26x26Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class workspace26x26Icon'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+AP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@APTEAPTEAPTEAPTEAPTEAY6Z&6TEAPTEAP@FA XFA XFA XFA XFA ZQX;):_X,F@ TE@@XEAPTEAPTEAPTE
+APTEA[=1)*R_V TBAPT@A TEAPTEAPTEAPTEAPVL*7R''#U==APHB@ @FAPTEAPTEAPTEAPTEA[M0.FJ!!W TE@ HB@@XEAPTEAPTEAPTEAPTE[''Z=#7JXAPTB
+@ H@A TEAPTEAPTEAPTEAYQ)$JI&/ DEAPHB@ @FAPTEAPTEAPTEAPTE"*!!,$+1/APTE@ HB@@XEAPTEAPTEAPTEAZ95*Y^-(0TEAPTB@ H@A TEAPTEAPTE
+APTEZ9U ^Y:\APTEAPHB@ @FAPTEAPTEAPTEAW"G%+Q!!  TEAPTE@ HB@@XEAPTEAPTEAPTE,+FDWW.9APTEAPTB@ H@A TEAPTEAPTEAXE([[V6VPTEAPTE
+APHB@ @FAPTEAPTEAPTE)XBH!!(:0APTEAPTE@ HB@@XEAPTEAPTEAPV \6Q[-:<EAPTEAPTB@ H@A W@0LC@0\C@0G1:Y6)>0LC@0L@EAPHB@ @FA\C@0LCA
+0LC@_7*;+LC@0LG@0@TE@ HB@@XE0LC@0LG@0LBCWI''@0\CA0\G@APTB@ H@A W@0LGA0LC@0X%70LC@0LCA0L@EAPHB@ @FA\CA0LCA0LG@$<G@0LG@0LG@
+0@TE@ HB@@XE0LG@0LG@0\C@0\C@0\C@0\C@APTB@ H@A W@0LGA0LC@0\G@0LCA0LCA0L@EAPHB@ @FA\C@0LC@0LC@0LC@0LC@0LC@0@TE@ HB@@XB@ HB
+@ HB@ HB@ HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ @a') ; colorMapFromArray:#[64 64 64 160 160 160 128 128 128 0 0 128 88 88 88 255 255 255 195 195 195 242 108 0 255 186 105 186 160 156 250 163 90 255 188 108 167 102 48 137 61 2 114 91 85 128 58 3 226 160 119 90 53 35 147 68 5 200 156 136 255 187 104 249 184 108 111 89 88 191 120 84 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 99 91 79 253 196 141 101 62 48 221 111 4 114 80 64 255 200 146 218 115 4 254 184 102 254 127 3 215 165 133 134 60 4 85 77 68 254 232 217 137 78 56 139 65 5 220 102 2 172 104 77 253 205 143 255 199 145 219 112 4 231 173 141 252 217 191 223 115 4 247 184 110 250 157 80 254 254 252 91 51 26 254 184 100 254 129 1 219 162 125 216 154 122 253 198 145 246 163 82 247 120 7 249 219 197 174 106 74 254 204 149 243 174 115 75 37 16 255 190 110 255 132 1 255 201 146 145 68 5 254 128 3 251 120 0 133 59 3 240 110 9 215 106 4 119 58 22 254 136 9 222 113 4 190 118 68 136 62 5 133 58 2 127 70 39 254 202 147 78 38 4 201 153 138 254 200 147 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56 32 220 32 0 0 0]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@^@A???<@_???@G???0A???<@_???@G???0A???<@_???@G???0A???<@_???@G???0A???<@_???@G???0A???<@_???@G???0A???<@_???@G??
+?0A???<@_???@@@@@@@b') ; yourself); yourself]
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-32x32'!
+
+deleteFileConfirmation32x32Icon
+    "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 deleteFileConfirmation32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#deleteFileConfirmation32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'XPToolbarIconLibrary class deleteFileConfirmation32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A XFA XIBP$IBP$IA XFA XFA XFA XFA XFA XFA XFA XFA \EAPTEAPTIA XFA XFA XFA XFA XFA XFA XFA XIAPTEAPTEAPTIA XFA XFA XFA XF
+A XFA XFA XFBPPEAPTEAPTEAPTIA XFA XFA XFA XFA XFA X@@@$C@0LC@0LC@0LC@0LIBP$IBP$IBP$IA XFA XFA @@BP\GA0\GA0\GA0\GA0\GA0\G
+A0\GA0\KA XFA XF@@@IA0TEAPTEAPTEAPTEAPTBAPTBAPTBAPLFA XFA X@@@$GAPTEAPTA@PDA@PDA@PDA@PDA@PDB@0XFA XFA @@BP\EAPTEAPDGA0\G
+A0\GA0\GA0\G@P,CA XFA XF@@@IA0TEAPTE@P\GA0\GA0\GA0\GA0\A@P,FA XFA X@@@$GAPTEAPTAA0\GA0\GA0\GA0\GA0DF@PXFA XFA @@BP\EAPTE
+APDGA0\GA0\GA0\GA0\G@P\FB0XFA XF@@@IA0TEAPTE@P\GA0\GA0\GA0\GA0\AA0\AB0XFA X@@@$GAPTEAPTAA0\@@@@@@@@@A0\GA0DKB0,KB0XFA @@
+BP\EAPTEAPDGA0\GA0\GA0\GA0\GA0\GA0XKA XF@@@IA0TEAPTE@P\G@@@@@@@@@@@@@@@@@@@GA ,FA X@@@$GAPTE@ TAA0\GA0\GA0\GA0\GA0\GA0\F
+B0XFA @@BP\EAPTBAPDGA0\GA0\GA0\GA0\GA0\GA0XKA XF@@@IA0TEAPTE@P\G@@@@@@@@@@@@@@@@@@@GA ,FA X@@@$GAPXEAP(JB \GA0\GA0\GA0\G
+A0\GA0\FB0XFA @@A \E@ (JB (JB (@@@@@@@@@@@@@@@@@A0XKA XF@@@IA TJB (JA0(JB (G@P\GA0\GA0DGA \G@PDFA X@@@XGA (JB (GB (JB DF
+A DA@PDFA0DA@PDGB@XFA @@BPXJB (JB \JB (JB DG@P\FA0\FA0DGA0DFA XF@@@FA (JB (JA0(JB (JA0XG@P\AA \AA0DFA0DFA XFA XFB (JB (G
+B (JB (AA0DG@P\G@P\AA0XF@PXFA XFA XJB (JB (JB (JB \AA0DF@PDGA \A@P\FA XFA XFA @JB (JA0(JB (F@P\AA \FA XG@PXF@PDFA XFA XF
+A (JB (GB (JB XG@PXAA DFA DFA DFA XFA XFA XFA (JB (JB (FA DFA XFA XAA \FA \AA XFA XFA XFA XJB (FA0XAA DFA DFA XF@PXF@PXF
+A XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA XFA @a') ; colorMapFromArray:#[0 0 255 134 134 134 255 204 153 204 204 102 255 251 240 255 255 153 236 233 216 255 255 255 0 0 0 153 153 0 255 0 0 4 4 4]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+A?@@@@_8@@@O?@@@G?8@@C???8@????@O???0C???<@????@O???0C???<@???? O???<C???? ????8O???>C???? ????8O???>C???? _???8O???>A??
+?? /???0C???>@???? O???0A?71&@_=*R@C>PJX@N*P$@@@@@@b') ; yourself); yourself]
+!
+
+error32x32Icon
+    "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 error32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#error32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'XPToolbarIconLibrary class error32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+\''I2\''I2\''I2\#D>O31JR#0EK$I2\''I2\''I2\''I2\ A2\''I2\''I2ZS8<STL&GV9UJ1\_R#)[\''I2\''I2\''I2@GI2\''I2\%ALD0)GJ%<N[&9#X2-QFD)&P''I2
+\''I2\''H@\''I2\''HQSP@@B''E_Y@9.UVM#J5EVU#@5V7I2\''I2\ A2\''I2ARD9[P@J\U<NGV9UX2,+TUYVR@$,@7I2\''I2@GI2\!!D!!NS$@Q5@*W08][%U#J5EH
+U%X%IQ<,ZGI2\''H@\''IPSS$9[P(\VFA$C&9.X6L+H!!QQRBTXBT0OA''I2\ A2ZT0A[P@JGF]%Z%H][%U#J2IZWDP6IQ IBU$''S''I2@GH>D0@@Q11''YQ$YZ$A.
+X6L"R502QDQRBP$#G5]I\''H@\#0JB )PVFTYFS$9B6=#LD-\XVEDQDQSBRL_VS-N\ @1ST]1\R) Z!!$9NS$9TAUKWFE!!XSIDQP$IG1=LM0]2@C9CJ%=_W6QR
+Z#$9NS$9JE0YXVE!!L"4IBRL_G41WG''H@O2Y_Y@8NC!!5@B3$9NS$YFQ%!!XVDZF@$IG1=LSB1+S @<GP8NGQ5.[&9/B3$9NQ$YFVE!!F!! IBRL_G41LK@1B@D).
+[&9.[&9UX6LUJA$YFQ%!!XP,%BP$IG1=LSD0,CE4@R&9.UUUUX6M#LD-\FQ$YFVE!!S2HIBRL_G41LSB0LA @<X6M#X6M#J2IKWA$YFVE!!XVE!!S1T#G1=LSD0<
+C01]@@TWX6L+J2,"R51!!XVE!!XVE!!XTQDPQT_SD1LSC10X$H@K!!<+J2-QH%)\XVE!!XVDKS6EDQDQDPT)LSD0<OEQFS ABR%EQTT TWCI!!XVE!!F"T"S4QDQC 8
+PT1LOC05UA92@GH:FEYVU%EDQDP2L!!(XBP$UPTP8NC )O40<OG@3A7H@\%-JU%YVRCYDQDP-F@$IBRLUPS 8JPULOC1YUDYN\ A2\#40RBT%IUIDQP$IBP$#
+G1=JK2$ESC0<HG@3K7I2@GI2P!!@IIQ XBULIBP$#G1<_SD1LO40<OC0BIA-N\''H@\''I2V20_BP$IBP$#G1<_G41LSD1LOC0<C1XHWWI2\ A2\''I2@21LBRL#
+G1<_G41LSD1LOC0<H@HVX ]2\''I2@GI2\''I2S0=YG1<_G41LSD1LSC0<OE%0[@ G\''I2\''H@\''I2\''I2D"\BVT1LSD1LSC0<OCU0UCL[WWI2\''I2\ A2\''I2
+\''I2S$$;M5\,KB0,C7ATE#MFK492\''I2\''I2@GI2\''I2\''I2\$8DG&,LW%8LX 4^AD92\''I2\''I2\''H@\''I2\''I2\''I2\''I2S$I]A%5BS''I2\''I2\''I2\''I2
+\ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[255 224 223 255 224 224 127 32 31 191 159 128 160 160 160 191 96 96 192 191 191 191 160 160 95 95 64 223 95 95 255 223 192 223 160 160 95 63 63 95 95 95 255 160 159 127 32 32 128 63 63 192 127 96 192 191 160 223 159 128 191 32 32 191 63 63 64 31 31 224 96 96 224 95 95 224 255 255 223 191 191 96 96 96 160 127 96 255 159 159 128 127 127 192 95 64 160 64 63 192 128 128 192 64 63 192 95 95 64 32 32 224 96 95 224 159 159 128 95 64 223 159 159 191 223 255 255 191 191 255 127 127 128 32 32 223 160 191 192 159 128 160 159 159 192 64 64 223 191 160 192 255 255 64 63 63 224 224 223 128 63 32 224 127 127 96 32 32 191 224 255 255 255 255 160 95 64 127 64 64 160 64 64 160 95 95 192 128 127 191 95 95 223 127 96 160 128 159 223 192 191 223 128 128 192 224 255 192 160 191 96 95 95 255 192 192 255 96 95 160 159 128 160 63 63 160 32 32 191 64 64 192 96 96 223 223 192 191 159 159 223 160 159 255 127 96 223 127 127 223 96 96 95 31 31 255 128 128 255 96 96 127 31 31 159 96 96 159 63 63 191 32 31 192 160 159 192 159 159 192 192 191 95 63 32 255 191 160 223 128 127 223 255 255 95 64 64 255 128 127 255 160 160 223 224 255 159 95 95 160 127 127 191 160 159 224 223 192 192 160 160 96 95 64 64 32 31 255 255 224 255 159 128 223 96 95 96 31 31 255 192 191 0 0 0]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@C?0@@G??@@C??<@A??? @???<@_??? O???<G????!!????8_????O????3????<?????/????;????>?????/????;????>?????/????1????<_????C??
+?? ????8G???<@???>@G???@@??? @G??0@@_?0@@@? @@@@@@@b') ; yourself); yourself]
+!
+
+fileBrowser32x32Icon
+    "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 fileBrowser32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#fileBrowser32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class fileBrowser32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@KB0B@ PFR45PCP<QVE)\FQ-)@@@@@@@@@@@@@@@@@@@BQ"0,R@XHB%ARUQDSEU1^XA4_JP@@@@@@
+@@@@@@@@@D]GA@P,KD0JC@9UU5$UFA) X&T!!H60@@@@@@@@@@@@@R@TERT$FKC@0LG\2^CL4^3Y=M788D2\(\& @@@@@@@AIA YJR \GLG\''I2\''I2\''I2\''
+I3T%X8M6 0@@@@@@@@\GR4,HBD17L"]3\7M3@F56]''Y6"ELWX6=1^P@@@@@@B@!!LS@$ISW 3I3E3KR,@[VMO@F9.S4=OS4=OX0@@@@@IST4JB$9N^#P''K"=0
+\0A-X0A._G1<_G1<_G1<[ @@@@)NS ,KTEA;M"\;BWQ3@F5#@B\''I2\''I2\''I2\''Z @@TE@LCEEQCSX7I1LSN0$@[VL@I7T3_S&BOX%B@PQK@@AQTP4MT%HN
+M78''@@@SD3,IX0@'']3Q>QC2GPX5FAT,@@EHNC%QTC0<8_3&@ P@@D1L;BR\3_S%_IB)+I@QJR0@@U@<OUUTPDC&@I2\''I2\@@ALSI3Q>N#2GPX5FAT-K@@@P
+DEYVDQEWN(D'']SM=NXH&@@@''_S&BOX%B@PQJBT,@@ADQU5\RD%"A "]7MG9DOH]A#R\''I2\''@@@@@@@@@@@@D%!!XD1MYVXH;I3M=NU<$J&,$AD)KI4L@@@@@
+@@@@@@@SVU$TEE)Z!!C0''MG8:OH]A#TXER4,''Q@@@@@@@@@@@@E)ZEQU[V1ZEOR]=NXH="THAAD(IR2]E@@@@@@@@@@@@V5,VE%1\FHX>I2\''I2\''I2\''I2\''
+I4X@@@@@@@@@@@A\FA!!]WQ$YO#>IPH)A"4JL#TPAQPIF@0@@@@@@@@@@@E4YFU9^F!!(?"R\''I2\''I2\''I2\''Z"\D@@@@@@@@@@@@F!!)_W1,[XDBJI7T3_S&B
+OX%B@PQKI0T@@@@@@@@@@@@[F6A GA1!!PX,'']3Q>QC2GPX5FAT,''A @@@@@@@@@@@A1!!XQ4]X&IB#B\3_S%_IB)+I@QJR2\G@@@@@@@@@@@@GVI"G!!9$YH2M
+I3Q>N#2GPX5FAT-KI4,@@@@@@@@@@@A$YA<_YVT #TP''_S&BOX%B@PQJBT,''S@@@@@@@@@@@@@@@HBA&Y"DAQR\''I2\''I2\''I2\''I2]M@@@@@@@@@@@@@@@@
+@F\"H IF@4\DRD$FR ]KBD0IB$8@@@@@@@@@@@@@@@@@@@@#@4\DR@UIA ]KBD0ISP)NB0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 177 177 177 175 175 175 173 173 173 171 171 171 169 169 169 167 167 167 165 165 165 163 163 163 161 161 161 159 159 159 157 157 157 155 155 155 153 153 153 151 151 151 149 149 149 147 147 147 145 145 145 143 143 143 141 141 141 139 139 139 137 137 137 135 135 135 242 0 0 133 133 133 131 131 131 129 129 129 127 127 127 125 125 125 123 123 123 121 121 121 119 119 119 117 117 117 115 115 115 113 113 113 111 111 111 107 107 107 159 0 0 95 95 95 91 91 91 42 167 42 77 77 77 75 75 75 55 55 55 226 226 226 47 47 47 45 45 45 43 43 43 216 216 216 37 37 37 214 214 214 212 212 212 210 210 210 53 0 0 208 208 208 206 206 206 204 204 204 202 202 202 200 200 200 196 196 196 194 194 194 192 192 192 190 190 190 188 188 188 186 186 186 184 184 184 182 182 182 180 180 180 178 178 178 176 176 176 174 174 174 172 172 172 170 170 170 168 168 168 166 166 166 164 164 164 162 162 162 160 160 160 158 158 158 255 0 0 156 156 156 154 154 154 152 152 152 235 0 0 150 150 150 148 148 148 146 146 146 144 144 144 142 142 142 140 140 140 138 138 138 136 136 136 134 134 134 132 132 132 130 130 130 128 128 128 126 126 126 124 124 124 122 122 122 192 0 0 120 120 120 118 118 118 116 116 116 114 114 114 53 188 53 90 90 90 88 88 88 78 78 78 76 76 76 0 192 0 254 177 102 74 21 21 52 52 52 66 21 13 200 253 200 42 42 42 40 40 40 217 217 217 192 255 192 215 215 215 213 213 213 53 7 0 211 211 211 209 209 209 254 218 164 207 207 207 205 205 205 203 203 203 201 201 201 199 199 199 197 197 197 159 255 159 195 195 195 193 193 193 191 191 191 189 189 189 102 33 18 187 187 187 185 185 185 183 183 183 181 181 181 179 179 179]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@G??8@A??? @_??>@G???>A???? _???<G????!!????<_????''????9????>_????''????9????>_???@G???0A???<@_???@G???0A???<@_???@G??
+?0A???<@_???@G???0A???<@G???@@_??0@A??<@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+help32x32Icon
+    "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 help32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#help32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class help32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRTR)RT%IRT%IRTR$*C[&5ST5M=_E8>OBACRVU)T5Q. 4)J%IRT%IRT%IRB[UM-R$)SM"1HSFE!!W4UA@$9-R%QS
+UGBT%IRT%IRT %QTR$)RFEJB-KV5-[N2+:=$TS\Z[$)*T8JT%IRT%D)*T4)JM%JS.[&2+:.'')*"(*J29 5H2T$)-[XNT%IRT %MJR#Y-.[&9.ZN '')2\''):
+(+"V$6(6T4)* YRT%D)S[T(6[[&9.[&9&)^W%9^W&Y*\$9ZU$64YT%I-$9RT 65JM&69.[&9.YM3U3,\GA1YU8"S$9NS$5TX[V6T%IRBT65P.[&9.[&SZ $
+I2(-J"LKN6>S%INS 5D6M(JT%F(7FHJ9.[&9$5H1J6N@ (JAY$($M(FC$9JS !! XT9RTT3\6.[&9%)MRESFB$9RT%IRT%FTFL(JS$)NBM#IR%IQRJW"1*9.W
+VQH1 9RT%IRT%IRT%F$+G7V!!''X]2BSRT%FT)#Z:$&XX=K8BT%IRT%IRT%IRTR$8"V:V]&WHILIRT]2V0,Y>Y!!!!ANR)RT%IRT%IRT%IRT_4X )*J\!!!!1C%IQ6
+I[B.''Y]Y@6VT%IRT%IRT%IRT%D*PQ02()Y2FN3:T%E(),J.]%3,QZT*T%IRT%IRT%IRT%IEGC*.&''XX9GYRTO"&-*96XN2])R)RT%IRT%IRT%IRT$D\A*:"]
+!!#$^%IQ]DJ.+(I!!YO6UJ%IRT%IRT%IRT%IRCP :.*96FN"NT%G,O*J. &''H]K)MJ%IRT%IRT%IRTR&4KW::("WH:I9RTYQE *ZJ\"C,M_$)J%D)JR)QJR)RO
+QRF+,*!!4V@(1%IQ)S6^V%YNS[Q X#9RT%IRT%D)J%F(ST[&8$(9(AC"T%EMTF(N9.YVD[AQKZ)BTR$)JR)A"ASZT.YQ1U!!,GT9RTUULYT)N9-)NET1$PSV%*
+ W=OK"\6!!K&7#7ARESI*%IQ.T682 [&7%INC[S4 IB\*I2X&^+"9.YJB[SHYT''BT%IMSR%H6 )NS$9ND#GU\P$ED^Z:1.K&P (@6AV5T!!YRTR%Q-R!!(8 )NS
+$9R")ZZ''**:.+*>S 690M1URR&*T%IRT &)JR#X6[YJR#92 (*V&)*R$"8E0 D<FT$)T\IRT%IQJZ&5JR#\YT(JB%9&G"X*J!!8]3Z5HVA&5JUF)J%IRT%IQJ
+T69JR%HXFCYW\''JF!!(Y2U3(WA#MJR%QSR)RT%IRT%IQJT5I.R$)RM ,@BP$IB@$ICSU.R&5)UD*T%IRT%IRT%IRTR&9-T5MRTB=@OS0>JB=&T6).[T*T%IRT
+%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%IRT%@@a') ; colorMapFromArray:#[128 32 32 128 95 32 128 96 96 128 127 95 128 128 127 128 128 128 128 128 159 128 159 159 159 32 31 159 32 32 159 32 63 159 63 32 159 64 63 159 64 64 159 95 63 159 96 63 159 96 64 159 96 95 159 127 96 159 127 127 159 128 128 159 128 159 159 128 160 159 159 128 159 159 159 159 159 160 159 160 160 159 191 160 160 32 32 160 63 32 160 63 63 160 64 32 160 64 63 160 95 32 160 95 63 160 95 64 160 95 95 160 96 63 160 96 64 160 96 95 160 96 96 160 127 64 160 127 96 160 127 127 160 128 95 160 128 96 160 128 127 160 128 128 160 159 127 160 159 159 160 159 160 160 159 191 160 160 128 160 160 159 160 160 160 160 160 191 160 191 191 191 31 31 191 31 32 191 32 32 191 63 32 191 63 63 191 64 63 191 64 64 191 95 95 191 96 63 191 96 64 191 96 95 191 127 63 191 127 64 191 127 95 191 127 96 191 128 64 191 128 127 191 128 128 191 128 159 191 159 64 191 159 127 191 159 159 191 160 159 191 160 160 191 160 191 191 191 191 191 191 192 191 192 192 191 192 223 191 223 223 192 31 32 192 31 63 192 32 32 192 64 63 192 64 64 192 96 64 192 96 96 192 127 96 192 128 64 192 128 96 192 159 64 192 159 159 192 159 160 192 160 64 192 160 160 192 160 191 192 191 159 192 191 160 192 191 191 192 191 192 192 192 160 192 192 191 192 192 192 192 192 223 192 223 192 192 223 223 192 224 224 223 31 31 223 31 32 223 63 31 223 95 64 223 96 95 223 128 128 223 159 32 223 159 63 223 159 64 223 159 159 223 160 128 223 191 160 223 191 191 223 191 192 223 192 192 223 192 223 223 223 223 223 223 224 223 224 223 223 224 224 224 31 31 224 32 31 224 32 32 224 63 31 224 63 32 224 95 32 224 95 64 224 191 63 224 192 223 224 223 223 224 223 224 224 223 255 224 224 223 224 224 224 224 224 255 224 255 224 224 255 255 255 31 31 255 31 32 255 32 31 255 32 32 255 63 31 255 63 32 255 64 32 255 64 63 255 95 32 255 95 63 255 96 32 255 96 63 255 96 64 255 127 63 255 127 64 255 128 64 255 159 63 255 159 64 255 159 95 255 160 63 255 160 64 255 160 95 255 191 63 255 191 64 255 191 95 255 192 63 255 192 64 255 192 95 255 192 96 255 223 64 255 223 95 255 224 224 255 224 255 255 255 224 255 255 255]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@O??<@OO?;0GO??.A''??=03???,M????&????1????>_????''?<C?9?<@_>_>@C?''?@@?9?0@O>_<@C?''?@@?9?0@O>_>@C?''? A?9?<@_>_?0_?''??
+??9????>[????#_???P3???,F_??6@3??3@GO?; @_?? @@@@@@b') ; yourself); yourself]
+!
+
+imageEditor32x32Icon
+    "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 imageEditor32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class imageEditor32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A#X0A#X6L@X6M#@FM#X0A#X6L@X6M#@FM#X6M#X6M#X6L@X0A#@FL@X0A#@FL@X0A#@FL@X0A#@FM#
+X6M#X6M#@FM#X0A#X6L@X6M#@FM#X0A#X6L@X6M#@FM#X6M#X6M#@FM#X6M#X6M#X6M#X6M#X6M#X6M#X0A#X6M#X6M#X6M#@FMST5MST5MST5MST5MST5MS
+T6L@X6M#X6M#X6M#X0A#X8UST5MST5MST5MST5MST5MSX6L@X6M#X6M#X6L@X6NE''8TUT%IRDW-6T&TUEQUREVU#X6L@X6M#X6M#X6L@!!XNC-\$"CP4AZF!!,
+[@58H'']F^FM#@FM#X6M#X6M#X8V4%\R-.,%-ZF!!(ZF!!(@R,+J2,+X0A#X6M#X6M#X6M#@L:H%I:1)<$6M#X6M#Y;S0@WU!!\@X0A#@FM#X0A#X0A#X<:$2KJA
+*L$PRT$PRT$@X0AJ@FL@X0A#@FL@X0A#X0A#X<;@''L^D%<%GQ4]G@FM#X0A#X6L@X6M#@FM#X0A#X0A#_L;J*[:M&<%!!K2<V@FM#X6M#X6M#X6M#X6L@X6L@
+X6MBP,:K+IF=/<$GA59B@FM]WU5]WU5]WPU#@FM#@FM#X1QQT\: $,F]3\&/+0A#X79>_''8?SG9>M6M#@FM#@FM#W5<]W8+K&\JN4L$@X6M#]TU5^''):O4T-
+X6M#@FM#@FLDA@PDAH*F1[^6.<$@X6M4]GQCP4MC@!!-#X0A#X0A#X7%9^W%9^[CC)XB.(,<@X6)*N2P$IBP;F6L@X6L@X6M#\7M3\7M@BK3F$H&+$<=#C1<L
+LC@0FA=MX6L@X6L@X6L9ZS$9NU!!NS)"#.[N836L^\&\C@0M/G%Q#X6L@X6L@X3D1LSHJD!!HRD(?L)**L $QDQ@% [11DUFM#@FM#@FM#N" :B"@ BB8.VHJG
+&*FVWE0ZWE,&I2\IX0A#X0A#X6MPHU@!!HU@!!TEAPHRD@X6L8NC 3L3L3NCU#X0A#X0A#X0,KB0,KB0,KB0,K@FM#X6Y&Y@X)JU]UD6M#X0A#X0A#[&8=[&9.
+[&8>[&9.@FM#V%)ZV%)ZV%(*X6L@X6L@X6M#X6M#X6M#X6M#X6M#@FM=_W5=_W5=_T-#@FM#@FM#X0A#X6L@X6M#@FM#X0A#X6M#X6M#X6M#X6M#@FM#@FL@
+X0A#@FL@X0A#@FL@X6M#@FM#X0A#X6L@X6M#@FM#@FM#X0A#X6L@X6M#@FL@X0A#@FL@X0A#@FL@X0A#X6M#X6M#X6M#X6M#X6M#X6L@X6M#@FM#X0A#X6L@
+X6L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 204 182 197 175 191 155 231 236 210 180 93 134 80 116 78 243 246 205 237 221 229 243 212 225 168 189 45 234 181 203 230 120 163 206 217 175 116 58 97 238 191 210 119 149 33 231 217 226 122 70 106 246 226 234 199 215 22 167 85 127 112 56 96 233 210 221 127 63 104 222 229 200 239 222 230 165 188 18 104 136 54 150 174 23 174 90 130 135 162 28 120 150 33 248 227 235 224 117 159 115 57 98 187 97 139 225 231 212 242 223 232 237 241 207 165 187 17 218 113 156 232 239 159 210 224 18 121 60 100 225 203 215 82 118 61 245 216 228 234 219 227 228 234 211 211 109 152 210 109 151 240 244 206 232 166 192 185 203 26 229 217 225 69 107 61 181 200 12 203 105 147 218 114 155 144 168 98 207 170 190 236 123 166 235 123 165 178 193 171 196 101 143 142 72 113 159 81 123 221 228 213 149 174 23 71 109 49 116 57 97 232 218 227 208 144 174 231 218 226 134 68 108 218 231 11 64 102 55 128 156 45 245 225 233 181 144 167 224 117 160 167 86 127 112 55 96 111 55 95 149 173 39 195 213 8 127 64 104 228 236 143 239 202 217 240 223 231 207 223 3 237 241 208 165 187 18 69 106 66 233 215 224 174 89 130 234 239 208 234 219 228 135 67 108 255 255 255 219 229 107 112 56 95 195 212 7 156 178 68 227 215 224 203 105 148 103 135 39 243 224 233 186 157 177 172 135 160 235 123 166 225 232 195 223 181 200 193 135 164 135 162 27 195 101 143 85 121 44 71 109 50 136 89 121 116 57 98 115 57 97 188 97 139 218 226 214 210 190 203 150 77 118 216 230 0 61 100 53 165 120 149 242 108 0 255 186 105 186 160 156 250 163 90 255 188 108 167 102 48 137 61 2 114 91 85 128 58 3 226 160 119 90 53 35 147 68 5 200 156 136 255 187 104 249 184 108 111 89 88 191 120 84 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 99 91 79 253 196 141 101 62 48 221 111 4 114 80 64 255 200 146 218 115 4 254 184 102 254 127 3 215 165 133 134 60 4 85 77 68 254 232 217 137 78 56 139 65 5 220 102 2 172 104 77 253 205 143 255 199 145 219 112 4 231 173 141 252 217 191 223 115 4 247 184 110 250 157 80 254 254 252 91 51 26 254 184 100 254 129 1 219 162 125 216 154 122 253 198 145 246 163 82 247 120 7 249 219 197 174 106 74 254 204 149 243 174 115 75 37 16 255 190 110 255 132 1 255 201 146 145 68 5 254 128 3 251 120 0 133 59 3 240 110 9 215 106 4 119 58 22 254 136 9 222 113 4 190 118 68 136 62 5 133 58 2 127 70 39 254 202 147 78 38 4 201 153 138 254 200 147]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@BH"H A7]7\@???? G???0@???8@_???@O???8A???<@_??>@G???4S????._????3????9????<?????''????<????>_????O????9?????O????''??
+??3????>_????3????9????<?????'']7??<"H.;.@@ADQ@@@@@@b') ; yourself); yourself]
+!
+
+imageEditor32x32Icon3
+    "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 imageEditor32x32Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#imageEditor32x32Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class imageEditor32x32Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@D)GRAH@@@@@@@@@@@@@@@@@@@@@@C8PZB\*N@@@@@LC@0LC@0LC@0LC@0M-G%MQS@\@@@@C@0LC@0LC@0LC@0L9VRETN 0*@@@@
+@0LC@ HB@ HB@ LCXQ5&C48K@@@@@@LC@ HB@ HB@ HB@1,#Z30_QP@@@@@C@ HB@ HD@ HD@$DVOT<S[@@@@@@@@0HB@ HB@ HB@ H7UQ$?Z!!0@@@@@@@LB
+A@HB@ HB@ I\H%YDV5@C@@@@@@@C@ HB@ HBA@HDFDHMI$-I@0@@@@@@@0HB@ HD@ HBISQCX 8/@0L@@@@@@@LB@ HB@ HB@&A_LP((Y0LC@@@@@@@C@0HB
+@ HB@"8UF&M$A#HC@0@@@@@@@0HD@ HB@ IRKST3N58C@0L@@@@@@@LB@ HB@PDASR@QBFU]@0LC@@@@@@@C@0HB@ HA@R$''EA\+@0LC@0@@@@@@@0LC@0LC
+@PD,I6%Z@0LC@0L@@@@@@@LC@0LC@0DAL@%F@0LC@0LC@@@@@@@DA@PDA@PA@SX$A@PDA@LC@0@@@@@@A@PDA@PDA@Q@A@PDA@PDA@P@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[87 87 87 133 60 36 0 206 0 174 218 230 0 137 0 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C3_??;_??;_??;_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3_??3@@@C') ; yourself); yourself]
+!
+
+menuEditor32x32Icon
+    "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 menuEditor32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#menuEditor32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class menuEditor32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\''I2\''I2\''I2\''I2\''I2\#0@@@@@@@@@@@@@@@@@@@BPH"H"H"H"H"H"H)8"H"H"O@@@
+@@@@@@@@@@@@@@@@@F4"H"H"H"H"H"H"H"H"H"H<@@@@@@@@@@@@@@@@@@@@D"H"H"H"H"H"H"H"H"H"H#0@@@@@@@@@@@@@@@@@@@BSU5]WU5]WU5]WU5]W
+U5]WO@@@@@@@@@@@@@@@@@@@@L!!J@2A$YB@C@2A$YEIRT%H<@@@@@@@@@@@@@@CJ2 @@NIJR$)JR$)JR$)JR$)JR$#0@@@@@@@@@@@@@2$HO2 B*$)JR$)JR
+$)JQZYJR$)JRO@@@@@@@@@@@@L(2BXSA2*E%$)JR$)JR$)JR$)JR$)H<@@@@@@@@@@CJ 2>1Z8;A-VN-+Z5FQ$Z-QDQDR4-KR30@@@@@@@@@@@CJD28?^U/A
+H''I2\''I2\''I2\''I2\''I2O@@@@@@@@@@@@@CJU[1:AE7AH"H"H"H"H"H"H"H"H"H<@@@@@@@@@@@@@@CJ*C6;B#OAH"H"H"H"H"H"H"H"H#0@@@@@@@@@@@@@
+@@CJ1FB_G3/AH"H"H"H"H"H"H"H"O@@@@@@@@@@@@@@@@@CJFF(+''JSA^7-;(E];(@0LC@0<@@@@@@@@@@@@@@@@@@CJP22)O,''A\''I2\''I2\''I2\#0@@@@@
+@@@@@@@@@@@@@@@V1SV+H\3AH"H"H"H"H"H"O@@@@@@@@@@@@@@@@@@@@@ VDKZJ!!YSAH"H"H"H"H"H<@@@@@@@@@@@@@@@@@@@@#W57+EXB[%A4H"H"H"H"
+H#0@@@@@@@@@@@@@@@@@@@B2RARY-2 UY24E) 8NC : O@@@@@@@@@@@@@@@@@@@@@^?"LX4T81>"<.X\''I2\''H<@@@@@@@@@@@@@@@@@@@@B<MQ_8\%15%"
+G@X"H"H"H#0@@@@@@@@@@@@@@@@@@@@M^B]O)61&DS]ELRH"H"H"O@@@@@@@@@@@@@@@@@@@@C@''F2NWN\B:%U!!!!H"H"H"H<@@@@@@@@@@@@@@@@@@@@!!+N0
+Q:9(M!!&=WA^[.WZ9#30@@@@@@@@@@@@@@@@@@@@^\''I2\''I2\''I1[7I2\''I2O@@@@@@@@@@@@@@@@@@@@@D"H"H"H"H"H"H"H"H"H"H<@@@@@@@@@@@@@@@@
+@@@@CRH"H"H"H"H"H"H"H"H"H#0@@@@@@@@@@@@@@@@@@@BZH"H"H"H"H"H"H"H"H"H[O@@@@@@@@@@@@@@@@@@@@D153XF%V!!6#V,4] U(:GQ6@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 230 230 229 242 108 0 21 232 231 255 186 105 101 75 66 186 160 156 234 234 236 163 163 163 250 163 90 255 188 108 228 228 230 104 104 105 226 226 228 102 102 103 167 102 48 137 61 2 114 91 85 218 218 220 128 58 3 59 58 54 226 160 119 90 53 35 84 84 85 147 68 5 82 82 83 80 80 81 182 182 181 200 156 136 88 88 92 247 247 248 255 187 104 21 231 230 249 184 108 186 186 188 184 184 186 237 237 238 111 89 88 235 235 236 180 180 182 191 120 84 231 231 232 5 237 237 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 213 213 214 99 91 79 254 232 208 253 196 141 101 62 48 221 111 4 101 101 104 114 80 64 133 233 234 150 150 152 89 89 92 255 200 146 85 85 88 218 115 4 254 184 102 254 127 3 174 239 241 172 217 216 215 165 133 134 60 4 0 129 126 85 77 68 0 125 126 110 110 109 69 69 72 105 104 104 19 230 230 0 138 139 102 102 101 3 135 132 116 116 118 165 165 166 254 232 217 161 161 162 19 234 233 137 78 56 84 84 83 139 65 5 220 102 2 97 94 99 95 96 97 172 104 77 90 90 92 253 205 143 88 88 90 255 199 145 86 86 88 84 84 86 219 112 4 56 56 55 231 173 141 5 141 143 21 231 231 3 189 187 115 113 116 252 217 191 107 107 108 2 191 189 223 115 4 247 184 110 134 137 141 225 225 227 250 157 80 221 221 223 0 134 131 219 219 221 254 254 252 205 198 194 159 97 83 89 89 90 105 105 109 91 51 26 193 193 192 254 184 100 254 129 1 95 95 99 185 185 184 110 113 117 219 162 125 144 146 147 91 91 95 89 89 93 9 238 238 216 154 122 253 198 145 246 163 82 173 173 172 120 116 120 186 187 188 238 238 239 247 120 7 249 219 197 174 106 74 181 181 183 254 204 149 108 108 108 230 230 231 2 190 188 2 186 188 179 170 171 243 174 115 116 116 119 0 133 130 165 165 167 223 217 214 75 37 16 216 216 217 108 108 111 255 190 110 175 249 249 190 190 188 255 132 1 96 96 99 135 225 226 251 251 251 90 90 93 255 201 146 88 88 91 101 104 107 137 137 139 145 68 5 254 128 3 133 225 227 251 120 0 133 59 3 0 128 126 111 111 110 11 243 242 109 109 108 240 110 9 159 158 157 106 103 105 5 237 236 88 135 130 215 106 4 119 58 22 173 233 233 107 107 109 122 123 127 254 136 9 222 113 4 85 85 84 173 235 236 213 213 216 138 138 139 190 118 68 83 83 85 187 187 187 136 62 5 133 58 2 164 165 161 127 70 39 138 243 244 254 202 147 78 38 4 201 153 138 254 200 147 87 87 92]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@G??0@A??<@@_??@@G??0@A??<@@_??@A''??0@=??<@_???@O???0A???<@O???@A???0@O??<@A???@@O??0@A??<@@_??@@G??0@A??<@@_??@@G?
+?0@A??<@@_??@@G??0@A??<@@_??@@G??0@A??<@@_??@@@@@@@b') ; yourself); yourself]
+!
+
+menuEditor32x32Icon2
+    "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 menuEditor32x32Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#menuEditor32x32Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class menuEditor32x32Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@L!!J@2A$YB@C@2A$YEIRT%H<@@@@@@@@@@@@@@CJ2 @@NIJR$)JR$)JR$)JR$)JR$#0@@@@@@@@@@@@@2$HO2 B*$)JR$)JR
+$)JQZYJR$)JRO@@@@@@@@@@@@L(2BXSA2*E%$)JR$)JR$)JR$)JR$)H<@@@@@@@@@@CJ 2>1Z8;A-VN-+Z5FQ$Z-QDQDR4-KR30@@@@@@@@@@@CJD28?^U/A
+H''I2\''I2\''I2\''I2\''I2O@@@@@@@@@@@@@CJU[1:AE7AH"H"H"H"H"H"H"H"H"H<@@@@@@@@@@@@@@CJ*C6;B#OAH"H"H"H"H"H"H"H"H#0@@@@@@@@@@@@@
+@@CJ1FB_G3/AH"H"H"H"H"H"H"H"O@@@@@@@@@@@@@@@@@CJFF(+''JSA^7-;(E];(@0LC@0<@@@@@@@@@@@@@@@@@@CJP22)O,''A\''I2\''I2\''I2\#0@@@@@
+@@@@@@@@@@@@@@@V1SV+H\3AH"H"H"H"H"H"O@@@@@@@@@@@@@@@@@@@@@ VDKZJ!!YSAH"H"H"H"H"H<@@@@@@@@@@@@@@@@@@@@#W57+EXB[%A4H"H"H"H"
+H#0@@@@@@@@@@@@@@@@@@@B2RARY-2 UY24E) 8NC : O@@@@@@@@@@@@@@@@@@@@@^?"LX4T81>"<.X\''I2\''H<@@@@@@@@@@@@@@@@@@@@B<MQ_8\%15%"
+G@X"H"H"H#0@@@@@@@@@@@@@@@@@@@@M^B]O)61&DS]ELRH"H"H"O@@@@@@@@@@@@@@@@@@@@C@''F2NWN\B:%U!!!!H"H"H"H<@@@@@@@@@@@@@@@@@@@@V+N0
+Q:9(M!!&=WA^[.WZ9#30@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 230 230 229 242 108 0 21 232 231 255 186 105 101 75 66 186 160 156 234 234 236 163 163 163 250 163 90 255 188 108 228 228 230 104 104 105 226 226 228 102 102 103 167 102 48 137 61 2 114 91 85 218 218 220 128 58 3 59 58 54 226 160 119 90 53 35 84 84 85 147 68 5 82 82 83 80 80 81 182 182 181 200 156 136 88 88 92 247 247 248 255 187 104 21 231 230 249 184 108 186 186 188 184 184 186 237 237 238 111 89 88 235 235 236 180 180 182 191 120 84 231 231 232 5 237 237 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 213 213 214 99 91 79 254 232 208 253 196 141 101 62 48 221 111 4 101 101 104 114 80 64 133 233 234 150 150 152 89 89 92 255 200 146 85 85 88 218 115 4 254 184 102 254 127 3 174 239 241 172 217 216 215 165 133 134 60 4 0 129 126 85 77 68 0 125 126 110 110 109 69 69 72 105 104 104 19 230 230 0 138 139 102 102 101 3 135 132 116 116 118 165 165 166 254 232 217 161 161 162 19 234 233 137 78 56 84 84 83 139 65 5 220 102 2 97 94 99 95 96 97 172 104 77 90 90 92 253 205 143 88 88 90 255 199 145 86 86 88 84 84 86 219 112 4 56 56 55 231 173 141 5 141 143 21 231 231 3 189 187 115 113 116 252 217 191 107 107 108 2 191 189 223 115 4 247 184 110 134 137 141 225 225 227 250 157 80 221 221 223 0 134 131 219 219 221 254 254 252 205 198 194 159 97 83 89 89 90 105 105 109 91 51 26 193 193 192 254 184 100 254 129 1 95 95 99 185 185 184 110 113 117 219 162 125 144 146 147 91 91 95 89 89 93 9 238 238 216 154 122 253 198 145 246 163 82 173 173 172 120 116 120 186 187 188 238 238 239 247 120 7 249 219 197 174 106 74 181 181 183 254 204 149 108 108 108 230 230 231 2 190 188 2 186 188 179 170 171 243 174 115 116 116 119 0 133 130 165 165 167 223 217 214 75 37 16 216 216 217 108 108 111 255 190 110 175 249 249 190 190 188 255 132 1 96 96 99 135 225 226 251 251 251 90 90 93 255 201 146 88 88 91 101 104 107 137 137 139 145 68 5 254 128 3 133 225 227 251 120 0 133 59 3 0 128 126 111 111 110 11 243 242 109 109 108 240 110 9 159 158 157 106 103 105 5 237 236 88 135 130 215 106 4 119 58 22 173 233 233 107 107 109 122 123 127 254 136 9 222 113 4 85 85 84 173 235 236 213 213 216 138 138 139 190 118 68 83 83 85 187 187 187 136 62 5 133 58 2 164 165 161 127 70 39 138 243 244 254 202 147 78 38 4 201 153 138 254 200 147]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_??@A''??0@=??<@_???@O???0A???<@O???@A???0@O??<@A???@@O??0@A??<@@_??@@G??0@A??<@@_??@@G?
+?0@A??<@@_??@@G??0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+menuEditor32x32Icon3
+    "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 menuEditor32x32Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#menuEditor32x32Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class menuEditor32x32Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GU2\34@@@@@@@@@@@@@@@@@@@@@@@@@@@A)N9MRUVL@@@@@@@@@@@@@@@@@
+@@@@@@@@@I!!I_''17L @@@@@EK"8.K"8.K"8.K"8.K"9$!!D1?YS]U@@@@@@TOC0<OC0<OC0<OC0<OC81H$S)9M @@@@@@AP<OC0<OC0<OC0<OC0<OQ$:VY4)0
+@@@@@@@EC0<OC0<OC0<OC0<OC61AZG(>%0@@@@@@@A,[F1,[F1,[F1,[F1,[X(ADZ)UG@@@@@@@@@0LC@0LC@0LC@0LC@8]M V>F^8L@@@@@@@@LD1LSD1LS
+D1LSD1LSP648TWY4@@@@@@@@@@0SD1LSD1LSD1LSD5A_[(49V!!P@@@@@@@@@CALSD1LSD1LSD1LS"8)\MUNRE@@@@@@@@@@,KB0,KB0,KB0,KE%@QX:OLR0T
+@@@@@@@@@@T.K"8.K"8.K"8._U!! W&ZIK!!P@@@@@@@@@AP<OC0<OC0<OC0=8R303$H OE@@@@@@@@@@EC0<OC0<OC0<OC5QRO4IVC0<T@@@@@@@@@@TOC0<O
+C0<OC0<OU5JT!!P<OC1P@@@@@@@@@F1,[F1,[F1,[F1-[MGD[IAPTE@@@@@@@@@@EK"8.K"8.K"8.K&EOK"8.K"8T@@@@@@@@@@TKC0<OC0<OC0<OZ0<OC0<O
+C1P@@@@@@@@@AR$OC0<OC0<OC0<OC0<OC0<OE@@@@@@@@@@JG!!\OC0<OC0<OC0<OC0<OC0<T@@@@@@@@@@8AA2(!!FA<IGRL"@!!X E!!@TIAP@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 106 103 105 108 108 111 21 232 231 3 189 187 226 226 228 104 104 105 109 109 108 21 231 231 82 82 83 213 213 214 187 187 187 133 233 234 21 231 230 90 90 92 186 186 188 108 108 108 135 225 226 138 243 244 2 186 188 85 85 88 133 225 227 107 107 109 182 182 181 107 107 108 19 230 230 0 129 126 102 102 103 0 128 126 85 85 84 180 180 182 101 101 104 105 105 109 111 111 110 84 84 85 88 88 90 96 96 99 0 125 126 2 191 189 0 138 139 97 94 99 193 193 192 110 110 109 19 234 233 5 141 143 95 95 99 254 254 252 2 190 188 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@C0@@@A>@@@@_ A???8@_??<@G???@A??? @_??8@G??>@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A???@@_??0@G??<@A??
+?@@_??0@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+openEditApplication32x32Icon
+    "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 openEditApplication32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#openEditApplication32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class openEditApplication32x32Icon'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@ LC@0LC@0LC@0LC@0LCA@@@@@@@@@@@@@@@@@@@@@TFA0 HB@ HB@ HB@ HB@ IB @@@@@@@@,KC@4NC0@@DA@P
+DA@PDA@PDA@QD!!DRD0$TEP@@@@@@E!!\WE1 @@A$ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZEA,\@@@@@@@@@@@@@@@@GQ8^G!!8^G!!8^G!!8^G!!8^G!!8JEQ0@@@@@@@@@@@@@
+@@@_G!!8^HB@^HB@ HB@!!HQL^G"HU@@@@@@@@B0,#G@<@IBT&G!!8 HA8 HB@ HRDSD18^I10@@@@@@@@VE1\(@@@]H18^G!!8^G!!8^G"D!!JR$SG"(''G@@@@@@@
+@@@@@@@@@A<^G!!8 HA8 HB@!!HR$)JQL^J1T@@@@@@@@@@@@@@@@$IQ8^G"@ G"@ HRD)JR$,KQ8.EP@@@@@@@@@KB0,O@A4#G!!8^G!!8^G"D0JR$)KB4^J (\
+@@@@@@@@@CHWE0@@GRL^G"@ G"@1LC@)JR0-G!!8*B!!0@@@@@@@@@@@@@@@@_G!!8^HB@^HBD0LC@0L2@^G",''G@@@@@@@@@@@@@@@IBT^G!!8^G!!81LC@0KB0 
+G!!8^K!!T@@@@@@@@@@CT5@@@]H18^HB@^HCP0KB0 HB@ G"(JEP@@@@@@@@@@E1\@@A<^G!!8 HA84KSL HB@ HB@^J2\\@@@@@@@@@@@@@@@$M18^G!!8^G#P^
+G!!8^G!!8^G!!8.EQ0@@@@@@@@@@@@@@C 9N#(:N#(:N#(:N#(:N#(:N0(U@@@@@@@@@@@@@@@@OC4>O3<?O3<?O3<?O3<?O3<?EQ0@@@@@@@@@@@@@@@@@EQTU
+EQTUEQTUEQTUEQTUEQTU@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 80 112 176 48 88 168 47 80 160 16 64 144 0 72 176 32 112 208 32 120 208 63 136 216 0 104 208 0 48 160 223 224 240 208 216 224 207 200 200 191 184 184 191 184 200 0 112 216 159 208 248 16 112 208 255 104 48 0 64 168 96 96 96 160 160 168 127 120 120 112 120 120 95 120 176 32 160 248 47 64 104 207 192 184 16 64 168 240 232 216 16 64 160 255 248 248 255 168 88 15 40 120 208 208 208 79 104 168 96 136 176 240 232 208 16 48 120 112 112 104 255 128 0 224 216 208 128 152 184 192 88 0 48 48 48 32 72 168 207 208 216 255 216 168 160 160 160 143 144 144 64 0 0 95 88 88 191 192 200 144 144 136 128 160 184 15 56 144 160 176 200 207 200 208 191 192 208 63 88 168 31 64 136 15 48 128 15 48 120]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A??<@@_?? _''??<G3???@@???0@O??8G7??>A9??? @_??0@O??<A;???@\???0@O??<@G??>@Y??? F_??8@O?
+?>@C???@@???0@G??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+openViewerApplication32x32Icon
+    "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 openViewerApplication32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#openViewerApplication32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'XPToolbarIconLibrary class openViewerApplication32x32Icon'
+        ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@ LC@0LC@0LC@0LC@0LCA@@@@@@@@@@@@@@@@@@@@@TFA0 HB@ HB@ HB@ HB@ IB @@@@@@@@,KC@4NC0@@DA@P
+DA@PDA@PDA@QD!!DRD0$TEP@@@@@@E!!\WE1 @@A$ZF!!(ZF!!(ZF!!(ZF!!(ZF!!(ZEA,\@@@@@@@@@@@@@@@@GP@@@@@@@@@@@@@@@@@@@@@JEQ0@@@@@@@@@@@@@
+@@@^@@@@G1<@G1<_G1<_G1<@@B@U@@@@@@@@B0,!!G@<@H"L$@@@_G0@_G1<_G1<_G0@@IQ0@@@@@@@@VE1\&@@@]HP@@@@@@@@@@@@@@@@@@@B\%G@@@@@@@
+@@@@@@@@@A8@@@@_G0@_G1<_G1<_G0@@JAT@@@@@@@@@@@@@@@@"H0@@@A<_@A<_G1<_G1<_@@@)EP@@@@@@@@@*J <O@A4!!@@@@@@@@@@@@@@@@@@@@I0(\
+@@@@@@@@@B,+J0@@GRD@@A<_@A<_G1<_G1<_@@@''B!!0@@@@@@@@@KB0,@@@^@@@@G1<@G1<_G1<_G1<@@B %G@@@@@@@@@@@@@@@H"L@@@@@@@@@@@@@@@@@
+@@@@JQT@@@@@@@@@@@4MK@@]HP@@G1<@G1<_G1<_G1<@@B\JEP@@@@@@@@@@KR4,@A8@@@@_G0@_G1<_G1<_G0@@JBT\@@@@@@@@@@@,K@@"K @@@@@@@@@@
+@@@@@@@@@@@)EQ0@@@@@@@@@@@@@@B<0LSD1LSD1LSD1LSD1LSD1L (U@@@@@@@@@@@@@@@@L3P5M#X6M#X6M#X6M#X6M#X6EQ0@@@@@@@@@@@@@@@@@EQTU
+EQTUEQTUEQTUEQTUEQTU@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[240 232 216 80 112 176 48 88 168 47 80 160 16 64 144 0 72 176 32 112 208 32 120 208 63 136 216 0 104 208 0 48 160 223 224 240 208 216 224 207 200 200 191 184 184 191 184 200 0 112 216 159 208 248 16 112 208 255 104 48 0 64 168 96 96 96 160 160 168 127 120 120 112 120 120 95 120 176 32 160 248 47 64 104 207 192 184 16 64 168 16 64 160 255 248 248 15 40 120 208 208 208 79 104 168 96 136 176 240 232 208 16 48 120 112 112 104 224 216 208 128 152 184 32 72 168 207 208 216 143 144 144 0 0 0 144 144 136 128 160 184 15 56 144 160 176 200 207 200 208 191 192 208 63 88 168 31 64 136 15 48 128 15 48 120]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A??<@@_?? _''??<G3???@@???0@O??8G7??>A9??? @_??0@O??<A;???@\???0@O??<@G??>@Y??? F_??8@O?
+?>@C???@@???0@G??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+uiPainter32x32Icon
+    "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 uiPainter32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class uiPainter32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+AP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T@APTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTE@@@EAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTE
+APTEAPT@@@@EAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAPTEAP@@@@TFA XFA XFA XFA XFA XFA XFA XFA XFA XB@@@@APXFA XFA XFA XFA XFA XF
+A XFA XFA XFA H@@@@EC@XEAPTEAPTEAPTEAP@FA PDA@PDA@PDA@TF@ @@@@0&C@TFA XFA XFA XF@@XFA@DA@PDA@PDAAPXB@@@LB (<T@XFA XFA XF
+A X@A XD@PDAAPXA@PDEA H@CC,\R3QAT@XFA XFA XFA @FA PA@PTFA XA@PTF@ @@UP<[IS .T@XFA XFA XF@@XFA@DEA XFA XAAPXB@@@@UR-ONP /
+T@XFA XFA X@A XD@PPDA@PDA@DEA H@@@@EUT\#S ,^T@XFA XFA @FA PA@PDA@PDA@PTF@ @@@@TFUUD0QQP"T@@@@@@@@@XFA@DA@PDA@PDAAPXB@@@@
+APXFUQH3FDQFT@XFA XFA XD@PDA@PDA@PDEA H@@@@EA XFUR\YRBQTT@XFA XFA PA@PDA@PDA@PTF@ @@@@TFA XFDUH RQUWT@XFA XFA@DA@PDA@PDA
+APXB@@@@APX@@@@@DP5LO#5BT@@@A XD@PDA@PDA@PDEA H@@@@EA @EAPTEM4(,A3T)U TFA PA@PDA@PDA@PTF@ @@@@TF@@TEAPTEP44WDCHZU XFA@DA
+@PDA@PDAAPXB@@@@APX@APTEAPTEG2)@N#=VA XD@PDA@PDA@PDEA H@@@@EA @EAPTEAPTEE%L-LQLIA PAAPTEAPTE@PTF@ @@@@TF@@TEAPTEAPTEBP8!!
+JA4FA@DEA XFA PAAPXB@@@@APX@APTEAPTEAPTEAPXEA XD@PDEA XD@PDEA H@@@@EA @EAPTEAPTEAPTEA TFA PA@PDEA@DA@PTF@ @@@@TF@@XFA XF
+A XFA XFAPXFA@DA@PDA@PDAAPXB@@@@APXEAPTEAPTEAPTEAPTEA XEAPTEAPTEAPTEA H@@@@EA XFA XFA XFA XFA XFA XFA XFA XFA XF@ @@@@HB
+@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@@@E@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ H@@@TB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB
+@ @E@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 160 160 160 128 128 128 0 0 128 88 88 88 255 255 255 195 195 195 242 108 0 255 186 105 186 160 156 250 163 90 255 188 108 167 102 48 137 61 2 114 91 85 128 58 3 226 160 119 90 53 35 147 68 5 200 156 136 255 187 104 249 184 108 111 89 88 191 120 84 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 99 91 79 253 196 141 101 62 48 221 111 4 114 80 64 255 200 146 218 115 4 254 184 102 254 127 3 215 165 133 134 60 4 85 77 68 254 232 217 137 78 56 139 65 5 220 102 2 172 104 77 253 205 143 255 199 145 219 112 4 231 173 141 252 217 191 223 115 4 247 184 110 250 157 80 254 254 252 91 51 26 254 184 100 254 129 1 219 162 125 216 154 122 253 198 145 246 163 82 247 120 7 249 219 197 174 106 74 254 204 149 243 174 115 75 37 16 255 190 110 255 132 1 255 201 146 145 68 5 254 128 3 251 120 0 133 59 3 240 110 9 215 106 4 119 58 22 254 136 9 222 113 4 190 118 68 136 62 5 133 58 2 127 70 39 254 202 147 78 38 4 201 153 138 254 200 147]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@O????#????8????>O????#????9????>?????''????8????>O????#????8????>O????#????8????>O????#????8????>O????#??
+??8????>O????#????8????>O????#????8@@@@@@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+uiPainter32x32Icon2
+    "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 uiPainter32x32Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter32x32Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class uiPainter32x32Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 26; height: 26; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+AP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@APTEAPTEAPTEAPTEAPTEAY6Z&6TEAPTEAP@EAPTEAPTEAPTEAPTEAPVQX;):_X,EAPTE@@@EAPTEAPTEAPTE
+APTEA[=1)*R_V TEAPT@@@TFA XFA XFA XFA ZL*7R''#U==A HB@ @@APXFA XFA XFA XFA+M0.FJ!!W XF@ HB@@@EA TEAPTEAPTEAPTE[''Z=#7JXAPXB
+@ H@@@TFAPXFA XFA XFA)Q)$JI&/ D@A HB@ @@APXEA XFA XFA XF"*!!,$+1/A @F@ HB@@@EA TFA XFA XFA*95*Y^-(0XF@@XB@ H@@@TFAPXFA XF
+A XFZ9U ^Y:\A X@A HB@ @@APXEA XFA XFA''"G%+Q!!  XFA @F@ HB@@@EA TFA XFA XF,+FDWW.9A XF@@XB@ H@@@TF@@@@@@@@@HE([[V6VP@@@@@@
+A HB@ @@APXFA XFA XF)XBH!!(:0A XFA XF@ HB@@@EA XFA XFA Z \6Q[-:<FA XFA XB@ H@@@TF@@@@@@@@@G1:Y6)>@@@@@@@@A HB@ @@APX@APTE
+APTE_7*;+@TEAPTEA TF@ HB@@@EA @EAPTEAPVCWI$EAPTEAPTFAPXB@ H@@@TF@@TEAPTEAX%7APTEAPTEAPXEA HB@ @@APX@APTEAPTE$0TEAPTEAPTE
+A TF@ HB@@@EA @FA XFA XFA XFA XFA XFAPXB@ H@@@TFAPTEAPTEAPTEAPTEAPTEAPTEA HB@ @@APXFA XFA XFA XFA XFA XFA XF@ HB@@@B@ HB
+@ HB@ HB@ HB@ HB@ HB@ HB@ H@@@HB@ HB@ HB@ HB@ HB@ HB@ HB@ HB@ @a') ; colorMapFromArray:#[64 64 64 160 160 160 128 128 128 0 0 128 88 88 88 255 255 255 195 195 195 242 108 0 255 186 105 186 160 156 250 163 90 255 188 108 167 102 48 137 61 2 114 91 85 128 58 3 226 160 119 90 53 35 147 68 5 200 156 136 255 187 104 249 184 108 111 89 88 191 120 84 255 132 8 214 114 4 239 204 187 214 106 4 241 146 80 99 91 79 253 196 141 101 62 48 221 111 4 114 80 64 255 200 146 218 115 4 254 184 102 254 127 3 215 165 133 134 60 4 85 77 68 254 232 217 137 78 56 139 65 5 220 102 2 172 104 77 253 205 143 255 199 145 219 112 4 231 173 141 252 217 191 223 115 4 247 184 110 250 157 80 254 254 252 91 51 26 254 184 100 254 129 1 219 162 125 216 154 122 253 198 145 246 163 82 247 120 7 249 219 197 174 106 74 254 204 149 243 174 115 75 37 16 255 190 110 255 132 1 255 201 146 145 68 5 254 128 3 251 120 0 133 59 3 240 110 9 215 106 4 119 58 22 254 136 9 222 113 4 190 118 68 136 62 5 133 58 2 127 70 39 254 202 147 78 38 4 201 153 138 254 200 147 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 26; height: 26; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@^@@@@O0@O???@C???0@???<@O???@C???0@???<@O???@C???0@???<@O???@C???0@???<@O???@C???0@???<@O???@C???0@???<@O???@C??
+?0@???<@O???@@@@@@@b') ; yourself); yourself]
+!
+
+uiPainter32x32Icon3
+    "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 uiPainter32x32Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#uiPainter32x32Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class uiPainter32x32Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)ZV%)R@?EPY%C!!QKGW5ZM050RL[C1H8+KQL?Q7<>YE@6W''UIE#@EW[*L9JN&-HAVVTIUSTY2U4@!!B6L8UA3)&,?M2HLYLW ^
+[#I''V6@QS''1_C4*55Y7P-("&SA PC@0LC@0LC@0LC@0L7Y''""<*GC@09V@0JB (JB (JB 0LB)^_9;"[0P(LT"XLB 0LC@0LC@$LCK6R.\.O:@0ICC,''C@(L
+C@0LC@0IC@234YV;9) LBP1:[@0JC@0LC@0LBP3X''-K@5<3TC@$LOF4LBP$IBP$IBP$L%K:I(,_EBP$ICBP(C@0LC@0LC@0L([B?7(*+C@0LC@1*[00IBP$I
+BP$IB]3[+XZ$80$IBP$LOWDLBPLC@0LC@:*Q%-?  *8C@0HACBT*C@$C@0LC@0ON*[F/-=(C@0LB@P0%_ 0I@0LC@0LC2Y2M!!NGY@ LC@ DLIWLLBPHB@ HB
+@*V#$IN''@ HB@ HACBUCC@$A@PDA@PF((>WV@PDA@PDA@P0%K@0LC@0LC@0L+HWBC@0LC@0LC@0LIR0LC@0LC@0LCKJ C@0LC@0LC@0LCBT,C@0LC@0LC@2<
+C@0LC@0LC@0LC@0%Y''P4MWXGBEESB@!!SH&$%IRT%IRT%Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[160 160 160 247 246 249 225 225 234 245 244 247 21 91 255 48 118 255 71 155 231 75 126 202 72 122 199 116 116 120 237 236 242 72 141 255 212 211 224 32 101 209 63 143 226 153 188 255 106 175 235 170 204 255 7 66 194 0 50 164 58 137 224 75 160 234 66 135 255 140 175 255 29 72 179 3 67 246 19 88 255 18 83 201 36 106 255 50 125 219 191 225 255 58 99 184 57 149 229 80 149 255 55 95 181 125 160 253 52 89 178 50 87 176 105 172 233 104 170 232 101 166 229 10 71 196 98 162 226 5 63 191 94 154 222 2 56 178 3 73 255 30 100 255 57 127 255 1 50 177 185 219 255 130 165 254 84 140 212 81 136 209 101 170 255 36 107 211 54 123 255 56 94 181 126 161 253 55 92 180 53 90 178 51 88 176 125 193 255 68 157 232 88 157 255 135 170 255 132 200 255 96 157 223 12 59 167 4 74 255 112 180 255 139 207 255 23 89 204 75 144 255 149 184 255 54 131 221 122 154 245 119 187 255 166 200 255 28 97 255 109 178 255 69 117 196 56 93 180 66 113 193 45 115 255 126 194 255 0 50 171 96 165 255 105 174 234 77 163 236 41 113 214 177 212 255 12 82 255 39 109 255 93 161 255 157 192 255 174 208 255 64 108 190 61 104 187 63 132 255 117 186 255 67 149 229 53 127 212 181 215 255 255 255 255 52 90 178 51 88 177 144 179 255 103 169 231 102 167 230 188 222 255 100 165 228 27 95 206 99 163 227 104 173 255 97 159 225 87 145 215 84 153 255 78 131 206 10 79 255 91 168 235 127 162 254 54 91 179 14 77 199 162 196 255 45 119 216 98 160 225 132 201 255 3 64 241 204 208 220 222 120 43 183 59 8 254 203 97 163 140 130 254 191 54 210 109 64 228 90 9 254 187 34 254 165 54 254 158 1 250 206 0 254 212 90 155 31 0 254 128 21 254 225 166 253 222 69 254 226 7 248 201 137 247 181 30 254 177 17 254 216 73 248 194 1 192 147 138 254 223 0 254 219 0 242 102 12 254 226 119 254 191 0 254 231 26 254 203 3 169 113 95 249 210 160 254 176 36 254 231 201 254 165 69 241 195 142 234 184 145 186 100 65 226 180 137 254 239 98 245 209 172 220 114 42 161 124 106 254 197 55 222 209 212 254 203 78 253 226 47 254 209 81 160 115 98 247 183 8 166 46 5 241 212 187 254 136 5 254 184 94 254 144 8 254 178 11 215 172 138 254 159 21 213 175 169 242 177 95 254 220 37 254 207 47 254 181 24 145 109 112 193 129 103 223 153 96 195 100 52 193 132 116 223 137 33 254 147 47 254 141 47 245 202 137 254 116 14 254 171 10 207 90 27 254 161 10 248 203 113 254 162 0 254 158 0 254 213 16 254 194 26 255 255 255 213 217 227 248 198 0 182 93 58 254 147 36 247 198 128 205 177 176 210 140 105 254 231 65 249 193 57 240 178 78 254 191 42 254 201 65 254 184 75 228 142 66 254 167 2 195 120 93 254 214 81 248 214 181 248 122 26 254 167 5 197 82 32 232 174 56]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C????????????????????????????????????????????????????????????????????????????????????') ; yourself); yourself]
+!
+
+warn32x32Icon
+    "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 warn32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#warn32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:#'XPToolbarIconLibrary class warn32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@I.[&9.[&9.[&9.[&9-ZLFUG&9.[&9.[&9.[
+&9.[&9.[&9.[&9.[&9.[&9.[&3A0#FUF&9.[&9.[&9.[&9.[&9.[&9.[&9.[&9.[&9.AGQ]V^R, &9.[&9.[&9.[&9.[&9.[&9.[&9.[&9.[&6UJIA *]11Z
+&9.[&9.[&9.[&9.[&9.[&9.[&9.[&9-CP1^Q_Q 8J4Z[&9.[&9.[&9.[&9.[&9.[&9.[&9.[V&TWIIE$_Q"M"9V[&9.[&9.[&9.[&9.[&9.[&9.[&9,I\A\M
+U)E$F@P%TY.[&9.[&9.[&9.[&9.[&9.[&9.[ P(W\V5V$S9=J!!DEHI.[&9.[&9.[&9.[&9.[&9.[&9-%W!!]1%W83$$,X&RT\&9.[&9.[&9.[&9.[&9.[&9.[
+P14WE2RU$)JRE1"Y!!QI)&9.[&9.[&9.[&9.[&9.[&5(+#A\$ICRR^G WJ)$7T#>U&9.[&9.[&9.[&9.[&9.[BRDW[V4MC''!!*U7D*&S^ZKEF[&9.[&9.[&9.[
+&9.[&7ADIF5VU%X1Z!!9W\Y$7%%6BFRB[&9.[&9.[&9.[&9.[A --$YFQ$YL^_3L$&S^Z[%.FGI.[&9.[&9.[&9.[&4M%CYE=#&RN_W=+RF47&%5.[''I_ZY.[
+&9.[&9.[&9-ZJ5"QFA XFA X_7)HCYY][&9]%$09%Y.[&9.[&9.[&4T&$R*YAB(*J Q&D785WV9.WY(7@H\2&9.[&9.[&9,4J6RNM3\7&Y&YM5M@H =.[%6Z
+M9$D\6BU&9.[&9.[&0X_YIY]&)*V%)ZZSY\:CF9]WYX7&R(XI12[&9.[&9.TJ88T[&9]WU5]WU4A"F9.WY*VM9$*FG4&]HN[&9.[[0T-#))][&9.[&9.WFDZ
+S)&ZM3^YJ!!!!=YIDRNU*[&9-EA88*%))]WU5]WU4;F" U@)&YAB(X_VRQU(BOL).[%QI=_Y&YM3^V%)*Z&(%5EW,WJ"(XFG5$$UXM[PY"%Y,FI(8XJ"*Y&Y$7
+M3\7&QEI#EX*FG6NYIEVCV4$M$=''&21=_Q XF@PDA@QT@@@<OC2EPTEAK"8[F61YB@"PJRLV_BU(ZGM3\5UUIRT;SD1L@8*JJR%6]$I6]''Y6]!!BXX2B["2L#
+H2L#!!HQPTEA#X6M#X6M#X6M#X6M#X6M#X34/&9.[HHNC 8NC 8NC 8NC 8NC 8NC 8NC 8NC 8NCHI.[@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[224 192 64 255 191 31 223 223 223 160 96 32 255 223 95 159 127 95 160 128 96 191 160 95 224 191 96 191 160 127 191 159 127 224 223 160 255 223 127 255 255 191 224 224 191 255 224 159 128 95 32 223 191 64 159 127 64 64 95 128 255 224 64 32 32 96 223 192 192 255 255 255 255 224 96 128 96 95 63 63 127 223 160 64 159 128 127 192 160 128 95 96 160 223 192 127 192 192 191 223 191 160 159 159 191 96 95 64 255 255 223 160 128 64 192 191 96 128 96 63 32 63 127 159 95 32 255 224 95 160 128 95 159 96 64 224 223 127 223 160 63 127 127 127 192 160 127 224 224 160 160 160 159 127 128 191 223 223 191 255 224 160 224 223 191 255 223 63 224 223 95 128 127 96 223 223 224 160 128 63 224 191 64 95 64 64 224 224 128 159 127 96 64 64 128 224 160 63 159 64 31 192 191 159 191 128 96 191 160 128 191 160 159 223 191 159 128 128 191 191 160 160 224 224 223 255 224 192 160 127 63 192 160 63 96 95 95 127 64 32 96 64 63 160 159 128 191 128 63 96 96 127 255 192 64 191 128 64 255 255 160 127 127 160 224 224 159 224 160 95 224 223 192 255 191 0 224 191 31 255 192 31 224 223 223 128 96 64 127 96 64 64 64 96 127 95 64 95 64 63 255 255 128 191 159 96 96 96 128 159 159 128 191 159 95 191 191 160 96 96 160 95 95 159 223 160 95 255 255 192 255 192 0 224 224 192 223 192 191 255 255 224 223 160 32 191 159 64 127 95 63 63 63 96 159 95 31 192 159 95 96 127 160 224 192 95 64 95 159 64 64 127 160 159 127 255 224 127 128 159 191 95 96 159 224 223 159 223 192 160 192 159 32 192 191 191 96 95 63 224 191 63 159 127 63 128 95 63 223 160 31 223 191 63 159 96 32 159 128 96 255 224 224 192 160 95 255 255 127 127 64 63 223 159 63 255 255 159 96 127 191 255 224 128 192 191 160 223 223 192 255 223 32 191 191 191 96 63 32 255 223 64 255 192 32 0 0 0]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@A8@@@@_@@@@O8@@@C?@@@A?0@@@?>@@@O? @@G?<@@A??@@@??8@@_??@@G??0@C??>@@??? @_??<@O??? C???8A????@_???0O???>G??
+??1????<?????/????;??????????7????8????<@@@@@@@@@@@b') ; yourself); yourself]
+!
+
+workspace32x32Icon
+    "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 workspace32x32Icon inspect
+     ImageEditor openOnClass:self andSelector:#workspace32x32Icon
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class workspace32x32Icon'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\11VAA(@[0@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@\D@< "1()[0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FT\@@@ "1)8[0@@@@@@@@@@@@@@@@@@@@@@@@@@\11VAA(@K''%&
+VG%9[0@@@@@@@@@@@@@@@@@@@@@@@@@\D@< "18?K$1[^W%9[0@@@@@@@@@@@@@@@@@@@@@@@FT\\4%6P!!8?XTE9"W%9[0@@@@@@@@@@@@@@@@@@\11VAA*W
+K''$RXC:U@G%9"W%9[0@@@@@@@@@@@@@@@@@\D@< "18?K$1^_"(&^W%9T7%9[0@@@@@@@@@@@@@@@FT\\4%6P!!8?XTE8M''!!8^EM8"RY:[0@@@@@@@@@@\11V
+AA*WK''$RXH6U@G]8T7!!S^G\#AW $[0@@@@@@@@@\D@< "18?K$1^_''99]7!!8T7!!7H2M8N"P([0@@@@@@@FT\\4%6P!!8?XTE8T7]7]5M8"BL#^C($W70)@@@@
+\11VAA*WK''$RXH6U@G!!8"G^H]7\#AW :IG%9X78@@@@\D@< "18?K$1^_''99^G!!7"G]7H2M8N"Q9^RY>% @@@FT\ED%6P!!8?XTE8T7!!8^H!!7"BL#^C($W7$&
+I)I:@@@\G@BWK''$RXH6U@G!!7"G^H]7\#AW :IG%9B7)EI7,@@@]4@C<?K$1^_''99^G]7"G]7H2M8N''$AR4-\WF1,[@@@EDX#K#<?XTE8T7!!8]8!!7"BL#IEER
+T#MTVPY=_W5=@@@Q@BD#K(6U@G!!8T7"H]7]8TUIRL4)HGT "]YL,H&4@@@@@YG%9_''99^G!!8T7]U\WD1R 8NJ543L0$UEQTUEP@@@@A$YG!!9T7!!8]5M7E!!XV
+M82DQHRD!!I@/EQTUEQTU@@@@@F!!$YG%9T7!!S]7\$@!!XJP4A)@34;F2=WEQTUEQT@@@@@[6!!$YG%8T7!!7H7%?&@EPE *EIP5M!!(JB (JB  @@@@@@[6!!$YG!!8
+T2L#^S:CTS>T@U@VB(VEB@0LC@0L@@@@@@@@[6!!$YG$&NRZKI240Z#)[$PEN\V1,[F1,[F0@@@@@@@@@[6!!$YG(''V"P&I7:AS3P8OIFXYT9NS$9NG0@@@@@@
+@@@@[6!!$YG-;W7$&^$\)D282"''BN\(>O#7H?@@@@@@@@@@@@[6!!$YB!!<X"ZR^'',(Y25+ 3RG[#TYMX\@@@@@@@@@@@@@FF!!$YB$&$''(''I7-;Y2$*KR4-E8B@
+KP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 167 167 167 157 157 157 146 82 44 155 155 155 208 208 207 234 154 84 147 147 147 138 66 36 234 130 84 70 70 68 190 190 189 146 66 4 86 70 44 250 198 172 131 131 131 129 129 129 127 127 127 123 123 123 174 174 173 119 119 119 254 130 4 46 46 44 166 166 165 107 107 107 154 154 153 99 99 99 186 94 36 83 83 83 250 218 204 77 77 77 126 126 125 71 71 71 248 248 248 254 202 188 246 246 246 244 244 244 82 70 52 242 242 242 240 240 240 238 238 238 236 236 236 234 234 234 250 194 164 254 206 148 232 232 232 226 226 226 230 106 52 222 222 222 246 182 140 218 218 218 246 178 140 216 216 216 214 214 214 212 212 212 134 106 76 208 208 208 206 206 206 202 202 202 150 94 52 198 198 198 150 86 52 194 194 194 192 192 192 118 82 60 11 11 11 186 186 186 98 82 60 214 142 108 184 184 184 5 5 5 182 182 182 250 214 196 3 3 3 250 210 196 122 66 44 176 176 176 102 66 44 174 174 174 170 170 170 90 86 12 166 166 166 186 114 100 213 213 212 250 190 156 158 158 158 156 156 156 242 110 36 152 152 152 246 198 132 203 203 202 148 148 148 102 34 4 246 186 132 146 146 146 197 197 196 140 140 140 138 138 138 191 191 190 187 187 186 132 132 132 126 126 126 124 124 124 171 171 170 116 116 116 130 74 44 167 167 166 163 163 162 2 2 4 254 222 172 155 155 154 100 100 100 143 143 142 84 84 84 137 137 136 255 255 255 74 74 74 254 174 132 70 70 70 247 247 247 245 245 245 243 243 243 241 241 241 239 239 239 237 237 237 254 170 92 235 235 235 233 233 233 231 231 231 229 229 229 178 82 4 221 221 221 210 138 108 94 74 60 122 82 28 215 215 215 213 213 213 211 211 211 209 209 209 201 201 201 186 126 84 195 195 195 193 193 193 191 191 191 210 106 68 187 187 187 185 185 185 254 190 124 183 183 183 4 4 4 181 181 181 2 2 2 179 179 179]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@> @@@O<@@@C? @@G?<@@A?? @@_?<@@??? @O??<@C??? G???<A???? _???8????>O????#????9????>_????''????9_???>G????!!??
+??8_???>G???? ????8G???>@???? G???8@???>@G??? @@@@@b') ; yourself); yourself]
+!
+
+workspace32x32Icon2
+    "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 workspace32x32Icon2 inspect
+     ImageEditor openOnClass:self andSelector:#workspace32x32Icon2
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class workspace32x32Icon2'
+	ifAbsentPut:[(Depth8Image new) width: 32; height: 32; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\11VAA(@[0@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@\D@< "1()[0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FT\@@@ "1)8[0@@@@@@@@@@@@@@@@@@@@@@@@@@\11VAA(@K''%&
+VG%9[0@@@@@@@@@@@@@@@@@@@@@@@@@\D@< "18?K$1[^W%9[0@@@@@@@@@@@@@@@@@@@@@@@FT\\4%6P!!8?XTE9"W%9[0@@@@@@@@@@@@@@@@@@\11VAA*W
+K''$RXC:U@G%9"W%9[0@@@@@@@@@@@@@@@@@\D@< "18?K$1^_"(&^W%9T7%9[0@@@@@@@@@@@@@@@FT\\4%6P!!8?XTE8M''!!8^EM8"RY:[0@@@@@@@@@@\11V
+AA*WK''$RXH6U@G]8T7!!S&W\#AW $[0@@@@@@@@@\D@< "18?K$1^_''99]7!!8T9&Z&"M8N"P([0@@@@@@@FT\\4%6P!!8?XTE8T7]7]5NY"I*Z&S($W70)@@@@
+\11VAA*WK''$RXH6U@G!!8"G^H&Y*YAY&Z&W%9X78@@@@\D@< "18?K$1^_''99^G!!7"I&Y&Y&YN)&Z&RY>% @@@FT\ED%6P!!8?XTE8T7!!8^H"Y"I&Y&Y*YW9$&
+I)I:@@@\G@BWK''$RXH6U@G!!7"G^H&Y&Y&Y$:&Y*YB7)EI7,@@@]4@C<?K$1^_''99^G]7"I&Y&Y*ZN)$AR4-\WF1,[@@@EDX#K#<?XTE8T7!!8]8"Y"I&Z&UER
+T#MTVPY=_W5=@@@Q@BD#K(6U@G!!8T7"H&Y*YTUIRL4)HGT "]YL,H&4@@@@@YG%9_''99^G!!8T9%U\WD1R 8NJ543L0$UEQTUEP@@@@A$YG!!9T7!!8]5NZE!!XV
+M82DQHRD!!I@/EQTUEQTU@@@@@F!!$YG%9T7!!S&Y&Z@!!XJP4A)@34;F2=WEQTUEQT@@@@@[6!!$YG%8T7!!7&Y&Z& EPE *EIP5M!!(JB (JB  @@@@@@[6!!$YG!!8
+T2L#&#:Y&)*T@U@VB(VEB@0LC@0L@@@@@@@@[6!!$YG$&NRZZ&)&ZZ#)[$PEN\V1,[F1,[F0@@@@@@@@@[6!!$YG(''V"RZ&)&AS3P8OIFXYT9NS$9NG0@@@@@@
+@@@@[6!!$YG-;W7$&^$\)D282"''BN\(>O#7H?@@@@@@@@@@@@[6!!$YB!!<X"ZR^'',(Y25+ 3RG[#TYMX\@@@@@@@@@@@@@FF!!$YB$&$''(''I7-;Y2$*KR4-E8B@
+KP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 167 167 167 157 157 157 146 82 44 155 155 155 208 208 207 234 154 84 147 147 147 138 66 36 234 130 84 70 70 68 190 190 189 146 66 4 86 70 44 250 198 172 131 131 131 129 129 129 127 127 127 123 123 123 174 174 173 119 119 119 254 130 4 46 46 44 166 166 165 107 107 107 154 154 153 99 99 99 186 94 36 83 83 83 250 218 204 77 77 77 126 126 125 71 71 71 248 248 248 254 202 188 246 246 246 244 244 244 82 70 52 242 242 242 240 240 240 238 238 238 236 236 236 234 234 234 250 194 164 254 206 148 232 232 232 226 226 226 230 106 52 222 222 222 246 182 140 218 218 218 246 178 140 216 216 216 214 214 214 212 212 212 134 106 76 208 208 208 206 206 206 202 202 202 150 94 52 198 198 198 150 86 52 194 194 194 192 192 192 118 82 60 11 11 11 186 186 186 98 82 60 214 142 108 184 184 184 5 5 5 182 182 182 250 214 196 3 3 3 250 210 196 122 66 44 176 176 176 102 66 44 174 174 174 170 170 170 90 86 12 166 166 166 186 114 100 213 213 212 250 190 156 158 158 158 156 156 156 242 110 36 152 152 152 246 198 132 203 203 202 148 148 148 102 34 4 246 186 132 146 146 146 197 197 196 140 140 140 138 138 138 191 191 190 187 187 186 132 132 132 126 126 126 124 124 124 171 171 170 116 116 116 130 74 44 167 167 166 163 163 162 2 2 4 254 222 172 155 155 154 100 100 100 143 143 142 84 84 84 137 137 136 255 255 255 74 74 74 254 174 132 70 70 70 247 247 247 245 245 245 243 243 243 241 241 241 239 239 239 237 237 237 254 170 92 235 235 235 233 233 233 231 231 231 229 229 229 178 82 4 221 221 221 210 138 108 94 74 60 122 82 28 215 215 215 213 213 213 211 211 211 209 209 209 201 201 201 186 126 84 195 195 195 193 193 193 191 191 191 210 106 68 187 187 187 185 185 185 254 190 124 183 183 183 4 4 4 181 181 181 2 2 2 179 179 179 104 216 0 0 144 0]; mask:((Depth1Image new) width: 32; height: 32; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@> @@@O<@@@C? @@G?<@@A?? @@_?<@@??? @O??<@C??? G???<A???? _???8????>O????#????9????>_????''????9_???>G????!!??
+??8_???>G???? ????8G???>@???? G???8@???>@G??? @@@@@b') ; yourself); yourself]
+!
+
+workspace32x32Icon3
+    "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 workspace32x32Icon3 inspect
+     ImageEditor openOnClass:self andSelector:#workspace32x32Icon3
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+	constantNamed:'XPToolbarIconLibrary class workspace32x32Icon3'
+	ifAbsentPut:[(Depth8Image new) width: 30; height: 28; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A)/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F''!!8[0@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@Z^G!!8^F<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A(.^G!!8T7%/@@@@@@@@@@@@@@@@@@@@@@@@@@@@F''!!8"W!!S^G%9[0@@@@@@@@@@
+@@@@@@@@@@@@@@@Z^G!!8^H$*I''%9^V<@@@@@@@@@@@@@@@@@@@@@@A(.^G!!8T7 6^G!!8T7!!/@@@@@@@@@@@@@@@@@@@@F''!!8"W!!S^G]8T7!!S&W\#[0@@@@@@
+@@@@@@@@@@@^^G!!8^H%>^W]8^ENY&)(#^F<@@@@@@@@@@@@@@A8.^G!!8T7"I]7]7T9&H&)*YN"Q/@@@@@@@@@@@@G''!!8"W!!S^G!!8"G^H&Y*YAY&Z&W%9[0@@
+@@@@@@@^^G!!8^H%>^W!!8]8"Y&Y&Y&S*Y&)$&_&<@@@@@@GX.^G!!8T7!!S^G!!8"I&H&Y&Y&)%_&RX&$''(@@@@@G''!!8"W!!S^G!!7"G^H&Y&Y&Y$:&Y*YB7)EI7,@
+@@@^^G!!8^H%8^W!!7]8"Y&Y&Z&#*Y@T-KWE1,[F0@@A9$^G!!8T7!!S^G!!7"I&H&Y*YTUIRL5QYA''5=_W4@@A9$YG!!S^G!!8T7"H&Y*YTUIRL4)HGT "]YL,H&4@
+@F=(YFQ>^W!!8^ENYUWE1LT(NC"-]L3LIEQTUEQT@@@A/ZFQ$^G!!7T9(VE!!X7#HQD!!HRD$B<UEQTUEQT@@@@@[6!!$YG!!S&Y&Z@!!XJP4A)@34;F2=WEQTUEQT@
+@@@@@F=(YFQ8]9&Y&)(ATAXJ!!RTMSXZB (JB (H@@@@@@@A/ZFQ$H2NZO)&Z&)PATAXJ!!XTHC@0LC@0@@@@@@@@@[6!!$YBZZ&)&ZZ#)[$PEN\V1,[F1,[F0@
+@@@@@@@@@F=(YFP$&)*Y T<4NC2Q&FUNS$9NS!!<@@@@@@@@@@@A/ZFQ$^RY:Q2$SK#JJ\H92#8>O\#<@@@@@@@@@@@@@[6!!$YBZR^'',(Y25+ 3RG[#TYMX\@
+@@@@@@@@@@@@@F=(YFQ:I2];^6\)J"4-KQ^@ B4@') ; colorMapFromArray:#[0 0 0 167 167 167 157 157 157 146 82 44 155 155 155 208 208 207 234 154 84 147 147 147 138 66 36 234 130 84 70 70 68 190 190 189 146 66 4 86 70 44 250 198 172 131 131 131 129 129 129 127 127 127 123 123 123 174 174 173 119 119 119 254 130 4 46 46 44 166 166 165 107 107 107 154 154 153 99 99 99 186 94 36 83 83 83 250 218 204 77 77 77 126 126 125 71 71 71 248 248 248 254 202 188 246 246 246 244 244 244 82 70 52 242 242 242 240 240 240 238 238 238 236 236 236 234 234 234 250 194 164 254 206 148 232 232 232 226 226 226 230 106 52 222 222 222 246 182 140 218 218 218 246 178 140 216 216 216 214 214 214 212 212 212 134 106 76 208 208 208 206 206 206 202 202 202 150 94 52 198 198 198 150 86 52 194 194 194 192 192 192 118 82 60 11 11 11 186 186 186 98 82 60 214 142 108 184 184 184 5 5 5 182 182 182 250 214 196 3 3 3 250 210 196 122 66 44 176 176 176 102 66 44 174 174 174 170 170 170 90 86 12 166 166 166 186 114 100 213 213 212 250 190 156 158 158 158 156 156 156 242 110 36 152 152 152 246 198 132 203 203 202 148 148 148 102 34 4 246 186 132 146 146 146 197 197 196 140 140 140 138 138 138 191 191 190 187 187 186 132 132 132 126 126 126 124 124 124 171 171 170 116 116 116 130 74 44 167 167 166 163 163 162 2 2 4 254 222 172 155 155 154 100 100 100 143 143 142 84 84 84 137 137 136 255 255 255 74 74 74 254 174 132 70 70 70 247 247 247 245 245 245 243 243 243 241 241 241 239 239 239 237 237 237 254 170 92 235 235 235 233 233 233 231 231 231 229 229 229 178 82 4 221 221 221 210 138 108 94 74 60 122 82 28 215 215 215 213 213 213 211 211 211 209 209 209 201 201 201 186 126 84 195 195 195 193 193 193 191 191 191 210 106 68 187 187 187 185 185 185 254 190 124 183 183 183 4 4 4 181 181 181 2 2 2 179 179 179 104 216 0 0 144 0]; mask:((Depth1Image new) width: 30; height: 28; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@0@@@@^@@@@O0@@@G>@@@C?0@@A?>@@@??0@@_?>@@O??0@G??>@C???0A???>@???? _???8O???>G????!!????8_???>C???? _???8C???>@_?
+?? C???8@_??>@C??? @_??8@C??>@@a') ; yourself); yourself]
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-tools-FileBrowser'!
+
+addBufferIcon
+    <resource: #programImage>
+
+    "/ ^ self tabAdd16x16Icon
+    ^ self addBuffer22x22Icon
+    "/ ^ self addBuffer22x22Icon2
+!
+
+changesBrowserIcon
+    <resource: #programImage>
+
+    ^ self changesBrowser18x22Icon
+!
+
+copyFileIcon
+    <resource: #programImage>
+
+    ^ self copyFile20x22Icon
+!
+
+copyIcon
+    <resource: #programImage>
+
+    ^ self copy20x22Icon
+!
+
+currentDirectoryIcon
+    <resource: #programImage>
+
+    ^ self currentDirectoryIcon26x26Icon
+!
+
+cutFileIcon
+    <resource: #programImage>
+
+    ^ self cutFile22x22Icon
+!
+
+deleteFileIcon
+    <resource: #programImage>
+
+    ^ self deleteFile17x22Icon
+!
+
+diffIcon
+    <resource: #programImage>
+
+    ^ self diff22x22Icon2
+!
+
+directoryBookmarksIcon
+    <resource: #programImage>
+
+    ^ self directoryBookmarks22x22Icon
+!
+
+directoryUpIcon
+    <resource: #programImage>
+
+    ^ self directoryUp22x24Icon2
+!
+
+dosShellTerminalIcon
+    <resource: #programImage>
+
+    ^ self dosShellTerminal22x22Icon
+!
+
+editFileIcon
+    <resource: #programImage>
+
+    ^ self edit17x22Icon
+!
+
+editIcon
+    <resource: #programImage>
+
+    ^ self edit17x22Icon
+!
+
+encodingLockIcon
+    <resource: #programImage>
+
+    ^ self padLockGold15x15Icon
+!
+
+fileContentsIcon
+    <resource: #programImage>
+
+    ^ self fileContents19x22Icon
+!
+
+fileImageContentsIcon
+    <resource: #programImage>
+
+    ^ self fileImageContents19x22Icon
+
+    "Created: / 01-06-2010 / 17:35:07 / cg"
+!
+
+fileInIcon
+    <resource: #programImage>
+
+    ^ self fileIn18x22Icon
+!
+
+fitImageSizeToViewIcon
+    <resource: #programImage>
+
+    ^ self fitImageSizeToView22x22Icon
+!
+
+hexToggleIcon
+    <resource: #programImage>
+
+    ^ self hexToggle19x22Icon
+!
+
+historyBackIcon
+    <resource: #programImage>
+
+    ^ self leftArrow24x24Icon
+!
+
+historyForwardIcon
+    <resource: #programImage>
+
+    ^ self rightArrow24x24Icon
+!
+
+historyForwardInGlobalListIcon
+    <resource: #programImage>
+
+    ^ self right2Arrow24x24Icon
+
+    "Created: / 02-07-2011 / 18:46:28 / cg"
+!
+
+historyIcon
+    <resource: #programImage>
+
+    ^ self history22x22Icon2
+!
+
+homeIcon
+    <resource: #programImage>
+
+    ^ self home26x26Icon
+!
+
+makeIcon
+    <resource: #programImage>
+
+    ^ self make26x26Icon
+    "/ ^ self make22x22Icon
+!
+
+newDirectoryIcon
+    <resource: #programImage>
+
+    ^ self newDirectory22x22Icon2
+!
+
+newFileIcon
+    <resource: #programImage>
+
+    ^ self newFile20x22Icon
+
+    "Created: / 31-03-2011 / 11:02:08 / cg"
+!
+
+pasteFileIcon
+    <resource: #programImage>
+
+    ^ self pasteFile22x22Icon
+!
+
+printerIcon
+    <resource: #programImage>
+
+    ^ self printer26x26Icon
+!
+
+reloadTextFromFileIcon
+    <resource: #programImage>
+
+    ^ self reload24x24Icon
+!
+
+removeTabEnteredIcon
+    <resource: #programImage>
+
+    ^ self removeTabEntered14x14Icon
+!
+
+removeTabIcon
+    <resource: #programImage>
+
+    ^ self removeTab14x14Icon
+!
+
+searchFileIcon
+    <resource: #programImage>
+
+    ^ self searchFile22x22Icon
+!
+
+searchIcon
+    <resource: #programImage>
+
+    ^ self search26x26Icon
+!
+
+stxHomeIcon
+    <resource: #programImage>
+
+    ^ self stxHome26x26Icon
+!
+
+unixShellTerminalIcon
+    <resource: #programImage>
+
+    ^ self unixShellTerminal22x22Icon
+!
+
+viewDetailsIcon
+    <resource: #programImage>
+
+    ^ self viewDetails22x22Icon
+!
+
+viewNoDetailsIcon
+    <resource: #programImage>
+
+    ^ self viewNoDetails22x22Icon
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-tools-ImageEditor'!
+
+loadImageFromFileIcon
+    <resource: #programImage>
+
+    ^ self loadImageFromFile22x22Icon
+!
+
+loadImageFromMethodIcon
+    <resource: #programImage>
+
+    ^ self loadFromMethod22x22Icon2
+    "/ ^ self loadImageFromMethod22x22Icon
+!
+
+newImageIcon
+    <resource: #programImage>
+
+    ^ self newImage22x22Icon
+!
+
+saveImageAsMethodAsIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethodAs22x22Icon2
+    "/ ^ self saveImageAsMethod22x22Icon
+!
+
+saveImageAsMethodIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethod19x22Icon2
+    "/ ^ self saveImageAsMethod22x22Icon
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-tools-Launcher'!
+
+browseClassExtensionsIcon
+    <resource: #programImage>
+
+    ^ self browseClassExtensions24x24Icon
+!
+
+displayScreenIcon
+    <resource: #programImage>
+
+    ^ self displayScreen22x27Icon
+!
+
+imageEditorIcon
+    <resource:#programImage>
+    ^ self imageEditor22x22Icon3
+
+    "Created: / 31-03-2011 / 11:07:05 / cg"
+!
+
+saveImageIcon
+    <resource: #programImage>
+
+    "/ ^ self saveImage22x22Icon
+    ^ self fileSave19x19Icon
+!
+
+startChangesBrowserIcon
+    <resource: #programImage>
+
+    "/ ^ self changesBrowser22x22Icon
+    ^ self changesBrowser24x24Icon2
+!
+
+startFileBrowserIcon
+    <resource: #programImage>
+
+    ^ self fileBrowser22x22Icon2
+    "/ ^ self fileBrowser26x24Icon
+    "/ ^ self fileBrowser24x24Icon
+    "/ ^ self fileBrowser32x32Icon
+!
+
+startImageEditorIcon
+    <resource: #programImage>
+
+    ^ self imageEditor19x26Icon
+!
+
+startMenuEditorIcon
+    <resource: #programImage>
+
+    ^ self menuEditor19x26Icon
+!
+
+startNewFileBrowserIcon
+    <resource: #programImage>
+
+    ^ self fileBrowser22x22Icon2
+    "/ ^ self fileBrowser26x24Icon
+    "/ ^ self fileBrowser24x24Icon
+    "/ ^ self fileBrowser32x32Icon
+!
+
+startNewSystemBrowserIcon
+    <resource: #programImage>
+
+    ^ self systemBrowser24x24Icon2
+!
+
+startSystemBrowserIcon
+    <resource: #programImage>
+
+    ^ self systemBrowser24x24Icon2
+!
+
+startUIPainterIcon
+    <resource: #programImage>
+
+    ^ self uiPainter19x26Icon
+!
+
+startWorkspaceIcon
+    <resource: #programImage>
+
+    "/ ^ self workspace32x32Icon2
+    "/ ^ self workspace32x32Icon3
+    ^ self workspace24x24Icon2
+!
+
+stxHelpIcon
+    <resource: #programImage>
+
+    ^ self helpIcon2
+    "/ ^ self help32x32Icon
+!
+
+systemBrowserIcon
+    <resource: #programImage>
+
+    ^ self systemBrowser24x24Icon2
+
+    "Created: / 08-08-2011 / 08:26:37 / cg"
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-tools-MenuEditor'!
+
+copyMenuItemIcon
+    <resource: #programImage>
+
+    ^ self copyItem20x22Icon
+!
+
+cutMenuItemIcon
+    <resource: #programImage>
+
+    ^ self cutItem22x22Icon
+!
+
+newMenuIcon
+    <resource: #programImage>
+
+    ^ self newMenu26x26Icon
+!
+
+pasteMenuItemIcon
+    <resource: #programImage>
+
+    ^ self pasteItem22x22Icon
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-tools-UIPainter'!
+
+copyWidgetIcon
+    <resource: #programImage>
+
+    ^ self copyWidget20x22Icon2
+!
+
+cutWidgetIcon
+    <resource: #programImage>
+
+    ^ self cutWidget22x22Icon2
+!
+
+pasteWidgetIcon
+    <resource: #programImage>
+
+    ^ self pasteWidget22x22Icon
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-tools-misc'!
+
+fileOpenIcon
+    <resource: #programImage>
+
+    ^ self fileOpen22x22Icon
+!
+
+loadFromFileIcon
+    <resource: #programImage>
+
+    ^ self loadFromFile22x22Icon
+!
+
+loadFromMethodIcon
+    <resource: #programImage>
+
+    ^ self loadFromMethod22x22Icon2
+    "/ ^ self loadImageFromMethod22x22Icon
+!
+
+newRowIcon
+    <resource: #programImage>
+
+    ^ self newItem22x22Icon
+!
+
+redoIcon
+    <resource: #programImage>
+
+    ^ self redoXP24x24Icon
+!
+
+removeRowIcon
+    <resource: #programImage>
+
+    ^ self cutItem22x22Icon
+!
+
+saveAsMethodAsIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethodAs22x22Icon2
+    "/ ^ self saveImageAsMethod22x22Icon
+!
+
+saveAsMethodIcon
+    <resource: #programImage>
+
+    ^ self saveAsMethod19x22Icon2
+    "/ ^ self saveImageAsMethod22x22Icon
+!
+
+saveTextToFileIcon
+    <resource: #programImage>
+
+    ^ self fileSave19x19Icon
+!
+
+saveToFileAsIcon
+    <resource: #programImage>
+
+    ^ self fileSaveAs22x19Icon
+!
+
+saveToFileIcon
+    <resource: #programImage>
+
+    ^ self fileSave19x19Icon
+!
+
+undoIcon
+    <resource: #programImage>
+
+    ^ self undoXP24x24Icon
+! !
+
+!XPToolbarIconLibrary class methodsFor:'image specs-window icons'!
+
+newFileBrowserIcon
+    <resource: #programImage>
+
+    ^ self fileBrowser22x22Icon
+    "/ ^ self fileBrowser26x24Icon
+    "/ ^ self fileBrowser24x24Icon
+    "/ ^ self fileBrowser32x32Icon
+! !
+
+!XPToolbarIconLibrary class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/XPToolbarIconLibrary.st,v 1.122 2014-04-03 20:51:14 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/XPToolbarIconLibrary.st,v 1.122 2014-04-03 20:51:14 cg Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/YesNoBox.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,331 @@
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+WarningBox subclass:#YesNoBox
+	instanceVariableNames:''
+	classVariableNames:'RequestBitmap'
+	poolDictionaries:''
+	category:'Views-DialogBoxes'
+!
+
+!YesNoBox class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1989 by Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+   Historic note:
+        originally, ST/X had separate classes for the various entry methods;
+        there were YesNoBox, EnterBox, InfoBox and so on.
+        In the meantime, the DialogBox class (and therefore its alias: Dialog)
+        is going to duplicate most funcionality found in these classes.
+
+        In the future, those existing subclasses' functionality is going to
+        be moved fully into Dialog, and the subclasses will be replaced by dummy
+        delegators. (They will be kept for backward compatibility, though).
+
+    New applications should use corresponding confirmation
+    methods from DialogBox.
+
+    this class implements yes-no boxes by adding another (no-) Button to the WarnBox-View.
+    They are created with:
+
+        aBox := YesNoBox title:'some title'.
+        aBox okAction:[ .. some action to be performed when ok is pressed ].
+
+    and finally shown with:
+
+        aBox showAtPointer
+
+    The default box shows 'yes' and 'no' in its buttons; this can be changed with:
+
+        aBox yesText:'some string'.
+        aBox noText:'some string'.
+
+    There is also protocol to set both button titles in one message.
+    Also, the action associated to the noButton can be changed.
+
+    For very simple yes/no queries, you can also use the much simpler confirm:.
+    Since implemented in Object, everyone understands confirm. You can pass
+    a question message (but not change the buttons labels).
+    Use is:
+        self confirm:'some question'  
+    and will return true or false.
+
+    For compatibility with ST-80, use:
+        Dialog confirm:'hello'
+
+    [see also:]
+        DialogBox
+        EnterBox
+
+    [author:]
+        Claus Gittinger
+
+"
+!
+
+examples
+"
+    Notice, the preferred use is via the DialogBox class messages,
+    such as 
+                                                                        [exBegin]
+        Dialog confirm:'Coffee ?'
+        Dialog confirmWithCancel:'Coffee ?'
+                                                                        [exEnd]
+    these (DialogBox) mesages are compatible with VW and should therefore
+    be used for portability.
+
+    Direct reference to YesNoBox is only required for highly specialized boxes.
+
+
+    Examples:
+                                                                        [exBegin]
+        |aBox|
+
+        aBox := YesNoBox title:'Coffee or tee ?'.
+        aBox noText:'tee'.
+        aBox yesText:'coffee'.
+        aBox yesAction:[Transcript showCR:'make coffee'].
+        aBox noAction:[Transcript showCR:'make tee'].
+        aBox showAtPointer.
+                                                                        [exEnd]
+    or, shorter:
+                                                                        [exBegin]
+        |aBox|
+
+        aBox := YesNoBox new.
+        aBox title:'Coffee or Tee ?' 
+             yesAction:[Transcript showCR:'make coffee']
+             noAction:[Transcript showCR:'make tee'].
+        aBox yesText:'Coffee' noText:'Tee'.
+        aBox showAtPointer
+                                                                        [exEnd]
+
+    Also, have a look at the inherited protocol; for example, this allows changing
+    the bitmap (default: a question mark) and other properties.
+
+    If the box is needed to ask for a simple boolean, you can also use the
+    #confirm method, to bring up a box, let it ask for something and return
+    true or false. 
+    Example:
+                                                                        [exBegin]
+        |box value|
+
+        box := YesNoBox new.
+        value := box confirm:'yes or no:'.
+        value ifTrue:[
+            Transcript showCR:'yes'
+        ] ifFalse:[
+            Transcript showCR:'no'
+        ]
+                                                                        [exEnd]
+
+    of course, this can also be written shorter as:
+                                                                        [exBegin]
+        (YesNoBox new confirm:'yes or no:') ifTrue:[
+            Transcript showCR:'yes'
+        ] ifFalse:[
+            Transcript showCR:'no'
+        ]
+                                                                        [exEnd]
+    or:
+                                                                        [exBegin]
+        (Dialog confirm:'yes or no:') ifTrue:[
+            Transcript showCR:'yes'
+        ] ifFalse:[
+            Transcript showCR:'no'
+        ]
+                                                                        [exEnd]
+"
+! !
+
+!YesNoBox class methodsFor:'instance creation'!
+
+title:titleString yesText:yesString noText:noString
+    "return a new YesNoBox with title, and buttonLabels yesString/noString"
+
+    ^ (self new) title:titleString yesText:yesString noText:noString
+
+    "Modified: 11.4.1997 / 21:11:45 / cg"
+! !
+
+!YesNoBox class methodsFor:'icon bitmap'!
+
+iconBitmap
+    "return the bitmap shown as icon in my instances.
+     This is the default image; you can overwrite this in a concrete
+     instance with the #image: message."
+
+    <resource: #style (#'requestBox.icon' #'requestBox.iconFile')>
+
+    RequestBitmap isNil ifTrue:[
+        RequestBitmap := self iconBitmapFromStyle:'requestBox.icon' orStyleFile:'requestBox.iconFile' orFilename:'bitmaps/Request.xbm'.
+    ].
+    ^ RequestBitmap
+
+    "Created: / 17.11.1995 / 18:16:47 / cg"
+    "Modified: / 26.10.1997 / 17:06:19 / cg"
+! !
+
+!YesNoBox class methodsFor:'styles'!
+
+updateStyleCache
+    "extract values from the styleSheet and cache them in class variables.
+     Here, the cached infoBitmap is simply flushed."
+
+    RequestBitmap := nil
+
+    "Modified: 1.4.1997 / 14:51:30 / cg"
+! !
+
+!YesNoBox methodsFor:'initialization'!
+
+initialize
+    super initialize.
+
+    label := resources string:'Choose'.
+
+    buttonPanel horizontalLayout:#fitSpace.  "/ looks better; should it come from the StyleSheet ?
+
+    textLabel label:(resources string:'Please confirm').
+    okButton label:(resources string:'Yes').
+
+    abortButton := Button abortButton.
+
+    "/ changed:
+    "/ now exclusively done by the buttonPanel itself
+
+"/    (Dialog defaultOKButtonAtLeft) ifTrue:[
+"/        buttonPanel addSubView:abortButton after:okButton.
+"/    ] ifFalse:[
+"/        buttonPanel addSubView:abortButton before:okButton.
+"/    ].
+    buttonPanel addSubView:abortButton before:okButton.
+
+    abortButton label:(resources string:'No').
+    abortButton height:(okButton height).
+    abortButton model:self; change:#noPressed
+
+    "Modified: 15.1.1997 / 23:32:21 / cg"
+! !
+
+!YesNoBox methodsFor:'queries'!
+
+beepWhenOpening
+    ^ false
+!
+
+preferredExtent 
+    "compute the boxes preferredExtent from the components' sizes"
+
+    |w h max mm|
+
+    "/ If I have an explicit preferredExtent..
+    explicitExtent notNil ifTrue:[
+        ^ explicitExtent
+    ].
+
+    "/ If I have a cached preferredExtent value..
+    preferredExtent notNil ifTrue:[
+        ^ preferredExtent
+    ].
+
+    mm := ViewSpacing.
+
+    "
+     make the two buttons of equal size
+    "
+    max := okButton preferredWidth max:abortButton preferredWidth.
+    okButton width:max.
+    abortButton width:max.
+
+    w := (formLabel width + textLabel width) max:max * 2.
+    w := w + (3 * mm) + (okButton borderWidth + abortButton borderWidth * 2).
+    w := w max:self maxPreferredWidthOfAddedComponents.
+
+    h := (mm * 5)
+         + ((formLabel height) max:(textLabel height))
+         + ((addedComponents ? #()) inject:0 into:[:sum :thisComponent | sum + thisComponent preferredHeight])
+         + okButton heightIncludingBorder.
+
+    ^ (w @ h).
+
+    "Modified: 19.7.1996 / 20:45:53 / cg"
+! !
+
+!YesNoBox methodsFor:'startup'!
+
+confirm
+    "open the receiver and return true for yes, false for no.
+     This is an easier interface to use, since no action blocks
+     have to be defined. The title is used as previously defined."
+
+    self yesAction:[^ true] noAction:[^ false].
+    self showAtPointer.
+    self yesAction:nil noAction:nil. "/ clear actions for earlier release of context
+
+    "
+     YesNoBox new confirm
+    "
+!
+
+confirm:aString
+    "open a modal yes-no dialog.
+     Return true for yes, false for no.
+     This is an easier interface to use, since no action blocks have to be defined."
+
+    self title:aString.
+    ^ self confirm
+
+    "
+     YesNoBox new confirm:'really ?'
+     YesNoBox confirm:'really ?'
+     self confirm:'really ?'
+
+    for ST-80 compatibility, you should use Dialogs confirm
+    (which simply forwards the request to the YesNoBox anyway):
+
+     Dialog confirm:'really ?'    
+    "
+
+    "Modified: 13.12.1995 / 16:20:01 / cg"
+! !
+
+!YesNoBox methodsFor:'user interaction'!
+
+noPressed
+    "user pressed the no-button;
+     hide myself and evaluate the action"
+
+    abortButton turnOffWithoutRedraw.
+    self hideAndEvaluate:abortAction
+! !
+
+!YesNoBox class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/YesNoBox.st,v 1.58 2008-10-26 20:14:03 stefan Exp $'
+! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/abbrev.stc	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,73 @@
+# automagically generated by the project definition
+# this file is needed for stc to be able to compile modules independently.
+# it provides information about a classes filename, category and especially namespace.
+Label Label stx:libwidg 'Views-Layout' 2
+Button Button stx:libwidg 'Views-Interactors' 2
+ArrowButton ArrowButton stx:libwidg 'Views-Interactors' 2
+ButtonController ButtonController stx:libwidg 'Interface-Support-Controllers' 0
+CheckLabel CheckLabel stx:libwidg 'Views-Layout' 2
+Toggle Toggle stx:libwidg 'Views-Interactors' 2
+ToggleController ToggleController stx:libwidg 'Interface-Support-Controllers' 0
+CheckToggle CheckToggle stx:libwidg 'Views-Interactors' 2
+DialogBox DialogBox stx:libwidg 'Views-DialogBoxes' 2
+ListView ListView stx:libwidg 'Views-Text' 2
+TextView TextView stx:libwidg 'Views-Text' 2
+EditTextView EditTextView stx:libwidg 'Views-Text' 2
+EditField EditField stx:libwidg 'Views-Text' 2
+EnterBox EnterBox stx:libwidg 'Views-DialogBoxes' 2
+EnterBox2 EnterBox2 stx:libwidg 'Views-DialogBoxes' 2
+EnterFieldGroup EnterFieldGroup stx:libwidg 'Interface-Support' 0
+FontPanel FontPanel stx:libwidg 'Views-DialogBoxes' 2
+FramedBox FramedBox stx:libwidg 'Views-Layout' 2
+InfoBox InfoBox stx:libwidg 'Views-DialogBoxes' 2
+ListSelectionBox ListSelectionBox stx:libwidg 'Views-DialogBoxes' 2
+FileSelectionBox FileSelectionBox stx:libwidg 'Views-DialogBoxes' 2
+FileSaveBox FileSaveBox stx:libwidg 'Views-DialogBoxes' 2
+ListViewController ListViewController stx:libwidg 'Interface-Support' 0
+ObjectView ObjectView stx:libwidg 'Views-Basic' 2
+OptionBox OptionBox stx:libwidg 'Views-DialogBoxes' 2
+PanelView PanelView stx:libwidg 'Views-Layout' 2
+PopUpList PopUpList stx:libwidg 'Views-Interactors' 2
+PopUpListController PopUpListController stx:libwidg 'Interface-Support-Controllers' 0
+PopUpMenu PopUpMenu stx:libwidg 'Views-Menus' 2
+PullDownMenu PullDownMenu stx:libwidg 'Views-Menus' 2
+RadioButton RadioButton stx:libwidg 'Views-Interactors' 2
+RadioButtonController RadioButtonController stx:libwidg 'Interface-Support-Controllers' 0
+RadioButtonGroup RadioButtonGroup stx:libwidg 'Views-Support' 0
+ScrollBar ScrollBar stx:libwidg 'Views-Interactors' 2
+HorizontalScrollBar HorizontalScrollBar stx:libwidg 'Views-Interactors' 2
+ScrollableView ScrollableView stx:libwidg 'Views-Basic' 2
+HVScrollableView HVScrollableView stx:libwidg 'Views-Basic' 2
+HorizontalPanelView HorizontalPanelView stx:libwidg 'Views-Layout' 2
+Scroller Scroller stx:libwidg 'Views-Interactors' 2
+MiniScroller MiniScroller stx:libwidg 'Views-Interactors' 2
+HorizontalMiniScroller HorizontalMiniScroller stx:libwidg 'Views-Interactors' 2
+HorizontalScroller HorizontalScroller stx:libwidg 'Views-Interactors' 2
+SelectionInList SelectionInList stx:libwidg 'Interface-Support-Models' 0
+MultiSelectionInList MultiSelectionInList stx:libwidg 'Interface-Support-Models' 0
+SelectionInListView SelectionInListView stx:libwidg 'Views-Lists' 2
+FileSelectionList FileSelectionList stx:libwidg 'Views-Lists' 2
+MenuView MenuView stx:libwidg 'Views-Menus' 2
+ClickMenuView ClickMenuView stx:libwidg 'Views-Menus' 2
+SequenceView SequenceView stx:libwidg 'Views-Lists' 2
+TextCollector TextCollector stx:libwidg 'Views-Text' 2
+VariablePanel VariablePanel stx:libwidg 'Views-Layout' 2
+VariablePanelController VariablePanelController stx:libwidg 'Interface-Support-Controllers' 0
+VariableHorizontalPanel VariableHorizontalPanel stx:libwidg 'Views-Layout' 2
+VariableHorizontalPanelController VariableHorizontalPanelController stx:libwidg 'Interface-Support-Controllers' 0
+VariableVerticalPanel VariableVerticalPanel stx:libwidg 'Views-Layout' 2
+VariableVerticalPanelController VariableVerticalPanelController stx:libwidg 'Interface-Support-Controllers' 0
+VerticalPanelView VerticalPanelView stx:libwidg 'Views-Layout' 2
+WarningBox WarningBox stx:libwidg 'Views-DialogBoxes' 2
+Workspace Workspace stx:libwidg 'Interface-Smalltalk' 2
+CodeView CodeView stx:libwidg 'Views-Text' 2
+YesNoBox YesNoBox stx:libwidg 'Views-DialogBoxes' 2
+stx_libwidg stx_libwidg stx:libwidg '* Projects & Packages *' 3
+MultiColumnPanelView MultiColumnPanelView stx:libwidg 'Views-Layout' 2
+GenericToolbarIconLibrary GenericToolbarIconLibrary stx:libwidg 'Interface-Smalltalk' 0
+XPToolbarIconLibrary XPToolbarIconLibrary stx:libwidg 'Interface-Smalltalk' 0
+VistaToolbarIconLibrary VistaToolbarIconLibrary stx:libwidg 'Interface-Smalltalk' 0
+MenuEvent MenuEvent stx:libwidg 'Views-Menus' 0
+Windows8ToolbarIconLibrary Windows8ToolbarIconLibrary stx:libwidg 'Interface-Smalltalk' 0
+EditTextViewCompletionSupport EditTextViewCompletionSupport stx:libwidg 'Views-Text' 0
+WorkspaceCompletionSupport WorkspaceCompletionSupport stx:libwidg 'Interface-Smalltalk' 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bc.mak	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,141 @@
+# $Header: /cvs/stx/stx/libwidg/bc.mak,v 1.57 2013-12-05 09:21:55 stefan Exp $
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: stx_libwidg.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# Notice, that the name bc.mak is historical (from times, when only borland c was supported).
+# This file contains make rules for the win32 platform using either borland-bcc or visual-c.
+# It shares common definitions with the unix-make in Make.spec.
+# The bc.mak supports the following targets:
+#    bmake         - compile all st-files to a classLib (dll)
+#    bmake clean   - clean all temp files
+#    bmake clobber - clean all
+#
+# Historic Note:
+#  this used to contain only rules to make with borland
+#    (called via bmake, by "make.exe -f bc.mak")
+#  this has changed; it is now also possible to build using microsoft visual c
+#    (called via vcmake, by "make.exe -f bc.mak -DUSEVC")
+#
+TOP=..
+INCLUDE_TOP=$(TOP)\..
+
+
+# see stdHeader_bc for LIBWIDG_BASE
+LIB_BASE=$(LIBWIDG_BASE)
+
+
+!INCLUDE $(TOP)\rules\stdHeader_bc
+
+!INCLUDE Make.spec
+
+LIBNAME=libstx_libwidg
+RESFILES=libwidg.$(RES)
+
+
+
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libview
+LOCALDEFINES=
+
+STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
+LOCALLIBS=
+
+OBJS= $(COMMON_OBJS) $(WIN32_OBJS)
+
+ALL::  classLibRule
+
+classLibRule: $(OUTDIR) $(OUTDIR)$(LIBNAME).dll
+
+!INCLUDE $(TOP)\rules\stdRules_bc
+
+# build all mandatory prerequisite packages (containing superclasses) for this package
+prereq:
+	pushd ..\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+
+
+
+
+
+
+clean::
+	del *.$(CSUFFIX)
+
+# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)ButtonController.$(O) ButtonController.$(H): ButtonController.st $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)DialogBox.$(O) DialogBox.$(H): DialogBox.st $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)EditTextViewCompletionSupport.$(O) EditTextViewCompletionSupport.$(H): EditTextViewCompletionSupport.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)EnterFieldGroup.$(O) EnterFieldGroup.$(H): EnterFieldGroup.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)FramedBox.$(O) FramedBox.$(H): FramedBox.st $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GenericToolbarIconLibrary.$(O) GenericToolbarIconLibrary.$(H): GenericToolbarIconLibrary.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Label.$(O) Label.$(H): Label.st $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ListView.$(O) ListView.$(H): ListView.st $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ListViewController.$(O) ListViewController.$(H): ListViewController.st $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)MenuEvent.$(O) MenuEvent.$(H): MenuEvent.st $(INCLUDE_TOP)\stx\libview\WidgetEvent.$(H) $(INCLUDE_TOP)\stx\libview\WindowEvent.$(H) $(INCLUDE_TOP)\stx\libview\Event.$(H) $(INCLUDE_TOP)\stx\libbasic\MessageSend.$(H) $(INCLUDE_TOP)\stx\libbasic\Message.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ObjectView.$(O) ObjectView.$(H): ObjectView.st $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PanelView.$(O) PanelView.$(H): PanelView.st $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PopUpMenu.$(O) PopUpMenu.$(H): PopUpMenu.st $(INCLUDE_TOP)\stx\libview\PopUpView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PullDownMenu.$(O) PullDownMenu.$(H): PullDownMenu.st $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)RadioButtonGroup.$(O) RadioButtonGroup.$(H): RadioButtonGroup.st $(INCLUDE_TOP)\stx\libview2\ValueHolder.$(H) $(INCLUDE_TOP)\stx\libview2\ValueModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ScrollBar.$(O) ScrollBar.$(H): ScrollBar.st $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ScrollableView.$(O) ScrollableView.$(H): ScrollableView.st $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Scroller.$(O) Scroller.$(H): Scroller.st $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SelectionInList.$(O) SelectionInList.$(H): SelectionInList.st $(INCLUDE_TOP)\stx\libview2\ValueHolder.$(H) $(INCLUDE_TOP)\stx\libview2\ValueModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VariablePanel.$(O) VariablePanel.$(H): VariablePanel.st $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VariablePanelController.$(O) VariablePanelController.$(H): VariablePanelController.st $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)stx_libwidg.$(O) stx_libwidg.$(H): stx_libwidg.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Button.$(O) Button.$(H): Button.st $(INCLUDE_TOP)\stx\libwidg\Label.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)CheckLabel.$(O) CheckLabel.$(H): CheckLabel.st $(INCLUDE_TOP)\stx\libwidg\Label.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)EnterBox.$(O) EnterBox.$(H): EnterBox.st $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)FontPanel.$(O) FontPanel.$(H): FontPanel.st $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)HVScrollableView.$(O) HVScrollableView.$(H): HVScrollableView.st $(INCLUDE_TOP)\stx\libwidg\ScrollableView.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalPanelView.$(O) HorizontalPanelView.$(H): HorizontalPanelView.st $(INCLUDE_TOP)\stx\libwidg\PanelView.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalScrollBar.$(O) HorizontalScrollBar.$(H): HorizontalScrollBar.st $(INCLUDE_TOP)\stx\libwidg\ScrollBar.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalScroller.$(O) HorizontalScroller.$(H): HorizontalScroller.st $(INCLUDE_TOP)\stx\libwidg\Scroller.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)InfoBox.$(O) InfoBox.$(H): InfoBox.st $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)MiniScroller.$(O) MiniScroller.$(H): MiniScroller.st $(INCLUDE_TOP)\stx\libwidg\Scroller.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)MultiColumnPanelView.$(O) MultiColumnPanelView.$(H): MultiColumnPanelView.st $(INCLUDE_TOP)\stx\libwidg\PanelView.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)MultiSelectionInList.$(O) MultiSelectionInList.$(H): MultiSelectionInList.st $(INCLUDE_TOP)\stx\libwidg\SelectionInList.$(H) $(INCLUDE_TOP)\stx\libview2\ValueHolder.$(H) $(INCLUDE_TOP)\stx\libview2\ValueModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)OptionBox.$(O) OptionBox.$(H): OptionBox.st $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PopUpListController.$(O) PopUpListController.$(H): PopUpListController.st $(INCLUDE_TOP)\stx\libwidg\ButtonController.$(H) $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SelectionInListView.$(O) SelectionInListView.$(H): SelectionInListView.st $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SequenceView.$(O) SequenceView.$(H): SequenceView.st $(INCLUDE_TOP)\stx\libwidg\ScrollableView.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TextView.$(O) TextView.$(H): TextView.st $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ToggleController.$(O) ToggleController.$(H): ToggleController.st $(INCLUDE_TOP)\stx\libwidg\ButtonController.$(H) $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VariableHorizontalPanel.$(O) VariableHorizontalPanel.$(H): VariableHorizontalPanel.st $(INCLUDE_TOP)\stx\libwidg\VariablePanel.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VariableHorizontalPanelController.$(O) VariableHorizontalPanelController.$(H): VariableHorizontalPanelController.st $(INCLUDE_TOP)\stx\libwidg\VariablePanelController.$(H) $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VariableVerticalPanel.$(O) VariableVerticalPanel.$(H): VariableVerticalPanel.st $(INCLUDE_TOP)\stx\libwidg\VariablePanel.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VariableVerticalPanelController.$(O) VariableVerticalPanelController.$(H): VariableVerticalPanelController.st $(INCLUDE_TOP)\stx\libwidg\VariablePanelController.$(H) $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VerticalPanelView.$(O) VerticalPanelView.$(H): VerticalPanelView.st $(INCLUDE_TOP)\stx\libwidg\PanelView.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)WorkspaceCompletionSupport.$(O) WorkspaceCompletionSupport.$(H): WorkspaceCompletionSupport.st $(INCLUDE_TOP)\stx\libwidg\EditTextViewCompletionSupport.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)XPToolbarIconLibrary.$(O) XPToolbarIconLibrary.$(H): XPToolbarIconLibrary.st $(INCLUDE_TOP)\stx\libwidg\GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ArrowButton.$(O) ArrowButton.$(H): ArrowButton.st $(INCLUDE_TOP)\stx\libwidg\Button.$(H) $(INCLUDE_TOP)\stx\libwidg\Label.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)EditTextView.$(O) EditTextView.$(H): EditTextView.st $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(STCHDR)
+$(OUTDIR)EnterBox2.$(O) EnterBox2.$(H): EnterBox2.st $(INCLUDE_TOP)\stx\libwidg\EnterBox.$(H) $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)FileSelectionList.$(O) FileSelectionList.$(H): FileSelectionList.st $(INCLUDE_TOP)\stx\libwidg\SelectionInListView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)HorizontalMiniScroller.$(O) HorizontalMiniScroller.$(H): HorizontalMiniScroller.st $(INCLUDE_TOP)\stx\libwidg\MiniScroller.$(H) $(INCLUDE_TOP)\stx\libwidg\Scroller.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ListSelectionBox.$(O) ListSelectionBox.$(H): ListSelectionBox.st $(INCLUDE_TOP)\stx\libwidg\EnterBox.$(H) $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)MenuView.$(O) MenuView.$(H): MenuView.st $(INCLUDE_TOP)\stx\libwidg\SelectionInListView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PopUpList.$(O) PopUpList.$(H): PopUpList.st $(INCLUDE_TOP)\stx\libwidg\Button.$(H) $(INCLUDE_TOP)\stx\libwidg\Label.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)RadioButtonController.$(O) RadioButtonController.$(H): RadioButtonController.st $(INCLUDE_TOP)\stx\libwidg\ToggleController.$(H) $(INCLUDE_TOP)\stx\libwidg\ButtonController.$(H) $(INCLUDE_TOP)\stx\libview\Controller.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Toggle.$(O) Toggle.$(H): Toggle.st $(INCLUDE_TOP)\stx\libwidg\Button.$(H) $(INCLUDE_TOP)\stx\libwidg\Label.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)VistaToolbarIconLibrary.$(O) VistaToolbarIconLibrary.$(H): VistaToolbarIconLibrary.st $(INCLUDE_TOP)\stx\libwidg\XPToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libwidg\GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)WarningBox.$(O) WarningBox.$(H): WarningBox.st $(INCLUDE_TOP)\stx\libwidg\InfoBox.$(H) $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)CheckToggle.$(O) CheckToggle.$(H): CheckToggle.st $(INCLUDE_TOP)\stx\libwidg\Toggle.$(H) $(INCLUDE_TOP)\stx\libwidg\Button.$(H) $(INCLUDE_TOP)\stx\libwidg\Label.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ClickMenuView.$(O) ClickMenuView.$(H): ClickMenuView.st $(INCLUDE_TOP)\stx\libwidg\MenuView.$(H) $(INCLUDE_TOP)\stx\libwidg\SelectionInListView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)EditField.$(O) EditField.$(H): EditField.st $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)FileSelectionBox.$(O) FileSelectionBox.$(H): FileSelectionBox.st $(INCLUDE_TOP)\stx\libwidg\ListSelectionBox.$(H) $(INCLUDE_TOP)\stx\libwidg\EnterBox.$(H) $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)RadioButton.$(O) RadioButton.$(H): RadioButton.st $(INCLUDE_TOP)\stx\libwidg\Toggle.$(H) $(INCLUDE_TOP)\stx\libwidg\Button.$(H) $(INCLUDE_TOP)\stx\libwidg\Label.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TextCollector.$(O) TextCollector.$(H): TextCollector.st $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Windows8ToolbarIconLibrary.$(O) Windows8ToolbarIconLibrary.$(H): Windows8ToolbarIconLibrary.st $(INCLUDE_TOP)\stx\libwidg\VistaToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libwidg\XPToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libwidg\GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)YesNoBox.$(O) YesNoBox.$(H): YesNoBox.st $(INCLUDE_TOP)\stx\libwidg\WarningBox.$(H) $(INCLUDE_TOP)\stx\libwidg\InfoBox.$(H) $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)FileSaveBox.$(O) FileSaveBox.$(H): FileSaveBox.st $(INCLUDE_TOP)\stx\libwidg\FileSelectionBox.$(H) $(INCLUDE_TOP)\stx\libwidg\ListSelectionBox.$(H) $(INCLUDE_TOP)\stx\libwidg\EnterBox.$(H) $(INCLUDE_TOP)\stx\libwidg\DialogBox.$(H) $(INCLUDE_TOP)\stx\libview\ModalBox.$(H) $(INCLUDE_TOP)\stx\libview\StandardSystemView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Workspace.$(O) Workspace.$(H): Workspace.st $(INCLUDE_TOP)\stx\libwidg\TextCollector.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)CodeView.$(O) CodeView.$(H): CodeView.st $(INCLUDE_TOP)\stx\libwidg\Workspace.$(H) $(INCLUDE_TOP)\stx\libwidg\TextCollector.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+
+# ENDMAKEDEPEND --- do not remove this line
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOff10.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,13 @@
+#define xbm_width 9
+#define xbm_height 9
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOffNext.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,26 @@
+/* XPM */
+static char *CheckOffNext_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"15 15 4 1",
+/* colors */
+"a c black",
+"b c white",
+"c c #555555",
+"d c #aaaaaa",
+/* pixels */
+"dddddcccccddddd",
+"dddccaaaaaccddd",
+"ddcaadddddddcdd",
+"dcacddddddddddd",
+"dcadddddddddddd",
+"caddddddddddddb",
+"caddddddddddddb",
+"caddddddddddddb",
+"caddddddddddddb",
+"caddddddddddddb",
+"dccddddddddddbd",
+"dcdddddddddddbd",
+"ddcdddddddddbdd",
+"ddddbdddddbbddd",
+"dddddbbbbbddddd",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOn.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define CheckOn_width 16
+#define CheckOn_height 16
+static unsigned char CheckOn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x38,
+   0x00, 0x3c, 0x06, 0x1e, 0x0e, 0x0f, 0x9c, 0x07, 0xf8, 0x03, 0xf0, 0x01,
+   0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOn10.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,13 @@
+#define xbm_width 9
+#define xbm_height 9
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x80, 0x00, 
+0xC0, 0x00, 
+0xE2, 0x00, 
+0x76, 0x00, 
+0x3E, 0x00, 
+0x1C, 0x00, 
+0x08, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOn10_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,21 @@
+/* XPM */
+static char *CheckOn10_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"10 10 4 1",
+/* colors */
+"a c #EFEFEC",
+"b c black",
+"c c #21A121",
+"d c none",
+/* pixels */
+"dddddddddd",
+"dddddddddd",
+"ddddddadcd",
+"dddddddccd",
+"ddcdddcccd",
+"ddccdcccdd",
+"ddcccccddd",
+"dddcccdddd",
+"ddddcddddd",
+"dddddddddd",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOn12.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define CheckOn12_width 12
+#define CheckOn12_height 12
+static unsigned char CheckOn12_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x02, 0x07, 0x84, 0x03,
+   0xcc, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOn14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define CheckOn14_width 14
+#define CheckOn14_height 14
+static unsigned char CheckOn14_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x1c, 0x00, 0x1e,
+   0x0c, 0x0f, 0x9c, 0x07, 0xfc, 0x03, 0xf8, 0x01, 0xf0, 0x00, 0x60, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOn14Dec.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,18 @@
+#define xbm_width 14
+#define xbm_height 14
+static char xbm_bits[] = {
+0x00, 0x10, 
+0x00, 0x18, 
+0x00, 0x0C, 
+0x00, 0x0E, 
+0x04, 0x47, 
+0x8E, 0x03, 
+0xDF, 0x03, 
+0xFE, 0x01, 
+0xFC, 0x01, 
+0xF8, 0x00, 
+0xF0, 0x00, 
+0x60, 0x00, 
+0x40, 0xC0, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOn14Win.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,24 @@
+/* XPM */
+static char *CheckOn14Win_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"13 13 4 1",
+/* colors */
+"a c white",
+"b c black",
+"c c #808080",
+"d c #C0C0C0",
+/* pixels */
+"cccccccccccca",
+"cbbbbbbbbbbda",
+"cbaaaaaaaaada",
+"cbaaaaaaabada",
+"cbaaaaaabbada",
+"cbabaaabbbada",
+"cbabbabbbaada",
+"cbabbbbbaaada",
+"cbaabbbaaaada",
+"cbaaabaaaaada",
+"cbaaaaaaaaada",
+"cddddddddddda",
+"aaaaaaaaaaaaa",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOnColor.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,26 @@
+/* XPM */
+static char *CheckOnColor_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 3 1",
+/* colors */
+". c none",
+"* c black",
+"b c red",
+/* pixels */
+"............bbbb",
+"...........bbbbb",
+"..........bbbb*.",
+".........bbbb*..",
+"........bbbb*...",
+".......bbbb*....",
+".......bbbb*....",
+"bb....bbbb*.....",
+"bbb...bbbb*.....",
+".bbbbbbbb*......",
+"..bbbbbbb*......",
+"...bbbbbb*......",
+"....bbbb*.......",
+"....bbb*........",
+".....bb*........",
+".....bb*........",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/CheckOnNext.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,26 @@
+/* XPM */
+static char *CheckOnNext_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"15 15 4 1",
+/* colors */
+"a c black",
+"b c white",
+"c c #555555",
+"d c #aaaaaa",
+/* pixels */
+"dddddcccccddddd",
+"dddccaaaaaccddd",
+"ddcaadddddcdcdd",
+"dcacddbbbbddddd",
+"dcadbbbbbbbbddd",
+"caddbbbbbbbbddb",
+"cadbbbbbbbbbbdb",
+"cadbbbbbbbbbbdb",
+"cadbbbbbbbbbbdb",
+"cadbbbbbbbbbbdb",
+"dccdbbbbbbbbdbd",
+"dcddbbbbbbbbdbd",
+"ddcdddbbbbddbdd",
+"ddddbdddddbbddd",
+"dddddbbbbbddddd",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn.12.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,16 @@
+#define xbm_width 12
+#define xbm_height 12
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0xF0, 0x00, 
+0xF0, 0x00, 
+0xF0, 0x00, 
+0xFC, 0x03, 
+0xF8, 0x01, 
+0xF0, 0x00, 
+0x60, 0x00, 
+0x00, 0x00, 
+0xFC, 0x03, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ComboDn_width 14
+#define ComboDn_height 14
+static unsigned char ComboDn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01,
+   0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x07,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn.8.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4 @@
+#define ComboDn_8_width 8
+#define ComboDn_8_height 8
+static unsigned char ComboDn_8_bits[] = {
+   0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x7e};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn_active_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,119 @@
+/* XPM */
+static char *ComboDn_active_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 19 93 2",
+/* colors */
+"aa c #759EF1",
+"ab c #7988DB",
+"ac c #6E8EF1",
+"ad c #809FF1",
+"ae c #93ACF2",
+"af c #83A0F0",
+"ag c #A2B2EE",
+"ah c #97ADF2",
+"ai c #B5C9F3",
+"aj c #B4C7EE",
+"ak c #4D6185",
+"al c #B7C6F1",
+"am c #7CA4F0",
+"an c #7B88DA",
+"ao c #83A6F4",
+"ap c #8DAAEF",
+"aq c #899FEF",
+"ar c #869DF0",
+"as c #95ABF4",
+"at c #89A3F3",
+"au c #AABCEF",
+"av c #97A7EE",
+"aw c #B4C2EE",
+"ax c #DBE3F8",
+"ay c #8592D9",
+"az c #7396F2",
+"ba c #98A1DD",
+"bb c #90A7EF",
+"bc c #8096F1",
+"bd c #9BAEEF",
+"be c #8DA3F3",
+"bf c #A8B8F1",
+"bg c #7583DB",
+"bh c #ADBCEF",
+"bi c #B0C5F2",
+"bj c #83A7F0",
+"bk c #919BDA",
+"bl c #809DF1",
+"bm c #87A3F4",
+"bn c #9AAFF1",
+"bo c #7F8ADA",
+"bp c #A3B4F3",
+"bq c #A5B6F1",
+"br c #B3C8F5",
+"bs c #A9BAEE",
+"bt c #D2DEEB",
+"bu c #80A6F1",
+"bv c #828DD9",
+"bw c #7D9DF1",
+"bx c #90B1F2",
+"by c #90A4EF",
+"bz c #97ABEE",
+"ca c #B9C9F3",
+"cb c #7C89DB",
+"cc c #AFBFED",
+"cd c #9BAAEF",
+"ce c #A2B6EE",
+"cf c #6E94F1",
+"cg c #8793DB",
+"ch c #7997F1",
+"ci c #AFB6DB",
+"cj c #94A8EF",
+"ck c #9EB1F2",
+"cl c #BCCCF3",
+"cm c #B9CBF3",
+"cn c #A9BCF2",
+"co c #7381D9",
+"cp c #B1C6F3",
+"cq c white",
+"cr c #759CF1",
+"cs c #7598F1",
+"ct c #A2ACDC",
+"cu c #97AFEE",
+"cv c #BBC2DC",
+"cw c #8D9EEF",
+"cx c #9EAEF2",
+"cy c #A4B7ED",
+"cz c #8DA1EF",
+"da c #B2C8F4",
+"db c #C4D4EC",
+"dc c #D9E3F6",
+"dd c #7786D9",
+"de c #838FDA",
+"df c #8C97DC",
+"dg c #93AFF2",
+"dh c #9BB0EF",
+"di c #9AAAEE",
+"dj c #BACCF4",
+"dk c #A6B6F2",
+"dl c #90A4F2",
+"dm c #B7C9EE",
+"dn c #BECFED",
+"do c #B8C9F2",
+/* pixels */
+"cqcqcqcqcqcqcqcqcqcqcqcqcqcqcqcqcq",
+"cqcvctbabkdfdfcgaydebvbvboanddcicq",
+"cqctaccfcsbwbwblafaqcwcwcwarbccacq",
+"cqbacfcrambububjapbbbbbbcjbyaqdjcq",
+"cqbkazaaambjbjbxdgcucucudibzbyclcq",
+"cqbkazaaambjbjbxdgcucucudibzbyclcq",
+"cqdfchamamaoaobxbnckdhdhdhdhbzclcq",
+"cqcgbwadbmakaeaeaecxcxakbdbdbdclcq",
+"cqdeblbmakakakaeaeasakakakagagdjcq",
+"cqdeblbmbmakakakaeakakakbpagagdjcq",
+"cqbvbeatataeakakakakakahdkdkcycmcq",
+"cqcbbebebebebeakakakbqbqbfbfauaicq",
+"cqabdldlbedldlczakbpckckdkcnccbrcq",
+"cqbgcwczczczczbyavcycycyauajdmdacq",
+"cqbgcwczczczczbyavcycycyauajdmdacq",
+"cqcocwbybzcdcdbdagbsbhbhawdndbcpcq",
+"cqcocwbzdhcecebsauccajajdmdbbtbicq",
+"cqaxaldocacacacadobrbrbrdacpbidccq",
+"cqcqcqcqcqcqcqcqcqcqcqcqcqcqcqcqcq",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn_disabled_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,63 @@
+/* XPM */
+static char *ComboDn_disabled_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 19 37 1",
+/* colors */
+"a c #C6C6C6",
+"b c #DBDBDB",
+"c c #EDEDED",
+"d c #E4E4E4",
+"e c #D6D6D6",
+"f c #E1E1E1",
+"g c #D2D2D2",
+"h c #C8C8C8",
+"i c white",
+"j c #CECECE",
+"k c #C5C5C5",
+"l c #DADADA",
+"m c #CBCBCB",
+"n c #5E5E5E",
+"o c #D5D5D5",
+"p c #BFBFBF",
+"q c #D1D1D1",
+"r c #E9E9E9",
+"s c #DDDDDD",
+"t c #CDCDCD",
+"u c #C4C4C4",
+"v c #D8D8D8",
+"w c #CACACA",
+"x c #C1C1C1",
+"y c #D4D4D4",
+"z c #DFDFDF",
+"A c #D0D0D0",
+"B c #C7C7C7",
+"C c #DCDCDC",
+"D c #CCCCCC",
+"E c #C3C3C3",
+"F c #D7D7D7",
+"G c #E2E2E2",
+"H c #D3D3D3",
+"I c #C9C9C9",
+"J c #DEDEDE",
+"K c #CFCFCF",
+/* pixels */
+"iiiiiiiiiiiiiiiii",
+"icJFgjjtwIhhBkEdi",
+"iJrdzJJClveeygthi",
+"iFdGsllvFygggKtwi",
+"igzJlFFFyKtttttmi",
+"igzJlFFFyKtttttmi",
+"ijCbvooootDDmDDmi",
+"itllFnFFtmmnmmmmi",
+"iIFFnnnqqmnnnmmwi",
+"iIFFFnnnqnnnmmmwi",
+"ihoooqnnnnnmmmwIi",
+"iayyyyynnnAAmmwBi",
+"ikgyyyyHnAwwwwBai",
+"ixKggHHHHAjjDhBki",
+"ixKggHHHHAjjDhBki",
+"ixDKqKKKAjttwhkui",
+"ipIDttttDwIIBkuEi",
+"iGkhhhhhhaaakuEfi",
+"iiiiiiiiiiiiiiiii",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn_entered_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,38 @@
+/* XPM */
+static char *ComboDn_entered_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 19 12 1",
+/* colors */
+"a c #DAE6FE",
+"b c #E6EEFC",
+"c c white",
+"d c #D9E3F6",
+"e c #C5D5FC",
+"f c #DCE6F9",
+"g c #CAD8FD",
+"h c #D4E1FC",
+"i c #4D6185",
+"j c #D8E3FC",
+"k c #E1EAFE",
+"l c #DBE3F8",
+/* pixels */
+"ccccccccccccccccc",
+"cbbbkffffflljkkfc",
+"cbbbbbbbbkkkkkffc",
+"cbbbbbbkkkkkkkffc",
+"ckbbbkkkkkaaaaffc",
+"ckbbbkkkkkaaaaffc",
+"cfbbkkkkkaaaaaafc",
+"cfbbkiakaaaikkkkc",
+"cfkkiiiaaaiiikkkc",
+"cfkkgiiiaiiikaafc",
+"clkkkkiiiiikkaafc",
+"cjkkkkeiiikkaaalc",
+"cjkkkkkkikaaaajjc",
+"chkkkkkkkkaaaajjc",
+"chkkkkkkkkaaaajjc",
+"chakkkkkkaaaaajjc",
+"chaaffffaaaajjjlc",
+"clllffffljjjjjjdc",
+"ccccccccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ComboDn_win_width 14
+#define ComboDn_win_height 14
+static unsigned char ComboDn_win_bits[] = {
+   0x00, 0x00, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01,
+   0xfc, 0x0f, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x00,
+   0xfc, 0x0f, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ComboDn_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,104 @@
+/* XPM */
+static char *ComboDn_xp_xbm_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 19 78 1",
+/* colors */
+"a c #B2C8F4",
+"b c #B9CFFB",
+"c c #B7C6F1",
+"d c #B3D1FC",
+"e c #BCCCF3",
+"f c #BACCF4",
+"g c #C5D6FC",
+"h c #D0DDFC",
+"i c #DCE6F9",
+"j c #E6EEFC",
+"k c #AFCBFA",
+"l c #B9CEFB",
+"m c #DBE3F8",
+"n c #B5C9F3",
+"o c #B6CEFB",
+"p c #B9CDFB",
+"q c #CAD8F9",
+"r c #D4E1FC",
+"s c #D1E0FD",
+"t c #BFD0F8",
+"u c #B7D3FC",
+"v c white",
+"w c #B0C5F2",
+"x c #B2CFFB",
+"y c #B4C8F6",
+"z c #B7CAF5",
+"A c #BED0FC",
+"B c #CDDBFC",
+"C c #D8E3FC",
+"D c #C8D5FB",
+"E c #C2D5FC",
+"F c #B7CBF9",
+"G c #AEC8F7",
+"H c #AFC5F4",
+"I c #B5CDFA",
+"J c #BDCEF7",
+"K c #BBCEFD",
+"L c #CAD9FD",
+"M c #DAE6FE",
+"N c #CEDDFD",
+"O c #ADC3F6",
+"P c #ABC1F4",
+"Q c #ADC9F9",
+"R c #B9CBF3",
+"S c #B8CBF6",
+"T c #BACDFC",
+"U c #C8D6FB",
+"V c #4D6185",
+"W c #C2D3FC",
+"X c #B3C8F5",
+"Y c #B1C6F3",
+"Z c #AFCDFB",
+"0 c #B3C7F5",
+"1 c #BDD3FB",
+"2 c #C1D3FB",
+"3 c #C9D8FC",
+"4 c #CEDBFD",
+"5 c #C8D8FB",
+"6 c #BAD4FC",
+"7 c #B6D1FB",
+"8 c #D9E3F6",
+"9 c #B1CBFA",
+". c #B9C9F3",
+", c #B5C8F7",
+"` c #BCCEFA",
+"^ c #CAD8FD",
+"* c #B7CDFC",
+": c #C3D5FD",
+"; c #C1D2FB",
+"< c #B2CDFB",
+"> c #B8C9F2",
+"? c #B1C7F6",
+"% c #B6CDFB",
+"# c #C4D3F7",
+"& c #C5D5FC",
+"( c #D1DEFD",
+") c #C5D3FC",
+"- c #E1EAFE",
+/* pixels */
+"vvvvvvvvvvvvvvvvv",
+"vjsq#ttJfSzz,0Hiv",
+"vs-Mrssh4L55gW`.v",
+"vqMC(44L3&))WA`fv",
+"v#rsB333DAKKKK`ev",
+"v#rsB333DAKKKK`ev",
+"vthNLUUUUKTTpTTev",
+"vJBB3V33KppV*ppev",
+"vS3^VVV22oVVV*pfv",
+"vS3^^VVV2VVVo*pfv",
+"vzUUU2VVVVVooo%Rv",
+"vy&&&&&VVV11ooInv",
+"v?Wgggg:V6xxxx9Xv",
+"vOAWWEEEE6uudZkav",
+"vOAWWEEEE6uudZkav",
+"vOTA;AAA1u77xZQYv",
+"vPFl````b%<<9QGwv",
+"vmc>....>XXXaYw8v",
+"vvvvvvvvvvvvvvvvv",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Editor.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,29 @@
+#define Editor_width 48
+#define Editor_height 48
+#define Editor_x_hot -1
+#define Editor_y_hot -1
+static char Editor_bits[] = {
+   0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00,
+   0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00,
+   0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00,
+   0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00,
+   0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x00,
+   0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
+   0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x80, 0x00, 0x20, 0x00,
+   0x00, 0x04, 0x00, 0x04, 0x40, 0x00, 0x00, 0x02, 0x20, 0x02, 0x80, 0x00,
+   0x00, 0x01, 0x10, 0x10, 0x00, 0x01, 0x80, 0x00, 0x88, 0x08, 0x00, 0x02,
+   0x40, 0x10, 0x44, 0x44, 0x00, 0x04, 0x20, 0x08, 0x22, 0x22, 0x00, 0x08,
+   0x10, 0x04, 0x11, 0xd1, 0x0f, 0x10, 0x08, 0x82, 0x80, 0x68, 0x18, 0x20,
+   0x04, 0x41, 0x44, 0x30, 0x23, 0x40, 0x82, 0x20, 0x22, 0x18, 0xce, 0x80,
+   0x41, 0x10, 0x10, 0xcd, 0x91, 0x41, 0x02, 0x88, 0x88, 0x06, 0x03, 0x27,
+   0x04, 0x44, 0x40, 0xfe, 0x04, 0x14, 0x08, 0x22, 0x22, 0x84, 0x01, 0x0c,
+   0x10, 0x10, 0xfd, 0xff, 0x3f, 0xfc, 0x20, 0x88, 0xfc, 0xf1, 0x3f, 0xc0,
+   0x40, 0x40, 0x04, 0xe1, 0x00, 0xc0, 0x80, 0x20, 0x02, 0x83, 0x07, 0xc0,
+   0x00, 0x01, 0x11, 0x0c, 0x00, 0xc0, 0x00, 0x82, 0x88, 0x30, 0x00, 0xc0,
+   0x00, 0x04, 0x04, 0xe0, 0x7f, 0xc0, 0x00, 0x08, 0x22, 0x02, 0xc8, 0xc7,
+   0x00, 0x10, 0x10, 0x11, 0x04, 0xfc, 0x00, 0x20, 0x08, 0x00, 0x02, 0xc0,
+   0x00, 0x40, 0x40, 0x04, 0x01, 0x00, 0x00, 0x80, 0x20, 0x82, 0x00, 0x00,
+   0x00, 0x00, 0x01, 0x41, 0x00, 0x00, 0x00, 0x00, 0x82, 0x20, 0x00, 0x00,
+   0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
+   0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00,
+   0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Error_XP.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,153 @@
+/* XPM */
+static char *Error_XP2_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"31 31 115 2",
+/* colors */
+"aa c #FFE0DF",
+"ab c #FFE0E0",
+"ac c #7F201F",
+"ad c #BF9F80",
+"ae c #A0A0A0",
+"af c #BF6060",
+"ag c #C0BFBF",
+"ah c #BFA0A0",
+"ai c #5F5F40",
+"aj c #DF5F5F",
+"ak c #FFDFC0",
+"al c #DFA0A0",
+"am c #5F3F3F",
+"an c #5F5F5F",
+"ao c #FFA09F",
+"ap c #7F2020",
+"aq c #803F3F",
+"ar c #C07F60",
+"as c #C0BFA0",
+"at c #DF9F80",
+"au c #BF2020",
+"av c #BF3F3F",
+"aw c #401F1F",
+"ax c #E06060",
+"ay c #E05F5F",
+"az c #E0FFFF",
+"ba c #DFBFBF",
+"bb c #606060",
+"bc c #A07F60",
+"bd c #FF9F9F",
+"be c #807F7F",
+"bf c #C05F40",
+"bg c #A0403F",
+"bh c #C08080",
+"bi c #C0403F",
+"bj c #C05F5F",
+"bk c #402020",
+"bl c #E0605F",
+"bm c #E09F9F",
+"bn c #805F40",
+"bo c #DF9F9F",
+"bp c #BFDFFF",
+"bq c #FFBFBF",
+"br c #FF7F7F",
+"bs c #802020",
+"bt c #DFA0BF",
+"bu c #C09F80",
+"bv c #A09F9F",
+"bw c #C04040",
+"bx c #DFBFA0",
+"by c #C0FFFF",
+"bz c #403F3F",
+"ca c #E0E0DF",
+"cb c #803F20",
+"cc c #E07F7F",
+"cd c #602020",
+"ce c #BFE0FF",
+"cf c white",
+"cg c #A05F40",
+"ch c #7F4040",
+"ci c #A04040",
+"cj c #A05F5F",
+"ck c #C0807F",
+"cl c #BF5F5F",
+"cm c #DF7F60",
+"cn c #A0809F",
+"co c #DFC0BF",
+"cp c #DF8080",
+"cq c #C0E0FF",
+"cr c #C0A0BF",
+"cs c #605F5F",
+"ct c #FFC0C0",
+"cu c #FF605F",
+"cv c #A09F80",
+"cw c #A03F3F",
+"cx c #A02020",
+"cy c #BF4040",
+"cz c #C06060",
+"da c #DFDFC0",
+"db c #BF9F9F",
+"dc c #DFA09F",
+"dd c #FF7F60",
+"de c #DF7F7F",
+"df c #DF6060",
+"dg c #5F1F1F",
+"dh c #FF8080",
+"di c #FF6060",
+"dj c #7F1F1F",
+"dk c #9F6060",
+"dl c #9F3F3F",
+"dm c #BF201F",
+"dn c #C0A09F",
+"do c #C09F9F",
+"dp c #C0C0BF",
+"dq c #5F3F20",
+"dr c #FFBFA0",
+"ds c #DF807F",
+"dt c #DFFFFF",
+"du c #5F4040",
+"dv c #FF807F",
+"dw c #FFA0A0",
+"dx c #DFE0FF",
+"dy c #9F5F5F",
+"dz c #A07F7F",
+"ea c #BFA09F",
+"eb c #E0DFC0",
+"ec c #C0A0A0",
+"ed c #605F40",
+"ee c #40201F",
+"ef c #FFFFE0",
+"eg c #FF9F80",
+"eh c #DF605F",
+"ei c #601F1F",
+"ej c #FFC0BF",
+"ek c none",
+/* pixels */
+"ekekekekekekekekekekbxckclcicwcwciafbucoekekekekekekekekekekek",
+"ekekekekekekekebckciczcpbmbdegdhbraxbfcwcgdnekekekekekekekekek",
+"ekekekekekekdccyatakctbqdraoegegdvdvbrddaycwdycoekekekekekekek",
+"ekekekekekarczaaaaakejdrdwaoegdhdvdvbrdddidibwcbdnekekekekekek",
+"ekekekekafbhcfefaaakejdraobdegdhdvbrbrdddidicuajbsadekekekekek",
+"ekekekarbhcfcfaactdcbqdraobdegdhdvbrddcudidiblblbfbseaekekekek",
+"ekekdcczcfcfefakbcdkdsdwaoegegdvdvbrbiauddcublayajcyapagekekek",
+"ekebcyabefaaakbcdzdxecdebdegdhdvbrbidmdocqccblayajajdlbndaekek",
+"ekckataaaactbcdzdxazazeccmegdvdvbicxdobycqcqdeajajbjbfdjcvekek",
+"ekciakakakdcdkdxazazcfcfalehdvbwcxdodtdtcqcqcqdfajbjbfdlchdaek",
+"bxczctejejbqdsecazcfcfcfcfdcavcxdodtdtdtbycqcrajajbfbfcycdahek",
+"ckcpbqdrdrdrdwdeeccfcfcfcfcfbodoazdtdtdtbybtajajbjbfbfcydjbeek",
+"clbmdrdwaoaoaobdcmalcfcfcfcfazazazdtdtdtbaayajajbfbfcycybsedda",
+"cibdaoaobdbdegegegehalcfcfcfazazazdtdtbaayajajbjbfbfcycybsamco",
+"cwegegegegegegdhdvdvavboazazazazdtdtalblajajajbfbfcycycybsamdp",
+"cwegegdhdhdhdvdvdvbwcxdoazazazazdtdtdbbiajajbjbfbfcycycybsamag",
+"cidvdvdvdvdvdvbrbicxdoazazazdtdtdtdtdtdbavbjbfbfcycycyciapamdp",
+"afaxdvdvbrbrbrbicxdodtdtdtdtdtdtdtdtcqcqcnavbfcycycycycieiduco",
+"bubfbrbrbrddbidmdodtdtdtdtdtaldbdtcqcqcqcqcncwcycycycicidgcsda",
+"cocwddddddcuaudobydtdtdtdtbablbidbcqcqcqcececncycycicicbdgbeek",
+"ekcgaydidididdcqcqcqbybybaayajajavcncqcececebpclcycicieibzahek",
+"ekdncwdididicucccqcqcqbtayajajajbjavcncecebpafcycicidldgcsdaek",
+"ekekcjbwcublblbldecqcrajajajajbjbfbfcwbvbpafcycicibgeibzbvekek",
+"ekekcoaqajblayayajdfajajajbjbfbfbfcycycyclcyciciciacbkbbdaekek",
+"ekekekdnbsbfajajajajajbjbfbfbfbfcycycycycyciciciapawaidpekekek",
+"ekekekekadbscyajbjbjbfbfbfbfcycycycycycicicibgacawduahekekekek",
+"ekekekekekdbapdlbfbfbfbfcycycycycycycicicidleieeaiahekekekekek",
+"ekekekekekekasbnacdlcycycycycycycicicicbeidgbzbbdpekekekekekek",
+"ekekekekekekekdacvchcddjbsbsbsbsapeidgawbzcsbvdaekekekekekekek",
+"ekekekekekekekekekdaaebeedamdqdqamduanbeaedaekekekekekekekekek",
+"ekekekekekekekekekekekekdacodpagdpcodaekekekekekekekekekekekek",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Error_XP2.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,159 @@
+/* XPM */
+static char *Error_XP_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 120 2",
+/* colors */
+"aa c #BFBFA0",
+"ab c #200000",
+"ac c #C02020",
+"ad c #BF8080",
+"ae c #C09F9F",
+"af c #400000",
+"ag c #606060",
+"ah c #DF0000",
+"ai c #E04040",
+"aj c #5F0000",
+"ak c #805F5F",
+"al c #FF6060",
+"am c #807F7F",
+"an c #A0A09F",
+"ao c #A0C0C0",
+"ap c #9F9F9F",
+"aq c #202020",
+"ar c #E09F80",
+"as c #C0DFDF",
+"at c #BF1F1F",
+"au c #BF3F3F",
+"av c #FF5F40",
+"aw c #DFC0C0",
+"ax c #601F1F",
+"ay c #5F5F5F",
+"az c red",
+"ba c #FFA0A0",
+"bb c #7F5F60",
+"bc c #7F0000",
+"bd c #9F6060",
+"be c #1F1F1F",
+"bf c #9F4040",
+"bg c #E0BFA0",
+"bh c #605F40",
+"bi c #C04040",
+"bj c #C0A0A0",
+"bk c #E0A09F",
+"bl c #FF7F60",
+"bm c #DF5F5F",
+"bn c #600000",
+"bo c #FF4040",
+"bp c #FF3F3F",
+"bq c #FF1F1F",
+"br c #7F7F7F",
+"bs c #9F3F3F",
+"bt c #C03F20",
+"bu c #A06060",
+"bv c #BFDFDF",
+"bw c #C00000",
+"bx c #BFA0A0",
+"by c #C0C0C0",
+"bz c #E0E0DF",
+"ca c #DF1F1F",
+"cb c #E0C0BF",
+"cc c #605F5F",
+"cd c #FF8080",
+"ce c #FF7F7F",
+"cf c #FF5F5F",
+"cg c black",
+"ch c #9F7F7F",
+"ci c #201F1F",
+"cj c #A03F3F",
+"ck c #DFDFC0",
+"cl c #C01F1F",
+"cm c #3F2020",
+"cn c #BF4040",
+"co c #DF807F",
+"cp c #E02020",
+"cq c #DF3F3F",
+"cr c #DFFFFF",
+"cs c #FF605F",
+"ct c white",
+"cu c #FF9F9F",
+"cv c #80807F",
+"cw c #9FBFBF",
+"cx c #A00000",
+"cy c #BF9F80",
+"cz c #BF2020",
+"da c #BF7F7F",
+"db c #C03F3F",
+"dc c #3F3F3F",
+"dd c #403F3F",
+"de c #E0A0A0",
+"df c #E00000",
+"dg c #E0FFFF",
+"dh c #FF807F",
+"di c #800000",
+"dj c #7F5F5F",
+"dk c #201F00",
+"dl c #A05F5F",
+"dm c #A08080",
+"dn c #1F0000",
+"do c #C0C0BF",
+"dp c #DF7F60",
+"dq c #404040",
+"dr c #3F0000",
+"ds c #5F5F40",
+"dt c #E0605F",
+"du c #E0807F",
+"dv c #DFE0E0",
+"dw c #603F3F",
+"dx c #806060",
+"dy c #9F9F80",
+"dz c #A0DFDF",
+"ea c #9F0000",
+"eb c #A02020",
+"ec c #3F3F20",
+"ed c #C0E0E0",
+"ee c #BF0000",
+"ef c #C05F5F",
+"eg c #E0DFC0",
+"eh c #E03F3F",
+"ei c #E01F1F",
+"ej c #DF4040",
+"ek c #805F40",
+"el c #FF2020",
+"em c #7F6060",
+"en c #9FC0C0",
+"eo c #A07F7F",
+"ep c none",
+/* pixels */
+"epepepepepepepepepepbgcecscfavbobocfblbkepepepepepepepepepepepep",
+"epepepepepepepepdhbpboalcecdcdcecealcfbpeldtawepepepepepepepepep",
+"epepepepepepdebpboalcecdcubabacucdcealcfbobpeidpepepepepepepepep",
+"epepepepepceelboalcecubabababacucdcdcealcfbobpelcqckepepepepepep",
+"epepepepalelboalcecdcucucucdcecececealalcfcfbobpelacdoepepepepep",
+"epepepduelbocfalcecdcdcealcfbobobobocfcfcfbobobpelelczdoepepepep",
+"epepbgelbpbocfalalcfcfbobpelbqbqbqelbpbpbpbpbpbpelcpeibsckepepep",
+"epepehelbobobobodxdxelbqazazazazazazazbqagakelelelcpeicadxepepep",
+"eparcpbpbpbpbpchbvbvbdazazdfdfdfdfazahdjcwendlbqbqeicacadianepep",
+"epcpcpelbpelchbvctctedbddfdfdfdfdfahdjcwctctdzdabqeicaclbwbhckep",
+"cbcacpelelelbmasctctctaschahdfdfahbbaoctctctctbmdfeicabwbwaxanep",
+"ducaeibqelbqazaiedctctctedeoahahamaoctctctctaidfdfahbwbwbweaemep",
+"bmcaeieibqbqazdfejdvctctctdvaddmasctctctctaiahahahahbweeeecxdqdo",
+"cqclcaeieieidfdfahdbdvctctctctctctctctctejbwahahahbwbweeeeeecmbx",
+"clclahahdfdfdfahahahbidvctctctctctctctejbwbwbwbwbwbwbweecxeecian",
+"eebwbwahahahahahahahahbidgctctctctctdbbwbwbwbwbwbwbweeeecxeecidy",
+"ateebwbwahahahahahahbwdmdgctctctctctaebwbwbwbwbwbweeeecxcxcxdkdy",
+"bteeeebwbwbwahbwaheedxbvctctctctctctcrdmeebwbwbweeeeeecxcxeabedy",
+"efcxeeeebwbwbwaheeemaoctctctctctctctctedcheebweeeeeecxeaeadibeap",
+"cocxcxeeeebwbweeccaoctctctctdbbmctctctcteddxeeeeeecxcxeaeabncian",
+"cbcxcxcxeeeeeeemaoctctctctbieeeebicrctctctedchcxcxcxeaeaeadrdcaa",
+"epebcxcxcxeeamaoctctctctbicxeeeeeecncrctctctcrdmcxeaeaeadidnayck",
+"epcyeeeacxcxebbyctctctbicxeeeeeeeecxcndvctctctcjeaeadieaajbecvep",
+"epepebeaeacxcxebctctbicxcxcxcxeecxcxcxcnctctebdieadididicgdcaaep",
+"epepbjcxeaeaeaeacnefeacxcxcxcxcxcxcxcxeaefaudidididididrbebrepep",
+"epepepbucxeaeaeaeaeaeacxcxcxcxcxcxeaeaeadidididibcdiajcgdqaaepep",
+"epepepepbfeadididieaeaeaeaeaeaeaeaeaeadidididibcdiajcgdcapepepep",
+"epepepepepekeadidididididieaeaeadididididibcdidiafcgaqdyepepepep",
+"epepepepepepdxbceadidididididididididibcdidibcdrcgdcdyegepepepep",
+"epepepepepepepapdwbcdidididididididididibndrcgbedsanepepepepepep",
+"epepepepepepepepdocvddafajbnbcbcbnajafabcgbedqcvdoepepepepepepep",
+"epepepepepepepepepepdodyagdqdcecaqecdcdqagdydoepepepepepepepepep",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Error_motif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,9 @@
+#define xm_error_width 20
+#define xm_error_height 20
+static char xm_error_bits[] = {
+   0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x3a, 0x00, 0x58, 0x55, 0x00,
+   0x2c, 0xa0, 0x00, 0x56, 0x40, 0x01, 0xaa, 0x80, 0x02, 0x46, 0x81, 0x01,
+   0x8a, 0x82, 0x02, 0x06, 0x85, 0x01, 0x0a, 0x8a, 0x02, 0x06, 0x94, 0x01,
+   0x0a, 0xe8, 0x02, 0x14, 0x50, 0x01, 0x28, 0xb0, 0x00, 0xd0, 0x5f, 0x00,
+   0xa0, 0x2a, 0x00, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Error_w95.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,44 @@
+/* XPM */
+static char *Error_w95_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 5 1",
+/* colors */
+"a c white",
+"b c red",
+"c c #808080",
+"d c #800000",
+"e c none",
+/* pixels */
+"eeeeeeeeeeeddddddddeeeeeeeeeeeee",
+"eeeeeeeedddbbbbbbbbdddeeeeeeeeee",
+"eeeeeeedbbbbbbbbbbbbbbdeeeeeeeee",
+"eeeeeddbbbbbbbbbbbbbbbbddeeeeeee",
+"eeeedbbbbbbbbbbbbbbbbbbbbdeeeeee",
+"eeedbbbbbbbbbbbbbbbbbbbbbbdeeeee",
+"eeedbbbbbbbbbbbbbbbbbbbbbbdceeee",
+"eedbbbbbbabbbbbbbbbbabbbbbbdceee",
+"edbbbbbbaaabbbbbbbbaaabbbbbbdeee",
+"edbbbbbaaaaabbbbbbaaaaabbbbbdcee",
+"edbbbbbbaaaaabbbbaaaaabbbbbbdcce",
+"dbbbbbbbbaaaaabbaaaaabbbbbbbbdce",
+"dbbbbbbbbbaaaaaaaaaabbbbbbbbbdce",
+"dbbbbbbbbbbaaaaaaaabbbbbbbbbbdcc",
+"dbbbbbbbbbbbaaaaaabbbbbbbbbbbdcc",
+"dbbbbbbbbbbbaaaaaabbbbbbbbbbbdcc",
+"dbbbbbbbbbbaaaaaaaabbbbbbbbbbdcc",
+"dbbbbbbbbbaaaaaaaaaabbbbbbbbbdcc",
+"dbbbbbbbbaaaaabbaaaaabbbbbbbbdcc",
+"edbbbbbbaaaaabbbbaaaaabbbbbbdccc",
+"edbbbbbaaaaabbbbbbaaaaabbbbbdccc",
+"edbbbbbbaaabbbbbbbbaaabbbbbbdcce",
+"eedbbbbbbabbbbbbbbbbabbbbbbdccce",
+"eeedbbbbbbbbbbbbbbbbbbbbbbdcccce",
+"eeedbbbbbbbbbbbbbbbbbbbbbbdcccee",
+"eeeedbbbbbbbbbbbbbbbbbbbbdccceee",
+"eeeeeddbbbbbbbbbbbbbbbbddcccceee",
+"eeeeeecdbbbbbbbbbbbbbbdccccceeee",
+"eeeeeeecdddbbbbbbbbdddccccceeeee",
+"eeeeeeeeeccddddddddcccccceeeeeee",
+"eeeeeeeeeecccccccccccccceeeeeeee",
+"eeeeeeeeeeeeecccccccceeeeeeeeeee",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Explain.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,14 @@
+#define Explain_width 32
+#define Explain_height 32
+static char Explain_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/HandleLight.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4 @@
+#define HandleLight_width 8
+#define HandleLight_height 8
+static char HandleLight_bits[] = {
+   0x00, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x3c};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/HandleNext.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,18 @@
+/* XPM */
+static char *HandleNext_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"7 7 4 1",
+/* colors */
+"a c black",
+"b c white",
+"c c #555555",
+"d c #aaaaaa",
+/* pixels */
+"dcaaadd",
+"caccccd",
+"accdddd",
+"acddbbd",
+"acdbbbd",
+"dcdbbdd",
+"ddddddd",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/HandleShadow.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4 @@
+#define HandleShadow_width 8
+#define HandleShadow_height 8
+static char HandleShadow_bits[] = {
+   0x3c, 0x06, 0x03, 0x03, 0x03, 0x03, 0x02, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Information.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,14 @@
+#define Information_width 32
+#define Information_height 32
+static char Information_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00,
+   0x00, 0xfe, 0x7f, 0x00, 0x80, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x03,
+   0xe0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0x0f,
+   0xf8, 0x3f, 0xfc, 0x1f, 0xf8, 0x3f, 0xfc, 0x1f, 0xfc, 0x3f, 0xfc, 0x3f,
+   0xfc, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f,
+   0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f,
+   0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f,
+   0xf8, 0x3f, 0xfc, 0x1f, 0xf8, 0x3f, 0xfc, 0x1f, 0xf0, 0x3f, 0xfc, 0x0f,
+   0xf0, 0x0f, 0xf0, 0x0f, 0xe0, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0x03,
+   0x80, 0xff, 0xff, 0x01, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Information_XP.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,166 @@
+/* XPM */
+static char *Information2_XP_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 127 2",
+/* colors */
+"aa c #80A0C0",
+"ab c #5F80BF",
+"ac c #C0C0BF",
+"ad c #001F5F",
+"ae c #A0BFDF",
+"af c #1F2040",
+"ag c #DFE0E0",
+"ah c #3F5F7F",
+"ai c #C0E0FF",
+"aj c #1F3F80",
+"ak c #3F6080",
+"al c #00209F",
+"am c #5F7F9F",
+"an c #5F7FA0",
+"ao c #3F407F",
+"ap c #6080C0",
+"aq c #9FBFC0",
+"ar c #80BFDF",
+"as c #C0DFDF",
+"at c #A0C0E0",
+"au c #9FBFDF",
+"av c #A0DFFF",
+"aw c #BFC0DF",
+"ax c #FFFFE0",
+"ay c #003F9F",
+"az c #607F80",
+"ba c #3F5F80",
+"bb c #1F40A0",
+"bc c #6080A0",
+"bd c #3F609F",
+"be c #5F5F7F",
+"bf c #A0BFC0",
+"bg c #80A0BF",
+"bh c #7F809F",
+"bi c #5F80E0",
+"bj c #A0C0DF",
+"bk c #BFBFC0",
+"bl c #80A0DF",
+"bm c #9FA0DF",
+"bn c #204080",
+"bo c #C0C0DF",
+"bp c #BFE0FF",
+"bq c #406080",
+"br c #E0E0FF",
+"bs c white",
+"bt c #40609F",
+"bu c #5F6080",
+"bv c #A0BFBF",
+"bw c #9F9FA0",
+"bx c #002040",
+"by c #A0A0BF",
+"bz c #1F3F60",
+"ca c #1F3F5F",
+"cb c #003F80",
+"cc c #204060",
+"cd c #DFDFE0",
+"ce c #3F4060",
+"cf c #001F7F",
+"cg c #20407F",
+"ch c #1F409F",
+"ci c #0020A0",
+"cj c #809F9F",
+"ck c #5F607F",
+"cl c #809FBF",
+"cm c #9F9F9F",
+"cn c #6080BF",
+"co c #BFC0BF",
+"cp c #DFDFC0",
+"cq c #BFDFE0",
+"cr c #9FA0C0",
+"cs c #7FA0DF",
+"ct c #DFDFDF",
+"cu c #002080",
+"cv c #BFDFFF",
+"cw c #A0C0FF",
+"cx c #DFE0FF",
+"cy c #4060A0",
+"cz c #609FBF",
+"da c #7F7F9F",
+"db c #7F9FC0",
+"dc c #A0A0A0",
+"dd c #7F80BF",
+"de c #BFBFBF",
+"df c #BFC0C0",
+"dg c #00205F",
+"dh c #9FBFE0",
+"di c #E0E0E0",
+"dj c #000060",
+"dk c #C0DFFF",
+"dl c #9FC0FF",
+"dm c #404060",
+"dn c #00007F",
+"do c #7F7F80",
+"dp c #9FA0A0",
+"dq c #809FC0",
+"dr c #7F9FBF",
+"ds c #80809F",
+"dt c #C0C0C0",
+"du c #000040",
+"dv c #9FA0BF",
+"dw c #203F5F",
+"dx c #E0FFFF",
+"dy c #DFFFFF",
+"dz c #1F205F",
+"ea c #1F4080",
+"eb c #E0DFDF",
+"ec c #7F9FA0",
+"ed c #205FC0",
+"ee c #1F40BF",
+"ef c #4080DF",
+"eg c #7FA0C0",
+"eh c #60A0DF",
+"ei c #C0DFE0",
+"ej c #00003F",
+"ek c #203F60",
+"el c #9FC0E0",
+"em c #E0E0DF",
+"en c #001F80",
+"eo c #BFC0E0",
+"ep c #003FA0",
+"eq c #405F7F",
+"er c #606080",
+"es c #3F4080",
+"et c #1F5FBF",
+"eu c #5F609F",
+"ev c #001F40",
+"ew c none",
+/* pixels */
+"ewewewewewewewewewewcdagdididididididiagdtcpewewewewewewewewewew",
+"ewewewewewewewdtasbsbsbsbsbsbsbsbsbsbsbsbsbsbvcpewewewewewewewew",
+"ewewewewewdidibsbsbsbsbsbsbsdfbybsbsbsbsbsbsbsbsbfewewewewewewew",
+"ewewewewcddiaxbsbsbsbsbsbsahejejadbsbsbsbsbsbsbsbsawcoewewewewew",
+"ewewewcddidibsbsbsbsbsbsasduenendjddbsbsbsbsbsbsbrbseibvewewewew",
+"ewewcddidibsbsbsbsbsbsbsbrdjalefcibmbsbsdxbsbsbsdxbrdxbjdeewewew",
+"ewctctdidxbsbsbsbsbsbsbsbsdqbbbiapbsbsdxdxdxdxbsbsdxcxdxecacewew",
+"ewascdbrbsbsbsbsbsbsbsbsbsbsbsbsbsbsdxdxdxdxdxdxbsbscxcxeidacpew",
+"ctctagdxbsdxdxdxdxdxbsbsbsbsbsbsdxdxdxdxdxdxdxbrdybsdxcxdxamdpew",
+"awctagbsbsdxdxdxdxdxdxbcbzbnesbzevclbsdxdxcxcxcxcxdxdxcxcxatercp",
+"dfascxdxdxdxdxdxdxdxdxdqcudnencudjdbbsdycxcxcxcxcxcxdxcxeicqcebv",
+"dfbocxdxdxdxdxdxbrdxdxbsbschalayendbbscxcxcxcxcxcxcxdyaicqcqcacm",
+"dfawcxdxdxdxcxcxcxcxcxdxbscyenayendbdxcxcxcxcxcxcxcxcxaieocqdzcj",
+"dfawcxdxdycxcxcxcxcxcxdydxbtenayendbdxcxaicxcxaiaiaicxaieoeodzcj",
+"bfaweidycxcxcxcxcxcxcxcxdxbtenayendbdxcxaiaiaiaiaiaiaidkeoatdzcj",
+"bfbkcqcxcxcxcxcxcxcxcxcxdxbtenayendbdxaiaiaiaiaiaiaiaieoawaudzcj",
+"bkbfawdkcxcxaicxaiaiaicxdybtenayendbdyaiaiaiaiaiaiaicvatbjeudzbw",
+"cpbjbfawaicxaiaiaiaiaiaidybdenayendbdyaiaiaiaiaiaicvataeauekcede",
+"ewdvbfbfeoaiaiaiaiaiaiaidybtenalcfapdxaiaicvcvbpcvatauauanevazcp",
+"ewcpbgaqbfeodkaiaiaiaiaicvajalepayeacvaicvbpcvcvatauaqdbdgekdpew",
+"ewewbvaacraqatcvaiaidydbdjaletededeecbblaicvavatauaqegekdzdocpew",
+"ewewewdvdraqaqauatcvbpcvdlcvavcwcwbpavcwcvatauaqaqczcgafckdeewew",
+"ewewewewbwbcaacrcrauauatcvcvcvbpaibpcvelauaaaaaaandzafckdeewewew",
+"ewewewewewdcbucnbgaaaaaaaaaaauelavcwaucraaaacncgbxdwazdeewewewew",
+"ewewewewewewacbhbqbaandrdrdraaaaelelblczakcgevdwbebwdtewewewewew",
+"ewewewewewewewcpdebhckeqekaodraaelcwaabzafceckcjacebewewewewewew",
+"ewewewewewewewewewcpcpcpdedmahardhavcsdwazbvdtewewewewewewewewew",
+"ewewewewewewewewewewewewewdtceczdhcwcsekdpewewewewewewewewewewew",
+"ewewewewewewewewewewewewewewdeekabcwehdwbwewewewewewewewewewewew",
+"ewewewewewewewewewewewewewewewcoeqcscsbzbwewewewewewewewewewewew",
+"ewewewewewewewewewewewewewewewewcpazbdccbwewewewewewewewewewewew",
+"ewewewewewewewewewewewewewewewewewewdcdsdeewewewewewewewewewewew",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Information_XP_1.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,127 @@
+/* XPM */
+static char *Information_XP_1_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 88 2",
+/* colors */
+"aa c #9FA0C0",
+"ab c #80A0DF",
+"ac c #606060",
+"ad c #609FBF",
+"ae c #C0C0C0",
+"af c #A0C0E0",
+"ag c #DFFFFF",
+"ah c black",
+"ai c #9FA0BF",
+"aj c #7FA0DF",
+"ak c #60605F",
+"al c #5F6060",
+"am c #C0C0BF",
+"an c #A0C0DF",
+"ao c #BFC0C0",
+"ap c #9FC0E0",
+"aq c #5F5F60",
+"ar c #C0BFBF",
+"as c #BFBFC0",
+"at c #A0BFDF",
+"au c #607F80",
+"av c #9FBFE0",
+"aw c #C0DFE0",
+"ax c #E0DFC0",
+"ay c #BFC0BF",
+"az c #5F5F5F",
+"ba c #BFBFBF",
+"bb c #9FBFDF",
+"bc c #607F7F",
+"bd c #BFDFE0",
+"be c #DFDFC0",
+"bf c #C0DFDF",
+"bg c #7F80A0",
+"bh c #A0DFFF",
+"bi c #E0E0FF",
+"bj c #404040",
+"bk c #A0A0A0",
+"bl c #80A0C0",
+"bm c #7F809F",
+"bn c #DFE0FF",
+"bo c #A0A09F",
+"bp c #7FA0C0",
+"bq c #9FA0A0",
+"br c #80A0BF",
+"bs c #809FBF",
+"bt c #7F9FC0",
+"bu c #405F60",
+"bv c #A0BFC0",
+"bw c #9F9F9F",
+"bx c #7F9FBF",
+"by c white",
+"bz c #5F5F40",
+"ca c #405F5F",
+"cb c #9FBFC0",
+"cc c #80BFDF",
+"cd c #BFBFA0",
+"ce c #5F6080",
+"cf c #A0C0FF",
+"cg c #BFC0E0",
+"ch c #C0C0DF",
+"ci c #6080A0",
+"cj c #808080",
+"ck c #DFC0C0",
+"cl c #E0E0E0",
+"cm c #5F607F",
+"cn c #BFC0DF",
+"co c #DFC0BF",
+"cp c #80807F",
+"cq c #60809F",
+"cr c #DFE0E0",
+"cs c #C0E0FF",
+"ct c #7F7F80",
+"cu c #C0DFFF",
+"cv c #DFDFE0",
+"cw c #BFE0FF",
+"cx c #809FA0",
+"cy c #609FC0",
+"cz c #5F7F9F",
+"da c #7F7F7F",
+"db c #BFDFFF",
+"dc c #DFDFDF",
+"dd c #9F9F80",
+"de c #809F9F",
+"df c #E0FFFF",
+"dg c #405F40",
+"dh c #FFFFE0",
+"di c #BFA0A0",
+"dj c none",
+/* pixels */
+"djdjdjdjdjdjdjdjdjdjcrcrclclclclclclclcvdcdjdjdjdjdjdjdjdjdjdjdj",
+"djdjdjdjdjdjdjclclcldhbybybybybybybybybybicldcbedjdjdjdjdjdjdjdj",
+"djdjdjdjdjdjcrclbybybybybybybybybybybybybydfbicrchbedjdjdjdjdjdj",
+"djdjdjdjcvclclbybybybybybybybybybybybybybybydfbiclcnaedjdjdjdjdj",
+"djdjdjcvclclbybybybybybybybybybybybybybybybybybybicrchbadjdjdjdj",
+"djdjcvcrcldfbybybybybybybybybybybybybybybybybybybybncrcncddjdjdj",
+"djdccvcldfbybybybybybybybybybybybybybybybybydfbybydfbncvaiamdjdj",
+"djbfcvbibybybybybybydfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbybncvcndebedj",
+"dcdccrdfbybydfdfdfdfbidfdfdfdfdfdfdfdfdfdfdfdfbiagdfdfbnanaacddj",
+"chdccrdfbydfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbnbnagdfbncnatbwbe",
+"aobfbndfdfdfdfdfdfdfdfbnbnbnbnbnbnbndfdfdfdfbnbnbnbndfbnawatbqcd",
+"aochbndfdfdfdfdfbidfbndfdfdfdfdfcucucucucubnbnbnbnbnbnbnbdanbqdd",
+"aocncrdfdfbnbnbnbnbnbnbnbnbnbnbnbnbncucsbnbnbnbnbnbnbncsbdanbqcp",
+"aocncvbnbnbnbnbnbnbnbnbnbnbnbnbnbnbnbnbnbncscscscscscscscgancxda",
+"bvcnawbnbnbnbnbnbnbnbnbnbnbnbnbnbnbnbncscscscscscscscscucgcbctda",
+"cbasbdbnbnbnbnbnbnbnbnbncscscscscscscscscscscscscscscsbdanblacdd",
+"aobvcnawbnbncscscscscscscscscscscscscscscscscscscscsdbafcbbgacdi",
+"dcaibvcgcucscscscscscscscscscscscscscscscscscsdbdbdbafatblcedaam",
+"djaaaibvcgcucscscscscscscscscscscscscsdbdbdbdbdbdbafbbaabxdgddbe",
+"djbebsaibvcgcucscscscscscscscscscscscscwdbdbdbdbafbbaabtcaacamdj",
+"djdjbabsaicbafdbdbcsdbdbcscscscscscscsdbdbdbbhafbbblbxcmazbodjdj",
+"djdjdjbqbxbrcbatafdbdbdbdbcscscscscsdbdbbhafbbbbblbxcebzddbedjdj",
+"djdjdjaxbqcibsblaabbbbafafdbbhbhdbdbcfapbbabblbxcibubzddbedjdjdj",
+"djdjdjdjaxcdbmadbxbrbrblblblbbapbhcfavblblbxadcecaakbobedjdjdjdj",
+"djdjdjdjdjdjambwbcczcibxbxbxbxabapapabbxczcebjazcjcdaxdjdjdjdjdj",
+"djdjdjdjdjdjdjaxambocjdabcaubxblavapblcmbjaccjarbedjdjdjdjdjdjdj",
+"djdjdjdjdjdjdjdjdjdjbecocddibqblccapbpazbwckbedjdjdjdjdjdjdjdjdj",
+"djdjdjdjdjdjdjdjdjdjdjdjdjdjbebpabapbpaqcddjdjdjdjdjdjdjdjdjdjdj",
+"djdjdjdjdjdjdjdjdjdjdjdjdjdjdjayadccbpaqamdjdjdjdjdjdjdjdjdjdjdj",
+"djdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjbkcyajaqamdjdjdjdjdjdjdjdjdjdjdj",
+"djdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjbkcqalamdjdjdjdjdjdjdjdjdjdjdj",
+"djdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjdjcdddbedjdjdjdjdjdjdjdjdjdjdj",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Information_XP_2.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,148 @@
+/* XPM */
+static char *Information_XP_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 109 2",
+/* colors */
+"aa c #A0C0FF",
+"ab c #607F80",
+"ac c white",
+"ad c #809FA0",
+"ae c #5F607F",
+"af c #3F60C0",
+"ag c #A0A09F",
+"ah c #C0C0BF",
+"ai c #A0C0DF",
+"aj c #BFDFE0",
+"ak c #003F7F",
+"al c #C0BFBF",
+"am c #003F9F",
+"an c #00207F",
+"ao c #606060",
+"ap c #607F7F",
+"aq c #E0E0FF",
+"ar c #80807F",
+"as c #1F40A0",
+"at c #7F809F",
+"au c #9F9F9F",
+"av c #405F40",
+"aw c #9FA0BF",
+"ax c #DFDFC0",
+"ay c #7FA0DF",
+"az c #404040",
+"ba c #E0FFFF",
+"bb c #FFFFE0",
+"bc c #BFC0E0",
+"bd c #60605F",
+"be c #1F409F",
+"bf c #9F9F80",
+"bg c #4060A0",
+"bh c #60809F",
+"bi c #809FC0",
+"bj c #7F9FBF",
+"bk c #BFC0C0",
+"bl c #BFA0A0",
+"bm c #405F60",
+"bn c #C0DFFF",
+"bo c #DFDFE0",
+"bp c #DFE0FF",
+"bq c #5F6080",
+"br c #609FC0",
+"bs c #809FBF",
+"bt c #7F80A0",
+"bu c #A0A0A0",
+"bv c #C0C0C0",
+"bw c #9FA0C0",
+"bx c #A0C0E0",
+"by c #9FC0E0",
+"bz c #C0C0DF",
+"ca c #002080",
+"cb c #BFDFFF",
+"cc c #5F6060",
+"cd c #6080A0",
+"ce c #2040A0",
+"cf c #808080",
+"cg c #7F9FC0",
+"ch c #9FBFC0",
+"ci c #7FA0C0",
+"cj c #C0DFE0",
+"ck c #7F80C0",
+"cl c #80A0DF",
+"cm c #E0DFC0",
+"cn c #DFE0E0",
+"co c #DFDFDF",
+"cp c #DFFFFF",
+"cq c #5F5F5F",
+"cr c #5F5F60",
+"cs c #3F5FA0",
+"ct c #5F7F9F",
+"cu c #80A0C0",
+"cv c #80BFDF",
+"cw c #C0DFDF",
+"cx c #001F60",
+"cy c #BFBFC0",
+"cz c #5F5F40",
+"da c #9FA0DF",
+"db c #205FA0",
+"dc c #C0E0FF",
+"dd c #003FA0",
+"de c #DFC0C0",
+"df c #809F9F",
+"dg c #3F5F9F",
+"dh c #7F7F80",
+"di c #609FBF",
+"dj c #BFBFA0",
+"dk c #A0BFC0",
+"dl c #A0BFDF",
+"dm c #001F5F",
+"dn c #9FBFE0",
+"do c #A0DFFF",
+"dp c #BFC0DF",
+"dq c #E0E0E0",
+"dr c #001F7F",
+"ds c #BFE0FF",
+"dt c #DFC0BF",
+"du c #7F7F7F",
+"dv c #407FC0",
+"dw c #6080BF",
+"dx c #9FA0A0",
+"dy c #80A0BF",
+"dz c #BFBFBF",
+"ea c #9FBFDF",
+"eb c #405F5F",
+"ec c #BFC0BF",
+"ed c black",
+"ee c none",
+/* pixels */
+"eeeeeeeeeeeeeeeeeeeecncndqdqdqdqdqdqdqbocoeeeeeeeeeeeeeeeeeeeeee",
+"eeeeeeeeeeeeeedqdqdqbbacacacacacacacacacaqdqcoaxeeeeeeeeeeeeeeee",
+"eeeeeeeeeeeecndqacacacacacacacacacacacacacbaaqcnbzaxeeeeeeeeeeee",
+"eeeeeeeebodqdqacacacacacacacacacacacacacacacbaaqdqdpbveeeeeeeeee",
+"eeeeeebodqdqacacacacacacacdcdadwclcbacacacacacacaqcnbzdzeeeeeeee",
+"eeeebocndqbaacacacacacacacaydmdmdmbgacacacacacacacbpcndpdjeeeeee",
+"eecobodqbaacacacacacacacacdgcxcaanakacacacacbaacacbabpboawaheeee",
+"eecwboaqacacacacacacbabababgdrddasbebababababababaacbpbodpdfaxee",
+"cococnbaacacbabababaaqbabacbcsdvascbbababababaaqcpbababpaibwdjee",
+"bzcocnbaacbababababababababababababababababababpbpcpbabpdpdlauax",
+"bkcwbpbababababababababpbpcjbickcgcjbababababpbpbpbpbabpcjdldxdj",
+"bkbzbpbababababaaqbabpbabaafdbcxdrafbnbnbnbpbpbpbpbpbpbpajaidxbf",
+"bkdpcnbababpbpbpbpbpbpbpbpafamcxamafbndcbpbpbpbpbpbpbpdcajaidxar",
+"bkdpbobpbpbpbpbpbpbpbpbpbpafamcxamafbpbpbpdcdcdcdcdcdcdcbcaiaddu",
+"dkdpcjbpbpbpbpbpbpbpbpbpbpafamcxamafbpdcdcdcdcdcdcdcdcbnbcchdhdu",
+"chcyajbpbpbpbpbpbpbpbpbpdcafamcxamafdcdcdcdcdcdcdcdcdcajaicuaobf",
+"bkdkdpcjbpbpdcdcdcdcdcdcdcafamcxamafdcdcdcdcdcdcdcdccbbxchbtaobl",
+"coawdkbcbndcdcdcdcdcdcdcdcafamcxamafdcdcdcdcdccbcbcbbxdlcubqduah",
+"eebwawdkbcbndcdcdcdcdcdcdcafamcxamafdccbcbcbcbcbcbbxeabwbjavbfax",
+"eeaxbsawdkbcbndcdcdcdcdcdcafambeamafaadscbcbcbcbbxeabwcgebaoahee",
+"eeeedzbsawchbxcbcbdccbcbdcafamamamafdocbcbcbdobxeacubjaecqageeee",
+"eeeeeedxbjdychdlbxcbcbcbcbclafceafclcbcbdobxeaeacubjbqczbfaxeeee",
+"eeeeeecmdxcdbscubweaeabxbxcbdodocbcbaabyeaclcubjcdbmczbfaxeeeeee",
+"eeeeeeeecmdjatdibjdydycucucueabydoaadncucubjdibqebbdagaxeeeeeeee",
+"eeeeeeeeeeeeahauapctcdbjbjbjbjclbybyclbjctbqazcqcfdjcmeeeeeeeeee",
+"eeeeeeeeeeeeeecmahagcfduapabbjcudnbycuaeazaocfalaxeeeeeeeeeeeeee",
+"eeeeeeeeeeeeeeeeeeeeaxdtdjbldxcucvbycicqaudeaxeeeeeeeeeeeeeeeeee",
+"eeeeeeeeeeeeeeeeeeeeeeeeeeeeaxciclbycicrdjeeeeeeeeeeeeeeeeeeeeee",
+"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeecdicvcicraheeeeeeeeeeeeeeeeeeeeee",
+"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebubraycraheeeeeeeeeeeeeeeeeeeeee",
+"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebubhccaheeeeeeeeeeeeeeeeeeeeee",
+"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedjbfaxeeeeeeeeeeeeeeeeeeeeee",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Information_motif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,8 @@
+#define xm_information_width 11
+#define xm_information_height 24
+static char xm_information_bits[] = {
+   0x00, 0x00, 0x78, 0x00, 0x54, 0x00, 0x2c, 0x00, 0x54, 0x00, 0x28, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x2a, 0x00, 0x5c, 0x00, 0x28, 0x00,
+   0x58, 0x00, 0x28, 0x00, 0x58, 0x00, 0x28, 0x00, 0x58, 0x00, 0x28, 0x00,
+   0x58, 0x00, 0xae, 0x01, 0x56, 0x01, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioLight.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define RadioLight_width 16
+#define RadioLight_height 16
+static char RadioLight_bits[] = {
+   0xf0, 0x1f, 0xf8, 0x0f, 0x7c, 0x00, 0x3e, 0x00, 0x1f, 0x00, 0x0f, 0x00,
+   0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+   0x0e, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOff.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define RadioOff_width 15
+#define RadioOff_height 15
+static unsigned char RadioOff_bits[] = {
+   0xe0, 0x03, 0xf8, 0x0f, 0x1c, 0x1c, 0x0e, 0x38, 0x06, 0x30, 0x03, 0x60,
+   0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x06, 0x30, 0x0e, 0x38,
+   0x1c, 0x1c, 0xf8, 0x0f, 0xe0, 0x03};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOff_disabled_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,39 @@
+/* XPM */
+static char *RadioOff_disabled_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"13 13 19 1",
+/* colors */
+"a c #F7F7F6",
+"b c #ABBAC6",
+"c c #FDFDFC",
+"d c #F1F1EF",
+"e c #DADCDA",
+"f c #6486A1",
+"g c #B3C3CE",
+"h c #F9F9F8",
+"i c #B9C8D5",
+"j c #F3F3F1",
+"k c #DEE4E5",
+"l c #F5F5F4",
+"m c #FBFBFA",
+"n c #B2C1CD",
+"o c #B5C4D0",
+"p c #EFEFEC",
+"q c #A6B5BF",
+"r c #DDE2E5",
+"s c none",
+/* pixels */
+"sssdenqnedsss",
+"ssrqgepeoqrss",
+"srbepdjjlrnrs",
+"dqepdjjlaarqd",
+"egpdjjlaahmie",
+"nedjjlaahmmrn",
+"qpjjlaahmmchq",
+"nejlaahmmcckn",
+"eolaahmmcccie",
+"dqrahmmccckqd",
+"srnrmmccckgrs",
+"ssrqirhkiqrss",
+"sssdenqnedsss",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOff_w95.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,24 @@
+/* XPM */
+static char *RadioOff_w95_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"12 12 5 1",
+/* colors */
+"a c black",
+"b c #808080",
+"c c #DFDFDF",
+"d c white",
+"e c none",
+/* pixels */
+"eeeebbbbeeee",
+"eebbaaaabbee",
+"ebaaddddaade",
+"ebaddddddcde",
+"baddddddddcd",
+"baddddddddcd",
+"baddddddddcd",
+"baddddddddcd",
+"ebaddddddcde",
+"ebccddddccde",
+"eeddccccddee",
+"eeeeddddeeee",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOff_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,65 @@
+/* XPM */
+static char *RadioOff_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"13 13 45 1",
+/* colors */
+"a c #E0E0DB",
+"b c #F7F7F6",
+"c c #DDE2E5",
+"d c #F9F9F8",
+"e c #BCCCD9",
+"f c #A4B7C6",
+"g c #DEE4E5",
+"h c #FDFDFC",
+"i c #FBFBFA",
+"j c #7091AF",
+"k c #5A809F",
+"l c #B4C3CE",
+"m c #F1F1EF",
+"n c #F3F3F1",
+"o c #6085A6",
+"p c #6486A1",
+"q c #A6B5BF",
+"r c #6889A6",
+"s c #A4B6C6",
+"t c #DEE3E5",
+"u c #E5E5E2",
+"v c #A4B7C5",
+"w c #6E8FAC",
+"x c #E8E8E5",
+"y c #557A9A",
+"z c #ECECE9",
+"A c #B3C3CE",
+"B c #215582",
+"C c #EFEFEC",
+"D c #DADCDA",
+"E c #245783",
+"F c #B9C8D5",
+"G c #BCCBD8",
+"H c #DEE2E5",
+"I c #DEE3E4",
+"J c #A7B7C1",
+"K c #E2E2DE",
+"L c #ABBAC6",
+"M c #B2C1CD",
+"N c #5A80A0",
+"O c #5B81A1",
+"P c #B5C4D0",
+"Q c #F2F4F5",
+"R c #F5F5F4",
+"S c none",
+/* pixels */
+"SSSgfNENfgSSS",
+"SSlBpJDLrBlSS",
+"SlyqaKuxzMOlS",
+"tBqaKuxzCmPBt",
+"fpaKuxzCmnRwf",
+"NJKuxzCmnRbFk",
+"EDuxzCmnRbdQE",
+"kLxzCmnRbdiGN",
+"vrzCmnRbdihjf",
+"tBMmnRbdiheBI",
+"SlOPRbdiheolS",
+"SSABwFQGjBlSS",
+"SSSHvNEkscSSS",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOn.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define RadioOn_width 15
+#define RadioOn_height 15
+static unsigned char RadioOn_bits[] = {
+   0xe0, 0x03, 0xf8, 0x0f, 0x1c, 0x1c, 0x0e, 0x38, 0xc6, 0x31, 0xe3, 0x63,
+   0xf3, 0x67, 0xf3, 0x67, 0xf3, 0x67, 0xe3, 0x63, 0xc6, 0x31, 0x0e, 0x38,
+   0x1c, 0x1c, 0xf8, 0x0f, 0xe0, 0x03};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOnBits_w95.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,16 @@
+#define xbm_width 12
+#define xbm_height 12
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x60, 0x00, 
+0xF0, 0x00, 
+0xF0, 0x00, 
+0x60, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOn_disabled_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,50 @@
+/* XPM */
+static char *RadioOn_disabled_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"13 13 30 1",
+/* colors */
+"a c #F7F7F6",
+"b c #DDE2E5",
+"c c #F9F9F8",
+"d c #DEE4E5",
+"e c #FBFBFA",
+"f c #FCFCFB",
+"g c #FDFDFC",
+"h c #FAFAF9",
+"i c #F1F1EF",
+"j c #F3F3F1",
+"k c #6486A1",
+"l c #F5F5F3",
+"m c #A6B5BF",
+"n c #DEE3E5",
+"o c #98C997",
+"p c #9ACC98",
+"q c #EFEFEC",
+"r c #B3C3CE",
+"s c #DADCDA",
+"t c #A0D29E",
+"u c #B9C8D5",
+"v c #E2E8DE",
+"w c #ABBAC6",
+"x c #FDFDFD",
+"y c #A9DCA6",
+"z c #98C897",
+"A c #B2C1CD",
+"B c #B5C4D0",
+"C c #F5F5F4",
+"D c none",
+/* pixels */
+"DDDisAmAsiDDD",
+"DDbmrsqsBmbDD",
+"DbwsqijjCbAbD",
+"imsjjlCaccbmi",
+"srqjivyvlhhus",
+"AsilvytpseenA",
+"mqjCyttpoffcm",
+"AsjavppzsggdA",
+"sBCclsosaxxus",
+"imbchefgxxdmi",
+"DbAbhefgxdAbD",
+"DDbmuncdumbDD",
+"DDDisAmAsiDDD",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOn_w95.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,24 @@
+/* XPM */
+static char *RadioOn_w95_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"12 12 5 1",
+/* colors */
+"a c black",
+"b c #808080",
+"c c #DFDFDF",
+"d c white",
+"e c none",
+/* pixels */
+"eeeebbbbeeee",
+"eebbaaaabbee",
+"ebaaddddaade",
+"ebaddddddcde",
+"badddaadddcd",
+"baddaaaaddcd",
+"baddaaaaddcd",
+"badddaadddcd",
+"ebaddddddcde",
+"ebccddddccde",
+"eeddccccddee",
+"eeeeddddeeee",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioOn_xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,92 @@
+/* XPM */
+static char *RadioOn_xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"13 13 72 1",
+/* colors */
+"a c #7091AF",
+"b c #B2C1CD",
+"c c #F5F5F3",
+"d c #F9F9F8",
+"e c #249624",
+"f c #215582",
+"g c #55D551",
+"h c #E0E0DB",
+"i c #E2E8DE",
+"j c #E8E8E5",
+"k c #9ACC98",
+"l c #FDFDFD",
+"m c #FDFDFC",
+"n c #5A80A0",
+"o c #29A826",
+"p c #DEE4E5",
+"q c #ECECE9",
+"r c #43C33F",
+"s c #F2F4F5",
+"t c #EEF3ED",
+"u c #139210",
+"v c #5A809F",
+"w c #DEE3E5",
+"x c #42C33F",
+"y c #DEE2E5",
+"z c #DEE3E4",
+"A c #B5C4D0",
+"B c #B9C8D5",
+"C c #FCFCFB",
+"D c #DDE2E5",
+"E c #A4B7C6",
+"F c #E7E7E3",
+"G c #557A9A",
+"H c #A4B6C6",
+"I c #A4B7C5",
+"J c #EFEFEC",
+"K c #F3F3F1",
+"L c #BCCCD9",
+"M c #F7F7F6",
+"N c #98C997",
+"O c #A7B7C1",
+"P c #6E8FAC",
+"Q c #E2E2DE",
+"R c #38B935",
+"S c #E8EEE6",
+"T c #FBFBFA",
+"U c #22A220",
+"V c #245783",
+"W c #98C897",
+"X c #ABBAC6",
+"Y c #A9DCA6",
+"Z c #B4C3CE",
+"0 c #BCCBD8",
+"1 c #21A121",
+"2 c #A0D29E",
+"3 c #EAEAE6",
+"4 c #B3C3CE",
+"5 c #E5E5E2",
+"6 c #FAFAF9",
+"7 c #6085A6",
+"8 c #6486A1",
+"9 c #E5E5E1",
+". c #4DBF4A",
+", c #5B81A1",
+"` c #DADCDA",
+"^ c #6889A6",
+"* c #A6B5BF",
+": c #F1F1EF",
+"; c #F5F5F4",
+"< c #269623",
+"> c #2AA827",
+"? c none",
+/* pixels */
+"???pEnVnEp???",
+"??Zf8O`X^fZ??",
+"?ZG*hQ5jqb,Z?",
+"wf*9F3qJ:KAfw",
+"E8hFiY.2Sc;PE",
+"nOQ3YgrokMMBv",
+"V`5q.xR1<ddsV",
+"vXjJ2>UuW6T0n",
+"I^q:SkeNtCmaE",
+"wfbKcMd6ClLfz",
+"?Z,A;MdTmL7Z?",
+"??4fPBs0afZ??",
+"???yInVvHD???",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/RadioShadow.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define RadioShadow_width 16
+#define RadioShadow_height 16
+static char RadioShadow_bits[] = {
+   0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0xf0, 0x00, 0xf0,
+   0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf8,
+   0x00, 0x7c, 0x00, 0x3e, 0xf8, 0x1f, 0xf0, 0x0f};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Request.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,14 @@
+#define Request_width 32
+#define Request_height 32
+static char Request_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00,
+   0x00, 0xf8, 0x1f, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0xfe, 0x7f, 0x00,
+   0x00, 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x0f, 0xe0, 0x01,
+   0x00, 0x0f, 0xe0, 0x01, 0x00, 0x06, 0xe0, 0x01, 0x00, 0x00, 0xe0, 0x01,
+   0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf8, 0x00,
+   0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1f, 0x00,
+   0x00, 0x80, 0x0f, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Request_XP.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,163 @@
+/* XPM */
+static char *Request_XP_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 124 2",
+/* colors */
+"aa c #E0E0DF",
+"ab c #1F3F7F",
+"ac c #A0C0FF",
+"ad c #607F80",
+"ae c white",
+"af c #809FA0",
+"ag c #5F607F",
+"ah c #3F60C0",
+"ai c #5F7FBF",
+"aj c #A0A09F",
+"ak c #C0C0BF",
+"al c #A0C0DF",
+"am c #BFDFE0",
+"an c #003F7F",
+"ao c #C0BFBF",
+"ap c #003F9F",
+"aq c #00207F",
+"ar c #606060",
+"as c #607F7F",
+"at c #E0E0FF",
+"au c #80807F",
+"av c #1F40A0",
+"aw c #7F809F",
+"ax c #9F9F9F",
+"ay c #405F40",
+"az c #9FA0BF",
+"ba c #DFDFC0",
+"bb c #5F80DF",
+"bc c #7FA0DF",
+"bd c #404040",
+"be c #E0FFFF",
+"bf c #FFFFE0",
+"bg c #BFC0E0",
+"bh c #60605F",
+"bi c #1F409F",
+"bj c #9F9F80",
+"bk c #4060A0",
+"bl c #60809F",
+"bm c #809FC0",
+"bn c #7F9FBF",
+"bo c #7F80BF",
+"bp c #002060",
+"bq c #BFC0C0",
+"br c #BFA0A0",
+"bs c #405F60",
+"bt c #C0DFFF",
+"bu c #DFDFE0",
+"bv c #1F3F80",
+"bw c #80A0FF",
+"bx c #DFE0FF",
+"by c #5F7FA0",
+"bz c #5F6080",
+"ca c #609FC0",
+"cb c #809FBF",
+"cc c #7F80A0",
+"cd c #A0A0A0",
+"ce c #C0C0C0",
+"cf c #9FA0C0",
+"cg c #A0C0E0",
+"ch c #9FC0E0",
+"ci c #C0C0DF",
+"cj c #002080",
+"ck c #BFDFFF",
+"cl c #9FC0FF",
+"cm c #5F6060",
+"cn c #6080A0",
+"co c #2040A0",
+"cp c #808080",
+"cq c #7F9FC0",
+"cr c #9FBFC0",
+"cs c #7FA0C0",
+"ct c #C0DFE0",
+"cu c #7F80C0",
+"cv c #80A0DF",
+"cw c #E0DFC0",
+"cx c #DFE0E0",
+"cy c #DFDFDF",
+"cz c #DFFFFF",
+"da c #5F5F5F",
+"db c #5F5F60",
+"dc c #3F5FA0",
+"dd c #BFC0FF",
+"de c #5F7F9F",
+"df c #80A0C0",
+"dg c #6080C0",
+"dh c #80BFDF",
+"di c #C0DFDF",
+"dj c #001F60",
+"dk c #BFBFC0",
+"dl c #5F5F40",
+"dm c #9FA0DF",
+"dn c #205FA0",
+"do c #C0E0FF",
+"dp c #003FA0",
+"dq c #DFC0C0",
+"dr c #809F9F",
+"ds c #3F5F9F",
+"dt c #7F7F80",
+"du c #609FBF",
+"dv c #BFBFA0",
+"dw c #A0BFC0",
+"dx c #80BFE0",
+"dy c #A0BFDF",
+"dz c #001F5F",
+"ea c #9FBFE0",
+"eb c #A0DFFF",
+"ec c #BFC0DF",
+"ed c #E0E0E0",
+"ee c #001F7F",
+"ef c #BFE0FF",
+"eg c #DFC0BF",
+"eh c #1F3F9F",
+"ei c #20409F",
+"ej c #7F7F7F",
+"ek c #407FC0",
+"el c #6080BF",
+"em c #9FA0A0",
+"en c #80A0BF",
+"eo c #BFBFBF",
+"ep c #9FBFDF",
+"eq c #80BFFF",
+"er c #405F5F",
+"es c #BFC0BF",
+"et c none",
+/* pixels */
+"etetetetetetetetetetcxcxedededededededbucyetetetetetetetetetetet",
+"etetetetetetetedededbfaeaeaeaeaeaeaeaeaeatedcybaetetetetetetetet",
+"etetetetetetcxedaeaeaeaeaeaeaeaeaeaeaeaeaebeatcxcibaetetetetetet",
+"etetetetbuededaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebeatedecceetetetetet",
+"etetetbuededaeaeaeaeaeaeaectbmcucqcfcxaeaeaeaeaeatcxcieoetetetet",
+"etetbucxedbeaeaeaeaeaebebycjdndneedzbpcbaeaeaeaeaebxcxecdvetetet",
+"etcybuedbeaeaeaeaeaeaecndjehbtatdsaqaqdjdfaebeaeaebebxbuazaketet",
+"etdibuataeaeaeaeaeaebeabcjcjboaecbdjapeedsbxbebebeaebxbuecdrbaet",
+"cycycxbeaeaebebebebeataqcjcjdcbeepaqapaqeibtbeatczbebebxalcfdvet",
+"cicycxbeaebebebebebebeeldnahcqaedfaqapcjeidobebxbxczbebxecdyaxba",
+"bqdibxbebebebebebebebebxckbtbxbebyeeapapaibebxbxbxbxbebxctdyemdv",
+"bqcibxbebebebebeatbebxbebebebebtbvcjahbbbtbxbxbxbxbxbxbxamalembj",
+"bqeccxbebebxbxbxbxbxbxbxbxbxbedfeeaheqdobxbxbxbxbxbxbxdoamalemau",
+"bqecbubxbxbxbxbxbxbxbxbxbxbxbxbiapeabxbxbxdododododododobgalafej",
+"dwecctbxbxbxbxbxbxbxbxbxbxbxckapdgczbxdodododododododobtbgcrdtej",
+"crdkambxbxbxbxbxbxbxbxbxdobxddcocvbxdododododododododoamaldfarbj",
+"bqdwecctbxbxdododododododododockdodododododododododockcgcrccarbr",
+"cyazdwbgbtdodododododododododmelcvckdododododockckckcgdydfbzejak",
+"etcfazdwbgbtdododododododobcdzdzdzbkdockckckckckckcgepcfbnaybjba",
+"etbacbazdwbgbtdododododododsdjcjaqanacefckckckckcgepcfcqeraraket",
+"eteteocbazcrcgckckdockckdobkeedpavbiebckckckebcgepdfbnagdaajetet",
+"etetetembnencrdycgckckckckcldcekbwdxckckebcgepepdfbnbzdlbjbaetet",
+"etetetcwemcncbdfcfepepcgcgckebebckckacchepcvdfbncnbsdlbjbaetetet",
+"etetetetcwdvawdubnenendfdfdfepchebaceadfdfbndubzerbhajbaetetetet",
+"etetetetetetakaxasdecnbnbnbnbncvchchcvbndebzbddacpdvcwetetetetet",
+"etetetetetetetcwakajcpejasadbndfeachdfagbdarcpaobaetetetetetetet",
+"etetetetetetetetetetbaegdvbremdfdhchcsdaaxdqbaetetetetetetetetet",
+"etetetetetetetetetetetetetetbacscvchcsdbdvetetetetetetetetetetet",
+"etetetetetetetetetetetetetetetesdudhcsdbaketetetetetetetetetetet",
+"etetetetetetetetetetetetetetetetcdcabcdbaketetetetetetetetetetet",
+"etetetetetetetetetetetetetetetetetcdblcmaketetetetetetetetetetet",
+"etetetetetetetetetetetetetetetetetetdvbjbaetetetetetetetetetetet",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Request_motif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,10 @@
+#define xm_question_width 22
+#define xm_question_height 22
+static char xm_question_bits[] = {
+   0xf0, 0x3f, 0x00, 0x58, 0x55, 0x00, 0xac, 0xaa, 0x00, 0xd6, 0x5f, 0x01,
+   0xea, 0xbf, 0x02, 0xf6, 0x7f, 0x01, 0xea, 0xba, 0x02, 0xf6, 0x7d, 0x05,
+   0xea, 0xba, 0x0a, 0x56, 0x7d, 0x15, 0xaa, 0xbe, 0x1e, 0x56, 0x5f, 0x01,
+   0xac, 0xaf, 0x02, 0x58, 0x57, 0x01, 0xb0, 0xaf, 0x00, 0x60, 0x55, 0x01,
+   0xa0, 0xaa, 0x00, 0x60, 0x17, 0x00, 0xa0, 0x2f, 0x00, 0x60, 0x17, 0x00,
+   0xb0, 0x2a, 0x00, 0x50, 0x55, 0x00};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Request_w95.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,45 @@
+/* XPM */
+static char *Request_w95_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 6 1",
+/* colors */
+"a c #0000FF",
+"b c white",
+"c c black",
+"d c #808080",
+"e c #C0C0C0",
+"f c none",
+/* pixels */
+"fffffffffffddddddddfffffffffffff",
+"ffffffffdddebbbbbbedddffffffffff",
+"ffffffddebbbbbbbbbbbbeddffffffff",
+"fffffdebbbbbbbbbbbbbbbbedfffffff",
+"ffffdbbbbbbbbbbbbbbbbbbbbcffffff",
+"fffdbbbbbbbeaaaaaaebbbbbbbcfffff",
+"ffdbbbbbbbeaebbaaaaebbbbbbbcffff",
+"fdebbbbbbbaabbbbaaaabbbbbbbecfff",
+"fdbbbbbbbbaaaabbaaaabbbbbbbbcdff",
+"debbbbbbbbaaaabeaaaabbbbbbbbecdf",
+"dbbbbbbbbbeaaebaaaabbbbbbbbbbcdf",
+"dbbbbbbbbbbbbbeaaabbbbbbbbbbbcdd",
+"dbbbbbbbbbbbbbaaabbbbbbbbbbbbcdd",
+"dbbbbbbbbbbbbbaaebbbbbbbbbbbbcdd",
+"dbbbbbbbbbbbbbaabbbbbbbbbbbbbcdd",
+"debbbbbbbbbbbbbbbbbbbbbbbbbbecdd",
+"fdbbbbbbbbbbbeaaebbbbbbbbbbbcddd",
+"fdebbbbbbbbbbaaaabbbbbbbbbbecddd",
+"ffdbbbbbbbbbbaaaabbbbbbbbbbcdddf",
+"fffcbbbbbbbbbeaaebbbbbbbbbcddddf",
+"ffffcbbbbbbbbbbbbbbbbbbbbcddddff",
+"fffffcebbbbbbbbbbbbbbbbecddddfff",
+"ffffffccebbbbbbbbbbbbeccddddffff",
+"fffffffdcccebbbbbbecccdddddfffff",
+"ffffffffdddcccebbbcdddddddffffff",
+"ffffffffffddddcbbbcdddddffffffff",
+"fffffffffffffdcbbbcddfffffffffff",
+"fffffffffffffffcbbcddfffffffffff",
+"ffffffffffffffffcbcddfffffffffff",
+"fffffffffffffffffccddfffffffffff",
+"ffffffffffffffffffdddfffffffffff",
+"fffffffffffffffffffddfffffffffff",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.12.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,16 @@
+#define xbm_width 12
+#define xbm_height 12
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0xFC, 0x03, 
+0xFC, 0x03, 
+0xF8, 0x01, 
+0xF8, 0x01, 
+0xF0, 0x00, 
+0xF0, 0x00, 
+0x60, 0x00, 
+0x60, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollDn_width 14
+#define ScrollDn_height 14
+static char ScrollDn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0xfc, 0x0f, 0xf8, 0x07, 0xf8, 0x07,
+   0xf0, 0x03, 0xf0, 0x03, 0xe0, 0x01, 0xe0, 0x01, 0xc0, 0x00, 0xc0, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.8.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4 @@
+#define ScrollDn_width 8
+#define ScrollDn_height 8
+static unsigned char ScrollDn_bits[] = {
+   0x00, 0x7e, 0x7e, 0x3c, 0x3c, 0x18, 0x18, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.os2.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollDn_width 14
+#define ScrollDn_height 14
+static unsigned char ScrollDn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x0e, 0x1c,
+   0x1c, 0x0e, 0x38, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.w95.11.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollDn_width 11
+#define ScrollDn_height 11
+static unsigned char ScrollDn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0xf8, 0x00,
+   0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.w95.12.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollDn_width 12
+#define ScrollDn_height 12
+static unsigned char ScrollDn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0xfc, 0x01,
+   0xf8, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.w95.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollDn_width 14
+#define ScrollDn_height 14
+static unsigned char ScrollDn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f,
+   0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.w95.9.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,13 @@
+#define xbm_width 9
+#define xbm_height 9
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0xFE, 0x00, 
+0x7C, 0x00, 
+0x38, 0x00, 
+0x10, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,8 @@
+#define ScrollDn_width 16
+#define ScrollDn_height 16
+#define ScrollDn_x_hot -1
+#define ScrollDn_y_hot -1
+static char ScrollDn_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0x0f,
+   0xf0, 0x0f, 0xe0, 0x07, 0xe0, 0x07, 0xc0, 0x03, 0xc0, 0x03, 0x80, 0x01,
+   0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,43 @@
+/* XPM */
+static char *ScrollDn.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 20 1",
+/* colors */
+"a c #A0C0F0",
+"b c black",
+"c c #D0D0F0",
+"d c #70A0D0",
+"e c #F0F0F0",
+"f c #A0B0D0",
+"g c #B0C0F0",
+"h c #C0D0D0",
+"i c #D0E0F0",
+"j c #80A0D0",
+"k c #A0C0D0",
+"l c #B0D0F0",
+"m c #E0E0F0",
+"n c #B0C0D0",
+"o c #A0C0E0",
+"p c #C0D0F0",
+"q c #7090D0",
+"r c #406080",
+"s c #90B0D0",
+"t c none",
+/* pixels */
+"tteeeeeeeeeeeett",
+"tmcpggggggggaiet",
+"ecpppgggggggggeh",
+"epppppggggggggen",
+"epppggggggggggen",
+"elpgrgggggrgggef",
+"egprrrgggrrrggef",
+"egggrrrgrrrgggef",
+"eggggrrrrrgggges",
+"egggggrrrggggges",
+"eagggggrgggggges",
+"eagggggggggggges",
+"eaggggggggggggef",
+"eigggggggggggiek",
+"teeeeeeeeeeeeeot",
+"ttsjdqqqqdddjstt",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn16_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollDn_win_width 16
+#define ScrollDn_win_height 16
+static char ScrollDn_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03,
+   0xc0, 0x03, 0xc0, 0x03, 0xf8, 0x1f, 0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03,
+   0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn2.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,32 @@
+/* XPM */
+static char *ScrollDn2.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"15 15 10 1",
+/* colors */
+"a c #B0C0F0",
+"b c #D0E0F0",
+"c c #A0C0F0",
+"d c #D0D0F0",
+"e c #F0F0F0",
+"f c #C0D0F0",
+"g c #406080",
+"h c #B0D0F0",
+"i c #E0E0F0",
+"j c none",
+/* pixels */
+"eeeeeeeeeeeeeee",
+"eidffaaaaaaacbe",
+"edffffaaaaaaaae",
+"effffffaaaaaaae",
+"effffaaaaaaaaae",
+"ehffgaaaaagaaae",
+"eafgggaaagggaae",
+"eaaagggagggaaae",
+"eaaaagggggaaaae",
+"eaaaaagggaaaaae",
+"ecaaaaagaaaaaae",
+"ecaaaaaaaaaaaae",
+"ecaaaaaaaaaaaae",
+"ebaaaaaaaaaaabe",
+"eeeeeeeeeeeeeee",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn2_disabled.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,32 @@
+/* XPM */
+static char *ScrollDn2_disabled.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"15 15 10 1",
+/* colors */
+"a c #EEEEEE",
+"b c #F1F1F1",
+"c c #FBFBFB",
+"d c #F4F4F4",
+"e c #F7F7F7",
+"f c #D5D5D5",
+"g c #F6F6F6",
+"h c #EFEFEF",
+"i c #F2F2F2",
+"j c none",
+/* pixels */
+"ccccccccccccccc",
+"cediihhhhhhhagc",
+"cdiiiihhhhhhhhc",
+"ciiiiiihhhhhhhc",
+"ciiiihhhhhhhhhc",
+"cbiifhhhhhfhhhc",
+"chifffhhhfffhhc",
+"chhhfffhfffhhhc",
+"chhhhfffffhhhhc",
+"chhhhhfffhhhhhc",
+"cahhhhhfhhhhhhc",
+"cahhhhhhhhhhhhc",
+"cahhhhhhhhhhhhc",
+"cghhhhhhhhhhhgc",
+"ccccccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn2_grey.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,32 @@
+/* XPM */
+static char *ScrollDn2_grey.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 15 10 1",
+/* colors */
+"a c #BBBBBB",
+"b c #595959",
+"c c #DCDCDC",
+"d c #F0F0F0",
+"e c #CECECE",
+"f c #C0C0C0",
+"g c #E1E1E1",
+"h c #C9C9C9",
+"i c #D3D3D3",
+"j c none",
+/* pixels */
+"dddddddddddddddd",
+"dgieeffffffffacd",
+"dieeeefffffffffd",
+"deeeeeeffffffffd",
+"deeeeffffffffffd",
+"dheefbfffffbfffd",
+"dfefbbbfffbbbffd",
+"dffffbbbfbbbfffd",
+"dfffffbbbbbffffd",
+"dffffffbbbfffffd",
+"daffffffbffffffd",
+"dafffffffffffffd",
+"dafffffffffffffd",
+"dcffffffffffffcd",
+"dddddddddddddddd",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDnMac.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,26 @@
+/* XPM */
+static char *mac_down_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"14 14 5 1",
+/* colors */
+"a c white",
+"b c #aaaaaa",
+"c c #cccccc",
+"d c #333366",
+"e c #666666",
+/* pixels */
+"aaaaaaaaaaaaae",
+"acccccccccccce",
+"acccddddddccce",
+"acccdbbbbdccce",
+"acccdbbbbdccce",
+"acccdbbbbdccce",
+"addddbbbbdddde",
+"acdbbbbbbbbdce",
+"accdbbbbbbdcce",
+"acccdbbbbdccce",
+"accccdbbdcccce",
+"acccccddccccce",
+"acccccccccccce",
+"eeeeeeeeeeeeee",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDnMotif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollDnMotif_width 11
+#define ScrollDnMotif_height 12
+static unsigned char ScrollDnMotif_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x70, 0x00,
+   0x70, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_active.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,36 @@
+/* XPM */
+static char *ScrollDn_active.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 13 1",
+/* colors */
+"a c black",
+"b c #70A0D0",
+"c c #F0F0F0",
+"d c #A0B0D0",
+"e c #C0D0D0",
+"f c #80A0D0",
+"g c #A0C0D0",
+"h c #B0C0D0",
+"i c #A0C0E0",
+"j c #7090D0",
+"k c #406080",
+"l c #90B0D0",
+"m c none",
+/* pixels */
+"mmccccccccccccmm",
+"mddfffffffffjdcm",
+"cdffffffffffffce",
+"cfffffffffffffch",
+"cfffffffffffffch",
+"cfffkfffffkfffcd",
+"cffkkkfffkkkffcd",
+"cfffkkkfkkkfffcd",
+"cffffkkkkkffffcl",
+"cfffffkkkfffffcl",
+"cjfffffkffffffcl",
+"cjffffffffffffcl",
+"cjffffffffffffcd",
+"cdfffffffffffdcg",
+"mcccccccccccccim",
+"mmlfbjjjjbbbflmm",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_disabled.w95.11.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,21 @@
+/* XPM */
+static char *ScrollDn_disabled.w95.11_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"11 11 3 1",
+/* colors */
+"a c white",
+"b c #808080",
+"c c none",
+/* pixels */
+"ccccccccccc",
+"ccccccccccc",
+"ccccccccccc",
+"ccccccccccc",
+"ccbbbbbbbcc",
+"cccbbbbbaac",
+"ccccbbbaacc",
+"cccccbaaccc",
+"ccccccacccc",
+"ccccccccccc",
+"ccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_disabled.w95.12.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,22 @@
+/* XPM */
+static char *ScrollDn_disabled.w95.12_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"12 12 3 1",
+/* colors */
+"a c white",
+"b c #808080",
+"c c none",
+/* pixels */
+"cccccccccccc",
+"cccccccccccc",
+"cccccccccccc",
+"cccccccccccc",
+"cbbbbbbbbbcc",
+"ccbbbbbbbaac",
+"cccbbbbbaacc",
+"ccccbbbaaccc",
+"cccccbaacccc",
+"ccccccaccccc",
+"cccccccccccc",
+"cccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_disabled.w95.14.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,24 @@
+/* XPM */
+static char *ScrollDn_disabled.w95.14_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"14 14 3 1",
+/* colors */
+"a c white",
+"b c #808080",
+"c c none",
+/* pixels */
+"cccccccccccccc",
+"cccccccccccccc",
+"cccccccccccccc",
+"cccccccccccccc",
+"cccccccccccccc",
+"ccbbbbbbbbbbcc",
+"cccbbbbbbbbaac",
+"ccccbbbbbbaacc",
+"cccccbbbbaaccc",
+"ccccccbbaacccc",
+"cccccccaaccccc",
+"cccccccccccccc",
+"cccccccccccccc",
+"cccccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_disabled.w95.9.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,19 @@
+/* XPM */
+static char *ScrollDn_disabled.w95.9_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"9 9 3 1",
+/* colors */
+"a c white",
+"b c #808080",
+"c c none",
+/* pixels */
+"ccccccccc",
+"ccccccccc",
+"ccccccccc",
+"cbbbbbbbc",
+"ccbbbbbac",
+"cccbbbacc",
+"ccccbaccc",
+"ccccacccc",
+"ccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_disabled.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,40 @@
+/* XPM */
+static char *ScrollDn_disabled.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 17 1",
+/* colors */
+"a c #BFBFBF",
+"b c #E4E4E4",
+"c c #EAEAEA",
+"d c #EDEDED",
+"e c #F6F6F6",
+"f c #E6E6E6",
+"g c #E9E9E9",
+"h c #EFEFEF",
+"i c #F2F2F2",
+"j c #FBFBFB",
+"k c #E2E2E2",
+"l c #EEEEEE",
+"m c #F1F1F1",
+"n c #F4F4F4",
+"o c #F7F7F7",
+"p c #D5D5D5",
+"q c none",
+/* pixels */
+"qqjjjjjjjjjjjjqq",
+"qonihhhhhhhhlejq",
+"jniiihhhhhhhhhji",
+"jiiiiihhhhhhhhjl",
+"jiiihhhhhhhhhhjl",
+"jmihphhhhhphhhjc",
+"jhippphhhppphhjc",
+"jhhhppphppphhhjc",
+"jhhhhppppphhhhjg",
+"jhhhhhppphhhhhjg",
+"jlhhhhhphhhhhhjg",
+"jlhhhhhhhhhhhhjg",
+"jlhhhhhhhhhhhhjc",
+"jehhhhhhhhhhhejd",
+"qjjjjjjjjjjjjjdq",
+"qqgfbkkkkbbbfgqq",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_entered.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,39 @@
+/* XPM */
+static char *ScrollDn_entered.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 16 1",
+/* colors */
+"a c #A0C0F0",
+"b c black",
+"c c #70A0D0",
+"d c #F0F0F0",
+"e c #A0B0D0",
+"f c #C0D0D0",
+"g c #D0E0F0",
+"h c #80A0D0",
+"i c #A0C0D0",
+"j c #B0D0F0",
+"k c #E0E0F0",
+"l c #B0C0D0",
+"m c #C0D0F0",
+"n c #7090D0",
+"o c #90B0D0",
+"p c none",
+/* pixels */
+"ppddddddddddddpp",
+"pkkkggggggggmkdp",
+"dkkkkgggggggggdf",
+"dkkkkkggggggggdl",
+"dkkkggggggggggdl",
+"dgkgogggggogggde",
+"dgkooogggoooggde",
+"dgggooogooogggde",
+"dggggoooooggggdo",
+"dgggggooogggggdo",
+"dmgggggoggggggdo",
+"dmggggggggggggdo",
+"dmggggggggggggde",
+"dkgggggggggggkdi",
+"pdddddddddddddjp",
+"ppohcnnnnccchopp",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollDn_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollDn_win_width 14
+#define ScrollDn_win_height 14
+static unsigned char ScrollDn_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01,
+   0xe0, 0x01, 0xfc, 0x0f, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.12.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,16 @@
+#define xbm_width 12
+#define xbm_height 12
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x03, 
+0xC0, 0x03, 
+0xF0, 0x03, 
+0xFC, 0x03, 
+0xFC, 0x03, 
+0xF0, 0x03, 
+0xC0, 0x03, 
+0x00, 0x03, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollLt_width 14
+#define ScrollLt_height 14
+static char ScrollLt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0f, 0xc0, 0x0f, 0xf0, 0x0f,
+   0xfc, 0x0f, 0xfc, 0x0f, 0xf0, 0x0f, 0xc0, 0x0f, 0x00, 0x0f, 0x00, 0x0c,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.8.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4 @@
+#define ScrollLt_width 8
+#define ScrollLt_height 8
+static unsigned char ScrollLt_bits[] = {
+   0x00, 0x60, 0x78, 0x7e, 0x7e, 0x78, 0x60, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.os2.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollLt_width 14
+#define ScrollLt_height 14
+static unsigned char ScrollLt_bits[] = {
+   0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00,
+   0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xc0, 0x01, 0x80, 0x03,
+   0x00, 0x03, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.w95.11.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollLt_width 11
+#define ScrollLt_height 11
+static unsigned char ScrollLt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x70, 0x00, 0x78, 0x00,
+   0x70, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.w95.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollLt_width 14
+#define ScrollLt_height 14
+static unsigned char ScrollLt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0xc0, 0x01, 0xe0, 0x01,
+   0xf0, 0x01, 0xf0, 0x01, 0xe0, 0x01, 0xc0, 0x01, 0x80, 0x01, 0x00, 0x01,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.w95.9.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,13 @@
+#define xbm_width 9
+#define xbm_height 9
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x20, 0x00, 
+0x30, 0x00, 
+0x38, 0x00, 
+0x3C, 0x00, 
+0x38, 0x00, 
+0x30, 0x00, 
+0x20, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,8 @@
+#define ScrollLt_width 16
+#define ScrollLt_height 16
+#define ScrollLt_x_hot -1
+#define ScrollLt_y_hot -1
+static char ScrollLt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x1e, 0x80, 0x1f,
+   0xe0, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xe0, 0x1f, 0x80, 0x1f, 0x00, 0x1e,
+   0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,43 @@
+/* XPM */
+static char *ScrollLt.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 20 1",
+/* colors */
+"a c #A0C0F0",
+"b c black",
+"c c #D0D0F0",
+"d c #70A0D0",
+"e c #F0F0F0",
+"f c #A0B0D0",
+"g c #B0C0F0",
+"h c #C0D0D0",
+"i c #D0E0F0",
+"j c #80A0D0",
+"k c #A0C0D0",
+"l c #B0D0F0",
+"m c #E0E0F0",
+"n c #B0C0D0",
+"o c #A0C0E0",
+"p c #C0D0F0",
+"q c #7090D0",
+"r c #406080",
+"s c #90B0D0",
+"t c none",
+/* pixels */
+"tteeeeeeeeeeeett",
+"tmcpppggggggaiet",
+"ecppppcgggggggeh",
+"eppppppgrgggggen",
+"epppppgrrrggggen",
+"elpppprrrgggggef",
+"egppprrrggggggef",
+"egpprrrgggggggef",
+"egppprrrgggggges",
+"egppggrrrggggges",
+"eagggggrrrgggges",
+"eaggggggrggggges",
+"eaggggggggggggef",
+"eigggggggggggiek",
+"teeeeeeeeeeeeeot",
+"ttsjjdqqqqddjstt",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt16_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollLt_win_width 16
+#define ScrollLt_win_height 16
+static char ScrollLt_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc0, 0x00, 0xe0, 0x00,
+   0xf0, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0x1f, 0xe0, 0x00, 0xc0, 0x00,
+   0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLtMac.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,28 @@
+/* XPM */
+static char *mac_left_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"14 14 7 1",
+/* colors */
+"a c white",
+"b c #555555",
+"c c #aaaaaa",
+"d c #cccccc",
+"e c #333366",
+"f c #666666",
+"g c none",
+/* pixels */
+"aaaaaaaaaaaaab",
+"addddddedddddb",
+"adddddeedddddb",
+"addddecedddddb",
+"adddecceeeeedb",
+"addecccccccedb",
+"adeccccccccedb",
+"adeccccccccedb",
+"addecccccccedb",
+"adddecceeeeedb",
+"addddecedddddb",
+"adddddeedddddb",
+"addddddedddddb",
+"fffffffffffffb",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLtMotif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollLtMotif_width 12
+#define ScrollLtMotif_height 11
+static unsigned char ScrollLtMotif_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x01, 0xf8, 0x01,
+   0xe0, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt_active.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,36 @@
+/* XPM */
+static char *ScrollLt_active.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 13 1",
+/* colors */
+"a c black",
+"b c #70A0D0",
+"c c #F0F0F0",
+"d c #A0B0D0",
+"e c #C0D0D0",
+"f c #80A0D0",
+"g c #A0C0D0",
+"h c #B0C0D0",
+"i c #A0C0E0",
+"j c #7090D0",
+"k c #406080",
+"l c #90B0D0",
+"m c none",
+/* pixels */
+"mmccccccccccccmm",
+"mddfffffffffjdcm",
+"cdffffdfffffffce",
+"cfffffffkfffffch",
+"cffffffkkkffffch",
+"cfffffkkkfffffcd",
+"cffffkkkffffffcd",
+"cfffkkkfffffffcd",
+"cffffkkkffffffcl",
+"cfffffkkkfffffcl",
+"cjfffffkkkffffcl",
+"cjffffffkfffffcl",
+"cjffffffffffffcd",
+"cdfffffffffffdcg",
+"mcccccccccccccim",
+"mmlffbjjjjbbflmm",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt_disabled.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,42 @@
+/* XPM */
+static char *ScrollLt_disabled.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 19 1",
+/* colors */
+"a c #E4E4E4",
+"b c #C5C5C5",
+"c c #EDEDED",
+"d c #F0F0F0",
+"e c #ACACAC",
+"f c #D4D4D4",
+"g c #DDDDDD",
+"h c #E6E6E6",
+"i c #E9E9E9",
+"j c #CACACA",
+"k c #CDCDCD",
+"l c #D6D6D6",
+"m c #DCDCDC",
+"n c #DFDFDF",
+"o c #E5E5E5",
+"p c #7F7F7F",
+"q c #F7F7F7",
+"r c #DBDBDB",
+"s c none",
+/* pixels */
+"ssqqqqqqqqqqqqss",
+"sdihhhnnnnnngcqs",
+"qihhhhinnnnnnnqo",
+"qhhhhhhnennnnnqg",
+"qhhhhhneeennnnqg",
+"qahhhheeennnnnql",
+"qnhhheeennnnnnql",
+"qnhheeennnnnnnql",
+"qnhhheeennnnnnqf",
+"qnhhnneeennnnnqf",
+"qgnnnnneeennnnqf",
+"qgnnnnnnennnnnqf",
+"qgnnnnnnnnnnnnql",
+"qcnnnnnnnnnnncqr",
+"sqqqqqqqqqqqqqms",
+"ssfkkjbbbbjjkfss",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt_entered.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,38 @@
+/* XPM */
+static char *ScrollLt_entered.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 15 1",
+/* colors */
+"a c black",
+"b c #70A0D0",
+"c c #F0F0F0",
+"d c #A0B0D0",
+"e c #C0D0D0",
+"f c #D0E0F0",
+"g c #80A0D0",
+"h c #A0C0D0",
+"i c #E0E0F0",
+"j c #B0C0D0",
+"k c #A0C0E0",
+"l c #C0D0F0",
+"m c #7090D0",
+"n c #90B0D0",
+"o c none",
+/* pixels */
+"ooccccccccccccoo",
+"oiiiiifffffflico",
+"ciiiiiifffffffce",
+"ciiiiiifnfffffcj",
+"ciiiiifnnnffffcj",
+"cfiiiinnnfffffcd",
+"cfiiinnnffffffcd",
+"cfiinnnfffffffcd",
+"cfiiinnnffffffcn",
+"cfiiffnnnfffffcn",
+"clfffffnnnffffcn",
+"clffffffnfffffcn",
+"clffffffffffffcd",
+"cifffffffffffich",
+"occcccccccccccko",
+"oonggbmmmmbbgnoo",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollLt_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollLt_win_width 14
+#define ScrollLt_win_height 14
+static unsigned char ScrollLt_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x70, 0x00, 0xf8, 0x0f,
+   0xfc, 0x0f, 0xfc, 0x0f, 0xf8, 0x0f, 0x70, 0x00, 0x60, 0x00, 0x40, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.12.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,16 @@
+#define xbm_width 12
+#define xbm_height 12
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0x0C, 0x00, 
+0x3C, 0x00, 
+0xFC, 0x00, 
+0xFC, 0x03, 
+0xFC, 0x03, 
+0xFC, 0x00, 
+0x3C, 0x00, 
+0x0C, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollRt_width 14
+#define ScrollRt_height 14
+static char ScrollRt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x3c, 0x00, 0xfc, 0x00, 0xfc, 0x03,
+   0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x03, 0xfc, 0x00, 0x3c, 0x00, 0x0c, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.8.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4 @@
+#define ScrollRt_width 8
+#define ScrollRt_height 8
+static unsigned char ScrollRt_bits[] = {
+   0x00, 0x06, 0x1e, 0x7e, 0x7e, 0x1e, 0x06, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.os2.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollRt_width 14
+#define ScrollRt_height 14
+static unsigned char ScrollRt_bits[] = {
+   0x00, 0x00, 0x30, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xc0, 0x01, 0x80, 0x03,
+   0x00, 0x07, 0x00, 0x07, 0x80, 0x03, 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00,
+   0x30, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.w95.11.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollRt_width 11
+#define ScrollRt_height 11
+static unsigned char ScrollRt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0xf0, 0x00,
+   0x70, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.w95.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollRt_width 14
+#define ScrollRt_height 14
+static unsigned char ScrollRt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x60, 0x00, 0xe0, 0x00, 0xe0, 0x01,
+   0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x01, 0xe0, 0x00, 0x60, 0x00, 0x20, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.w95.9.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,13 @@
+#define xbm_width 9
+#define xbm_height 9
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x08, 0x00, 
+0x18, 0x00, 
+0x38, 0x00, 
+0x78, 0x00, 
+0x38, 0x00, 
+0x18, 0x00, 
+0x08, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollRt_width 16
+#define ScrollRt_height 16
+static char ScrollRt_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x78, 0x00, 0xf8, 0x01,
+   0xf8, 0x07, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x07, 0xf8, 0x01, 0x78, 0x00,
+   0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,42 @@
+/* XPM */
+static char *ScrollRt.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 19 1",
+/* colors */
+"a c #A0C0F0",
+"b c #D0D0F0",
+"c c #70A0D0",
+"d c #F0F0F0",
+"e c #A0B0D0",
+"f c #B0C0F0",
+"g c #C0D0D0",
+"h c #D0E0F0",
+"i c #80A0D0",
+"j c #A0C0D0",
+"k c #B0D0F0",
+"l c #E0E0F0",
+"m c #B0C0D0",
+"n c #A0C0E0",
+"o c #C0D0F0",
+"p c #7090D0",
+"q c #406080",
+"r c #90B0D0",
+"s c none",
+/* pixels */
+"ssdddddddddddddss",
+"slbooofffffffahds",
+"dboooobffffffffdg",
+"dooooooqfffffffdm",
+"doooooqqqffffffdm",
+"dkoooooqqqfffffde",
+"dfooooofqqqffffde",
+"dfoooooffqqqfffde",
+"dfooooffqqqffffdr",
+"dfoofffqqqfffffdr",
+"daffffqqqffffffdr",
+"dafffffqfffffffdr",
+"dafffffffffffffde",
+"dhffffffffffffhdj",
+"sddddddddddddddns",
+"ssriicppppcccirss",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt16_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollRt_win_width 16
+#define ScrollRt_win_height 16
+static char ScrollRt_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x07,
+   0xf8, 0x0f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x0f, 0x00, 0x07, 0x00, 0x03,
+   0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRtMac.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,27 @@
+/* XPM */
+static char *mac_right_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"14 14 6 1",
+/* colors */
+"a c white",
+"b c #555555",
+"c c #aaaaaa",
+"d c #cccccc",
+"e c #333366",
+"f c none",
+/* pixels */
+"aaaaaaaaaaaaab",
+"adddddeddddddb",
+"adddddeedddddb",
+"adddddeceddddb",
+"adeeeeeccedddb",
+"adeccccccceddb",
+"adeccccccccedb",
+"adeccccccccedb",
+"adeccccccceddb",
+"adeeeeeccedddb",
+"adddddeceddddb",
+"adddddeedddddb",
+"adddddeddddddb",
+"bbbbbbbbbbbbbb",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRtMotif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollRtMotif_width 12
+#define ScrollRtMotif_height 11
+static unsigned char ScrollRtMotif_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x78, 0x00, 0xf8, 0x01,
+   0x78, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt_active.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,36 @@
+/* XPM */
+static char *ScrollRt_active.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 13 1",
+/* colors */
+"a c black",
+"b c #70A0D0",
+"c c #F0F0F0",
+"d c #A0B0D0",
+"e c #C0D0D0",
+"f c #80A0D0",
+"g c #A0C0D0",
+"h c #B0C0D0",
+"i c #A0C0E0",
+"j c #7090D0",
+"k c #406080",
+"l c #90B0D0",
+"m c none",
+/* pixels */
+"mmcccccccccccccmm",
+"mddffffffffffjdcm",
+"cdffffdffffffffce",
+"cffffffkfffffffch",
+"cfffffkkkffffffch",
+"cffffffkkkfffffcd",
+"cfffffffkkkffffcd",
+"cffffffffkkkfffcd",
+"cfffffffkkkffffcl",
+"cffffffkkkfffffcl",
+"cjffffkkkffffffcl",
+"cjfffffkfffffffcl",
+"cjfffffffffffffcd",
+"cdffffffffffffdcg",
+"mccccccccccccccim",
+"mmlffbjjjjbbbflmm",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt_disabled.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,42 @@
+/* XPM */
+static char *ScrollRt_disabled.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 19 1",
+/* colors */
+"a c #E4E4E4",
+"b c #C5C5C5",
+"c c #EDEDED",
+"d c #F0F0F0",
+"e c #ACACAC",
+"f c #D4D4D4",
+"g c #DDDDDD",
+"h c #E6E6E6",
+"i c #E9E9E9",
+"j c #CACACA",
+"k c #CDCDCD",
+"l c #D6D6D6",
+"m c #DCDCDC",
+"n c #DFDFDF",
+"o c #E5E5E5",
+"p c #7F7F7F",
+"q c #F7F7F7",
+"r c #DBDBDB",
+"s c none",
+/* pixels */
+"ssqqqqqqqqqqqqqss",
+"sdihhhnnnnnnngcqs",
+"qihhhhinnnnnnnnqo",
+"qhhhhhhennnnnnnqg",
+"qhhhhheeennnnnnqg",
+"qahhhhheeennnnnql",
+"qnhhhhhneeennnnql",
+"qnhhhhhnneeennnql",
+"qnhhhhnneeennnnqf",
+"qnhhnnneeennnnnqf",
+"qgnnnneeennnnnnqf",
+"qgnnnnnennnnnnnqf",
+"qgnnnnnnnnnnnnnql",
+"qcnnnnnnnnnnnncqr",
+"sqqqqqqqqqqqqqqms",
+"ssfkkjbbbbjjjkfss",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt_entered.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,38 @@
+/* XPM */
+static char *ScrollRt_entered.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"17 16 15 1",
+/* colors */
+"a c black",
+"b c #70A0D0",
+"c c #F0F0F0",
+"d c #A0B0D0",
+"e c #C0D0D0",
+"f c #D0E0F0",
+"g c #80A0D0",
+"h c #A0C0D0",
+"i c #E0E0F0",
+"j c #B0C0D0",
+"k c #A0C0E0",
+"l c #C0D0F0",
+"m c #7090D0",
+"n c #90B0D0",
+"o c none",
+/* pixels */
+"oocccccccccccccoo",
+"oiiiiiffffffflico",
+"ciiiiiiffffffffce",
+"ciiiiiinfffffffcj",
+"ciiiiinnnffffffcj",
+"cfiiiiinnnfffffcd",
+"cfiiiiifnnnffffcd",
+"cfiiiiiffnnnfffcd",
+"cfiiiiffnnnffffcn",
+"cfiifffnnnfffffcn",
+"clffffnnnffffffcn",
+"clfffffnfffffffcn",
+"clfffffffffffffcd",
+"ciffffffffffffich",
+"occccccccccccccko",
+"oonggbmmmmbbbgnoo",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollRt_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollRt_win_width 14
+#define ScrollRt_win_height 14
+static unsigned char ScrollRt_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x01, 0x80, 0x03, 0xfc, 0x07,
+   0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x07, 0x80, 0x03, 0x80, 0x01, 0x80, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollThumb.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,25 @@
+/* XPM */
+static char *ScrollThumb.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"7 9 9 1",
+/* colors */
+"a c #C5D6FC",
+"b c #C2D5FC",
+"c c #EEF4FE",
+"d c #BAD1FC",
+"e c #C8D6FB",
+"f c #8CB0F8",
+"g c #BAD3FC",
+"h c #C5D5FC",
+"i c none",
+/* pixels */
+"ccccccd",
+"effffff",
+"ccccccd",
+"effffff",
+"ccccccg",
+"effffff",
+"ccccccg",
+"effffff",
+"eaahbbg",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollThumbMac.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,26 @@
+/* XPM */
+static char *mac_thumb_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"14 15 4 1",
+/* colors */
+"a c #aaaaaa",
+"b c #cccccc",
+"c c #333366",
+"d c #666666",
+/* pixels */
+"bbbbbbbbbbbbbc",
+"baaaaaaaaaaaac",
+"baaaaaaaaaaaac",
+"baaabbbbbbaaac",
+"baaaddddddaaac",
+"baaabbbbbbaaac",
+"baaaddddddaaac",
+"baaabbbbbbaaac",
+"baaaddddddaaac",
+"baaabbbbbbaaac",
+"baaaddddddaaac",
+"baaabbbbbbaaac",
+"baaaaaaaaaaaac",
+"baaaaaaaaaaaac",
+"cccccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.12.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,16 @@
+#define xbm_width 12
+#define xbm_height 12
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0x60, 0x00, 
+0x60, 0x00, 
+0xF0, 0x00, 
+0xF0, 0x00, 
+0xF8, 0x01, 
+0xF8, 0x01, 
+0xFC, 0x03, 
+0xFC, 0x03, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollUp_width 14
+#define ScrollUp_height 14
+static char ScrollUp_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe0, 0x01, 0xe0, 0x01,
+   0xf0, 0x03, 0xf0, 0x03, 0xf8, 0x07, 0xf8, 0x07, 0xfc, 0x0f, 0xfc, 0x0f,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.8.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,4 @@
+#define ScrollUp_width 8
+#define ScrollUp_height 8
+static unsigned char ScrollUp_bits[] = {
+   0x00, 0x18, 0x18, 0x3c, 0x3c, 0x7e, 0x7e, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.os2.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollUp_width 14
+#define ScrollUp_height 14
+static unsigned char ScrollUp_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0x01, 0xf0, 0x03,
+   0x38, 0x07, 0x1c, 0x0e, 0x0e, 0x1c, 0x06, 0x18, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.w95.11.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollUp_width 11
+#define ScrollUp_height 11
+static unsigned char ScrollUp_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x70, 0x00, 0xf8, 0x00,
+   0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.w95.14.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollUp_width 14
+#define ScrollUp_height 14
+static unsigned char ScrollUp_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0x01,
+   0xf0, 0x03, 0xf8, 0x07, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.w95.9.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,13 @@
+#define xbm_width 9
+#define xbm_height 9
+static char xbm_bits[] = {
+0x00, 0x00, 
+0x00, 0x00, 
+0x10, 0x00, 
+0x38, 0x00, 
+0x7C, 0x00, 
+0xFE, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+0x00, 0x00, 
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,8 @@
+#define ScrollUp_width 16
+#define ScrollUp_height 16
+#define ScrollUp_x_hot -1
+#define ScrollUp_y_hot -1
+static char ScrollUp_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0xc0, 0x03,
+   0xc0, 0x03, 0xe0, 0x07, 0xe0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, 0xf8, 0x1f,
+   0xf8, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,43 @@
+/* XPM */
+static char *ScrollUp.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 20 1",
+/* colors */
+"a c #A0C0F0",
+"b c black",
+"c c #D0D0F0",
+"d c #70A0D0",
+"e c #F0F0F0",
+"f c #A0B0D0",
+"g c #B0C0F0",
+"h c #C0D0D0",
+"i c #D0E0F0",
+"j c #80A0D0",
+"k c #A0C0D0",
+"l c #B0D0F0",
+"m c #E0E0F0",
+"n c #B0C0D0",
+"o c #A0C0E0",
+"p c #C0D0F0",
+"q c #7090D0",
+"r c #406080",
+"s c #90B0D0",
+"t c none",
+/* pixels */
+"tteeeeeeeeeeeett",
+"tmcpggggggggaiet",
+"ecpppgggggggggeh",
+"epppppggggggggen",
+"epppgggrggggggen",
+"elpgggrrrgggggef",
+"egpggrrrrrggggef",
+"egggrrrgrrrgggef",
+"eggrrrgggrrrgges",
+"egggrgggggrggges",
+"eagggggggggggges",
+"eagggggggggggges",
+"eaggggggggggggef",
+"eigggggggggggiek",
+"teeeeeeeeeeeeeot",
+"ttsjdqqqqdddjstt",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp16_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollUp_win_width 16
+#define ScrollUp_win_height 16
+static char ScrollUp_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07,
+   0xf0, 0x0f, 0xf8, 0x1f, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03,
+   0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUpMac.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,26 @@
+/* XPM */
+static char *mac_up_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"14 14 5 1",
+/* colors */
+"a c white",
+"b c #aaaaaa",
+"c c #cccccc",
+"d c #333366",
+"e c #666666",
+/* pixels */
+"aaaaaaaaaaaaae",
+"acccccccccccce",
+"acccccddccccce",
+"accccdbbdcccce",
+"acccdbbbbdccce",
+"accdbbbbbbdcce",
+"acdbbbbbbbbdce",
+"addddbbbbdddde",
+"acccdbbbbdccce",
+"acccdbbbbdccce",
+"acccdbbbbdccce",
+"acccddddddccce",
+"acccccccccccce",
+"eeeeeeeeeeeeee",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUpMotif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,5 @@
+#define ScrollUpMotif_width 11
+#define ScrollUpMotif_height 12
+static unsigned char ScrollUpMotif_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00,
+   0x70, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp_active.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,36 @@
+/* XPM */
+static char *ScrollUp_active.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 13 1",
+/* colors */
+"a c black",
+"b c #70A0D0",
+"c c #F0F0F0",
+"d c #A0B0D0",
+"e c #C0D0D0",
+"f c #80A0D0",
+"g c #A0C0D0",
+"h c #B0C0D0",
+"i c #A0C0E0",
+"j c #7090D0",
+"k c #406080",
+"l c #90B0D0",
+"m c none",
+/* pixels */
+"mmccccccccccccmm",
+"mddfffffffffjdcm",
+"cdffffffffffffce",
+"cfffffffffffffch",
+"cffffffkffffffch",
+"cfffffkkkfffffcd",
+"cffffkkkkkffffcd",
+"cfffkkkfkkkfffcd",
+"cffkkkfffkkkffcl",
+"cfffkfffffkfffcl",
+"cjffffffffffffcl",
+"cjffffffffffffcl",
+"cjffffffffffffcd",
+"cdfffffffffffdcg",
+"mcccccccccccccim",
+"mmlfbjjjjbbbflmm",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp_disabled.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,32 @@
+/* XPM */
+static char *ScrollUp_disabled.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"15 15 10 1",
+/* colors */
+"a c #EEEEEE",
+"b c #F1F1F1",
+"c c #FBFBFB",
+"d c #F4F4F4",
+"e c #F7F7F7",
+"f c #D5D5D5",
+"g c #F6F6F6",
+"h c #EFEFEF",
+"i c #F2F2F2",
+"j c none",
+/* pixels */
+"ccccccccccccccc",
+"cediihhhhhhhagc",
+"cdiiiihhhhhhhhc",
+"ciiiiiihhhhhhhc",
+"ciiiihhfhhhhhhc",
+"cbiihhfffhhhhhc",
+"chihhfffffhhhhc",
+"chhhfffhfffhhhc",
+"chhfffhhhfffhhc",
+"chhhfhhhhhfhhhc",
+"cahhhhhhhhhhhhc",
+"cahhhhhhhhhhhhc",
+"cahhhhhhhhhhhhc",
+"cghhhhhhhhhhhgc",
+"ccccccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp_entered.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,28 @@
+/* XPM */
+static char *ScrollUp_entered.xp_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"15 15 6 1",
+/* colors */
+"a c #D0E0F0",
+"b c #C0D0F0",
+"c c #406080",
+"d c #F0F0F0",
+"e c #E0E0F0",
+"f c none",
+/* pixels */
+"ddddddddddddddd",
+"deeeeaaaaaaabed",
+"deeeeeaaaaaaaad",
+"deeeeeeaaaaaaad",
+"deeeeaacaaaaaad",
+"daeeaacccaaaaad",
+"daeaacccccaaaad",
+"daaacccacccaaad",
+"daacccaaacccaad",
+"daaacaaaaacaaad",
+"dbaaaaaaaaaaaad",
+"dbaaaaaaaaaaaad",
+"dbaaaaaaaaaaaad",
+"deaaaaaaaaaaaed",
+"ddddddddddddddd",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollUp_win.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define ScrollUp_win_width 14
+#define ScrollUp_win_height 14
+static unsigned char ScrollUp_win_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xe0, 0x01, 0xf0, 0x03, 0xf8, 0x07,
+   0xfc, 0x0f, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x01,
+   0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollVThumbBot.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,44 @@
+/* XPM */
+static char *ScrollVThumbBot_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 14 23 1",
+/* colors */
+"a c black",
+"b c #98B0D0",
+"c c #90B0D8",
+"d c #7898D0",
+"e c #C8D0F8",
+"f c #98B0D8",
+"g c #C8D8F8",
+"h c #78A0D0",
+"i c #B0C0F0",
+"j c #80A0D0",
+"k c #B0C8F0",
+"l c #D8E0F0",
+"m c #B0C8F8",
+"n c #F8F8F8",
+"o c #B8C8F0",
+"p c #D8E0F8",
+"q c #B8C8F8",
+"r c #B0C0D0",
+"s c #B8D0F8",
+"t c #A8C0E0",
+"u c #90A8D8",
+"v c #C0D0F8",
+"w c none",
+/* pixels */
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkegevvvvvsmmonb",
+"nkveevvvvvsmmknb",
+"nogggvvvvvsmqonb",
+"npioooooookiilnr",
+"fnnnnnnnnnnnnntw",
+"wujddddddddhjcww",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/ScrollVThumbTop.xp.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,41 @@
+/* XPM */
+static char *ScrollVThumbTop_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 12 22 1",
+/* colors */
+"a c black",
+"b c #98B0D0",
+"c c #C8D0F8",
+"d c #A8C0F0",
+"e c #C8D8F8",
+"f c #B0C0F0",
+"g c #D0D8F8",
+"h c #B0C8F0",
+"i c #C0D0D8",
+"j c #D8E0F0",
+"k c #D0E0F8",
+"l c #B0C8F8",
+"m c #F8F8F8",
+"n c #B8C8F0",
+"o c #D8E0F8",
+"p c #B8C8F8",
+"q c #B0C0D0",
+"r c #B8D0F8",
+"s c #C0D0F0",
+"t c #E0E8F8",
+"u c #C0D0F8",
+"v c none",
+/* pixels */
+"vmmmmmmmmmmmmmvv",
+"mtgesssnnnnfdomv",
+"mgtokkkgeeeupnmi",
+"mhcecuuuuurllnmb",
+"mhuccuuuuurllhmb",
+"mneeeuuuuurlpnmb",
+"mneeeuuuuurlpnmb",
+"mneeeuuuuurlpnmb",
+"mneeeuuuuurlpnmb",
+"mneeeuuuuurlpnmb",
+"mneeeuuuuurlpnmb",
+"mofnnnnnnnhffjmq",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/VHPanel.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define VHPanel_width 16
+#define VHPanel_height 16
+static char VHPanel_bits[] = {
+   0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x84, 0x21, 0x88, 0x11,
+   0x90, 0x09, 0xbf, 0xfd, 0x90, 0x09, 0x88, 0x11, 0x84, 0x21, 0x80, 0x01,
+   0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/VHPanel_m.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define VHPanel_m_width 16
+#define VHPanel_m_height 16
+static char VHPanel_m_bits[] = {
+   0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc6, 0x63, 0xce, 0x73, 0xdc, 0x3b,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0x3b, 0xce, 0x73, 0xc6, 0x63,
+   0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/VVPanel.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define VVPanel_width 16
+#define VVPanel_height 16
+static char VVPanel_bits[] = {
+   0x80, 0x00, 0x80, 0x00, 0x90, 0x04, 0xa0, 0x02, 0xc0, 0x01, 0x80, 0x00,
+   0x00, 0x00, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x00, 0x80, 0x00, 0xc0, 0x01,
+   0xa0, 0x02, 0x90, 0x04, 0x80, 0x00, 0x80, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/VVPanel_m.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,6 @@
+#define VVPanel_m_width 16
+#define VVPanel_m_height 16
+static char VVPanel_m_bits[] = {
+   0xc0, 0x01, 0xd8, 0x0d, 0xf8, 0x0f, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01,
+   0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xe0, 0x03,
+   0xf0, 0x07, 0xf8, 0x0f, 0xd8, 0x0d, 0xc0, 0x01};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Warning.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,14 @@
+#define Warning_width 32
+#define Warning_height 32
+static char Warning_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f,
+   0x18, 0x00, 0x00, 0x18, 0xd8, 0xff, 0xff, 0x1b, 0xd8, 0x7f, 0xfe, 0x1b,
+   0xb0, 0x3f, 0xfc, 0x0d, 0xb0, 0x3f, 0xfc, 0x0d, 0x60, 0x3f, 0xfc, 0x06,
+   0x60, 0x3f, 0xfc, 0x06, 0xc0, 0x3e, 0x7c, 0x03, 0xc0, 0x3e, 0x7c, 0x03,
+   0x80, 0x3d, 0xbc, 0x01, 0x80, 0x7d, 0xbe, 0x01, 0x00, 0x7b, 0xde, 0x00,
+   0x00, 0x7b, 0xde, 0x00, 0x00, 0x76, 0x6e, 0x00, 0x00, 0xf6, 0x6f, 0x00,
+   0x00, 0xec, 0x37, 0x00, 0x00, 0x6c, 0x36, 0x00, 0x00, 0x58, 0x1a, 0x00,
+   0x00, 0xd8, 0x1b, 0x00, 0x00, 0xb0, 0x0d, 0x00, 0x00, 0xb0, 0x0d, 0x00,
+   0x00, 0x60, 0x06, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0xc0, 0x03, 0x00,
+   0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Warning_XP.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,191 @@
+/* XPM */
+static char *Warning_XP_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 28 156 2",
+/* colors */
+"aa c #E0C040",
+"ab c #FFBF1F",
+"ac c #DFDFDF",
+"ad c #A06020",
+"ae c #FFDF5F",
+"af c #9F7F5F",
+"ag c #A08060",
+"ah c #BFA05F",
+"ai c #E0BF60",
+"aj c #BFA07F",
+"ak c #BF9F7F",
+"al c #E0DFA0",
+"am c #FFDF7F",
+"an c #FFFFBF",
+"ao c #E0E0BF",
+"ap c #FFE09F",
+"aq c #805F20",
+"ar c #DFBF40",
+"as c #9F7F40",
+"at c #405F80",
+"au c #FFE040",
+"av c #202060",
+"aw c #DFC0C0",
+"ax c white",
+"ay c #FFE060",
+"az c #80605F",
+"ba c #3F3F7F",
+"bb c #DFA040",
+"bc c #9F807F",
+"bd c #C0A080",
+"be c #5F60A0",
+"bf c #DFC07F",
+"bg c #C0C0BF",
+"bh c #DFBFA0",
+"bi c #9F9FBF",
+"bj c #605F40",
+"bk c #FFFFDF",
+"bl c #A08040",
+"bm c #C0BF60",
+"bn c #80603F",
+"bo c #203F7F",
+"bp c #9F5F20",
+"bq c #FFE05F",
+"br c #A0805F",
+"bs c #9F6040",
+"bt c #E0DF7F",
+"bu c #DFA03F",
+"bv c #7F7F7F",
+"bw c #C0A07F",
+"bx c #E0E0A0",
+"by c #A0A09F",
+"bz c #7F80BF",
+"ca c #DFDFBF",
+"cb c #FFE0A0",
+"cc c #E0DFBF",
+"cd c #FFDF3F",
+"ce c #E0DF5F",
+"cf c #807F60",
+"cg c #DFDFE0",
+"ch c #A0803F",
+"ci c #E0BF40",
+"cj c #5F4040",
+"ck c #E0E080",
+"cl c #9F7F60",
+"cm c #404080",
+"cn c #E0A03F",
+"co c #9F401F",
+"cp c #C0BF9F",
+"cq c #BF8060",
+"cr c #BFA080",
+"cs c #BFA09F",
+"ct c #DFBF9F",
+"cu c #8080BF",
+"cv c #BFA0A0",
+"cw c #E0E0DF",
+"cx c #FFE0C0",
+"cy c #A07F3F",
+"cz c #C0A03F",
+"da c #605F5F",
+"db c #7F4020",
+"dc c #60403F",
+"dd c #A09F80",
+"de c #BF803F",
+"df c #60607F",
+"dg c #FFC040",
+"dh c #BF8040",
+"di c #FFFFA0",
+"dj c #7F7FA0",
+"dk c #E0E09F",
+"dl c #E0A05F",
+"dm c #E0DFC0",
+"dn c #FFBF00",
+"do c #E0BF1F",
+"dp c #FFC01F",
+"dq c #E0DFDF",
+"dr c #806040",
+"ds c #7F6040",
+"dt c #404060",
+"du c #7F5F40",
+"dv c #5F403F",
+"dw c #FFFF80",
+"dx c #BF9F60",
+"dy c #606080",
+"dz c #9F9F80",
+"ea c #BF9F5F",
+"eb c #BFBFA0",
+"ec c #6060A0",
+"ed c #5F5F9F",
+"ee c #DFA05F",
+"ef c #FFFFC0",
+"eg c #FFC000",
+"eh c #E0E0C0",
+"ei c #DFC0BF",
+"ej c #FFFFE0",
+"ek c #DFA020",
+"el c #BF9F40",
+"em c #7F5F3F",
+"en c #3F3F60",
+"eo c #9F5F1F",
+"ep c #C09F5F",
+"eq c #607FA0",
+"er c #E0C05F",
+"es c #405F9F",
+"et c #40407F",
+"eu c #A09F7F",
+"ev c #FFE07F",
+"ew c #809FBF",
+"ex c #5F609F",
+"ey c #E0DF9F",
+"ez c #DFC0A0",
+"fa c #C09F20",
+"fb c #C0BFBF",
+"fc c #605F3F",
+"fd c #E0BF3F",
+"fe c #9F7F3F",
+"ff c #805F3F",
+"fg c #DFA01F",
+"fh c #DFBF3F",
+"fi c #9F6020",
+"fj c #9F8060",
+"fk c #FFE0E0",
+"fl c #C0A05F",
+"fm c #FFFF7F",
+"fn c #7F403F",
+"fo c #DF9F3F",
+"fp c #FFFF9F",
+"fq c #607FBF",
+"fr c #FFE080",
+"fs c #C0BFA0",
+"ft c #DFDFC0",
+"fu c #FFDF20",
+"fv c #BFBFBF",
+"fw c #603F20",
+"fx c #FFDF40",
+"fy c #FFC020",
+"fz c none",
+/* pixels */
+"fzfzfzfzfzfzfzfzfzfzfzfzfzdmbwdxctfzfzfzfzfzfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzfzfzfzfzbweifkdxcsfzfzfzfzfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzfzfzfzezbdaxdierbrbgfzfzfzfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzfzfzfzdxcwbkaybqepbcdmfzfzfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzfzfzcpcpaxfpevaycebrcsfzfzfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzfzdmdxaxbkfpdwevayflfjftfzfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzfzajeiaxandifpdwayaeblddfzfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzezakaxejefdifpckevbqarafbgfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzfzdxdqaxejftewbzfqcxayfxblbcfzfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzfzcpbdaxaxbkftfqfqfqaxayfxfdasebfzfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzdmbrfkaxbkbkcafqeqeqaxbqfxcddeclftfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzfzajbhaxefefanaoeqecdjejbqfxcdfybsddfzfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzeicqbkefdididibxecbedjejfxcdfudpfaazbgfzfzfzfzfzfzfz",
+"fzfzfzfzfzfzagaleffpfpfpfpfrbeexbzbkfxcdfyegdnfebcfzfzfzfzfzfzfz",
+"fzfzfzfzfzcpdxanfpevfmdwfmevexedcuefcdfydpegegekdrebfzfzfzfzfzfz",
+"fzfzfzfzdmbrdkfpayayayayayayexescuanfudpegegdpfucycfftfzfzfzfzfz",
+"fzfzfzfzcrbmfpbqfxaebqbqbqaedyatewcbdpegegdpfycdaaffbyfzfzfzfzfz",
+"fzfzfzcabrdwfmcdcdcdfxfxfxcddfcmbiapegegdpfycdfxaeeldsftfzfzfzfz",
+"fzfzfzagbfdwfudpfyfyfufufufyczfvcgamegdpdpfucdfxbqaybnbcfzfzfzfz",
+"fzfzfsbrfmauegegdpdpdpdpdpdpabfgegegdpfyfucdfxbqayevbmemfbfzfzfz",
+"fzehafbtfmfydpegegegegegegdodtbadafxfycdcdfxbqayevdwfpascfdmfzfz",
+"fzcrahfmbqfufydpdpdpdpdpdpchbaboavacfxfxaebqayevdwfpdieyfnbyfzfz",
+"ftasevevfxfxcdcdfufufyfyfyfhenavetaxbqbqayayevdwfpdianefagduftfz",
+"agbmfmaybqbqfxfxfxcdcdcdcdfxarcvfkdibqayevfmdwfpdianefbkccdbdzfz",
+"bsevevayayayaeaeaeaedgaaaacicicifdcncncnbububbbbeedlaiaifobpbjaw",
+"eubleaeaeleleldhdhblblchcycycyadfifibpbpeoeocoeoeoeoeoeoaqfwdvbg",
+"fzfjbjbjbjbjbjfcfcdcdcdcdvdvdvdvdvdvdvdvdvdvdvdvdvdvdvdvdvcjbvfz",
+"fzfzbgfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbbgfzfz",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Warning_motif.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,7 @@
+#define xm_warning_width 9
+#define xm_warning_height 22
+static char xm_warning_bits[] = {
+   0x00, 0x00, 0x18, 0x00, 0x2c, 0x00, 0x56, 0x00, 0x2a, 0x00, 0x56, 0x00,
+   0x2a, 0x00, 0x56, 0x00, 0x2c, 0x00, 0x14, 0x00, 0x2c, 0x00, 0x14, 0x00,
+   0x2c, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x14, 0x00,
+   0x2c, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/Warning_w95.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,45 @@
+/* XPM */
+static char *Warning_w95_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 6 1",
+/* colors */
+"a c black",
+"b c #C0C0C0",
+"c c yellow",
+"d c #808000",
+"e c #808080",
+"f c none",
+/* pixels */
+"fffffffffffffdddffffffffffffffff",
+"ffffffffffffdccbafffffffffffffff",
+"fffffffffffdccccbaefffffffffffff",
+"fffffffffffdcccccaeeffffffffffff",
+"ffffffffffdccccccbaeefffffffffff",
+"ffffffffffdcccccccaeefffffffffff",
+"fffffffffdccccccccbaeeffffffffff",
+"fffffffffdcccccccccaeeffffffffff",
+"ffffffffdccccccccccbaeefffffffff",
+"ffffffffdcccbaaabcccaeefffffffff",
+"fffffffdccccaaaaacccbaeeffffffff",
+"fffffffdccccaaaaaccccaeeffffffff",
+"ffffffdcccccaaaaaccccbaeefffffff",
+"ffffffdcccccaaaaacccccaeefffffff",
+"fffffdccccccaaaaacccccbaeeffffff",
+"fffffdccccccdaaadccccccaeeffffff",
+"ffffdcccccccbaaabccccccbaeefffff",
+"ffffdccccccccaaaccccccccaeefffff",
+"fffdcccccccccdadccccccccbaeeffff",
+"fffdcccccccccbabcccccccccaeeffff",
+"ffdcccccccccccaccccccccccbaeefff",
+"ffdcccccccccccccccccccccccaeefff",
+"fdcccccccccccbaabcccccccccbaeeff",
+"fdcccccccccccaaaaccccccccccaeeff",
+"dccccccccccccaaaaccccccccccbaeef",
+"dccccccccccccbaabcccccccccccaeef",
+"dcccccccccccccccccccccccccccaeee",
+"dccccccccccccccccccccccccccbaeee",
+"fdccccccccccccccccccccccccbaeeee",
+"ffdaaaaaaaaaaaaaaaaaaaaaaaaeeeee",
+"ffffeeeeeeeeeeeeeeeeeeeeeeeeeeef",
+"fffffeeeeeeeeeeeeeeeeeeeeeeeeeff",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/no_entry.xpm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,42 @@
+/* XPM */
+static char *no_entry_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 3 1",
+/* colors */
+"a c red",
+"b c white",
+"c c none",
+/* pixels */
+"cccccccccccaaaaaaaaacccccccccccc",
+"cccccccccaaaaaaaaaaaaacccccccccc",
+"cccccccaaaaaaaaaaaaaaaaacccccccc",
+"ccccccaaaaaaaaaaaaaaaaaaaccccccc",
+"cccccaaaaaaaaaaaaaaaaaaaaacccccc",
+"ccccaaaaaaaaaaaaaaaaaaaaaaaccccc",
+"cccaaaaaaaaaaaaaaaaaaaaaaaaacccc",
+"ccaaaaaaaaaaaaaaaaaaaaaaaaaaaccc",
+"ccaaaaaaaaaaaaaaaaaaaaaaaaaaaccc",
+"caaaaaaaaaaaaaaaaaaaaaaaaaaaaacc",
+"caaaaaaaaaaaaaaaaaaaaaaaaaaaaacc",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac",
+"aaaabbbbbbbbbbbbbbbbbbbbbbbaaaac",
+"aaaabbbbbbbbbbbbbbbbbbbbbbbaaaac",
+"aaaabbbbbbbbbbbbbbbbbbbbbbbaaaac",
+"aaaabbbbbbbbbbbbbbbbbbbbbbbaaaac",
+"aaaabbbbbbbbbbbbbbbbbbbbbbbaaaac",
+"aaaabbbbbbbbbbbbbbbbbbbbbbbaaaac",
+"aaaabbbbbbbbbbbbbbbbbbbbbbbaaaac",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac",
+"caaaaaaaaaaaaaaaaaaaaaaaaaaaaacc",
+"caaaaaaaaaaaaaaaaaaaaaaaaaaaaacc",
+"ccaaaaaaaaaaaaaaaaaaaaaaaaaaaccc",
+"ccaaaaaaaaaaaaaaaaaaaaaaaaaaaccc",
+"cccaaaaaaaaaaaaaaaaaaaaaaaaacccc",
+"ccccaaaaaaaaaaaaaaaaaaaaaaaccccc",
+"cccccaaaaaaaaaaaaaaaaaaaaacccccc",
+"ccccccaaaaaaaaaaaaaaaaaaaccccccc",
+"cccccccaaaaaaaaaaaaaaaaacccccccc",
+"cccccccccaaaaaaaaaaaaacccccccccc",
+"cccccccccccaaaaaaaaacccccccccccc",
+"cccccccccccccccccccccccccccccccc",
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/off.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,14 @@
+#define off_width 32
+#define off_height 32
+static unsigned char off_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0xbc, 0xc9, 0x34, 0x3d, 0x84, 0x29, 0x35, 0x05, 0x84, 0x2a, 0x54, 0x05,
+   0x9c, 0x2a, 0x54, 0x1d, 0x84, 0xac, 0x95, 0x05, 0x84, 0x2c, 0x95, 0x05,
+   0x84, 0x28, 0x15, 0x05, 0xbc, 0xc8, 0x14, 0x3d, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x3d, 0x00, 0x80, 0x28, 0x04, 0x00,
+   0x80, 0x28, 0x04, 0x00, 0x80, 0xe8, 0x1c, 0x00, 0x80, 0x28, 0x04, 0x00,
+   0x80, 0x28, 0x04, 0x00, 0x80, 0x28, 0x04, 0x00, 0x00, 0x27, 0x04, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bitmaps/stop.xbm	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,14 @@
+#define stop_width 32
+#define stop_height 32
+static unsigned char stop_bits[] = {
+   0x00, 0xfe, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x01,
+   0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0x0f,
+   0xf8, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0x7f,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x83, 0x71, 0xfc,
+   0xdf, 0xee, 0x6e, 0xfb, 0xdf, 0xef, 0x6e, 0xfb, 0xdf, 0xef, 0x6e, 0xfb,
+   0x3f, 0xef, 0x6e, 0xfc, 0xff, 0xee, 0x6e, 0xff, 0xff, 0xee, 0x6e, 0xff,
+   0xdf, 0xee, 0x6e, 0xff, 0x3f, 0xef, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff,
+   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+   0xfc, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0x0f,
+   0xe0, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0x03, 0x80, 0xff, 0xff, 0x01,
+   0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0x7f, 0x00};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bmake.bat	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,8 @@
+@REM -------
+@REM make using Borland bcc32
+@REM type bmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+make.exe -N -f bc.mak %*
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lccmake.bat	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,8 @@
+@REM -------
+@REM make using lcc compiler
+@REM type lccmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+make.exe -N -f bc.mak -DUSELCC=1 %*
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libInit.cc	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,103 @@
+/*
+ * $Header: /cvs/stx/stx/libwidg/libInit.cc,v 1.31 2013-12-05 09:22:12 stefan Exp $
+ *
+ * DO NOT EDIT
+ * automagically generated from the projectDefinition: stx_libwidg.
+ */
+#define __INDIRECTVMINITCALLS__
+#include <stc.h>
+
+#ifdef WIN32
+# pragma codeseg INITCODE "INITCODE"
+#endif
+
+#if defined(INIT_TEXT_SECTION) || defined(DLL_EXPORT)
+DLL_EXPORT void _libstx_libwidg_Init() INIT_TEXT_SECTION;
+DLL_EXPORT void _libstx_libwidg_InitDefinition() INIT_TEXT_SECTION;
+#endif
+
+void _libstx_libwidg_InitDefinition(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("libstx_libwidg__DFN", _libstx_libwidg_InitDefinition, "stx:libwidg");
+_stx_137libwidg_Init(pass,__pRT__,snd);
+
+__END_PACKAGE__();
+}
+
+void _libstx_libwidg_Init(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("libstx_libwidg", _libstx_libwidg_Init, "stx:libwidg");
+_ButtonController_Init(pass,__pRT__,snd);
+_DialogBox_Init(pass,__pRT__,snd);
+_EditTextViewCompletionSupport_Init(pass,__pRT__,snd);
+_EnterFieldGroup_Init(pass,__pRT__,snd);
+_FramedBox_Init(pass,__pRT__,snd);
+_GenericToolbarIconLibrary_Init(pass,__pRT__,snd);
+_Label_Init(pass,__pRT__,snd);
+_ListView_Init(pass,__pRT__,snd);
+_ListViewController_Init(pass,__pRT__,snd);
+_MenuEvent_Init(pass,__pRT__,snd);
+_ObjectView_Init(pass,__pRT__,snd);
+_PanelView_Init(pass,__pRT__,snd);
+_PopUpMenu_Init(pass,__pRT__,snd);
+_PullDownMenu_Init(pass,__pRT__,snd);
+_RadioButtonGroup_Init(pass,__pRT__,snd);
+_ScrollBar_Init(pass,__pRT__,snd);
+_ScrollableView_Init(pass,__pRT__,snd);
+_Scroller_Init(pass,__pRT__,snd);
+_SelectionInList_Init(pass,__pRT__,snd);
+_VariablePanel_Init(pass,__pRT__,snd);
+_VariablePanelController_Init(pass,__pRT__,snd);
+_stx_137libwidg_Init(pass,__pRT__,snd);
+_Button_Init(pass,__pRT__,snd);
+_CheckLabel_Init(pass,__pRT__,snd);
+_EnterBox_Init(pass,__pRT__,snd);
+_FontPanel_Init(pass,__pRT__,snd);
+_HVScrollableView_Init(pass,__pRT__,snd);
+_HorizontalPanelView_Init(pass,__pRT__,snd);
+_HorizontalScrollBar_Init(pass,__pRT__,snd);
+_HorizontalScroller_Init(pass,__pRT__,snd);
+_InfoBox_Init(pass,__pRT__,snd);
+_MiniScroller_Init(pass,__pRT__,snd);
+_MultiColumnPanelView_Init(pass,__pRT__,snd);
+_MultiSelectionInList_Init(pass,__pRT__,snd);
+_OptionBox_Init(pass,__pRT__,snd);
+_PopUpListController_Init(pass,__pRT__,snd);
+_SelectionInListView_Init(pass,__pRT__,snd);
+_SequenceView_Init(pass,__pRT__,snd);
+_TextView_Init(pass,__pRT__,snd);
+_ToggleController_Init(pass,__pRT__,snd);
+_VariableHorizontalPanel_Init(pass,__pRT__,snd);
+_VariableHorizontalPanelController_Init(pass,__pRT__,snd);
+_VariableVerticalPanel_Init(pass,__pRT__,snd);
+_VariableVerticalPanelController_Init(pass,__pRT__,snd);
+_VerticalPanelView_Init(pass,__pRT__,snd);
+_WorkspaceCompletionSupport_Init(pass,__pRT__,snd);
+_XPToolbarIconLibrary_Init(pass,__pRT__,snd);
+_ArrowButton_Init(pass,__pRT__,snd);
+_EditTextView_Init(pass,__pRT__,snd);
+_EnterBox2_Init(pass,__pRT__,snd);
+_FileSelectionList_Init(pass,__pRT__,snd);
+_HorizontalMiniScroller_Init(pass,__pRT__,snd);
+_ListSelectionBox_Init(pass,__pRT__,snd);
+_MenuView_Init(pass,__pRT__,snd);
+_PopUpList_Init(pass,__pRT__,snd);
+_RadioButtonController_Init(pass,__pRT__,snd);
+_Toggle_Init(pass,__pRT__,snd);
+_VistaToolbarIconLibrary_Init(pass,__pRT__,snd);
+_WarningBox_Init(pass,__pRT__,snd);
+_CheckToggle_Init(pass,__pRT__,snd);
+_ClickMenuView_Init(pass,__pRT__,snd);
+_EditField_Init(pass,__pRT__,snd);
+_FileSelectionBox_Init(pass,__pRT__,snd);
+_RadioButton_Init(pass,__pRT__,snd);
+_TextCollector_Init(pass,__pRT__,snd);
+_Windows8ToolbarIconLibrary_Init(pass,__pRT__,snd);
+_YesNoBox_Init(pass,__pRT__,snd);
+_FileSaveBox_Init(pass,__pRT__,snd);
+_Workspace_Init(pass,__pRT__,snd);
+_CodeView_Init(pass,__pRT__,snd);
+
+
+__END_PACKAGE__();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libwidg.rc	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,37 @@
+//
+// DO NOT EDIT
+// automagically generated from the projectDefinition: stx_libwidg.
+//
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION     6,2,1,35
+  PRODUCTVERSION  6,2,3,0
+#if (__BORLANDC__)
+  FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
+  FILEFLAGS       VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
+  FILEOS          VOS_NT_WINDOWS32
+  FILETYPE        VFT_DLL
+  FILESUBTYPE     VS_USER_DEFINED
+#endif
+
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904E4"
+    BEGIN
+      VALUE "CompanyName", "eXept Software AG\0"
+      VALUE "FileDescription", "Smalltalk/X Elementary Widgets (LIB)\0"
+      VALUE "FileVersion", "6.2.1.35\0"
+      VALUE "InternalName", "stx:libwidg\0"
+      VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 1998-2012\0"
+      VALUE "ProductName", "Smalltalk/X\0"
+      VALUE "ProductVersion", "6.2.3.0\0"
+      VALUE "ProductDate", "Thu, 05 Dec 2013 09:21:46 GMT\0"
+    END
+
+  END
+
+  BLOCK "VarFileInfo"
+  BEGIN                               //  Language   |    Translation
+    VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
+  END
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make.bat	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,1 @@
+nmake /nologo -f nt.mak
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mingwmake.bat	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,12 @@
+@REM -------
+@REM make using mingw gnu compiler
+@REM type mingwmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+
+@pushd ..\rules
+@call find_mingw.bat
+@popd
+make.exe -N -f bc.mak %USEMINGW_ARG% %*
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nt.def	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,11 @@
+LIBRARY         libwidg
+DESCRIPTION     'Smalltalk/X Widget Classes'
+VERSION         3.5
+CODE            EXECUTE READ 
+DATA            READ WRITE
+SECTIONS
+    INITCODE    READ EXECUTE 
+    INITDATA    READ WRITE
+    RODATA      READ SHARED
+EXPORTS 
+    _libwidg_Init       @1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resources/README	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,11 @@
+This directory contains resource files for the widgets.
+
+The widget classes get their strings from these resource files.
+These files are only read during startup.
+
+Notice: in ST/X above vsn 2.10.2, all style relevant stuff has
+	been removed from the resource files into separate style
+	sheets. Resourcefiles now only contain string translations.
+
+Notice: starting with ST/X vsn 5.5.1, all resource strings are being
+	concentrated into a single catalog (libview/resources/<LANG>.rs)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resources/resources.rs	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,12 @@
+#encoding ascii
+
+; dummy resources
+;
+; $Header: /cvs/stx/stx/libwidg/resources/resources.rs,v 1.1 2009-01-23 11:28:21 sr Exp $
+
+;
+; notice: there are no translations (and there shall be none) here.
+; This file is only needed to have the superpack information
+; for the libview2 package (i.e. to tell the system to look for libview/resources instead).
+;
+#superpack      (ResourcePack forPackage:'stx:libview')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stx_libwidg.st	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,252 @@
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libwidg' }"
+
+LibraryDefinition subclass:#stx_libwidg
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'* Projects & Packages *'
+!
+
+!stx_libwidg class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2006 by eXept Software AG
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+!
+
+documentation
+"
+    Build- and package information for creation of the st/x standard library: stx_libwidg.
+    This library contains elementary gui components (widgets).
+"
+! !
+
+!stx_libwidg class methodsFor:'description'!
+
+excludedFromPreRequisites
+    ^ #(
+        #'stx:libjavascript'    "JavaScriptParser - referenced by Workspace>>browseImplementorsOfIt "
+        #'stx:goodies/communication'    "HTTPInterface - referenced by EditTextView>>editMenu "
+        #'stx:goodies/soap'    "SOAP::SoapImplError - referenced by EditTextView>>googleSpellingSuggestion "
+        #'stx:goodies/soap/examples'    "SOAP::BabelFishClient - referenced by EditTextView>>babelFishTranslate: "
+        #'stx:libcomp'    "Parser - referenced by EditTextView>>executeKeyboardMacro: "
+        #'stx:libhtml'    "HTMLDocumentView - referenced by DialogBox>>addHelpButtonFor: "
+        #'stx:libtool'    "SystemBrowser - referenced by Workspace>>browseImplementorsOfIt "
+        #'stx:libwidg2'    "FilenameEditField - referenced by DialogBox>>addFilenameInputFieldOn:in:tabable: "
+    )
+!
+
+mandatoryPreRequisites
+    "list all required mandatory packages.
+     Packages are mandatory, if they contain superclasses of the package's classes
+     or classes which are extended by this package.
+     This list can be maintained manually or (better) generated and
+     updated by scanning the superclass hierarchies
+     (the browser has a menu function for that)"
+
+    ^ #(
+        #'stx:libbasic'    "Autoload - superclass of ListViewController "
+        #'stx:libview'    "Controller - superclass of ButtonController "
+        #'stx:libview2'    "Model - superclass of MultiSelectionInList "
+    )
+!
+
+referencedPreRequisites
+    "list all packages containing classes referenced by the packages's members.
+     This list can be maintained manually or (better) generated and
+     updated by looking for global variable accesses
+     (the browser has a menu function for that)
+     However, often too much is found, and you may want to explicitely
+     exclude individual packages in the #excludedFromPreRequisites method."
+
+    ^ #(
+        #'stx:libbasic2'    "ActorStream - referenced by TextCollector>>initialize "
+        #'stx:libbasic3'    "MessageTally - referenced by Workspace>>spyOnIt "
+        #'stx:libui'    "ActionButtonSpec - referenced by Button>>specClass "
+    )
+!
+
+subProjects
+    "list packages which are known as subprojects.
+     The generated makefile will enter those and make there as well.
+     However: they are not forced to be loaded when a package is loaded;
+     for those, redefine requiredPrerequisites"
+
+    ^ #(
+    )
+! !
+
+!stx_libwidg class methodsFor:'description - compilation'!
+
+additionalBaseAddressDefinition_bc_dot_mak
+    "this is an optional definition, which (if present) may speed up the dll-loading a little
+     on win32 systems."
+
+    ^ '
+# see stdHeader_bc for LIBWIDG_BASE
+LIB_BASE=$(LIBWIDG_BASE)
+'
+!
+
+stcOptimizationOptions
+    ^ '+optinline'
+! !
+
+!stx_libwidg class methodsFor:'description - contents'!
+
+classNamesAndAttributes
+    "lists the classes which are to be included in the project.
+     Each entry in the list may be: a single class-name (symbol),
+     or an array-literal consisting of class name and attributes.
+     Attributes are: #autoload or #<os> where os is one of win32, unix,..."
+
+    ^ #(
+        "<className> or (<className> attributes...) in load order"
+        Label
+        Button     
+        ArrowButton
+        ButtonController 
+        CheckLabel
+        Toggle
+        ToggleController
+        CheckToggle
+        DialogBox
+        ListView
+        TextView
+        EditTextView
+        EditField
+        EnterBox
+        EnterBox2
+        EnterFieldGroup
+        FontPanel
+        FramedBox
+        InfoBox
+        ListSelectionBox
+        FileSelectionBox
+        FileSaveBox
+        ListViewController
+        ObjectView
+        OptionBox
+        PanelView
+        PopUpList
+        PopUpListController
+        PopUpMenu
+        PullDownMenu
+        RadioButton
+        RadioButtonController
+        RadioButtonGroup
+        ScrollBar
+        HorizontalScrollBar
+        ScrollableView
+        HVScrollableView
+        HorizontalPanelView
+        Scroller
+        MiniScroller
+        HorizontalMiniScroller
+        HorizontalScroller
+        SelectionInList
+        MultiSelectionInList
+        SelectionInListView
+        FileSelectionList
+        MenuView
+        ClickMenuView
+        SequenceView
+        TextCollector
+        VariablePanel
+        VariablePanelController
+        VariableHorizontalPanel
+        VariableHorizontalPanelController
+        VariableVerticalPanel
+        VariableVerticalPanelController
+        VerticalPanelView
+        WarningBox
+        Workspace
+        CodeView
+        YesNoBox
+        #'stx_libwidg'
+        MultiColumnPanelView
+        GenericToolbarIconLibrary
+        XPToolbarIconLibrary
+        VistaToolbarIconLibrary
+        MenuEvent
+        Windows8ToolbarIconLibrary
+        EditTextViewCompletionSupport
+        WorkspaceCompletionSupport
+    )
+
+    "Modified: / 26-09-2013 / 18:29:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+extensionMethodNames
+    "lists the extension methods which are to be included in the project.
+     Entries are 2-element array literals, consisting of class-name and selector."
+
+    ^ #(
+    )
+! !
+
+!stx_libwidg class methodsFor:'description - project information'!
+
+applicationIconFileName
+    "Return the name (without suffix) of an icon-file (the app's icon); will be included in the rc-resource file"
+
+    ^ nil
+    "/ ^ self applicationName
+!
+
+companyName
+    "Return a companyname which will appear in <lib>.rc"
+
+    ^ 'eXept Software AG'
+!
+
+description
+    "Return a description string which will appear in nt.def / bc.def"
+
+    ^ 'Smalltalk/X Elementary Widgets'
+!
+
+legalCopyright
+    "Return a copyright string which will appear in <lib>.rc"
+
+    ^ 'Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 1998-2012'
+
+    "Modified: / 18-07-2012 / 19:12:14 / cg"
+!
+
+productName
+    "Return a product name which will appear in <lib>.rc"
+
+    ^ 'Smalltalk/X'
+! !
+
+!stx_libwidg class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libwidg/stx_libwidg.st,v 1.36 2013-12-05 09:22:14 stefan Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libwidg/stx_libwidg.st,v 1.36 2013-12-05 09:22:14 stefan Exp $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vcmake.bat	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,14 @@
+@REM -------
+@REM make using Microsoft Visual C compiler
+@REM type vcmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+
+@if not defined VSINSTALLDIR (
+    pushd ..\rules
+    call vcsetup.bat
+    popd
+)
+make.exe -N -f bc.mak -DUSEVC %*
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vms.mak	Sun May 18 09:45:08 2014 +0100
@@ -0,0 +1,152 @@
+#
+# DO NOT EDIT 
+# automatically generated from Make.proto
+#
+# $Header: /cvs/stx/stx/libwidg/vms.mak,v 1.3 1999-09-18 14:16:26 cg Exp $
+#
+TOP=..
+LIBNAME=libwidg
+STCOPT="+optspace2 -warnNonStandard -warnNonStandard"
+STCLOCALOPT=-package=stx:$(LIBNAME) $(COMMONSYMBOLS) $(SEPINITCODE) $(RELOCINSTVARS) -varPrefix=$(LIBNAME)
+ALL: $(LIBDIR)\$(LIBNAME).olb
+
+OBJS=\
+  $(OUTDIR)ListView.$(O) \
+  $(OUTDIR)PanelView.$(O) \
+  $(OUTDIR)ScrollableView.$(O) \
+  $(OUTDIR)HVScrollableView.$(O) \
+  $(OUTDIR)SequenceView.$(O) \
+  $(OUTDIR)Label.$(O) \
+  $(OUTDIR)Scroller.$(O) \
+  $(OUTDIR)MiniScroller.$(O) \
+  $(OUTDIR)ScrollBar.$(O) \
+  $(OUTDIR)ObjectView.$(O) \
+  $(OUTDIR)PopUpMenu.$(O) \
+  $(OUTDIR)DialogBox.$(O) \
+  $(OUTDIR)InfoBox.$(O) \
+  $(OUTDIR)TextView.$(O) \
+  $(OUTDIR)SelectionInListView.$(O) \
+  $(OUTDIR)HorizontalPanelView.$(O) \
+  $(OUTDIR)VerticalPanelView.$(O) \
+  $(OUTDIR)VariablePanel.$(O) \
+  $(OUTDIR)VariableVerticalPanel.$(O) \
+  $(OUTDIR)VariableHorizontalPanel.$(O) \
+  $(OUTDIR)Button.$(O) \
+  $(OUTDIR)ArrowButton.$(O) \
+  $(OUTDIR)HorizontalScroller.$(O) \
+  $(OUTDIR)HorizontalMiniScroller.$(O) \
+  $(OUTDIR)HorizontalScrollBar.$(O) \
+  $(OUTDIR)EnterBox.$(O) \
+  $(OUTDIR)WarningBox.$(O) \
+  $(OUTDIR)YesNoBox.$(O) \
+  $(OUTDIR)MenuView.$(O) \
+  $(OUTDIR)FileSelectionList.$(O) \
+  $(OUTDIR)EditTextView.$(O) \
+  $(OUTDIR)Toggle.$(O) \
+  $(OUTDIR)ListSelectionBox.$(O) \
+  $(OUTDIR)EnterBox2.$(O) \
+  $(OUTDIR)EditField.$(O) \
+  $(OUTDIR)TextCollector.$(O) \
+  $(OUTDIR)Workspace.$(O) \
+  $(OUTDIR)CodeView.$(O) \
+  $(OUTDIR)FileSelectionBox.$(O) \
+  $(OUTDIR)PullDownMenu.$(O) \
+  $(OUTDIR)OptionBox.$(O) \
+  $(OUTDIR)CheckToggle.$(O) \
+  $(OUTDIR)CheckLabel.$(O) \
+  $(OUTDIR)FileSaveBox.$(O) \
+  $(OUTDIR)ButtonController.$(O) \
+  $(OUTDIR)PopUpListController.$(O) \
+  $(OUTDIR)ToggleController.$(O) \
+  $(OUTDIR)RadioButtonController.$(O) \
+  $(OUTDIR)ClickMenuView.$(O) \
+  $(OUTDIR)EnterFieldGroup.$(O) \
+  $(OUTDIR)FontPanel.$(O) \
+  $(OUTDIR)PopUpList.$(O) \
+  $(OUTDIR)FramedBox.$(O) \
+  $(OUTDIR)RadioButtonGroup.$(O) \
+  $(OUTDIR)RadioButton.$(O) \
+  $(OUTDIR)VariablePanelController.$(O) \
+  $(OUTDIR)VariableVerticalPanelController.$(O) \
+  $(OUTDIR)VariableHorizontalPanelController.$(O) \
+  $(OUTDIR)SelectionInList.$(O) \
+  $(OUTDIR)MultiSelectionInList.$(O) \
+
+
+theLib:: $(LIBNAME).olb
+	write sys$output "making class objects ..."
+	$(MAKE) objs
+	$(MAKE) libinit
+	write sys$output "classlibrary $(LIBNAME).olb made."
+
+$(LIBNAME).olb:
+	write sys$output "creating initial $(LIBNAME).olb ..."
+	lib/cre $(LIBNAME).olb
+
+objs:  $(OBJS1)
+
+
+
+# BEGINMAKEDEPEND
+$(OUTDIR)ArrowButton.$(O) ArrowButton.$(H): ArrowButton.st $(STCHDR)  ../include/Button.$(H)  ../include/Label.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)Button.$(O) Button.$(H): Button.st $(STCHDR)  ../include/Label.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ButtonController.$(O) ButtonController.$(H): ButtonController.st $(STCHDR)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)CheckLabel.$(O) CheckLabel.$(H): CheckLabel.st $(STCHDR)  ../include/Label.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)CheckToggle.$(O) CheckToggle.$(H): CheckToggle.st $(STCHDR)  ../include/Toggle.$(H)  ../include/Button.$(H)  ../include/Label.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ClickMenuView.$(O) ClickMenuView.$(H): ClickMenuView.st $(STCHDR)  ../include/MenuView.$(H)  ../include/SelectionInListView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)CodeView.$(O) CodeView.$(H): CodeView.st $(STCHDR)  ../include/Workspace.$(H)  ../include/TextCollector.$(H)  ../include/EditTextView.$(H)  ../include/TextView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)DialogBox.$(O) DialogBox.$(H): DialogBox.st $(STCHDR)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)EditField.$(O) EditField.$(H): EditField.st $(STCHDR)  ../include/EditTextView.$(H)  ../include/TextView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)EditTextView.$(O) EditTextView.$(H): EditTextView.st $(STCHDR)  ../include/TextView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)EnterBox.$(O) EnterBox.$(H): EnterBox.st $(STCHDR)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)EnterBox2.$(O) EnterBox2.$(H): EnterBox2.st $(STCHDR)  ../include/EnterBox.$(H)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)EnterFieldGroup.$(O) EnterFieldGroup.$(H): EnterFieldGroup.st $(STCHDR)  ../include/Object.$(H) 
+$(OUTDIR)FileSaveBox.$(O) FileSaveBox.$(H): FileSaveBox.st $(STCHDR)  ../include/FileSelectionBox.$(H)  ../include/ListSelectionBox.$(H)  ../include/EnterBox.$(H)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)FileSelectionBox.$(O) FileSelectionBox.$(H): FileSelectionBox.st $(STCHDR)  ../include/ListSelectionBox.$(H)  ../include/EnterBox.$(H)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)FileSelectionList.$(O) FileSelectionList.$(H): FileSelectionList.st $(STCHDR)  ../include/SelectionInListView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)FontPanel.$(O) FontPanel.$(H): FontPanel.st $(STCHDR)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)FramedBox.$(O) FramedBox.$(H): FramedBox.st $(STCHDR)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)HVScrollableView.$(O) HVScrollableView.$(H): HVScrollableView.st $(STCHDR)  ../include/ScrollableView.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)HorizontalMiniScroller.$(O) HorizontalMiniScroller.$(H): HorizontalMiniScroller.st $(STCHDR)  ../include/MiniScroller.$(H)  ../include/Scroller.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)HorizontalPanelView.$(O) HorizontalPanelView.$(H): HorizontalPanelView.st $(STCHDR)  ../include/PanelView.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)HorizontalScrollBar.$(O) HorizontalScrollBar.$(H): HorizontalScrollBar.st $(STCHDR)  ../include/ScrollBar.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)HorizontalScroller.$(O) HorizontalScroller.$(H): HorizontalScroller.st $(STCHDR)  ../include/Scroller.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)InfoBox.$(O) InfoBox.$(H): InfoBox.st $(STCHDR)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)Label.$(O) Label.$(H): Label.st $(STCHDR)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ListSelectionBox.$(O) ListSelectionBox.$(H): ListSelectionBox.st $(STCHDR)  ../include/EnterBox.$(H)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ListView.$(O) ListView.$(H): ListView.st $(STCHDR)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ListViewController.$(O) ListViewController.$(H): ListViewController.st $(STCHDR)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)MenuView.$(O) MenuView.$(H): MenuView.st $(STCHDR)  ../include/SelectionInListView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)MiniScroller.$(O) MiniScroller.$(H): MiniScroller.st $(STCHDR)  ../include/Scroller.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)MultiSelectionInList.$(O) MultiSelectionInList.$(H): MultiSelectionInList.st $(STCHDR)  ../include/SelectionInList.$(H)  ../include/ValueHolder.$(H)  ../include/ValueModel.$(H)  ../include/Model.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ObjectView.$(O) ObjectView.$(H): ObjectView.st $(STCHDR)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)OptionBox.$(O) OptionBox.$(H): OptionBox.st $(STCHDR)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)PanelView.$(O) PanelView.$(H): PanelView.st $(STCHDR)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)PopUpList.$(O) PopUpList.$(H): PopUpList.st $(STCHDR)  ../include/Button.$(H)  ../include/Label.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)PopUpListController.$(O) PopUpListController.$(H): PopUpListController.st $(STCHDR)  ../include/ButtonController.$(H)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)PopUpMenu.$(O) PopUpMenu.$(H): PopUpMenu.st $(STCHDR)  ../include/PopUpView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)PullDownMenu.$(O) PullDownMenu.$(H): PullDownMenu.st $(STCHDR)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)RadioButton.$(O) RadioButton.$(H): RadioButton.st $(STCHDR)  ../include/Toggle.$(H)  ../include/Button.$(H)  ../include/Label.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)RadioButtonController.$(O) RadioButtonController.$(H): RadioButtonController.st $(STCHDR)  ../include/ToggleController.$(H)  ../include/ButtonController.$(H)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)RadioButtonGroup.$(O) RadioButtonGroup.$(H): RadioButtonGroup.st $(STCHDR)  ../include/ValueHolder.$(H)  ../include/ValueModel.$(H)  ../include/Model.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ScrollBar.$(O) ScrollBar.$(H): ScrollBar.st $(STCHDR)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ScrollableView.$(O) ScrollableView.$(H): ScrollableView.st $(STCHDR)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)Scroller.$(O) Scroller.$(H): Scroller.st $(STCHDR)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)SelectionInList.$(O) SelectionInList.$(H): SelectionInList.st $(STCHDR)  ../include/ValueHolder.$(H)  ../include/ValueModel.$(H)  ../include/Model.$(H)  ../include/Object.$(H) 
+$(OUTDIR)SelectionInListView.$(O) SelectionInListView.$(H): SelectionInListView.st $(STCHDR)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)SequenceView.$(O) SequenceView.$(H): SequenceView.st $(STCHDR)  ../include/ScrollableView.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)TextCollector.$(O) TextCollector.$(H): TextCollector.st $(STCHDR)  ../include/EditTextView.$(H)  ../include/TextView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)TextView.$(O) TextView.$(H): TextView.st $(STCHDR)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)Toggle.$(O) Toggle.$(H): Toggle.st $(STCHDR)  ../include/Button.$(H)  ../include/Label.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)ToggleController.$(O) ToggleController.$(H): ToggleController.st $(STCHDR)  ../include/ButtonController.$(H)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)VariableHorizontalPanel.$(O) VariableHorizontalPanel.$(H): VariableHorizontalPanel.st $(STCHDR)  ../include/VariablePanel.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)VariableHorizontalPanelController.$(O) VariableHorizontalPanelController.$(H): VariableHorizontalPanelController.st $(STCHDR)  ../include/VariablePanelController.$(H)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)VariablePanel.$(O) VariablePanel.$(H): VariablePanel.st $(STCHDR)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)VariablePanelController.$(O) VariablePanelController.$(H): VariablePanelController.st $(STCHDR)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)VariableVerticalPanel.$(O) VariableVerticalPanel.$(H): VariableVerticalPanel.st $(STCHDR)  ../include/VariablePanel.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)VariableVerticalPanelController.$(O) VariableVerticalPanelController.$(H): VariableVerticalPanelController.st $(STCHDR)  ../include/VariablePanelController.$(H)  ../include/Controller.$(H)  ../include/Object.$(H) 
+$(OUTDIR)VerticalPanelView.$(O) VerticalPanelView.$(H): VerticalPanelView.st $(STCHDR)  ../include/PanelView.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)WarningBox.$(O) WarningBox.$(H): WarningBox.st $(STCHDR)  ../include/InfoBox.$(H)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)Workspace.$(O) Workspace.$(H): Workspace.st $(STCHDR)  ../include/TextCollector.$(H)  ../include/EditTextView.$(H)  ../include/TextView.$(H)  ../include/ListView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+$(OUTDIR)YesNoBox.$(O) YesNoBox.$(H): YesNoBox.st $(STCHDR)  ../include/WarningBox.$(H)  ../include/InfoBox.$(H)  ../include/DialogBox.$(H)  ../include/ModalBox.$(H)  ../include/StandardSystemView.$(H)  ../include/TopView.$(H)  ../include/View.$(H)  ../include/SimpleView.$(H)  ../include/DisplaySurface.$(H)  ../include/GraphicsMedium.$(H)  ../include/DeviceGraphicsContext.$(H)  ../include/GraphicsContext.$(H)  ../include/Object.$(H) 
+# ENDMAKEDEPEND