<div dir="ltr"><div>As a follow up to the Cuis meeting today, here's my initial progress on two of the comments. I want to get some feedback on this before I add more comments to the methods of this class. Fire away!</div><div><br></div><div>For the TextModelMorph class I have the following:</div><div><br></div><div><font face="monospace">This is a morph that enables users to view and edit text.<br><br>The main features of this class include:</font></div><div><font face="monospace">- using either a TextModel or TextProvider to hold the text being edited<br>- styling and text wrapping (provided by InnerTextMorph)<br>- scrolling with scrollbars (provided by superclass PluggableScrollPane)<br><br>There are two approaches for creating instances. One approach is to hold the text value in a TextModel object. The class methods withModel: and withText: support this. The other approach is to hold the text value in a TextProvider. The class methods that begin with textProvider: support this. For examples, see the method comments in those class methods.<br><br>The default background color is white. A border is only displayed when it has focus. One way to make its bounds apparent when it doesn't have focus is to set the background color of the parent component. Another way is to set the background color of this morph.<br><br>By default, words that would extend past the right side wrap to the next line. To prevent wrapping, send an instance #wrapFlag: with an argument of false.<br><br>The default size is 200 by 100, set in the initialize method of the superclass PluggableMorph. Depending on the font, the default size displays around four lines of wrapping text with around 17 characters per line. To change the size, send an instance #morphExtent: with a Point argument that specifies a width and height. The size should include space for scroll bars if they may be needed. Setting the height to zero causes it to actually be set to the height required for a single line in the current font.</font><br><font face="monospace"><br>Related classes include TextModel, TextProvider, PluggableScrollPane, and InnerTextMorph.<br></font></div><div><br></div><div>For the class method testProvider:textGetter:textSetter: I have this:</div><div><br></div><div><font face="monospace"> Answer a new instance that gets the text from aTextProvider.<br>          <br>      aTextProvider must have corresponding getter and setter methods<br>       that manage the text to be edited.<br>    For example, we can use an instance of the Exception class<br>    which has the methods messageText and messageText:.<br>   <br>      Select and evaluate the code below.<br>   In the Inspector that appears, select the messageText instance variable.<br>      In the TextModelMorph that appears, change the text</font></div><div><font face="monospace">and note how it updates in the Inspector.<br>       <br>      | exception morph |<br>   exception := Exception new.<br>   exception messageText: 'initial'.<br>     exception inspect.<br>    morph := TextModelMorph textProvider: exception textGetter: #messageText textSetter: #messageText:.<br>   morph acceptOnAny: true.<br>      morph openInWorld.</font><br><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div><font face="arial, helvetica, sans-serif">R. Mark Volkmann</font></div><div><span style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Object Computing, Inc.</font></span></div></div></div></div></div></div></div></div></div>