<div dir="ltr">Nice.<div><br></div><div>Best,</div><div>Karl <br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 8, 2015 at 7:16 PM,  <span dir="ltr">&lt;<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">A new version of Tools was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/Tools-pre.659.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/inbox/Tools-pre.659.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Tools-pre.659<br>
Author: pre<br>
Time: 8 December 2015, 7:16:41.034 pm<br>
UUID: a7cb3cba-074b-46a6-8a83-fada58007b25<br>
Ancestors: Tools-eem.658<br>
<br>
This adds balloon help texts to the message list of the standard browser to explain the symbols shown in front of message names.<br>
<br>
=============== Diff against Tools-eem.658 ===============<br>
<br>
Item was changed:<br>
  ----- Method: Browser&gt;&gt;messageHelpAt: (in category &#39;message list&#39;) -----<br>
  messageHelpAt: anIndex<br>
        &quot;Show the first n lines of the sources code of the selected message.&quot;<br>
<br>
+       | source formatted |<br>
-       | source formatted lineCount |<br>
        Preferences balloonHelpInMessageLists ifFalse: [^ nil].<br>
        self messageList size &lt; anIndex ifTrue: [^ nil].<br>
<br>
        source := (self selectedClassOrMetaClass &gt;&gt; (self messageList at: anIndex)) getSource.<br>
+       source lineCount &gt; 5 ifTrue: [<br>
+               | sourceLines |<br>
+               sourceLines := (source asString lines copyFrom: 1 to: 5) asOrderedCollection.<br>
+               sourceLines add: &#39; [...]&#39;.<br>
+               source := sourceLines joinSeparatedBy: Character cr].<br>
+<br>
        formatted := SHTextStylerST80 new<br>
                classOrMetaClass: self selectedClassOrMetaClass;<br>
                styledTextFor: source asText.<br>
-<br>
-       lineCount := 0.<br>
-       source doWithIndex: [:char :index |<br>
-               char = Character cr ifTrue: [lineCount := lineCount + 1].<br>
-               lineCount &gt; 10 ifTrue: [<br>
-                       formatted := formatted copyFrom: 1 to: index-1.<br>
-                       formatted append: &#39; [...]&#39;.<br>
-                       ^ formatted]].<br>
<br>
+       ^ (Text newFrom: ((self messageIconHelpAt: anIndex) ifNotEmpty: [:t | t , Character cr, Character cr]))<br>
+               append: formatted;<br>
+               yourself!<br>
-       ^ formatted!<br>
<br>
Item was added:<br>
+ ----- Method: Browser&gt;&gt;messageIconHelpAt: (in category &#39;message list&#39;) -----<br>
+ messageIconHelpAt: anIndex<br>
+<br>
+       self class showMessageIcons<br>
+               ifFalse: [^ nil].<br>
+<br>
+       ^ ToolIconHelp iconHelpNamed: (ToolIcons<br>
+               iconForClass: self selectedClassOrMetaClass<br>
+               selector: (self messageList at: anIndex))!<br>
<br>
Item was added:<br>
+ Object subclass: #ToolIconHelp<br>
+       instanceVariableNames: &#39;&#39;<br>
+       classVariableNames: &#39;HelpTexts&#39;<br>
+       poolDictionaries: &#39;&#39;<br>
+       category: &#39;Tools-Base&#39;!<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;abstract (in category &#39;as yet unclassified&#39;) -----<br>
+ abstract<br>
+<br>
+       ^ &#39;This method is abstract.&#39; !<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;arrowDown (in category &#39;as yet unclassified&#39;) -----<br>
+ arrowDown<br>
+<br>
+       ^ &#39;This method is overriden by another method.&#39;!<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;arrowUp (in category &#39;as yet unclassified&#39;) -----<br>
+ arrowUp<br>
+<br>
+       ^ &#39;This method overrides a super method.&#39;!<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;arrowUpAndDown (in category &#39;as yet unclassified&#39;) -----<br>
+ arrowUpAndDown<br>
+<br>
+       ^ &#39;This method overrides and is overridden by other methods.&#39;!<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;blank (in category &#39;as yet unclassified&#39;) -----<br>
+ blank<br>
+<br>
+       ^ &#39;&#39;!<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;breakpoint (in category &#39;as yet unclassified&#39;) -----<br>
+ breakpoint<br>
+<br>
+       ^ &#39;This method contains a breakpoint.&#39;!<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;flag (in category &#39;as yet unclassified&#39;) -----<br>
+ flag<br>
+<br>
+       ^ &#39;This method needs attention of some kind.&#39; !<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;helpTexts (in category &#39;as yet unclassified&#39;) -----<br>
+ helpTexts<br>
+<br>
+       ^ HelpTexts ifNil: [HelpTexts := IdentityDictionary new]!<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;iconHelpNamed: (in category &#39;as yet unclassified&#39;) -----<br>
+ iconHelpNamed: aSymbol<br>
+<br>
+       (self respondsTo: aSymbol)<br>
+               ifTrue: [^self helpTexts at: aSymbol ifAbsentPut: [self perform: aSymbol]]<br>
+               ifFalse: [^ &#39;&#39;]<br>
+       !<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;no (in category &#39;as yet unclassified&#39;) -----<br>
+ no<br>
+<br>
+       ^  &#39;This method should not be implemented.&#39; !<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;notOverridden (in category &#39;as yet unclassified&#39;) -----<br>
+ notOverridden<br>
+<br>
+       ^ &#39;This method is abstract and has not been overridden.&#39; !<br>
<br>
Item was added:<br>
+ ----- Method: ToolIconHelp class&gt;&gt;primitive (in category &#39;as yet unclassified&#39;) -----<br>
+ primitive<br>
+<br>
+       ^ &#39;This method implements a primitive.&#39;!<br>
<br>
<br>
</blockquote></div><br></div>