Richard, I've been pounding the pulpit on this one for some time. Besides the
default datagrid behavior, I have a whole library of handlers that I use for my
datagrids that I need to access. To do this, I need my library to be inserted
*between* the datagrid and the default behavior. This is not presently possible
without a bit of magic someone sent to me.
The fix is simple and elegant and has worked for me since I started using it.
In behaviorsdatagridbuttonbehavior.livecodescript I replaced the private
function _resourceStack handler with an updated one:
-- Sly Labs! Inline Custom Behaviors
/*
private function _ResourceStack
local theStack, theCharNo
put the behavior of me into theStack
if theStack is not empty then
put offset(" of stack", theStack) into theCharNo
delete char 1 to (theCharNo + 3) of theStack
end if
return theStack
end _ResourceStack
*/
local sResourceStack
private function _ResourceStack
local theStack, theCharNo
if sResourceStack is empty then
put the behavior of me into theStack
repeat
if trueWord -1 of theStack is "revDataGridLibrary" or theStack is
empty then
exit repeat
else
put the behavior of theStack into theStack
end if
end repeat
if theStack is not empty then
put offset(" of stack", theStack) into theCharNo
delete char 1 to (theCharNo + 3) of theStack
end if
put theStack into sResourceStack
end if
return sResourceStack
end _ResourceStack
-- END Sly Labs! Inline Custom Behaviors
If I then set the behavior of the datagrid to my custom behavior, then set that
behavior to the default datagrid behavior, then I have nested datagrid
behaviors. (I think it's a bit more complex but that is the idea.)
What's the advantage you say? Well for instance I have a selectionChanged
hander that I use for all my datagrids, preventing me from having to code it in
every datagrid in my app, which is quite a few. That selectionChanged handler
accomodates a FindBar object so if I am searching for a data record in a
database, selecting the found record in the datagrid will reload all the other
associated data.
Also in that behavior I have a standard method for querying data for the
datagrids, a standard method for populating fields, buttons and menus on the
card the datagrid is on, and a mouseDoubleUp handler so that when a user double
clicks on a datagrid row I can process it. These use custom properties I set
for each datagrid so that things like the table to query, the primary key, the
field to focus on when done etc. are accessible to the particular datagrid.
As a result, all I have to do now to create a new datagrid is copy/paste an
existing one, name it, change a few custom properties, and set the column
names, and away it goes. I suppose what would be needed to support this in the
release versions of LC is a way to easily "insert" a behavior "before" or
"after" the default behavior.
Bob S
> On Apr 28, 2022, at 12:57 , Richard Gaskin via use-livecode
> <[email protected]> wrote:
>
> Mike Kerner wrote:
>
> > * This wasn't discussed, but there is supposed to be some
> > fixing coming in dp's of 10 for behaviors, especially
> > nested behaviors
>
> I missed a bug report: what are the issues with nested behaviors?
>
>
> > * Still nothing on dealing with the way groups are handled.
>
> What aspects of group handling, and how should they be different?
>
> --
> Richard Gaskin
> Fourth World Systems
> Software Design and Development for the Desktop, Mobile, and the Web
_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode