On Apr 1, 2011, at 9:38 AM, Bob Sneidar wrote:
Hey pretty clever. You could even trap for newCard and deleteCard to
add and delete entries in the custom Property. That way you wouldn't
have to repeat through all the cards again except for maintenance.
Yes, to do a full implementation, you would
-- set the customproperties on stack preopen or close
-- set the customproperties when a new card that has the field placed
on it is added
-- or when a card is deleted if it has the field placed on it
It looks like the repeat loop is getting the value of a shared field
on each of the cards.
No, a shared field is one that offers a single value that is the same
for all cards that it appears on. It is like a clock on the wall that
has the same value for all people in the room. What you might mean is
a regular field that appears on all cards but can store a different
value on each card.
Of course, if a regular field is in a group that is not 'placed' on
all cards, then the programmer would have to add the following:
if field "desiredCodeString" exists then
--this card can be indexed, otherwise
-- skip it or put empty into the data array[id]
end if
-- OR --
try
-- access field "desiredCodeString"
-- if it is missing, the catch branch is executed
catch errNum
end try
This would also apply to any other stacks or substacks.
Substacks would have the main stack script in their message path
Other stacks would not. In that case you could employ either
-- one or more stacksinuse
-- one or more back scripts
Couldn't you just set the property array element to empty for each
card to initialize it, then have a custom function markme(theMark)
which would simply set the array element to whatever you passed in
theMark?
That is one way, but if the stack has 543 cards with values when it is
opened, this would be the starting data set.
There are several ways of triggering and capturing the message. One
feature is to do some sort of spell check or restricted value list to
keep the data clean.
Also, when a customproperty is changed or set, LC sends a system
message SetProp that can be trapped. In addition, getting a value
triggers the GetProp message. The programmer does not have to do
anything except trap for these. (see the dictionary)
on setProp
if (condition) then do this
-- update data and save stack
else
return -- kill this message
end if
end setProp
Bob
On Mar 31, 2011, at 5:23 PM, Jim Ault wrote:
On Mar 31, 2011, at 3:29 PM, Bob Sneidar wrote:
I don't think the property thing will work because I don't think
you can find a card with a property or enumerate them as such.
(This AIN'T Applescript man!"
The 'property thing' does not refer to the CARD properties,
but the customProperties of the STACK
---- tested in a working stack ------------------
--note fld statusCode is NOT shared
-- flds desiredCodeString notnowCodeString
-- ARE SHARED
-- fld output is NOT shared
-- all fields are in a group that behaves as backgound
on doCustomPropertyRun
-- I use 'cps' to mean 'cust prop set'
set the customPropertySet of this stack to "cpsStatusCodes"
--make this set empty
set the customkeys of this stack to empty
--you only need to do the repeat when changes are made
-- or when the stack closes
repeat with k = 1 to the number of cards
put word -1 of the short id of card k into thisCdId
get k & "^" & word 1 to -1 of fld "statusCode" of card k
replace cr with space in IT
set the cpsStatusCodes[ thisCdId ] of this stack to IT
end repeat
save this stack --if it is run in the IDE, but not if an app
--To get the list of 'marked cards' you would do the following
type of operation
set the customPropertySet of this stack to "cpsStatusCodes"
put the customProperties of this stack into statusCodeList
-- now make a regular list
combine statusCodeList using cr and "^"
set the itemdel to "^"
if field "desiredCodeString" is not empty then
filter statusCodeList with "*" & field "desiredCodeString" & "*"
--and now you have a list of cd id's
end if
if field "notnowCodeString" is not empty then
filter statusCodeList without "*" & field "notnowCodeString" &
"*"
-- and you have a shorter list if any have been removed
end if
-- if you want the card order, use the following
sort statusCodeList numeric by item 2 of each
put statusCodeList into fld "output"
--this allows showing a list of hits and changing the final list
in many ways
end doCustomPropertyRun
---------------------------------------
Jim Ault
Las Vegas
_______________________________________________
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