Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 1 participants
- 144619 messages
Re: [Pharo-project] DuplicatedVariableError: styler is already defined in PluggableTextMorph
by Stéphane Ducasse
Here is the current draft of documentation around metacello. People often complain that there is no doc
but writing doc is also a full time jobwe are trying to address.
Feedback is welcomed and source is on github.
Symbolic versions are really draft version.
Stef
Jan. 13, 2011
Re: [Pharo-project] Socket question (Was Re: Xtreams up to date)
by Stéphane Ducasse
Martin
did you check with squeak? because I have the impression that andreas fixed a bit some code.
This is on our (igor) to do for 1.3 or 1.4 or 1.3 if somebody join and help.
Noury and luc started to rewrite from scratch the sockets but I do not know the status.
Stef
On Jan 12, 2011, at 7:13 PM, mkobetic(a)gmail.com wrote:
> I started looking at the Socket failures that I can reproduce and I can't wrap my head around the SocketReadingWritingTest>>setUp. Based on what I know about TCP sockets it doesn't make sense to me. AFAIK to get both ends of a connected TCP connection (lacking a socketpair call) I need 3 sockets. A listening socket, a client socket (doing connect) and finally the server socket that comes out as a result of accept on the listener. So I'd expect to see something like this in the setUp:
>
> | data input output listener socket1 socket2 process sync |
> Socket initializeNetwork.
> sync := Semaphore new.
> listener := Socket newTCP.
> listener listenOn: 9999.
> process := [ [ socket1 := listener accept ] ensure: [ listener close ]. sync signal ] fork.
> socket2 := Socket newTCP.
> socket2 connectTo: (NetNameResolver localHostAddress) port: 9999.
> sync wait.
> output := socket1 reading.
> input := socket2 writing.
>
> Surprisingly, the above doesn't work, while many of the Socket tests seem to pass for me despite my brain telling me that it can't possibly. Can anyone shed some light on this for me ?
>
> Thanks,
>
> Martin
>
>
Jan. 13, 2011
Re: [Pharo-project] [update 1.2] #12297
by Stéphane Ducasse
indeed igor this is nice.
Doru may be you could take this change for your look?
Stef
On Jan 13, 2011, at 1:26 AM, Igor Stasenko wrote:
> On 12 January 2011 23:17, Sven Van Caekenberghe <sven(a)beta9.be> wrote:
>>
>> On 12 Jan 2011, at 22:12, Igor Stasenko wrote:
>>
>>> Ubuntu changes its skin every single release.. and i am pretty sure
>>> that there are
>>> books, screencasts, screnshots, tutorials, etc for Ubuntu as well.
>>>
>>> (btw i think they established really good tradition, because people
>>> could quickly distinguish one version from another
>>> by simply taking a glance on the screen)
>>
>> Good point: new look == new version
>>
>> The compatibility point is also good.
>>
>> The OS independence point is also good.
>>
>>> Get used to live in ever changing world :)
>>>
>>>> you, and all Pharo advanced users can easily change the theme, and you
>>>> probbaly even have a script prepare that you run in each clean image to
>>>> adapt it to your taste.
>>>
>>> UIThemeWatery2 beCurrent.
>>>
>>> be my guest :) http://bit.ly/gi7vb7
>>>
>>>
>>>> But I think we should make the life easier for new comers.
>>>> In addition, it was never discussed in the mailing list such change (at
>>>> least I didn't see it).
>>>>
>>>
>>> i agree, it is better to discuss broadly before changing.
>>>
>>> I like the glamourous theme because it is minimalistic and elegant.
>>> Still the colors are a bit wrong as to my taste, especially selection
>>> (light blue).
>>
>> I made my own subclass overriding 3 color constants to orange.
>> 'Sven-Glamour-Theme' @ SqueakSource project ADayAtTheBeach.
>>
>
> Kewl.. Orange is much much better.
>
> I modified it a little. Check it out
>
>> Sven
>>
>>
>
>
>
> --
> Best regards,
> Igor Stasenko AKA sig.
> <GLMUITheme2.st>
Jan. 13, 2011
Re: [Pharo-project] How to bundle an application with icons?
by Stéphane Ducasse
I know that fernando was building an infrastructure for icons.
But I did not see him recently on the list.
Stef
On Jan 12, 2011, at 3:50 PM, Dimitry Golubovsky wrote:
> Hi,
>
> Suppose I need to bundle a Pharo application (a package) I am
> developing with some custom icons: is there any "standard"/
> agreed-upon method to do that in Pharo?
>
> For example the MenuIcons class includes byte strings (automatically I
> assume) converted from some external PNG files that show up as icons
> with menu items: which tool can be used to create a class with set of
> icons for an arbitrary application?
>
> If I want to reuse icons for standard actions in my application, which
> is the proper way to access menu icons other than to directly access
> these stored images?
>
> Thanks.
>
> PS Other than the "by example" books (both Squeak and Pharo) which
> give some basics of building GUI for applications, are there any
> general guidelines for GUI building in these systems?
>
> --
> Dimitry Golubovsky
>
> Anywhere on the Web
>
Jan. 13, 2011
Re: [Pharo-project] Maybe bug in ZnHttpClient
by Stéphane Ducasse
Thanks a lot sven.
I really like your spirit. Engaging, addressing problems.... so great.
Stef
On Jan 12, 2011, at 2:10 PM, Sven Van Caekenberghe wrote:
> Hello Tony,
>
> (I am CC'ing the Pharo list)
>
> On 11 Jan 2011, at 23:48, Tony Fleig wrote:
>
>> Hi Sven,
>>
>> At Stef's suggestion I am trying Zinc in place of WebClient in my
>> automated testing of my Seaside apps.
>>
>> I like Zinc better already and I can see that I will need fewer lines
>> of code using Zinc than WebClients for my purposes.
>
> That is great! Thanks for trying Zn and for giving feedback.
>
> BTW, I really liked your writeup about testing (and I was thinking/hoping all the time, he should be using Zn ;-)
>
>> That said, I have found I think a bug.
>>
>> Pharo 1.1.1 Seaside 3.0.3 Zinc latest
>>
>> In ZnHttpClient>>#method:for:headers:data:limit, if a 302 response is
>> received, the Location header field may not contain a complete URL
>> (i.e. it may not contain scheme://host:port but only the path). When
>> this happens, the next ZnHttpClient>>#openConnection fails in
>> NetNameResolver trying to resolve a nil hostname.
>>
>> This occurs when the server is Seaside.
>>
>> I have solved this by setting followRedirect to false and handling the
>> redirect myself (as I as doing with WebClient anyway.)
>
> Well, strictly speaking it isn't a bug (the specs say that the Location URL has to be absolute), but you are right: there is common support for relative redirect locations, so I added that (did not yet test it though).
>
>> Some other observations:
>>
>> 1. It is my understanding that many browsers respond to a 302/303
>> response from a POST with a following GET to the address specified in
>> the 302/303 Location header rather than repeating the POST with its
>> payload as is done in ZnHttpClient. (See
>> http://en.wikipedia.org/wiki/HTTP_303)
>
> I'll have to study/think about that for a while, it depends on what the specs says. It doesn't make much sense for an automated client to do a GET I think. What would you suggest ?
>
>> 2. The arguments to the settings accessors in ZnUserAgentSettings are
>> all anObject. Wouldn't aBoolean and anInteger be more informative
>> names (for followRedirect: and redirectLimit: for example)? I was
>> stopped when I saw anObject and went perusing the sources to be sure
>> that what was wanted was a boolean and not something more complex.
>
> You're right, proper parameter names are helpful, I changed some of them.
>
> I went over the ZnUserAgent and ZnClient classes (they were originally written by Matt Kennedy). I made various simplifications and cleanups (most related to newer API) which might help when reading the code. I also made an important change/bugfix regarding query parameters (originally reported by Cédric Béler I think).
>
> Thanks again for the feedback, if you have any more questions, feel free to ask them.
>
> Sven
>
>> Sven Van Caekenberghe uploaded a new version of Zinc-HTTP to project Zinc HTTP Components:
>> http://www.squeaksource.com/ZincHTTPComponents/Zinc-HTTP-SvenVanCaekenbergh…
>>
>> ==================== Summary ====================
>>
>> Name: Zinc-HTTP-SvenVanCaekenberghe.114
>> Author: SvenVanCaekenberghe
>> Time: 12 January 2011, 2:03:44 pm
>> UUID: e1a49d00-d9f0-4800-8cd7-cb354e86d671
>> Ancestors: Zinc-HTTP-SvenVanCaekenberghe.113
>>
>> ZnUserAgent (and ZnClient) now can follow relative redirect locations;
>> introduced ZnMultiValueDictionary to allow multiple values to be stored under one key as an array;
>> using ZnMultiValueDictionary for queries and headers;
>> ZnUrl now uses ZnUtils>>parseQueryFrom: again;
>> various simplifications and cleanups which might help when reading the code in ZnUserAgent (and ZnClient);
>> ZnUserAgent (and ZnClient) now handle parameter encoding differently
>
>
>
Jan. 13, 2011
Re: [Pharo-project] INRIA-CEA-EDF Deep into Smalltalk School registration open
by Stéphane Ducasse
On Jan 12, 2011, at 10:39 AM, Stefan Marr wrote:
> Hi Stéphane:
>
> Are the abstracts for the lectures available anywhere?
no
> And, just a detail, but the schedule does not seem to reflect the speakers, I see neither Marcus nor Theo on it.
theo is now in and giving a keynote and marcus is not "there" because jorge and him will talk about opal.
Stef
>
> Best regards
> Stefan
>
> On 12 Jan 2011, at 10:01, Stéphane Ducasse wrote:
>
>> The registration for the school: deep on Smalltalk organized at INRIA Lille Nord Europe is now open.
>> http://www.inria.fr/centre-de-recherche-inria/lille-nord-europe/agenda/smal…
>>
>> Please register as soon as possible so that we can build some estimates.
>> Please register even if you are local or close.
>>
>> ==== SCHOOL
>>
>> The objective of this school is to present on advanced Smalltalk topics such as compiler compiler, virtual machine, interaction with C, advanced UI, ...
>> The school is structured around two main lectures on Virtual machines and a hand on sessions.
>> ⢠Igor Stasenko RMOD Lille France
>> ⢠Dr. Noury Bouraqadi
>> ⢠Henrik Johansen Norway
>> ⢠Jorge Ressia SCG Bern Switzerland
>> ⢠Marcus Denker RMOD Lille France
>> ⢠Prof. Theo D'Hondt VUB Belgium
>> ⢠Dr. Tudor Girba Switzerland
>> ⢠Dr. Eliot Miranda US
>>
>> ⢠Date : du 7 mars 2011 au 11 mars 2011
>> ⢠Lieu : Centre de recherche INRIA Lille Nord Europe
>>
>> ***There will be certainly a Pharo Sprint the saturday 15 of March. You are welcomed ***
>>
>> http://www.inria.fr/centre-de-recherche-inria/lille-nord-europe/agenda/smal…
>>
>> HOTEL
>> ====
>> I'm negotiating with some hotels to provide fast a list.
>> Now the first hotel that is cheap and good and that agreed to get better rooms
>> for the same price is Hotel Agora
>> 14 r Molinel 59000 LILLE
>> Mail : agorahotel(a)yahoo.fr.
>> 03 20 31 55 52
>> fax :.03 20 06 27 54
>> You should mention that you are coming to INRIA to get reduction.
>>
>> Stef
>
>
>
> --
> Stefan Marr
> Software Languages Lab
> Vrije Universiteit Brussel
> Pleinlaan 2 / B-1050 Brussels / Belgium
> http://soft.vub.ac.be/~smarr
> Phone: +32 2 629 2974
> Fax: +32 2 629 3525
>
>
Jan. 13, 2011
Re: [Pharo-project] SUNit
by Lukas Renggli
> I don't mind the order of execution, as long as during the execution of all
> tests within a test case class, the singleton uses the right port. But
> since the resources are not individually initialized *before* execution of
> the tests in a test case class, I end up with whatever executed last before
> running the test suite.
Did you try and understood my code example?
Maybe you want to replace the CommunicationManager with a Mock?
Lukas
--
Lukas Renggli
www.lukas-renggli.ch
Jan. 13, 2011
Re: [Pharo-project] [BUG]LargePositiveInteger(Object)>>error:
by Eliot Miranda
Ignore me. I'm deluded. The below should of course produce an error.
Sorry for the noise.
best
Eliot
On Wed, Jan 12, 2011 at 3:52 PM, Eliot Miranda <eliot.miranda(a)gmail.com>wrote:
> Hi All,
>
> I think I've found the reproducible case for the MessageNotUnderstood:
> LargePositiveInteger>>pixelValueForDepth: bug in the
> StackToRegisterMappingCogit. The symptom may be that the register
> arguments get shuffled incorrectly through an inline send miss. Here's an
> example that produces an MNU every time:
>
> | s a ca |
> s := #(1 -1).
> a := Array new: 2.
> ca := ColorArray new: 2.
> a replaceFrom: 1 to: 2 with: s.
> ca replaceFrom: 1 to: 2 with: s.
>
> I'll try and look at this this evening.
>
> best
> Eliot
>
> On Tue, Jan 11, 2011 at 5:36 PM, Stuart Herring <
> st-lists(a)stuartherring.com> wrote:
>
>> It seems to be related to the VM.
>> To reproduce, just open a browser and save and quit.
>> Then opening the image with Cog r2344 or r2345 will result in this
>> error - it seems to be happening in the startup process.
>> If you debug it, the code that apparently causes the problem actually
>> works fine when manually invoked.
>>
>> Earlier versions of Cog don't have this problem - r2316 works fine.
>> I'm using the standard 1.1.1 image on Linux (Omnibrowser is
>> OB-Standard-lr.479)
>>
>> Regards,
>> Stuart
>>
>> On Wed, Jan 12, 2011 at 3:06 AM, Pat Maddox <patmaddox(a)me.com> wrote:
>> > I used the public 1.1.1 oneclick
>> >
>> >
>> > On Jan 6, 2011, at 1:30 PM, Stéphane Ducasse wrote:
>> >
>> >> Thanks pat for the report.
>> >>
>> >> Now could you let us know if you loaded OB or if you used the public
>> 1.1.1 oneclick?
>> >>
>> >> Stef
>> >>
>> >> On Jan 6, 2011, at 9:18 PM, Pat Maddox wrote:
>> >>
>> >>> I opened up an OmniBrowser and scrolled to the very bottom. Then I
>> clicked on my package name, and then a class name.
>> >>>
>> >>> 6 January 2011 12:12:44 pm
>> >>>
>> >>> VM: Mac OS - intel - 1065 - Croquet Closure Cog VM [CoInterpreter
>> VMMaker-oscog.43] Croquet Cog 3.0.0
>> >>> Image: Pharo-1.1.1-- [Latest update: #11414]
>> >>>
>> >>> SecurityManager state:
>> >>> Restricted: false
>> >>> FileAccess: true
>> >>> SocketAccess: true
>> >>> Working Dir /Users/padillac/code/pharo_image
>> >>> Trusted Dir /foobar/tooBar/forSqueak/bogus/
>> >>> Untrusted Dir
>> /Users/padillac/Library/Preferences/Croquet/Internet/Untrusted
>> >>>
>> >>> LargePositiveInteger(Object)>>error:
>> >>> Receiver: 4287876447
>> >>> Arguments and temporary variables:
>> >>> aString: 'MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDepth:'
>> >>> Receiver's instance variables:
>> >>> 4287876447
>> >>>
>> >>> [] in WorldState>>displayWorldSafely:
>> >>> Receiver: a WorldState
>> >>> Arguments and temporary variables:
>> >>> err: 'MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDepth:'
>> >>> rcvr: 4287876447
>> >>> errCtx: OBLazyListMorph>>display:atRow:on:
>> >>> errMorph: an OBLazyListMorph(969408512)
>> >>> Receiver's instance variables:
>> >>> hands: an Array(a HandMorph(843055104))
>> >>> viewBox: 0@0 corner: 2552@1374
>> >>> canvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> damageRecorder: a DamageRecorder
>> >>> stepList: a Heap(StepMessage(#stepAt: -> a
>> SystemWindow(154664960))(a SystemWin...etc...
>> >>> lastStepTime: 805471
>> >>> lastStepMessage: nil
>> >>> lastCycleTime: 805463
>> >>> commandHistory: a CommandHistory
>> >>> alarms: a Heap()
>> >>> lastAlarmTime: 805471
>> >>> menuBuilder: a PragmaMenuBuilder
>> >>>
>> >>> BlockClosure>>valueWithPossibleArgs:
>> >>> Receiver: [:err :rcvr |
>> >>> | errCtx errMorph |
>> >>> errCtx := thisContext.
>> >>> [errCtx := errCtx sender.
>> >>> [err...etc...
>> >>> Arguments and temporary variables:
>> >>> anArray: #('MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDepth:' 42...etc...
>> >>> Receiver's instance variables:
>> >>> outerContext: WorldState>>displayWorldSafely:
>> >>> startpc: 73
>> >>> numArgs: 2
>> >>>
>> >>> [] in BlockClosure>>ifError:
>> >>> Receiver: [aWorld displayWorld]
>> >>> Arguments and temporary variables:
>> >>> errorHandlerBlock: MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDep...etc...
>> >>> ex: [:err :rcvr |
>> >>> | errCtx errMorph |
>> >>> errCtx := thisContext.
>> >>> [errCtx := errCt...etc...
>> >>> Receiver's instance variables:
>> >>> outerContext: WorldState>>displayWorldSafely:
>> >>> startpc: 66
>> >>> numArgs: 0
>> >>>
>> >>> BlockClosure>>valueWithPossibleArgs:
>> >>> Receiver: [:ex | errorHandlerBlock valueWithPossibleArgs: {ex
>> description. ex receiver}]
>> >>> Arguments and temporary variables:
>> >>> anArray: an Array(MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDept...etc...
>> >>> Receiver's instance variables:
>> >>> outerContext: BlockClosure>>ifError:
>> >>> startpc: 40
>> >>> numArgs: 1
>> >>>
>> >>> [] in MethodContext(ContextPart)>>handleSignal:
>> >>> Receiver: BlockClosure>>on:do:
>> >>> Arguments and temporary variables:
>> >>> exception: MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDepth:
>> >>> Receiver's instance variables:
>> >>> sender: BlockClosure>>ifError:
>> >>> pc: 17
>> >>> stackp: 3
>> >>> method: (BlockClosure>>#on:do: "a
>> CompiledMethod(280231936)")
>> >>> closureOrNil: nil
>> >>> receiver: [aWorld displayWorld]
>> >>>
>> >>> BlockClosure>>ensure:
>> >>> Receiver: [(self tempAt: 2)
>> >>> valueWithPossibleArgs: {exception}]
>> >>> Arguments and temporary variables:
>> >>> aBlock: [self tempAt: 3 put: true]
>> >>> complete: nil
>> >>> returnValue: nil
>> >>> Receiver's instance variables:
>> >>> outerContext: MethodContext(ContextPart)>>handleSignal:
>> >>> startpc: 90
>> >>> numArgs: 0
>> >>>
>> >>> MethodContext(ContextPart)>>handleSignal:
>> >>> Receiver: BlockClosure>>on:do:
>> >>> Arguments and temporary variables:
>> >>> exception: MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDepth:
>> >>> val: nil
>> >>> Receiver's instance variables:
>> >>> sender: BlockClosure>>ifError:
>> >>> pc: 17
>> >>> stackp: 3
>> >>> method: (BlockClosure>>#on:do: "a
>> CompiledMethod(280231936)")
>> >>> closureOrNil: nil
>> >>> receiver: [aWorld displayWorld]
>> >>>
>> >>> MessageNotUnderstood(Exception)>>signal
>> >>> Receiver: MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDepth:
>> >>> Arguments and temporary variables:
>> >>>
>> >>> Receiver's instance variables:
>> >>> messageText: nil
>> >>> tag: nil
>> >>> signalContext: MessageNotUnderstood(Exception)>>signal
>> >>> handlerContext: BlockClosure>>on:do:
>> >>> outerContext: nil
>> >>> message: pixelValueForDepth: 32
>> >>> receiver: 4287876447
>> >>> reachedDefaultHandler: false
>> >>>
>> >>> LargePositiveInteger(Object)>>doesNotUnderstand: #pixelValueForDepth:
>> >>> Receiver: 4287876447
>> >>> Arguments and temporary variables:
>> >>> aMessage: pixelValueForDepth: 32
>> >>> exception: MessageNotUnderstood:
>> LargePositiveInteger>>pixelValueForDepth:
>> >>> resumeValue: nil
>> >>> Receiver's instance variables:
>> >>> 4287876447
>> >>>
>> >>> ColorForm>>colormapIfNeededForDepth:
>> >>> Receiver: ColorForm(12x12x8)
>> >>> Arguments and temporary variables:
>> >>> destDepth: 32
>> >>> newMap: a Bitmap of length 256
>> >>> i: 3
>> >>> iLimiT: 256
>> >>> Receiver's instance variables:
>> >>> bits: #[36 29 11 7 11 10 10 11 9 11 95 10 9 9 10 11 11
>> 11 11 11 11 11 10 9 0 8 ...etc...
>> >>> width: 12
>> >>> height: 12
>> >>> depth: 8
>> >>> offset: 0@0
>> >>> colors: a ColorArray((Color r: 0.572 g: 0.804 b:
>> 0.369) (Color r: 0.564 g: 0.76...etc...
>> >>> cachedDepth: nil
>> >>> cachedColormap: nil
>> >>>
>> >>> ColorForm>>colormapIfNeededFor:
>> >>> Receiver: ColorForm(12x12x8)
>> >>> Arguments and temporary variables:
>> >>> destForm: DisplayScreen(2552x1374x32)
>> >>> newMap: nil
>> >>> color: nil
>> >>> pv: nil
>> >>> i: nil
>> >>> iLimiT: nil
>> >>> Receiver's instance variables:
>> >>> bits: #[36 29 11 7 11 10 10 11 9 11 95 10 9 9 10 11 11
>> 11 11 11 11 11 10 9 0 8 ...etc...
>> >>> width: 12
>> >>> height: 12
>> >>> depth: 8
>> >>> offset: 0@0
>> >>> colors: a ColorArray((Color r: 0.572 g: 0.804 b:
>> 0.369) (Color r: 0.564 g: 0.76...etc...
>> >>> cachedDepth: nil
>> >>> cachedColormap: nil
>> >>>
>> >>> FormCanvas>>image:at:sourceRect:rule:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aForm: ColorForm(12x12x8)
>> >>> aPoint: 0@15
>> >>> sourceRect: 0@0 corner: 12@12
>> >>> rule: 24
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> FormCanvas(Canvas)>>translucentImage:at:sourceRect:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aForm: ColorForm(12x12x8)
>> >>> aPoint: 0@15
>> >>> sourceRect: 0@0 corner: 12@12
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> FormCanvas(Canvas)>>translucentImage:at:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aForm: ColorForm(12x12x8)
>> >>> aPoint: 0@15
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> OBLazyListMorph>>display:atRow:on:
>> >>> Receiver: an OBLazyListMorph(969408512)
>> >>> Arguments and temporary variables:
>> >>> item: #renderContentOn:
>> >>> row: 2
>> >>> canvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> drawBounds: 0@14 corner: 190@28
>> >>> top: 15
>> >>> icon: ColorForm(12x12x8)
>> >>> name: #arrowUp
>> >>> Receiver's instance variables:
>> >>> bounds: 0@0 corner: 190@42
>> >>> owner: a TransformMorph(743702528)
>> >>> submorphs: #()
>> >>> fullBounds: 0@0 corner: 190@42
>> >>> color: Color black
>> >>> extension: a MorphExtension (970981376) [other:
>> (errorOnDraw -> true)]
>> >>> listItems: #(#callbackUrlOn:callback:
>> #renderContentOn: nil)
>> >>> font: a StrikeFont(Bitmap DejaVu Sans 9 14)
>> >>> selectedRow: 0
>> >>> selectedRows: a PluggableSet()
>> >>> listSource: an OBPluggableListMorph(155189248)
>> >>> maxWidth: 136
>> >>>
>> >>> OBLazyListMorph(LazyListMorph)>>drawOn:
>> >>> Receiver: an OBLazyListMorph(969408512)
>> >>> Arguments and temporary variables:
>> >>> aCanvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> row: 2
>> >>> rowLimiT: 3
>> >>> Receiver's instance variables:
>> >>> bounds: 0@0 corner: 190@42
>> >>> owner: a TransformMorph(743702528)
>> >>> submorphs: #()
>> >>> fullBounds: 0@0 corner: 190@42
>> >>> color: Color black
>> >>> extension: a MorphExtension (970981376) [other:
>> (errorOnDraw -> true)]
>> >>> listItems: #(#callbackUrlOn:callback:
>> #renderContentOn: nil)
>> >>> font: a StrikeFont(Bitmap DejaVu Sans 9 14)
>> >>> selectedRow: 0
>> >>> selectedRows: a PluggableSet()
>> >>> listSource: an OBPluggableListMorph(155189248)
>> >>> maxWidth: 136
>> >>>
>> >>> FormCanvas(Canvas)>>draw:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> anObject: an OBLazyListMorph(969408512)
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> FormCanvas(Canvas)>>drawMorph:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aMorph: an OBLazyListMorph(969408512)
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> [] in OBLazyListMorph(Morph)>>fullDrawOn:
>> >>> Receiver: an OBLazyListMorph(969408512)
>> >>> Arguments and temporary variables:
>> >>> aCanvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 0@0 corner: 190@42
>> >>> owner: a TransformMorph(743702528)
>> >>> submorphs: #()
>> >>> fullBounds: 0@0 corner: 190@42
>> >>> color: Color black
>> >>> extension: a MorphExtension (970981376) [other:
>> (errorOnDraw -> true)]
>> >>> listItems: #(#callbackUrlOn:callback:
>> #renderContentOn: nil)
>> >>> font: a StrikeFont(Bitmap DejaVu Sans 9 14)
>> >>> selectedRow: 0
>> >>> selectedRows: a PluggableSet()
>> >>> listSource: an OBPluggableListMorph(155189248)
>> >>> maxWidth: 136
>> >>>
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aMorph: an OBLazyListMorph(969408512)
>> >>> bounds: 0@0 corner: 190@42
>> >>> aBlock: [(aCanvas isVisible: self bounds)
>> >>> ifTrue: [aCanvas drawMorph: self].
>> >>> ...etc...
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aMorph: an OBLazyListMorph(969408512)
>> >>> aBlock: [(aCanvas isVisible: self bounds)
>> >>> ifTrue: [aCanvas drawMorph: self].
>> >>> ...etc...
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> OBLazyListMorph(Morph)>>fullDrawOn:
>> >>> Receiver: an OBLazyListMorph(969408512)
>> >>> Arguments and temporary variables:
>> >>> aCanvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 0@0 corner: 190@42
>> >>> owner: a TransformMorph(743702528)
>> >>> submorphs: #()
>> >>> fullBounds: 0@0 corner: 190@42
>> >>> color: Color black
>> >>> extension: a MorphExtension (970981376) [other:
>> (errorOnDraw -> true)]
>> >>> listItems: #(#callbackUrlOn:callback:
>> #renderContentOn: nil)
>> >>> font: a StrikeFont(Bitmap DejaVu Sans 9 14)
>> >>> selectedRow: 0
>> >>> selectedRows: a PluggableSet()
>> >>> listSource: an OBPluggableListMorph(155189248)
>> >>> maxWidth: 136
>> >>>
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> anObject: an OBLazyListMorph(969408512)
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aMorph: an OBLazyListMorph(969408512)
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 2367@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> [] in [] in TransformMorph>>drawSubmorphsOn:
>> >>> Receiver: a TransformMorph(743702528)
>> >>> Arguments and temporary variables:
>> >>> myCanvas: an OBLazyListMorph(969408512)
>> >>> m: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 520@0 corner: 690@213
>> >>> owner: an OBPluggableListMorph(155189248)
>> >>> submorphs: an Array(an OBLazyListMorph(969408512))
>> >>> fullBounds: 520@0 corner: 690@213
>> >>> color: Color transparent
>> >>> extension: a MorphExtension (745537536)
>> >>> transform: a MorphicTransform(angle = 0.0; scale =
>> 1.0; offset = -523@0)
>> >>> smoothing: 1
>> >>> localBounds: nil
>> >>>
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> Receiver: an Array(an OBLazyListMorph(969408512))
>> >>> Arguments and temporary variables:
>> >>> aBlock: [:m | myCanvas fullDrawMorph: m]
>> >>> index: 1
>> >>> Receiver's instance variables:
>> >>> an Array(an OBLazyListMorph(969408512))
>> >>>
>> >>> [] in TransformMorph>>drawSubmorphsOn:
>> >>> Receiver: a TransformMorph(743702528)
>> >>> Arguments and temporary variables:
>> >>> myCanvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 520@0 corner: 690@213
>> >>> owner: an OBPluggableListMorph(155189248)
>> >>> submorphs: an Array(an OBLazyListMorph(969408512))
>> >>> fullBounds: 520@0 corner: 690@213
>> >>> color: Color transparent
>> >>> extension: a MorphExtension (745537536)
>> >>> transform: a MorphicTransform(angle = 0.0; scale =
>> 1.0; offset = -523@0)
>> >>> smoothing: 1
>> >>> localBounds: nil
>> >>>
>> >>> FormCanvas>>transformBy:clippingTo:during:smoothing:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aDisplayTransform: a MorphicTransform(angle = 0.0;
>> scale = 1.0; offset = -523@0...etc...
>> >>> aClipRect: 520@0 corner: 690@213
>> >>> aBlock: [:myCanvas | (self angle ~= 0.0
>> >>> or: [self scale ~= 1.0])
>> >>> ifTrue: [...etc...
>> >>> cellSize: 1
>> >>> innerRect: nil
>> >>> patchRect: nil
>> >>> sourceQuad: nil
>> >>> warp: nil
>> >>> start: nil
>> >>> subCanvas: nil
>> >>> rule: nil
>> >>> i: nil
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 1844@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> TransformMorph>>drawSubmorphsOn:
>> >>> Receiver: a TransformMorph(743702528)
>> >>> Arguments and temporary variables:
>> >>> aCanvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 520@0 corner: 690@213
>> >>> owner: an OBPluggableListMorph(155189248)
>> >>> submorphs: an Array(an OBLazyListMorph(969408512))
>> >>> fullBounds: 520@0 corner: 690@213
>> >>> color: Color transparent
>> >>> extension: a MorphExtension (745537536)
>> >>> transform: a MorphicTransform(angle = 0.0; scale =
>> 1.0; offset = -523@0)
>> >>> smoothing: 1
>> >>> localBounds: nil
>> >>>
>> >>> [] in TransformMorph(Morph)>>fullDrawOn:
>> >>> Receiver: a TransformMorph(743702528)
>> >>> Arguments and temporary variables:
>> >>> aCanvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 520@0 corner: 690@213
>> >>> owner: an OBPluggableListMorph(155189248)
>> >>> submorphs: an Array(an OBLazyListMorph(969408512))
>> >>> fullBounds: 520@0 corner: 690@213
>> >>> color: Color transparent
>> >>> extension: a MorphExtension (745537536)
>> >>> transform: a MorphicTransform(angle = 0.0; scale =
>> 1.0; offset = -523@0)
>> >>> smoothing: 1
>> >>> localBounds: nil
>> >>>
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aMorph: a TransformMorph(743702528)
>> >>> bounds: 520@0 corner: 690@213
>> >>> aBlock: [(aCanvas isVisible: self bounds)
>> >>> ifTrue: [aCanvas drawMorph: self].
>> >>> ...etc...
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 1844@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aMorph: a TransformMorph(743702528)
>> >>> aBlock: [(aCanvas isVisible: self bounds)
>> >>> ifTrue: [aCanvas drawMorph: self].
>> >>> ...etc...
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 1844@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> TransformMorph(Morph)>>fullDrawOn:
>> >>> Receiver: a TransformMorph(743702528)
>> >>> Arguments and temporary variables:
>> >>> aCanvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 520@0 corner: 690@213
>> >>> owner: an OBPluggableListMorph(155189248)
>> >>> submorphs: an Array(an OBLazyListMorph(969408512))
>> >>> fullBounds: 520@0 corner: 690@213
>> >>> color: Color transparent
>> >>> extension: a MorphExtension (745537536)
>> >>> transform: a MorphicTransform(angle = 0.0; scale =
>> 1.0; offset = -523@0)
>> >>> smoothing: 1
>> >>> localBounds: nil
>> >>>
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> anObject: a TransformMorph(743702528)
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 1844@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> Receiver: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Arguments and temporary variables:
>> >>> aMorph: a TransformMorph(743702528)
>> >>> Receiver's instance variables:
>> >>> target: nil
>> >>> filterSelector: nil
>> >>> origin: 1844@187
>> >>> clipRect: 2364@187 corner: 2534@400
>> >>> form: DisplayScreen(2552x1374x32)
>> >>> port: a GrafPort
>> >>> shadowColor: nil
>> >>>
>> >>> [] in [] in OBPluggableListMorph(Morph)>>drawSubmorphsOn:
>> >>> Receiver: an OBPluggableListMorph(155189248)
>> >>> Arguments and temporary variables:
>> >>> canvas: a TransformMorph(743702528)
>> >>> m: a FormCanvas on: DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 520@0 corner: 690@213
>> >>> owner: an OBPane(127401984)
>> >>> submorphs: an Array(a TransformMorph(743702528))
>> >>> fullBounds: 520@0 corner: 690@213
>> >>> color: Color white
>> >>> extension: a MorphExtension (132644864) [other:
>> (dragEnabled -> true) (dropEna...etc...
>> >>> borderWidth: 0
>> >>> borderColor: Color black
>> >>> model: an OBColumn()
>> >>> slotName: nil
>> >>> open: false
>> >>> scrollBar: a ScrollBar(161742848)
>> >>> scroller: a TransformMorph(743702528)
>> >>> retractableScrollBar: false
>> >>> scrollBarOnLeft: false
>> >>> getMenuSelector: #menu:
>> >>> getMenuTitleSelector: nil
>> >>> hasFocus: false
>> >>> hScrollBar: a ScrollBar(990642176)
>> >>> list: nil
>> >>> getListSelector: #list
>> >>> getListSizeSelector: #listSize
>> >>> getListElementSelector: #listAt:
>> >>> getIndexSelector: #selection
>> >>> setIndexSelector: #selection:
>> >>> keystrokeActionSelector: #keystroke:from:
>> >>> autoDeselect: false
>> >>> lastKeystrokeTime: 0
>> >>> lastKeystrokes: ''
>> >>> doubleClickSelector: #doubleClick
>> >>> handlesBasicKeys: nil
>> >>> potentialDropRow: nil
>> >>> listMorph: an OBLazyListMorph(969408512)
>> >>> hScrollRangeCache: nil
>> >>>
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> Receiver: an Array(a TransformMorph(743702528))
>> >>> Arguments and temporary variables:
>> >>> aBlock: [:m | canvas fullDrawMorph: m]
>> >>> index: 1
>> >>> Receiver's instance variables:
>> >>> an Array(a TransformMorph(743702528))
>> >>>
>> >>> [] in OBPluggableListMorph(Morph)>>drawSubmorphsOn:
>> >>> Receiver: an OBPluggableListMorph(155189248)
>> >>> Arguments and temporary variables:
>> >>> canvas: a FormCanvas on:
>> DisplayScreen(2552x1374x32)
>> >>> Receiver's instance variables:
>> >>> bounds: 520@0 corner: 690@213
>> >>> owner: an OBPane(127401984)
>> >>> submorphs: an Array(a TransformMorph(743702528))
>> >>> fullBounds: 520@0 corner: 690@213
>> >>> color: Color white
>> >>> extension: a MorphExtension (132644864) [other:
>> (dragEnabled -> true) (dropEna...etc...
>> >>> borderWidth: 0
>> >>> borderColor: Color black
>> >>> model: an OBColumn()
>> >>> slotName: nil
>> >>> open: false
>> >>> scrollBar: a ScrollBar(161742848)
>> >>> scroller: a TransformMorph(743702528)
>> >>> retractableScrollBar: false
>> >>> scrollBarOnLeft: false
>> >>> getMenuSelector: #menu:
>> >>> getMenuTitleSelector: nil
>> >>> hasFocus: false
>> >>> hScrollBar: a ScrollBar(990642176)
>> >>> list: nil
>> >>> getListSelector: #list
>> >>> getListSizeSelector: #listSize
>> >>> getListElementSelector: #listAt:
>> >>> getIndexSelector: #selection
>> >>> setIndexSelector: #selection:
>> >>> keystrokeActionSelector: #keystroke:from:
>> >>> autoDeselect: false
>> >>> lastKeystrokeTime: 0
>> >>> lastKeystrokes: ''
>> >>> doubleClickSelector: #doubleClick
>> >>> handlesBasicKeys: nil
>> >>> potentialDropRow: nil
>> >>> listMorph: an OBLazyListMorph(969408512)
>> >>> hScrollRangeCache: nil
>> >>>
>> >>>
>> >>> --- The full stack ---
>> >>> LargePositiveInteger(Object)>>error:
>> >>> [] in WorldState>>displayWorldSafely:
>> >>> BlockClosure>>valueWithPossibleArgs:
>> >>> [] in BlockClosure>>ifError:
>> >>> BlockClosure>>valueWithPossibleArgs:
>> >>> [] in MethodContext(ContextPart)>>handleSignal:
>> >>> BlockClosure>>ensure:
>> >>> MethodContext(ContextPart)>>handleSignal:
>> >>> MessageNotUnderstood(Exception)>>signal
>> >>> LargePositiveInteger(Object)>>doesNotUnderstand: #pixelValueForDepth:
>> >>> ColorForm>>colormapIfNeededForDepth:
>> >>> ColorForm>>colormapIfNeededFor:
>> >>> FormCanvas>>image:at:sourceRect:rule:
>> >>> FormCanvas(Canvas)>>translucentImage:at:sourceRect:
>> >>> FormCanvas(Canvas)>>translucentImage:at:
>> >>> OBLazyListMorph>>display:atRow:on:
>> >>> OBLazyListMorph(LazyListMorph)>>drawOn:
>> >>> FormCanvas(Canvas)>>draw:
>> >>> FormCanvas(Canvas)>>drawMorph:
>> >>> [] in OBLazyListMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> OBLazyListMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in TransformMorph>>drawSubmorphsOn:
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> [] in TransformMorph>>drawSubmorphsOn:
>> >>> FormCanvas>>transformBy:clippingTo:during:smoothing:
>> >>> TransformMorph>>drawSubmorphsOn:
>> >>> [] in TransformMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> TransformMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in OBPluggableListMorph(Morph)>>drawSubmorphsOn:
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> [] in OBPluggableListMorph(Morph)>>drawSubmorphsOn:
>> >>> - - - - - - - - - - - - - - -
>> >>> - - - - - - - - - - - - - - - - - -
>> >>> OBPluggableListMorph(Morph)>>drawSubmorphsOn:
>> >>> OBPluggableListMorph(PluggableListMorph)>>drawSubmorphsOn:
>> >>> [] in OBPluggableListMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> OBPluggableListMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in OBPane(Morph)>>drawSubmorphsOn:
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> [] in OBPane(Morph)>>drawSubmorphsOn:
>> >>> FormCanvas>>clipBy:during:
>> >>> OBPane(Morph)>>drawSubmorphsOn:
>> >>> [] in OBPane(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> OBPane(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in TransformMorph>>drawSubmorphsOn:
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> [] in TransformMorph>>drawSubmorphsOn:
>> >>> FormCanvas>>transformBy:clippingTo:during:smoothing:
>> >>> TransformMorph>>drawSubmorphsOn:
>> >>> [] in TransformMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> TransformMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in OBPaneScroller(Morph)>>drawSubmorphsOn:
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> [] in OBPaneScroller(Morph)>>drawSubmorphsOn:
>> >>> OBPaneScroller(Morph)>>drawSubmorphsOn:
>> >>> [] in OBPaneScroller(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> OBPaneScroller(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in OBGroupingMorph(Morph)>>drawSubmorphsOn:
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> [] in OBGroupingMorph(Morph)>>drawSubmorphsOn:
>> >>> OBGroupingMorph(Morph)>>drawSubmorphsOn:
>> >>> [] in OBGroupingMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> OBGroupingMorph(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in SystemWindow(Morph)>>drawSubmorphsOn:
>> >>> Array(SequenceableCollection)>>reverseDo:
>> >>> [] in SystemWindow(Morph)>>drawSubmorphsOn:
>> >>> FormCanvas>>clipBy:during:
>> >>> SystemWindow(Morph)>>drawSubmorphsOn:
>> >>> [] in SystemWindow(Morph)>>fullDrawOn:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> SystemWindow(Morph)>>fullDrawOn:
>> >>> FormCanvas(Canvas)>>fullDraw:
>> >>> FormCanvas(Canvas)>>fullDrawMorph:
>> >>> [] in [] in WorldState>>drawWorld:submorphs:invalidAreasOn:
>> >>> Rectangle>>allAreasOutsideList:startingAt:do:
>> >>> Rectangle>>allAreasOutsideList:do:
>> >>> [] in WorldState>>drawWorld:submorphs:invalidAreasOn:
>> >>> Array(SequenceableCollection)>>do:
>> >>> WorldState>>drawWorld:submorphs:invalidAreasOn:
>> >>> [] in WorldState>>displayWorld:submorphs:
>> >>> FormCanvas>>roundCornersOf:in:during:
>> >>> FormCanvas(Canvas)>>roundCornersOf:during:
>> >>> WorldState>>displayWorld:submorphs:
>> >>> PasteUpMorph>>privateOuterDisplayWorld
>> >>> PasteUpMorph>>displayWorld
>> >>> [] in WorldState>>displayWorldSafely:
>> >>> BlockClosure>>on:do:
>> >>> BlockClosure>>ifError:
>> >>> WorldState>>displayWorldSafely:
>> >>> WorldState>>doOneCycleNowFor:
>> >>> WorldState>>doOneCycleFor:
>> >>> PasteUpMorph>>doOneCycle
>> >>> [] in Project class>>spawnNewProcess
>> >>> [] in BlockClosure>>newProcess
>> >>>
>> >>
>> >>
>> >
>> >
>> >
>>
>>
>
Jan. 13, 2011
Re: [Pharo-project] SUNit
by Benoit St-Jean
I guess I<ve explained myself poorly.
Let's say that my singleton class, let's call it CommunicationManager must be
initialized and connected to a different port each and every time. Let's say my
test cases class are MotorSensorTestCase, HumiditySensorReceiver,
TemperatureSensorTestCase and WindSensorTestCase.
Imagine, for each of those 4 classes, I define the a resource for each BUT each
is using/calling the same CommunicationManager but initialize it to a different
port. Since the TestResources are *all* initialized at once before running a
test suite, I end up having all test cases using a resource (my
CommunicationManager sole instance) but with the last port to which it was
initialized.
I don't mind the order of execution, as long as during the execution of all
tests within a test case class, the singleton uses the right port. But since
the resources are not individually initialized *before* execution of the tests
in a test case class, I end up with whatever executed last before running the
test suite.
Am I losing you guys?!?!
-----------------
Benoit St-Jean
Yahoo! Messenger: bstjean
A standpoint is an intellectual horizon of radius zero.
(Albert Einstein)
________________________________
From: Lukas Renggli <renggli(a)gmail.com>
To: Pharo-project(a)lists.gforge.inria.fr
Sent: Wed, January 12, 2011 3:12:16 PM
Subject: Re: [Pharo-project] SUNit
> That I knew but my problem is that *all* resources are initialized *at once*
> before running the test suite. I would need *only* the proper resource to
> be initialized before running all tests in every TestCase subclass... My
> problem lies in the fact that the resource I need is a singleton instance
> that is initialized based on specific parameters, each time different from
> one test case to another. So what happens is that all tests cases end up
> using this singleton with the way it was last initialized before running the
> test suite, which ain't good!
Tests do not run in a predefined order, so you cannot make assumptions on that.
What you can do, is to let your TestResource return different
resources based on the context, i.e. the test class that requests it.
MyTestCase>>singleton
^ MyTestResource current singletonFor: self
MyTestResource>>singletonFor: aTestCase
^ singletonCache at: aTestCase class ifAbsentPut: [ aTestCase
buildSingleton ]
If you want to see an example of this pattern have a look at the tests
of PetitParser. PPCompositeParserTest (and its subclasses) and
PPParserResource do exactly follow that pattern.
Lukas
--
Lukas Renggli
www.lukas-renggli.ch
Jan. 13, 2011
Re: [Pharo-project] [update 1.2] #12297
by Igor Stasenko
On 12 January 2011 23:17, Sven Van Caekenberghe <sven(a)beta9.be> wrote:
>
> On 12 Jan 2011, at 22:12, Igor Stasenko wrote:
>
>> Ubuntu changes its skin every single release.. and i am pretty sure
>> that there are
>> books, screencasts, screnshots, tutorials, etc for Ubuntu as well.
>>
>> (btw i think they established really good tradition, because people
>> could quickly distinguish one version from another
>> by simply taking a glance on the screen)
>
> Good point: new look == new version
>
> The compatibility point is also good.
>
> The OS independence point is also good.
>
>> Get used to live in ever changing world :)
>>
>>> you, and all Pharo advanced users can easily change the theme, and you
>>> probbaly even have a script prepare that you run in each clean image to
>>> adapt it to your taste.
>>
>> UIThemeWatery2 beCurrent.
>>
>> be my guest :) http://bit.ly/gi7vb7
>>
>>
>>> But I think we should make the life easier for new comers.
>>> In addition, it was never discussed in the mailing list such change (at
>>> least I didn't see it).
>>>
>>
>> i agree, it is better to discuss broadly before changing.
>>
>> I like the glamourous theme because it is minimalistic and elegant.
>> Still the colors are a bit wrong as to my taste, especially selection
>> (light blue).
>
> I made my own subclass overriding 3 color constants to orange.
> 'Sven-Glamour-Theme' @ SqueakSource project ADayAtTheBeach.
>
Kewl.. Orange is much much better.
I modified it a little. Check it out
> Sven
>
>
--
Best regards,
Igor Stasenko AKA sig.
Jan. 13, 2011