#ifndef PROTBL_H
#define PROTBL_H 


#include <ProANSI.h>
#include <ProObjects.h>
#include <ProMdl.h>
#include <ProWstring.h>
#include <ProNote.h>

#define PROTBLCELL_BLANK_LEFT   (1<<0)
#define PROTBLCELL_BLANK_RIGHT  (1<<1)
#define PROTBLCELL_BLANK_TOP    (1<<2)
#define PROTBLCELL_BLANK_BOTTOM (1<<3)

PRO_BEGIN_C_DECLS

/*typedef struct pro_draw_table *ProDwgtabledata;*/
typedef struct pro_table_data *ProTableData;

typedef enum
{
  PROTABLESIZE_CHARACTERS,
  PROTABLESIZE_MODEL_UNITS,/* For Drawing and Flat to Screen 
                              tables it is in screen unit*/
  PROTABLESIZE_CHARS_TRUE
} ProTableSizetype;


typedef enum
{
  PROTABLEFORMAT_TBL,
  PROTABLEFORMAT_TXT,
  PROTABLEFORMAT_CSV,
  PROTABLEFORMAT_XLSX
} ProTableFormattype;

typedef enum 
{
  PROTABLEGROWTHDIR_DOWNRIGHT = 0,
  PROTABLEGROWTHDIR_DOWNLEFT,
  PROTABLEGROWTHDIR_UPRIGHT,
  PROTABLEGROWTHDIR_UPLEFT
}ProTableGrowthdirType;

typedef enum
{
  PROTBLROWHEIGHT_AUTOADJUST_FALSE = 0,
  PROTBLROWHEIGHT_AUTOADJUST_TRUE,
  PROTBLROWHEIGHT_AUTOADJUST_TRUE_LEGACY
} ProTableRowheightAutoadjusttype;

typedef enum{
  PROTABLE_NORMAL  =  1,
  PROTABLE_FULL    =  2
} ProTableParamMode;

extern ProError ProTableDataAlloc(ProTableData *data);
/*
    Purpose: Allocated memory for ProTableData structure.

    Input Arguments:
        none

    Output Arguments:
        data - pointer to the ProTableData structure

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableDataOriginSet(ProTableData data,ProPoint3d origin);
/*
    Purpose: Set the origin in the specified ProTableData structure

    Input Arguments:
        data - ProTableData structure
        origin - The origin for the table placement.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableDataFreeAttachSet(ProTableData data, ProAnnotationPlane* plane, ProPoint3d origin);
/*
    Purpose: Set the free attachment in the specified ProTableData structure

    Input Arguments:
        data - ProTableData structure
        plane - Annotation Plane.
        origin - The origin for the table placement. For tables on valid 
                 annotation plane pass this with respect to Model Csys. For 
                 flat to screen tables pass this in 1000 x 843 fixed spaced

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableOriginGet(ProTable* table, int segment, ProPoint3d origin);
/*
    Purpose: Get the origin in the specified ProTableData structure

    Input Arguments:
        table - The table.
        segment - The segment identifier. Pass Segment Id for Drawing and 0 
                  Model.

    Output Arguments:
        origin - The origin for the table placement.

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableDataSizetypeSet(ProTableData  data, ProTableSizetype size_type);
/*
    Purpose: Setup sizetype in the given ProTableData structure

    Input Arguments:
        data - ProTableData structure
        size_type - size type

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableDataColumnsSet (ProTableData data,int n_columns,double *widths,ProHorzJust *justifications);
/*
    Purpose: Setup column properties

    Input Arguments:
        data - The ProTableData structure
        n_columns - Number of columns. The maximum number of columns that can 
                    be specified is 50.
        widths - ProArray of Column widths
        justifications - ProArray of Justifications

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_BAD_INPUTS - Bad input argument

*/

extern ProError ProTableDataRowsSet (ProTableData data,int n_rows,double *heights);
/*
    Purpose: Setup rows properties

    Input Arguments:
        data - The ProTableData structure
        n_rows - Number of rows. The maximum number of rows that can be 
                 specified is 100.
        heights - ProArray of row heights

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_BAD_INPUTS - Bad input argument

*/

