'From Squeak2.8alpha of 14 February 2000 [latest update: #1919] on 9 March 2000 at 2:27:59 am'! "Change Set: PrintFromTextMenu Date: 9 March 2000 Author: Stephan B. Wessels and Doug Way Adds menu items to the shiftedYellowButton (text) menu to allow saving and printing from any text pane. Also adds an extra item to edit the printer settings. The printer settings are stored in a new DefaultTextPrinter class variable in TextPrinter... it seemed best to store this info globally, rather than per text instance. The three menu items are 'save contents to file...', 'send contents to printer' and 'printer setup'."! Object subclass: #TextPrinter instanceVariableNames: 'form para paperSize landscape resolution depth offset columns docTitle noHeader noFooter ' classVariableNames: 'DefaultPaperSize DefaultTextPrinter ' poolDictionaries: '' category: 'Graphics-Text'! !ParagraphEditor methodsFor: 'menu messages' stamp: 'dew 3/7/2000 21:06'! printerSetup TextPrinter defaultTextPrinter inspect ! ! !ParagraphEditor methodsFor: 'menu messages' stamp: 'dew 3/9/2000 00:15'! saveContentsInFile | fileName stringToSave parentWindow labelToUse | stringToSave _ paragraph text string. stringToSave size == 0 ifTrue: [^ self inform: 'nothing to save.']. parentWindow _ self model dependents detect: [:dep | dep isKindOf: SystemWindow] ifNone: [nil]. parentWindow isNil ifTrue: [labelToUse _ 'Untitled'] ifFalse: [labelToUse _ parentWindow label]. fileName _ FillInTheBlank request: 'File name? (".text" will be added to end)' initialAnswer: labelToUse. fileName size == 0 ifTrue: [^ self beep]. (fileName asLowercase endsWith: '.text') ifFalse: [fileName _ fileName,'.text']. (FileStream newFileNamed: fileName) nextPutAll: stringToSave; close! ! !ParagraphEditor methodsFor: 'menu messages' stamp: 'dew 3/9/2000 00:15'! sendContentsToPrinter | textToPrint printer parentWindow | textToPrint _ paragraph text. textToPrint size == 0 ifTrue: [^ self inform: 'nothing to print.']. printer _ TextPrinter defaultTextPrinter. parentWindow _ self model dependents detect: [:dep | dep isKindOf: SystemWindow] ifNone: [nil]. parentWindow isNil ifTrue: [printer documentTitle: 'Untitled'] ifFalse: [printer documentTitle: parentWindow label]. printer printText: textToPrint. ! ! !ParagraphEditor class methodsFor: 'class initialization' stamp: 'dew 3/7/2000 17:32'! shiftedYellowButtonMenu "Answer the menu to be presented when the yellow button is pressed while the shift key is down" ^ SelectionMenu fromArray: #( ('set font... (k)' offerFontMenu) ('set style... (K)' changeStyle) ('set alignment...' chooseAlignment) - ('explain' explain) ('pretty print' prettyPrint) ('pretty print with color' prettyPrintWithColor) ('file it in' fileItIn) ('recognizer (r)' recognizeCharacters) ('spawn (o)' spawn) - ('browse it (b)' browseIt) ('senders of it (n)' sendersOfIt) ('implementors of it (m)' implementorsOfIt) ('references to it (N)' referencesToIt) ('selectors containing it (W)' methodNamesContainingIt) ('method strings with it (E)' methodStringsContainingit) ('method source with it' methodSourceContainingIt) - ('save contents to file...' saveContentsInFile) ('send contents to printer' sendContentsToPrinter) ('printer setup' printerSetup) - ('special menu...' presentSpecialMenu) ('more...' yellowButtonActivity))! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'dew 3/7/2000 21:10'! printerSetup self handleEdit: [textMorph editor printerSetup]! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'dew 3/7/2000 21:15'! saveContentsInFile self handleEdit: [textMorph editor saveContentsInFile]! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'dew 3/7/2000 20:09'! sendContentsToPrinter self handleEdit: [textMorph editor sendContentsToPrinter]! ! !TextPrinter class methodsFor: 'accessing' stamp: 'dew 3/7/2000 20:39'! defaultTextPrinter "This is the global default TextPrinter instance." DefaultTextPrinter isNil ifTrue: [DefaultTextPrinter _ self new]. ^DefaultTextPrinter! ! !Workspace methodsFor: 'as yet unclassified' stamp: 'dew 3/9/2000 00:13'! saveContentsInFile "A bit of a hack to pass along this message to the controller or morph. (Possibly this Workspace menu item could be deleted, since it's now in the text menu.)" | textMorph textView | textMorph _ self dependents detect: [:dep | dep isKindOf: PluggableTextMorph] ifNone: [nil]. textMorph notNil ifTrue: [^ textMorph saveContentsInFile]. textView _ self dependents detect: [:dep | dep isKindOf: PluggableTextView] ifNone: [nil]. textView notNil ifTrue: [^ textView controller saveContentsInFile]. ! !