Table field behavior

Bill bill at bluewatermaritime.com
Fri May 20 09:44:26 EDT 2005


What if you place the code in the script of the field in question and then
not have to worry about the name of the field or about it being called when
doing stuff in other fields which may not want affected?


On 5/20/05 9:17 AM, "Eric Chatonet" <eric.chatonet at sosmartsoftware.com>
wrote:

> Hello Bill,
> 
> I am working on a How-To stack about table fields.
> It's not finished but here is an excerpt from this stack which might
> help you without waiting for the release :-)
> As you will see it, it's a little bit dry and tricky :-(
> But fully commented :-)
> Following scripts are placed in the card script.
> 
>> By default, a table has no limits: you can use the arrowkeys or the
>> tabkey to navigate as far as you wish.
>> Practically, you will often need to display a x*y cells table
>> without scrollbars as a matrix where all cells are visible and let
>> the user navigate in carousel (go from the last cell in a row to
>> the first cell in the next row and so on) through the limits you
>> have set.
>> In order to set these limits, you will trigger the keyboard events
>> within a rawKeyDown handler.
>> Here the limits which are integers are stored as custom properties
>> named xLimit and yLimit in the table field named "MyTable":
>> 
>> on rawKeyDown pKey
>>   -- allows tabbing and arrowkeys to act in carousel
>>   -- horizontal and vertical limits are stored in 2 custom
>> properties (xLimit and yLimit) in the table field
>> 
>>   if "revCell" is in the target then
>>     -- when editing a table field, target function returns
>> something like: field "revCell-1,1"
>>     if the xLimit of fld "MyTable" = "None" or the xLimit of fld
>> "MyTable" is empty then pass rawKeyDown -- no limits
>>     -----
>>     switch pKey
>>     case 65363 -- arrow key right
>>     case 65289 -- tab key
>>       if the cRevTable["currentxcell"] of fld "MyTable" = the
>> xLimit of fld "MyTable" then
>>         if the cRevTable["currentycell"] of fld "MyTable" = the
>> yLimit of fld "MyTable" then
>>           SelectCell "MyTable",1,1 -- the first table cell
>>         else
>>           SelectCell "MyTable",1,the cRevTable["currentycell"] of
>> fld "MyTable" + 1 -- the first table cell in the next line
>>         end if
>>       else pass rawKeyDown
>>       break
>>       -----
>>     case 65361 -- arrow key left
>>       if the cRevTable["currentxcell"] of fld "MyTable" = 1 then
>>         if the cRevTable["currentycell"] of fld "MyTable" <> 1 then
>>           SelectCell "MyTable",the xLimit of fld "MyTable",the
>> cRevTable["currentycell"] of fld "MyTable" - 1 -- 
>>           -- the last allowed table cell in the previous line
>>         else
>>           SelectCell "MyTable",the xLimit of fld "MyTable",the
>> yLimit of fld "MyTable" -- 
>>           -- the last allowed table cell
>>         end if
>>       else pass rawKeyDown
>>       break
>>       -----
>>     case 65364 -- arrow key down
>>       if the cRevTable["currentycell"] of fld "MyTable" = the
>> yLimit of fld "MyTable" then
>>         if the cRevTable["currentxcell"] of fld "MyTable" = the
>> xLimit of fld "MyTable" then
>>           SelectCell "MyTable",1,1 -- the first table cell
>>         else SelectCell "MyTable",the cRevTable["currentxcell"] of
>> fld "MyTable" + 1,1 -- 
>>         -- the first table cell in the next column
>>       else pass rawKeyDown
>>       break
>>       -----
>>     case 65362 -- arrow key up
>>       if the cRevTable["currentycell"] of fld "MyTable" = 1 then
>>         if the cRevTable["currentxcell"] of fld "MyTable" <> 1 then
>>           SelectCell "MyTable",the cRevTable["currentxcell"] of fld
>> "MyTable" - 1,the yLimit of fld "MyTable" -- 
>>           -- the last allowed table cell in the previous column
>>         else SelectCell "MyTable",the xLimit of fld "MyTable",the
>> yLimit of fld "MyTable" -- 
>>         -- the last allowed table cell
>>       else pass rawKeyDown
>>       break
>>       -----
>>     default
>>       pass rawKeyDown -- lets the engine do it
>>     end switch
>>   else pass rawKeyDown
>> end rawKeyDown
>> ----------------------------------------------------------------
>> 
>> on SelectCell pFieldName,pColumn,pRow
>>   -- select a cell
>> 
>>   -- pFieldName parameter is the short name of the table field
>>   -- pColumn parameter is the column number (an integer)
>>   -- pRow parameter is the row number (an integer)
>> 
>>   SetCurXCell pFieldName,pColumn -- 
>>   SetCurYCell pFieldName,pRow -- 
>>   -----
>>   SetScroll "hScroll",the cRevTable["cellxspacing"] of fld
>> pFieldName * (pColumn - 1),pFieldName,"Header" -- 
>>   SetScroll "vScroll",the cRevTable["cellyspacing"] of fld
>> pFieldName * (pRow - 1),pFieldName,"Rows" -- 
>>   -----
>>   click at CellLoc(pFieldName,pColumn,pRow) -- 
>>   -----
>>   -- to select again the current cell, you can use:
>>   -- click at the cRevTable["currentxmouseloc"] of fld
>> pFieldName,the cRevTable["currentymouseloc"] of fld pFieldName
>> end SelectCell
>> 
>> ----------------------------------------------------------------
>> 
>> function CellLoc pFieldName,pColumn,pRow
>>   -- returns the loc of any cell
>> 
>>   -- pFieldName parameter is the short name of the table field
>>   -- pColumn parameter is the column number (an integer)
>>   -- pRow parameter is the row number (an integer)
>> 
>>   local  
>> tLeft,tTop,tCellxspacing,tCellyspacing,tCurrenthscroll,tCurrentvscroll
>>   -----
>>   put the left of fld pFieldName into tLeft
>>   put the top of fld pFieldName into tTop
>>   put the cRevTable["cellxspacing"] of fld pFieldName into
>> tCellxspacing
>>   put the cRevTable["cellyspacing"] of fld pFieldName into
>> tCellyspacing
>>   put the hScroll of fld pFieldName into tCurrenthscroll
>>   put the vScroll of fld pFieldName into tCurrentvscroll
>>   return ((pColumn - 1) * tCellxspacing) + (tCellxspacing div 2) +
>> tLeft - tCurrenthscroll, \
>>       ((pRow - 1) * tCellyspacing) + (tCellyspacing div 2) + tTop -
>> tCurrentvscroll
>> end CellLoc
>> ----------------------------------------------------------------
>> 
>> on SetCurXCell pFieldName,pValue
>>   -- updates prop in the cRevTable of the table field
>> 
>>   -- pFieldName parameter is the short name of the table field
>>   -- pValue parameter is the column number (an integer)
>> 
>>   set the cRevTable["currentxcell"] of fld pFieldName to pValue
>> end SetCurXCell
>> 
>> ----------------------------------------------------------------
>> 
>> on SetCurYCell pFieldName,pValue
>>   -- updates prop in the cRevTable of the table field
>> 
>>   -- pFieldName parameter is the short name of the table field
>>   -- pValue parameter is the row number (an integer)
>> 
>>   set the cRevTable["currentycell"] of fld pFieldName to pValue
>> end SetCurYCell
>> 
>> ----------------------------------------------------------------
>> 
>> on SetScroll
>>   -- sets the table field and header fields scrolls if they are any
>>   -- the syntax is not very comprehensible since this handler can
>> set the scroll of an unknown number of fields
>>   -- then it refers to parameters by order/number and not by name
>> using the do command
>> 
>>   lock screen
>>   lock messages
>>   repeat with i = 3 to the paramcount
>>     do "put there is a fld" && param(i) && "into tFlag"
>>     if tFlag then do "set the" && param(1) && "of fld" && param(i)
>> && "to" && param(2)
>>     -- param (3) to param(x) are the names of the fields
>>   end repeat
>>   unlock messages
>>   unlock screen
>> end SetScroll
> 
> That's all!
> Is it enough?
> LOL
> 
> Le 20 mai 05 à 14:58, Bill a écrit :
> 
>> The docs on table fields is rather sparse.
>> 
>> An example table field has six cells across. It is unlocked on Mac
>> OSX. When
>> you enter data and tab across to the next cell and enter data for
>> that cell
>> and tab it works fine until you get to the last cell then it
>> automatically
>> scrolls to the right (there are no scroll bars set for either
>> vertical or
>> horizontal). This automatic scroll to the right makes all the
>> previously
>> entered data not visible and is a behavior I want to prevent. I tried
>> locking position and that didn't work.
>> 
>> How do I do this?
> 
> 
> Best regards from Paris,
> 
> Eric Chatonet.
> ----------------------------------------------------------------
> So Smart Software
> 
> For institutions, companies and associations
> Built-to-order applications: management, multimedia, internet, etc.
> Windows, Mac OS and Linux... With the French touch
> 
> Plugins, tutorials and more on our website
> ----------------------------------------------------------------
> Web site        http://www.sosmartsoftware.com/
> Email        eric.chatonet at sosmartsoftware.com/
> Phone        33 (0)1 43 31 77 62
> Mobile        33 (0)6 20 74 50 86
> ----------------------------------------------------------------
> 
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
> 
> 

            |    |    |
           )_)  )_)  )_)
          )___))___))___)\
         )____)____)_____)\\
       _____|____|____|____\\\__
-------\                   /--------- http://www.bluewatermaritime.com
 ^^^^^ ^^^^^^^^^^^^^^^^^^^^^
  ^^^^      ^^^^     ^^^    ^^
       ^^^^      ^^^

24 hour cell: (787) 378-6190
fax: (787) 809-8426

Blue Water Maritime
P.O. Box 91
Puerto Real, PR 00740





More information about the use-livecode mailing list