extern ProError ProTableDataAnnotationPlaneSet(ProTableData data, ProAnnotationPlane* plane);
/*
    Purpose: Set Annotation plane for solid tables.

    Input Arguments:
        data - The ProTableData structure
        plane - plane

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_BAD_INPUTS - Bad input argument

*/

extern ProError ProTableAnnotationPlaneGet(ProTable* table, ProAnnotationPlane* plane);
/*
    Purpose: Get Annotation plane for solid tables.

    Input Arguments:
        table - The table.

    Output Arguments:
        plane - plane

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_BAD_INPUTS - Bad input argument

*/

extern ProError ProTableCreate (ProMdl mdl, ProTableData table_data,int display,ProTable *table);
/*
    Purpose: Creates a table. The function creates the table on the current 
             sheet or active combination state.

    Input Arguments:
        mdl - The Model
        table_data - The table data
        display - Boolean flag that specifies whether or not the table is to be 
                  displayed after creation. If display==FALSE, then the table 
                  is not displayed.

    Output Arguments:
        table - the table

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableTextEnter(ProTable *table,int column,int row,ProWstring  *lines);
/*
    Purpose: Adds the specified lines of text into the appropriate column and 
             row of the table. Note that more than one line of text may be 
             written into a cell. If a line of text is too wide for the cell 
             (too many characters), the text overlaps the neighboring cells.

    Input Arguments:
        table - The table to which to add the text for the cell.
        column - The column number of the cell. The column indices start at 1.
        row - The row number of the cell. The row indices start at 1.
        lines - ProArray of text lines assigned to the table cell.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableDelete (ProTable *table);
/*
    Purpose: Deletes the specified table.

    Input Arguments:
        table - The table to delete.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The table was deleted.
        PRO_TK_NOT_EXIST - The specified <i>table_id</i> does not exist.

*/

extern ProError ProTableDisplay (ProTable *table, ProCombstate* state);
/*
    Purpose: Displays the table.

    Input Arguments:
        table - The table to display.
        state - The combination state to display to. Pass NULL for drawing 
                table.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The table was deleted.
        PRO_TK_BAD_INPUTS - The specified table was NULL.
        PRO_TK_GENERAL_ERROR - The function failed.

*/

extern ProError ProTableErase (ProTable *table, ProCombstate* state);
/*
    Purpose: Erases the table.

    Input Arguments:
        table - The table to erase.
        state - The combination state to erase from. Pass NULL for drawing 
                table.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The table was deleted.
        PRO_TK_BAD_INPUTS - The specified table was NULL.
        PRO_TK_GENERAL_ERROR - The function failed.

*/

typedef ProError (*ProTableVisitAction) (ProTable *table, ProError filter_status, ProAppData  data);
/*
    Purpose: The action function called for each drawing table entity during 
             the call to ProTableVisit().

    Input Arguments:
        table - Table to be visited
        filter_status - Return value from filter action function
        data - Application data passed to function ProTableVisit().

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting drawing tables.
        Other - Stop visiting tables.

*/

typedef ProError (*ProTableFilterAction) (ProTable *table, ProAppData  data);
/*
    Purpose: The filter function called for each table entity during the call 
             to function ProTableVisit().

    Input Arguments:
        table - Table to be filtered
        data - Application data passed to function ProTableVisit().

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Skip visiting this drawing table and go to the next.
        Other - Call the visit action for this drawing table. The return value 
                is passed as input to the visit action.

*/

extern ProError ProTableVisit (ProMdl model,ProTableVisitAction visit_action,ProTableFilterAction filter_action,ProAppData data);
/*
    Purpose: Visit tables in the specified model.

    Input Arguments:
        model - model to visit
        visit_action - visit action
        filter_action - filter action. If NULL, all tables are visited using 
                        the action function.
        data - ProAppData structure

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully visited the tables.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_E_NOT_FOUND - No tables were visited.
        Other - Error return supplied by the visit action which caused visiting 
                to stop.

*/

extern ProError ProTablesCollect (ProMdl  model,ProTable **tables);
/*
    Purpose: Collect all tables in the specified model

    Input Arguments:
        model - the model

    Output Arguments:
        tables - the array of table. The function allocates the memory for this 
                 argument. To free the memory, call <b>ProArrayFree()</b>.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully collected the tables.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_E_NOT_FOUND - No tables were found.

*/

