boss stuff separated
authorClaus Gittinger <cg@exept.de>
Wed, 23 Aug 2006 16:05:55 +0200
changeset 4560 aee6863d611f
parent 4559 95854882475c
child 4561 025250c1faab
boss stuff separated
StandardSystemView.st
--- a/StandardSystemView.st	Wed Aug 23 16:02:53 2006 +0200
+++ b/StandardSystemView.st	Wed Aug 23 16:05:55 2006 +0200
@@ -21,1616 +21,26 @@
 	category:'Views-Basic'
 !
 
-!StandardSystemView 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
-"
-    I represent standard application topViews 
-    i.e. those views which have a title-label, an icon etc. 
-
-    The name `StandardSystemView' is probably misleading and
-    results from ST-80 (rel2.x) compatibility reasons.
-    Think of it as an ApplicationWindow.
 
 
-    In ST/X, StandardSystemViews were subclassed for special views
-    in the past (for example: FileBrowser, ChangesBrowser etc.).
-    Although this worked, it may lead to the following
-    problems and inconveniences:
-	- applications inherit a big number of methods through the
-	  SimpleView->View->TopView->StandardSystemView hierarchy.
-	  There is quite a danger that by accident, some method gets
-	  redefined which is required by one of those classes.
-	  (typical candidates are: terminate, destroy, open ...)
-	  This may lead to strange effects, which may not be obvious to
-	  non experts ...
 
-	- applications with multiple topViews are difficult to implement
-	  and manage.
-
-	- use of a windowBuilder is difficult.
-
-    For all those reasons, we HIGHLY recommend to NOT define applications
-    as subclasses of StandardSystemView, but instead base them on
-    ApplicationModel, and reference the topView(s) as instance variables of
-    if (if at all).
-
-    [instance variables:]
-	label                   <String>    the label in the windows title
 
-	icon                    <Form>      the icon
-					    [ignored if the display does not 
-					     support icons]
-
-	iconView                <View>      an optional icon-view (for animated icons)
-					    [ignored if the display does not
-					     supports this]
-
-	iconLabel               <String>    the label in the icon
-					    [ignored if the display does not 
-					     support label-tabs with icons]
 
-	minExtent               <Point>     the minimum size
-					    No limit, if nil
-					    [the window manager may have its own
-					     limit; typically some small area]
 
-	maxExtent               <Point>     the maximum size
-					    No limit, if nil.
-					    [the window manager may have its own
-					     limit; typically the screen size]
-
-	sizeFixed               <Boolean>   prevents the view from resizing itself
-					    (especially to freeze a dialogs size)
-
-	application             <AppModel>  if nonNil, thats the application
-					    Many requests (such as open/close etc.
-					    are forwarded to it, if present.
 
 
 
-     [class variables:]
-
-	DefaultIcon             <Form>      cached default icon
-
-	TakeFocusWhenMapped     <Boolean>   if true, views grab the keyboard
-					    focus (convenient with some stupid
-					    windowManagers)
-
-	IncludeHostNameInLabel  <Boolean>   if true, the windows title shall
-					    include the hostname.
-					    (convenient if you have many remote
-					    views open simultaneously)
-
-	WindowLabelFormat       <Boolean>   specifies the format for windowLabels
-
-
-    [author:]
-	Claus Gittinger
-
-    [see also:]
-	WindowGroup
-	ApplicationModel
-"
-
-!
-
-examples
-"
-    simple, empty topView:
-									[exBegin]
-	|topView|
-
-	topView := StandardSystemView new.
-	topView label:'my first view'.
-	topView extent:200 @ 200.
-	topView open.
-									[exEnd]
-
-    with an icon & iconLabel:
-									[exBegin]
-	|topView|
-
-	topView := StandardSystemView extent:200 @ 200.
-	topView label:'Hello world'.
-
-	topView icon:(Image fromFile:'hello_world.icon').
-	topView open.
-									[exEnd]
-
-
-    with an animated iconView [not supported on all display devices]:
-									[exBegin]
-	|iconView topView|
-
-	iconView := ClockView new.
-
-	topView := StandardSystemView extent:200 @ 200.
-	topView label:'Hello world'.
-
-	topView iconView:iconView.
-	topView open.
-									[exEnd]
 
 
-    placing a subView into it:
-									[exBegin]
-	|topView button|
-
-	topView := StandardSystemView new.
-	topView label:'my second view'.
-	topView extent:200 @ 200.
-
-	button := Button label:'close' in:topView.
-	button action:[topView destroy].
-
-	topView open.
-									[exEnd]
-
-    same, relative sized subview:
-									[exBegin]
-	|topView button|
-
-	topView := StandardSystemView new.
-	topView label:'my second view'.
-	topView extent:200 @ 200.
-
-	button := Button label:'close' in:topView.
-	button action:[topView destroy].
-	button origin:0.25 @ 0.25 corner:0.75 @ 0.75.
-
-	topView open.
-									[exEnd]
-
-    multiple buttons in a panel in a topView:
-									[exBegin]
-	|topView panel button1 button2 button3|
-
-	topView := StandardSystemView new.
-	topView label:'my second view'.
-	topView extent:200 @ 200.
-
-	panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:topView.
-	panel inset:10.
-	panel level:-1.
-
-	button1 := Button label:'one' in:panel.
-	button1 action:[Transcript showCR:'one pressed'].
-
-	button2 := Button label:'two' in:panel.
-	button2 action:[Transcript showCR:'two pressed'].
-
-	button3 := Button label:'three' in:panel.
-	button3 action:[Transcript showCR:'three pressed'].
-
-	topView open.
-									[exEnd]
-"
-! !
-
-!StandardSystemView class methodsFor:'instance creation'!
-
-extent:anExtent label:aLabel icon:aForm
-    "create a new topView and define its extent, label and icon"
-
-    ^ self origin:nil extent:anExtent
-	   label:aLabel icon:aForm
-	   minExtent:nil maxExtent:nil
-!
-
-extent:anExtent label:aLabel icon:aForm minExtent:minExtent
-    ^ self origin:nil extent:anExtent
-	   label:aLabel icon:aForm
-	   minExtent:minExtent maxExtent:nil
-!
-
-extent:anExtent label:aLabel icon:aForm minExtent:minExtent maxExtent:maxExtent
-    ^ self origin:nil extent:anExtent
-	   label:aLabel icon:aForm
-	   minExtent:minExtent maxExtent:maxExtent
-!
-
-extent:anExtent label:aLabel minExtent:minExtent
-    "create a new topView and define its extent, label and minumum extent"
-
-    ^ self origin:nil extent:anExtent
-	   label:aLabel icon:nil
-	   minExtent:minExtent maxExtent:nil
-!
-
-label:aLabel
-    "create a new topView and define its label"
-
-    ^ self origin:nil extent:nil
-	   label:aLabel icon:nil
-	   minExtent:nil maxExtent:nil
-!
-
-label:aLabel icon:aForm
-    "create a new topView and define its label and icon"
-
-    ^ self origin:nil extent:nil
-	   label:aLabel icon:aForm
-	   minExtent:nil maxExtent:nil
-!
-
-label:aLabel icon:aForm minExtent:anExtent
-    "create a new topView and define its label, icon and minumum extent"
-
-    ^ self origin:nil extent:nil
-	   label:aLabel icon:aForm
-	   minExtent:anExtent maxExtent:nil
-!
-
-label:aLabel icon:aForm minExtent:minExtent maxExtent:maxExtent
-    "create a new topView and define its label, icon, min and max extents"
-
-    ^ self origin:nil extent:nil
-	   label:aLabel icon:aForm
-	   minExtent:minExtent maxExtent:maxExtent
-!
-
-label:aLabel minExtent:anExtent
-    "create a new topView and define its label and minimum extent"
-
-    ^ self origin:nil extent:nil
-	   label:aLabel icon:nil
-	   minExtent:anExtent maxExtent:nil
-!
-
-model:aModel label:aLabel minimumSize:minExtent
-    "ST80-style instance creation"
-
-    |newView|
-
-    newView := self origin:nil 
-		    extent:minExtent
-		     label:aLabel 
-		      icon:nil
-		 minExtent:minExtent
-		 maxExtent:nil.
-    newView model:aModel.
-"/    newView controller:(self defaultControllerClass new view:newView).
-    ^ newView
-!
-
-origin:anOrigin extent:anExtent label:aLabel
-    "create a new topView and define its origin, extent and label"
-
-    ^ self origin:anOrigin extent:anExtent
-	   label:aLabel icon:nil
-	   minExtent:nil maxExtent:nil
-!
-
-origin:anOrigin label:aLabel icon:aForm
-		minExtent:minExtent maxExtent:maxExtent
-    "create a new topView and define its origin, extent, label, icon
-     and extent-boundaries."
-
-    ^ self origin:anOrigin extent:nil
-	   label:aLabel icon:aForm
-	   minExtent:minExtent maxExtent:maxExtent
-! !
-
-!StandardSystemView class methodsFor:'Compatibility-VW'!
-
-promptForOpen:aBoolean
-    "not implemented here"
-! !
-
-!StandardSystemView class methodsFor:'class initialization'!
-
-initialize
-    IncludeHostNameInLabel := false.
-    WindowLabelFormat := self defaultWindowLabelFormat.
-
-    TakeFocusWhenMapped := (Display notNil and:[Display platformName = 'WIN32']).
-
-    "Created: / 20.8.1997 / 14:16:32 / cg"
-    "Modified: / 24.8.1998 / 17:16:33 / cg"
-! !
-
-!StandardSystemView class methodsFor:'defaults'!
-
-defaultExtent
-    "return a standardSystemViews default window extent"
-
-    DefaultExtent notNil ifTrue:[
-	^ DefaultExtent
-    ].
-    ^ super defaultExtent
-
-    "Created: 15.8.1997 / 01:36:21 / cg"
-!
-
-defaultIcon
-    "return a topViews default window icon"
-
-    <resource: #style (#ICON #ICON_FILE)>
-
-    |n nm i|
-
-    (i := DefaultIcon) isNil ifTrue:[
-        i := self classResources at:'ICON' default:nil.
-        i isNil ifTrue:[
-"/            OperatingSystem platformName == #win32 ifTrue:[
-"/                n := 'stx_16x16.xpm'.
-"/            ] ifFalse:[
-"/                n := 'SmalltalkX.xbm'.
-"/            ].
-            nm := ClassResources at:'ICON_FILE' default:n.
-            nm notNil ifTrue:[    
-                i := Smalltalk imageFromFileNamed:nm inPackage:'stx:libtool'.
-            ].
-            i isNil ifTrue:[
-                i := self defaultSTXIcon
-            ].
-        ].
-        i notNil ifTrue:[
-            DefaultIcon := i := i onDevice:Display
-        ]
-    ].
-    ^ i
-
-    "
-     DefaultIcon := nil.
-     self defaultIcon inspect
-    "
-
-    "Modified: / 25.5.1999 / 15:36:49 / cg"
-!
-
-defaultLabel
-    "return the default label for views of my kind.
-     This can be redefined in subclasses or overwritten in
-     initialize methods."
-
-    ^ self nameWithoutPrefix. "/ 'aView'
-
-    "Modified: / 27.9.1999 / 11:38:57 / cg"
-!
-
-defaultWindowLabelFormat
-    "%2 is the hostName;
-     %1 is the actual window label."
-
-    "/ ^ '%2:%1'.    "/ the old format
-    "/ ^ '%1 @ %2'.
-    ^ '%1 [%2]'.
-!
-
-includeHostNameInLabel
-    "return the flag which controls if a views label should
-     include the hostname.
-     This flag is usually set/cleared in your private.rc file;
-     the default is false."
-
-    ^ IncludeHostNameInLabel
-
-    "Created: 10.9.1995 / 19:21:16 / claus"
-!
-
-includeHostNameInLabel:aBoolean
-    "set/clear the flag which controls if a views label should
-     include the hostname - this is highly useful if you have 
-     multiple smalltalks open simultaneously ...
-     This flag is usually set/cleared in your private.rc file;
-     the default is false."
-
-    IncludeHostNameInLabel := aBoolean
-
-    "Modified: 24.4.1996 / 09:09:21 / cg"
-!
-
-takeFocusWhenMapped
-    ^ TakeFocusWhenMapped 
-
-    "
-     StandardSystemView takeFocusWhenMapped
-    "
-!
-
-updateStyleCache
-    "extract values from the styleSheet and cache them in class variables"
-
-    <resource: #style (#'standardSystemView.defaultExtent')>
-
-    DefaultExtent := StyleSheet at:'standardSystemView.defaultExtent' default:nil.
-
-    "
-     self updateStyleCache
-    "
-
-    "Modified: 31.8.1995 / 03:01:14 / claus"
-    "Created: 15.8.1997 / 01:34:37 / cg"
-    "Modified: 20.10.1997 / 15:13:50 / cg"
-!
-
-windowLabelFormat
-    ^ WindowLabelFormat
-!
-
-windowLabelFormat:aFormatString
-    WindowLabelFormat := aFormatString
-! !
-
-!StandardSystemView class methodsFor:'image specs'!
-
-defaultSTXIcon
-    <resource: #programImage>
-
-    ^ self defaultSTXIcon3.
-!
-
-defaultSTXIcon1
-    "This resource specification was automatically generated
-     by the ImageEditor of ST/X."
-
-    "Do not manually edit this!! If it is corrupted,
-     the ImageEditor may not be able to read the specification."
-
-    "
-     self defaultSTXIcon1 inspect
-     ImageEditor openOnClass:self andSelector:#defaultSTXIcon1
-     Icon flushCachedIcons
-    "
-
-    <resource: #image>
-
-    ^Icon
-        constantNamed:#'StandardSystemView class defaultSTXIcon1'
-        ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@E@@@@AP@D@@V@D@@APF@@@F&@@@AV@@@@&@@@@%P@@@&F@@@VBP@@V@I@@V@@P@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 127 127 184 231 231]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@X@A PGB@LX@_@A8@G@@<@GX@9 GC@8D@@@@@@b') ; yourself); yourself]
-!
-
-defaultSTXIcon2
-    "This resource specification was automatically generated
-     by the ImageEditor of ST/X."
-
-    "Do not manually edit this!! If it is corrupted,
-     the ImageEditor may not be able to read the specification."
-
-    "
-     self defaultSTXIcon2 inspect
-     ImageEditor openOnClass:self andSelector:#defaultSTXIcon2
-     Icon flushCachedIcons
-    "
-
-    <resource: #image>
-
-    ^Icon
-        constantNamed:#'StandardSystemView class defaultSTXIcon2'
-        ifAbsentPut:[(Depth8Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HB@@@@@@@@@@@@@@@@@@@B@ @@@@@@@@H@@@@@@@@@@ H@@@@@@@H@@@@@@@@@@@@B@ @@
-@@H@@@@@@@@@@@@@@@H@@@H@@@@@@@@@@@@@@@@B@ H@@@@@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@@@@@HB@ @@@@@@@@@@@@@@@@H@@@H@@@@@@@@@@@@@
-@ H@@@@@@ @@@@@@@@@@@ H@@@@@@@@B@@@@@@@@@ H@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[184 231 231 63 63 63 0 127 127]; yourself]
-!
-
-defaultSTXIcon3
-    "This resource specification was automatically generated
-     by the ImageEditor of ST/X."
-
-    "Do not manually edit this!! If it is corrupted,
-     the ImageEditor may not be able to read the specification."
-
-    "
-     self defaultSTXIcon3 inspect
-     ImageEditor openOnClass:self andSelector:#defaultSTXIcon3
-     Icon flushCachedIcons
-    "
-
-    <resource: #image>
-
-    ^Icon
-        constantNamed:#'StandardSystemView class defaultSTXIcon3'
-        ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@E@@@@AP@D@@V@D@@APF@@@FF@@@AV@@@@&@@@@%P@@@$F@@@T@X@@T@I@@T@@P@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 0 204 51 0 112 0]; yourself]
-! !
-
-!StandardSystemView class methodsFor:'startup'!
-
-start
-    "create, realize the view - this topview and all its subviews will
-     run as a separate process with its own windowGroup.
-     This method exists for backward compatibility - use open."
-
-    ^ self open
-! !
-
-!StandardSystemView methodsFor:'Compatibility-ST80'!
-
-maximumSize
-    "same as maxExtent; for ST-80 compatibility"
-
-    ^ self maxExtent
-!
-
-maximumSize:anExtent
-    "same as maxExtent; for ST-80 compatibility"
-
-    ^ self maxExtent:anExtent
-!
-
-menuBar
-    "return my menuBar or nil if I have none.
-     This is only valid for topViews which were built with the UIBuilder."
-
-    ^ application builder menuBar
-
-    "Created: / 27.10.1997 / 16:23:13 / cg"
-!
-
-minimumSize
-    "same as minExtent; for ST-80 compatibility"
-
-    ^ self minExtent
-!
-
-minimumSize:anExtent
-    "same as minExtent; for ST-80 compatibility"
-
-    ^ self minExtent:anExtent
-!
-
-quit
-    "same as closeRequest 
-     (but sometimes sent via the sensors event queue from VW programs)"
-
-    self closeRequest
-
-    "Created: / 30.10.1997 / 19:23:01 / cg"
-    "Modified: / 3.8.1998 / 20:04:22 / cg"
-! !
-
-!StandardSystemView methodsFor:'accessing'!
-
-application
-    "return the topViews application.
-     This is new protocol for ST-80 compatibility and not yet fully supported"
-
-    ^ application
-!
-
-application:anApplicationModel
-    "set the topViews application.
-     This is new protocol for ST-80 compatibility and not yet fully supported"
-
-    application := anApplicationModel.
-    anApplicationModel notNil ifTrue:[
-	anApplicationModel window isNil ifTrue:[
-	    anApplicationModel window:self
-	]
-    ]
-
-    "Modified: 18.4.1996 / 14:55:44 / cg"
-! !
-
-!StandardSystemView methodsFor:'accessing-behavior'!
-
-bePartner
-    "define me as a partner-View.
-     All partners within the applications windowGroup iconify/deiconify together."
-
-    self setWindowGroupFromApplication.
-    super bePartner.
-
-    "
-     see example in TopView>>bePartner
-    "
-
-    "Created: 22.9.1995 / 17:40:15 / claus"
-    "Modified: 6.3.1996 / 16:16:42 / cg"
-!
-
-beSlave
-    "define me as a slave-View.
-     All slaves within the applications windowGroup iconify/deiconify with the masterView(s)
-     (i.e. they follow their master(s))"
-
-    self setWindowGroupFromApplication.
-    super beSlave.
-
-    "
-     see example in TopView>>beSlave
-    "
-
-    "Created: 22.9.1995 / 17:40:15 / claus"
-    "Modified: 6.3.1996 / 16:16:50 / cg"
-!
-
-sendWindowEvents:collectionOfEventSymbols
-    "define the events that are to be forwarded to the application.
-     This is being implemented ..."
-
-    windowEventsForApplication := collectionOfEventSymbols
-!
-
-sizeFixed:aBoolean
-    "this prevents the view from resizing itself when realized.
-     For normal topViews, this is void, since they dont do this anyway.
-
-     However, modalBoxes (especially: DialogBoxes) typically resize themselfes 
-     to the preferredExtent of their components. In some cases, this behavior is 
-     not desired and it should be turned off by setting sizeFixed to true.
-
-     To avoid confusion:
-	This does NOT prevent the window manager from resizing the view, 
-	instead it tells the view to NOT resize ITSELF."
-
-    sizeFixed := aBoolean.
-
-    "example: dialog which resizes itself on #open: 
-	      (thereby ignoring the 200@200 extent)
-
-	|dialog|
-
-	dialog := Dialog new.
-	dialog addInputFieldOn:'' asValue.
-	dialog addOkButton.
-	dialog extent:200@200.
-	dialog open.
 
 
-    using sizeFixed:
-
-	|dialog|
-
-	dialog := Dialog new.
-	dialog addInputFieldOn:'' asValue.
-	dialog addOkButton.
-	dialog extent:200@200; sizeFixed:true.
-	dialog open.
 
 
-    using openWithExtent (also sets sizeFixed):
 
-	|dialog|
-
-	dialog := Dialog new.
-	dialog addInputFieldOn:'' asValue.
-	dialog addOkButton.
-	dialog openWithExtent:200@200.
-    "
-! !
-
-!StandardSystemView methodsFor:'accessing-channels'!
-
-labelChannel
-    "return the labelChannel - or nil"
-
-    ^ labelChannel.
-!
-
-labelChannel:aValueHolder
-    "set the labelChannel - a valueHolder holding a string
-     which is shown as title bar"
-
-    |prev|
-
-    prev := labelChannel.
-    labelChannel := aValueHolder.
-    self setupChannel:aValueHolder for:nil withOld:prev.
-! !
-
-!StandardSystemView methodsFor:'accessing-dimensions'!
-
-maxExtent
-    "return the views maximum allowed extent"
-
-    ^ maxExtent
-!
-
-maxExtent:max
-    "define the maximum extent the view may have -
-     depends on good-will of window manager"
-
-    maxExtent ~= max ifTrue:[
-        maxExtent := max.
-        maxExtent x isNil ifTrue:[
-            maxExtent := 99999 @ maxExtent y.
-        ].
-        maxExtent y isNil ifTrue:[
-            maxExtent := maxExtent x @ 99999.
-        ].
-
-        drawableId notNil ifTrue:[
-            device setWindowMinExtent:nil maxExtent:max in:drawableId
-        ].
-
-        "/ if my current extent is larger than the new
-        "/ maxExtent, adjust.
-
-        (width notNil and:[height notNil]) ifTrue:[
-            ((width > (max x)) or:
-             [height > (max y)]) ifTrue: [
-                self extent:(max min:self extent)
-            ]
-        ]
-    ].
-!
-
-minExtent
-    "return the views minimum allowed extent"
-
-    ^ minExtent
-!
-
-minExtent:min
-    "define the minimum extent the view may have -
-     depends on good-will of window manager"
-
-    minExtent ~= min ifTrue:[
-	minExtent := min.
-	drawableId notNil ifTrue:[
-	    device setWindowMinExtent:min maxExtent:nil in:drawableId
-	].
-
-	"/ if my current extent is smaller than the new
-	"/ minExtent, adjust.
-
-	(width notNil and:[height notNil]) ifTrue:[
-	    ((width < (min x)) or:
-	     [height < (min y)]) ifTrue: [
-		self extent:(min max:self extent)
-	    ]
-	]
-    ]
-
-! !
-
-!StandardSystemView methodsFor:'accessing-look'!
-
-icon
-    "return the form defined as icon"
-
-    ^ icon value
-!
-
-icon:aFormOrImage
-    "define the form or image (bitmap) used as icon"
-
-    |i m iconValue|
-
-    icon := aFormOrImage.
-    iconValue := icon value.
-    iconValue notNil ifTrue:[
-        drawableId notNil ifTrue:[
-            i := self convertedIcon:iconValue.
-            (i notNil and:[i id notNil]) ifTrue:[
-                (m := iconValue mask) notNil ifTrue:[
-                    m := self convertedIconMask:m.
-                ].
-                device setWindowIcon:i mask:m in:drawableId
-            ]
-        ]
-    ]
-
-    "Modified: 4.4.1997 / 16:20:52 / cg"
-!
-
-iconLabel
-    "return the name displayed in the icon"
-
-    ^ iconLabel
-!
-
-iconLabel:aString
-    "define the name to be displayed in the icon"
-
-    |newLabel|
-
-    (newLabel := aString string) ~= iconLabel ifTrue:[
-	iconLabel := newLabel.
-	drawableId notNil ifTrue:[
-	    device setIconName:newLabel in:drawableId.
-	    "
-	     unbuffered - to make it visible right NOW
-	    "
-	    device flush.
-	]
-    ]
-!
-
-iconMask
-    "return the form defined as iconMask.
-     Notice, that many windowManagers ignore this mask
-     (usually, only managers which place icons on the background desktop
-      care for an icon - if at all ...)"
-
-    |mask|
-
-    "/ only images possibly have iconMasks
-    icon notNil ifTrue:[
-        (mask := icon value mask) notNil ifTrue:[
-            ^ self convertedIconMask:mask
-        ]
-    ].
-
-    ^ nil
-
-    "Modified: 4.4.1997 / 16:39:00 / cg"
-!
-
-iconName:aString
-    "this method will vanish soon ... - for backward compatibility"
-
-    <resource:#obsolete>
-
-    self obsoleteMethodWarning:'use #iconLabel:'.
-    self iconLabel:aString
-!
-
-iconView
-    "return the view used as icon-view"
-
-    ^ iconView
-!
-
-iconView:aView
-    "specify the view to be used as icon.
-     This may not be supported on all display types"
-
-    iconView := aView.
-    drawableId notNil ifTrue:[
-	aView create.
-	device setWindowIconWindow:aView in:drawableId.
-	aView setRealized:true.
-    ]
-
-    "Modified: 4.4.1997 / 16:21:37 / cg"
-!
-
-label
-    "return the views name in the title area"
-
-    ^ label
-!
-
-label:aString
-    "define the views name in the windows title area.
-     If IncludeHostNameInLabel is true, prepend the hostname
-     (you will appreciate this, if you are working on multiple
-      machines simultaneously - as I do ...)"
-
-    |newLabel|
-
-    (newLabel := aString string) ~= label ifTrue:[
-        label := newLabel.
-        drawableId notNil ifTrue: [
-            device setWindowName:(self windowLabelFor:label) in:drawableId.
-            shown ifTrue:[
-                "
-                 unbuffered - to make it visible right NOW
-                "
-                device flush.
-            ]
-        ]
-    ]
-
-    "Created: / 8.9.1995 / 19:37:06 / claus"
-    "Modified: / 8.9.1995 / 19:39:18 / claus"
-    "Modified: / 3.8.1998 / 17:05:10 / cg"
-!
-
-label:labelString iconLabel:iconLabelString
-    "set both the label and the iconLabel"
-
-    self label:labelString.
-    self iconLabel:iconLabelString
-! !
-
-!StandardSystemView methodsFor:'change & update'!
-
-update:something with:aParameter from:changedObject
-    "the MVC way of changing the label ..."
-
-    changedObject notNil ifTrue:[
-        changedObject == labelChannel ifTrue:[
-            self label:labelChannel value.
-            ^ self
-        ].
-    ].
-    ^ super update:something with:aParameter from:changedObject
-! !
-
-!StandardSystemView methodsFor:'destroying'!
-
-release
-    self removeFromCurrentProject.
-    labelChannel notNil ifTrue:[
-        labelChannel removeDependent:self.
-        labelChannel := nil.
-    ].
-    windowGroup notNil ifTrue:[
-        windowGroup focusSequence:nil.
-    ].
-    super release.
-!
-
-saveAndTerminate
-    "save & terminate request from the windowManager. The application should 
-     save its data/files/text etc. somehow and close.
-     If there is an application, let it decide how do do that.
-     Otherwise, forward it to superclasses which knows how to do this.
-     (it defaults to a terminate there).
-     Notice, that not all windowmanagers are nice enough
-     to send this request; some simply distroy the view."
-
-    application notNil ifTrue:[
-	application saveAndTerminateRequestFor:self
-    ] ifFalse:[
-	super saveAndTerminate
-    ]
-!
-
-terminate
-    "terminate request from the windowManager. If there is an application,
-     let it decide if it really wants to be close. Otherwise, forward it to
-     superclasses terminate which knows how to do this.
-     Notice, that not all windowmanagers are nice enough
-     to send this request; some simply distroy the view."
-
-    application notNil ifTrue:[
-	application closeRequestFor:self
-    ] ifFalse:[
-	self closeRequest.
-    ]
-
-    "Modified: / 3.8.1998 / 19:49:45 / cg"
-! !
-
-!StandardSystemView methodsFor:'event handling'!
-
-focusIn
-    "the view got the keyboard focus (via the window manager).
-     I.e. the mouse was moved out into the topView area - restore the
-     focus to the previous focusView.."
-
-    |v|
-
-    windowGroup notNil ifTrue:[
-        "/ I got the focus - tell the current focus-windowgroup
-        "/ that its focus is gone elsewhere ...
-"/ 'focusIn ' print. windowGroup process name printCR.
-"/ 'focusView is ' print. windowGroup focusView printCR.
-
-        WindowGroup takeFocusFromDevice:device.
-
-        v := windowGroup focusView.
-        v isNil ifTrue:[
-            UserPreferences current focusFollowsMouse ~~ false ifTrue:[
-                v := windowGroup pointerView.
-"/ 'pointerView is ' print. v printCR.
-                (v notNil 
-                and:[v isKeyboardConsumer not
-                and:[v wantsFocusWithPointerEnter not]]) ifTrue:[
-                    "/ no - not this one
-"/ 'not a kbdConsumer' printCR.
-                    v := nil.
-                ]
-            ]
-        ].
-        v isNil ifTrue:[
-            self assignInitialKeyboardFocus.
-        ] ifFalse:[
-            "/ v requestFocus.  - will be denied; but we must force it here
-            windowGroup focusView:v byTab:false.
-        ]
-    ].
-    super focusIn
-
-    "Modified: / 23.5.1999 / 14:00:20 / cg"
-!
-
-focusOut
-    "the top-view lost the keyboard focus (via the window manager).
-     I.e. the mouse was moved out of the topView area."
-
-    |v|
-
-    windowGroup notNil ifTrue:[
-	(v := windowGroup focusView) notNil ifTrue:[
-	    v showNoFocus:(windowGroup explicitFocusView == v).
-	    v hasKeyboardFocus:false.
-	]
-    ].
-    super focusOut
-
-    "Modified: 25.2.1997 / 23:19:46 / cg"
-!
-
-showActivity:someMessage
-    "some activityNotification shalt be communicated to
-     the user. Forward it to my application (if any).
-     (that one should know how to deal with it).
-     Otherwise, simply ignore it."
-
-    application notNil ifTrue:[
-	application showActivity:someMessage
-    ]
-
-    "Created: 16.12.1995 / 18:40:44 / cg"
-    "Modified: 23.4.1996 / 21:38:11 / cg"
-! !
-
-!StandardSystemView methodsFor:'initialization & release'!
-
-addToCurrentProject
-    "add the receiver (a topview) to the current projects set-of-views.
-     (If there is a current project)"
-
-    |p|
-
-    "
-     the following check allows systems
-     without projects and changeSets
-    "
-    (Project notNil and:[(p := Project current) notNil]) ifTrue:[
-	p addView: self
-    ]
-!
-
-defaultControllerClass
-    "for ST-80 compatibility only - not used in ST/X"
-
-    ^ nil "/ StandardSystemController
-!
-
-initEvents
-    super initEvents.
-    self enableFocusEvents.
-!
-
-initialize
-    super initialize.
-
-    borderWidth := 2.         "- notice: many window managers ignore this"
-    device platformName = 'WIN32' ifTrue:[
-        minExtent := 0 @ 0.
-    ] ifFalse:[
-        minExtent := 10 @ 10.
-    ].
-
-"/ This code is bad for 2 reasons:
-"/ - KDE (3.2) WM does not show the maximize button if the maxExtent is restricted.
-"/ - why restrict the size of a window?
-"/    maxExtent := device usableExtent "- (0 @ device captionHeight)".
-
-    label isNil ifTrue:[label := self class defaultLabel].
-    icon isNil ifTrue:[icon := self class defaultIcon].
-
-    "Modified: 14.6.1996 / 17:18:28 / stefan"
-!
-
-reAdjustGeometry
-    "sent as a final step when an image is restarted.
-     when we come up on a smaller display, 
-     make certain, that the receiver is visible"
-
-    |dX dY limitRight limitBottom|
-
-    dX := (device horizontalPixelPerMillimeter * 20) rounded.
-    dY := (device verticalPixelPerMillimeter * 20) rounded.
-
-    limitRight := device usableWidth - dX.
-    limitBottom := device usableHeight - dY.
-    ((self left > limitRight) or:[
-      self top > limitBottom]) ifTrue:[
-	'StandardSystemView [info]: moving view into visible area' infoPrintCR.
-	self origin:limitRight @ limitBottom
-    ]
-
-    "Modified: 10.1.1997 / 15:12:19 / cg"
-!
-
-reinitialize
-    "reopen the receiver if if was visible before.
-     This is called right after snapIn; Notice, that all instance variables
-     (such as shown, realized etc.) are left-overs from the time the snapout
-     was done. Remap the receiver, if it was mapped at snapout time"
-
-    |myController|
-
-    "if I have already been reinited - return"
-    drawableId notNil ifTrue:[
-	^ self
-    ].
-
-    "have to kludge with the controller 
-     - otherwise its startup performs unwanted actions ..."
-
-    myController := controller.
-    controller := nil.
-
-    "physically create the view & subviews"
-    self recreate.
-
-    "if I was iconified (not realized), remap iconified"
-    device 
-	mapView:self id:drawableId iconified:(realized "shown" not) 
-	atX:left y:top width:width height:height
-	minExtent:minExtent maxExtent:maxExtent.
 
-    "and restart the window-group process"
-    windowGroup notNil ifTrue:[
-	windowGroup restart
-    ].
 
-    "restore controller"
-    controller := myController
-
-    "Modified: / 6.5.1999 / 09:50:13 / cg"
-!
-
-removeFromCurrentProject
-    "remove the receiver (a topview) from the current projects set-of-views.
-     (If there is a current project)"
-
-    |p|
-
-    "
-     the following check allows systems
-     without projects and changeSets
-    "
-    (Project notNil and:[(p := Project current) notNil]) ifTrue:[
-	p removeView:self
-    ]
-!
-
-restarted
-    "sent by my windowGroup, when restarted from an image.
-     Nothing done here, but can be redefined to perform any actions
-     required to reset the application after an image-restart.
-     (for example: check if application files are still around, restart
-     subprocesses etc.)."
-
-    application notNil ifTrue:[
-	application restarted
-    ].
-! !
-
-!StandardSystemView methodsFor:'printing & storing'!
-
-displayString
-    "just for your convenience in inspectors ...
-     ... add the views label to the displayString."
-
-    |s|
-
-    s := super displayString.
-    label notNil ifTrue:[
-	s := s , '(' , label , ')'
-    ].
-    ^ s
-! !
-
-!StandardSystemView methodsFor:'private'!
-
-convertedIcon
-    "make certain, that the icon is compatible with my device;
-     this means converting it to a format (typically: monochrome) which
-     the device supports. Return a compatible version of the icon."
-
-    ^ self convertedIcon:icon
-
-    "Modified: 10.6.1996 / 19:42:20 / cg"
-!
-
-convertedIcon:iconArg
-    "make certain, that the image argument is compatible with my device;
-     this means converting it to a format (typically: monochrome) which
-     the device supports. Return a compatible version of the icon."
-
-    |deviceIcon d toMono toDeep icon|
-
-    icon := iconArg value.
-    icon isNil ifTrue:[^ nil].
-
-    toMono := toDeep := false.
-
-    d := icon depth.
-    device supportsDeepIcons ifFalse:[
-        (d ~~ 1 or:[icon isImage]) ifTrue:[
-            "
-             dither to monochrome
-            "
-            toMono := true.
-        ]
-    ] ifTrue:[
-        d == 1 ifTrue:[
-            icon colorMap notNil ifTrue:[
-                icon isImage ifFalse:[
-                    toMono := true.
-                ] ifTrue:[
-                    toDeep := true.
-                ]
-            ]
-        ] ifFalse:[
-            d ~~ device depth ifTrue:[
-                icon isImage ifFalse:[
-                    toMono := true.
-                ] ifTrue:[
-                    toDeep := true.
-                ]
-            ]
-        ]
-    ].
-
-    deviceIcon := icon.
-    toMono ifTrue:[
-        deviceIcon := icon asMonochromeFormOn:device.
-    ].
-    toDeep ifTrue:[
-        deviceIcon := (Image implementorForDepth:device depth)
-                        fromImage:icon.
-    ].
-
-    deviceIcon notNil ifTrue:[
-        "
-         get device pixmap (i.e. allocate colors & resource)
-        "
-        deviceIcon := deviceIcon onDevice:device
-    ].
-    ^ deviceIcon
-
-    "Created: 10.6.1996 / 19:41:31 / cg"
-    "Modified: 17.6.1997 / 11:46:44 / cg"
-!
-
-convertedIconMask:aMask
-    "return a version of the argument which can be used as an iconMask
-     on my device. Typically, this means conversion to a monochrome
-     mask - future versions may add alpha channel masks, if the device supports
-     them ..."
-
-    device supportsIconMasks ifFalse:[^ nil].
-
-    aMask depth ~~ 1 ifTrue:[
-	^ aMask asMonochromeFormOn:device
-    ].
-    ^ aMask
-
-    "Modified: / 28.4.1999 / 20:00:00 / cg"
-!
-
-setWindowGroupFromApplication
-    "get the applications topView and set my windowGroup to its wg."
-
-    |win master|
-
-    windowGroup isNil ifTrue:[
-        application notNil ifTrue:[
-            (win := application window) notNil ifTrue:[
-                win ~~ self ifTrue:[
-                    windowGroup := win windowGroup.
-                    ^ self
-                ].
-                (master := application masterApplication) notNil ifTrue:[
-                    (win := master window) notNil ifTrue:[
-                        windowGroup := win windowGroup.
-                        ^ self
-                    ].
-                ].
-            ]
-        ]
-    ].
-
-    "Created: 22.9.1995 / 17:40:36 / claus"
-    "Modified: 6.3.1996 / 16:17:32 / cg"
-!
-
-windowLabelFor:labelString
-    "return an expanded labelString, according to the hostName-in-window setting.
-     The labelString may include positional parameters:
-        %1 - the actual label
-        %2 - the hostname
-        %3 - the userName
-        %4 - the processId
-        %5 - the TOP-directories name
-        %6 - the TOP-directories path
-    "
-
-    |wg proc id pidString lbl windowLabelFormat|
-
-    (IncludeHostNameInLabel == true
-    and:[(windowLabelFormat := self class windowLabelFormat) notNil]) ifTrue:[
-        (wg := self windowGroup) notNil ifTrue:[
-            (proc := wg process) notNil ifTrue:[
-                (id := proc id) notNil ifTrue:[
-                    pidString := id printString
-                ]
-            ]
-        ].
-        lbl := windowLabelFormat 
-                bindWith:labelString 
-                with:[OperatingSystem getHostName]
-                with:[OperatingSystem getLoginName]
-                with:pidString
-                with:[(Smalltalk getPackageDirectoryForPackage:'stx') directory baseName]
-                with:[(Smalltalk getPackageDirectoryForPackage:'stx') directory pathName].
-        ^ lbl
-    ].
-    ^ labelString
-
-    "Created: / 22-09-1997 / 10:10:32 / cg"
-    "Modified: / 22-08-2006 / 11:42:53 / cg"
-! !
-
-!StandardSystemView methodsFor:'queries'!
-
-focusSequence
-    "return a sequence which defines the order in which the focus
-     is passed for FocusNext and FocusPrevious keys.
-
-     All views which like to support these keys should either redefine
-     this method and return a collection of (sub-) views.
-     Or, if the model is some applicationModel, it may itself define
-     the focusSequence.
-     Or, somehow let me (via focusSequence:) know about the order.
-
-     Notice: I dont think this is good style: the focusSequence seems
-     to belong into the controller or the builder ..."
-
-    "/
-    "/ if I have an application, its supposed to
-    "/ know about the focusSequence
-    "/
-    application notNil ifTrue:[
-	^ application focusSequence
-    ].
-
-    "/ is that really a good idea ?
-
-    (model notNil
-    and:[(model respondsTo:#focusSequence)
-    and:[model ~~ self]]) ifTrue:[
-	^ model focusSequence
-    ].
-    ^ nil
-
-    "Modified: / 31.10.1997 / 19:14:02 / cg"
-!
-
-processName
-    "return a string to be shown for my process in the
-     process monitor. This has no semantic meaning, but exists
-     for your convenience only."
-
-    application notNil ifTrue:[
-	^ application processName
-    ].
-    label notNil ifTrue:[^ label].
-    ^ super processName
-
-    "Modified: 24.4.1996 / 09:47:01 / cg"
-! !
-
-!StandardSystemView methodsFor:'realization'!
-
-collapse
-    "iconify the receiver"
-
-    shown ifTrue:[
-	self unmap.
-
-	"if it was iconified, try to remap iconified"
-	device
-	    mapView:self id:drawableId iconified:true 
-	    atX:left y:top width:width height:height
-	    minExtent:minExtent maxExtent:maxExtent.
-	shown := false.
-    ].
-
-    "
-     |top|
-
-     top := StandardSystemView new.
-     top label:'hello'.
-     top openAndWait.
-     Delay waitForSeconds:2.
-     top collapse.
-     Delay waitForSeconds:2.
-     top expand.
-    "
-
-    "Modified: 24.7.1997 / 12:32:17 / cg"
-!
-
-create
-    "create - make certain that icon is available"
-
-    super create.
-
-    iconView notNil ifTrue:[
-        iconView create.
-        device setWindowIconWindow:iconView in:drawableId.
-        iconView setRealized:true.
-    ].
-    iconLabel notNil ifTrue:[
-        device setIconName:iconLabel string in:drawableId
-    ]
-
-    "Modified: 10.6.1996 / 20:14:50 / cg"
-!
-
-expand
-    "de-iconify the receiver at its old position"
-
-    shown ifFalse:[
-	self unmap.
-
-	"if it was iconified, try to remap iconified"
-	device
-	    mapView:self id:drawableId iconified:false 
-	    atX:left y:top width:width height:height
-	    minExtent:minExtent maxExtent:maxExtent.
-    ].
-
-    "
-     |top|
-
-     top := StandardSystemView new.
-     top label:'hello'.
-     top openAndWait.
-     top collapse.
-     Delay waitForSeconds:5.
-     top expand.
-    "
-
-    "Modified: / 3.2.1998 / 16:02:56 / cg"
-!
-
-physicalCreate
-    "common code for create & recreate"
-
-    |lbl iconValue icn icnMask windowClassNameString|
-
-    lbl := self windowLabelFor:label.
-
-    icon notNil ifTrue:[
-        iconValue := icon value.
-        icn := self convertedIcon:iconValue.
-        (icnMask := iconValue mask) notNil ifTrue:[
-            icnMask := self convertedIconMask:icnMask
-        ].
-        deviceIcon := icn.
-    ].
-
-    "/ give global eventListeners a chance to intercept windowCreation
-    "/ and provide another origin (by payching my origin via setOrigin:).
-    WindowSensor preViewCreateNotification:self.
-
-    drawableId := device 
-                      createWindowFor:self 
-                      type:(self windowType)
-                      origin:(left @ top)
-                      extent:(width @ height)
-                      minExtent:minExtent
-                      maxExtent:maxExtent
-                      borderWidth:borderWidth
-                      subViewOf:nil 
-                      style:(self windowStyle)
-                      inputOnly:(self isInputOnly)
-                      label:lbl
-                      owner:nil
-                      icon:icn iconMask:icnMask
-                      iconView:iconView.
-
-    Lobby registerChange:self.
-
-    "/ give global listeners a chance to track views
-    WindowSensor postViewCreateNotification:self.
-
-    self extentChangedFlag:false.
-    self originChangedFlag:false.
-
-    (borderColor notNil and:[borderColor ~= Black]) ifTrue:[
-        self setBorderColor
-    ].
-
-"/  (viewGravity notNil "and:[viewGravity ~~ #NorthWest]") ifTrue:[
-"/        device setWindowGravity:viewGravity in:drawableId
-"/  ].
-
-"/  (bitGravity notNil "and:[bitGravity ~~ #NorthWest]") ifTrue:[
-"/      device setBitGravity:bitGravity in:drawableId
-"/  ].
-
-    viewShape notNil ifTrue:[
-        self setViewShape
-    ].
-
-    (backed notNil and:[backed ~~ false]) ifTrue:[
-        device setBackingStore:backed in:drawableId
-    ].
-    self saveUnder ifTrue:[
-        device setSaveUnder:true in:drawableId
-    ].
-    cursor notNil ifTrue:[
-        self setCursor
-    ].
-
-    application isNil ifTrue:[
-        (self class == StandardSystemView and:[subViews size == 1]) ifTrue:[
-            "This is a subclass of SimpleView wrapped into a StandardSystemView"
-            windowClassNameString := subViews first className.
-        ] ifFalse:[
-            windowClassNameString := self className.
-        ]
-    ] ifFalse:[
-        windowClassNameString := application className.
-    ].
-    self setWindowClass:('Stx.', windowClassNameString) name:"name"'bla'.
-
-    "Modified: 14.6.1996 / 17:14:25 / stefan"
-    "Modified: 22.9.1997 / 10:11:16 / cg"
-!
-
-postRealize
-    "postRealize actions - tell the application (if any)."
-
-    super postRealize.
-    "/
-    "/ let the application add its views to the current project
-    "/
-    application notNil ifTrue:[
-	application opened:self.
-    ] ifFalse:[
-	self addToCurrentProject.
-    ].
-
-    "Created: 24.7.1997 / 18:11:26 / cg"
-!
-
-preRealize
-    "invoked right before the view is realized.
-     preRealize actions - tell the application (if any)."
-
-    super preRealize.
-
-    application notNil ifTrue:[
-        application aboutToOpen:self.
-    ].
-!
-
-recreate
-    "recreate the view after a snap-in or a migration"
-
-    super recreate.
-
-    iconView notNil ifTrue:[
-        iconView recreate.
-        device setWindowIconWindow:iconView in:drawableId.
-        iconView setRealized:true.
-    ] ifFalse:[
-        icon notNil ifTrue:[
-            self icon:(self convertedIcon:icon).
-        ].
-    ].
-
-    iconLabel notNil ifTrue:[
-        device setIconName:iconLabel in:drawableId
-    ]
-
-    "Modified: 4.4.1997 / 16:16:40 / cg"
-! !
-
-!StandardSystemView class methodsFor:'documentation'!
-
-version
-    ^ '$Header: /cvs/stx/stx/libview/StandardSystemView.st,v 1.168 2006-08-22 09:42:59 cg Exp $'
-! !
 
 StandardSystemView initialize!