'From Squeak3.5 of ''11 April 2003'' [latest update: #5180] on 27 April 2003 at 6:13:08 pm'! "Change Set: skin-importer Date: 23 February 2003 Author: Stephan B. Wessels SM Name: Skins II Requires change sets: dialogs, importer-support and xpm-support. DO NOT EDIT THIS PREAMBLE MANUALLY. See ImportedSkin updateChangeSetPreambleForSkinImporter Date Update ------------- ----------------------------------------------------------------------------------- 20-apr-2003 Added prerequisite change set checking to preamble. 13-apr-2003 Factored creation of skin preferences. Added preference to show progress of skin being applied. Changed default preferences for skins. Fill in the blank and simple button morph skinned. 12-apr-2003-5 Show load progress while applying skin. New preference to manage setting of text highlight color. 12-apr-2003-4 Make auto setting of current skin to default to true. Scroll bar colors are set by optional values in theme file. 12-apr-2003-3 Fixed a recursion problem when loading from a project morph. 12-apr-2003-2 Added menu item to explicitly load a desktop background if available in the theme file. When setting text colors is permitted, make the highlight colors correct for the window when it becomes active. Check for undefined highlight colors. 12-apr-2003-1 Generalized the change set preamble maintenance code so that the bug report logic can also identify the versions of the related change sets. 12-apr-2003 Added features to make the project easier to maintain. This includes easier revision history/notes generation and tracking of known bugs. Bug reports via email. Fixed bug where dimensions of menu button was wrong. 10-apr-2003 Changed skin application so that a Preference decides if the latest applied skin becomes the curren skin. Added a menu item to manually set the skin applied to a window as the current skin. 08-apr-2003 First pass at supporting menu background forms. Incomplete. PluggableButtonMorphs in window are controlled by skin with a preference. SimpleButtonMorphs are also skinned. 07-apr-2003 Text pane colors supported (preliminary). Removed special class that was part of enhanced IRC client. Skins preferences added. Former single preference was moved from #windows preference category to new #skins category. Support for theme backgrounds added. Handle tiled backgrounds and centered morphs as backgrounds. Check first for image background, then background color theme setting. 06-apr-2003 Improved border color and window label management. Use assigned skin to set colors for balloon help. Use titlebar text colors for titlebar icons when no icons are specified in original theme. Moved postLoad logic to the class ImportedSkin. NOTE: Themes must be reloaded after change-set install. Clear skin parameters (and postLoad of change-set) also disables the auto-assign skins preference. DNU exceptions disable the auto skin preference first. Better management of themes that remove some key titlebar widgets. Added menu item to preload all themes in a folder. ListBox theme parameters are now applied for skinned windows. Menu titles support added. 05-apr-2003 Better management of overall skins removal. See ImportedSkin class>>clear. Continue to fill in skins parameters from the theme definition files. 04-apr-2003 Improved vertical positioning of string label in window title bar. Improved horizontal position when non-centered. Better handling of window label string when window is resized. Use theme definitions for window border color and size when no themed border frames are specified. Support for list box theme parameters. 03-apr-2003 System Window menu has name of applied theme. Removed unused instance variable from ImportedIceWMSkin. Added support for button colors defined in theme. Added skin menu items to SystemWindow custom morphic menu (red menu) since some themes disable the regular menu in the title bar. Use menu color parameters from the current skin if the automatic preference is true. 02-apr-2003 Initial release. FEATURES: This project is a rewrite of the Skins code written in 1998 for Squeak 2.7. This new version is known to work in Squeak 3.4, 3.5 and 3.6-beta. This new model attempts to accomplish a couple of goals that I saw as defects in the original skins model: - Use ""standard"" theme files from the open source Linux world. - Replace existing morphic components in the skinned window by finding them dynamically, not requiring special subclassed window code. -Provide a way to delete a theme and restore the window to it's original state. Key features include: Standard theme files from Ice Window Manager are supported. See http://themes.freshmeat.net for published theme files that work with Skins II. The standard menu in the System Window is enhanced to provide skins management for the system as well as for only that specific window. SystemWindow custom morphic menu (red menu) supports the same options. This was done because some IceWM theme definitions remove the menu from the window title bar. Parameters are available in the Preferences panel under #skins, providing explicit controls over elements that are active in a skinned window. The window title bar is skinned. The contents of list boxes is skinned. Pluggable buttons are skinned. Alignment panes and text panes are skinned. The World desktop can be defined by the skin. Menus are skinned. Balloon help is skinned. KNOWN BUGS: decorated buttons do not undecorate correctly same is true for removal of skin, decorated buttons remain skinned. color of text selection should be reset for each front-most window theme. Still broken. Related is that the current skin defines other behavior and the current should be reset each time another window is put in front. spacing gap with Notif2 on right side buttons " | prereqSMName continue cs prereqCSName prereqRevDateRqd | prereqCSName _ 'Dialogs-sbw'. prereqSMName _ 'FileList2 Dialogs Enhancement'. prereqRevDateRqd _ '15-apr-2003' asDate. continue _ (ChangeSorter respondsTo: #assurePrerequisiteChangeSetNamed:withSqueakMapName:revisionDate:) ifTrue: [ChangeSorter assurePrerequisiteChangeSetNamed: prereqCSName withSqueakMapName: prereqSMName revisionDate: prereqRevDateRqd] ifFalse: [cs _ ChangeSorter changeSetNamed: prereqCSName. cs isNil ifTrue: [(Object confirm: 'The package "' , prereqSMName , '" is not installed in your image. Do you want me to install it for you?. Please note that "' , prereqSMName , '" is required for the package you are about to install.') and: []. (Smalltalk at: #SMSqueakMap ifAbsent: []) ifNil: [Object error: 'You don''t have installed Squeakmap in your image']. Utilities informUser: 'Installing "' , prereqSMName , '"...' during: [(Smalltalk at: #SMSqueakMap) default installPackageNamed: prereqSMName]. true] ifFalse: [true]]. continue ifFalse: [Object error: 'Unable to load prerequisite package.']. prereqCSName _ 'importer-support'. prereqSMName _ 'Skins Importer Support'. prereqRevDateRqd _ '12-apr-2003' asDate. continue _ (ChangeSorter respondsTo: #assurePrerequisiteChangeSetNamed:withSqueakMapName:revisionDate:) ifTrue: [ChangeSorter assurePrerequisiteChangeSetNamed: prereqCSName withSqueakMapName: prereqSMName revisionDate: prereqRevDateRqd] ifFalse: [cs _ ChangeSorter changeSetNamed: prereqCSName. cs isNil ifTrue: [(Object confirm: 'The package "' , prereqSMName , '" is not installed in your image. Do you want me to install it for you?. Please note that "' , prereqSMName , '" is required for the package you are about to install.') and: []. (Smalltalk at: #SMSqueakMap ifAbsent: []) ifNil: [Object error: 'You don''t have installed Squeakmap in your image']. Utilities informUser: 'Installing "' , prereqSMName , '"...' during: [(Smalltalk at: #SMSqueakMap) default installPackageNamed: prereqSMName]. true] ifFalse: [true]]. continue ifFalse: [Object error: 'Unable to load prerequisite package.']. prereqCSName _ 'xpm-support'. prereqSMName _ 'XPM Support'. prereqRevDateRqd _ '08-apr-2003' asDate. continue _ (ChangeSorter respondsTo: #assurePrerequisiteChangeSetNamed:withSqueakMapName:revisionDate:) ifTrue: [ChangeSorter assurePrerequisiteChangeSetNamed: prereqCSName withSqueakMapName: prereqSMName revisionDate: prereqRevDateRqd] ifFalse: [cs _ ChangeSorter changeSetNamed: prereqCSName. cs isNil ifTrue: [(Object confirm: 'The package "' , prereqSMName , '" is not installed in your image. Do you want me to install it for you?. Please note that "' , prereqSMName , '" is required for the package you are about to install.') and: []. (Smalltalk at: #SMSqueakMap ifAbsent: []) ifNil: [Object error: 'You don''t have installed Squeakmap in your image']. Utilities informUser: 'Installing "' , prereqSMName , '"...' during: [(Smalltalk at: #SMSqueakMap) default installPackageNamed: prereqSMName]. true] ifFalse: [true]]. continue ifFalse: [Object error: 'Unable to load prerequisite package.']. ! Object subclass: #ImportedSkin instanceVariableNames: 'directory ' classVariableNames: 'Current SkinForms SkinParameters ' poolDictionaries: '' category: 'Skins-Support'! ImportedSkin subclass: #ImportedIceWMSkin instanceVariableNames: 'folderName ' classVariableNames: '' poolDictionaries: '' category: 'Skins-Support'! !ImportedIceWMSkin commentStamp: 'sbw 3/7/2003 20:15' prior: 0! 18k Centered: false Buttons Left: Buttons Right: Buttons Supported: xmirshd 708090-1.1 Centered: false Buttons Left: Buttons Right: Buttons Supported: xmir Absolute_I Centered: false Buttons Left: Buttons Right: xmi Buttons Supported: AbsoluteBlue Centered: true Buttons Left: Buttons Right: Buttons Supported: aesthete Centered: true Buttons Left: shr Buttons Right: xmi Buttons Supported: xmishr aeteria Centered: true Buttons Left: x Buttons Right: mi Buttons Supported: xmir aquablue Centered: false Buttons Left: x Buttons Right: s Buttons Supported: xmsir Athens Centered: false Buttons Left: Buttons Right: Buttons Supported: axxlite Centered: false Buttons Left: ir Buttons Right: xm Buttons Supported: xmir Beamer Centered: true Buttons Left: sr Buttons Right: xmi Buttons Supported: xmirs blueCrux Centered: false Buttons Left: s Buttons Right: xmi Buttons Supported: xmisrhd BlueSteelSlim Centered: false Buttons Left: x Buttons Right: smi Buttons Supported: xmis Breaker51 Centered: false Buttons Left: s Buttons Right: ximr Buttons Supported: ximrs BrushedMetal Centered: false Buttons Left: s Buttons Right: xmi Buttons Supported: chui Centered: false Buttons Left: Buttons Right: Buttons Supported: xmirsh Deathray Centered: false Buttons Left: Buttons Right: Buttons Supported: xmirhs E15 Centered: false Buttons Left: Buttons Right: Buttons Supported: Eazel Centered: true Buttons Left: Buttons Right: Buttons Supported: xmisrhd flourineDreams Centered: false Buttons Left: Buttons Right: Buttons Supported: Helix Centered: true Buttons Left: s Buttons Right: xmi Buttons Supported: liQuid Centered: false Buttons Left: Buttons Right: Buttons Supported: xmirsh MajesticOS12 Centered: true Buttons Left: i Buttons Right: x Buttons Supported: NeXT Centered: true Buttons Left: i Buttons Right: x Buttons Supported: PHOENIX Centered: true Buttons Left: shd Buttons Right: xmir Buttons Supported: xmirhsd shade3D Centered: false Buttons Left: Buttons Right: Buttons Supported: sortofaqua Centered: true Buttons Left: xim Buttons Right: r Buttons Supported: xmir Stone Centered: false Buttons Left: Buttons Right: Buttons Supported: xmihsr Thane Centered: false Buttons Left: s Buttons Right: xmi Buttons Supported: Urbicande Centered: true Buttons Left: Buttons Right: Buttons Supported: sxmir Whistling Centered: false Buttons Left: s Buttons Right: xmi Buttons Supported: sxim woodit Centered: false Buttons Left: s Buttons Right: xmi Buttons Supported: xmis xp-new Centered: false Buttons Left: Buttons Right: Buttons Supported: xrmis Title Buttons Supported Chars: dhimrsx d = ??? (used in PHOENIX) h = handle activate? (used in aesthete) i = iconize m = maximize r = roll up/down s = graphic x = close button ! Object subclass: #SkinApplicator instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Skins-Support'! SkinApplicator subclass: #IceWMSkinApplicator instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Skins-Support'! IconicButton subclass: #SkinnedIconicButton instanceVariableNames: 'activeForm inactiveForm altActiveForm altInactiveForm useAlt ' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'! !ProtoObject methodsFor: 'system primitives' stamp: 'sbw 4/6/2003 12:25'! doesNotUnderstand: aMessage Preferences disable: #automaticApplicationOfSkins. (MessageNotUnderstood new message: aMessage) signal! ! !Object methodsFor: 'error handling' stamp: 'sbw 4/6/2003 12:12'! doesNotUnderstand: aMessage "Handle the fact that there was an attempt to send the given message to the receiver but the receiver does not understand this message (typically sent from the machine when a message is sent to the receiver and no method is defined for that selector)." "Testing: (3 activeProcess)" (Preferences autoAccessors and: [self tryToDefineVariableAccess: aMessage]) ifTrue: [^ aMessage sentTo: self]. Preferences disable: #automaticApplicationOfSkins. MessageNotUnderstood new message: aMessage; signal. ^ aMessage sentTo: self! ! !Object methodsFor: 'skins' stamp: 'sbw 4/3/2003 21:15'! skinToUse "Answers a skin or nil." | skin | Preferences automaticApplicationOfSkins ifTrue: [skin _ ImportedSkin current. skin isNil ifFalse: [skin isValid ifTrue: [^skin]]]. ^ nil! ! !CodeHolder methodsFor: 'controls' stamp: 'sbw 4/9/2003 12:17'! decorateForInheritance "Check to see if the currently-viewed method has a super send or an override, and if so, change screen feedback, unless the #decorateBrowserButtons says not to." | aColor aButton skin useSkin defaultColor selectedOnColor selectedOffColor strMorph decorated | (aButton _ self inheritanceButton) ifNil: [^ self]. skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinButtons]. useSkin _ useSkin and: [selectedOnColor _ skin colorActiveButton. selectedOffColor _ skin colorNormalButton. selectedOnColor isNil not and: [selectedOffColor isNil not]]. defaultColor _ useSkin ifTrue: [aButton getModelState ifTrue: [selectedOnColor] ifFalse: [selectedOffColor]] ifFalse: [Color transparent]. decorated _ false. aColor _ ((currentCompiledMethod isKindOf: CompiledMethod) not or: [Preferences decorateBrowserButtons not]) ifTrue: [defaultColor] ifFalse: [decorated _ true. currentCompiledMethod sendsToSuper ifTrue: [self isThereAnOverride ifTrue: [Color blue muchLighter] ifFalse: [Color green muchLighter]] ifFalse: [self isThereAnOverride ifTrue: [Color tan lighter] ifFalse: [decorated _ false. defaultColor]]]. aButton offColor: aColor. strMorph _ aButton allMorphs detect: [:m | m isKindOf: StringMorph] ifNone: []. strMorph isNil ifFalse: [ decorated ifTrue: [strMorph color: Color black] ]! ! !Error methodsFor: 'exceptionDescription' stamp: 'sbw 4/6/2003 12:30'! defaultAction "The current computation is terminated. The cause of the error should be logged or reported to the user. If the program is operating in an interactive debugging environment the computation should be suspended and the debugger activated." Preferences disable: #automaticApplicationOfSkins. self isDevelopmentEnvironmentPresent ifTrue: [self devDefaultAction] ifFalse: [self runtimeDefaultAction]! ! !Form methodsFor: '*patternLoader' stamp: 'sbw 11/16/2002 11:24'! scaledToSizeUsingMaximum: newExtent | scale | newExtent = self extent ifTrue: [^ self]. scale _ newExtent x / self width max: newExtent y / self height. ^ self magnify: self boundingBox by: scale smoothing: 2! ! !Form class methodsFor: '*patternLoader' stamp: 'sbw 11/22/2002 16:52'! openImageCenteredOnBackground: image | sketch previous | sketch _ SketchMorph withForm: image. sketch setToAdhereToEdge: #center; name: 'worldBackgroundImage'; lock. previous _ self currentWorld submorphNamed: 'worldBackgroundImage'. previous isNil ifFalse: [previous delete]. sketch openInWorld. sketch goBehind! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/7/2003 19:52'! applyBackgroundImage ^self! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/7/2003 22:33'! applyBackgroundImage: aForm | previous | aForm isNil ifFalse: [World extent x / aForm extent x asFloat > 1.4 ifTrue: [previous _ World submorphNamed: 'worldBackgroundImage'. previous isNil ifFalse: [previous delete]. aForm setAsBackground] ifFalse: [Form openImageCenteredOnBackground: (aForm scaledToSizeUsingMaximum: self currentWorld extent)]]! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 12:46'! createSkinHolders self class allSkinForms at: self internalSkinName put: Dictionary new. self class allSkinParameters at: self internalSkinName put: Dictionary new.! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 07:41'! defineSkinForm: aForm at: aKey self skinForms at: aKey put: aForm! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 18:15'! defineSkinParameters: aDict self isSkinLoaded ifFalse: [self createSkinHolders]. self class allSkinParameters at: self internalSkinName put: aDict! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 3/8/2003 11:35'! directory ^directory! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 3/8/2003 11:38'! directory: aDirectory directory _ aDirectory! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 07:38'! folderName ^''! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 3/5/2003 20:12'! initialize ^ self! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 18:34'! internalSkinName | stream tag | stream _ WriteStream on: ''. tag _ self class name. stream nextPutAll: tag. tag _ self folderName. tag isEmpty ifFalse: [stream nextPut: $.; nextPutAll: tag]. ^ stream contents! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/7/2003 20:20'! isBackgroundAlreadyLoaded (self class allSkinParameters includesKey: #backgroundAlreadyLoaded) ifFalse: [^ false]. ^ (self class allSkinParameters at: #backgroundAlreadyLoaded) = self internalSkinName! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 12:26'! isSkinLoaded ^self class allSkinForms includesKey: self internalSkinName! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/3/2003 21:13'! isValid ^false! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/10/2003 20:12'! makeSkinCurrent self class current: self! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/12/2003 08:52'! reportABug self class reportABugForSkin: self! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/12/2003 15:50'! restoreOriginalTextPaneColors | dict | (self class allSkinParameters includesKey: #originalTextPaneColors) ifFalse: [^ nil]. dict _ self class allSkinParameters at: #originalTextPaneColors. Preferences textHighlightColor: (dict at: #textHighlightColor:). Preferences insertionPointColor: (dict at: #insertionPointColor:)! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/12/2003 15:50'! restoreOriginalTextPaneColorsPermanent self restoreOriginalTextPaneColors isNil ifFalse: [ self class allSkinParameters removeKey: #originalTextPaneColors]! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/6/2003 22:07'! saveOriginalTextPaneColors | dict | (self class allSkinParameters includesKey: #originalTextPaneColors) ifTrue: [^ self]. dict _ Dictionary new. dict at: #textHighlightColor: put: Preferences textHighlightColor copy. dict at: #insertionPointColor: put: Preferences insertionPointColor copy. self class allSkinParameters at: #originalTextPaneColors put: dict! ]style[(26 3 5 5 4 38 23 15 4 4 4 3 10 7 4 5 20 6 11 27 4 5 21 6 11 28 4 29 23 6 4)f1b,f1,f1cblue;i,f1,f1cmagenta;,f1,f1c000148000,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000148000,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000148000,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1c000148000,f1,f1cblue;i! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/7/2003 20:21'! setBackgroundAlreadyLoaded self class allSkinParameters at: #backgroundAlreadyLoaded put: self internalSkinName! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 07:38'! skinDescription ^''! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 12:43'! skinForms self isSkinLoaded ifFalse: [self createSkinHolders]. ^ self class allSkinForms at: self internalSkinName! ! !ImportedSkin methodsFor: 'as yet unclassified' stamp: 'sbw 4/12/2003 18:03'! skinParameters ^ self class allSkinParameters at: self internalSkinName ifAbsent: [Dictionary new]! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/18/2003 18:01'! drawAllSkinFormsOnDisplay "ImportedSkin current drawAllSkinFormsOnDisplay" | form form2 | ' ' , self skinDescription , ' ' displayAt: 0 @ 0. form _ self drawWindowWidgetsOnDisplayAt: 0 @ 16. form2 _ self drawTitleBarFormsOnDisplayAt: form width + 10 @ 16. ^self drawBorderFormsOnDisplayAt: (form width + 10)@(form2 height + 10 + 16)! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/18/2003 17:39'! drawBorderFormsOnDisplay "ImportedSkin current drawBorderFormsOnDisplay" ^ self drawBorderFormsOnDisplayAt: 0 @ 0! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/18/2003 17:57'! drawBorderFormsOnDisplayAt: aPoint "ImportedSkin current drawBorderFormsOnDisplay" | forms dims activeSymbols rowsList actualSymbol form extent backForm pad posn height max | self hasCorners ifFalse: [^ nil]. forms _ Dictionary new. dims _ Dictionary new. pad _ 6 @ 6. max _ 0@0. posn _ pad copy. activeSymbols _ #(#A #I ). rowsList _ #(#(#formFrameTL #formFrameT #formFrameTR) #(#formFrameL #formFrameR) #(#formFrameBL #formFrameB #formFrameBR) ). activeSymbols do: [:activeSymbol | rowsList do: [:row | height _ 0. row do: [:truncatedSymbol | actualSymbol _ (truncatedSymbol , activeSymbol) asSymbol. form _ self perform: actualSymbol. form isNil ifTrue: [^ nil]. height _ height max: form height. forms at: actualSymbol put: form. dims at: actualSymbol put: posn. posn _ posn + (form width + pad x @ 0). max _ (max x max: posn x)@(max y)]. posn _ pad x @ (posn y + pad y + height). max _ (max x)@(max y max: posn y)]]. extent _ max + pad. backForm _ Form extent: extent depth: Display depth. backForm fillColor: Color white. forms keysDo: [:each | posn _ dims at: each. form _ forms at: each. form displayOn: backForm at: posn]. ^ backForm displayAt: aPoint! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/16/2003 10:28'! drawTitleBarFormsOnDisplay "ImportedSkin current drawTitleBarFormsOnDisplay" ^self drawTitleBarFormsOnDisplayAt: 0 @ 0! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/16/2003 10:25'! drawTitleBarFormsOnDisplayAt: aPoint "ImportedSkin current drawTitleBarFormsOnDisplay" "AL (AS) AP (AT) AM (AB) AR" "IL (IS) IP (IT) IM (IB) IR" | yPos activeFormSelectors inactiveFormSelectors form extent max tall forms string backForm | yPos _ 10. activeFormSelectors _ #(#formAL #formAS #formAP #formAT #formAM #formAB #formAR ). inactiveFormSelectors _ #(#formIL #formIS #formIP #formIT #formIM #formIB #formIR ). max _ 0. tall _ 0. forms _ Dictionary new. 1 to: activeFormSelectors size do: [:index | form _ self perform: (activeFormSelectors at: index). form isNil ifFalse: [forms at: (activeFormSelectors at: index) put: form. max _ max max: form width. tall _ tall max: form height]. form _ self perform: (inactiveFormSelectors at: index). form isNil ifFalse: [forms at: (inactiveFormSelectors at: index) put: form. max _ max max: form width. tall _ tall max: form height]]. tall _ tall + 4. extent _ 30 + (2 * max) + 20 @ (10 + yPos + (activeFormSelectors size * tall)). backForm _ Form extent: extent depth: Display depth. backForm fillColor: Color white. 1 to: activeFormSelectors size do: [:index | form _ forms at: (activeFormSelectors at: index) ifAbsent: []. form isNil ifFalse: [form displayOn: backForm at: 10 @ yPos]. form _ forms at: (inactiveFormSelectors at: index) ifAbsent: []. form isNil ifFalse: [form displayOn: backForm at: 20 + max @ yPos]. string _ (activeFormSelectors at: index) asString. (string copyFrom: 6 to: string size) displayOn: backForm at: 34 + (2 * max) @ yPos. yPos _ yPos + tall]. ^backForm displayAt: aPoint! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/16/2003 10:28'! drawWindowWidgetsOnDisplay "ImportedSkin current drawWindowWidgetsOnDisplay" ^self drawWindowWidgetsOnDisplayAt: 10 @ 10! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/16/2003 10:27'! drawWindowWidgetsOnDisplayAt: aPoint "ImportedSkin current drawWindowWidgetsOnDisplay" | yPos activeFormSelectors inactiveFormSelectors form extent max forms string tall backForm | yPos _ 10. activeFormSelectors _ #(#formAClose #formAMenu #formAMaximum #formAMinimize #formAHide #formARestore #formARollDown #formARollUp ). inactiveFormSelectors _ #(#formIClose #formIMenu #formIMaximum #formIMinimize #formIHide #formIRestore #formIRollDown #formIRollUp ). max _ 0. tall _ 0. forms _ Dictionary new. 1 to: activeFormSelectors size do: [:index | form _ self perform: (activeFormSelectors at: index). form isNil ifFalse: [forms at: (activeFormSelectors at: index) put: form. max _ max max: form width. tall _ tall max: form height]. form _ self perform: (inactiveFormSelectors at: index). form isNil ifFalse: [forms at: (inactiveFormSelectors at: index) put: form. max _ max max: form width. tall _ tall max: form height]]. tall _ tall + 4. extent _ 30 + (2 * max) + 65 @ (10 + yPos + (activeFormSelectors size * tall)). backForm _ Form extent: extent depth: Display depth. backForm fillColor: Color white. 1 to: activeFormSelectors size do: [:index | form _ forms at: (activeFormSelectors at: index) ifAbsent: []. form isNil ifFalse: [form displayOn: backForm at: 10 @ yPos]. form _ forms at: (inactiveFormSelectors at: index) ifAbsent: []. form isNil ifFalse: [form displayOn: backForm at: 20 + max @ yPos]. string _ (activeFormSelectors at: index) asString. (string copyFrom: 6 to: string size) displayOn: backForm at: 34 + (2 * max) @ yPos. yPos _ yPos + tall]. ^ backForm displayAt: aPoint! ! !ImportedIceWMSkin methodsFor: 'diagnostics' stamp: 'sbw 3/17/2003 12:41'! skinErrorFound: aString ! ! !ImportedIceWMSkin methodsFor: 'accessing' stamp: 'sbw 3/6/2003 13:06'! folderName ^folderName ifNil: ['']! ! !ImportedIceWMSkin methodsFor: 'accessing' stamp: 'sbw 3/6/2003 13:06'! folderName: aString folderName _ aString! ! !ImportedIceWMSkin methodsFor: 'accessing' stamp: 'sbw 4/3/2003 21:13'! isValid ^true! ! !ImportedIceWMSkin methodsFor: 'accessing' stamp: 'sbw 4/1/2003 18:24'! parameters ^self skinParameters! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/7/2003 22:57'! applyBackgroundColor | colorChoice previous | colorChoice _ self colorDesktopBackground. colorChoice isNil ifTrue: [^ self]. previous _ World submorphNamed: 'worldBackgroundImage'. previous isNil ifFalse: [previous delete]. World color: colorChoice! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/12/2003 15:31'! applyBackgroundImage Preferences skinBackground ifFalse: [^ self]. self isBackgroundAlreadyLoaded ifTrue: [^ self]. self applyBackgroundImageFromFile isNil ifTrue: [self applyBackgroundColor]! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/12/2003 15:31'! applyBackgroundImageFromFile | fName | fName _ self desktopBackgroundImage. fName isNil ifTrue: [^ nil]. ^self applyBackgroundImageFromFileNamed: fName! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/12/2003 15:32'! applyBackgroundImageFromFileNamed: fName | path form | self directory isNil ifTrue: [^ nil]. (self directory fileExists: fName) ifFalse: [^ nil]. path _ self directory fullNameFor: fName. form _ Form fromFileNamed: path. self applyBackgroundImage: form. self setBackgroundAlreadyLoaded! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/7/2003 22:52'! colorDesktopBackground ^ self parameters at: 'DesktopBackgroundColor' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/5/2003 06:01'! colorDialog ^ self parameters at: 'ColorDialog' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/5/2003 06:02'! colorInput ^ self parameters at: 'ColorInput' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/6/2003 19:35'! colorInputSelection ^ self parameters at: 'ColorInputSelection' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/6/2003 19:36'! colorInputSelectionText ^ self parameters at: 'ColorInputSelectionText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/5/2003 06:03'! colorInputText ^ self parameters at: 'ColorInputText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/5/2003 06:04'! colorLabel ^ self parameters at: 'ColorLabel' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/5/2003 06:05'! colorLabelText ^ self parameters at: 'ColorLabelText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/5/2003 06:05'! colorToolTip ^ self parameters at: 'ColorToolTip' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/5/2003 06:05'! colorToolTipText ^ self parameters at: 'ColorToolTipText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/7/2003 22:21'! desktopBackgroundCenter ^ self parameters at: 'DesktopBackgroundCenter' ifAbsent: [0]! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/7/2003 19:54'! desktopBackgroundImage ^ self parameters at: 'DesktopBackgroundImage' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/12/2003 15:33'! hasBackgroundImage | fName | fName _ self desktopBackgroundImage. fName isNil ifTrue: [^false]. self directory isNil ifTrue: [^ false]. (self directory fileExists: fName) ifFalse: [^ false]. ^ true! ! !ImportedIceWMSkin methodsFor: 'parameters-backgrounds' stamp: 'sbw 4/7/2003 22:21'! isDesktopBackgroundCentered ^self desktopBackgroundCenter = 1! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 3/18/2003 15:15'! borderSizeX ^ self parameters at: 'BorderSizeX' ifAbsent: [0]! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 3/18/2003 15:15'! borderSizeY ^ self parameters at: 'BorderSizeY' ifAbsent: [0]! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 4/4/2003 20:01'! colorActiveBorder ^ self parameters at: 'ColorActiveBorder' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 4/4/2003 20:02'! colorNormalBorder ^ self parameters at: 'ColorNormalBorder' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 3/18/2003 15:32'! cornerSizeX ^ self parameters at: 'CornerSizeX' ifAbsent: [0]! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 3/18/2003 15:32'! cornerSizeY ^ self parameters at: 'CornerSizeY' ifAbsent: [0]! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 4/5/2003 06:06'! dlgBorderSizeX ^ self parameters at: 'DlgBorderSizeX' ifAbsent: [0]! ! !ImportedIceWMSkin methodsFor: 'parameters-border sizes' stamp: 'sbw 4/5/2003 06:06'! dlgBorderSizeY ^ self parameters at: 'DlgBorderSizeY' ifAbsent: [0]! ! !ImportedIceWMSkin methodsFor: 'parameters-button' stamp: 'sbw 4/3/2003 07:08'! colorActiveButton ^ self parameters at: 'ColorActiveButton' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-button' stamp: 'sbw 4/3/2003 07:09'! colorActiveButtonText ^ self parameters at: 'ColorActiveButtonText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-button' stamp: 'sbw 4/3/2003 07:09'! colorNormalButton ^ self parameters at: 'ColorNormalButton' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-button' stamp: 'sbw 4/3/2003 07:10'! colorNormalButtonText ^ self parameters at: 'ColorNormalButtonText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-list box' stamp: 'sbw 4/6/2003 15:09'! colorListBox ^ self parameters at: 'ColorListBox' ifAbsent: [Color white]! ! !ImportedIceWMSkin methodsFor: 'parameters-list box' stamp: 'sbw 4/6/2003 15:09'! colorListBoxSelection ^ self parameters at: 'ColorListBoxSelection' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-list box' stamp: 'sbw 4/6/2003 12:48'! colorListBoxSelectionText ^ self parameters at: 'ColorListBoxSelectionText' ifAbsent: [Color red]! ! !ImportedIceWMSkin methodsFor: 'parameters-list box' stamp: 'sbw 4/6/2003 12:48'! colorListBoxText ^ self parameters at: 'ColorListBoxText' ifAbsent: [Color black]! ! !ImportedIceWMSkin methodsFor: 'parameters-menu' stamp: 'sbw 4/3/2003 12:11'! colorActiveMenuItem ^ self parameters at: 'ColorActiveMenuItem' ifAbsent: [nil]! ! !ImportedIceWMSkin methodsFor: 'parameters-menu' stamp: 'sbw 4/3/2003 12:11'! colorActiveMenuItemText ^ self parameters at: 'ColorActiveMenuItemText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-menu' stamp: 'sbw 4/3/2003 12:13'! colorDisabledMenuItemText ^ self parameters at: 'ColorDisabledMenuItemText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-menu' stamp: 'sbw 4/3/2003 12:12'! colorNormalMenu ^ self parameters at: 'ColorNormalMenu' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-menu' stamp: 'sbw 4/3/2003 12:12'! colorNormalMenuItemText ^ self parameters at: 'ColorNormalMenuItemText' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-menu' stamp: 'sbw 4/8/2003 19:01'! hasMenuForm ^self menuBackgroundForm isNil not! ! !ImportedIceWMSkin methodsFor: 'parameters-menu' stamp: 'sbw 4/8/2003 19:01'! menuBackgroundForm ^ self skinForms at: #menuBackground ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-meta' stamp: 'sbw 3/5/2003 23:26'! look ^ self parameters at: 'Look'! ! !ImportedIceWMSkin methodsFor: 'parameters-meta' stamp: 'sbw 3/5/2003 23:26'! skinAuthor ^ self parameters at: 'ThemeAuthor'! ! !ImportedIceWMSkin methodsFor: 'parameters-meta' stamp: 'sbw 3/6/2003 13:05'! skinDescription ^ self parameters at: 'ThemeDescription' ifAbsent: ['']! ! !ImportedIceWMSkin methodsFor: 'parameters-scroll bar' stamp: 'sbw 4/5/2003 06:07'! colorScrollBar ^ self parameters at: 'ColorScrollBar' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-scroll bar' stamp: 'sbw 4/5/2003 06:08'! colorScrollBarButton ^ self parameters at: 'ColorScrollBarButton' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-scroll bar' stamp: 'sbw 4/5/2003 06:08'! colorScrollBarButtonArrow ^ self parameters at: 'ColorScrollBarArrow' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'parameters-scroll bar' stamp: 'sbw 4/5/2003 06:08'! colorScrollBarSlider ^ self parameters at: 'ColorScrollBarSlider' ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/10/2003 19:41'! activeTitleBarFormToFit: width titleStringMorph: aStringMorph ^ self titleBarFormToFit: width titleStringMorph: aStringMorph active: true! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/10/2003 20:21'! addLeftEdgeTitleBarFormTo: result active: activeFlag | formL | formL _ activeFlag ifTrue: [self formAL] ifFalse: [self formIL]. formL isNil ifFalse: [formL displayOn: result at: 0 @ 0]. ! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/16/2003 21:45'! addLeftOfTitleBarFormTo: result titleStringMorph: aStringMorph active: activeFlag "AL (AS) AP (AT) AM (AB) AR" | formL startPos titleWidth endPos formP demandWidth formS repeatCount realWidth | realWidth _ result width. startPos _ 0. formL _ activeFlag ifTrue: [self formAL] ifFalse: [self formIL]. formL isNil ifFalse: [startPos _ formL width]. formP _ activeFlag ifTrue: [self formAP] ifFalse: [self formIP]. self titleBarCentered ifTrue: [titleWidth _ aStringMorph width. endPos _ (realWidth - titleWidth) // 2. formP isNil ifFalse: [endPos _ endPos - formP width]. demandWidth _ endPos - startPos. formS _ activeFlag ifTrue: [self formAS] ifFalse: [self formIS]. formS isNil ifFalse: [demandWidth > 0 ifTrue: [repeatCount _ demandWidth // formS width. repeatCount timesRepeat: [formS displayOn: result at: startPos @ 0. startPos _ startPos + formS width]. formS displayOn: result at: (endPos - formS width)@0]]. formP isNil ifFalse: [formP displayOn: result at: endPos @ 0]] ifFalse: [formP isNil ifFalse: [formP displayOn: result at: startPos @ 0]]! ]style[(25 6 19 12 9 10 3 28 3 79 4 9 3 6 9 8 3 1 3 5 3 10 14 4 23 4 11 5 19 8 3 5 10 5 3 10 14 4 23 4 11 4 29 10 3 12 11 6 4 9 3 11 4 1 5 5 21 6 3 6 3 5 12 11 3 6 3 8 5 5 3 10 16 4 25 4 13 5 21 11 3 1 16 11 3 11 4 5 15 11 24 5 12 6 5 8 3 1 11 8 3 8 3 5 75 5 21 5 12 6 5 6 3 1 15 5 21 5 12 6 5 8 3 1 2)f1b,f1cblue;b,f1b,f1cblue;b,f1b,f1cblue;b,f1,f1c148046000i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/16/2003 15:37'! addRightEdgeTitleBarFormTo: result active: activeFlag | formR offset realWidth | realWidth _ result width. formR _ activeFlag ifTrue: [self formAR] ifFalse: [self formIR]. formR isNil ifFalse: [offset _ realWidth - formR width. formR displayOn: result at: offset @ 0]! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/16/2003 15:38'! addRightOfTitleBarFormTo: result titleStringMorph: aStringMorph active: activeFlag "AL (AS) AP (AT) AM (AB) AR" | titleWidth startPos formR endPos formM demandWidth formB offset repeatCount formL formP realWidth | realWidth _ result width. titleWidth _ aStringMorph width. self titleBarCentered ifTrue: [startPos _ realWidth + titleWidth // 2] ifFalse: [startPos _ titleWidth. formL _ activeFlag ifTrue: [self formAL] ifFalse: [self formIL]. formL isNil ifFalse: [startPos _ startPos + formL width]. formP _ activeFlag ifTrue: [self formAP] ifFalse: [self formIP]. formP isNil ifFalse: [startPos _ startPos + formP width]]. formR _ activeFlag ifTrue: [self formAR] ifFalse: [self formIR]. endPos _ formR isNil ifTrue: [realWidth] ifFalse: [realWidth - formR width]. formM _ activeFlag ifTrue: [self formAM] ifFalse: [self formIM]. formM isNil ifFalse: [startPos _ startPos + formM width]. demandWidth _ endPos - startPos. formB _ activeFlag ifTrue: [self formAB] ifFalse: [self formIB]. formB isNil ifFalse: [demandWidth > 0 ifTrue: [offset _ startPos copy. repeatCount _ demandWidth // formB width. repeatCount + 1 timesRepeat: [formB displayOn: result at: offset @ 0. offset _ offset + formB width]]]. formM isNil ifFalse: [formM displayOn: result at: startPos @ 0]! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/16/2003 08:34'! createFullWidthBackTitleBarFormToFit: width titleStringMorph: aStringMorph active: activeFlag | formT result fillCount offset realWidth | realWidth _ width. formT _ activeFlag ifTrue: [self formAT] ifFalse: [self formIT]. formT isNil ifTrue: [result _ Form extent: realWidth @ self titleBarHeight depth: Display depth. result fillColor: self colorNormalTitleBar] ifFalse: [result _ Form extent: realWidth @ self titleBarHeight depth: formT depth. result fillColor: Color transparent. fillCount _ realWidth // formT width. offset _ 0. fillCount timesRepeat: [formT displayOn: result at: offset @ 0. offset _ offset + formT width]. offset _ realWidth - formT width. formT displayOn: result at: offset @ 0]. ^ result! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:26'! formAB ^ self skinForms at: #titleBarActiveRightRepeat ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:26'! formAL ^ self skinForms at: #titleBarActiveLeft ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:26'! formAM ^ self skinForms at: #titleBarActiveRightTitle ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:26'! formAP ^ self skinForms at: #titleBarActiveLeftTitle ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:26'! formAR ^ self skinForms at: #titleBarActiveRight ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:27'! formAS ^ self skinForms at: #titleBarActiveLeftRepeat ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:27'! formAT ^ self skinForms at: #titleBarActiveTitle ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:28'! formIB ^ self skinForms at: #titleBarInactiveRightRepeat ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:28'! formIL ^ self skinForms at: #titleBarInactiveLeft ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:29'! formIM ^ self skinForms at: #titleBarInactiveRightTitle ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:29'! formIP ^ self skinForms at: #titleBarInactiveLeftTitle ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:29'! formIR ^ self skinForms at: #titleBarInactiveRight ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:29'! formIS ^ self skinForms at: #titleBarInactiveLeftRepeat ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 4/1/2003 07:29'! formIT ^ self skinForms at: #titleBarInactiveTitle ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/10/2003 19:43'! inActiveTitleBarFormToFit: width titleStringMorph: aStringMorph ^ self titleBarFormToFit: width titleStringMorph: aStringMorph active: false! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/8/2003 11:26'! titleBarFormNames ^#( titleBarActiveLeft titleBarActiveLeftRepeat titleBarActiveLeftTitle titleBarActiveRight titleBarActiveRightRepeat titleBarActiveRightTitle titleBarActiveTitle titleBarInactiveLeft titleBarInactiveLeftRepeat titleBarInactiveLeftTitle titleBarInactiveRight titleBarInactiveRightRepeat titleBarInactiveRightTitle titleBarInactiveTitle)! ! !ImportedIceWMSkin methodsFor: 'title bar forms' stamp: 'sbw 3/16/2003 15:39'! titleBarFormToFit: width titleStringMorph: aStringMorph active: activeFlag "AL (AS) AP (AT) AM (AB) AR" "IL (IS) IP (IT) IM (IB) IR" | formT result realWidth | realWidth _ width. formT _ activeFlag ifTrue: [self formAT] ifFalse: [self formIT]. formT isNil ifTrue: [result _ Form extent: realWidth @ self titleBarHeight depth: Display depth. result fillColor: self colorNormalTitleBar] ifFalse: [result _ self createFullWidthBackTitleBarFormToFit: width titleStringMorph: aStringMorph active: activeFlag. self addLeftEdgeTitleBarFormTo: result active: activeFlag. self addLeftOfTitleBarFormTo: result titleStringMorph: aStringMorph active: activeFlag. self addRightOfTitleBarFormTo: result titleStringMorph: aStringMorph active: activeFlag. self addRightEdgeTitleBarFormTo: result active: activeFlag]. ^ result! ]style[(19 5 19 12 9 10 3 58 3 23 4 9 3 5 3 5 3 10 14 4 23 4 11 5 18 6 3 4 9 9 3 4 23 7 11 6 12 4 34 6 3 4 45 5 25 12 15 10 5 4 28 6 9 10 5 4 30 6 23 12 13 10 5 4 31 6 23 12 13 10 5 4 33 6 13 10 6 6)f1b,f1cblue;b,f1b,f1cblue;b,f1b,f1cblue;b,f1,f1c148046000i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 06:44'! bottomBorderOfWidth: tgtWidth active: active | baseForm | baseForm _ active ifTrue: [self formFrameBA] ifFalse: [self formFrameBI]. ^self horizontalBorderOfWidth: tgtWidth usingForm: baseForm active: active ! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:27'! formFrameBA ^ self skinForms at: #frameBottomActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:27'! formFrameBI ^ self skinForms at: #frameBottomInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:27'! formFrameBLA ^ self skinForms at: #frameBottomLeftActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:27'! formFrameBLI ^ self skinForms at: #frameBottomLeftInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:27'! formFrameBRA ^ self skinForms at: #frameBottomRightActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:27'! formFrameBRI ^ self skinForms at: #frameBottomRightInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:27'! formFrameLA ^ self skinForms at: #frameLeftActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameLI ^ self skinForms at: #frameLeftInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameRA ^ self skinForms at: #frameRightActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameRI ^ self skinForms at: #frameRightInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameTA ^ self skinForms at: #frameTopActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameTI ^ self skinForms at: #frameTopInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameTLA ^ self skinForms at: #frameTopLeftActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameTLI ^ self skinForms at: #frameTopLeftInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameTRA ^ self skinForms at: #frameTopRightActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 4/1/2003 07:28'! formFrameTRI ^ self skinForms at: #frameTopRightInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 15:37'! hasBorders ^ self borderSizeX > 0 and: [self borderSizeY > 0]! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 20:38'! hasCorners self formFrameTLA isNil ifTrue: [^false]. ^self cornerSizeX > 0 and: [self cornerSizeY > 0]! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 06:44'! horizontalBorderOfWidth: tgtWidth usingForm: baseForm active: active | form offset delta count | form _ Form extent: tgtWidth @ baseForm height depth: baseForm depth. offset _ 0. delta _ baseForm width. count _ tgtWidth // delta. count timesRepeat: [baseForm displayOn: form at: offset @ 0. offset _ offset + delta]. offset _ tgtWidth - delta. baseForm displayOn: form at: offset @ 0. ^ form! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 06:43'! leftBorderOfHeight: tgtHeight active: active | baseForm | baseForm _ active ifTrue: [self formFrameLA] ifFalse: [self formFrameLI]. ^self verticalBorderOfHeight: tgtHeight usingForm: baseForm active: active! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 06:43'! rightBorderOfHeight: tgtHeight active: active | baseForm | baseForm _ active ifTrue: [self formFrameRA] ifFalse: [self formFrameRI]. ^self verticalBorderOfHeight: tgtHeight usingForm: baseForm active: active! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 06:44'! topBorderOfWidth: tgtWidth active: active | baseForm | baseForm _ active ifTrue: [self formFrameTA] ifFalse: [self formFrameTI]. ^self horizontalBorderOfWidth: tgtWidth usingForm: baseForm active: active ! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/18/2003 06:42'! verticalBorderOfHeight: tgtHeight usingForm: baseForm active: active | form offset delta count | form _ Form extent: baseForm width @ tgtHeight depth: baseForm depth. offset _ 0. delta _ baseForm height. count _ tgtHeight // delta. count timesRepeat: [baseForm displayOn: form at: 0 @ offset. offset _ offset + delta]. offset _ tgtHeight - delta. baseForm displayOn: form at: 0 @ offset. ^ form! ! !ImportedIceWMSkin methodsFor: 'window frame' stamp: 'sbw 3/17/2003 22:17'! windowFrameNames ^ #(#frameTopLeftActive #frameTopActive #frameTopRightActive #frameRightActive #frameBottomRightActive #frameBottomActive #frameBottomLeftActive #frameLeftActive #frameTopLeftInactive #frameTopInactive #frameTopRightInactive #frameRightInactive #frameBottomRightInactive #frameBottomInactive #frameBottomLeftInactive #frameLeftInactive) ! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 22:24'! createTitleBarWidgetAlternates self hasTitleBarWidgetClose ifFalse: [self createTitleBarWidgetAlternatesFrom: SystemWindow closeBoxImage baseName: 'Close']. self hasTitleBarWidgetApplicationMenu ifFalse: [self createTitleBarWidgetAlternatesFrom: (ScriptingSystem formAtKey: 'TinyMenu') baseName: 'Menu']. self hasTitleBarWidgetIconize ifFalse: [self createTitleBarWidgetAlternatesFrom: SystemWindow collapseBoxImage baseName: 'Collapse']. self hasTitleBarWidgetMaximize ifFalse: [self createTitleBarWidgetAlternatesFrom: (ScriptingSystem formAtKey: 'expandBox') baseName: 'Expand']! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 22:40'! createTitleBarWidgetAlternatesFrom: orgForm baseName: baseName | actForm inactForm oldColor | oldColor _ (orgForm colorsUsed reject: [:clr | clr isTransparent]) last. actForm _ Form extent: orgForm extent depth: Display depth. orgForm displayOn: actForm. actForm mapColor: oldColor to: self colorActiveTitleBarText. self defineSkinForm: actForm at: ('altActive' , baseName) asSymbol. inactForm _ Form extent: orgForm extent depth: Display depth. orgForm displayOn: inactForm. inactForm mapColor: oldColor to: self colorNormalTitleBarText. self defineSkinForm: inactForm at: ('altInactive' , baseName) asSymbol! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:26'! formAClose ^ self skinForms at: #windowCloseButtonActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:26'! formAHide ^ self skinForms at: #windowHideActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:26'! formAMaximum ^ self skinForms at: #windowMaximizeButtonActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 17:31'! formAMenu ^self formMenuFromKey: #windowMenuButtonActive! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:26'! formAMinimize ^ self skinForms at: #windowMinimizeButtonActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:27'! formARestore ^ self skinForms at: #windowRestoreButtonActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:27'! formARollDown ^ self skinForms at: #windowRollDownButtonActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:27'! formARollUp ^ self skinForms at: #windowRollUpButtonActive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:56'! formAltActiveClose ^ self skinForms at: #altActiveClose ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:56'! formAltActiveCollapse ^ self skinForms at: #altActiveCollapse ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:56'! formAltActiveExpand ^ self skinForms at: #altActiveExpand ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:56'! formAltActiveMenu ^ self skinForms at: #altActiveMenu ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:57'! formAltInactiveClose ^ self skinForms at: #altInactiveClose ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:57'! formAltInactiveCollapse ^ self skinForms at: #altInactiveCollapse ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:57'! formAltInactiveExpand ^ self skinForms at: #altInactiveExpand ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/5/2003 21:57'! formAltInactiveMenu ^ self skinForms at: #altInactiveMenu ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:28'! formIClose ^ self skinForms at: #windowCloseButtonInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:28'! formIHide ^ self skinForms at: #windowHideInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:29'! formIMaximum ^ self skinForms at: #windowMaximizeButtonInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 17:31'! formIMenu ^self formMenuFromKey: #windowMenuButtonInactive! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:29'! formIMinimize ^ self skinForms at: #windowMinimizeButtonInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:29'! formIRestore ^ self skinForms at: #windowRestoreButtonInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:29'! formIRollDown ^ self skinForms at: #windowRollDownButtonInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/1/2003 07:29'! formIRollUp ^ self skinForms at: #windowRollUpButtonInactive ifAbsent: []! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/12/2003 11:01'! formMenuFromKey: key | form menuForm xPos yPos altForm tallerForm | form _ self skinForms at: key ifAbsent: []. form isNil ifFalse: [altForm _ self formAClose. altForm isNil ifFalse: [form height < altForm height ifTrue: [tallerForm _ Form extent: form width @ (altForm height) depth: form depth. form displayOn: tallerForm at: 0 @ 0. form displayOn: tallerForm at: 0 @ form height. form _ tallerForm]]. self showMenuButtonIcon ifTrue: [menuForm _ ScriptingSystem formAtKey: 'TinyMenu'. xPos _ form width - menuForm width // 2. yPos _ form height // 2 - menuForm height // 2. menuForm displayOn: form at: xPos @ yPos. yPos _ yPos + (form height // 2). menuForm displayOn: form at: xPos @ yPos]]. ^ form! ]style[(17 3 4 43 4 4 3 4 19 3 20 4 19 7 3 4 16 7 21 4 10 7 23 10 3 4 9 4 10 7 16 4 15 4 12 10 5 1 3 1 9 4 12 10 5 1 3 4 16 4 3 10 7 4 33 8 3 15 12 10 7 4 3 4 9 8 10 1 7 4 3 4 11 1 3 8 11 1 7 8 12 4 5 4 3 4 7 4 3 4 4 4 11 1 8 8 12 4 5 4 3 4 7 4)f1b,f1cblue;b,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000148000,f1,f1c000148000,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1c000148000,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 12:42'! hasTitleBarWidget: char | set form | set _ Set new. set addAll: self titleButtonsSupported. set addAll: self titleButtonsLeft. set addAll: self titleButtonsRight. self showXButton ifTrue: [set add: self titleBarWidgetCloseKey]. set isEmpty ifFalse: [self titleBarMaximizeButton ifFalse: [form _ self formAMaximum. form isNil ifTrue: [set remove: self titleBarWidgetMaximizeKey] ifFalse: [self skinErrorFound: 'Definition asks to remove a widget "', self titleBarWidgetMaximizeKey printString, '" but actual form exists. Request ignored.'] ]]. ^ set includes: char! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 21:02'! hasTitleBarWidgetApplicationMenu ^self hasTitleBarWidget: self titleBarWidgetApplicationMenuKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 21:02'! hasTitleBarWidgetClose ^ self hasTitleBarWidget: self titleBarWidgetCloseKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/11/2003 21:19'! hasTitleBarWidgetHide ^ self hasTitleBarWidget: self titleBarWidgetHideKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 21:03'! hasTitleBarWidgetIconize ^ self hasTitleBarWidget: self titleBarWidgetIconizeKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 21:03'! hasTitleBarWidgetMaximize ^ self hasTitleBarWidget: self titleBarWidgetMaximizeKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/11/2003 21:28'! hasTitleBarWidgetRestore ^ self hasTitleBarWidget: self titleBarWidgetIconizeKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/11/2003 21:26'! hasTitleBarWidgetRollDown ^ self hasTitleBarWidget: self titleBarWidgetRollDownKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 21:03'! hasTitleBarWidgetRollUpDown ^ self hasTitleBarWidget: self titleBarWidgetRollUpDownKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/15/2003 17:40'! idleWidgetFormFor: aSymbol | form hgt ext | form _ self perform: aSymbol. form ifNil:[^form]. hgt _ form height // 2. ext _ form width @ hgt. ^ form copy: (0 @ 0 extent: ext)! ]style[(19 7 4 13 4 4 3 4 10 7 24 3 3 4 11 1 3 3 3 4 9 3 5 4 10 1 3 1 9 3 1)f1b,f1cblue;b,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/12/2003 21:23'! pressedWidgetFormFor: aSymbol | form hgt ext | form _ self perform: aSymbol. hgt _ form height // 2. ext _ form width @ hgt. ^ form copy: (0 @ hgt extent: ext)! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 20:51'! titleBarWidgetApplicationMenuKey ^ $s! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 12:52'! titleBarWidgetApplicationMenuLayoutFrame "Priorities on left: close/menu/expand/collapse" "Priorities on right: menu/collapse/expand/close" | frame offset form | self hasTitleBarWidgetApplicationMenu ifFalse: [form _ self formAMenu. form == nil ifTrue: [^ nil]]. frame _ LayoutFrame new. self titleBarWidgetApplicationMenuOnLeft ifTrue: [offset _ self titleBarWidgetCloseOnLeft ifTrue: [self widthOfCloseBox] ifFalse: [0]. frame leftFraction: 0; leftOffset: offset; rightFraction: 0; rightOffset: 0] ifFalse: [offset _ self titleBarWidgetCloseOnRight ifTrue: [self widthOfCloseBox] ifFalse: [0]. offset _ self titleBarWidgetMaximumOnRight ifTrue: [offset + self widthOfExpandBox] ifFalse: [offset]. offset _ self titleBarWidgetRestoreOnRight ifTrue: [offset + self widthOfCollapseBox] ifFalse: [offset]. offset _ offset + self widthOfMenuBox. frame leftFraction: 1; leftOffset: offset negated; rightFraction: 1; rightOffset: 0]. frame topFraction: 0; topOffset: 0; bottomFraction: 1; bottomOffset: 0. ^ frame! ]style[(40 2 99 3 13 9 4 95 3 5 5 3 11 7 4 48 6 3 4 42 4 34 1 6 5 15 1 19 6 22 1 20 1 14 6 3 4 43 4 34 1 6 6 3 4 45 6 3 4 35 6 6 6 3 4 45 6 3 4 37 6 6 6 3 6 3 4 20 5 15 1 19 6 30 1 20 1 4 5 14 1 16 1 21 1 19 1 5 5)f1b,f1,f1c148046000i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/16/2003 22:32'! titleBarWidgetApplicationMenuOnLeft ^ self titleButtonsLeft includes: self titleBarWidgetApplicationMenuKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/16/2003 22:32'! titleBarWidgetApplicationMenuOnRight ^ self titleBarWidgetApplicationMenuOnLeft not! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 20:51'! titleBarWidgetCloseKey ^ $x! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 21:51'! titleBarWidgetCloseLayoutFrame "Priorities on left: close/menu/expand/collapse" "Priorities on right: menu/collapse/expand/close" | frame offset form | self hasTitleBarWidgetClose ifFalse: [form _ self formAClose. form == nil ifTrue: [^ nil]]. frame _ LayoutFrame new. self titleBarWidgetCloseOnLeft ifTrue: [frame leftFraction: 0; leftOffset: 0; rightFraction: 0; rightOffset: 0] ifFalse: [offset _ self widthOfCloseBox. frame leftFraction: 1; leftOffset: offset negated; rightFraction: 1; rightOffset: 0]. frame topFraction: 0; topOffset: 0; bottomFraction: 1; bottomOffset: 0. ^ frame! ]style[(30 2 99 3 13 9 4 86 4 4 5 3 11 7 4 38 5 15 1 19 1 22 1 20 1 14 6 3 4 21 5 15 1 19 6 30 1 20 1 4 5 14 1 16 1 21 1 19 1 5 5)f1b,f1,f1c148046000i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/16/2003 22:30'! titleBarWidgetCloseOnLeft ^self titleButtonsLeft includes: self titleBarWidgetCloseKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/16/2003 22:31'! titleBarWidgetCloseOnRight ^ self titleBarWidgetCloseOnLeft not! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/11/2003 21:19'! titleBarWidgetHideKey ^ $h! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 06:42'! titleBarWidgetIconizeKey "This is for the collapse box" ^ $i! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 06:41'! titleBarWidgetMaximizeKey "This is for the expand box" ^ $m! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 20:27'! titleBarWidgetMaximizeLayoutFrame "This is for the expand box" "Priorities on left: close/menu/expand/collapse" "Priorities on right: menu/collapse/expand/close" | frame offset form | self hasTitleBarWidgetMaximize ifFalse: [form _ self formAMaximum. form == nil ifTrue: [^ nil]]. frame _ LayoutFrame new. self titleBarWidgetMaximumOnLeft ifTrue: [offset _ self titleBarWidgetCloseOnLeft ifTrue: [self widthOfCloseBox] ifFalse: [0]. offset _ self titleBarWidgetApplicationMenuOnLeft ifTrue: [offset + self widthOfMenuBox] ifFalse: [offset]. frame leftFraction: 0; leftOffset: offset; rightFraction: 0; rightOffset: 0] ifFalse: [offset _ self titleBarWidgetCloseOnRight ifTrue: [self widthOfCloseBox] ifFalse: [0]. offset _ offset + self widthOfExpandBox. frame leftFraction: 1; leftOffset: offset negated; rightFraction: 1; rightOffset: 0]. frame topFraction: 0; topOffset: 0; bottomFraction: 1; bottomOffset: 0. ^ frame! ]style[(33 2 129 3 13 9 4 91 4 4 5 3 11 7 4 40 6 3 4 42 4 34 1 6 6 3 4 52 6 3 4 33 6 6 5 15 1 19 6 22 1 20 1 14 6 3 4 43 4 34 1 6 6 3 6 3 4 22 5 15 1 19 6 30 1 20 1 4 5 14 1 16 1 21 1 19 1 5 5)f1b,f1,f1c148046000i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1c000184027,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 06:41'! titleBarWidgetMaximumOnLeft "This is for the expand box" ^ self titleButtonsLeft includes: self titleBarWidgetMaximizeKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 06:41'! titleBarWidgetMaximumOnRight "This is for the expand box" ^ self titleBarWidgetMaximumOnLeft not! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/11/2003 21:17'! titleBarWidgetNames ^ #(#windowCloseButtonActive #windowCloseButtonInactive #windowMaximizeButtonActive #windowMaximizeButtonInactive #windowMenuButtonActive #windowMenuButtonInactive #windowMinimizeButtonActive #windowMinimizeButtonInactive #windowRestoreButtonActive #windowRestoreButtonInactive #windowRollUpButtonActive #windowRollUpButtonInactive #windowRollDownButtonActive #windowRollDownButtonInactive #windowHideActive #windowHideInactive)! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 20:22'! titleBarWidgetRestoreLayoutFrame "This is for the collapse box" "Priorities on left: close/menu/expand/collapse" "Priorities on right: menu/collapse/expand/close" | frame offset form | self hasTitleBarWidgetRestore ifFalse: [form _ self formARestore. form == nil ifTrue: [^ nil]]. frame _ LayoutFrame new. self titleBarWidgetRestoreOnLeft ifTrue: [offset _ self titleBarWidgetCloseOnLeft ifTrue: [self widthOfCloseBox] ifFalse: [0]. offset _ self titleBarWidgetApplicationMenuOnLeft ifTrue: [offset + self widthOfMenuBox] ifFalse: [offset]. offset _ self titleBarWidgetMaximumOnLeft ifTrue: [offset + self widthOfExpandBox] ifFalse: [offset]. frame leftFraction: 0; leftOffset: offset; rightFraction: 0; rightOffset: 0] ifFalse: [offset _ self titleBarWidgetCloseOnRight ifTrue: [self widthOfCloseBox] ifFalse: [0]. offset _ self titleBarWidgetMaximumOnRight ifTrue: [offset + self widthOfExpandBox] ifFalse: [offset]. offset _ offset + self widthOfCollapseBox. frame leftFraction: 1; leftOffset: offset negated; rightFraction: 1; rightOffset: 0]. frame topFraction: 0; topOffset: 0; bottomFraction: 1; bottomOffset: 0. ^ frame! ]style[(32 2 131 3 13 9 4 90 4 4 5 3 11 7 4 40 6 3 4 42 4 34 1 6 6 3 4 52 6 3 4 33 6 6 6 3 4 44 6 3 4 35 6 6 5 15 1 19 6 22 1 20 1 14 6 3 4 43 4 34 1 6 6 3 4 45 6 3 4 35 6 6 6 3 6 3 4 24 5 15 1 19 6 30 1 20 1 4 5 14 1 16 1 21 1 19 1 5 5)f1b,f1,f1c148046000i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1c000184027,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1c000184027,f1,f1cblue;i! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 06:43'! titleBarWidgetRestoreOnLeft "This is for the collapse box" ^ self titleButtonsLeft includes: self titleBarWidgetIconizeKey! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 06:43'! titleBarWidgetRestoreOnRight "This is for the collapse box" ^ self titleBarWidgetRestoreOnLeft not! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/11/2003 21:26'! titleBarWidgetRollDownKey ^ $d! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/7/2003 20:50'! titleBarWidgetRollUpDownKey ^ $r! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 12:26'! widthOfCloseBox | form | form _ self formAClose. ^ form isNil ifTrue: [0] ifFalse: [form width]! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 12:26'! widthOfCollapseBox | form | form _ self formAMinimize. ^ form isNil ifTrue: [form _ self formARestore. form isNil ifTrue: [0] ifFalse: [form width]] ifFalse: [form width]! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 4/6/2003 09:45'! widthOfControls ^self widthOfLeftControls + self widthOfRightControls! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 12:26'! widthOfExpandBox | form | form _ self formAMaximum. ^ form isNil ifTrue: [0] ifFalse: [form width]! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/16/2003 22:50'! widthOfLeftControls | sum | sum _ 0. self titleBarWidgetApplicationMenuOnLeft ifTrue: [sum _ sum + self widthOfMenuBox]. self titleBarWidgetCloseOnLeft ifTrue: [sum _ sum + self widthOfCloseBox]. self titleBarWidgetMaximumOnLeft ifTrue: [sum _ sum + self widthOfCollapseBox]. self titleBarWidgetRestoreOnLeft ifTrue: [sum _ sum + self widthOfExpandBox]. ^ sum! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/17/2003 12:26'! widthOfMenuBox | form | form _ self formAMenu. ^ form isNil ifTrue: [0] ifFalse: [form width]! ! !ImportedIceWMSkin methodsFor: 'title bar widgets' stamp: 'sbw 3/16/2003 22:51'! widthOfRightControls | sum | sum _ 0. self titleBarWidgetApplicationMenuOnRight ifTrue: [sum _ sum + self widthOfMenuBox]. self titleBarWidgetCloseOnRight ifTrue: [sum _ sum + self widthOfCloseBox]. self titleBarWidgetMaximumOnRight ifTrue: [sum _ sum + self widthOfCollapseBox]. self titleBarWidgetRestoreOnRight ifTrue: [sum _ sum + self widthOfExpandBox]. ^ sum! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/7/2003 18:12'! colorActiveTitleBarShadow ^self parameters at: 'ColorActiveTitleBarShadow'! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/7/2003 18:12'! colorActiveTitleBarText ^ self parameters at: 'ColorActiveTitleBarText'! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/8/2003 18:44'! colorNormalTitleBar ^ self parameters at: 'ColorNormalTitleBar'! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/8/2003 22:11'! colorNormalTitleBarText ^ self parameters at: 'ColorNormalTitleBarText' ifAbsent: [Color black]! ]style[(23 4 4 16 49)f1b,f1,f1cmagenta;,f1,f1c000184027! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/17/2003 12:18'! showMenuButtonIcon ^ self parameters at: 'ShowMenuButtonIcon' ifAbsent: [true]! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/7/2003 21:10'! showXButton ^ self parameters at: 'ShowXButton' ifAbsent: [false]! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/7/2003 18:25'! titleBarCentered ^ self parameters at: 'TitleBarCentered' ifAbsent: [false]! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 4/6/2003 08:17'! titleBarHeight ^ self parameters at: 'TitleBarHeight' ifAbsent: [10]! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/7/2003 21:15'! titleBarMaximizeButton ^ self parameters at: 'TitleBarMaximizeButton' ifAbsent: [true]! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/17/2003 21:38'! titleButtonsLeft ^ self parameters at: 'TitleButtonsLeft' ifAbsent: ['s']! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/7/2003 18:24'! titleButtonsRight ^ self parameters at: 'TitleButtonsRight' ifAbsent: ['']! ! !ImportedIceWMSkin methodsFor: 'parameters-title bar' stamp: 'sbw 3/7/2003 18:30'! titleButtonsSupported | value posn | value _ self parameters at: 'TitleButtonsSupported' ifAbsent: ['']. value isEmpty ifFalse: [ (value includes: $") ifTrue: [ posn _ value indexOf: $". value _ value copyFrom: 1 to: (posn - 1) ] ]. ^value! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/7/2003 21:14'! booleanParameterNames ^ #('ShowXButton' 'ShowMenuButtonIcon' 'TitleBarJustify' 'TaskBarDoubleHeight' 'TitleBarCentered' 'TaskBarShowWindowListMenu' 'TaskBarShowCPUStatus' 'TaskBarShowNetStatus' 'MenuMouseTracking' 'TaskBarClockLeds' 'DesktopBackgroundCenter' 'ShowXButton' 'TitleBarMaximizeButton')! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/6/2003 12:59'! integerParameterNames ^ #('TitleBarHeight' 'BorderSizeX' 'BorderSizeY' 'CornerSizeX' 'CornerSizeY' 'DlgBorderSizeX' 'DlgBorderSizeY' )! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/6/2003 04:41'! keyIsBooleanParameter: key ^self booleanParameterNames includes: key! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/6/2003 13:13'! keyIsColorParameter: key ^ (key asUppercase beginsWith: 'COLOR') or: [key = 'DesktopBackgroundColor']! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/6/2003 04:45'! keyIsFontNameParameter: key ^ key asUppercase endsWith: 'FONTNAME'! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/6/2003 04:41'! keyIsIntegerParameter: key ^ self integerParameterNames includes: key! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/8/2003 18:56'! loadForms self loadTitleBarForms. self loadWindowWidgetForms. self loadFrameForms. self loadMenuBackground! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 07:41'! loadFrameForms | list fName form path | list _ self windowFrameNames. list do: [:selector | fName _ self class perform: selector. (self directory fileExists: fName) ifTrue: [path _ self directory fullNameFor: fName. form _ Form fromFileNamed: path. self defineSkinForm: form at: selector]]! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/8/2003 19:39'! loadMenuBackground | fName form path | fName _ self class menuBackground. (self directory fileExists: fName) ifTrue: [path _ self directory fullNameFor: fName. form _ Form fromFileNamed: path. self defineSkinForm: form at: #menuBackground]! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 18:35'! loadSkinFrom: aDirectory | fName path fStream contents paramDict | self directory: aDirectory. self folderName: aDirectory localName. self isSkinLoaded ifFalse: [fName _ self class defaultSkin. path _ aDirectory fullNameFor: fName. fStream _ CrLfFileStream readOnlyFileNamed: path. [contents _ fStream contentsOfEntireFile] ensure: [fStream close]. paramDict _ self parseDefaultContents: contents. self defineSkinParameters: paramDict. self loadForms]! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 07:42'! loadTitleBarForms | list fName form path | list _ self titleBarFormNames. list do: [:selector | fName _ self class perform: selector. (self directory fileExists: fName) ifTrue: [path _ self directory fullNameFor: fName. form _ Form fromFileNamed: path. self defineSkinForm: form at: selector]]! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/5/2003 21:26'! loadWindowWidgetForms | list fName form path | list _ self titleBarWidgetNames. list do: [:selector | fName _ self class perform: selector. (self directory fileExists: fName) ifTrue: [path _ self directory fullNameFor: fName. form _ Form fromFileNamed: path. self defineSkinForm: form at: selector]]. self createTitleBarWidgetAlternates! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/6/2003 04:08'! parameterColorForHexValue: value ^Color fromString: value.! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 3/6/2003 04:03'! parameterColorForRGBValue: value | parts red green blue color | parts _ (value copyFrom: 5 to: value size) findTokens: $/. red _ Integer readFrom: (ReadStream on: parts first asUppercase) base: 16. green _ Integer readFrom: (ReadStream on: parts second asUppercase) base: 16. blue _ Integer readFrom: (ReadStream on: parts third asUppercase) base: 16. color _ Color r: red g: green b: blue range: 255. ^color! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 18:28'! parseDefaultContents: aString | rawLines lines line dict assoc | rawLines _ (ReadStream on: aString) asLines. lines _ OrderedCollection new. rawLines do: [:each | line _ each withBlanksTrimmed. line isEmpty ifFalse: [line first = $# ifFalse: [lines add: line]]]. dict _ Dictionary new. lines do: [:each | assoc _ self parseLineIntoParameter: each. dict at: assoc key put: assoc value]. self sweepThroughAndFixParameterColors: dict. self sweepThroughAndFixParameterBooleans: dict. self sweepThroughAndFixParameterIntegers: dict. self sweepThroughAndFixParameterFontNames: dict. ^ dict! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 18:26'! parseLineIntoParameter: aString | parts key value | parts _ aString findTokens: $=. key _ parts first withBlanksTrimmed. value _ parts last withBlanksTrimmed withoutQuoting. ^key -> value! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 18:27'! sweepThroughAndFixParameterBooleans: dict | value boolean | dict keysDo: [:key | (self keyIsBooleanParameter: key) ifTrue: [value _ dict at: key. boolean _ value = '1'. dict at: key put: boolean]]! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 18:27'! sweepThroughAndFixParameterColors: dict | value color | dict keysDo: [:key | (self keyIsColorParameter: key) ifTrue: [value _ dict at: key. color _ nil. (value beginsWith: 'rgb:') ifTrue: ["rgb:00/b0/84" color _ self parameterColorForRGBValue: value. dict at: key put: color]. color == nil ifTrue: [value isEmpty ifFalse: [value first = $# ifTrue: ["#FFCC00" color _ self parameterColorForHexValue: value. dict at: key put: color]]]. color == nil ifTrue: [value isEmpty ifFalse: [color _ self parameterColorForHexValue: '#' , value. dict at: key put: color]]]]! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 18:27'! sweepThroughAndFixParameterFontNames: dict | value | dict keysDo: [:key | (self keyIsFontNameParameter: key) ifTrue: ["Need to work out what to do about font specifications." value _ dict at: key]]! ! !ImportedIceWMSkin methodsFor: 'load definition file' stamp: 'sbw 4/1/2003 18:28'! sweepThroughAndFixParameterIntegers: dict | value | dict keysDo: [:key | (self keyIsIntegerParameter: key) ifTrue: [value _ dict at: key. dict at: key put: value asInteger]]! ! !ImportedIceWMSkin methodsFor: 'printing' stamp: 'sbw 3/6/2003 13:08'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' '; nextPutAll: self folderName printString! ! !ImportedIceWMSkin methodsFor: 'process' stamp: 'sbw 3/8/2003 11:18'! applySkinToSystemWindow: window self class applicatorClass applySkin: self toSystemWindow: window! ! !ImportedIceWMSkin methodsFor: 'process' stamp: 'sbw 3/8/2003 15:59'! unApplySkinToSystemWindow: window self class applicatorClass unApplySkin: self toSystemWindow: window! ! !ImportedSkin class methodsFor: 'release notes - DO THIS' stamp: 'sbw 4/12/2003 11:36'! updateChangeSetPreambleForSkinImporter "ImportedSkin updateChangeSetPreambleForSkinImporter" "Do this whenever you are about to release a new change set." self installNewPreambleForChangeSetNamed: self primaryChangeSetName! ! !ImportedSkin class methodsFor: 'release notes - strings' stamp: 'sbw 4/13/2003 09:22'! bugs "ImportedSkin updateChangeSetPreambleForSkinImporter" ^ 'Skins II bugs --- decorated buttons do not undecorate correctly same is true for removal of skin, decorated buttons remain skinned. color of text selection should be reset for each front-most window theme. Still broken. Related is that the current skin defines other behavior and the current should be reset each time another window is put in front. spacing gap with Notif2 on right side buttons --- '! ! !ImportedSkin class methodsFor: 'release notes - strings' stamp: 'sbw 4/13/2003 09:22'! features "ImportedSkin updateChangeSetPreambleForSkinImporter" ^ 'Skins II features --- This project is a rewrite of the Skins code written in 1998 for Squeak 2.7. This new version is known to work in Squeak 3.4, 3.5 and 3.6-beta. This new model attempts to accomplish a couple of goals that I saw as defects in the original skins model: - Use "standard" theme files from the open source Linux world. - Replace existing morphic components in the skinned window by finding them dynamically, not requiring special subclassed window code. -Provide a way to delete a theme and restore the window to it''s original state. Key features include: Standard theme files from Ice Window Manager are supported. See http://themes.freshmeat.net for published theme files that work with Skins II. The standard menu in the System Window is enhanced to provide skins management for the system as well as for only that specific window. SystemWindow custom morphic menu (red menu) supports the same options. This was done because some IceWM theme definitions remove the menu from the window title bar. Parameters are available in the Preferences panel under #skins, providing explicit controls over elements that are active in a skinned window. The window title bar is skinned. The contents of list boxes is skinned. Pluggable buttons are skinned. Alignment panes and text panes are skinned. The World desktop can be defined by the skin. Menus are skinned. Balloon help is skinned. --- '! ! !ImportedSkin class methodsFor: 'release notes - strings' stamp: 'sbw 4/13/2003 11:34'! revisions "ImportedSkin updateChangeSetPreambleForSkinImporter" "" "Follow the format of latest revision at the top and keep the revision tag alone on the first line of content (between the --- lines). Break revision entries with an extra blank line at the end." ^ 'Skins II revisions --- 13-apr-2003 Factored creation of skin preferences. Added preference to show progress of skin being applied. Changed default preferences for skins. Fill in the blank and simple button morph skinned. 12-apr-2003-5 Show load progress while applying skin. New preference to manage setting of text highlight color. 12-apr-2003-4 Make auto setting of current skin to default to true. Scroll bar colors are set by optional values in theme file. 12-apr-2003-3 Fixed a recursion problem when loading from a project morph. 12-apr-2003-2 Added menu item to explicitly load a desktop background if available in the theme file. When setting text colors is permitted, make the highlight colors correct for the window when it becomes active. Check for undefined highlight colors. 12-apr-2003-1 Generalized the change set preamble maintenance code so that the bug report logic can also identify the versions of the related change sets. 12-apr-2003 Added features to make the project easier to maintain. This includes easier revision history/notes generation and tracking of known bugs. Bug reports via email. Fixed bug where dimensions of menu button was wrong. 10-apr-2003 Changed skin application so that a Preference decides if the latest applied skin becomes the curren skin. Added a menu item to manually set the skin applied to a window as the current skin. 08-apr-2003 First pass at supporting menu background forms. Incomplete. PluggableButtonMorphs in window are controlled by skin with a preference. SimpleButtonMorphs are also skinned. 07-apr-2003 Text pane colors supported (preliminary). Removed special class that was part of enhanced IRC client. Skins preferences added. Former single preference was moved from #windows preference category to new #skins category. Support for theme backgrounds added. Handle tiled backgrounds and centered morphs as backgrounds. Check first for image background, then background color theme setting. 06-apr-2003 Improved border color and window label management. Use assigned skin to set colors for balloon help. Use titlebar text colors for titlebar icons when no icons are specified in original theme. Moved postLoad logic to the class ImportedSkin. NOTE: Themes must be reloaded after change-set install. Clear skin parameters (and postLoad of change-set) also disables the auto-assign skins preference. DNU exceptions disable the auto skin preference first. Better management of themes that remove some key titlebar widgets. Added menu item to preload all themes in a folder. ListBox theme parameters are now applied for skinned windows. Menu titles support added. 05-apr-2003 Better management of overall skins removal. See ImportedSkin class>>clear. Continue to fill in skins parameters from the theme definition files. 04-apr-2003 Improved vertical positioning of string label in window title bar. Improved horizontal position when non-centered. Better handling of window label string when window is resized. Use theme definitions for window border color and size when no themed border frames are specified. Support for list box theme parameters. 03-apr-2003 System Window menu has name of applied theme. Removed unused instance variable from ImportedIceWMSkin. Added support for button colors defined in theme. Added skin menu items to SystemWindow custom morphic menu (red menu) since some themes disable the regular menu in the title bar. Use menu color parameters from the current skin if the automatic preference is true. 02-apr-2003 Initial release. --- '! ! !ImportedSkin class methodsFor: 'release notes - change set names' stamp: 'sbw 4/12/2003 11:34'! dialogsChangeSetName ^ 'Dialogs-sbw'! ! !ImportedSkin class methodsFor: 'release notes - change set names' stamp: 'sbw 4/12/2003 11:35'! primaryChangeSetName ^'skin-importer'! ! !ImportedSkin class methodsFor: 'release notes - change set names' stamp: 'sbw 4/12/2003 11:46'! supportChangeSetName ^ 'importer-support'! ! !ImportedSkin class methodsFor: 'release notes - change set names' stamp: 'sbw 4/12/2003 11:45'! xpmChangeSetName ^ 'xpm-support'! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 08:26'! constructChangeSetPreambleString | sourceString stream | sourceString _ self constructChangeSetPreambleStringFromPieces. stream _ ReadWriteStream on: ''. sourceString do: [:char | stream nextPut: char. char = $" ifTrue: [stream nextPut: char]]. ^ stream contents! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 11:29'! constructChangeSetPreambleStringFromPieces | stream string | stream _ WriteStream on: ''. stream nextPutAll: self headerForRevisionsSection. string _ self extractRevisions. string isNil ifTrue: [string _ self latestRevisionTag]. stream nextPutAll: string; cr. string _ self extractFeatures. string isNil ifFalse: [stream nextPutAll: 'FEATURES:'; cr; nextPutAll: string; cr]. string _ self extractBugs. string isNil ifFalse: [stream nextPutAll: 'KNOWN BUGS:'; cr; nextPutAll: string; cr]. ^ stream contents! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 08:19'! extractBugs "ImportedSkin extractBugs" ^ self extractContentFrom: #bugs! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 08:12'! extractContentFrom: symbol "ImportedSkin extractContentFrom: #revisions" | string stream tag lines output | string _ self perform: symbol. stream _ ReadStream on: string. tag _ stream nextLine; nextLine. tag asSymbol = symbol ifFalse: [^ nil]. tag _ stream nextLine. tag = '---' ifFalse: [^nil]. lines _ OrderedCollection new. [stream atEnd] whileFalse: [lines add: stream nextLine]. lines last = '---' ifFalse: [^nil]. lines removeLast. output _ WriteStream on: ''. lines do: [:each | output nextPutAll: each; cr]. ^output contents! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 08:19'! extractFeatures "ImportedSkin extractFeatures" ^ self extractContentFrom: #features! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 08:16'! extractRevisions "ImportedSkin extractRevisions" ^self extractContentFrom: #revisions! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 11:27'! headerForRevisionsSection ^'Requires change sets: dialogs, importer-support and xpm-support. DO NOT EDIT THIS PREAMBLE MANUALLY. See ImportedSkin updateChangeSetPreambleForSkinImporter Date Update ------------- ----------------------------------------------------------------------------------- '! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 08:33'! installNewPreambleForChangeSetNamed: aString | changeSet newContent | changeSet _ ChangeSorter changeSetNamed: aString. changeSet isNil ifTrue: [^ self inform: 'Change set "' , aString , '" not found.']. newContent _ self newPreambleForChangeSetNamed: aString . changeSet preambleString: newContent! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 08:18'! latestRevisionTag "ImportedSkin latestRevisionTag" | content stream | content _ self extractContentFrom: #revisions. content isNil ifTrue: [^Date today printString]. stream _ ReadStream on: content. ^stream nextLine.! ! !ImportedSkin class methodsFor: 'release notes - tools' stamp: 'sbw 4/12/2003 11:27'! newPreambleForChangeSetNamed: aString | changeSet stream line originalPreamble | changeSet _ ChangeSorter changeSetNamed: aString. changeSet isNil ifTrue: [^ self inform: 'Change set "' , aString , '" not found.']. "Keep header lines from the original preamble text." originalPreamble _ changeSet preambleString. stream _ ReadWriteStream on: ''. 1 to: 4 do: [:index | line _ originalPreamble lineNumber: index. line isEmpty ifFalse: [stream nextPutAll: line]. stream cr]. "Add the new body of text." stream nextPutAll: self constructChangeSetPreambleString. "Close with a double quote." stream nextPut: $". ^ stream contents! ! !ImportedSkin class methodsFor: 'bug reporting' stamp: 'sbw 4/12/2003 09:13'! bugReportSubjectLine ^'Skins II bug report'! ! !ImportedSkin class methodsFor: 'bug reporting' stamp: 'sbw 4/12/2003 09:30'! buildMessage: aBugReportString forMailOutWithUser: userName | message | message _ MailMessage empty. message setField: 'from' toString: userName. message setField: 'to' toString: self emailAddressForBugReports. message setField: 'subject' toString: self bugReportSubjectLine. message body: (MIMEDocument contentType: 'text/plain' content: aBugReportString). ^ message! ! !ImportedSkin class methodsFor: 'bug reporting' stamp: 'sbw 4/12/2003 09:29'! emailAddressForBugReports ^'swessels@one.net'! ! !ImportedSkin class methodsFor: 'bug reporting' stamp: 'sbw 4/12/2003 09:19'! mailOutBugReport: aBugReportString | usingCeleste server userName message | usingCeleste _ (Smalltalk includesKey: #Celeste) and: [Celeste isSmtpServerSet]. usingCeleste ifTrue: [server _ Celeste smtpServer. userName _ Celeste userName] ifFalse: [server _ FillInTheBlank request: 'What is your mail server for outgoing mail?'. userName _ FillInTheBlank request: 'What is your email address?']. Cursor write showWhile: [message _ self buildMessage: aBugReportString forMailOutWithUser: userName]. usingCeleste ifTrue: [CelesteComposition openForCeleste: Celeste current initialText: message text] ifFalse: [AdHocComposition openForCeleste: server initialText: message text]. ! ! !ImportedSkin class methodsFor: 'bug reporting' stamp: 'sbw 4/12/2003 14:38'! reportABugForSkin: anImportedSkin " can be nil." "ImportedSkin reportABugForSkin: nil" | tag currentSkinName stream initials | tag _ anImportedSkin isNil ifTrue: ['undefined skin'] ifFalse: [anImportedSkin folderName]. currentSkinName _ self current isNil ifTrue: ['undefined current skin'] ifFalse: [self current folderName]. initials _ Utilities authorInitialsPerSe. stream _ WriteStream on: ''. stream nextPutAll: 'Report: '; nextPutAll: self bugReportSubjectLine; cr; nextPutAll: 'When: '; nextPutAll: Date today printString , ' ' , Time now printString; cr. self writeVersionDataOn: stream. stream nextPutAll: 'Current skin name: "' , currentSkinName , '"'; cr; nextPutAll: 'Active skin name: "' , tag , '"'; cr. initials isNil ifFalse: [stream nextPutAll: 'Initials: ' , initials; cr]. stream cr; nextPutAll: 'Comment:'; cr; nextPutAll: 'Put your comments or description here.'; cr; nextPutAll: 'Please leave the SUBJECT line of the email intact.'. self mailOutBugReport: stream contents! ! !ImportedSkin class methodsFor: 'bug reporting' stamp: 'sbw 4/12/2003 14:03'! writeVersionDataOn: strm | changeSetName changeSet revString | strm nextPutAll: 'VM: '; nextPutAll: Smalltalk vmVersion asString; cr; nextPutAll: 'Image: '; nextPutAll: Smalltalk version asString; nextPutAll: ' ['; nextPutAll: Smalltalk lastUpdateString asString; nextPutAll: ']'; cr; nextPutAll: 'Platform: '; nextPutAll: Smalltalk platformSubtype asString; nextPutAll: ' - '; nextPutAll: Smalltalk platformName asString; nextPutAll: ' ['; nextPutAll: Smalltalk osVersion asString; nextPutAll: ']'; cr. #(#dialogsChangeSetName #xpmChangeSetName #supportChangeSetName #primaryChangeSetName ) do: [:each | changeSetName _ self perform: each. changeSet _ ChangeSorter changeSetNamed: changeSetName. changeSet isNil ifFalse: [revString _ changeSet latestRevisionTag. strm nextPutAll: 'Change Set: "' , changeSetName , '" Revision: ' , (revString isNil ifTrue: ['unknown'] ifFalse: [revString]); cr]]! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 07:30'! allSkinForms SkinForms == nil ifTrue: [SkinForms _ Dictionary new]. ^ SkinForms! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 12:44'! allSkinParameters SkinParameters == nil ifTrue: [SkinParameters _ Dictionary new]. ^ SkinParameters! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/6/2003 08:25'! clear "ImportedSkin clear" "Turn off the preference." Preferences disable: #automaticApplicationOfSkins. self removeAllAssignedSkins. Current _ nil. self resetSkinVariables! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 3/5/2003 20:10'! current Current == nil ifTrue: [Current _ self new]. ^ Current! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 3/8/2003 22:10'! current: skin ^Current _ skin! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 3/16/2003 16:36'! initialize "ImportedSkin initialize." Smalltalk addToStartUpList: self. self startUp! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 3/5/2003 20:18'! loadSkinFromList! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 3/5/2003 20:10'! new ^ super new initialize! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/7/2003 18:47'! postLoad "ImportedSkin postLoad" "Add preferences." self createPreferences. "Clear out existing definitions in case of change to structure." self clear! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/5/2003 06:43'! removeAllAssignedSkins "ImportedSkin removeAllAssignedSkins" | skinClasses | skinClasses _ self allSubclasses. skinClasses add: self. skinClasses do: [:each | each allInstances do: [:inst | inst dependents do: [:dep | dep removeSkin]]]! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 3/16/2003 16:32'! resetCurrentSkinsDirectory "ImportedSkin current class resetCurrentSkinsDirectory" self current directory: nil! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 07:43'! resetSkinForms "ImportedSkin resetSkinForms" SkinForms _ nil! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 12:44'! resetSkinParameters "ImportedSkin resetSkinParameters" SkinParameters _ nil! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 4/1/2003 18:14'! resetSkinVariables "ImportedSkin resetSkinVariables" ImportedSkin resetSkinForms; resetSkinParameters! ! !ImportedSkin class methodsFor: 'as yet unclassified' stamp: 'sbw 3/16/2003 16:37'! startUp ^ self resetCurrentSkinsDirectory! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:19'! automaticApplicationOfSkinsPreference "ImportedSkin automaticApplicationOfSkinsPreference" Preferences addPreference: #automaticApplicationOfSkins categories: #(#skins ) default: true balloonHelp: 'If true, new system windows will have the current skin applied automatically as they are opened.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:29'! createPreferences "ImportedSkin createPreferences" self automaticApplicationOfSkinsPreference; showProgressOnSkinsPreference; skinBackgroundPreference; skinBalloonHelpPreference; skinButtonsPreference; skinDialogsPreference; skinListBoxesPreference; skinMenusPreference; skinMenusWithFormsPreference; skinSetsHighlightColorPreference; skinTextPanesPreference; windowSkinAutomaticallyBecomesCurrentPreference! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:17'! showProgressOnSkinsPreference "ImportedSkin showProgressOnSkinsPreference" Preferences addPreference: #showProgressOnSkins categories: #(#skins ) default: false balloonHelp: 'If true the windows will show load progress as a skin is applied.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:27'! skinBackgroundPreference "ImportedSkin skinBackgroundPreference" Preferences addPreference: #skinBackground categories: #(#skins ) default: false balloonHelp: 'If true (and automaticApplicationOfSkins is true), the World desktop will have the backdrop defined by the current skin applied (if it is present). This can be slow to load'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:08'! skinBalloonHelpPreference "ImportedSkin skinBalloonHelpPreference" Preferences addPreference: #skinBalloonHelp categories: #(#skins ) default: true balloonHelp: 'If true (and automaticApplicationOfSkins is true), balloon help will have current skin applied.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:07'! skinButtonsPreference "ImportedSkin skinButtonsPreference" Preferences addPreference: #skinButtons categories: #(#skins ) default: true balloonHelp: 'If true (and automaticApplicationOfSkins is true), pluggable buttons will have current skin applied.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:29'! skinDialogsPreference "ImportedSkin skinDialogsPreference" Preferences addPreference: #skinDialogs categories: #(#skins ) default: true balloonHelp: 'If true (and automaticApplicationOfSkins is true), prompter windows will be skinned.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:07'! skinListBoxesPreference "ImportedSkin skinListBoxesPreference" Preferences addPreference: #skinListBoxes categories: #(#skins ) default: true balloonHelp: 'If true (and automaticApplicationOfSkins is true), list boxes will have current skin applied.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:07'! skinMenusPreference "ImportedSkin skinMenusPreference" Preferences addPreference: #skinMenus categories: #(#skins ) default: true balloonHelp: 'If true (and automaticApplicationOfSkins is true), menus will have current skin applied.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:20'! skinMenusWithFormsPreference "ImportedSkin skinMenusWithFormsPreference" Preferences addPreference: #skinMenusWithForms categories: #(#skins ) default: false balloonHelp: 'If true (and both skinMenus and automaticApplicationOfSkins are true), menus will have current skin forms applied as background.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:07'! skinSetsHighlightColorPreference "ImportedSkin skinSetsHighlightColorPreference" Preferences addPreference: #skinSetsHighlightColor categories: #(#skins ) default: false balloonHelp: 'If true (and both automaticApplicationOfSkins and skinTextPanes are true), text panes will set the highlight color from the skin definition file.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:20'! skinTextPanesPreference "ImportedSkin skinTextPanesPreference" Preferences addPreference: #skinTextPanes categories: #(#skins ) default: false balloonHelp: 'If true (and automaticApplicationOfSkins is true), text panes will have current skin applied.'! ! !ImportedSkin class methodsFor: 'preferences' stamp: 'sbw 4/13/2003 09:07'! windowSkinAutomaticallyBecomesCurrentPreference "ImportedSkin windowSkinAutomaticallyBecomesCurrentPreference" Preferences addPreference: #windowSkinAutomaticallyBecomesCurrent categories: #(#skins ) default: true balloonHelp: 'If true, the skin you apply to a window will become the "current" skin..'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:13'! defaultSkin ^'default.theme'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:08'! frameBottomActive ^ 'frameAB.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:11'! frameBottomInactive ^ 'frameIB.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:08'! frameBottomLeftActive ^ 'frameABL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:09'! frameBottomLeftInactive ^ 'frameIBL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:08'! frameBottomRightActive ^ 'frameABR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:09'! frameBottomRightInactive ^ 'frameIBR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:08'! frameLeftActive ^ 'frameAL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:10'! frameLeftInactive ^ 'frameIL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:07'! frameRightActive ^ 'frameAR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:10'! frameRightInactive ^ 'frameIR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:07'! frameTopActive ^ 'frameAT.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:10'! frameTopInactive ^ 'frameIT.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:06'! frameTopLeftActive ^ 'frameATL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:06'! frameTopLeftInactive ^ 'frameITL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:07'! frameTopRightActive ^ 'frameATR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/17/2003 22:10'! frameTopRightInactive ^ 'frameITR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 4/8/2003 18:55'! menuBackground ^ 'menubg.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:08'! titleBarActiveLeft "AL (AS) AP (AT) AM (AB) AR" "Items can be absent, parenthesis means repeats." ^ 'titleAL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:09'! titleBarActiveLeftRepeat "AL (AS) AP (AT) AM (AB) AR" "Items can be absent, parenthesis means repeats." ^ 'titleAS.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:09'! titleBarActiveLeftTitle "AL (AS) AP (AT) AM (AB) AR" "Items can be absent, parenthesis means repeats." ^ 'titleAP.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:10'! titleBarActiveRight "AL (AS) AP (AT) AM (AB) AR" "Items can be absent, parenthesis means repeats." ^ 'titleAR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:10'! titleBarActiveRightRepeat "AL (AS) AP (AT) AM (AB) AR" "Items can be absent, parenthesis means repeats." ^ 'titleAB.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:10'! titleBarActiveRightTitle "AL (AS) AP (AT) AM (AB) AR" "Items can be absent, parenthesis means repeats." ^ 'titleAM.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:09'! titleBarActiveTitle "AL (AS) AP (AT) AM (AB) AR" "Items can be absent, parenthesis means repeats." ^ 'titleAT.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:11'! titleBarInactiveLeft "IL (IS) IP (IT) IM (IB) IR" "Items can be absent, parenthesis means repeats." ^ 'titleIL.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:11'! titleBarInactiveLeftRepeat "IL (IS) IP (IT) IM (IB) IR" "Items can be absent, parenthesis means repeats." ^ 'titleIS.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:12'! titleBarInactiveLeftTitle "IL (IS) IP (IT) IM (IB) IR" "Items can be absent, parenthesis means repeats." ^ 'titleIP.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:12'! titleBarInactiveRight "IL (IS) IP (IT) IM (IB) IR" "Items can be absent, parenthesis means repeats." ^ 'titleIR.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:13'! titleBarInactiveRightRepeat "IL (IS) IP (IT) IM (IB) IR" "Items can be absent, parenthesis means repeats." ^ 'titleIB.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:13'! titleBarInactiveRightTitle "IL (IS) IP (IT) IM (IB) IR" "Items can be absent, parenthesis means repeats." ^ 'titleIM.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 18:13'! titleBarInactiveTitle "IL (IS) IP (IT) IM (IB) IR" "Items can be absent, parenthesis means repeats." ^ 'titleIT.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:14'! windowCloseButtonActive ^'closeA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:14'! windowCloseButtonInactive ^ 'closeI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/11/2003 21:18'! windowHideActive ^ 'hideA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/11/2003 21:18'! windowHideInactive ^ 'hideI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:16'! windowMaximizeButtonActive ^ 'maximizeA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:16'! windowMaximizeButtonInactive ^ 'maximizeI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:17'! windowMenuButtonActive ^ 'menuButtonA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:17'! windowMenuButtonInactive ^ 'menuButtonI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:17'! windowMinimizeButtonActive ^ 'minimizeA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:18'! windowMinimizeButtonInactive ^ 'minimizeI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:18'! windowRestoreButtonActive ^ 'restoreA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/4/2003 14:18'! windowRestoreButtonInactive ^ 'restoreI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/11/2003 21:13'! windowRollDownButtonActive ^ 'rolldownA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/11/2003 21:14'! windowRollDownButtonInactive ^ 'rolldownI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/11/2003 21:14'! windowRollUpButtonActive ^ 'rollupA.xpm'! ! !ImportedIceWMSkin class methodsFor: 'file names' stamp: 'sbw 3/11/2003 21:14'! windowRollUpButtonInactive ^ 'rollupI.xpm'! ! !ImportedIceWMSkin class methodsFor: 'validation' stamp: 'sbw 3/5/2003 20:46'! isDirectoryValid: aDirectory ^ aDirectory fileNames includes: self defaultSkin! ! !ImportedIceWMSkin class methodsFor: 'private' stamp: 'sbw 3/7/2003 21:34'! applicatorClass ^IceWMSkinApplicator! ! !ImportedIceWMSkin class methodsFor: 'private' stamp: 'sbw 4/10/2003 20:26'! loadSkinFrom: aDirectory | theSkin | theSkin _ self new loadSkinFrom: aDirectory. Preferences windowSkinAutomaticallyBecomesCurrent ifTrue: [theSkin makeSkinCurrent]. ^ theSkin! ! !ImportedIceWMSkin class methodsFor: 'private' stamp: 'sbw 4/6/2003 09:35'! loadSkinFromListIn: aDirectory | folders validFolders which | folders _ aDirectory directoryNames. validFolders _ folders select: [:each | self isDirectoryValid: (aDirectory directoryNamed: each)]. validFolders isEmpty ifTrue: [self inform: 'No valid ' , self skinTypeName , ' skins found.'. ^ nil]. validFolders _ validFolders asSortedCollection: [:a :b | a asLowercase < b asLowercase]. which _ PopUpMenu withCaption: 'Select skin' chooseFrom: validFolders. which = 0 ifTrue: [^ nil]. ^ self loadSkinFrom: (aDirectory directoryNamed: (validFolders at: which))! ! !ImportedIceWMSkin class methodsFor: 'private' stamp: 'sbw 3/6/2003 13:14'! loadSkinsFrom: aDirectory | folders validFolders skins | folders _ aDirectory directoryNames. validFolders _ folders select: [:each | self isDirectoryValid: (aDirectory directoryNamed: each)]. validFolders isEmpty ifTrue: [^ self inform: 'No valid ' , self skinTypeName , ' skins found.']. skins _ validFolders collect: [:each | self loadSkinFrom: (aDirectory directoryNamed: each)]. ^skins! ! !ImportedIceWMSkin class methodsFor: 'private' stamp: 'sbw 3/6/2003 03:55'! skinTypeName ^'IceWM'! ! !ImportedIceWMSkin class methodsFor: 'API' stamp: 'sbw 3/12/2003 18:47'! getSkinFromList "ImportedIceWMSkin getSkinFromList" | inputDir aDir onceSet | onceSet _ false. aDir _ FileDirectory default. self current isNil ifFalse: [self current directory isNil ifFalse: [aDir _ self current directory containingDirectory. onceSet _ true]]. inputDir _ onceSet ifTrue: [self current directory containingDirectory] ifFalse: [FileList2 modalFolderSelector: aDir prompt: 'Please select ' , self skinTypeName , ' skins folder.']. inputDir isNil ifTrue: [^ nil]. ^ self loadSkinFromListIn: inputDir! ! !ImportedIceWMSkin class methodsFor: 'API' stamp: 'sbw 4/10/2003 20:26'! loadSkinFromList "ImportedIceWMSkin loadSkinFromList" | skin | skin _ self getSkinFromList. skin isNil ifTrue: [^ nil]. Preferences windowSkinAutomaticallyBecomesCurrent ifTrue: [skin makeSkinCurrent]. ^ skin! ! !ImportedIceWMSkin class methodsFor: 'API' stamp: 'sbw 4/6/2003 08:37'! loadSkins "ImportedIceWMSkin loadSkins" | inputDir | inputDir _ FileList2 modalFolderSelectorWithPrompt: 'Please select ' , self skinTypeName , ' skins folder.'. inputDir isNil ifTrue: [^ nil]. self loadSkinsFrom: inputDir. ! ! !Inspector class methodsFor: 'instance creation' stamp: 'sbw 4/6/2003 15:55'! openAsMorphOn: anObject withLabel: aLabel "(Inspector openAsMorphOn: SystemOrganization) openInMVC" | window inspector | inspector _ self inspect: anObject. window _ (SystemWindow labelled: aLabel) model: inspector. window addMorph: (PluggableListMorph new doubleClickSelector: #inspectSelection; on: inspector list: #fieldList selected: #selectionIndex changeSelected: #toggleIndex: menu: ((inspector isMemberOf: DictionaryInspector) ifTrue: [#dictionaryMenu:] ifFalse: [#fieldListMenu:]) keystroke: #inspectorKey:from:) frame: (0 @ 0 corner: self horizontalDividerProportion @ self verticalDividerProportion). window addMorph: (PluggableTextMorph on: inspector text: #contents accept: #accept: readSelection: #contentsSelection menu: #codePaneMenu:shifted:) frame: (self horizontalDividerProportion @ 0 corner: 1 @ self verticalDividerProportion). window addMorph: ((PluggableTextMorph on: inspector text: #trash accept: #trash: readSelection: #contentsSelection menu: #codePaneMenu:shifted:) askBeforeDiscardingEdits: false) frame: (0 @ self verticalDividerProportion corner: 1 @ 1). window setUpdatablePanesFrom: #(#fieldList ). window position: 16 @ 0. "Room for scroll bar." window automaticallyApplyCurrentSkin. ^ window! ! !Morph methodsFor: 'skins' stamp: 'sbw 4/9/2003 12:36'! isPluggableButtonMorph ^ false! ! !Morph methodsFor: 'skins' stamp: 'sbw 4/9/2003 12:35'! isSimpleButtonMorph ^ false! ! !Morph methodsFor: 'skins' stamp: 'sbw 4/8/2003 20:09'! topOwnerOfKind: aClass | next | next _ self owner. ^ (next isKindOf: aClass) ifTrue: [next topOwnerOfKind: aClass] ifFalse: [self]! ! !BalloonMorph methodsFor: 'initialization' stamp: 'sbw 4/7/2003 18:56'! popUpForHand: aHand "Pop up the receiver as balloon help for the given hand" | worldBounds skin useSkin balloonColorChoice balloonTextColorChoice tMorph | self lock. self fullBounds. skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinBalloonHelp and: [balloonColorChoice _ skin colorToolTip. balloonColorChoice isNil not and: [balloonTextColorChoice _ skin colorToolTipText. balloonTextColorChoice isNil not]]]. tMorph _ self findA: TextMorph. tMorph isNil ifFalse: [useSkin ifTrue: [color _ balloonColorChoice. tMorph color: balloonTextColorChoice] ifFalse: [color _ self class balloonColor. tMorph color: Color black]]. "force layout" self setProperty: #morphicLayerNumber toValue: self morphicLayerNumber. aHand world addMorphFront: self. "So that if the translation below makes it overlap the receiver, it won't interfere with the rootMorphsAt: logic and hence cause flashing. Without this, flashing happens, believe me!!" ((worldBounds _ aHand world bounds) containsRect: self bounds) ifFalse: [self bounds: (self bounds translatedToBeWithin: worldBounds)]. aHand balloonHelp: self! ! !FillInTheBlankMorph methodsFor: 'initialization' stamp: 'sbw 4/13/2003 11:15'! setQuery: queryString initialAnswer: initialAnswer answerExtent: answerExtent acceptOnCR: acceptBoolean | query frame topOffset accept cancel buttonAreaHeight skin useSkin selectedColor selectedTextColor selectedActiveColor | skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinDialogs]. response _ initialAnswer. done _ false. self removeAllMorphs. self layoutPolicy: ProportionalLayout new. query _ TextMorph new contents: queryString. query setNameTo: 'query'. useSkin ifTrue: [selectedColor _ skin colorLabelText. selectedColor isNil ifFalse: [query color: selectedColor]]. query lock. frame _ LayoutFrame new. frame topFraction: 0.0; topOffset: 2. frame leftFraction: 0.5; leftOffset: (query width // 2) negated. query layoutFrame: frame. self addMorph: query. topOffset _ query height + 4. accept _ SimpleButtonMorph new target: self; color: Color veryLightGray. accept label: 'Accept(s)'; actionSelector: #accept. useSkin ifTrue: [selectedColor _ skin colorNormalButton. selectedTextColor _ skin colorNormalButtonText. (selectedColor isNil not and: [selectedTextColor isNil not]) ifTrue: [accept setLabelToColor: selectedTextColor; recolor: selectedColor]]. accept setNameTo: 'accept'. frame _ LayoutFrame new. frame rightFraction: 0.5; rightOffset: -10; bottomFraction: 1.0; bottomOffset: -2. accept layoutFrame: frame. self addMorph: accept. cancel _ SimpleButtonMorph new target: self; color: Color veryLightGray. cancel label: 'Cancel(l)'; actionSelector: #cancel. useSkin ifTrue: [selectedColor _ skin colorNormalButton. selectedTextColor _ skin colorNormalButtonText. selectedActiveColor _ skin colorActiveButton. (selectedColor isNil not and: [selectedTextColor isNil not]) ifTrue: [cancel setLabelToColor: selectedTextColor; color: selectedColor. selectedActiveColor isNil ifFalse: [cancel oldColor: selectedActiveColor]]]. cancel setNameTo: 'cancel'. frame _ LayoutFrame new. frame leftFraction: 0.5; leftOffset: 10; bottomFraction: 1.0; bottomOffset: -2. cancel layoutFrame: frame. self addMorph: cancel. buttonAreaHeight _ (accept height max: cancel height) + 4. textPane _ PluggableTextMorph on: self text: #response accept: #response: readSelection: #selectionInterval menu: #codePaneMenu:shifted:. textPane extent: answerExtent. textPane hResizing: #spaceFill; vResizing: #spaceFill. textPane borderWidth: 2. textPane hasUnacceptedEdits: true. textPane acceptOnCR: acceptBoolean. textPane setNameTo: 'textPane'. useSkin ifTrue: [textPane color: Color white]. frame _ LayoutFrame new. frame leftFraction: 0.0; rightFraction: 1.0; topFraction: 0.0; topOffset: topOffset; bottomFraction: 1.0; bottomOffset: buttonAreaHeight negated. textPane layoutFrame: frame. self addMorph: textPane. self extent: (query extent x max: answerExtent x) + 4 @ (topOffset + answerExtent y + 4 + buttonAreaHeight)! ! !FillInTheBlankMorph methodsFor: 'skins' stamp: 'sbw 4/13/2003 09:42'! initializeSkinned | skin useSkin | skin _ self skinToUse. useSkin _ skin isNil not. useSkin ifTrue: [^self initializeSkinnedWith: skin]. ^ useSkin! ! !FillInTheBlankMorph methodsFor: 'skins' stamp: 'sbw 4/13/2003 10:01'! initializeSkinnedWith: aSkin | useSkin selectedColor | selectedColor _ aSkin colorDialog. useSkin _ selectedColor isNil not. useSkin ifTrue: [color _ selectedColor] ifFalse: [^ false]. borderWidth _ aSkin dlgBorderSizeX. selectedColor _ aSkin colorActiveBorder. selectedColor isNil ifFalse: [self borderColor: selectedColor]. self extent: 200 @ 70. responseUponCancel _ ''. ^ true! ! !FillInTheBlankMorph methodsFor: 'menu' stamp: 'sbw 4/13/2003 10:08'! initialize super initialize. Preferences roundedWindowCorners ifTrue: [self useRoundedCorners]. Preferences skinDialogs ifTrue: [self initializeSkinned ifTrue: [^ self]]. color _ Color white. borderWidth _ 2. self extent: 200 @ 70. responseUponCancel _ ''! ! !IndentingListItemMorph methodsFor: 'drawing' stamp: 'sbw 4/6/2003 17:31'! drawOn: aCanvas | tRect sRect columnRect columnScanner columnData columnLeft colorToUse | tRect _ self toggleRectangle. sRect _ bounds withLeft: tRect right + 3. self drawToggleOn: aCanvas in: tRect. colorToUse _ complexContents preferredColor ifNil: [self color]. (container columns isNil or: [(contents asString indexOf: Character tab) = 0]) ifTrue: [aCanvas drawString: contents asString in: sRect font: self fontToUse color: colorToUse] ifFalse: [columnLeft _ sRect left. columnScanner _ ReadStream on: contents asString. container columns do: [:width | columnRect _ columnLeft @ sRect top extent: width @ sRect height. columnData _ columnScanner upTo: Character tab. columnData isEmpty ifFalse: [aCanvas drawString: columnData in: columnRect font: self fontToUse color: colorToUse]. columnLeft _ columnRect right + 5]]! ! !IndentingListItemMorph methodsFor: 'drawing' stamp: 'sbw 4/7/2003 18:58'! highlight | skin useSkin colorChoice | complexContents highlightingColor ifNotNil: [skin _ self owner skinToUse. useSkin _ skin isNil not and: [Preferences skinListBoxes and: [colorChoice _ skin colorListBoxSelectionText. colorChoice isNil not]]. self color: (useSkin ifTrue: [colorChoice] ifFalse: [complexContents highlightingColor])]. self changed! ! !IndentingListItemMorph methodsFor: 'drawing' stamp: 'sbw 4/7/2003 18:58'! unhighlight | skin useSkin colorChoice | complexContents highlightingColor ifNotNil: [skin _ self owner skinToUse. useSkin _ skin isNil not and: [Preferences skinListBoxes and: [colorChoice _ skin colorListBoxText. colorChoice isNil not]]. self color: (useSkin ifTrue: [colorChoice] ifFalse: [Color black])]. self changed! ! !MenuItemMorph methodsFor: 'initialization' stamp: 'sbw 4/7/2003 18:59'! initialize | skin useSkin skinColorChoice | super initialize. bounds _ 0 @ 0 extent: 10 @ 10. skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinMenus and: [skinColorChoice _ skin colorNormalMenuItemText. skinColorChoice isNil not]]. color _ useSkin ifTrue: [skinColorChoice] ifFalse: [Color black]. contents _ ''. hasFocus _ false. isEnabled _ true. subMenu _ nil. isSelected _ false. target _ nil. selector _ nil. arguments _ nil. font _ Preferences standardMenuFont. self hResizing: #spaceFill; vResizing: #shrinkWrap! ! !MenuItemMorph methodsFor: 'drawing' stamp: 'sbw 4/7/2003 18:58'! drawOn: aCanvas | selectionColor skin useSkin skinColorBackgroundChoice skinColorForegroundChoice normalTextColor | skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinMenus and: [skinColorBackgroundChoice _ skin colorActiveMenuItem. skinColorBackgroundChoice isNil not and: [skinColorForegroundChoice _ skin colorActiveMenuItemText. skinColorForegroundChoice isNil not and: [normalTextColor _ skin colorNormalMenuItemText. normalTextColor isNil not and: ["Poor theme design with foreground and background color catches here." skinColorForegroundChoice ~= skinColorBackgroundChoice]]]]]. isSelected & isEnabled ifTrue: [selectionColor _ useSkin ifTrue: [skinColorBackgroundChoice] ifFalse: [Display depth <= 2 ifTrue: [Color gray] ifFalse: [owner color darker darker]]. useSkin ifTrue: [self color: skinColorForegroundChoice]. aCanvas fillRectangle: self bounds color: selectionColor] ifFalse: [useSkin ifTrue: [self color: normalTextColor]]. super drawOn: aCanvas. subMenu ifNotNil: [aCanvas paintImage: SubMenuMarker at: self right - 8 @ (self top + self bottom - SubMenuMarker height // 2)]! ! !MenuMorph methodsFor: 'construction' stamp: 'sbw 4/7/2003 18:59'! addTitle: aString updatingSelector: aSelector updateTarget: aTarget "Add a title line at the top of this menu Make aString its initial contents. If aSelector is not nil, then periodically obtain fresh values for its contents by sending aSelector to aTarget.." | title skin useSkin skinTextColorChoice | title _ AlignmentMorph new. self setTitleParametersFor: title. title vResizing: #shrinkWrap. title listDirection: #topToBottom. title wrapCentering: #center; cellPositioning: #topCenter; borderWidth: 0; layoutInset: 0. aSelector ifNil: [(aString asString findTokens: String cr) do: [:line | title addMorphBack: (StringMorph new contents: line; font: Preferences standardMenuFont)]] ifNotNil: [title addMorphBack: (UpdatingStringMorph new lock; font: Preferences standardMenuFont; useStringFormat; target: aTarget; getSelector: aSelector)]. title setProperty: #titleString toValue: aString. self addMorphFront: title. (self hasProperty: #needsTitlebarWidgets) ifTrue: [self addStayUpIcons]. skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinMenus and: [skinTextColorChoice _ skin colorLabelText. skinTextColorChoice isNil not]]. useSkin ifTrue: [(title allMorphs select: [:m | m isKindOf: StringMorph]) do: [:sm | sm color: skinTextColorChoice]]! ! !MenuMorph methodsFor: 'initialization' stamp: 'sbw 4/8/2003 19:38'! setDefaultParameters | worldColor skin useSkin skinColorChoice borderColorChoice borderWidthChoice | skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinMenus and: [skinColorChoice _ skin colorNormalMenu. skinColorChoice isNil not or: [skin hasMenuForm]]]. useSkin ifTrue: [borderColorChoice _ skin colorActiveBorder. borderWidthChoice _ skin dlgBorderSizeX max: skin dlgBorderSizeY. self setColor: (skin hasMenuForm ifTrue: ["skin menuBackgroundForm" skinColorChoice] ifFalse: [skinColorChoice]) borderWidth: (borderWidthChoice = 0 ifTrue: [Preferences menuBorderWidth] ifFalse: [borderWidthChoice]) borderColor: (borderColorChoice isNil ifTrue: [Preferences menuBorderColor] ifFalse: [borderColorChoice])] ifFalse: [((Preferences menuColorFromWorld and: [Display depth > 4]) and: [(worldColor _ self currentWorld color) isColor]) ifTrue: [self setColor: (worldColor luminance > 0.7 ifTrue: [worldColor mixed: 0.85 with: Color black] ifFalse: [worldColor mixed: 0.4 with: Color white]) borderWidth: Preferences menuBorderWidth borderColor: #raised "Think about whether alpha should be included."] ifFalse: [self setColor: Preferences menuColor borderWidth: Preferences menuBorderWidth borderColor: Preferences menuBorderColor]]. self layoutInset: 3! ! !MenuMorph methodsFor: 'initialization' stamp: 'sbw 4/7/2003 18:59'! setTitleParametersFor: aMenuTitle | skin useSkin skinColorChoice | skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinMenus and: [skinColorChoice _ skin colorLabel. skinColorChoice isNil not]]. aMenuTitle setColor: (useSkin ifTrue: [skinColorChoice] ifFalse: [Preferences menuTitleColor]) borderWidth: Preferences menuTitleBorderWidth borderColor: Preferences menuTitleBorderColor! ! !PluggableButtonMorph methodsFor: 'updating' stamp: 'sbw 4/9/2003 06:54'! update: aParameter | skin useSkin strMorph selectedColor | getLabelSelector ifNotNil: [aParameter == getLabelSelector ifTrue: [self label: (model perform: getLabelSelector)]]. skin _ self owner skinToUse. useSkin _ skin isNil not and: [Preferences skinButtons]. strMorph _ self allMorphs detect: [:m | m isKindOf: StringMorph] ifNone: []. useSkin _ useSkin and: [strMorph isNil not]. useSkin _ useSkin and: [onColor isTransparent not and: [offColor isTransparent not]]. useSkin _ useSkin and: [selectedColor _ self getModelState ifTrue: [skin colorActiveButtonText] ifFalse: [skin colorNormalButtonText]. selectedColor isNil not]. self getModelState ifTrue: [self color: onColor] ifFalse: [self color: offColor]. useSkin ifTrue: [strMorph color: selectedColor] ifFalse: [strMorph isNil ifFalse: [strMorph color: Color black]]! ! !PluggableButtonMorph methodsFor: 'skins' stamp: 'sbw 4/9/2003 12:36'! isPluggableButtonMorph ^true! ! !PluggableButtonMorph methodsFor: 'skins' stamp: 'sbw 4/9/2003 06:09'! onColor ^onColor! ! !PluggableListMorph methodsFor: 'initialization' stamp: 'sbw 4/6/2003 13:49'! list: listOfStrings "Set the receiver's list as specified" | morphList h loc index converter item aSelector | scroller removeAllMorphs. list _ listOfStrings ifNil: [Array new]. list isEmpty ifTrue: [self setScrollDeltas. ^ self selectedMorph: nil]. "NOTE: we will want a quick StringMorph init message, possibly even combined with event install and positioning" font ifNil: [font _ Preferences standardListFont]. converter _ self valueOfProperty: #itemConversionMethod. converter ifNil: [converter _ #asStringOrText]. morphList _ list collect: [:each | item _ each. item _ item perform: converter. item isText ifTrue: [StringMorph contents: item font: font emphasis: (item emphasisAt: 1)] ifFalse: [StringMorph contents: item font: font]]. (aSelector _ self valueOfProperty: #balloonTextSelectorForSubMorphs) ifNotNil: [morphList do: [:m | m balloonTextSelector: aSelector]]. self highlightSelector ifNotNil: [model perform: self highlightSelector with: list with: morphList]. "Lay items out vertically and install them in the scroller" h _ morphList first height. "self listItemHeight" loc _ 0 @ 0. morphList do: [:m | m bounds: (loc extent: 9999 @ h). loc _ loc + (0 @ h)]. scroller addAllMorphs: morphList. index _ self getCurrentSelectionIndex. self selectedMorph: ((index = 0 or: [index > morphList size]) ifFalse: [morphList at: index]). self setScrollDeltas. scrollBar setValue: 0.0. self setColorsFromSkin. ! ! !PluggableListMorph methodsFor: 'drawing' stamp: 'sbw 4/7/2003 19:02'! drawOn: aCanvas "Draw the list on the canvas, and possibly also draw frame feedback" | colorToFillWith areaToFill next useSkin | useSkin _ self owner skinToUse isNil not and: [Preferences skinListBoxes]. useSkin ifTrue: [^ self drawOnWithSkin: aCanvas]. super drawOn: aCanvas. selectedMorph ifNotNil: [colorToFillWith _ color. next _ self. [colorToFillWith isTransparent and: [(next _ next owner) notNil]] whileTrue: [colorToFillWith _ next color]. colorToFillWith _ colorToFillWith luminance < 0.5 ifTrue: [colorToFillWith muchLighter] ifFalse: [colorToFillWith darker]. areaToFill _ ((scroller transformFrom: self) localBoundsToGlobal: selectedMorph bounds) intersect: scroller bounds. aCanvas fillRectangle: areaToFill color: colorToFillWith]. self hasFocus ifTrue: [aCanvas frameRectangle: scroller bounds color: Preferences keyboardFocusColor]! ! !PluggableListMorph methodsFor: 'drawing' stamp: 'sbw 4/7/2003 19:03'! highlightSelection | skin useSkin colorChoice mTemp | selectedMorph ifNotNil: [mTemp _ self modelOrNil. useSkin _ mTemp isNil not and: [Preferences skinListBoxes]. useSkin _ useSkin and: [skin _ mTemp topView skinToUse. skin isNil not]. useSkin _ useSkin and: [colorChoice _ skin colorListBoxSelectionText. colorChoice isNil not]. selectedMorph color: (useSkin ifTrue: [colorChoice] ifFalse: [Color red]); changed]! ! !PluggableListMorph methodsFor: 'drawing' stamp: 'sbw 4/6/2003 13:02'! highlightSelectionNoSkin | | selectedMorph ifNotNil: [ selectedMorph color: Color red; changed]! ! !PluggableListMorph methodsFor: 'drawing' stamp: 'sbw 4/7/2003 19:03'! unhighlightSelection | skin useSkin colorChoice mTemp | selectedMorph ifNotNil: [mTemp _ self modelOrNil. useSkin _ mTemp isNil not and: [Preferences skinListBoxes]. useSkin _ useSkin and: [skin _ self owner skinToUse. skin isNil not]. useSkin _ useSkin and: [colorChoice _ skin colorListBoxText. colorChoice isNil not]. selectedMorph color: (useSkin ifTrue: [colorChoice] ifFalse: [Color black]); changed]! ! !PluggableListMorph methodsFor: 'skins' stamp: 'sbw 4/7/2003 19:00'! color | skin useSkin colorChoice mTemp | mTemp _ self modelOrNil. useSkin _ mTemp isNil not and: [Preferences skinListBoxes]. useSkin _ useSkin and: [skin _ mTemp topView skinToUse. skin isNil not]. useSkin _ useSkin and: [colorChoice _ skin colorListBoxSelection. colorChoice isNil not]. useSkin ifFalse: [colorChoice _ color]. ^ colorChoice! ! !PluggableListMorph methodsFor: 'skins' stamp: 'sbw 4/6/2003 11:07'! drawOnWithSkin: aCanvas "Draw the list on the canvas, and possibly also draw frame feedback" | colorToFillWith areaToFill | super drawOn: aCanvas. selectedMorph ifNotNil: [colorToFillWith _ self color. areaToFill _ ((scroller transformFrom: self) localBoundsToGlobal: selectedMorph bounds) intersect: scroller bounds. aCanvas fillRectangle: areaToFill color: colorToFillWith]. self hasFocus ifTrue: [aCanvas frameRectangle: scroller bounds color: Preferences keyboardFocusColor]! ! !PluggableListMorph methodsFor: 'skins' stamp: 'sbw 4/7/2003 19:07'! setColorsFromSkin | listColorChoice textColorChoice mTemp | Preferences skinListBoxes ifFalse: [^self]. mTemp _ self modelOrNil. mTemp isNil ifTrue: [^ self]. mTemp topView skinToUse isNil ifTrue: [^ self]. mTemp topView skinToUse isValid ifFalse: [^ self]. listColorChoice _ mTemp topView skinToUse colorListBox. listColorChoice isColor ifFalse: [^ self]. textColorChoice _ mTemp topView skinToUse colorListBoxText. textColorChoice isColor ifFalse: [^ self]. self color: listColorChoice. self scroller submorphs do: [:sm | sm color: textColorChoice]. self highlightSelection! ! !PluggableListMorphOfMany methodsFor: 'drawing' stamp: 'sbw 4/6/2003 09:30'! drawOn: aCanvas "Draw the receiver on a given canvas" | onMorph submorphsCache | super drawOn: aCanvas. submorphsCache _ scroller submorphs. "Speedup by Daniel Vainsencher" 1 to: list size do: [:index | "NOTE: should be optimized to only visible morphs" (self listSelectionAt: index) ifTrue: [onMorph _ submorphsCache at: index. aCanvas fillRectangle: (((scroller transformFrom: self) localBoundsToGlobal: onMorph bounds) intersect: scroller bounds) color: self color blacker]]! ! !PluggableMultiColumnListMorph methodsFor: 'initialization' stamp: 'sbw 4/6/2003 13:51'! list: arrayOfLists | listOfStrings arrayOfMorphs index | lists _ arrayOfLists. scroller removeAllMorphs. listOfStrings _ arrayOfLists == nil ifTrue: [Array new] ifFalse: [arrayOfLists isEmpty ifFalse: [arrayOfLists at: 1]]. list _ listOfStrings ifNil: [Array new]. arrayOfMorphs _ self createMorphicListsFrom: arrayOfLists. self layoutMorphicLists: arrayOfMorphs. list isEmpty ifTrue: [self setScrollDeltas. ^ self selectedMorph: nil]. arrayOfMorphs do: [:morphList | scroller addAllMorphs: morphList]. index _ self getCurrentSelectionIndex. self selectedMorph: ((index = 0 or: [index > (arrayOfMorphs at: 1) size]) ifFalse: [(arrayOfMorphs at: 1) at: index]). self setScrollDeltas. scrollBar setValue: 0.0. self setColorsFromSkin. ! ! !PluggableMultiColumnListMorph methodsFor: 'drawing' stamp: 'sbw 4/6/2003 09:30'! drawOn: aCanvas "Only modification here is to bypass the #drawOn: method in our superclass." super superDrawOn: aCanvas. selectedMorph ifNotNil: [aCanvas fillRectangle: (((scroller transformFrom: self) localBoundsToGlobal: selectedMorph bounds) intersect: scroller bounds) color: self color darker]. self hasFocus ifTrue: [aCanvas frameRectangle: scroller bounds color: Preferences keyboardFocusColor]! ! !PluggableMultiColumnListMorph methodsFor: 'selection' stamp: 'sbw 4/7/2003 19:07'! highlightSelection | highlightColor columnLength localIndex m properSelectedIndex totalIndex skin useSkin colorChoice | skin _ self owner skinToUse. useSkin _ skin isNil not and: [Preferences skinListBoxes and: [colorChoice _ skin colorListBoxSelectionText. colorChoice isNil not]]. highlightColor _ useSkin ifTrue: [colorChoice] ifFalse: [Color red]. "<-- Change the highlight color here." selectedMorph ifNotNil: [selectedMorph color: highlightColor; changed. totalIndex _ scroller submorphs asArray findFirst: [:mp | mp contents = selectedMorph contents]. columnLength _ lists first size. properSelectedIndex _ totalIndex \\ columnLength. properSelectedIndex = 0 ifTrue: [properSelectedIndex _ columnLength]. selectedIndex = properSelectedIndex ifFalse: [selectedIndex _ properSelectedIndex]. "Highlight the others in the same row." 2 to: lists size do: [:columnIndex | localIndex _ selectedIndex + (columnLength * (columnIndex - 1)). m _ scroller submorphs asArray at: localIndex. m color: highlightColor; changed]]! ! !SimpleButtonMorph methodsFor: 'initialization' stamp: 'sbw 4/13/2003 11:35'! initializeAllButLabel | skin useSkin selectedColor selectedBorderColor | super initialize. skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinDialogs]. self borderWidth: 1. self cornerStyle: #rounded. useSkin _ useSkin and: [selectedColor _ skin colorNormalButton. selectedColor isNil not]. useSkin _ useSkin and: [selectedBorderColor _ skin colorNormalBorder. selectedBorderColor isNil not]. useSkin ifTrue: [self color: selectedColor. self borderColor: selectedBorderColor] ifFalse: [self color: (Color r: 0.4 g: 0.8 b: 0.6). self borderColor: self color darker]. target _ nil. actionSelector _ #flash. arguments _ EmptyArray. actWhen _ #buttonUp! ! !SimpleButtonMorph methodsFor: 'accessing' stamp: 'sbw 4/13/2003 11:25'! label: aString | oldLabel m skin useSkin selectedColor | (oldLabel _ self findA: StringMorph) ifNotNil: [oldLabel delete]. m _ StringMorph contents: aString font: TextStyle defaultFont. self extent: m extent + (borderWidth + 6). m position: self center - (m extent // 2). skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinDialogs]. useSkin _ useSkin and: [selectedColor _ skin colorNormalButtonText. selectedColor isNil not]. useSkin ifTrue: [m color: selectedColor]. self addMorph: m. m lock! ! !SimpleButtonMorph methodsFor: 'accessing' stamp: 'sbw 4/13/2003 11:26'! label: aString font: aFont | oldLabel m skin useSkin selectedColor | (oldLabel _ self findA: StringMorph) ifNotNil: [oldLabel delete]. m _ StringMorph contents: aString font: (aFont ifNil: [Preferences standardButtonFont]). self extent: m width + 6 @ (m height + 6). m position: self center - (m extent // 2). skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinDialogs]. useSkin _ useSkin and: [selectedColor _ skin colorNormalButtonText. selectedColor isNil not]. useSkin ifTrue: [m color: selectedColor]. self addMorph: m. m lock! ! !SimpleButtonMorph methodsFor: 'visual properties' stamp: 'sbw 4/13/2003 11:29'! updateVisualState: evt | skin useSkin selectedColor selectedTextColor m | skin _ self skinToUse. useSkin _ skin isNil not and: [Preferences skinDialogs]. useSkin _ useSkin and: [selectedColor _ skin colorActiveButton. selectedColor isNil not]. useSkin _ useSkin and: [selectedTextColor _ skin colorActiveButtonText. selectedTextColor isNil not]. useSkin ifTrue: [self color: selectedColor. m _ self labelMorph. m isNil not ifTrue: [m color: selectedTextColor]] ifFalse: [oldColor ifNotNil: [self color: ((self containsPoint: evt cursorPoint) ifTrue: [oldColor mixed: 1 / 2 with: Color white] ifFalse: [oldColor])]]! ! !SimpleButtonMorph methodsFor: 'skins' stamp: 'sbw 4/9/2003 12:35'! isSimpleButtonMorph ^true! ! !SimpleButtonMorph methodsFor: 'skins' stamp: 'sbw 4/13/2003 11:23'! labelMorph ^self findA: StringMorph! ! !SimpleButtonMorph methodsFor: 'skins' stamp: 'sbw 4/9/2003 12:34'! oldColor ^oldColor! ! !SimpleButtonMorph methodsFor: 'skins' stamp: 'sbw 4/9/2003 12:33'! oldColor: aColor oldColor _ aColor! ! !SimpleButtonMorph methodsFor: 'skins' stamp: 'sbw 4/13/2003 11:23'! setLabelToColor: aColor | existingLabel | existingLabel _ self labelMorph. existingLabel isNil ifFalse: [existingLabel color: aColor]! ! !IceWMSkinApplicator class methodsFor: 'as yet unclassified' stamp: 'sbw 4/13/2003 09:16'! applySkin: skin toSystemWindow: window | progress | progress _ Preferences showProgressOnSkins ifTrue: [ProgressMorph label: 'Loading skin "' , skin folderName , '"'] ifFalse: [nil]. progress isNil ifFalse: [progress openInWorld]. [progress isNil ifFalse: [progress subLabel: 'save existing window information']. window saveUnskinnedInformation. progress isNil ifFalse: [progress done: 0.1]. skin saveOriginalTextPaneColors. progress isNil ifFalse: [progress done: 0.16]. progress isNil ifFalse: [progress subLabel: 'adjust frames']. window borderWidth: 0. window setLabelWidgetAllowance. window setFramesFromSkin. progress isNil ifFalse: [progress done: 0.2]. progress isNil ifFalse: [progress subLabel: 'set colors']. window setInitialColorsState. progress isNil ifFalse: [progress done: 0.24]. window setListMorphBackgrounds. progress isNil ifFalse: [progress done: 0.3]. window setTextMorphBackgrounds. progress isNil ifFalse: [progress done: 0.36]. window setTextMorphColors. progress isNil ifFalse: [progress done: 0.42]. progress isNil ifFalse: [progress subLabel: 'swap out controls']. window swapButtonMorphs. progress isNil ifFalse: [progress done: 0.6]. window swapTitleBarWidgets. progress isNil ifFalse: [progress done: 0.66]. progress isNil ifFalse: [progress subLabel: 'create new borders']. window createSkinBorders. progress isNil ifFalse: [progress done: 0.7]. progress isNil ifFalse: [progress subLabel: 'create new title bar']. window setStripeColorsFromSkin. progress isNil ifFalse: [progress done: 0.8]. progress isNil ifFalse: [progress subLabel: 'apply desktop image']. skin applyBackgroundImage. progress isNil ifFalse: [progress done: 0.95]. skin addDependent: window. progress isNil ifFalse: [progress done: 1.0]. progress isNil ifFalse: [progress delete]] fork! ! !IceWMSkinApplicator class methodsFor: 'as yet unclassified' stamp: 'sbw 4/12/2003 15:49'! unApplySkin: skin toSystemWindow: window window restoreUnskinnedInformation. skin restoreOriginalTextPaneColorsPermanent. skin removeDependent: window! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/26/2003 15:26'! activeGraphic: anActiveSkinForm inactiveGraphic: anInactiveSkinForm | oldLabel graphicalMorph hgt ext idleForm | activeForm _ anActiveSkinForm. inactiveForm _ anInactiveSkinForm. inactiveForm == nil ifTrue: [inactiveForm _ activeForm]. (oldLabel _ self findA: SketchMorph) ifNotNil: [oldLabel delete]. hgt _ activeForm height // 2. ext _ activeForm width @ hgt. idleForm _ activeForm copy: (0 @ 0 extent: ext). graphicalMorph _ SketchMorph withForm: idleForm. self extent: graphicalMorph extent. graphicalMorph position: self center - (graphicalMorph extent // 2). self addMorph: graphicalMorph. graphicalMorph lock! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/26/2003 15:09'! altActiveGraphic: anActiveSkinForm altInactiveGraphic: anInactiveSkinForm | | altActiveForm _ anActiveSkinForm. altInactiveForm _ anInactiveSkinForm. altInactiveForm == nil ifTrue: [altInactiveForm _ altInactiveForm]. ! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/16/2003 18:26'! handlesMouseDown: evt ^true! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/16/2003 19:24'! mouseUp: evt self showGraphic: true. super mouseUp: evt! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/26/2003 15:30'! showGraphic: aBoolean | morph form hgt ext idleForm | morph _ self findA: SketchMorph. morph isNil ifTrue: [^ self]. form _ aBoolean ifTrue: [self useAlt ifTrue: [altActiveForm] ifFalse: [activeForm]] ifFalse: [self useAlt ifTrue: [altInactiveForm] ifFalse: [inactiveForm]]. form isNil ifTrue: [^ self]. hgt _ form height // 2. ext _ form width @ hgt. idleForm _ form copy: (0 @ 0 extent: ext). morph newForm: idleForm! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/16/2003 19:12'! updateVisualState: evt | morph hgt ext idleForm | morph _ self findA: SketchMorph. morph isNil ifTrue: [^ self]. activeForm isNil ifTrue: [^ self]. hgt _ activeForm height // 2. ext _ activeForm width @ hgt. idleForm _ activeForm copy: (0 @ hgt extent: ext). morph newForm: idleForm! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/26/2003 15:32'! useAlt useAlt == nil ifTrue: [^ false] ifFalse: [altActiveForm isNil ifTrue: [^false]. altInactiveForm isNil ifTrue: [^false]. ^useAlt]! ! !SkinnedIconicButton methodsFor: 'as yet unclassified' stamp: 'sbw 3/26/2003 15:25'! useAlternateGraphics: aBoolean useAlt _ aBoolean ! ! !SystemWindow methodsFor: 'initialization' stamp: 'sbw 3/12/2003 19:29'! setFramesForLabelArea "an aid to converting old instances, but then I found convertAlignment (jesse welton's note)" | frame | labelArea ifNil: [^ self]. self hasSkinAssigned ifTrue: [^ self setFramesFromSkin]. frame _ LayoutFrame new. frame leftFraction: 0.5; topFraction: 0; leftOffset: label width negated // 2. label layoutFrame: frame. frame _ LayoutFrame new. frame rightFraction: 1; topFraction: 0; rightOffset: -1; topOffset: 1. collapseBox ifNotNilDo: [:cb | cb layoutFrame: frame]. stripes isEmptyOrNil ifFalse: [frame _ LayoutFrame new. frame leftFraction: 0; topFraction: 0; rightFraction: 1; leftOffset: 1; topOffset: 1; rightOffset: -1. stripes first layoutFrame: frame. stripes first height: self labelHeight - 2. stripes first hResizing: #spaceFill. frame _ LayoutFrame new. frame leftFraction: 0; topFraction: 0; rightFraction: 1; leftOffset: 3; topOffset: 3; rightOffset: -3. stripes last layoutFrame: frame. stripes last height: self labelHeight - 6. stripes last hResizing: #spaceFill]. labelArea ifNotNil: [frame _ LayoutFrame new. frame leftFraction: 0; topFraction: 0; rightFraction: 1; topOffset: self labelHeight negated. Preferences alternativeWindowLook ifTrue: [frame leftOffset: -1; rightOffset: 1; topOffset: self labelHeight negated - 1; bottomFraction: 0; bottomOffset: 1]. labelArea layoutFrame: frame]! ! !SystemWindow methodsFor: 'geometry' stamp: 'sbw 4/9/2003 06:30'! buildWindowMenu | aMenu | aMenu _ MenuMorph new defaultTarget: self. aMenu add: 'change title...' action: #relabel. aMenu addLine. aMenu add: 'send to back' action: #sendToBack. aMenu add: 'make next-to-topmost' action: #makeSecondTopmost. aMenu addLine. self mustNotClose ifTrue: [aMenu add: 'make closable' action: #makeClosable] ifFalse: [aMenu add: 'make unclosable' action: #makeUnclosable]. aMenu add: (self isSticky ifTrue: ['make draggable'] ifFalse: ['make undraggable']) action: #toggleStickiness. aMenu addLine. aMenu add: 'full screen' action: #fullScreen. self isCollapsed ifFalse: [aMenu add: 'window color...' action: #setWindowColor]. aMenu addLine. self addSkinMenuItemsTo: aMenu. ^ aMenu! ! !SystemWindow methodsFor: 'geometry' stamp: 'sbw 3/15/2003 11:16'! extent: aPoint "Set the receiver's extent to value provided. Respect my minimumExtent." | newExtent | self hasSkinAssigned ifTrue: [^self setExtentAccountForSkin: aPoint]. newExtent _ self isCollapsed ifTrue: [aPoint] ifFalse: [aPoint max: self minimumExtent]. newExtent = self extent ifTrue: [^ self]. isCollapsed ifTrue: [super extent: newExtent x @ (self labelHeight + 2)] ifFalse: [super extent: newExtent]. labelArea ifNotNil: [self setStripeColorsFrom: self paneColorToUse. label fitContents; setWidth: (label width min: bounds width - self labelWidgetAllowance). label layoutFrame leftOffset: label width negated // 2]. isCollapsed ifTrue: [collapsedFrame _ self bounds] ifFalse: [fullFrame _ self bounds]! ! !SystemWindow methodsFor: 'geometry' stamp: 'sbw 3/29/2003 10:05'! setPaneRectsFromBounds "Reset proportional specs from actual bounds, eg, after reframing panes" | layoutBounds box frame left right top bottom | layoutBounds _ self layoutBounds. paneMorphs do: [:m | frame _ m layoutFrame. box _ m bounds. frame ifNotNil: [left _ box left - layoutBounds left - (frame leftOffset ifNil: [0]). right _ box right - layoutBounds left - (frame rightOffset ifNil: [0]). top _ box top - layoutBounds top - (frame topOffset ifNil: [0]). bottom _ box bottom - layoutBounds top - (frame bottomOffset ifNil: [0]). frame leftFraction: left / layoutBounds width asFloat. frame rightFraction: right / layoutBounds width asFloat. frame topFraction: top / layoutBounds height asFloat. frame bottomFraction: bottom / layoutBounds height asFloat]]. ! ! !SystemWindow methodsFor: 'label' stamp: 'sbw 3/15/2003 16:03'! labelHeight "Answer the height for the window label. The standard behavior is at bottom; a hook is provided so that models can stipulate other heights, in support of various less-window-looking demos." | aHeight | (model notNil and: [model respondsTo: #desiredWindowLabelHeightIn:]) ifTrue: [(aHeight _ model desiredWindowLabelHeightIn: self) ifNotNil: [^ aHeight]]. ^ label ifNil: [0] ifNotNil: [self hasSkinAssigned ifTrue: [self assignedSkin isNil ifTrue: [0] ifFalse: [self assignedSkin titleBarHeight]] ifFalse: [self originalLabelHeight]]! ! !SystemWindow methodsFor: 'label' stamp: 'sbw 4/5/2003 11:50'! setLabel: aString | frame | self hasSkinAssigned ifTrue: [^ self setLabelFromSkin: aString]. labelString _ aString. label ifNil: [^ self]. label contents: aString. self labelWidgetAllowance. "Sets it if not already" self isCollapsed ifTrue: [self extent: label width + labelWidgetAllowance @ (self labelHeight + 2)] ifFalse: [label fitContents; setWidth: (label width min: bounds width - labelWidgetAllowance). label align: label bounds topCenter with: bounds topCenter + (0 @ borderWidth). collapsedFrame ifNotNil: [collapsedFrame _ collapsedFrame withWidth: label width + labelWidgetAllowance]]. frame _ LayoutFrame new. frame leftFraction: 0.5; topFraction: 0; leftOffset: label width negated // 2. label layoutFrame: frame! ! !SystemWindow methodsFor: 'label' stamp: 'sbw 4/6/2003 14:59'! setLabelWidgetAllowance ^labelWidgetAllowance _ self hasSkinAssigned ifTrue: [self assignedSkin widthOfControls + 6] ifFalse: [75]! ! !SystemWindow methodsFor: 'label' stamp: 'sbw 3/15/2003 12:22'! setStripeColorsFrom: paneColor "Set the stripe color based on the given paneColor" self hasSkinAssigned ifTrue: [self skinInTransition ifFalse: [^ self setStripeColorsFromSkin]]. labelArea ifNotNil: [Preferences alternativeWindowLook ifTrue: [labelArea color: paneColor lighter] ifFalse: [labelArea color: Color transparent]]. stripes ifNil: [^ self]. Preferences alternativeWindowLook ifTrue: [self isActive ifTrue: [stripes first borderColor: paneColor paler; color: stripes first borderColor. stripes second borderColor: stripes first color slightlyLighter; color: stripes second borderColor] ifFalse: ["This could be much faster" stripes second color: paneColor slightlyDarker; borderColor: stripes second color. stripes first color: paneColor; borderColor: paneColor]] ifFalse: [self isActive ifTrue: [stripes second color: paneColor; borderColor: stripes second color darker. stripes first color: stripes second borderColor darker; borderColor: stripes first color darker] ifFalse: ["This could be much faster" stripes second color: paneColor; borderColor: paneColor. stripes first color: paneColor; borderColor: paneColor]]! ! !SystemWindow methodsFor: 'open/close' stamp: 'sbw 4/2/2003 18:44'! openAsIsIn: aWorld "This msg and its callees result in the window being activeOnlyOnTop" aWorld addMorph: self. self automaticallyApplyCurrentSkin. self activate. aWorld startSteppingSubmorphsOf: self! ! !SystemWindow methodsFor: 'resize/collapse' stamp: 'sbw 3/16/2003 20:27'! collapseOrExpand "Collapse or expand the window, depending on existing state" | cf | self hasSkinAssigned ifTrue: [^self collapseOrExpandUsingSkin]. isCollapsed ifTrue: ["Expand -- restore panes to morphics structure" isCollapsed _ false. self activate. "Bring to frint first" Preferences collapseWindowsInPlace ifTrue: [fullFrame _ fullFrame align: fullFrame topLeft with: self getBoundsWithFlex topLeft] ifFalse: [collapsedFrame _ self getBoundsWithFlex]. collapseBox ifNotNil: [collapseBox setBalloonText: 'collapse this window']. self setBoundsWithFlex: fullFrame. paneMorphs reverseDo: [:m | self addMorph: m unlock. self world startSteppingSubmorphsOf: m]] ifFalse: ["Collapse -- remove panes from morphics structure" isCollapsed _ true. fullFrame _ self getBoundsWithFlex. "First save latest fullFrame" paneMorphs do: [:m | m delete; releaseCachedState]. model modelSleep. cf _ self getCollapsedFrame. (collapsedFrame isNil and: [Preferences collapseWindowsInPlace not]) ifTrue: [collapsedFrame _ cf]. self setBoundsWithFlex: cf. collapseBox ifNotNil: [collapseBox setBalloonText: 'expand this window']. expandBox ifNotNil: [expandBox setBalloonText: 'expand to full screen']]. self layoutChanged! ! !SystemWindow methodsFor: 'resize/collapse' stamp: 'sbw 3/29/2003 10:04'! setBoundsWithFlex: newFrame "Set bounds from newFrame with origin preserved from global coordinates" self isFlexed ifTrue: [super bounds: ((owner transform globalPointToLocal: newFrame topLeft) extent: newFrame extent)] ifFalse: [super bounds: newFrame]. ! ! !SystemWindow methodsFor: 'top window' stamp: 'sbw 3/29/2003 10:01'! activate "Bring me to the front and make me able to respond to mouse and keyboard" | oldTop outerMorph sketchEditor pal | outerMorph _ self topRendererOrSelf. outerMorph owner ifNil: [^ self"avoid spurious activate when drop in trash"]. oldTop _ TopWindow. TopWindow _ self. oldTop ifNotNil: [oldTop passivate]. outerMorph owner firstSubmorph == outerMorph ifFalse: ["Bring me (with any flex) to the top if not already" outerMorph owner addMorphFront: outerMorph]. self submorphsDo: [:m | m unlock]. labelArea ifNotNil: [labelArea submorphsDo: [:m | m unlock]. self setStripeColorsFrom: self paneColorToUse]. self isCollapsed ifFalse: [model modelWakeUpIn: self. self positionSubmorphs. labelArea ifNil: [self adjustBorderUponActivationWhenLabeless]]. (sketchEditor _ self extantSketchEditor) ifNotNil: [sketchEditor comeToFront. (pal _ self world findA: PaintBoxMorph) ifNotNil: [pal comeToFront]]! ! !SystemWindow methodsFor: 'top window' stamp: 'sbw 3/29/2003 10:01'! passivate "Make me unable to respond to mouse and keyboard" self setStripeColorsFrom: self paneColorToUse. model modelSleep. "Control boxes remain active, except in novice mode" self submorphsDo: [:m | m == labelArea ifFalse: [m lock]]. labelArea ifNil: ["i.e. label area is nil, so we're titleless" self adjustBorderUponDeactivationWhenLabeless] ifNotNil: [labelArea submorphsDo: [:m | (m == closeBox or: [m == collapseBox]) ifTrue: [Preferences noviceMode ifTrue: [m lock]] ifFalse: [m lock]]]. self world ifNotNil: ["clean damage now, so dont merge this rect with new top window" self world == World ifTrue: [self world displayWorld]]! ! !SystemWindow methodsFor: 'panes' stamp: 'sbw 3/29/2003 10:01'! restoreDefaultPaneColor "Useful when changing from monochrome to color display" self setStripeColorsFrom: self paneColor. Preferences alternativeWindowLook ifFalse: [paneMorphs do: [:p | p color: self paneColor]]! ! !SystemWindow methodsFor: 'panes' stamp: 'sbw 3/29/2003 10:02'! updatePaneColors "Useful when changing from monochrome to color display" self setStripeColorsFrom: self paneColorToUse. Preferences alternativeWindowLook ifFalse: [paneMorphs do: [:p | p color: self paneColorToUse]]! ! !SystemWindow methodsFor: 'drawing' stamp: 'sbw 3/14/2003 21:25'! wantsRoundedCorners self ignoreRoundedCorners ifTrue: [^false]. ^ Preferences roundedWindowCorners or: [super wantsRoundedCorners]! ! !SystemWindow methodsFor: 'menu' stamp: 'sbw 4/5/2003 06:49'! addCustomMenuItems: aCustomMenu hand: aHandMorph super addCustomMenuItems: aCustomMenu hand: aHandMorph. "template..." aCustomMenu addLine. aCustomMenu add: 'edit label...' action: #relabel. self addSkinMenuItemsTo: aCustomMenu. ! ! !SystemWindow methodsFor: 'menu' stamp: 'sbw 3/29/2003 10:02'! setWindowColor: incomingColor | existingColor aColor | incomingColor ifNil: [^ self]. "it happens" aColor _ incomingColor asNontranslucentColor. (aColor = ColorPickerMorph perniciousBorderColor or: [aColor = Color black]) ifTrue: [^ self]. existingColor _ self paneColorToUse. existingColor ifNil: [^ self beep]. Preferences alternativeWindowLook ifFalse: [(self allMorphs copyWithout: self) do: [:aMorph | ((aMorph isKindOf: PluggableButtonMorph) and: [aMorph offColor = existingColor]) ifTrue: [aMorph onColor: aColor darker offColor: aColor]. aMorph color = existingColor ifTrue: [aMorph color: aColor]]]. self paneColor: aColor. self setStripeColorsFrom: aColor. self changed! ! !SystemWindow methodsFor: 'layout' stamp: 'sbw 3/8/2003 18:06'! putLabelItemsInLabelArea "Put label items into the label area, if there is one" self hasSkinAssigned ifTrue: [^self putLabelItemsInLabelAreaFromSkin]. labelArea ifNotNil: [stripes ifNotNil: [stripes do: [:stripe | labelArea addMorph: stripe]]. closeBox ifNotNil: [labelArea addMorph: closeBox]. menuBox ifNotNil: [labelArea addMorph: menuBox]. collapseBox ifNotNil: [labelArea addMorph: collapseBox]. label ifNotNil: [labelArea addMorph: label]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 20:01'! addSkinMenuItemsTo: aMenu self hasSkinAssigned ifTrue: [(ImportedSkin current isValid and: [ImportedSkin current ~= self assignedSkin]) ifTrue: [aMenu add: 'apply current skin (' , ImportedSkin current folderName , ')' action: #applyCurrentSkin]. ImportedSkin current ~= self assignedSkin ifTrue: [aMenu add: 'make ' , self assignedSkin folderName , ' the "current" skin' action: #makeAssignedSkinBeCurrent]. aMenu add: 'switch skin...' action: #switchSkin. aMenu add: 'remove skin (' , self assignedSkin folderName , ') from this window' action: #removeSkin. aMenu add: 'load skin defined image as desktop' action: #loadSkinDefinedImageAsDesktop] ifFalse: [aMenu add: 'select skin...' action: #assignSkin. ImportedSkin current isValid ifTrue: [aMenu add: 'apply current skin (' , ImportedSkin current folderName , ')' action: #applyCurrentSkin]]. aMenu addLine. aMenu add: 'preload all skins from folder' action: #preloadAllSkins. ImportedSkin current isValid ifTrue: [aMenu add: 'remove all skins from windows' action: #clearAllSkins]. Preferences automaticApplicationOfSkins ifTrue: [aMenu add: 'disable auto-skin preference' action: #toggleAutoSkinPreference] ifFalse: [aMenu add: 'enable auto-skin preference' action: #toggleAutoSkinPreference]. aMenu add: 'report a Skins II bug...' action: #reportABug! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/3/2003 21:27'! applyCurrentSkin | skin | skin _ ImportedSkin current. skin isNil ifFalse: [skin isValid ifTrue: [self assignSkin: skin. self applySkin]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/4/2003 20:44'! applySkin | skin | skin _ self assignedSkin. skin isValid ifTrue: [ skin applySkinToSystemWindow: self. self clearSkinInTransition]. ^ skin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/3/2003 21:28'! assignSkin | skin | skin _ ImportedIceWMSkin getSkinFromList. skin isNil ifFalse: [skin isValid ifTrue: [self assignSkin: skin. self applySkin]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/15/2003 12:30'! assignSkin: aSkin self setSkinInTransition. self setProperty: #skin toValue: aSkin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/8/2003 11:12'! assignedSkin ^ self valueOfProperty: #skin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/2/2003 18:44'! automaticallyApplyCurrentSkin Preferences automaticApplicationOfSkins ifTrue: [self hasSkinAssigned ifFalse: [self applyCurrentSkin]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 16:03'! borderMorphNames ^#(#borderBottomMorph #borderBottomLeftMorph #borderBottomRightMorph #borderLeftMorph #borderRightMorph #borderTopMorph #borderTopLeftMorph #borderTopRightMorph ).! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 18:05'! checkTitleBarControlForms | morph list form | list _ #(#skinnedCollapseButton #skinnedExpandButton #skinnedCloseButton #skinnedMenuButton ). list do: [:symbol | morph _ labelArea submorphNamed: symbol. morph isNil ifTrue: [symbol = #skinnedCollapseButton ifTrue: [collapseBox visible ifTrue: [form _ self isActive ifTrue: [self assignedSkin formAltActiveCollapse] ifFalse: [self assignedSkin formAltInactiveCollapse]. form isNil ifFalse: [collapseBox labelGraphic: form]]]. symbol = #skinnedExpandButton ifTrue: [expandBox visible ifTrue: [form _ self isActive ifTrue: [self assignedSkin formAltActiveExpand] ifFalse: [self assignedSkin formAltInactiveExpand]. form isNil ifFalse: [expandBox labelGraphic: form]]]. symbol = #skinnedCloseButton ifTrue: [closeBox visible ifTrue: [form _ self isActive ifTrue: [self assignedSkin formAltActiveClose] ifFalse: [self assignedSkin formAltInactiveClose]. form isNil ifFalse: [closeBox labelGraphic: form]]]. symbol = #skinnedMenuButton ifTrue: [menuBox visible ifTrue: [form _ self isActive ifTrue: [self assignedSkin formAltActiveMenu] ifFalse: [self assignedSkin formAltInactiveMenu]. form isNil ifFalse: [menuBox labelGraphic: form]]]] ifFalse: [morph visible ifTrue: [morph showGraphic: self isActive]]]! ]style[(25 3 11 9 4 3 86 3 4 8 8 6 5 3 9 16 6 5 5 20 6 3 22 16 11 33 4 31 4 59 4 71 11 39 6 3 20 16 9 33 4 31 4 57 4 69 9 39 6 3 19 16 8 33 4 31 4 56 4 68 8 39 6 3 18 16 7 33 4 31 4 55 4 67 7 48 5 24 5 14 4 12)f1b,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1cred;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1c000148000,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000148000,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000148000,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000148000,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 19:32'! clearAllSkins (self confirm: 'Warning: This will unload all skins from your image. Are you sure?') ifTrue: [ ImportedSkin clear]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/15/2003 11:53'! clearSkinInTransition self removeProperty: #skinInTransition! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/4/2003 20:20'! collapseOrExpandUsingSkin "Collapse or expand the window, depending on existing state" | cf morph | isCollapsed ifTrue: ["Expand -- restore panes to morphics structure" isCollapsed _ false. self activate. "Bring to front first" Preferences collapseWindowsInPlace ifTrue: [fullFrame _ fullFrame align: fullFrame topLeft with: self getBoundsWithFlex topLeft] ifFalse: [collapsedFrame _ self getBoundsWithFlex]. collapseBox ifNotNil: [collapseBox setBalloonText: 'collapse this window'. morph _ labelArea submorphNamed: #skinnedCollapseButton. morph ifNotNil: [morph useAlternateGraphics: false; setBalloonText: collapseBox balloonText]]. self setBoundsWithFlex: fullFrame. paneMorphs reverseDo: [:m | self addMorph: m unlock. self world startSteppingSubmorphsOf: m]] ifFalse: ["Collapse -- remove panes from morphics structure" isCollapsed _ true. fullFrame _ self getBoundsWithFlex. "First save latest fullFrame" paneMorphs do: [:m | m delete; releaseCachedState]. model modelSleep. cf _ self getCollapsedFrame. (collapsedFrame isNil and: [Preferences collapseWindowsInPlace not]) ifTrue: [collapsedFrame _ cf]. self setBoundsWithFlex: cf. collapseBox ifNotNil: [collapseBox setBalloonText: 'expand this window'. morph _ labelArea submorphNamed: #skinnedCollapseButton. morph ifNotNil: [morph useAlternateGraphics: true; setBalloonText: collapseBox balloonText]]. expandBox ifNotNil: [expandBox setBalloonText: 'expand to full screen'. morph _ labelArea submorphNamed: #skinnedExpandButton. morph ifNotNil: [morph setBalloonText: expandBox balloonText]]]. self layoutChanged. self setStripeColorsFromSkin. self setFramesForLabelFromSkin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:25'! createBottomBorderMorph | morph form frame | morph _ self submorphNamed: #borderBottomMorph. morph isNil ifTrue: [form _ Form extent: 1 @ self assignedSkin borderSizeY depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderBottomMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:26'! createBottomLeftBorderMorph | morph form frame | morph _ self submorphNamed: #borderBottomLeftMorph. morph isNil ifTrue: [form _ Form extent: self assignedSkin cornerSizeX @ self assignedSkin cornerSizeY depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderBottomLeftMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:26'! createBottomRightBorderMorph | morph form frame | morph _ self submorphNamed: #borderBottomRightMorph. morph isNil ifTrue: [form _ Form extent: self assignedSkin cornerSizeX @ self assignedSkin cornerSizeY depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderBottomRightMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:26'! createLeftBorderMorph | morph form frame | morph _ self submorphNamed: #borderLeftMorph. morph isNil ifTrue: [form _ Form extent: self assignedSkin borderSizeX @ 1 depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderLeftMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:26'! createRightBorderMorph | morph form frame | morph _ self submorphNamed: #borderRightMorph. morph isNil ifTrue: [form _ Form extent: self assignedSkin borderSizeX @ 1 depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderRightMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 15:38'! createSkinBorders self assignedSkin hasCorners ifFalse: [^nil]. self createBottomBorderMorph. self createBottomLeftBorderMorph. self createBottomRightBorderMorph. self createLeftBorderMorph. self createRightBorderMorph. self createTopBorderMorph. self createTopLeftBorderMorph. self createTopRightBorderMorph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/20/2003 04:54'! createTitleBarSketchMorph | form morph frame | form _ Form extent: labelArea extent depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #titleBarSketchMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 1; rightOffset: 0; bottomFraction: 1; bottomOffset: 0. morph layoutFrame: frame. labelArea addMorphBack: morph. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:27'! createTopBorderMorph | morph form frame | morph _ self submorphNamed: #borderTopMorph. morph isNil ifTrue: [form _ Form extent: 1 @ self assignedSkin borderSizeY depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderTopMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:27'! createTopLeftBorderMorph | morph form frame | morph _ self submorphNamed: #borderTopLeftMorph. morph isNil ifTrue: [form _ Form extent: self assignedSkin cornerSizeX @ self assignedSkin cornerSizeY depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderTopLeftMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 18:27'! createTopRightBorderMorph | morph form frame | morph _ self submorphNamed: #borderTopRightMorph. morph isNil ifTrue: [form _ Form extent: self assignedSkin cornerSizeX @ self assignedSkin cornerSizeY depth: Display depth. form fillColor: Color transparent. morph _ SketchMorph withForm: form. morph name: #borderTopRightMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 0; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/15/2003 12:18'! hasSkinAssigned ^ self hasProperty: #skin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/15/2003 11:46'! ignoreRoundedCorners ^self hasSkinAssigned ! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 15:37'! loadSkinDefinedImageAsDesktop self assignedSkin hasBackgroundImage ifTrue: [self assignedSkin applyBackgroundImageFromFile] ifFalse: [self inform: 'No image availble.']! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/10/2003 20:13'! makeAssignedSkinBeCurrent self assignedSkin makeSkinCurrent! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/8/2003 22:22'! originalLabelHeight ^label height + 1 max: (collapseBox ifNil: [10] ifNotNil: [collapseBox height])! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 08:40'! preloadAllSkins ImportedIceWMSkin loadSkins! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/8/2003 18:09'! putLabelItemsInLabelAreaFromSkin ! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/15/2003 22:43'! removeSkin self setSkinInTransition. self unApplySkin. self removeProperty: #skin. self clearSkinInTransition. ! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 08:54'! reportABug | skin | skin _ self assignedSkin. skin isNil ifTrue: [skin _ ImportedSkin current]. skin isNil ifTrue: [ImportedSkin reportABugForSkin: nil] ifFalse: [skin reportABug]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 13:02'! resetListMorphBackgrounds (self allMorphs select: [:m | m isKindOf: PluggableListMorph]) do: [:lm | lm color: Color transparent. lm scroller submorphs do: [:sm | sm color: Color black]. lm highlightSelectionNoSkin]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 19:46'! resetTextMorphBackgrounds (self allMorphs select: [:m | m isKindOf: PluggableTextMorph]) do: [:m | m color: Color transparent]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/4/2003 20:30'! restoreBorderColor | original | (self hasProperty: #savedBorderColor) ifFalse: [^ nil]. original _ self valueOfProperty: #savedBorderColor. original isNil ifFalse: [self borderColor: original]. self removeProperty: #savedBorderColor! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 16:03'! restoreBorderWidth | original sm | self borderMorphNames do: [:each | sm _ self submorphNamed: each. sm isNil ifFalse: [sm delete]]. (self hasProperty: #savedBorderWidth) ifFalse: [^ nil]. original _ self valueOfProperty: #savedBorderWidth. original isNil ifFalse: [self borderWidth: original]. self removeProperty: #savedBorderWidth! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/9/2003 12:43'! restoreButtonMorphs | strMorph dict savedBtns btn savedOnColor savedOffColor | (self hasProperty: #swappedButtons) ifFalse: [^ self]. dict _ self valueOfProperty: #swappedButtons. dict isNil ifTrue: [^ self]. (dict at: 'panes') do: [:m | m color: Color transparent]. savedBtns _ dict at: 'btns'. 1 to: savedBtns size do: [:index | btn _ savedBtns at: index. savedOnColor _ (dict at: 'onColors') at: index. savedOffColor _ (dict at: 'offColors') at: index. btn isSimpleButtonMorph ifTrue: [btn oldColor: savedOnColor. btn color: savedOffColor]. btn isPluggableButtonMorph ifTrue: [btn onColor: savedOnColor offColor: savedOffColor]. btn changed. strMorph _ btn allMorphs detect: [:sm | sm isKindOf: StringMorph] ifNone: []. strMorph isNil ifFalse: [strMorph color: Color black]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 09:45'! restoreOriginalLabelAreaColor | original | (self hasProperty: #originalLabelAreaColor) ifFalse: [^ nil]. original _ self valueOfProperty: #originalLabelAreaColor. original isNil ifTrue: [^ nil]. labelArea color: original! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 16:20'! restoreOriginalLabelAreaLayoutframe | original | (self hasProperty: #originalLabelAreaLayoutFrame) ifFalse: [^ nil]. original _ self valueOfProperty: #originalLabelAreaLayoutFrame. original isNil ifTrue: [^ nil]. labelArea layoutFrame: original. labelArea layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 17:25'! restoreOriginalLabelLayoutframe | original | (self hasProperty: #originalLabelLayoutFrame) ifFalse: [^ nil]. original _ self valueOfProperty: #originalLabelLayoutFrame. original isNil ifTrue: [^ nil]. label layoutFrame: original. label layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 20:10'! restoreOriginalStripeColors | originals dict each sm | sm _ self titleBarSketchMorph. sm isNil ifFalse: [sm delete]. self removeProperty: #titleBarSketchMorph. (self hasProperty: #originalStripeColors) ifFalse: [^ self setStripeColorsFrom: self paneColorToUse]. originals _ self valueOfProperty: #originalStripeColors. originals isNil ifTrue: [^ self setStripeColorsFrom: self paneColorToUse]. originals size = stripes size ifFalse: [^ self setStripeColorsFrom: self paneColorToUse]. 1 to: stripes size do: [:index | dict _ originals at: index. each _ stripes at: index. each color: (dict at: 'color'). each borderWidth: (dict at: 'borderWidth'). each borderColor: (dict at: 'borderColor')]. self setStripeColorsFrom: self paneColorToUse! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 20:14'! restoreOriginalWindowColor | original | (self hasProperty: #originalWindowColor) ifFalse: [^ nil]. original _ self valueOfProperty: #originalWindowColor. original isNil ifTrue: [^ nil]. self color: original. (self hasProperty: #originalPaneColor) ifFalse: [^ nil]. original _ self valueOfProperty: #originalPaneColor. original isNil ifTrue: [^ nil]. self setWindowColor: original! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 09:41'! restoreSubmorphsThatAreTransparent | list | (self hasProperty: #transparentMorphIDs) ifFalse: [^ nil]. list _ self valueOfProperty: #transparentMorphIDs. list isNil ifTrue: [^ nil]. submorphs do: [:m | (list includes: m identityHash) ifTrue: [ m color: Color transparent]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/5/2003 22:13'! restoreTitleBarCloseButton | morph | morph _ labelArea submorphNamed: #skinnedCloseButton. morph isNil ifTrue: [closeBox == nil ifFalse: [closeBox labelGraphic: SystemWindow closeBoxImage]] ifFalse: [morph delete]. closeBox == nil ifFalse: [closeBox visible ifFalse: [closeBox show]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/5/2003 22:14'! restoreTitleBarCollapseButton | morph | morph _ labelArea submorphNamed: #skinnedCollapseButton. morph isNil ifTrue: [collapseBox == nil ifFalse: [collapseBox labelGraphic: SystemWindow collapseBoxImage]] ifFalse: [morph delete]. collapseBox == nil ifFalse: [collapseBox visible ifFalse: [collapseBox show]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/5/2003 22:15'! restoreTitleBarExpandButton | morph | morph _ labelArea submorphNamed: #skinnedExpandButton. morph isNil ifTrue: [expandBox == nil ifFalse: [expandBox labelGraphic: (ScriptingSystem formAtKey: 'expandBox')]] ifFalse: [morph delete]. expandBox == nil ifFalse: [expandBox visible ifFalse: [expandBox show]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/5/2003 22:16'! restoreTitleBarMenuButton | morph | morph _ labelArea submorphNamed: #skinnedMenuButton. morph isNil ifTrue: [menuBox == nil ifFalse: [menuBox labelGraphic: (ScriptingSystem formAtKey: 'TinyMenu')]] ifFalse: [morph delete]. menuBox == nil ifFalse: [menuBox visible ifFalse: [menuBox show]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 20:06'! restoreTitleBarWidgets self restoreTitleBarCollapseButton. self restoreTitleBarExpandButton. self restoreTitleBarMenuButton. self restoreTitleBarCloseButton! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 20:13'! restoreUnskinnedInformation self restoreBorderWidth. self restoreBorderColor. labelWidgetAllowance _ 75. self restoreOriginalLabelLayoutframe. self restoreOriginalLabelAreaLayoutframe. self restoreTitleBarWidgets. self restoreSubmorphsThatAreTransparent. self restoreOriginalLabelAreaColor. self restoreOriginalStripeColors. self restoreOriginalWindowColor. self getRawLabel color: Color black. self resetListMorphBackgrounds. self resetTextMorphBackgrounds. self restoreButtonMorphs! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/4/2003 20:29'! saveBorderColor self setProperty: #savedBorderColor toValue: self borderColor! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 09:29'! saveBorderWidth self setProperty: #savedBorderWidth toValue: self borderWidth. ! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 09:45'! saveOriginalLabelAreaColor self setProperty: #originalLabelAreaColor toValue: labelArea color! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 16:18'! saveOriginalLabelAreaLayoutFrame self setProperty: #originalLabelAreaLayoutFrame toValue: labelArea layoutFrame copy! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 17:24'! saveOriginalLabelLayoutFrame self setProperty: #originalLabelLayoutFrame toValue: label layoutFrame copy! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 09:50'! saveOriginalStripeColors | colors dict each | colors _ Array new: stripes size. 1 to: stripes size do: [:index | dict _ Dictionary new. each _ stripes at: index. dict at: 'color' put: each color. dict at: 'borderWidth' put: each borderWidth. dict at: 'borderColor' put: each borderColor. colors at: index put: dict]. self setProperty: #originalStripeColors toValue: colors! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 20:04'! saveOriginalWindowColor self setProperty: #originalWindowColor toValue: self color. self setProperty: #originalPaneColor toValue: self paneColorToUse.! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/16/2003 09:36'! saveSubmorphsThatAreTransparent | list | list _ (submorphs select: [:m | m color isTransparent]) collect: [:each | each identityHash]. self setProperty: #transparentMorphIDs toValue: list! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 21:40'! saveUnskinnedInformation self saveBorderWidth. self saveBorderColor. self saveSubmorphsThatAreTransparent. self saveOriginalWindowColor. self saveOriginalLabelAreaColor. self saveOriginalLabelAreaLayoutFrame. self saveOriginalLabelLayoutFrame. self saveOriginalStripeColors. ! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:52'! setBottomBorder | morph form frame bx by cw wide | morph _ self submorphNamed: #borderBottomMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. cw _ self assignedSkin cornerSizeX. bx _ self assignedSkin borderSizeX. by _ self assignedSkin borderSizeY. wide _ self width - (2 * cw) + (2 * bx). form _ self assignedSkin bottomBorderOfWidth: wide active: self isActive. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. frame topFraction: 1. frame topOffset: 0. frame bottomFraction: 1. frame bottomOffset: form height negated + (2 * by). frame leftFraction: 0. frame rightFraction: 1. frame leftOffset: 0. frame rightOffset: 0. self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/4/2003 19:53'! setExtentAccountForSkin: aPoint | newExtent | newExtent _ self isCollapsed ifTrue: [aPoint] ifFalse: [aPoint max: self minimumExtent]. newExtent = self extent ifTrue: [^ self]. isCollapsed ifTrue: [super extent: newExtent x @ self labelHeight] ifFalse: [super extent: newExtent]. isCollapsed ifTrue: [collapsedFrame _ self bounds] ifFalse: [fullFrame _ self bounds]. labelArea ifNotNil: [self setStripeColorsFromSkin]. label ifNotNil: [self setFramesForLabelFromSkin]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 23:38'! setFramesForLabelAreaFromSkin | frame | labelArea == nil ifTrue: [^ nil]. frame _ labelArea layoutFrame. frame leftFraction: 0; leftOffset: 0; rightFraction: 1; rightOffset: 0; topOffset: self labelHeight negated; bottomFraction: 0; bottomOffset: 0. labelArea vResizing: #spaceFill; cellPositioning: #topLeft. self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 09:45'! setFramesForLabelFromSkin | frame tgtWidth offset form | frame _ LayoutFrame new. self assignedSkin titleBarCentered ifTrue: [tgtWidth _ labelArea width - self assignedSkin widthOfControls - label width. frame leftFraction: 0; leftOffset: self assignedSkin widthOfLeftControls + (tgtWidth // 2) + 3] ifFalse: [form _ self assignedSkin formAP. offset _ form isNil ifTrue: [6] ifFalse: [form width]. frame leftFraction: 0; leftOffset: self assignedSkin widthOfLeftControls + offset + 2]. offset _ self labelHeight - label height // 2 - 1. frame rightFraction: 1; rightOffset: 0; topFraction: 0; topOffset: offset; bottomFraction: 1; bottomOffset: 0. label layoutFrame: frame. label layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/20/2003 04:42'! setFramesFromSkin self setFramesForLabelAreaFromSkin. self setFramesForLabelFromSkin. ! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 19:29'! setInitialColorsState | colorToUse | submorphs do: [:m | m color = Color transparent ifTrue: [m color: self color]]. self color: Color transparent. colorToUse _ self assignedSkin colorScrollBar. colorToUse isNil ifFalse: [self setWindowColor: colorToUse]. labelArea color: Color transparent. stripes do: [:each | each color: Color transparent. each borderWidth: 0. each borderColor: nil]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/5/2003 19:35'! setLabelFromSkin: aString labelString _ aString. label ifNil: [^ self]. label contents: aString. self labelWidgetAllowance. "Sets it if not already" self isCollapsed ifTrue: [self extent: label width + labelWidgetAllowance @ self labelHeight] ifFalse: [label fitContents; setWidth: (label width min: bounds width - labelWidgetAllowance). label align: label bounds topCenter with: bounds topCenter + (0 @ borderWidth). collapsedFrame ifNotNil: [collapsedFrame _ collapsedFrame withWidth: label width + labelWidgetAllowance]]. self setFramesForLabelFromSkin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:51'! setLeftBorder | morph form frame bx hgt ch by lh | morph _ self submorphNamed: #borderLeftMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. ch _ self assignedSkin cornerSizeY. by _ self assignedSkin borderSizeY. hgt _ self height - (2 * ch) + (2 * by). form _ self assignedSkin leftBorderOfHeight: hgt active: self isActive. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. bx _ self assignedSkin borderSizeX. lh _ self labelHeight. frame topOffset: hgt + (2 * (lh + by - ch) negated). frame leftOffset: form width - (2 * bx). self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:51'! setLeftBottomBorder | morph form frame bx by | morph _ self submorphNamed: #borderBottomLeftMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. form _ self isActive ifTrue: [self assignedSkin formFrameBLA] ifFalse: [self assignedSkin formFrameBLI]. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. bx _ self assignedSkin borderSizeX. by _ self assignedSkin borderSizeY. frame topFraction: 1. frame topOffset: 0. frame bottomFraction: 1. frame bottomOffset: form height negated + (2 * by). frame leftOffset: form width - (2 * bx). self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:51'! setLeftTopBorder | morph form frame lh bx by | morph _ self submorphNamed: #borderTopLeftMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. form _ self isActive ifTrue: [self assignedSkin formFrameTLA] ifFalse: [self assignedSkin formFrameTLI]. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. lh _ self labelHeight. bx _ self assignedSkin borderSizeX. by _ self assignedSkin borderSizeY. frame topOffset: form height - (2 * (lh + by)). frame leftOffset: form width - (2 * bx). self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/7/2003 19:08'! setListMorphBackgrounds | listColorChoice textColorChoice | Preferences skinListBoxes ifFalse: [^self]. listColorChoice _ self skinToUse colorListBox. listColorChoice isColor ifFalse: [^ self]. textColorChoice _ self skinToUse colorListBoxText. textColorChoice isColor ifFalse: [^ self]. (self allMorphs select: [:m | m isKindOf: PluggableListMorph]) do: [:lm | lm setColorsFromSkin]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:51'! setRightBorder | morph form frame bx hgt ch by lh | morph _ self submorphNamed: #borderRightMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. ch _ self assignedSkin cornerSizeY. by _ self assignedSkin borderSizeY. hgt _ self height - (2 * ch) + (2 * by). form _ self assignedSkin rightBorderOfHeight: hgt active: self isActive. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. bx _ self assignedSkin borderSizeX. lh _ self labelHeight. frame topOffset: hgt + (2 * (lh + by - ch) negated). frame leftFraction: 1. frame rightFraction: 1. frame leftOffset: bx. frame rightOffset: 0. self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:51'! setRightBottomBorder | morph form frame bx by | morph _ self submorphNamed: #borderBottomRightMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. form _ self isActive ifTrue: [self assignedSkin formFrameBRA] ifFalse: [self assignedSkin formFrameBRI]. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. bx _ self assignedSkin borderSizeX. by _ self assignedSkin borderSizeY. frame topFraction: 1. frame topOffset: 0. frame bottomFraction: 1. frame bottomOffset: form height negated + (2 * by). frame leftFraction: 1. frame rightFraction: 1. frame leftOffset: form width negated + (2 * bx). self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:51'! setRightTopBorder | morph form frame lh bx by | morph _ self submorphNamed: #borderTopRightMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. form _ self isActive ifTrue: [self assignedSkin formFrameTRA] ifFalse: [self assignedSkin formFrameTRI]. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. lh _ self labelHeight. bx _ self assignedSkin borderSizeX. by _ self assignedSkin borderSizeY. frame topOffset: form height - (2 * (lh + by)). frame leftFraction: 1. frame rightFraction: 1. frame leftOffset: form width negated + (2 * bx). self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/4/2003 20:04'! setSkinBorders self assignedSkin hasCorners ifFalse: [^ self setSkinBordersNoFrame]. self setLeftTopBorder. self setLeftBorder. self setLeftBottomBorder. self setRightTopBorder. self setRightBorder. self setRightBottomBorder. self setTopBorder. self setBottomBorder! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/5/2003 19:41'! setSkinBordersNoFrame | max colorToUse | self assignedSkin hasBorders ifFalse: [^ nil]. max _ self assignedSkin borderSizeX max: self assignedSkin borderSizeY. max > 0 ifTrue: [self borderWidth: max]. self isCollapsed ifTrue: [^self borderWidth: 0]. colorToUse _ self isActive ifTrue: [self assignedSkin colorActiveBorder] ifFalse: [self assignedSkin colorNormalBorder]. colorToUse isNil ifFalse: [self borderColor: colorToUse]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/15/2003 11:51'! setSkinInTransition self setProperty: #skinInTransition toValue: true! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 15:43'! setStripeColorsFromSkin | form sm tgtWidth frWidth | frWidth _ self isCollapsed ifTrue: [labelArea width] ifFalse: [fullFrame width - (2 * self borderWidth)]. tgtWidth _ frWidth - self assignedSkin widthOfControls. form _ self isActive ifTrue: [self assignedSkin activeTitleBarFormToFit: tgtWidth titleStringMorph: label] ifFalse: [self assignedSkin inActiveTitleBarFormToFit: tgtWidth titleStringMorph: label]. sm _ self titleBarSketchMorph. sm layoutFrame leftOffset: self assignedSkin widthOfLeftControls. sm layoutFrame rightOffset: self assignedSkin widthOfRightControls negated. sm newForm: form. labelArea layoutChanged. self isActive ifTrue: [label color: self assignedSkin colorActiveTitleBarText] ifFalse: [label color: self assignedSkin colorNormalTitleBarText]. self checkTitleBarControlForms. self setSkinBorders. self setTextMorphColors! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/9/2003 18:24'! setSwappedButtonColors | selectedOnColor selectedOffColor dict btns btn selectedTextColor | Preferences skinButtons ifFalse: [^ self]. (self hasProperty: #swappedButtons) ifFalse: [^ self]. dict _ self valueOfProperty: #swappedButtons. dict isNil ifTrue: [^ self]. selectedOnColor _ self assignedSkin colorActiveButton. selectedOffColor _ self assignedSkin colorNormalButton. (selectedOnColor isNil or: [selectedOffColor isNil]) ifTrue: [^ self]. btns _ dict at: 'btns'. 1 to: btns size do: [:index | btn _ btns at: index. btn isSimpleButtonMorph ifTrue: [btn color: selectedOffColor. btn oldColor: selectedOnColor. selectedTextColor _ self assignedSkin colorNormalButtonText. selectedTextColor isNil ifFalse: [btn setLabelToColor: selectedTextColor]. btn changed]. btn isPluggableButtonMorph ifTrue: [btn onColor: selectedOnColor offColor: selectedOffColor; update: nil]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/8/2003 06:54'! setTextMorphBackgrounds | colorChoice | Preferences skinTextPanes ifFalse: [^ self]. colorChoice _ self assignedSkin colorInput. colorChoice isNil ifTrue: [colorChoice _ Color white]. (self allMorphs select: [:m | m isKindOf: PluggableTextMorph]) do: [:m | m color: colorChoice]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 23:07'! setTextMorphColors | selectionColorChoice insertionColorChoice skinToUse | (Preferences skinTextPanes and: [Preferences skinSetsHighlightColor]) ifFalse: [^ self]. skinToUse _ self assignedSkin. selectionColorChoice _ skinToUse colorInputSelectionText. insertionColorChoice _ skinToUse colorInputSelection. selectionColorChoice isNil ifTrue: [^ skinToUse restoreOriginalTextPaneColors]. insertionColorChoice isNil ifTrue: [^ skinToUse restoreOriginalTextPaneColors]. Preferences textHighlightColor: selectionColorChoice. Preferences insertionPointColor: insertionColorChoice! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:50'! setTopBorder | morph form frame bx by lh cw wide | morph _ self submorphNamed: #borderTopMorph. morph isNil ifTrue: [^ nil]. self toggleBorderAsRequired: morph. cw _ self assignedSkin cornerSizeX. bx _ self assignedSkin borderSizeX. by _ self assignedSkin borderSizeY. lh _ self labelHeight. wide _ self width - (2 * cw) + (2 * bx). form _ self assignedSkin topBorderOfWidth: wide active: self isActive. form isNil ifTrue: [^ nil]. morph newForm: form. frame _ morph layoutFrame. bx _ self assignedSkin borderSizeX. lh _ self labelHeight. frame topOffset: form height - (2 * (lh + by)). frame leftFraction: 0. frame rightFraction: 1. frame leftOffset: 0. frame rightOffset: 0. self layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/15/2003 11:50'! skinInTransition ^ self hasProperty: #skinInTransition! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 11:42'! skinToUse ^self assignedSkin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/9/2003 18:11'! swapButtonMorphs | btns list onColors offColors dict selectedPanelColor theButton | Preferences skinButtons ifFalse: [^ self]. selectedPanelColor _ self assignedSkin colorDialog. selectedPanelColor isNil ifTrue: [selectedPanelColor _ self assignedSkin colorNormalButton]. selectedPanelColor isNil ifTrue: [^ self]. btns _ self allMorphs select: [:m | m isPluggableButtonMorph or: [m isSimpleButtonMorph]]. list _ (btns collect: [:m | m topOwnerOfKind: AlignmentMorph]) asSet. list _ (btns collect: [:m | m owner]) asSet. onColors _ Array new: btns size. offColors _ Array new: btns size. 1 to: btns size do: [:index | theButton _ btns at: index. theButton isSimpleButtonMorph ifTrue: [onColors at: index put: theButton oldColor. offColors at: index put: theButton color]. theButton isPluggableButtonMorph ifTrue: [onColors at: index put: theButton onColor. offColors at: index put: theButton offColor]]. dict _ Dictionary new. dict at: 'btns' put: btns; at: 'panes' put: list asArray; at: 'onColors' put: onColors; at: 'offColors' put: offColors. list do: [:m | m color: selectedPanelColor]. self setProperty: #swappedButtons toValue: dict. self setSwappedButtonColors. ^ dict! ]style[(16 3 63 4 11 27 4 4 18 3 4 28 18 18 18 3 4 35 18 20 4 4 4 3 4 24 3 2 1 61 4 4 4 15 3 2 1 17 14 11 4 4 4 15 3 2 1 17 8 3 5 6 4 8 9 3 5 6 4 8 1 7 4 13 7 6 9 3 4 5 5 5 9 34 8 5 5 6 9 16 9 5 5 6 9 12 9 37 8 5 5 6 9 15 9 5 5 6 9 14 4 3 10 7 4 5 6 6 4 9 7 6 4 17 10 6 8 9 11 6 9 3 4 8 3 2 1 8 18 4 4 14 15 10 4 3 4 28 4)f1b,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cred;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cred;,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cred;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1cred;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1c000148000,f1,f1cblue;i,f1,f1cblue;i,f1,f1cred;,f1,f1cblue;i,f1,f1cblue;i,f1,f1cmagenta;,f1,f1c000148000,f1,f1cblue;i,f1,f1cmagenta;,f1,f1cblue;i! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 10:19'! swapTitleBarCloseButton | newButton frame aForm iForm | aForm _ self assignedSkin formAClose. aForm isNil ifTrue: [^ self]. closeBox == nil ifFalse: [closeBox visible ifTrue: [closeBox hide]]. iForm _ self assignedSkin formIClose. newButton _ SkinnedIconicButton new. newButton actWhen: #buttonUp; actionSelector: closeBox actionSelector; target: self; setBalloonText: closeBox balloonText; activeGraphic: aForm inactiveGraphic: iForm. frame _ self assignedSkin titleBarWidgetCloseLayoutFrame. newButton layoutFrame: frame. newButton name: #skinnedCloseButton. labelArea addMorph: newButton! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 10:21'! swapTitleBarCollapseButton | newButton frame aForm iForm altAForm altIForm | aForm _ self assignedSkin formAMinimize. aForm isNil ifTrue: [aForm _ self assignedSkin formARestore. aForm isNil ifTrue: [^ nil]]. collapseBox == nil ifFalse: [collapseBox visible ifTrue: [collapseBox hide]]. iForm _ self assignedSkin formIMinimize. iForm isNil ifTrue: [iForm _ self assignedSkin formIRestore]. newButton _ SkinnedIconicButton new. newButton actWhen: #buttonUp; actionSelector: collapseBox actionSelector; target: self; setBalloonText: collapseBox balloonText; activeGraphic: aForm inactiveGraphic: iForm. altAForm _ self assignedSkin formARestore. altIForm _ self assignedSkin formIRestore. altAForm isNil ifFalse: [altIForm isNil ifFalse: [newButton altActiveGraphic: altAForm altInactiveGraphic: altIForm]]. newButton name: #skinnedCollapseButton. labelArea addMorph: newButton. frame _ self assignedSkin titleBarWidgetRestoreLayoutFrame. newButton layoutFrame: frame. labelArea layoutChanged! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 10:21'! swapTitleBarExpandButton | newButton frame aForm iForm | aForm _ self assignedSkin formAMaximum. aForm isNil ifTrue: [^ self]. expandBox == nil ifFalse: [expandBox visible ifTrue: [expandBox hide]]. iForm _ self assignedSkin formIMaximum. newButton _ SkinnedIconicButton new. newButton actWhen: #buttonUp; actionSelector: expandBox actionSelector; target: self; setBalloonText: expandBox balloonText; activeGraphic: aForm inactiveGraphic: iForm. frame _ self assignedSkin titleBarWidgetMaximizeLayoutFrame. newButton layoutFrame: frame. newButton name: #skinnedExpandButton. labelArea addMorph: newButton! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 10:18'! swapTitleBarMenuButton | newButton frame aForm iForm | aForm _ self assignedSkin formAMenu. aForm isNil ifTrue: [^ self]. menuBox == nil ifFalse: [menuBox visible ifTrue: [menuBox hide]]. iForm _ self assignedSkin formIMenu. newButton _ SkinnedIconicButton new. newButton actWhen: #buttonUp; actionSelector: menuBox actionSelector; target: self; setBalloonText: menuBox balloonText; activeGraphic: aForm inactiveGraphic: iForm. frame _ self assignedSkin titleBarWidgetApplicationMenuLayoutFrame. newButton layoutFrame: frame. newButton name: #skinnedMenuButton. labelArea addMorph: newButton! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/12/2003 10:36'! swapTitleBarWidgets self swapTitleBarCollapseButton. self swapTitleBarExpandButton. self swapTitleBarCloseButton. self swapTitleBarMenuButton! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/8/2003 21:44'! switchSkin self removeSkin; assignSkin! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 15:26'! titleBarSketchMorph | morph | labelArea ifNil: [^ nil]. morph _ labelArea submorphNamed: #titleBarSketchMorph. morph isNil ifTrue: [morph _ self createTitleBarSketchMorph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 4/6/2003 13:28'! toggleAutoSkinPreference Preferences automaticApplicationOfSkins ifTrue: [Preferences disable: #automaticApplicationOfSkins] ifFalse: [Preferences enable: #automaticApplicationOfSkins]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/26/2003 14:50'! toggleBorderAsRequired: morph self isCollapsed ifTrue: [morph visible ifTrue: [morph hide]] ifFalse: [morph visible ifFalse: [morph show]]! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 13:11'! topLeftBorderMorph: active | form morph frame | labelArea ifNil: [^ nil]. morph _ labelArea submorphNamed: #topLeftBorderMorph. morph isNil ifTrue: [form _ active ifTrue: [self assignedSkin formFrameTLA] ifFalse: [self assignedSkin formFrameTLI]. morph _ SketchMorph withForm: form. morph name: #topLeftBorderMorph. frame _ LayoutFrame new. frame leftFraction: 0; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 1; rightOffset: 0; bottomFraction: 1; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 13:31'! topRightBorderMorph: active | form morph frame | labelArea ifNil: [^ nil]. morph _ labelArea submorphNamed: #topRightBorderMorph. morph isNil ifTrue: [form _ active ifTrue: [self assignedSkin formFrameTRA] ifFalse: [self assignedSkin formFrameTRI]. morph _ SketchMorph withForm: form. morph name: #topRightBorderMorph. frame _ LayoutFrame new. frame leftFraction: 1; leftOffset: 0; topFraction: 0; topOffset: 0; rightFraction: 1; rightOffset: 0; bottomFraction: 0; bottomOffset: 0. morph layoutFrame: frame. self addMorphBack: morph]. ^ morph! ! !SystemWindow methodsFor: 'skins' stamp: 'sbw 3/18/2003 23:38'! unApplySkin self assignedSkin ifNil: [^nil]. ^ self assignedSkin unApplySkinToSystemWindow: self! ! !PreDebugWindow methodsFor: 'as yet unclassified' stamp: 'sbw 4/6/2003 14:17'! hasSkinAssigned ^false! ! SystemWindow removeSelector: #resetTextPaneColors! SystemWindow removeSelector: #saveOriginalTextPaneColors! IceWMSkinApplicator class removeSelector: #saveOriginalTextPaneColors! Preferences class removeSelector: #addPreferenceForAutomaticApplicationOfSkins! Preferences class removeSelector: #appliedSkinAutomaticallyBecomesCurrent! Preferences class removeSelector: #appliedSkinBecomesCurrent! Morph removeSelector: #PluggableButtonMorph! Morph removeSelector: #isluggableButtonMorph! ImportedSkin class removeSelector: #automaticApplicationOfSkins! ImportedSkin class removeSelector: #dialogsChnageSetName! ImportedSkin initialize! ImportedSkin class removeSelector: #knownBugs! !ImportedSkin class reorganize! ('release notes - DO THIS' updateChangeSetPreambleForSkinImporter) ('release notes - strings' bugs features revisions) ('release notes - change set names' dialogsChangeSetName primaryChangeSetName supportChangeSetName xpmChangeSetName) ('release notes - tools' constructChangeSetPreambleString constructChangeSetPreambleStringFromPieces extractBugs extractContentFrom: extractFeatures extractRevisions headerForRevisionsSection installNewPreambleForChangeSetNamed: latestRevisionTag newPreambleForChangeSetNamed:) ('bug reporting' bugReportSubjectLine buildMessage:forMailOutWithUser: emailAddressForBugReports mailOutBugReport: reportABugForSkin: writeVersionDataOn:) ('as yet unclassified' allSkinForms allSkinParameters clear current current: initialize loadSkinFromList new postLoad removeAllAssignedSkins resetCurrentSkinsDirectory resetSkinForms resetSkinParameters resetSkinVariables startUp) ('preferences' automaticApplicationOfSkinsPreference createPreferences showProgressOnSkinsPreference skinBackgroundPreference skinBalloonHelpPreference skinButtonsPreference skinDialogsPreference skinListBoxesPreference skinMenusPreference skinMenusWithFormsPreference skinSetsHighlightColorPreference skinTextPanesPreference windowSkinAutomaticallyBecomesCurrentPreference) ! ImportedIceWMSkin removeSelector: #createTitleBarWigetAlternates! !ImportedIceWMSkin reorganize! ('diagnostics' drawAllSkinFormsOnDisplay drawBorderFormsOnDisplay drawBorderFormsOnDisplayAt: drawTitleBarFormsOnDisplay drawTitleBarFormsOnDisplayAt: drawWindowWidgetsOnDisplay drawWindowWidgetsOnDisplayAt: skinErrorFound:) ('accessing' folderName folderName: isValid parameters) ('parameters-backgrounds' applyBackgroundColor applyBackgroundImage applyBackgroundImageFromFile applyBackgroundImageFromFileNamed: colorDesktopBackground colorDialog colorInput colorInputSelection colorInputSelectionText colorInputText colorLabel colorLabelText colorToolTip colorToolTipText desktopBackgroundCenter desktopBackgroundImage hasBackgroundImage isDesktopBackgroundCentered) ('parameters-border sizes' borderSizeX borderSizeY colorActiveBorder colorNormalBorder cornerSizeX cornerSizeY dlgBorderSizeX dlgBorderSizeY) ('parameters-button' colorActiveButton colorActiveButtonText colorNormalButton colorNormalButtonText) ('parameters-list box' colorListBox colorListBoxSelection colorListBoxSelectionText colorListBoxText) ('parameters-menu' colorActiveMenuItem colorActiveMenuItemText colorDisabledMenuItemText colorNormalMenu colorNormalMenuItemText hasMenuForm menuBackgroundForm) ('parameters-meta' look skinAuthor skinDescription) ('parameters-scroll bar' colorScrollBar colorScrollBarButton colorScrollBarButtonArrow colorScrollBarSlider) ('title bar forms' activeTitleBarFormToFit:titleStringMorph: addLeftEdgeTitleBarFormTo:active: addLeftOfTitleBarFormTo:titleStringMorph:active: addRightEdgeTitleBarFormTo:active: addRightOfTitleBarFormTo:titleStringMorph:active: createFullWidthBackTitleBarFormToFit:titleStringMorph:active: formAB formAL formAM formAP formAR formAS formAT formIB formIL formIM formIP formIR formIS formIT inActiveTitleBarFormToFit:titleStringMorph: titleBarFormNames titleBarFormToFit:titleStringMorph:active:) ('window frame' bottomBorderOfWidth:active: formFrameBA formFrameBI formFrameBLA formFrameBLI formFrameBRA formFrameBRI formFrameLA formFrameLI formFrameRA formFrameRI formFrameTA formFrameTI formFrameTLA formFrameTLI formFrameTRA formFrameTRI hasBorders hasCorners horizontalBorderOfWidth:usingForm:active: leftBorderOfHeight:active: rightBorderOfHeight:active: topBorderOfWidth:active: verticalBorderOfHeight:usingForm:active: windowFrameNames) ('title bar widgets' createTitleBarWidgetAlternates createTitleBarWidgetAlternatesFrom:baseName: formAClose formAHide formAMaximum formAMenu formAMinimize formARestore formARollDown formARollUp formAltActiveClose formAltActiveCollapse formAltActiveExpand formAltActiveMenu formAltInactiveClose formAltInactiveCollapse formAltInactiveExpand formAltInactiveMenu formIClose formIHide formIMaximum formIMenu formIMinimize formIRestore formIRollDown formIRollUp formMenuFromKey: hasTitleBarWidget: hasTitleBarWidgetApplicationMenu hasTitleBarWidgetClose hasTitleBarWidgetHide hasTitleBarWidgetIconize hasTitleBarWidgetMaximize hasTitleBarWidgetRestore hasTitleBarWidgetRollDown hasTitleBarWidgetRollUpDown idleWidgetFormFor: pressedWidgetFormFor: titleBarWidgetApplicationMenuKey titleBarWidgetApplicationMenuLayoutFrame titleBarWidgetApplicationMenuOnLeft titleBarWidgetApplicationMenuOnRight titleBarWidgetCloseKey titleBarWidgetCloseLayoutFrame titleBarWidgetCloseOnLeft titleBarWidgetCloseOnRight titleBarWidgetHideKey titleBarWidgetIconizeKey titleBarWidgetMaximizeKey titleBarWidgetMaximizeLayoutFrame titleBarWidgetMaximumOnLeft titleBarWidgetMaximumOnRight titleBarWidgetNames titleBarWidgetRestoreLayoutFrame titleBarWidgetRestoreOnLeft titleBarWidgetRestoreOnRight titleBarWidgetRollDownKey titleBarWidgetRollUpDownKey widthOfCloseBox widthOfCollapseBox widthOfControls widthOfExpandBox widthOfLeftControls widthOfMenuBox widthOfRightControls) ('parameters-title bar' colorActiveTitleBarShadow colorActiveTitleBarText colorNormalTitleBar colorNormalTitleBarText showMenuButtonIcon showXButton titleBarCentered titleBarHeight titleBarMaximizeButton titleButtonsLeft titleButtonsRight titleButtonsSupported) ('load definition file' booleanParameterNames integerParameterNames keyIsBooleanParameter: keyIsColorParameter: keyIsFontNameParameter: keyIsIntegerParameter: loadForms loadFrameForms loadMenuBackground loadSkinFrom: loadTitleBarForms loadWindowWidgetForms parameterColorForHexValue: parameterColorForRGBValue: parseDefaultContents: parseLineIntoParameter: sweepThroughAndFixParameterBooleans: sweepThroughAndFixParameterColors: sweepThroughAndFixParameterFontNames: sweepThroughAndFixParameterIntegers:) ('printing' printOn:) ('process' applySkinToSystemWindow: unApplySkinToSystemWindow:) ! "Postscript:" ImportedSkin postLoad!