extern ProError ProTableRowsColumnsCount(ProTable *table,int *n_rows, int *n_columns);
/*
    Purpose: Counts the table rows and columns.

    Input Arguments:
        table - The table

    Output Arguments:
        n_rows - rows count.
        n_columns - columns count

    Return Values:
        PRO_TK_NO_ERROR - Success .
        PRO_TK_NOT_EXIST - The specified table or drawing does not exist.

*/

extern ProError ProTableRowAdd (ProTable *table,int insert_after_row,int display, double height_in_chars);
/*
    Purpose: Adds a row to a table. If you try to insert a row in the middle of 
             a nontemplate element of a repeat region, this function returns an 
             error.

    Input Arguments:
        table - the table;
        insert_after_row - Insert the new row after this row. Row numbers start 
                           with 1. Pass the value 0 to insert the new row at 
                           the top of the table To Append at last pass value 
                           less that 0.(any negative Value)
        display - Flag that specifies whether or not the table is to be 
                  displayed after creation.
        height_in_chars - The height of the row in characters. Pass -1 to take 
                          value of previous column and first column in case of 
                          add at start.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success.
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableColumnAdd (ProTable *table,int insert_after_col,int display, double width_in_chars);
/*
    Purpose: Adds column to a table

    Input Arguments:
        table - the table;
        insert_after_col - insert the new column after this column. Column 
                           numbers start with 1. If you want the new column to 
                           be the first column, pass the value 0. To Append at 
                           last pass value less that 0.(any negative Value)
        display - Flag that specifies whether or not the table is to be 
                  displayed after creation.
        width_in_chars - The width of the column, in characters. Pass -1 to 
                         take value of previous column and first column in case 
                         of add at start.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success.
        PRO_TK_GENERAL_ERROR - Failure

*/

extern ProError ProTableCellsMerge (ProTable *table,
                                    int       start_column,
                                    int       start_row,
                                    int       end_column,
                                    int       end_row,
                                    int       display);
/*
    Purpose: Takes a rectangular region of cells and merges them into a 
             composite cell. The merged cells, rows, or columns are deleted, 
             and the table's appearance will be restored using 
             prodrw_remesh_table_cells(). This function is equivalent to the 
             Creo Parametric option Drawing, Table, Mod Rows/Col, Merge. 
             Restrictions placed in the user interface also apply here. For 
             example, borders of merge cannot intersect the borders of another 
             merge or repeat region.

    Input Arguments:
        table - The table
        start_column - The leftmost column of the merged cell
        start_row - The upper row of the merged cell
        end_column - The rightmost column of the merged cell
        end_row - The bottom row of the merged cell
        display - Flag that specifies whether or not the table is to be 
                  displayed after creation.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_GENERAL_ERROR - Failure.
        PRO_TK_NOT_VALID - When the input row or the column does not exist.

*/

extern ProError ProTableCellMergeGet (ProTable*   table, 
                                      int         row, 
                                      int         col, 
                                      ProBoolean* is_merge, 
                                      int*        start_row, 
                                      int*        start_col, 
                                      int*        end_row, 
                                      int*        end_col);
/*
    Purpose: Gets merge information of specified cell.

    Input Arguments:
        table - table
        row - specify row of cell. Indices start at 1
        col - specify column of cell. Indices start at 1

    Output Arguments:
        is_merge - PRO_B_TRUE if cell is merge
        start_row - row index for start merge cell. Indices start at 1
        start_col - column index for start merge cell. Indices start at 1
        end_row - row index for end merge cell. Indices start at 1.
        end_col - column index for end merge cell. Indices start at 1.

    Return Values:
        PRO_TK_BAD_INPUTS - selection not provided, selection not a table cell, 
                            or ProTable for output not provided.
        PRO_TK_NO_ERROR - Successfully found merge information

*/

extern ProError ProTableCellsRemesh(ProTable* table, 
                                    int       start_column, 
                                    int       start_row, 
                                    int       end_column, 
                                    int       end_row, 
                                    int       display);
