Making "Wells": Whose Control Is It Anyway?
Richard Gaskin
ambassador at fourthworld.com
Tue Feb 22 12:47:15 EST 2005
Jerry Balzano wrote:
> I have a stack where I use grouped objects as “wells” from which users
> can drag a copy for their own use. I need to be able to refer to the
> owner of these grouped objects but it’s also important for the groups to
> have names. The copied group has the same name as the original, but
> this is good, because the name is meaningful. Anyway, every newly
> created group has its own distinctive ID, so there should be no problem,
> right? Actually, wrong. If I have a group called “mygroup”, say ID
> 1004, which I copy and paste to create a new instance of “mygroup”, say
> ID 1015, my attempts to find out the owner of the objects in the second
> group always returns the owner of the first group instead.
>
> In more detail, the original group and its copy both have a popup menu.
> I have given the button to whom the “menuPick” message is sent a
> “whoCalled” custom property, so that it resizes the proper controls
> depending on which instance was the source of the menu choice. Here’s
> my menuPick handler:
>
> on menuPick theChoice
> put the whoCalled of me into caller
> put theChoice into word 1 of fld id caller
> if theChoice is "towardsxy" then set the width of fld id caller to 188
> else set the width of fld id caller to 240
> put the long id of the owner of fld id caller into owningGroup
> repeat with i=1 to the number of controls of owningGroup
> get the name of control i of owningGroup
> if word 1 of it is "group"
> then set the right of control i of owningGroup to ((the right of fld
> id caller) - 5)
> if word 1 of it is "image"
> then set the left of control i of owningGroup to ((the left of fld
> id caller) + 4)
> end repeat
> end menuPick
>
> (BTW is there not an easier way to get at the elements of a group than
> this? I hoped there was, and I was just too dense to figure it out. If
> so, please let me know. Any style tips, I would also be grateful to get.)
>
> Everything in the handler works just fine until the command
> put the long id of the owner of fld id caller into owningGroup
>
> What the variable “owningGroup” ends up containing is “Group ID 1004…”
> (using the same example as above), not “Group ID 1015…”, even when
> whoCalled is (correctly) referenced as one of the controls in Group ID
> 1015.
>
> What can I do about this?
Short term: forget "the owner" and use the long ID instead, dropping the
part before " group ID ".
Long term: All object references returned by the engine MUST be in
their universal ID-based form unless the user specifically requests a
potentially ambiguous alternative (like "long name").
Therefore I would consider this a bug, and would gladly vote for it in
Bugzilla.
--
Richard Gaskin
Fourth World Media Corporation
___________________________________________________________
Ambassador at FourthWorld.com http://www.FourthWorld.com
More information about the use-livecode
mailing list