On 9/12/13 9:17 PM, Vaughn Clement wrote:

1 Issue: on the card the different sets of field controls would only update
within the set of fields in the script. If a user edited one of the fields
that set would update. What I needed was to have all the fields update
regardless of what set they below too.
I assume that this can be done by passing the handler call up to the card
level?

That's right. If a handler isn't found, the message travels through the message hierarchy until another object catches it.

My questions are as follow:

1. Can a custom handler work like "on doMath" and pass script to make it
work from the card level?

Yes. That's the foundation of the whole system. Most of my generic code always goes in the card or the stack. Rule of thumb is to put shared code at the level that is closest to the objects that use it. If only one object uses the handler, put it into the object. If many objects on a single card use the handler, then it goes in the card. If many cards use the it, it goes in a background group or the stack script. You can also make whole stacks into libraries that will share code across several stacks.

2. The on doMath handler at the card level; can it include all of the
different math scripts in that one handler so they all update at the same
time from any field edited in the sets of fields needing updates.

Hard to say, it depends on what you're doing. If you mean, the doMath handler needs to update all the fields at once, then sure, put it all in the same handler. If you mean that different fields need to use different math functions, then you might want to break out the pieces into their own handlers. Tell us what you want to do exactly and we can advise.

3. Can I also include the field format command.

Sure.

4. My consideration is that the fields were not updating as a complete
group and that will confuse the user when they now need to re-enter the
other fields to trigger the related changes from the other edits?

Scripts don't have to go into the fields. However, each field may want to trigger the card handler if a change in any of them needs to update them all. You can do that a couple of ways. Each field can call the doMath handler, or more efficiently, just put a closeField handler into the card script. Any field that closes will trigger a closefield message, which will fall through to the card (provided the field doesn't have one) and the card's closefield handler can call your doMath handler. So, one handler in the card can manage all the fields.


Last concern: I was able to get the format to add the decimal places, but I
needed to have the money symbol in the field also. When the typed in the
field the math script won't run. The same thing happened when I used a
comma for the divider of hundreds. So that kills the scripts. I did not
find anything that tells you how to solve this? I tried the dictionary for
answers but nothing was doing it!

Text chunking is LiveCode's biggest strength. This will remove a dollar sign from the front of a string. It assumes the string is in a variable named "tString":

  if char 1 of tString = "$" then delete char 1 of tString

Or you can use "replace" for a more generic solution:

  replace "$" with empty in tString

Use "replace" on the commas too, to get rid of them. Then do the math. Then put them back:

  put "$" before tString

Adding commas back in is a little trickier if you haven't learned the language yet. I have a handler for it somewhere, let me know if you want it. But maybe give it your own shot first.

--
Jacqueline Landman Gay         |     jac...@hyperactivesw.com
HyperActive Software           |     http://www.hyperactivesw.com

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to