Hi Mark,

On 27 Mar 2006, at 22:41, Mark Wieder wrote:

David-

Monday, March 27, 2006, 9:21:13 AM, you wrote:

All I want to do is to call a handler if it exists in a script. I've
read up on the message path etc. but not sure how it applies in this
case. Could you elaborate?

OK. Now I see what you're trying to do here. But I still see two
problems with this:

One, I don't see a way to differentiate messages coming from multiple
sources. If object A responds to B events, then how do you limit it to
responding only to B event messages from object C? What if object D
also generates B events?

That's legal. A message is sent to *all* listening objects. For example, a "Folder_Selected" message could be sent to a field that displays the folder path name, another that uses the folder path name to display a list of files, another field that just displays the folder name without the path and a button that is enabled or disabled depending on if there is currently a folder selected.

If you want to have more than one folder, e.g. say a source and destination folder, then you can use the "Kind" field to differentiate, e.g. objects that want to act on a Source folder being selected listen for "Folder_Selected", "FolderKindSource" and objects that want to act on the Destination folder listen for "Folder_Selected", "FolderKindDestination".

Two, I still think you're fighting the "natural" object hierarchy. Why
not have the stack initialize its own objects when it starts up
instead of forcing it from the parent stack? Or more correctly, why
not have the library stack tell each of its controls to initialize
themselves, i.e.,

-- in the library stack
-- untested code
on openStack
  local x

  repeat with x=1 to the number of controls of this stack
    try
      send "ISM_InitializeObject" to control x
    end try
  end repeat
end openStack

on closeStack
  --unregister all objects
end closeStack

Or, if you use setProp handlers instead, you can just say

on openStack
  local x

  repeat with x=1 to the number of controls of this stack
    set the ISM_InitializeObject of control x to empty
  end repeat
end openStack

then you don't have to worry about whether or not the control supports
the ISM_InitializeObject handler - you'll just set a harmless custom
property if it doesn't.


There are a number of reasons:

1. I am trying to cut down on the amount of code and the number of places that needs to be changed if you want to either add an existing object from the Object Library or to write a new Object (that might be added to the library at a later date).

2. Speed. I do more than just send the ISM_InitializeObject message while looping thru the objects in a stack. At present there are checks on a call-by-call basis (e.g. when a stack Calls a "ISMListenForMessage" or "ISMPutMessage") and this impacts the performance. It's better to do all this at "start using" time and hold that information so as to save time once ISM has initialized. This is a data dependent algorithm (which are to be avoided if possible) and I am just following good software engineering practice, e.g. if you absolutely MUST use a data dependent algorithm the put as much processing as possible so as to make it more worthwhile.

3. Although the code I posted shows the ISM_InitializeObject being called in the loop, this was just to illustrate what I wanted to achieve. In the real Library I actually just build a list/array and call the handler later on.

4. It seems like better OOP practice to hold all the information/code that an object needs in one place.

I really can't see that I am "fighting the "natural" object hierarchy". The loop (or something like it needs) to be held somewhere, the fact that it is held in a "central" place really doesn't make much difference. In your example I'd need N loops, one for each stack, doing it my way just results in one loop, e.g. less code. Of course you could make a common function out of your loop and store it in the Stack Script or in a Library and then just call it from each object. This wouldn't be "fighting the "natural" object hierarchy", so how can putting in *my* library be different?

All the Best
Dave

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to