/*
    Purpose: Undoes all merges created in the specified rectangular region.

    Input Arguments:
        table - the table;
        start_column - the leftmost column of the region to remesh;
        start_row - the upper row of the region to remesh;
        end_column - the rightmost column of the region to remesh;
        end_row - the bottom row of the region to remesh.
        display - Flag that specifies whether or not the table is to be 
                  displayed after creation. If display==TRUE, then the table is 
                  displayed (behavior as in releases prior to Release 20). If 
                  display==FALSE, then the table is not displayed.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success.
        PRO_TK_GENERAL_ERROR - Failure.
        PRO_TK_NOT_VALID - When the input row or the column does not exist.

*/

extern ProError ProTableRowDelete (ProTable *table, int row, int display);
/*
    Purpose: Delete the specified row from the table.

    Input Arguments:
        table - The table;
        row - The row index. Row indices start at 1.
        display - Flag that specifies whether or not the table is to be 
                  displayed after creation.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_GENERAL_ERROR - Failure.

*/
/*ProDwgtableColumnDelete*/
extern ProError ProTableColumnDelete (ProTable *table, int column, int display);
/*
    Purpose: Deletes the specified column from the table.

    Input Arguments:
        table - The table.
        column - The column index. The indices start at 1.
        display - Flag that specifies whether or not the table is to be 
                  displayed after creation. If display==TRUE, then the table is 
                  displayed (behavior as in releases prior to Release 20). If 
                  display==FALSE, then the table is not displayed.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_GENERAL_ERROR - Failure.

*/

extern ProError ProTableCellNoteGet(ProTable* table, int column, int row, int* id);
/*
    Purpose: Returns the note identifier for a specified cell of the table.

    Input Arguments:
        table - the reference to the table.
        column - The column index. Column indices start at 1.
        row - The row index. Row indices start at 1.

    Output Arguments:
        id - The id of note for the specified cell.

    Return Values:
        PRO_TK_NO_ERROR - The note identifier for the specified cell.
        PRO_TK_EMPTY - The cell is empty.
        PRO_TK_GENERAL_ERROR - Another error occurred and the function failed.

*/

extern ProError ProTableCelltextGet(ProTable* table, int column, int row, ProTableParamMode mode,ProWstring **lines);
/*
    Purpose: Places the text of the table into a string array.

    Input Arguments:
        table - The table.
        column - The column index. The column indices start at 1.
        row - The row index. The row indices start at 1.
        mode - The mode type. Use 1 to get the text as displayed. Use 2 to get 
               the text as shown in the full note editor, in n:&symbol 
               notation.

    Output Arguments:
        lines - The text of the table. Free this using 
                ProWstringproarrayFree().

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_GENERAL_ERROR - Failure or table cell does not have any entered 
                               text

*/

extern ProError ProTableRotate (ProTable *table,int display);
/*
    Purpose: Rotates table (counter clockwise) by 90 degree.The function does 
             not perform a display.

    Input Arguments:
        table - The table.
        display - Flag that specifies whether or not the table is to be 
                  displayed after creation.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_GENERAL_ERROR - Failure.

*/

extern ProError ProTableCellIsComment (ProTable *table,int column,int row,ProBoolean  *is_comment);
/*
    Purpose: Determines whether the specified cell is a comment cell.

    Input Arguments:
        table - the table;
        column - the column index. The column indices start at 1.
        row - the row index. The row indices start at 1.

    Output Arguments:
        is_comment - PRO_B_TRUE if the cell is a comment cell. PRO_B_FALSE 
                     otherwise.

    Return Values:
        PRO_TK_NO_ERROR - success.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/

extern ProError ProTableIsFromFormat (ProTable *table,ProBoolean  *from_format);
/*
    Purpose: Determines whether the specified table is associated with the 
             format. This API is for drawing table only.

    Input Arguments:
        table - The drawing table

    Output Arguments:
        from_format - PRO_B_TRUE if the table is associated with the format; 
                      PRO_B_FALSE if the table is not associated with the 
                      format.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_GENERAL_ERROR - The function failed.

*/

