Class new title: Window subclassof: Object fields: 'frame collapsed titlepara growing exitflag ' declare: 'border titleloc titleframe windowmenu titlerun ' aboutToFrame bluebug | t1 [t1 _ windowmenu bug. t1 = 1  [exitflag _ false. exitflag] t1 = 2  [self newframe. self enter] t1 = 3  [self close. self erase. user unschedule: self. false] t1 = 4  [self hardcopy] t1 = 5  [self print]] classInit [border _ 2  2. titleframe _ Textframe new para: nil frame: nil. titleloc _ 3  (4 - titleframe lineheight). titlerun _ String new: 2. titlerun word: 1 _ 255. windowmenu _ Menu new string: 'under frame close print printbits '] clearTitle: t1 [(titleframe window inset: 2  2) clear: t1] close eachtime [[frame has: user mp  [user kbck  [self kbd] [user anybug  [user redbug  [self redbug] user yellowbug  [self yellowbug] user bluebug  [self bluebug]]]. user anykeys  [self keyset]]]. self outside  [] user anybug  [frame has: user mp  [] false] user kbck  [user kbd. frame flash]] editTitle | t1 t2 [t1 _ TextImage new para: titlepara frame: nil. t1 formerly: false. t1 fixframe: titleframe window + (1  2). t1 enter. t2 _ titleframe window. until (user anybug and (t2 has: user mp)  false) do [user kbck  [t1 typing] user redbug  [t2 has: user mp  [t1 selecting]] user yellowbug  [t2 has: user mp  [t2 flash]]]. titlepara _ t1 contents. self showtitle] enter [self show] erase [(frame inset: 2  2) clear. self clearTitle: background] firsttime [frame has: user mp  [self reset. self enter] false] fixedwidthfromuser: t1 | t2 t3 t4 [user waitnobug. [frame  nil  [] self aboutToFrame. self erase]. t2 _ OriginCursor showwhile [user waitbug]. growing _ true. frame _ self fixframe: (t2 rect: t2 + (t1  32)). self frame: frame. self show. CornerCursor showwhile [while [t2 _ user mpnext. t2] do [t2 x_ frame corner x. [t4  nil  [user cursorloc_ t2 max: frame corner]]. t4 _ frame copy. frame _ self fixframe: (frame growto: t2). self frame: frame. self moveFrom: t4]. nil]. growing _ false. self takeCursor] fixframe: t1 [t1] frame [frame] frame: t1 [frame _ self fixframe: t1] hardcopy [frame flash] kbd [user kbd. frame flash] keyset [frame flash] lasttime [self leave. exitflag] leave moveFrom: t1 [(t1 inset: 2) clear. self show] newframe | t1 t2 [user waitnobug. [frame  nil  [] self aboutToFrame. self erase]. t1 _ OriginCursor showwhile [user waitbug]. growing _ true. frame _ self fixframe: (t1 rect: t1 + 32). frame outline. CornerCursor showwhile [while [t1 _ user mpnext. t1] do [[t2  nil  [user cursorloc_ t1 max: frame corner]]. t2 _ frame copy. frame _ self fixframe: (frame growto: t1). (t2 inset: 2) clear. frame outline]. nil]. self frame: frame. growing _ false. self takeCursor] outline [frame outline] outside [titleframe window has: user mp  [user anybug  [self editTitle] false] false] print | t1 [t1 _ dp0 pressfile: (self title + '.press.') asFileName. t1 screenout: frame scale: PressScale. t1 toPrinter] redbug [frame flash] reset [exitflag _ true. growing _ false] show [self outline. growing  [] self showtitle] showtitle [[titlepara  nil  [titlepara _ Paragraph new text: self title runs: titlerun alignment: 0]]. titleframe put: titlepara at: frame origin + titleloc. titleframe outline] takeCursor [user cursorloc_ frame center] title ['Untitled'] yellowbug [frame flash]