I want to put add an imageMorph on top of another imageMorph.
I can do this with the following method (note SymbolBlank is an imageMorph
MyBoard>>addSymbol
|im|
im := SymbolBlank new.
self addMorph: im.
im topLeft: 2@2.
I want to enhance this so I can choose one of a collection of imageMorphs to add.
I created a class, SymbolArray, that is a subclass of OrderedCollection with the following initialize method. Each of the items I'm adding (SymbolBlank, SymbolGet, etc) is an imageMorph.
SymbolArray>>initialize
super initialize.
self add: SymbolBlank new.
self add: SymbolGet new.
self add: SymbolProcess new.
self add: SymbolPut new.
self add: SymbolIf new.
self add: SymbolWhile new.
Then I tried to modify the addSymbol method as show below.
When I do, I get the following error message which sounds like I don't have an element at index 1.
SymbolArray(OrderedCollection)>>errorNoSuchElement
SymbolArray(OrderedCollection)>>at:
| sa si |
sa := SymbolArray new.
si := sa at: 1.
self addMorph: si.
si topLeft: 2@2.
I hope someone can help me figure out how to accomplish what I want to do.
I think you might need to call SymbolArray>>intialize by your self.
If you look at the chain of message sends starting from 'SymbolArray new' 1) OrderedCollection new 2) OrderedCollection new: 3) Behavior basicNew
There is no call to initialize.
On Sat, Nov 7, 2009 at 16:28, Christine Wolfe cwdw01@earthlink.net wrote:
I want to put add an imageMorph on top of another imageMorph.
I can do this with the following method (note SymbolBlank is an imageMorph
MyBoard>>addSymbol
|im|
im := SymbolBlank new.
self addMorph: im.
im topLeft: 2@2.
I want to enhance this so I can choose one of a collection of imageMorphs to add.
I created a class, SymbolArray, that is a subclass of OrderedCollection with the following initialize method. Each of the items I’m adding (SymbolBlank, SymbolGet, etc) is an imageMorph.
SymbolArray>>initialize
super initialize.
self add: SymbolBlank new.
self add: SymbolGet new.
self add: SymbolProcess new.
self add: SymbolPut new.
self add: SymbolIf new.
self add: SymbolWhile new.
Then I tried to modify the addSymbol method as show below.
When I do, I get the following error message which sounds like I don’t have an element at index 1…
SymbolArray(OrderedCollection)>>errorNoSuchElement
SymbolArray(OrderedCollection)>>at:
| sa si |
sa := SymbolArray new.
si := sa at: 1.
self addMorph: si.
si topLeft: 2@2.
I hope someone can help me figure out how to accomplish what I want to do.
Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
That worked!!! Thanks - I never would have figure it out on my own.
I'm so confused though. I've never had to explicitly call an initialize method before - they seem to be invoked automatically when I use the word "new". Should I always call the initialize when I create a new instance?
@Herbert - I'm making a pinball machine in which the little ball follows the order of execution of a student entered flowchart.at least that's what I'm trying to do ;-)
From: beginners-bounces@lists.squeakfoundation.org [mailto:beginners-bounces@lists.squeakfoundation.org] On Behalf Of Alex Schenkman Sent: Sunday, November 08, 2009 3:59 AM To: A friendly place to get answers to even the most basic questions about Squeak. Subject: Re: [Newbies] OrderedCollection if imageMorphs
I think you might need to call SymbolArray>>intialize by your self.
If you look at the chain of message sends starting from 'SymbolArray new'
1) OrderedCollection new
2) OrderedCollection new:
3) Behavior basicNew
There is no call to initialize.
On Sat, Nov 7, 2009 at 16:28, Christine Wolfe cwdw01@earthlink.net wrote:
I want to put add an imageMorph on top of another imageMorph.
I can do this with the following method (note SymbolBlank is an imageMorph
MyBoard>>addSymbol
|im|
im := SymbolBlank new.
self addMorph: im.
im topLeft: 2@2.
I want to enhance this so I can choose one of a collection of imageMorphs to add.
I created a class, SymbolArray, that is a subclass of OrderedCollection with the following initialize method. Each of the items I'm adding (SymbolBlank, SymbolGet, etc) is an imageMorph.
SymbolArray>>initialize
super initialize.
self add: SymbolBlank new.
self add: SymbolGet new.
self add: SymbolProcess new.
self add: SymbolPut new.
self add: SymbolIf new.
self add: SymbolWhile new.
Then I tried to modify the addSymbol method as show below.
When I do, I get the following error message which sounds like I don't have an element at index 1.
SymbolArray(OrderedCollection)>>errorNoSuchElement
SymbolArray(OrderedCollection)>>at:
| sa si |
sa := SymbolArray new.
si := sa at: 1.
self addMorph: si.
si topLeft: 2@2.
I hope someone can help me figure out how to accomplish what I want to do.
_______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
On Sun, Nov 8, 2009 at 14:28, Christine Wolfe cwdw01@earthlink.net wrote:
I’m so confused though. I’ve never had to explicitly call an initialize method before – they seem to be invoked automatically when I use the word “new”. Should I always call the initialize when I create a new instance?
I'm not sure, but I think so. Maybe the super classes you have been so far using are sending #initialize as part of their instantiation routine?
For sure I'm going to start now - I don't see where it could ever hurt anything if I initialize twice.
From: beginners-bounces@lists.squeakfoundation.org [mailto:beginners-bounces@lists.squeakfoundation.org] On Behalf Of Alex Schenkman Sent: Sunday, November 08, 2009 9:00 AM To: A friendly place to get answers to even the most basic questions about Squeak. Subject: Re: [Newbies] OrderedCollection if imageMorphs
On Sun, Nov 8, 2009 at 14:28, Christine Wolfe cwdw01@earthlink.net wrote:
I'm so confused though. I've never had to explicitly call an initialize method before - they seem to be invoked automatically when I use the word "new". Should I always call the initialize when I create a new instance?
I'm not sure, but I think so.
Maybe the super classes you have been so far using are sending #initialize as part of their instantiation routine?
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> For sure I'm going to start now - I don't see where it could ever hurt Christine> anything if I initialize twice.
It can, so I wouldn't conclude so quickly, or cargo-cult this one without some more research.
Behavior>>#new calls #initialize, so someone broke the chain between there and your classes of interest by overriding #new without respecting the existing protocol.
Thanks - I thought it odd that I had to explicitly call this initialize. I went back and took out the call to initialize just to be sure that was what making the difference and it was. So for some reason my SymbolArray>>new is not calling the method unlike all my other ones. If I find that it is something that I've done, I'll be sure to let the forum know.
-----Original Message----- From: Randal L. Schwartz [mailto:merlyn@stonehenge.com] Sent: Sunday, November 08, 2009 10:55 AM To: Christine Wolfe Cc: 'A friendly place to get answers to even the most basic questions about Squeak.' Subject: Re: [Newbies] OrderedCollection if imageMorphs
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> For sure I'm going to start now - I don't see where it could ever hurt Christine> anything if I initialize twice.
It can, so I wouldn't conclude so quickly, or cargo-cult this one without some more research.
Behavior>>#new calls #initialize, so someone broke the chain between there and your classes of interest by overriding #new without respecting the existing protocol.
Hi Christine,
CW> @Herbert Im making a pinball machine in which thelittle CW> ball follows the order of execution of a student entered CW> flowchart atleast thats what Im trying to do ;-)
sounds fun to build and fun to use when it's finished.
Thanks,
Herbert
Christine,
SymbolArray>>>initialize CW> super initialize. CW> self add: SymbolBlank new. CW> self add: SymbolGet new. CW> self add: SymbolProcess new. CW> self add: SymbolPut new. CW> self add: SymbolIf new. CW> self add: SymbolWhile new.
the names of your symbols make me courious about what you try to build.
Care to share?
Cheers,
Herbert
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> I created a class, SymbolArray, that is a subclass of Christine> OrderedCollection with the following initialize method. Each of the Christine> items I'm adding (SymbolBlank, SymbolGet, etc) is an imageMorph.
Ahh, there's the mistake... missed it before.
You really really really do *not* want to create a subclass of OrderedCollection.
Your object will *have* an OrderedCollection, but should not *be* one.
If you want to respond to all of the protocol of OrderedCollection, feel free to delegate it to your actual instance variable.
Yes, it's a bright shiny object to want to subclass that, but just like subclassing SmallInteger, it's both legal and dumb. :)
Oh, I'm so so sorry - I thought it was OK to ask dumb questions on the newbie forum (blush) I'll try to figure out how to make an instance variable an order collection.
-----Original Message----- From: Randal L. Schwartz [mailto:merlyn@stonehenge.com] Sent: Sunday, November 08, 2009 4:06 PM To: Christine Wolfe Cc: beginners@lists.squeakfoundation.org Subject: Re: [Newbies] OrderedCollection if imageMorphs
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> I created a class, SymbolArray, that is a subclass of Christine> OrderedCollection with the following initialize method. Each of the Christine> items I'm adding (SymbolBlank, SymbolGet, etc) is an imageMorph.
Ahh, there's the mistake... missed it before.
You really really really do *not* want to create a subclass of OrderedCollection.
Your object will *have* an OrderedCollection, but should not *be* one.
If you want to respond to all of the protocol of OrderedCollection, feel free to delegate it to your actual instance variable.
Yes, it's a bright shiny object to want to subclass that, but just like subclassing SmallInteger, it's both legal and dumb. :)
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> Oh, I'm so so sorry - I thought it was OK to ask dumb questions on Christine> the newbie forum (blush) I'll try to figure out how to make an Christine> instance variable an order collection.
It's perfectly OK, and that's why you were corrected. :)
Basically, you'll do the following:
* add an instance variable: contents
on your instance side, add:
initialize super initialize. contents := OrderedCollection new.
then for each item of the collection protocol, delegate it, as in:
add: anItem ^contents add: anItem.
includes: anItem ^contents includes: anItem.
size ^contents size.
and so on. If you get really tired of adding all of them, just add them as you need them (when the debugger tells you :).
If you wanna get really tricky, you can add a #doesNotUnderstand: handler to perform the method on the contents variable, but that can mess up your debugging, so it's better if you don't.
Oh wow! thanks - having the sample code will be a huge help. I'll give it a try.
-----Original Message----- From: Randal L. Schwartz [mailto:merlyn@stonehenge.com] Sent: Sunday, November 08, 2009 8:03 PM To: Christine Wolfe Cc: beginners@lists.squeakfoundation.org Subject: Re: [Newbies] OrderedCollection if imageMorphs
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> Oh, I'm so so sorry - I thought it was OK to ask dumb questions on Christine> the newbie forum (blush) I'll try to figure out how to make an Christine> instance variable an order collection.
It's perfectly OK, and that's why you were corrected. :)
Basically, you'll do the following:
* add an instance variable: contents
on your instance side, add:
initialize super initialize. contents := OrderedCollection new.
then for each item of the collection protocol, delegate it, as in:
add: anItem ^contents add: anItem.
includes: anItem ^contents includes: anItem.
size ^contents size.
and so on. If you get really tired of adding all of them, just add them as you need them (when the debugger tells you :).
If you wanna get really tricky, you can add a #doesNotUnderstand: handler to perform the method on the contents variable, but that can mess up your debugging, so it's better if you don't.
On 09.11.2009, at 02:08, Christine Wolfe wrote:
Oh wow! thanks - having the sample code will be a huge help. I'll give it a try.
-----Original Message----- From: Randal L. Schwartz [mailto:merlyn@stonehenge.com] Sent: Sunday, November 08, 2009 8:03 PM To: Christine Wolfe Cc: beginners@lists.squeakfoundation.org Subject: Re: [Newbies] OrderedCollection if imageMorphs
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> Oh, I'm so so sorry - I thought it was OK to ask dumb questions on Christine> the newbie forum (blush) I'll try to figure out how to make an Christine> instance variable an order collection.
It's perfectly OK, and that's why you were corrected. :)
Basically, you'll do the following:
- add an instance variable: contents
on your instance side, add:
initialize super initialize. contents := OrderedCollection new.
then for each item of the collection protocol, delegate it, as in:
add: anItem ^contents add: anItem.
includes: anItem ^contents includes: anItem.
size ^contents size.
and so on. If you get really tired of adding all of them, just add them as you need them (when the debugger tells you :).
Why would you want to add all these methods and your own class in the first place? They are there already, perfectly usable.
If you wanna get really tricky, you can add a #doesNotUnderstand: handler to perform the method on the contents variable, but that can mess up your debugging, so it's better if you don't.
Err, now that goes into the land of advanced applied magic. Please ignore that last paragraph ;)
Christine, if you want an OrderedCollection of ImageMorphs (as you wrote in the subject) then do just that. Create an OrderedCollection, not a subclass of it. And add ImageMorphs, not subclasses of ImageMorphs (unless they indeed do specific processing - but even then I'd probably make only one ImageMorph subclass and customize that).
It is often unnecessary to create your own classes for everything. For example, if the only difference of a regular ImageMorph and your own Morph subclass is the image it shows, then do not create a subclass. Just assign the right image. And maybe assign an event handler, no need for subclassing there either.
OTOH, when I look at your high-level goal "I’m making a pinball machine in which the little ball follows the order of execution of a student entered flowchart" I don't really see the need for a "SymbolArray" nor even "OrderedCollection of ImageMorphs". Maybe you should design the UI first and then implement whatever is necessary to make it work?
- Bert -
Hi Bert,
Thanks for the info. I have finished the IU and have it working fine in PowerPoint ;-) animations. Now I want to move it to a real programming language. The reason for the ordered collection is this. For each position in the flowchart, there is a space on the pinball machine were the user can click - with each click, the next symbol in the ordered collection is displayed. When the user sees the symbol he wants in that position, he will stop clicking and move on to the next position. (The spaces for the flowcharting symbols is a matrix of these ordered collections.)
My original misunderstanding was in thinking that I should use orderedcollection as an object (which I know it is) instead of thinking of it as more of a datatype kind of thing..... This forum has been super helpful.
At 11:24 AM 11/9/2009, Bert Freudenberg wrote:
On 09.11.2009, at 02:08, Christine Wolfe wrote:
Oh wow! thanks - having the sample code will be a huge help. I'll give it a try.
-----Original Message----- From: Randal L. Schwartz [mailto:merlyn@stonehenge.com] Sent: Sunday, November 08, 2009 8:03 PM To: Christine Wolfe Cc: beginners@lists.squeakfoundation.org Subject: Re: [Newbies] OrderedCollection if imageMorphs
>"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> Oh, I'm so so sorry - I thought it was OK to ask dumb questions on Christine> the newbie forum (blush) I'll try to figure out how to make an Christine> instance variable an order collection.
It's perfectly OK, and that's why you were corrected. :)
Basically, you'll do the following:
- add an instance variable: contents
on your instance side, add:
initialize super initialize. contents := OrderedCollection new.
then for each item of the collection protocol, delegate it, as in:
add: anItem ^contents add: anItem.
includes: anItem ^contents includes: anItem.
size ^contents size.
and so on. If you get really tired of adding all of them, just add them as you need them (when the debugger tells you :).
Why would you want to add all these methods and your own class in the first place? They are there already, perfectly usable.
If you wanna get really tricky, you can add a #doesNotUnderstand: handler to perform the method on the contents variable, but that can mess up your debugging, so it's better if you don't.
Err, now that goes into the land of advanced applied magic. Please ignore that last paragraph ;)
Christine, if you want an OrderedCollection of ImageMorphs (as you wrote in the subject) then do just that. Create an OrderedCollection, not a subclass of it. And add ImageMorphs, not subclasses of ImageMorphs (unless they indeed do specific processing - but even then I'd probably make only one ImageMorph subclass and customize that).
It is often unnecessary to create your own classes for everything. For example, if the only difference of a regular ImageMorph and your own Morph subclass is the image it shows, then do not create a subclass. Just assign the right image. And maybe assign an event handler, no need for subclassing there either.
OTOH, when I look at your high-level goal "I'm making a pinball machine in which the little ball follows the order of execution of a student entered flowchart" I don't really see the need for a "SymbolArray" nor even "OrderedCollection of ImageMorphs". Maybe you should design the UI first and then implement whatever is necessary to make it work?
- Bert -
Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
Bert, I followed your suggestion for making an orderedcollection and just adding ImageMorph as the items in the collection. Now I am trying to figure out how to assign an image to each item and then display it in another morph.
Here's what I have so far but I can't get it to show up.
newCellAt: i at: j | c sa leftValue topValue | sa := OrderedCollection new. sa add: ImageMorph new. sa add: ImageMorph new. sa add: ImageMorph new.
c := sa at: 2. c image: (Form fromFileNamed: 'FCIf.png'). leftValue := 10. c width: 100. topValue := 20. c height: 70].
c position: (leftValue) @ (topValue). owner addMorph: c.
-----Original Message----- From: beginners-bounces@lists.squeakfoundation.org [mailto:beginners-bounces@lists.squeakfoundation.org] On Behalf Of Bert Freudenberg Sent: Monday, November 09, 2009 11:25 AM To: A friendly place to get answers to even the most basic questions about Squeak. Subject: Re: [Newbies] OrderedCollection if imageMorphs
On 09.11.2009, at 02:08, Christine Wolfe wrote:
Oh wow! thanks - having the sample code will be a huge help. I'll give it a try.
-----Original Message----- From: Randal L. Schwartz [mailto:merlyn@stonehenge.com] Sent: Sunday, November 08, 2009 8:03 PM To: Christine Wolfe Cc: beginners@lists.squeakfoundation.org Subject: Re: [Newbies] OrderedCollection if imageMorphs
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> Oh, I'm so so sorry - I thought it was OK to ask dumb questions on Christine> the newbie forum (blush) I'll try to figure out how to make an Christine> instance variable an order collection.
It's perfectly OK, and that's why you were corrected. :)
Basically, you'll do the following:
- add an instance variable: contents
on your instance side, add:
initialize super initialize. contents := OrderedCollection new.
then for each item of the collection protocol, delegate it, as in:
add: anItem ^contents add: anItem.
includes: anItem ^contents includes: anItem.
size ^contents size.
and so on. If you get really tired of adding all of them, just add them as you need them (when the debugger tells you :).
Why would you want to add all these methods and your own class in the first place? They are there already, perfectly usable.
If you wanna get really tricky, you can add a #doesNotUnderstand: handler to perform the method on the contents variable, but that can mess up your debugging, so it's better if you don't.
Err, now that goes into the land of advanced applied magic. Please ignore that last paragraph ;)
Christine, if you want an OrderedCollection of ImageMorphs (as you wrote in the subject) then do just that. Create an OrderedCollection, not a subclass of it. And add ImageMorphs, not subclasses of ImageMorphs (unless they indeed do specific processing - but even then I'd probably make only one ImageMorph subclass and customize that).
It is often unnecessary to create your own classes for everything. For example, if the only difference of a regular ImageMorph and your own Morph subclass is the image it shows, then do not create a subclass. Just assign the right image. And maybe assign an event handler, no need for subclassing there either.
OTOH, when I look at your high-level goal "I'm making a pinball machine in which the little ball follows the order of execution of a student entered flowchart" I don't really see the need for a "SymbolArray" nor even "OrderedCollection of ImageMorphs". Maybe you should design the UI first and then implement whatever is necessary to make it work?
- Bert -
_______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
Oops - I sent this too soon. I changed owner addMorph to self addMorph and it works ;-)
I still have a question though. I have an instance variable cells that I defined as cells := Matrix rows: 7 columns: 11 tabulate: [ :i :j | self newCellAt: i at: j].
Each cell of the matrix is going to be an orderedcollection of images. How can I refer to an individual cell of the matrix?
Bert, I followed your suggestion for making an orderedcollection and just adding ImageMorph as the items in the collection. Now I am trying to figure out how to assign an image to each item and then display it in another morph.
Here's what I have so far but I can't get it to show up.
newCellAt: i at: j | c sa leftValue topValue | sa := OrderedCollection new. sa add: ImageMorph new. sa add: ImageMorph new. sa add: ImageMorph new.
c := sa at: 2. c image: (Form fromFileNamed: 'FCIf.png'). leftValue := 10. c width: 100. topValue := 20. c height: 70].
c position: (leftValue) @ (topValue). owner addMorph: c.
-----Original Message----- From: beginners-bounces@lists.squeakfoundation.org [mailto:beginners-bounces@lists.squeakfoundation.org] On Behalf Of Bert Freudenberg Sent: Monday, November 09, 2009 11:25 AM To: A friendly place to get answers to even the most basic questions about Squeak. Subject: Re: [Newbies] OrderedCollection if imageMorphs
On 09.11.2009, at 02:08, Christine Wolfe wrote:
Oh wow! thanks - having the sample code will be a huge help. I'll give it a try.
-----Original Message----- From: Randal L. Schwartz [mailto:merlyn@stonehenge.com] Sent: Sunday, November 08, 2009 8:03 PM To: Christine Wolfe Cc: beginners@lists.squeakfoundation.org Subject: Re: [Newbies] OrderedCollection if imageMorphs
"Christine" == Christine Wolfe cwdw01@earthlink.net writes:
Christine> Oh, I'm so so sorry - I thought it was OK to ask dumb questions on Christine> the newbie forum (blush) I'll try to figure out how to make an Christine> instance variable an order collection.
It's perfectly OK, and that's why you were corrected. :)
Basically, you'll do the following:
- add an instance variable: contents
on your instance side, add:
initialize super initialize. contents := OrderedCollection new.
then for each item of the collection protocol, delegate it, as in:
add: anItem ^contents add: anItem.
includes: anItem ^contents includes: anItem.
size ^contents size.
and so on. If you get really tired of adding all of them, just add them as you need them (when the debugger tells you :).
Why would you want to add all these methods and your own class in the first place? They are there already, perfectly usable.
If you wanna get really tricky, you can add a #doesNotUnderstand: handler to perform the method on the contents variable, but that can mess up your debugging, so it's better if you don't.
Err, now that goes into the land of advanced applied magic. Please ignore that last paragraph ;)
Christine, if you want an OrderedCollection of ImageMorphs (as you wrote in the subject) then do just that. Create an OrderedCollection, not a subclass of it. And add ImageMorphs, not subclasses of ImageMorphs (unless they indeed do specific processing - but even then I'd probably make only one ImageMorph subclass and customize that).
It is often unnecessary to create your own classes for everything. For example, if the only difference of a regular ImageMorph and your own Morph subclass is the image it shows, then do not create a subclass. Just assign the right image. And maybe assign an event handler, no need for subclassing there either.
OTOH, when I look at your high-level goal "I'm making a pinball machine in which the little ball follows the order of execution of a student entered flowchart" I don't really see the need for a "SymbolArray" nor even "OrderedCollection of ImageMorphs". Maybe you should design the UI first and then implement whatever is necessary to make it work?
- Bert -
_______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners
On 11.11.2009, at 17:57, Christine Wolfe wrote:
I have an instance variable cells that I defined as cells := Matrix rows: 7 columns: 11 tabulate: [ :i :j | self newCellAt: i at: j].
Each cell of the matrix is going to be an orderedcollection of images. How can I refer to an individual cell of the matrix?
Just have a look at the "accessing" protocol in class Matrix.
- Bert -
beginners@lists.squeakfoundation.org