Target not working???

David Burgun dburgun at dsl.pipex.com
Tue Mar 28 09:19:58 EST 2006


Hi Again Chipp!

I just thought of something else. Apart from using ISM as a message  
broadcast system, it can also be used as a central place to hold  
system wide (or inter-stack) data.

On 28 Mar 2006, at 11:01, Chipp Walters wrote:
> David,
>
> Also, I see where you're using custom props to hold non-permanent  
> data. While this is OK, I prefer to use library stack locals, as  
> these zero out when the app quits. That way you don't have to  
> explicitly reset them. I like customProps for data which may have  
> to be saved between sessions...just my 2 cents.

ISM has a concept of persistent data which remains across application  
launches (in a standalone) or across launches of the IDE.

As an example of this, take a Preferences Stack (a separate Prefs.rev  
file).

The user launches the standalone which takes them to the main  
application stack (call it AppMain.rev), this in turn allows them to  
select the preference stack. The user some system-wide preference  
(say the language is changed from English to Spanish). The preference  
stack sends a message ("LanguageChanged", "LanguageKindDefault",  
"Spanish") and all listening objects get the message and change  
themselves so that they now set their text to the new language).  
However since only AppMain.rev is "listening" it is the only stack to  
change.

The user now closes the Preferences Stack and Quits the App (or a  
developer quits the IDE).

The App is relaunched, the current stack  (AppMain.rev) is set to  
Spanish. The user now does something that calls up another stack like  
double clicking on a thumbnail of an image so as it see it in an  
ImageViewer/Editor (call this stack ImageEdit.rev). The language is  
still English in the (mageEdit.rev stack (or more accurately it's the  
language that was last chosen from the Preferences Stack when  
ImageEdit.rev was last open).

Normally you'd have to do something like call up the Preferences  
Stack (maybe making it invisible) so that it can re-send it's data)  
or have the Stack with the new data somehow send it to the new  
stack . However, in ISM if you make the data persistent, as soon as  
an Object(s) starts "listening" they get sent the data from the last  
time it was set, in this case "Spanish". The Preferences Stack  
doesn't have to be re-opened and there is no extra initialization  
code needed anywhere. The same path that handles a change also  
handles the initialization!

So, in order to do this, I need to store persistent data in a custom  
property. I intend hold this information in locals while the App is  
running and copy it into Custom Properties in the ISM stack when the  
last stack de-registers itself. That way I get the best of both worlds!

All the Best
Dave




More information about the Use-livecode mailing list