extern ProError ProTableColumnWidthSet(ProTable* table,int column,double column_width,ProTableSizetype size_type);
/*
    Purpose: Set the column width of a table.

    Input Arguments:
        table - The reference to the table.
        column - The column index. Column indices start at 1.
        column_width - Column width
        size_type - Size type.If PROTABLESIZE_CHARACTERS,then column_width will 
                    be rounded down. To avoid this, use 
                    PROTABLESIZE_CHARS_TRUE.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The column width could not set

*/

extern ProError ProTableColumnWidthGet(ProTable* table,int column, ProTableSizetype size_type,double* column_width);
/*
    Purpose: Get the column width of a table.

    Input Arguments:
        table - The reference to the table.
        column - The column index. Column indices start at 1.
        size_type - Size type.If PROTABLESIZE_CHARACTERS,then column_width will 
                    be rounded down. To avoid this, use 
                    PROTABLESIZE_CHARS_TRUE.

    Output Arguments:
        column_width - Column width

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The column width could not get

*/

extern ProError ProTableRowHeightSet(ProTable*        table,
                                     int              row,
                                     double           row_height,
                                     ProTableSizetype size_type);
/*
    Purpose: Set the row height of a table

    Input Arguments:
        table - The reference to the table.
        row - The row index
        row_height - Row height
        size_type - Size type. If PROTABLESIZE_CHARACTERS, then row_height will 
                    be rounded down. To avoid this, use 
                    PROTABLESIZE_CHARS_TRUE.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The row height could not set

*/

extern ProError ProTableRowHeightGet(ProTable*        table, 
                                     int              row, 
                                     ProTableSizetype size_type, 
                                     double*          row_height);
/*
    Purpose: Get the row height of a table

    Input Arguments:
        table - The reference to the table.
        row - The row index
        size_type - Size type. If PROTABLESIZE_CHARACTERS, then row_height will 
                    be rounded down. To avoid this, use 
                    PROTABLESIZE_CHARS_TRUE.

    Output Arguments:
        row_height - Row height

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The row height could not set

*/

extern ProError ProTableRowheightAutoadjustSet(ProTable*                       table,
                                               int                             row,
                                               ProTableRowheightAutoadjusttype auto_adjust);
/*
    Purpose: Set the automatic row height adjustment property for a row of a 
             table. 
             <P><B>NOTE: </B>Height changes (if any) will be visible only after 
             next regeneration or a call to ProTablesUpdate()

    Input Arguments:
        table - The reference to the table.
        row - Row number for which the property is to be set. Row numbers start 
              with 1.
        auto_adjust - PROTBLROWHEIGHT_AUTOADJUST_TRUE to set the property, 
                      PROTBLROWHEIGHT_AUTOADJUST_FALSE to unset it.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The automatic adjust property could not be set.
        PRO_TK_CANT_MODIFY - The row is a non-template repeat region row.

*/

extern ProError ProTableRowheightAutoadjustGet(ProTable*                        table,
                                               int                              row,
                                               ProTableSizetype                 size_type, 
                                               ProTableRowheightAutoadjusttype* auto_adjust,
                                               double*                          height);
/*
    Purpose: Get the automatic row height adjustment property for a row of a 
             table.

    Input Arguments:
        table - The reference to the table.
        row - Row number for which the property is to be retrieved. Row numbers 
              start with 1.
        size_type - Size type. If PROTABLESIZE_CHARACTERS, then row_height will 
                    be rounded down. To avoid this, use 
                    PROTABLESIZE_CHARS_TRUE.

    Output Arguments:
        auto_adjust - Retrieved value for auto-adjust property.
        height - Auto adjusted height if auto_adjust is 
                 PROTBLROWHEIGHT_AUTOADJUST_TRUE. Ignore for 
                 PROTBLROWHEIGHT_AUTOADJUST_FALSE

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The automatic adjust property could not be 
                               retrieved.

*/

extern ProError ProTableReferencesAdd(ProTable* table, ProAnnotationReference* refs);
/*
    Purpose: Add table references

    Input Arguments:
        table - Valid table.
        refs - ProArray of table references. Only 1 reference from type 
               PRO_ANNOT_REF_SRF_COLLECTION is allowed.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function completed successfully.
        PRO_TK_BAD_INPUTS - The input argument is invalid.
        PRO_TK_BAD_CONTEXT - The table owner is drawing.
        PRO_TK_MAX_LIMIT_REACHED - More than 1 references from type 
                                   PRO_ANNOT_REF_SRF_COLLECTION.
        PRO_TK_CANT_MODIFY - Refercnce from type PRO_ANNOT_REF_SRF_COLLECTION 
                             already exist.

*/

