devcon 2022 recap

Bob Sneidar bobsneidar at iotecdigital.com
Thu Apr 28 16:53:50 EDT 2022


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 <use-livecode at lists.runrev.com> 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




More information about the use-livecode mailing list