Setting the dgText locks Revolution

Bob Sneidar bobs at twft.com
Wed Jan 20 15:12:47 EST 2010


Had to send again because message was too big. 

Hi all. 

Following is code I have in the data grid object's script. Essentially am attempting to drag a value in a column to another place in the column to rearrange the values. 

When I execute a drag and drop within a column, Revolution goes beachball on me. I originally thought it was the command to set the dgText that was causing the beachball, but no! Using GLX2 and stepping through the code, I discovered that the beachball happens when DragDrop ends after returning from the dispatch call to ProcessDrop! (see code comments)

Anyone have a clue?

Bob


--> Data Grid Handlers
on dragStart
   put the dgDataControl of the target into theDataControl
    
   ## Watch out for dragging on the header
   if theDataControl is empty then pass dragStart
    
   ## Get Data Grid index of control that was clicked on
   put the dgDataControl of the target into theTargetLongID
   put the dgIndex of the dgDataControl of the target into theIndex
    
   ## Tell Data Grid to set the dragImage to the row 
   ## that theIndex is associated with
   set the dgDragImageIndex of me to theIndex
    
   ## Set the dragData["private"] so that drag operation
   ## begins
   set the dragData["private"] to the short name of theDataControl & space &\
         theIndex
    
   set the dgTrackDragReorder[theIndex] of me to true
   
end dragStart
   
on DragDrop
   -- Get the values we stored from dragStart
   put dragData["private"] into theDropSource

   -- Store the values for the target
   put the dgIndex of the dgDatacontrol of the target into theIndex
   put the short name of the dgDataControl of the target & space &\
         theIndex into theDropTarget
    
   -- theDropSource and theDropTarget now contain a space delimited list
   -- of the column name, the displayed row, and the data index
   -- for the source and the target

   if theDropSource = theDropTarget then
      -- Do nothing
      exit to top 
   end if
    
   dispatch processdrop with theDropSource, theDropTarget
end DragDrop  -- THIS BEACHBALLS REVOLUTION!!!
    
--> My Handlers
on processdrop theDropSource, theDropTarget
    set the itemdelimiter to tab
    put word 1 of theDropSource into theSourceColumn
    put word 3 of theDropSource into theSourceRow
    put word 1 of theDropTarget into theTargetColumn
    put word 3 of theDropTarget into theTargetRow
     
    if theSourceColumn = theTargetColumn then
        --> *Rearrange items
        -- get the data
        get the dgText of me
        put it into theData
        
        -- which column
        if theSourceColumn = "prifields" then
            put 1 into theColumn
        else
            put 3 into theColumn
        end if
         
        -- Store the source value
        put item theColumn of line theSourceRow of theData into theSourceData
         
        -- Determine the repeat loop direction
        if theSourceRow < theTargetRow then
            -- rearrange forward
            repeat with theRow = theSourceRow+1 to theTargetRow
                put item theColumn of line theRow of theData into \
                        item theColumn of line theRow-1 of theData
            end repeat
             
            -- Drop the source value into the target
            put theSourceData into item theColumn of line theTargetRow of theData
        else
            -- rearrange backwards
            repeat with theRow = theSourceRow-1 down to theTargetRow
                put item theColumn of line theRow of theData into \
                        item theColumn of line theRow+1 of theData
            end repeat
             
            -- Drop the source value into the target
            put theSourceData into item theColumn of line theTargetRow of theData
        end if
         
    else
        --> *Link items
    end if
    breakpoint
    -- save the data
    set the itemdelimiter to comma
    set the dgText of me to theData
    -- At this point theData looks good! The values for the column
    -- source and target are swapped and if you step through the code
    -- the data grid has been updated!
end processdrop


More information about the use-livecode mailing list