/**
 * GUI.Matrix
 *
 * Demonstrates implementation of a GUI matrix.
 */

import("guilib")

class SampleMatrix
{
    // inject GUI module for convenience
    inject(System.GUI)

    
    /**
     * Create matrix control
     *
     * params:  
     * return:  matrix
     */
    method create_matrix ()
    {
        attr =
          {
            Attribute.NUMCOL : 4,
            Attribute.NUMLINE : 4,
            Attribute.RESIZEMATRIX : true
          }

        matrix = Matrix.new(attr)

        matrix.set_cell_value({"line":0, "column":0}, "Pivot")
        matrix.set_cell_value({"line":0, "column":1}, "Column1")
        matrix.set_cell_value({"line":0, "column":2}, "Column2")
        matrix.set_cell_value({"line":0, "column":3}, "Column3")
        matrix.set_cell_value({"line":0, "column":4}, "Column4")
        matrix.set_cell_value({"line":1, "column":0}, "Line1")
        matrix.set_cell_value({"line":1, "column":1}, "Value 1:1")
        matrix.set_cell_value({"line":1, "column":2}, "Value 1:2")
        matrix.set_cell_value({"line":1, "column":3}, "Value 1:3")
        matrix.set_cell_value({"line":1, "column":4}, "Value 1:4")
        matrix.set_cell_value({"line":2, "column":0}, "Line2")
        matrix.set_cell_value({"line":2, "column":1}, "Value 2:1")
        matrix.set_cell_value({"line":2, "column":2}, "Value 2:2")
        matrix.set_cell_value({"line":2, "column":3}, "Value 2:3")
        matrix.set_cell_value({"line":2, "column":4}, "Value 2:4")
        matrix.set_cell_value({"line":3, "column":0}, "Line3")
        matrix.set_cell_value({"line":3, "column":1}, "Value 3:1")
        matrix.set_cell_value({"line":3, "column":2}, "Value 3:2")
        matrix.set_cell_value({"line":3, "column":3}, "Value 3:3")
        matrix.set_cell_value({"line":3, "column":4}, "Value 3:4")
        matrix.set_cell_value({"line":4, "column":0}, "Line4")
        matrix.set_cell_value({"line":4, "column":1}, "Value 4:1")
        matrix.set_cell_value({"line":4, "column":2}, "Value 4:2")
        matrix.set_cell_value({"line":4, "column":3}, "Value 4:3")
        matrix.set_cell_value({"line":4, "column":4}, "Value 4:4")

        matrix.set_column_sort(2, "UP")
        matrix.set_column_width(2, 200)
        matrix.set_line_height(2, 30)

        @matrix = matrix
    }

    
    /**
     * Show dialog
     *
     * params:  
     * return:  
     */
    public method show ()
    {
        @dialog.popup(CENTER, CENTER)
        @matrix.set_raster_size(nil)
    }

    
    /**
     * Initialize
     *
     * params:  
     * return:  
     */
    method initialize ()
    {
        field @dialog
        field @matrix

        // dialog attributes
        attr =
         {Attribute.TITLE        : "Sample Matrix",
          Attribute.OPACITY      : 255}

        // create matrix
        create_matrix()

        // create dialog
        @dialog = Dialog.new(@matrix, attr)
    }
}


/**
 * Entry point
 *
 * params:  
 * return:  
 */
method main ()
{
    dialog = SampleMatrix.new()
    dialog.show()
}

main()