Whoops, hit send too soon, should be: function stackOfObject pobject
repeat if word 1 of pobject is "stack" then return pobject else put the long owner of pobject into pobject end repeat end stackOfObject On Sat, Aug 8, 2015 at 10:45 AM Peter Haworth <p...@lcsql.com> wrote: > I do it like this > > function stackOfObject pobject > > local tObject > > put pobject into tObject > repeat > if word 1 of tObject is "stack" then > return tObject > end if > > On Sat, Aug 8, 2015 at 10:31 AM Peter M. Brigham <pmb...@gmail.com> wrote: > >> OK, Here's a revision: >> >> function ownerStack pObjLongID >> -- returns the name of the stack immediately containing pObjLongID >> -- by Peter M. Brigham, pmb...@gmail.com — freeware >> -- tags: control >> -- requires getprop robustName >> >> replace " of " with cr in pObjLongID >> put lineoffset(cr & "stack ",cr & pObjLongID) into stLine >> put line stLine to -1 of pObjLongID into stName >> replace cr with " of " in stName >> return stName >> end ownerStack >> >> -- Peter >> >> Peter M. Brigham >> pmb...@gmail.com >> http://home.comcast.net/~pmbrig >> >> >> On Aug 8, 2015, at 10:45 AM, David Bovill wrote: >> >> > There was a recent feature added to the language that would help - >> maybe it >> > was something to do with the owner.... >> > >> > I have a similarly convoluted function and getprop - one of the issues >> is >> > that if you want the long name of the stack the control is part of - >> this >> > could be a mainstack or a substack - so to get "the stack on which the >> > control is placed" has always been a bit of a pain... >> > >> > On 8 August 2015 at 15:16, Peter M. Brigham <pmb...@gmail.com> wrote: >> > >> >> Here's a quick solution: >> >> >> >> function ownerStack pObjLongID >> >> replace " of " with numtochar(8) in pObjLongID >> >> set the itemdel to numtochar(8) >> >> return item -1 of pObjLongID >> >> end ownerStack >> >> >> >> A more general solution is what I use in my library. The getItem() >> >> function is so useful that I use it *everywhere*. >> >> >> >> function ownerStack pObjLongID >> >> -- returns the name of the stack containing pObjLongID >> >> -- by Peter M. Brigham, pmb...@gmail.com — freeware >> >> -- requires getItem(), getDelimiters() >> >> >> >> put getItem(pObjLongID,-1," of ") into tStack >> >> put the name of tStack into stackName >> >> return stackName >> >> end ownerStack >> >> >> >> function getItem pContainer, pIndex, pDelim >> >> -- returns item # pIndex of pContainer, given itemdelimiter = pDelim >> >> -- could just "get item pIndex of pContainer" in the calling handler >> but >> >> -- then have to set and restore the itemDelimiter, so this is less >> >> hassle >> >> -- for instance, the following returns the filename from the >> filepath: >> >> -- put getItem(tPath,-1,"/") into tFileName >> >> -- defaults to pDelim = tab >> >> -- allows pIndex to be a range, eg "3-5" >> >> -- in that case enclose the range in quotes >> >> -- also allows pDelim to be a string of characters >> >> -- so you could do this: >> >> -- getItem("a//b//c//d//e//f",4,"//") -> d >> >> -- or: >> >> -- getItem("a or b or c or d or e or f","3-5"," or ") -> c or d >> >> or e >> >> -- which expands the possibilities for use enormously >> >> -- by Peter M. Brigham, pmb...@gmail.com — freeware >> >> -- requires getDelimiters() >> >> >> >> -- first, if pDelim is a string then get a delimiter that is not >> found >> >> -- in pContainer and use it in place of pDelim >> >> if pDelim = empty then put tab into pDelim >> >> if len(pDelim) > 1 then >> >> put getDelimiters(pContainer) into tempDel >> >> if tempDel begins with "Error" then >> >> return "Error in getDelimiters()" >> >> end if >> >> replace pDelim with tempDel in pContainer >> >> else >> >> put pDelim into tempDel >> >> end if >> >> >> >> -- now parse pIndex to take care of ranges and negative values >> >> -- and get the item(s) requested >> >> put offset("-",pIndex) into dashPos >> >> set the itemdelimiter to tempDel >> >> if dashPos > 1 then >> >> -- don't catch if pIndex is something like -1, -2, etc >> >> put char 1 to dashPos-1 of pIndex into tStart >> >> put char dashPos+1 to -1 of pIndex into tEnd >> >> put item tStart to tEnd of pContainer into theItem >> >> replace tempDel with pDelim in theItem >> >> else >> >> put item pIndex of pContainer into theItem >> >> end if >> >> return theItem >> >> end getItem >> >> >> >> function getDelimiters pText, nbr >> >> -- returns a cr-delimited list of <nbr> characters >> >> -- not found in the variable pText >> >> -- use for delimiters for, eg, parsing text files, manipulating >> arrays, >> >> etc. >> >> -- usage: put getDelimiters(pText,2) into tDelims >> >> -- if tDelims begins with "Error" then exit to top -- or >> whatever >> >> -- put line 1 of tDelims into lineDivider >> >> -- put line 2 of tDelims into itemDivider >> >> -- etc. >> >> -- by Peter M. Brigham, pmb...@gmail.com — freeware >> >> >> >> if pText = empty then return "Error: no text specified." >> >> if nbr = empty then put 1 into nbr -- default 1 delimiter >> >> put "2,3,4,5,6,7,8,16,17,18,19,20,21,22,23,24,25,26" into baseList >> >> -- low ASCII values, excluding CR, LF, tab, etc. >> >> put the number of items of baseList into maxNbr >> >> if nbr > maxNbr then return "Error: max" && maxNbr && "delimiters." >> >> repeat with tCount = 1 to nbr >> >> put true into failed >> >> repeat with i = 1 to the number of items of baseList >> >> put item i of baseList into testNbr >> >> put numtochar(testNbr) into testChar >> >> if testChar is not in pText then >> >> -- found one, store and get next delim >> >> put false into failed >> >> put testChar into line tCount of delimList >> >> exit repeat >> >> end if >> >> end repeat >> >> if failed then >> >> if tCount = 0 then >> >> return "Error: cannot get any delimiters." >> >> else if tCount = 1 then >> >> return "Error: can only get one delimiter." >> >> else >> >> return "Error: can only get" && tCount && "delimiters." >> >> end if >> >> end if >> >> delete item i of baseList >> >> end repeat >> >> return delimList >> >> end getDelimiters >> >> >> >> >> >> On Aug 8, 2015, at 8:23 AM, David Bovill wrote: >> >> >> >>> Given the long id of a control - how do I extract the reference to the >> >>> stack ti belongs to? I have a function that i have used since the >> dawn of >> >>> time for this - but I recall seeing a new chunk / target / reference >> >>> feature of Livecode in the last year that makes this easier. Did I >> >> imagine >> >>> it? >> >>> _______________________________________________ >> >>> 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 >> >> >> >> >> >> _______________________________________________ >> >> 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 >> >> >> > _______________________________________________ >> > 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 >> >> >> _______________________________________________ >> 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 >> > _______________________________________________ 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