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