Detecting events in complex grid

Bastiaan Olij bastiaan.olij at jobbag.com
Sun Nov 3 19:43:19 EST 2019


This is a great UI improvement that for us will break a lot of things too. Amazing we haven't run into problems yet....
Good in the long term but more headaches in the short term...

"when does the hurting stop !?! " -- Bill

________________________________
From: omnisdev-en <omnisdev-en-bounces at lists.omnis-dev.com> on behalf of Kelly Burgess <kellyb at montana.com>
Sent: Friday, 1 November 2019 11:34 PM
To: OmnisList <omnisdev-en at lists.omnis-dev.com>
Subject: Re: Detecting events in complex grid

Some more of that great Omnis Support --  I've just been alerted to a change in Studio 10.1:

"Note in 10.1 the complex grid now scrolls per pixel, not in 8 pixel increments, so if you keep your calculation in 10, you will need to check for this as you are dividing by 8."

This was in reference to some code I had in an evHScrolled handler to prevent horizontal scrolling beyond the content.

  Calculate maxHscroll as (totalContentWidth-($cinst.$objs.cgClientLedger.$width-16))/8

where the -16 removed the scrollbar's width and the /8 converted pixels to $hscroll units.  Apparently in Studio 10.1 I'll need to adjust things for 1-pixel scroll units.

Kelly



On Nov 1, 2019, at 6:12 AM, Kelly Burgess wrote:

> So much for quick tests - I found that if I scrolled the list horizontally the code broke.  It needs to compensate by adding $hscroll*8 (scroll units are 8 pixels each) to the pXCoord value passed to getColDivider.
>
> getColDivider(pXCoord)
> ---------------------------------
> Do $cinst.$objs.cgClientLedger.$dividers.$makelist($ref.$posn) Returns divList
> Calculate xpos as pXCoord+($cinst.$objs.cgClientLedger.$hscroll*8)
> For divList.$line from 1 to divList.$linecount step 1
>        If xpos <divList.C1-2
>                Quit method 0
>        Else If xpos >divList.C1+2
>                ;
>        Else
>                Quit method divList.$line
>        End If
> End For
> Quit method 0
>
>
> A side effect you may need to deal with is that Omnis keeps the total of the column widths constant.  If I have a 14 column list displayed in the grid, and I sum the widths of the column objects to figure out the total content width, that total doesn't change when I grow or shrink column 2.  What happens (in Studio 8.1.7 anyway) is that column 14 absorbs the change to column 2 in reverse.  If I make column 2 wide enough, column 14's object's width goes negative.  The workaround for me was to add a 15th column to the complex grid with nothing in it.
>
> Kelly
>
>
> On Nov 1, 2019, at 5:13 AM, Kelly Burgess wrote:
>
>> Scotte wrote:
>>> How do I detect the resizing of a column in a complex grid?
>>>
>>> I'm not finding any of the evXXX events that address this. (Studio 8 +)
>>
>>
>> Based on Paul's suggestion, this seems to work in a quick test -  Given a kComplexGrid named cgClientLedger with $mouseevents=kTrue --
>>
>> cgClientLedger.$event
>> --------------------------------
>> On evMouseDown
>>       Do method getColDivider (pMouseX) Returns iDividerDragged
>>       ;
>> On evMouseUp
>>       If iDividerDragged>0
>>               Send to trace log {cgClientLedger divider [iDividerDragged] was just dragged}
>>               Calculate iDividerDragged as 0
>>       End If
>>
>>
>> getColDivider(pXCoord)
>> ---------------------------------
>> Do $cinst.$objs.cgClientLedger.$dividers.$makelist($ref.$posn) Returns divList
>> For divList.$line from 1 to divList.$linecount step 1
>>       If pXCoord<divList.C1-2
>>               Quit method 0
>>       Else If pXCoord>divList.C1+2
>>               ;
>>       Else
>>               Quit method divList.$line
>>       End If
>> End For
>> Quit method 0
>>
>>
>> Kelly
>


_____________________________________________________________
Manage your list subscriptions at http://lists.omnis-dev.com
Start a new message -> mailto:omnisdev-en at lists.omnis-dev.com



More information about the omnisdev-en mailing list