#include "sierrachart.h"

/*============================================================================
    Example study function for interacting with spreadsheets.
----------------------------------------------------------------------------*/
SCSFExport scsf_SpreadsheetInteractionExample(SCStudyInterfaceRef sc)
{
    SCSubgraphRef Subgraph_FormulaResult = sc.Subgraph[0];

    if (sc.SetDefaults)
    {
        // Set the configuration and defaults

        sc.GraphName = "Spreadsheet Interaction Example";

        sc.StudyDescription
            = "This is an example study for demonstrating how to interact with spreadsheets from ACSIL.  This example requires an open sheet collection name \"ACSILInteractionExample\".";

        sc.AutoLoop = 0;

        Subgraph_FormulaResult.Name = "Formula Result";
        Subgraph_FormulaResult.DrawZeros = true;

        return;
    }

    // This can either contain a complete path and file extension, or just
    // the name of the spreadsheet file itself without the extension.
    const char* SheetCollectionName = "ACSILInteractionExample";

    const char* SheetName = "Sheet1";

    void* SheetHandle = sc.GetSpreadsheetSheetHandleByName(SheetCollectionName, SheetName, false);

    // Note: The Column and Row parameters are zero-based indexes, so column
    // 'A' is index 0, and row '1' is index 0.

    // Set labels in column A.
    sc.SetSheetCellAsString(SheetHandle, 0, 1, "High");
    sc.SetSheetCellAsString(SheetHandle, 0, 2, "Low");
    sc.SetSheetCellAsString(SheetHandle, 0, 3, "Enter Formula");
    sc.SetSheetCellAsString(SheetHandle, 0, 5, "Log Message");

    // Set values in column B.
    sc.SetSheetCellAsDouble(SheetHandle, 1, 1, sc.BaseData[SC_HIGH][sc.Index]);
    sc.SetSheetCellAsDouble(SheetHandle, 1, 2, sc.BaseData[SC_LOW][sc.Index]);

    // Get the result from cell B4. Column and row indexes are zero-based.
    double CellValue = 0.0;
    sc.GetSheetCellAsDouble(SheetHandle, 1, 3, CellValue);

    // Set the result into a subgraph.
    Subgraph_FormulaResult[sc.Index] = static_cast<float>(CellValue);

    // Get the text from cell B6, if it exists, and add it to the message log.
    SCString CellString;
    if (sc.GetSheetCellAsString(SheetHandle, 1, 5, CellString))
        sc.AddMessageToLog(CellString, 0);
}

/*==========================================================================*/