Reshape Table Matrix
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RozaniGhani-RG

//@version=5
indicator('Reshape Table Matrix', overlay = true)

// 0.0 Input
// 1.0 Matrix Variables 
// 2.0 Switch 
// 3.0 Table
// 4.0 Construct
// ————————————————————————————————————————————————————————————————————————————— 0.0 Input {
i_b_reshape = input.bool(false, 'Reshape Table')
G           = 'TABLE'
T1          = 'Tick to show table\n2) Small font size recommended for mobile app or multiple layout'
T2          = 'Table must be tick before change table position'
i_b_table   = input.bool(true,           'Show Table |', group = G, inline = 'Table1')
i_s_font    = input.string('normal',        'Font size', group = G, inline = 'Table1', options = ['tiny', 'small',  'normal', 'large', 'huge'], tooltip = T1)
i_s_Y       = input.string('bottom',   'Table Position', group = G, inline = 'Table2', options = ['top',  'middle', 'bottom'])
i_s_X       = input.string('left',                   '', group = G, inline = 'Table2', options = ['left', 'center', 'right'],                   tooltip = T2)
i_c_bgcolor = input.color(color.blue, 'Cell Background')
// }
// ————————————————————————————————————————————————————————————————————————————— 1.0 Matrix Variables 
// ————————————————————————————————————————————————————————————————————————————— 1.1 Create a 2x3 matrix. {
var m1 = matrix.new<float>(2, 3)
// }
// ————————————————————————————————————————————————————————————————————————————— 1.2 Fill the matrix with values { 
for _column = 0 to 2
    matrix.set(m1, 0, _column, _column + 1)
    matrix.set(m1, 1, _column, _column + 4)
// }
// ————————————————————————————————————————————————————————————————————————————— 1.3 Copy the matrix to a new one. { 
var m2 = matrix.copy(m1)
// }
// ————————————————————————————————————————————————————————————————————————————— 1.4 Reshape the copy to a 3x2. { 
matrix.reshape(m2, 3, 2)
// }
// ————————————————————————————————————————————————————————————————————————————— 2.0 Switch {
[_id, _columns, _rows] = switch i_b_reshape
    true  => [m2, 2, 3]
    false => [m1, 3, 2]
// }
// ————————————————————————————————————————————————————————————————————————————— 3.0 Table {
// Display using a table.
var t = table.new(i_s_Y + '_' + i_s_X, _columns, _rows, border_width = 1)
// }
// ————————————————————————————————————————————————————————————————————————————— 4.0 Construct {
if barstate.islast
    for _column = 0 to _columns -1
        for _row = 0 to _rows - 1
    	    table.cell(t, _column, _row, str.tostring(matrix.get(_id, _row, _column)), bgcolor = i_c_bgcolor, text_size = i_s_font)
// }