Generic List Genie (genericlist) - How to center justify text (header and rows), add column and row separators/horizontal scroll. (2108 R2, June Update)

Hello,

I am attempting to use the genericlist genie on a screen, I have setup the fonts I'd like to use for both the header and the rows in the Standards. I'm looking for a way to center justify the text in both the header and the rows. I also really need to have some sort of column and row separators. I'm also having issues with scroll bar not showing up. Below it the list at runtime and the code.

STRING sColumnNames[10] = "","Start Date/Time","End Date/Time","AS Type","Instruction Type","Cleard MW","Award MW","Self Schedule MW","DOT","AGC"; //Names array
INT nColumnWidths[10] = 0,200,200,240,245,110,110,185,75,70; //Widths array

FUNCTION ADS_StoredInstructionsListCreate(INT hAn)
INT bDrawHeader = 1; // Draw the header row
INT hFontRow = DspFontHnd("FntADSData");
INT hFontHeader = DspFontHnd("FntADSHeader");
INT nColumn = 1;
INT nColumns = 9;
INT nRows = 40;
INT nRowHeight = 20; // pixels
INT nHeight = 620;//(nRows + 1) * nRowheight;
INT nWidth = 1435; // pixels
INT nWidthTotal = 0; // Pixels, sum of column widths
INT nDataColumns = 10; // Maximum possible number of data columns
INT nDataRows = 40; // Maximum possible number of data rows

INT hArray = ArrayCreateByAn(hAn , nColumns + 1, nRows + 1, ARRAY_ZINDEX_MAX);
// +1 for Column0 (hidden), +1 for Row0 (hidden)
STRING sMapName = ArrayGetMapNameByAn(hAn);
STRING sCluster = PageInfo(26); //Get the Cluster name of the page

// Set up array attributes

ArraySetIntByAn(hAn, nWidth, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_XMAX);
ArraySetIntByAn(hAn, nHeight, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_YMAX);
ArraySetIntByAn(hAn, nRowHeight, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_ROWHEIGHT);
ArraySetIntByAn(hAn, bDrawHeader, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_DRAWHEADER);
ArraySetIntByAn(hAn, hFontRow, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_FONTROW);
ArraySetIntByAn(hAn, hFontHeader, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_FONTHDR);

// Set up column headers

FOR nColumn = 1 TO nColumns DO
ArraySetStringByAn(hAn, sColumnNames[nColumn], nColumn, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_COLUMN_VALUE);
ArraySetIntByAn(hAn, nColumnWidths[nColumn], nColumn, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_COLUMN_WIDTH);
ArraySetIntByAn(hAn, ARRAY_COLUMN_TYPE_STRING, nColumn, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_COLUMN_TYPE);
nWidthTotal = nWidthTotal + nColumnWidths[nColumn];
END

ArraySetIntByAn(hAn, nWidthTotal, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_XTOTAL);
ArraySetIntByAn(hAn, (nRows + 1), ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_YTOTAL);

INT hDataArray = ArrayCreate("DataArray", nDataColumns, nDataRows, 1);
// Data Array; 9 fields x 40 rows
MapValueSet(sMapName, "DataArray", hDataArray);
MapValueSet(sMapName, "DataColumns", nDataColumns);
MapValueSet(sMapName, "DataRows", nDataRows);
MapValueSet(sMapName, "Offset", -1);

TaskNew("ADS_Task_GetData", hAn:#, 1 + 8, sCluster);
END

STRING sASDTagNameArray[10] = "","ADSStoredInstructionStartTime_","ADSStoredInstructionEndTime_","ADSStoredInstructionAsType_","ADSStoredInstructionInstructionType_","ADSStoredInstructionClearedMW_","ADSStoredInstructionAwardMW_","ADSStoredInstructionSelfSchedMW_","ADSStoredInstructionDot_","ADSStoredInstructionAGCFlag_";
FUNCTION ADS_Task_GetData(STRING sArg);
INT hAn = StrToInt(sArg);
INT nDataColumn = 0;
INT nDataRow = 0;
INT nDataColumns = 0;
INT nDataRows = 0;
INT hDataArray = -1;
STRING sMapName = "";
STRING nRandom = 0;
STRING sValue = "";

WHILE (TRUE) DO
IF (ArrayExistsByAn(hAn)) THEN
sMapName = ArrayGetMapNameByAn(hAn);
hDataArray = MapValueGet(sMapName, "DataArray");
nDataColumns = MapValueGet(sMapName, "DataColumns");
nDataRows = MapValueGet(sMapName, "DataRows");

ArraySetIntByAn(hAn, nDataRows, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_YTOTAL);

FOR nDataRow = 1 TO nDataRows DO
FOR nDataColumn = 1 TO nDataColumns DO
nRandom = Rand(99);
sValue = "C" + nDataColumn:# + "R" + nDataRow:# + ">" + nRandom:#;
ArraySetString(hDataArray, sValue, nDataColumn - 1, nDataRow -1, 0);
END
END
END

SleepMS(30000);
END

END


FUNCTION ADS_StoredInstructionsListFill(INT hAn)
INT nRow = 0;
INT nRows = 40;
INT nColumn = 0;
INT nColumns = 9;
INT nOffset = 0;
INT nOffset_Previous = 0;
INT nDataColumns = 0;
INT nDataRows = 0;
INT hDataArray = -1;
STRING sMapName = "";
STRING sValue = "";

IF (ArrayExistsByAn(hAn)) THEN
ArrayView_Header_Run(hAn);
_ArrayView_VScroll_Run(hAn);
_ArrayView_HScroll_Run(hAn);

sMapName = ArrayGetMapNameByAn(hAn);
hDataArray = MapValueGet(sMapName, "DataArray");
nOffset_Previous = MapValueGet(sMapName, "Offset");
nOffset = ArrayGetIntByAn(hAn, ARRAY_INFORMATION_COLUMN, ARRAY_INFORMATION_ROW, ARRAY_ZINDEX_ARRAY_YOFF);

hDataArray = MapValueGet(sMapName, "DataArray");
IF ((ArrayIsDirty(hDataArray)) OR (nOffset <> nOffset_Previous)) THEN
nDataColumns = MapValueGet(sMapName, "DataColumns");
nDataRows = MapValueGet(sMapName, "DataRows");

FOR nRow = 1 TO nRows DO
FOR nColumn = 1 TO nColumns DO
sValue = ArrayGetString(hDataArray, nColumn - 1, (nOffset + nRow) - 1, 0);
ArraySetStringByAn(hAn, sValue, nColumn, nRow, ARRAY_ZINDEX_CELL_VALUE);
END
END

MapValueSet(sMapName, "Offset", nOffset);
ArraySetIsDirty(hDataArray, FALSE);
END
END
END


FUNCTION ADS_StoredInstructionsListDestroy(INT hAn)
INT hDataArray = -1;
STRING sMapName = "";

IF (ArrayExistsByAn(hAn)) THEN
sMapName = ArrayGetMapNameByAn(hAn);
hDataArray = MapValueGet(sMapName, "DataArray");
ArrayDestroy(hDataArray);
GenericListDestroy(hAn);
END
END