<br><br><div class="gmail_quote">On Wed, Jun 15, 2011 at 1:51 PM, Chris Muller <span dir="ltr">&lt;<a href="mailto:asqueaker@gmail.com">asqueaker@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
It&#39;s all done folks.  Bert, we no longer access the #screen.  Eliot,<br>
the methods and Exception have been moved to ToolBuilder-Kernel.<br>
Frank, it now inherits from Notification.<br></blockquote><div><br></div><div>It was heart0warming to see the commit messages go by.  Thanks for your efforts.  IMO you&#39;ve done the right thing (tm) and we&#39;re all better off.  Thank you again!</div>
<div><br></div><div>best,</div><div>Eliot</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Thanks all for your feedback.<br>
<div><div></div><div class="h5"><br>
On Wed, Jun 15, 2011 at 3:34 PM, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Jun 15, 2011 at 1:30 PM, Levente Uzonyi &lt;<a href="mailto:leves@elte.hu">leves@elte.hu</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Wed, 15 Jun 2011, Eliot Miranda wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; On Wed, Jun 15, 2011 at 11:20 AM, Chris Muller &lt;<a href="mailto:asqueaker@gmail.com">asqueaker@gmail.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; This sounds even worse.  Are you implying that you&#39;re going to pepper<br>
&gt;&gt;&gt;&gt;&gt; the<br>
&gt;&gt;&gt;&gt;&gt; system with &quot;ProgressInitiationException signal&quot;s just in case there&#39;s<br>
&gt;&gt;&gt;&gt;&gt; a<br>
&gt;&gt;&gt;&gt;&gt; progress morph waiting to update?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ProgressInitiationException was put into Squeak (presumably, in the<br>
&gt;&gt;&gt;&gt; Exceptions package) back in 2000 - before I ever started using Squeak.<br>
&gt;&gt;&gt;&gt;  The main entry point for its creation all these years has been<br>
&gt;&gt;&gt;&gt; through String&gt;&gt;#displayProgressAt:from:to:during: - which includes a<br>
&gt;&gt;&gt;&gt; comment with an example, and for which there are senders are all<br>
&gt;&gt;&gt;&gt; throughout the system.  I am not going to pepper anything except my<br>
&gt;&gt;&gt;&gt; English breakfast.  :)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; So if that remains the main entry-point (and I think it&#39;s poor; one on<br>
&gt;&gt;&gt; UIManager would be better) the exception belongs in Collections, along<br>
&gt;&gt;&gt; side<br>
&gt;&gt;&gt; String.  Btu since progress is a UI function, there needs to be an<br>
&gt;&gt;&gt; entry-point there, and personally I think that either ToolBuilder or a<br>
&gt;&gt;&gt; generic UI package would be the place for both the entry-points such<br>
&gt;&gt;&gt; as #displayProgressAt:from:to:during:, and for the exception.  Just<br>
&gt;&gt;&gt; because<br>
&gt;&gt;&gt; something&#39;s been the way its been for 1 years doesn&#39;t mean it&#39;s right ;)<br>
&gt;&gt;<br>
&gt;&gt; Right, UIManager seems to be a good place. The only value I see in using<br>
&gt;&gt; an exception is that it can be caught, so code can avoid showing the<br>
&gt;&gt; progress, but that feature seems to be rarely used and it can be solved in<br>
&gt;&gt; another way with UIManager.<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; That&#39;s absurd, a) on performance grounds,<br>
&gt;&gt;&gt;&gt;&gt; an unhandled exception is an expensive thing (an entire stack walk to<br>
&gt;&gt;&gt;&gt;&gt; discover there&#39;s no handler),<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; There&#39;s only one signal which occurs only for the _initiation_, not<br>
&gt;&gt;&gt;&gt; every update.  The exception is instantiated with a workBlock, which<br>
&gt;&gt;&gt;&gt; takes one argument which is the bar that the client-code can then<br>
&gt;&gt;&gt;&gt; update (via #value:).  An unhandled exception may be expensive (still<br>
&gt;&gt;&gt;&gt; usually well under 1 second though, right?), but it&#39;s just one signal<br>
&gt;&gt;&gt;&gt; for something that the domain thinks is going to take long enough<br>
&gt;&gt;&gt;&gt; anyway to consider needing to initiate a progress bar..<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; If the signal is only raised in the context of a progress-epcific<br>
&gt;&gt;&gt; entry-point then that&#39;s fine.  Form your initial response to my question<br>
&gt;&gt;&gt; it<br>
&gt;&gt;&gt; seemed that you were talking about something much less contained. An<br>
&gt;&gt;&gt; unhandled exception is likely to cost significantly less than opening a<br>
&gt;&gt;&gt; progress widget, so the cost is acceptable.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; And I agree with Frank that the progress exception should inherit from<br>
&gt;&gt;&gt; Notification.<br>
&gt;&gt;<br>
&gt;&gt; The word Notification (along with Warning and Error) sounds like a system<br>
&gt;&gt; event. It&#39;s nothing more than an Exception with the #defaultAction<br>
&gt;&gt; implemented as ^nil. I wonder what it&#39;s original purpose was besides marking<br>
&gt;&gt; Exceptions which implement #defaultAction.<br>
&gt;<br>
&gt; The distinction is between an exception which if uncaught stops execution<br>
&gt; (an exception) and one which if uncaught has no effect (a notification).  So<br>
&gt; ProgressInitiationException is definitely a Notification (IMO :) ).<br>
&gt; best,<br>
&gt; Eliot<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Levente<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; cheers,<br>
&gt;&gt;&gt; Eliot<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;  - Chris<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Wed, Jun 15, 2011 at 12:07 PM, Eliot Miranda<br>
&gt;&gt;&gt;&gt; &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Wed, Jun 15, 2011 at 9:54 AM, Chris Muller &lt;<a href="mailto:asqueaker@gmail.com">asqueaker@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; If, by &quot;the progress bar&quot; you mean SystemProgressMorph, I disagree,<br>
&gt;&gt;&gt;&gt;&gt;&gt; since that would create a dependency on Morphic.<br>
&gt;&gt;&gt;&gt;&gt;&gt; ProgressInitiationException allows domain-level code to signal that<br>
&gt;&gt;&gt;&gt;&gt;&gt; something worth indicating progress is occurring, and different UI<br>
&gt;&gt;&gt;&gt;&gt;&gt; frameworks can capture that notification (or not) and render it each<br>
&gt;&gt;&gt;&gt;&gt;&gt; in their own way.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; b) on neatness/complexity grounds, littering<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; the system with dependencies, yuck.  The Exceptions package is for the<br>
&gt;&gt;&gt;&gt;&gt; exceptions machinery and core exceptions, /not/ for every conceivable<br>
&gt;&gt;&gt;&gt;&gt; exception, notification or warning imaginable.  I haven&#39;t been keeping<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; up,<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; so could you outline the usage model here and give some examples?  I<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; think<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; there needs to be very careful thought on the interface between domain<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; code<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; and progress; a) where separation can&#39;t be obtained something analogous<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; to<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; MVC where changed messages are cheap if a Model has no dependents, b)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; where<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; separation can be obtained (the traditional showProgessWhile: aBlock<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; form)<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; the progress additions are nicely encapsulated within the<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; showProgressWhile:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; form.<br>
&gt;&gt;&gt;&gt;&gt; best<br>
&gt;&gt;&gt;&gt;&gt; Eliot<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;  - Chris<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; On Wed, Jun 15, 2011 at 11:48 AM, Eliot Miranda &lt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi Chris,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;    just because ProgressInitiationException is an exception doesn&#39;t<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; imply<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; it belongs in exceptions.  Surely it belongs in the same package as<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; the<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; progress bar.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; best<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Eliot<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Wed, Jun 15, 2011 at 9:13 AM, &lt;<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Chris Muller uploaded a new version of Exceptions to project The<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Trunk:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://source.squeak.org/trunk/Exceptions-cmm.34.mcz" target="_blank">http://source.squeak.org/trunk/Exceptions-cmm.34.mcz</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ==================== Summary ====================<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Name: Exceptions-cmm.34<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Author: cmm<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Time: 15 June 2011, 11:13:51.392 am<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; UUID: f0144460-f227-7b43-bee2-019786f35a4e<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Ancestors: Exceptions-nice.33<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; First step toward preferredProgressBarPosition preference.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; =============== Diff against Exceptions-nice.33 ===============<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  Exception subclass: #ProgressInitiationException<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;       instanceVariableNames: &#39;workBlock maxVal minVal aPoint<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; progressTitle&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +       classVariableNames: &#39;PreferredProgressBarPosition&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -       classVariableNames: &#39;&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;       poolDictionaries: &#39;&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;       category: &#39;Exceptions-Kernel&#39;!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  !ProgressInitiationException commentStamp: &#39;&lt;historical&gt;&#39; prior: 0!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  I provide a way to alter the behavior of the old-style progress<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; notifier<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; in String. See examples in:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  ProgressInitiationException testWithout.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  ProgressInitiationException testWith.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  !<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  ----- Method: ProgressInitiationException<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; class&gt;&gt;display:at:from:to:during: (in category &#39;signalling&#39;) -----<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + display: aString at: aPoint from: minVal to: maxVal during:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; workBlock<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; - display: aString at: aPoint from: minVal to: maxVal during:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; workBlock<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;       ^ self new<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               display: aString<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               at: (aPoint ifNil: [ self preferredProgressBarPoint<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ])<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               from: minVal<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               to: maxVal<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               during: workBlock!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -               display: aString at: aPoint from: minVal to: maxVal<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; during: workBlock!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + ----- Method: ProgressInitiationException<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; class&gt;&gt;display:from:to:during:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; (in category &#39;signalling&#39;) -----<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + display: aString from: minVal to: maxVal during: workBlock<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +       ^ self<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               display: aString<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               at: nil<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               from: minVal<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               to: maxVal<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               during: workBlock!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + ----- Method: ProgressInitiationException<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; class&gt;&gt;preferredProgressBarPoint (in category &#39;accessing&#39;) -----<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + preferredProgressBarPoint<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +       ^ self preferredProgressBarPosition = #cursorPoint<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               ifTrue: [ Sensor cursorPoint ]<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               ifFalse: [ UIManager default screen perform: self<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; preferredProgressBarPosition ]!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + ----- Method: ProgressInitiationException<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; class&gt;&gt;preferredProgressBarPosition (in category &#39;accessing&#39;) -----<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + preferredProgressBarPosition<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +       ^ PreferredProgressBarPosition ifNil: [ #center ]!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + ----- Method: ProgressInitiationException<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; class&gt;&gt;preferredProgressBarPosition: (in category &#39;accessing&#39;) -----<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; + preferredProgressBarPosition: aSymbol<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +       &quot;Specify any of:  #center, #topCenter, #bottomCenter,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; #leftCenter,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; #rightCenter, #topLeft, #topRight, #bottomLeft or #bottomRight or<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; #cursorPoint.&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +       ^ PreferredProgressBarPosition!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  ----- Method: ProgressInitiationException class&gt;&gt;testInnermost (in<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; category &#39;examples and tests&#39;) -----<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  testInnermost<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;       &quot;test the progress code WITHOUT special handling&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;       ^&#39;Now here&#39;&#39;s some Real Progress&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +               displayProgressFrom: 0<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -               displayProgressAt: Sensor cursorPoint<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; -               from: 0<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;               to: 10<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;               during: [ :bar |<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                       1 to: 10 do: [ :x |<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                               bar value: x. (Delay forMilliseconds:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 500)<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; wait.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                               x = 5 ifTrue: [1/0].    &quot;just to make<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; life<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; interesting&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                       ].<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;                       &#39;done&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;               ].<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  !<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br>