<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p>Hi Marcel,</p>
<p><br>
</p>
<p>thanks again. Here are some -- new and recycled :-) -- ideas:</p>
<p><br>
</p>
<p></p>
<ul style="margin-bottom: 0px; margin-top: 0px;">
<li>IMO the <span>ChangeSetBrowser does not really add value here. It is only a subset of a regular SimpleChangeSorter, isn't it?</span></li><li><span>I noticed multiple lags when opening the new menu because the change list is compiled dynamically. Could we add lazy menu loading (i.e., adding some items to the menu *after* it has been opened) to our future wish-list? :-)</span></li><li>Despite the new options, I use the change sorter options most frequently. To make them easier to find (and to guarantee their visibility, considering very large changesets ...), I would still prefer to find the tool section at the beginning but not the
 end of the menu.</li></ul>
<div><br>
</div>
<div>What do you think? :-)</div>
<p></p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div>
<div class="_rp_T4" id="Item.MessagePartBody">
<div class="_rp_U4 ms-font-weight-regular ms-font-color-neutralDark rpHighlightAllClass rpHighlightBodyClass" id="Item.MessageUniqueBody" style="font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont">
<div dir="ltr">
<div id="divtagdefaultwrapper"><font face="Calibri,Helvetica,sans-serif,EmojiFont,Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols">
<div id="Signature">
<div style="margin:0px"><font style="font-family:Calibri,Arial,Helvetica,sans-serif,serif,EmojiFont">
<div><font size="3" color="black"><span style="font-size:12pt"><a href="http://www.hpi.de/" target="_blank" rel="noopener noreferrer" id="LPNoLP"><font size="2"><span id="LPlnk909538"><font color="#757B80"></font></span></font></a></span></font></div>
</font></div>
</div>
</font></div>
</div>
</div>
</div>
</div>
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<br>
</div>
Best,</div>
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
Christoph<br>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von commits@source.squeak.org <commits@source.squeak.org><br>
<b>Gesendet:</b> Freitag, 30. April 2021 10:11 Uhr<br>
<b>An:</b> squeak-dev@lists.squeakfoundation.org; packages@lists.squeakfoundation.org<br>
<b>Betreff:</b> [squeak-dev] The Trunk: Morphic-mt.1767.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">Marcel Taeumel uploaded a new version of Morphic to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Morphic-mt.1767.mcz">http://source.squeak.org/trunk/Morphic-mt.1767.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Morphic-mt.1767<br>
Author: mt<br>
Time: 30 April 2021, 10:11:09.230936 am<br>
UUID: ebeb7f55-0ca6-a04c-8b5c-87008f09c697<br>
Ancestors: Morphic-mt.1766<br>
<br>
Now that I recently discovered the various ways to browse changes ... make the (rather new) changes menu in the docking bar feel more complete.<br>
<br>
Note that I have no real clue on the actual uses of browsing single change sets or sets of changed methods. Maybe you can help me with some experience reports so that we might remove one or the other menu item again.<br>
<br>
=============== Diff against Morphic-mt.1766 ===============<br>
<br>
Item was added:<br>
+ ----- Method: TheWorldMainDockingBar>>browseChangeSet (in category 'submenu - changes') -----<br>
+ browseChangeSet<br>
+ <br>
+        ChangeSetBrowser openOnCurrent.!<br>
<br>
Item was added:<br>
+ ----- Method: TheWorldMainDockingBar>>browseChangedMethods (in category 'submenu - changes') -----<br>
+ browseChangedMethods<br>
+ <br>
+        ChangedMessageSet openFor: ChangeSet current.!<br>
<br>
Item was added:<br>
+ ----- Method: TheWorldMainDockingBar>>browseChangesDual (in category 'submenu - changes') -----<br>
+ browseChangesDual<br>
+ <br>
+        DualChangeSorter open.!<br>
<br>
Item was changed:<br>
  ----- Method: TheWorldMainDockingBar>>listChangesOn: (in category 'submenu - changes') -----<br>
  listChangesOn: menu<br>
  <br>
         | latestMethodChanges latestClassChanges|<br>
         latestMethodChanges := (Array streamContents: [:s |<br>
                 ChangeSet current changedMethodsDo: [:method :changeType :dateAndTime :category |<br>
                         s nextPut: { dateAndTime. method. changeType. category }]])<br>
                         sorted: [:a :b | a first >= b first].<br>
  <br>
         1 to: (10 min: latestMethodChanges size) do: [:index | | spec method |<br>
                 spec := latestMethodChanges at: index.<br>
                 method := spec second.<br>
                 menu addItem: [:item |<br>
                         item<br>
                                 contents: ('{1} {2} \{{3}\} \{{4}\}' format: {method methodClass. method selector. spec fourth. method methodClass category}) ;<br>
                                 target: ToolSet;<br>
                                 balloonText: spec third asString;<br>
                                 icon: ((#(remove addedThenRemoved) includes: spec third) ifTrue: [MenuIcons smallDeleteIcon] ifFalse: [<br>
                                         spec third = #add ifTrue: [MenuIcons smallNewIcon] ifFalse: [MenuIcons blankIcon]]);<br>
                                 selector: (method isInstalled ifTrue: [#browseMethod:] ifFalse: [#browseMethodVersion:]);<br>
                                 arguments: {method}]].<br>
                                 <br>
         latestClassChanges := (Array streamContents: [:s |<br>
                 ChangeSet current changedClassesDo: [:class :changeTypes :dateAndTime :category |<br>
                         "We are not interested in classes whose method's did only change."<br>
                         changeTypes ifNotEmpty: [s nextPut: { dateAndTime. class. changeTypes. category }]]])<br>
                         sorted: [:a :b | a first >= b first].<br>
  <br>
         latestClassChanges ifNotEmpty: [menu addLine].<br>
         1 to: (10 min: latestClassChanges size) do: [:index | | spec class |<br>
                 spec := latestClassChanges at: index.<br>
                 class := spec second.<br>
                 menu addItem: [:item |<br>
                         item<br>
                                 contents: ('{1} \{{2}\}' format: {class name. spec fourth }) ;<br>
                                 target: ToolSet;<br>
                                 balloonText: (spec third sorted joinSeparatedBy: Character space);<br>
                                 icon: ((spec third includesAnyOf: #(remove addedThenRemoved))<br>
                                         ifTrue: [MenuIcons smallDeleteIcon]<br>
                                         ifFalse: [<br>
                                                 (spec third includes: #add)<br>
                                                         ifTrue: [MenuIcons smallNewIcon]<br>
                                                         ifFalse: [MenuIcons blankIcon]]);<br>
                                 selector: ((spec third includes: #remove) ifTrue: [#inspect:] ifFalse: [#browseClass:]);<br>
                                 arguments: {class}]].<br>
+        <br>
+        menu defaultTarget: self.<br>
+        menu addTranslatedList: #(<br>
+                -<br>
+                ('Browse current change set'            browseChangeSet)<br>
+                ('Browse changed methods'               browseChangedMethods)<br>
+                -<br>
+                ('Simple Change Sorter'                         browseChanges)<br>
+                ('Dual Change Sorter'                                   browseChangesDual)).<br>
+ <br>
+ <br>
+ !<br>
-                                <br>
-        menu addLine; addItem: [:item |<br>
-                item<br>
-                        contents: 'Browse current change set...' translated;<br>
-                        target: self;<br>
-                        selector: #browseChanges].!<br>
<br>
Item was changed:<br>
+ (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances..'!<br>
- (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances.'!<br>
<br>
<br>
</div>
</span></font></div>
</div>
</div>
</body>
</html>