'From etoys2.1 of 8 August 2007 [latest update: #1653] on 17 September 2007 at 12:39:58 pm'! "Change Set: QuickGuide9-yo Date: 17 September 2007 Author: Yoshiki Ohshima Allow to choose a guide from a menu."! !BooklikeMorph methodsFor: 'page controls' stamp: 'yo 9/17/2007 11:58'! makeDescriptionViewer | descriptionItem font box | font _ Preferences standardMenuFont. descriptionItem := UpdatingStringMorph new. descriptionItem target: self; getSelector: #descriptionReport. descriptionItem useStringFormat. descriptionItem font: font. box _ Morph new. box color: Color transparent. box layoutPolicy: TableLayout new. box vResizing: #rigid. box hResizing: #rigid. box color: (Color r: 0.839 g: 1.0 b: 0.806). box borderWidth: 1. box borderColor: (Color r: 0.645 g: 0.774 b: 0.613). box cellInset: 3. box cellPositioning: #center. box listCentering: #center. box wrapCentering: #center. box width: (font widthOfString: (String new: 15 withAll: $M)). box height: font height. box addMorph: descriptionItem. box on: #mouseUp send: #showDescriptionMenu: to: self. ^ box! ! !BookMorph class methodsFor: 'fileIn/Out' stamp: 'yo 9/17/2007 11:30'! bookFromPagesInSISSFormat: sexp | pages book pagesAndColor color | pagesAndColor _ sexp sissReadObjects. pages _ pagesAndColor copyFrom: 1 to: pagesAndColor size - 1. color _ pagesAndColor last. book _ BookMorph new. pages do: [:p | p setProperty: #transitionSpec toValue: (Array with: 'silence' with: #none with: #none)]. book pageControlsAtTop: false. book hidePageControls. book newPages: pages. book extent: pages first extent + (10@10). book color: color. book goToPage: 1. ^ book. ! ! !QuickGuideHolderMorph methodsFor: 'file in/file out' stamp: 'yo 9/17/2007 11:23'! load | dir m fileName f unzipped zipped | self submorphs size > 0 ifTrue: [^ self]. dir _ (FileDirectory on: (Smalltalk imagePath)) directoryNamed: 'QuickGuides'. fileName _ guideName, '.sexp.data.gz'. (dir fileNames includes: fileName) ifFalse: [ ^ self ]. unzipped _ WriteStream on: ByteArray new. f _ dir readOnlyFileNamed: fileName. zipped _ GZipReadStream on: f. unzipped nextPutAll: zipped contents. m _ BookMorph bookFromPagesInSISSFormat: (DataStream on: (ReadStream on: (unzipped contents))) next. f close. m position: 0@0. self position: 0@0. self extent: m extent. m setNamePropertyTo: guideName. m beSticky. self addMorph: m. ! ! !QuickGuideMorph methodsFor: 'initialization' stamp: 'yo 9/17/2007 11:08'! initialize | newPage | newPagePrototype _ QuickGuideHolderMorph new. newPagePrototype guideName: 'empty'. newPagePrototype setProperty: #transitionSpec toValue: (Array with: 'silence' with: #none with: #none). super initialize. order _ OrderedCollection with: 'index'. newPage _ newPagePrototype veryDeepCopy. newPage guideName: 'index'. self insertPage: newPage pageSize: 100@100 atIndex: 1. self goToPage: 2. self deletePageBasic. self pageControlsAtTop: false. ! ! !QuickGuideMorph methodsFor: 'page controls' stamp: 'yo 9/17/2007 11:55'! shortControlSpecs ^ { #variableSpacer. {#'Halo-Dup'. #handCopyCard. 'Copy card' translated}. #spacer. {#PrevPage. #previousPage. 'Previous page' translated}. #spacer. #showDescription. #spacer. {#NextPage. #nextPage. 'Next page' translated}. #spacer. #variableSpacer. #pageNumber. }! ! !QuickGuideMorph methodsFor: 'menu actions' stamp: 'yo 9/17/2007 12:23'! goToCardNamed: cardName | page | page _ pages detect: [:p | p guideName = cardName] ifNone: [nil]. page ifNotNil: [self goToPage: (self pageNumberOf: page)]. ! ! !QuickGuideMorph methodsFor: 'menu actions' stamp: 'yo 9/17/2007 11:05'! nextCard ^ super nextPage. ! ! !QuickGuideMorph methodsFor: 'menu actions' stamp: 'yo 9/17/2007 11:07'! nextPage | b | b _ currentPage findA: BookMorph. b ifNotNil: [b nextPage. ^ self]. ! ! !QuickGuideMorph methodsFor: 'menu actions' stamp: 'yo 9/17/2007 11:05'! previousCard ^ super previousPage. ! ! !QuickGuideMorph methodsFor: 'menu actions' stamp: 'yo 9/17/2007 11:07'! previousPage | b | b _ currentPage findA: BookMorph. b ifNotNil: [b previousPage. ^ self]. ! ! !QuickGuideMorph methodsFor: 'menu actions' stamp: 'yo 9/17/2007 11:54'! showDescriptionMenu: evt | aMenu categories subMenu | aMenu _ MenuMorph new defaultTarget: self. aMenu addTitle: 'Quick Guides' translated. categories _ self class suggestedCategoryOrder. categories do: [:cat | subMenu _ MenuMorph new defaultTarget: self. (self class defaultOrderIn: cat) do: [:e | subMenu add: e target: self selector: #goToCardNamed: argument: e. ]. subMenu items ifNotEmpty: [aMenu add: cat subMenu: subMenu]. ]. aMenu popUpInWorld ! ! !QuickGuideMorph class methodsFor: 'initialization' stamp: 'yo 9/17/2007 11:27'! convertProjectsWithBooksToSISSIn: dir to: outDir | p book texts desc | Thumbnails _ Dictionary new. Descriptions _ Dictionary new. Colors _ Dictionary new. dir fileNames do: [:f | (f endsWith: '.pr') ifTrue: [ p _ ProjectLoading loadName: f stream: (dir readOnlyFileNamed: f) fromDirectory: dir withProjectView: nil. book _ p world submorphs detect: [:b | b isMemberOf: BookMorph] ifNone: [nil]. book ifNotNil: [ texts _ book currentPage submorphs select: [:e | e isKindOf: TextMorph]. desc _ texts isEmpty ifTrue: ['A Guide' translated] ifFalse: [(texts asSortedCollection: [:x :y | x top < y top]) first contents asString]. Descriptions at: p name put: desc. Thumbnails at: p name put: (book imageForm magnifyBy: 0.25). Colors at: p name put: book color. book hidePageControls. book storeAsDataStreamNamed: (outDir fullNameFor: p name, '.sexp.data.gz'). ]. p okToChangeSilently. ]. ]. ! ! !QuickGuideMorph class methodsFor: 'defaults' stamp: 'yo 9/17/2007 12:12'! categoryOf: aName ^ self suggestedCategoryOrder detect: [:e | aName beginsWith: e] ifNone: ['']. ! ! !QuickGuideMorph class methodsFor: 'defaults' stamp: 'yo 9/17/2007 11:44'! defaultOrder ^ self defaultOrderIn: nil. ! ! !QuickGuideMorph class methodsFor: 'defaults' stamp: 'yo 9/17/2007 12:20'! defaultOrderIn: helpCategory | dir baseNames suggestedOrder ret cat last | dir _ (FileDirectory on: (Smalltalk imagePath)) directoryNamed: 'QuickGuides'. baseNames _ ((dir fileNames select: [:f | f endsWith: '.sexp.data.gz']) collect: [:f | f copyFrom: 1 to: f size - '.sexp.data.gz' size]) asSet. suggestedOrder _ self suggestedOrder. helpCategory ifNotNil: [ suggestedOrder _ suggestedOrder select: [:e | e beginsWith: helpCategory]. baseNames _ baseNames select: [:e | e beginsWith: helpCategory]]. ret _ OrderedCollection new. suggestedOrder do: [:e | (baseNames includes: e) ifTrue: [ baseNames remove: e. ret add: e. ]. ]. baseNames ifNotEmpty: [ baseNames asArray do: [:e | cat _ self categoryOf: e. last _ ret reverse detect: [:b | b beginsWith: cat] ifNone: [ret last]. ret add: e after: last. ]. ]. ^ ret asArray. ! ! !QuickGuideMorph class methodsFor: 'defaults' stamp: 'yo 9/17/2007 11:38'! suggestedCategoryOrder ^ #( 'NavBar' 'Paint' 'Halo' 'Supplies' 'ObjectCat' 'Books' 'ScriptTile' 'Menu' )! ! QuickGuideMorph class removeSelector: #suggestedCatOrder! QuickGuideMorph removeSelector: #showCardsList! "Postscript: " | f | SugarLibrary clearDefault. SugarNavigatorBar refreshButRetainOldContents. f _ Flaps globalFlapTabWithID: 'Help' translated. f ifNotNil: [ Flaps removeFlapTab: f keepInList: false].!