extern ProError ProTableReferencesGet(ProTable* table, ProAnnotationReference** p_refs);
/*
    Purpose: Get table references

    Input Arguments:
        table - Valid table.

    Output Arguments:
        p_refs - ProArray of table references. Free it using 
                 ProAnnotationreferencearrayFree()

    Return Values:
        PRO_TK_NO_ERROR - The function completed successfully.
        PRO_TK_BAD_INPUTS - The input argument is invalid.
        PRO_TK_BAD_CONTEXT - The table owner is drawing.

*/

extern ProError ProTableReferenceDelete(ProTable* table, int index_ref);
/*
    Purpose: Delete table reference

    Input Arguments:
        table - Valid table.
        index_ref - Indices start from 0. Get existing references from 
                    ProTableReferencesGet()

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function completed successfully.
        PRO_TK_BAD_INPUTS - The input argument is invalid.
        PRO_TK_BAD_CONTEXT - The table owner is drawing..

*/

extern ProError ProTableSave(ProTable* table, ProPath path, ProTableFormattype table_format, int segment_id);
/*
    Purpose: Save table in different format

    Input Arguments:
        table - The reference to the table.
        path - Full path of the saved location
        table_format - Save format of the table
        segment_id - segment of the table to save, if table_format is 
                     PROTABLEFORMAT_CSV or PROTABLEFORMAT_XLSX

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProSelectionTableGet(ProSelection selection, ProTable* table);
/*
    Purpose: For a ProSelection representing a cell of a table, returns the 
             table from which the cell was selected.

    Input Arguments:
        selection - ProSelection representing a cell of a table.

    Output Arguments:
        table - The table from which the cell was selected.

    Return Values:
        PRO_TK_BAD_INPUTS - selection not provided, selection not a table cell, 
                            or ProTable for output not provided.
        PRO_TK_NO_ERROR - Successfully found table corresponding to the table 
                          cell.

*/

extern ProError ProTableCellBlankGet(ProTable* table, 
                                     int       row, 
                                     int       col, 
                                     int*      blank_flags);
/*
    Purpose: Gets blank border information of specified cell.

    Input Arguments:
        table - table
        row - specify row of cell. Indices start at 1
        col - specify row of column. Indices start at 1

    Output Arguments:
        blank_flags - Bit mask of PROTBLCELL_BLANK_LEFT/RIGHT/TOP/Bottom

    Return Values:
        PRO_TK_BAD_INPUTS - selection not provided, selection not a table cell, 
                            or ProTable for output not provided.
        PRO_TK_NO_ERROR - Successfully found blank information

*/

extern ProError ProTableBorderStyleGet(ProTable*     table,
                                       ProLinestyle *line_style,
                                       double       *width,
                                       ProColor     *clr);
/*
    Purpose: Gets line style of table borders

    Input Arguments:
        table - table.

    Output Arguments:
        line_style - line_style,
        width - width
        clr - color

    Return Values:
        PRO_TK_BAD_INPUTS - One or more inputs are NULL
        PRO_TK_NO_ERROR - Successfully return information.

*/

extern ProError ProTableCellFillColorGet(ProTable* table, 
                                         int       row, 
                                         int       col, 
                                         ProColor* color);
/*
    Purpose: Gets color of specified cell.

    Input Arguments:
        table - table
        row - specify row of cell. Indices start at 1
        col - specify row of column. Indices start at 1

    Output Arguments:
        color - The color of the given table cell.

    Return Values:
        PRO_TK_BAD_INPUTS - selection not provided, selection not a table cell, 
                            or ProTable for output not provided.
        PRO_TK_E_NOT_FOUND - When there is no fill color.
        PRO_TK_NO_ERROR - Successfully found color of the cell.

*/

PRO_END_C_DECLS

#endif /* PROTBL_H */