B4A Library Grid/Table and ListView Library

Discussion in 'Additional libraries, classes and official updates' started by stefanobusetto, Mar 28, 2012.

  1. stefanobusetto

    stefanobusetto Active Member Licensed User

    Added the following event handlers:
    • Sub Grid_HeaderClick ( Col As Int )
    • Sub Grid_HeaderLongClick ( Col As Int )
    • Sub Grid_CellClick ( Col As Int , Row as Int )
    • Sub Grid_CellLongClick ( Col As Int , Row as Int )

    The old ones:
    • Sub Grid_Select
    • Sub Grid_Long_Select
    • Sub Grid_Header_Click
    will be removed so their use is discouraged.
    :)
     
    TheMightySwe likes this.
  2. TheMightySwe

    TheMightySwe Active Member Licensed User

    Excellent
     
  3. stefanobusetto

    stefanobusetto Active Member Licensed User

    Added Column Builders ( yust to keep the code easier! )
    • ColCreateAndAppend ( Caption As String , Field As String , Width As Int ) As xnGridCol
    • ColCreateAndAppend2 ( Caption As String , Field As String , Width As Int , Gravity As Int ) As xnGridCol
    • ColCreateAndInsert ( Col As Int , Caption As String , Field As String , Width As Int ) As xnGridCol
    • ColCreateAndInsert2 ( Col As Int , Caption As String , Field As String , Width As Int , Gravity As Int ) As xnGridCol
    Each sub:
    1. Creates a new xnGridCol
    2. Adds the xnGridCol to the xnGrid
    3. Returns the xnGridCol
    The following code ( from the xnGridSample4 example )
    Code:
    Dim cc(5As xnGridCol

    cc(
    0).Initialize2 ( "#" , "id" , 40dip , Gravity.TOP + Gravity.LEFT )
    gg.ColAppend ( cc(
    0) )

    cc(
    1).Initialize2 ( "First Name" , "first_name" , 100dip , Gravity.TOP + Gravity.LEFT )
    cc(
    1).SingleLine = True
    gg.ColAppend ( cc(
    1) )

    cc(
    2).Initialize2 ( "Family Name" , "family name" , 100dip , Gravity.TOP + Gravity.LEFT )
    gg.ColAppend ( cc(
    2) )

    cc(
    3).Initialize2 ( "State" , "state" , 40dip , Gravity.LEFT )
    cc(
    3).SetTypeImage
    cc(
    3).RowIconPut ( "1" , flags(0) )
    cc(
    3).RowIconPut ( "2" , flags(1) )
    cc(
    3).RowIconPut ( "3" , flags(2) )
    cc(
    3).RowIconPut ( "4" , flags(3) )
    cc(
    3).RowIconPut ( "5" , flags(4) )
    cc(
    3).PositionSet ( 2 , 3 , 4 , 0 )
    gg.ColAppend ( cc(
    3) )

    cc(
    4).Initialize2 ( "Sex" , "sex" , 30dip , Gravity.LEFT )
    cc(
    4).SetTypeImage
    cc(
    4).RowIconPut ( "M" , bmp_m )
    cc(
    4).RowIconPut ( "F" , bmp_f )
    cc(
    4).PositionSet ( 2 , 3 , 2 , 7 )
    gg.ColAppend ( cc(
    4) )
    becomes
    Code:
    Dim c As xnGridCol

    c = gg.ColCreateAndAppend2 ( 
    "#" , "id" , 40dip , Gravity.TOP + Gravity.LEFT )

    c = gg.ColCreateAndAppend2 ( 
    "First Name" , "first_name" , 100dip , Gravity.TOP + Gravity.LEFT )
    c.SingleLine = 
    True

    c = gg.ColCreateAndAppend2 ( 
    "Family Name" , "family name" , 100dip , Gravity.TOP + Gravity.LEFT )

    c = gg.ColCreateAndAppend2 ( 
    "State" , "state" , 40dip , Gravity.LEFT )
    c.SetTypeImage
    c.RowIconPut ( 
    "1" , flags(0) )
    c.RowIconPut ( 
    "2" , flags(1) )
    c.RowIconPut ( 
    "3" , flags(2) )
    c.RowIconPut ( 
    "4" , flags(3) )
    c.RowIconPut ( 
    "5" , flags(4) )
    c.PositionSet ( 
    2 , 3 , 4 , 0 )

    c = gg.ColCreateAndAppend2 ( 
    "Sex" , "sex" , 30dip , Gravity.LEFT )
    c.SetTypeImage
    c.RowIconPut ( 
    "M" , bmp_m )
    c.RowIconPut ( 
    "F" , bmp_f )
    c.PositionSet ( 
    2 , 3 , 2 , 7 )
    :)
     
    TheMightySwe likes this.
  4. imgsimonebiliato

    imgsimonebiliato Well-Known Member Licensed User

    Hello @stefanobusetto,
    I tried to use the method "SetTypeCheck", but it doesn't work as you explain in your example :confused:.
    Can you check if everything is ok?
    Thank you
     
  5. imgsimonebiliato

    imgsimonebiliato Well-Known Member Licensed User

    Hello,
    I have new ideas for your useful library:
    - Some new methods like "GetValues", "GeValues2", "SetValues", "SetValues2",
    Each method get, return the entire row values as a list or an array. The same for the method set.

    - A new method, that incorporate and set at the same time HeaderTextSize, HeaderHeight, RowTextSize, RowHeight, such as:
    Code:
    grid_cell_dimensions(HeaderTextSize as Int, HeaderHeight as Int, RowTextSize as Int, RowHeight as Int)
    bye
     
  6. stefanobusetto

    stefanobusetto Active Member Licensed User

  7. stefanobusetto

    stefanobusetto Active Member Licensed User

    RowHeight and HeaderHeight can be used to set the Height of the celles of the grid.
    As you can see in the image the "First Name" column height is double of the height of other columns.

    Code:
    'Activity module
    Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    End Sub

    Sub Globals
    Dim gg As xnGrid

    Dim bmp_m As Bitmap
    Dim bmp_f As Bitmap
    bmp_m.Initialize ( 
    File.DirAssets , "male.png" )
    bmp_f.Initialize ( 
    File.DirAssets , "female.png" )

    Dim flags(5As Bitmap
    flags(
    0).Initialize ( File.DirAssets , "flags_1.png" )
    flags(
    1).Initialize ( File.DirAssets , "flags_2.png" )
    flags(
    2).Initialize ( File.DirAssets , "flags_3.png" )
    flags(
    3).Initialize ( File.DirAssets , "flags_4.png" )
    flags(
    4).Initialize ( File.DirAssets , "flags_5.png" )

    End Sub

    Sub gg_fill
    Dim n As Int

    For n = 1 To 10
        gg.RowAppend ( 
    Array As String ("1""Fiona Fiona Fiona Fiona""Stanfill""1" , "F" ) )
        .....
    Next
    End Sub

    Sub Activity_Create(FirstTime As Boolean)
    Dim bt_paint As Button

    Dim t As Int : t = 5dip
    Dim h As Int : h = 45dip

    ' create buttons
    bt_paint.Initialize("bt_paint")
    bt_paint.Text = 
    "create"
    Activity.AddView ( bt_paint ,  0dip , t ,  90dip , 40dip )

    t = t + h

    ' **************************************************************************
    ' create the grid object and then grid column objects
    ' **************************************************************************
    If gg.IsInitialized = False Then
       gg.Initialize(
    "gg")
       gg.FastScroll = 
    False
     
       gg.RowHeight = 
    30dip
       gg.HeaderHeight = 
    30dip
     
       gg.HeaderTextSize = 
    13
       gg.RowTextSize = 
    13
     
       gg.HeaderTextColor = 
    Colors.Black
       gg.RowTextColor = 
    Colors.Black

       gg.SelectedOddColor = 
    Colors.Magenta
       gg.SelectedEvenColor = 
    Colors.Magenta

       
    Dim c As xnGridCol

       c = gg.ColCreateAndAppend2 ( 
    "#" , "id" , 40dip , Gravity.TOP + Gravity.LEFT )

       c = gg.ColCreateAndAppend2 ( 
    "First Name" , "first_name" , 100dip , Gravity.TOP + Gravity.LEFT )
       
    'c.SetTypeButton
       c.RowHeight = 60dip

       c = gg.ColCreateAndAppend2 ( 
    "Family Name" , "family name" , 100dip , Gravity.TOP + Gravity.LEFT )

       c = gg.ColCreateAndAppend2 ( 
    "State" , "state" , 50dip , Gravity.LEFT )
       c.RowIconTop = 
    2dip
       c.RowIconLeft = 
    2dip
       c.SetTypeImage
       c.RowIconPut ( 
    "1" , flags(0) )
       c.RowIconPut ( 
    "2" , flags(1) )
       c.RowIconPut ( 
    "3" , flags(2) )
       c.RowIconPut ( 
    "4" , flags(3) )
       c.RowIconPut ( 
    "5" , flags(4) )
       c.PositionSet ( 
    2 , 3 , 1 , 1 )
        
       c = gg.ColCreateAndAppend2 ( 
    "Sex" , "sex" , 50dip , Gravity.LEFT )
       c.RowIconTop = 
    2dip
       c.RowIconLeft = 
    2dip
       c.SetTypeImage
       c.RowIconPut ( 
    "M" , bmp_m )
       c.RowIconPut ( 
    "F" , bmp_f )
       c.PositionSet ( 
    2 , 3 , 3 , 1 )

       
    Activity.AddView ( gg , 5dip , t , 280dip , 100%y - t - 10dip )

       
    ' **************************************************************************
       ' fill the grid
       ' **************************************************************************
       gg_fill
       bt_paint_click
    End If
    End Sub

    Sub bt_paint_click
    gg.Multiselect = 
    False
    gg.GridWidth = 
    1dip
    gg.RowEvenColor = 
    Colors.RGB ( 240 , 255 , 255 )

    gg.GridColor = 
    Colors.Red
    gg.PixelFix = 
    False

    gg.GridCreate2 ( 
    True )
    End Sub
    gg.RowHeight = 30dip
    sets the defaultheight of the cells

    c.RowHeight = 60dip
    sets the height of "First Name" cell

    :)
     

    Attached Files:

  8. David Hawkins

    David Hawkins Member Licensed User

    Hi Stefano

    You have been very busy I can see but I wondered is there any update to #356
     
  9. stefanobusetto

    stefanobusetto Active Member Licensed User

    Sure i remember! :)
    I'm adding some features i urgently need.
    Then i'll have a look a t request #340
    Then #356
    :)
     
  10. David Hawkins

    David Hawkins Member Licensed User

    OK thank you
     
  11. stefanobusetto

    stefanobusetto Active Member Licensed User

    TouchX() gets the x coordinate of the last touch point.
    TouchY() gets the y coordinate of the last touch point.
    FirstVisiblePosition() gets the index of the first visible ( even partially ) row
    LastVisiblePosition() gets the index of the last visible ( even partially ) row

    Example
    Code:
    Log ( grid.TouchX )
    Log ( grid.TouchY )
    :)
     
    TheMightySwe likes this.
  12. stefanobusetto

    stefanobusetto Active Member Licensed User

    To create a Button Column just set the type with the SetTypeButton method.
    The onClick event of the button is handled by the event onClick of the grid.

    Example
    Code:
    c = grid.ColCreateAndAppend2 ( "Button" , "Button" , 100dip , Gravity.TOP + Gravity.LEFT )
    c.SetTypeButton
    :)
     
  13. stefanobusetto

    stefanobusetto Active Member Licensed User

    The CellProps event has replaced the PropSetColor / PropSetTextColor methods.
    The CellProps event i triggered to get :
    - BackGroundColor
    - TextSize
    - TextColor
    of each cell of the grid.
    So these properties can be set on a per cell basis instead of a per row basis
    as it was previuosly.

    Example
    Code:
    Sub gg_CellProps ( aCol As Int , aRow As Int , aValue As String , aProps As xnGridCellProps )
    If aCol = 1 Then
       aProps.TextColor = 
    Colors.Red
    End If

    If aCol = 1 Then
       
    If aRow = 1 Then
          aProps.BackGroundColor = ...
          aProps.TextSize = ...
          aProps.TextColor = ...
       
    End If
    End If
    End Sub
    :)
     
  14. David Hawkins

    David Hawkins Member Licensed User

    Hi Stefano

    Thank you. This grids' functionality get better and better every day, brilliant, that is exactly what I wanted.

    Regards

    David
     
  15. aviario

    aviario Active Member Licensed User

    Hi, I'm using the PropSetHeight property to change the height of the cells and I'm using xnobjets 2.52 I upgraded to version 2.67 and that property does not exist which is now the property

    Thank You
     
  16. stefanobusetto

    stefanobusetto Active Member Licensed User

    You have to keep using version 2.52.
    PropSetHeight is the only feature i've not yet ported to 2.67.
    I'm sorry you'll have to wait a bit.
    :)
     
  17. aviario

    aviario Active Member Licensed User

  18. David Hawkins

    David Hawkins Member Licensed User

    Hi Stefano in the statement below what is the aValue as string representing? is it the value to put into the cell?

    Sub gg_CellProps ( aCol As Int , aRow As Int , aValue As String , aProps As xnGridCellProps )

    Regards

    David
     
  19. imgsimonebiliato

    imgsimonebiliato Well-Known Member Licensed User

    It is the value that each cells contains
     
  20. David Hawkins

    David Hawkins Member Licensed User

    Hi imgsimonebiliato

    In that case i am getting confused with the code for setting the cell back color.

    I am trying to make sense of the following code to set a cell back color as posted by Stefano

    Sub gg_CellProps ( aCol As Int , aRow As Int , aValue AsString , aProps As xnGridCellProps )
    If aCol = 1 Then
    aProps.TextColor = Colors.Red
    EndIf
    If aCol = 1Then
    If aRow = 1Then
    aProps.BackGroundColor = ...
    aProps.TextSize = ...
    aProps.TextColor = ...
    EndIf
    EndIf
    End Sub
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice