#ifndef PRODTLNOTE_H
#define PRODTLNOTE_H
			


#include <ProANSI.h>
#include <ProObjects.h> 
#include <ProDtlitem.h>
#include <ProDtlattach.h>
#include <ProDtlsymdef.h>
#include <ProDimension.h>
#include <ProGtol.h>
#include <ProNote.h>

typedef struct prodtl_text      *ProDtlnotetext;

typedef struct prodtl_text_line *ProDtlnoteline;

typedef struct pro_notedata     *ProDtlnotedata;

typedef enum horizontal_just
{
    PRO_HORZJUST_LEFT,
    PRO_HORZJUST_CENTER,
    PRO_HORZJUST_RIGHT,
    PRO_HORZJUST_DEFAULT  /* Indicates note with Creo Parametric default justification. */
}   ProHorizontalJustification;

typedef enum vertical_just
{
    PRO_VERTJUST_TOP,
    PRO_VERTJUST_MIDDLE,
    PRO_VERTJUST_BOTTOM,
    PRO_VERTJUST_DEFAULT  /* Indicates note with Creo Parametric default justification. */
} ProVerticalJustification;

PRO_BEGIN_C_DECLS
/*================================================================*\
    ProDtlnote  functions
\*=================================================================*/
extern ProError ProDrawingReadonlyselectionAllow(
    ProBoolean allow);
/*
    Purpose: Enables or disables the Creo Parametric user to select drawing 
             detail notes flagged as read-only.

    Input Arguments:
        allow - Set to PRO_B_TRUE to enable selection, and PRO_B_FALSE to 
                disable it.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the flag.

*/

extern ProError ProDtlnoteCreate(ProMdl  owner,
                                 ProDtlsymdef *symbol,
                                 ProDtlnotedata notedata,
                                 ProDtlnote *note);
/*
    Purpose: Creates a note.

    Input Arguments:
        owner - The owner handle.
        symbol - If you are adding a note to the drawing, set the symbol to 
                 NULL. If you are adding a note to a symbol definition, set the 
                 symbol to be that symbol definition.
        notedata - The note data.

    Output Arguments:
        note - Created note.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully created the note.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - The note could not be created.

*/

extern ProError ProDtlnoteDataGet(
    ProDtlnote *note,
    ProDtlsymdef *symbol,
    ProDisplayMode mode,
    ProDtlnotedata *notedata);
/*
    Purpose: Gets a note data for the specified note. The function allocates 
             memory; user must release this memory with ProDtlnotedataFree

    Input Arguments:
        note - The note.
        symbol - If you are getting a note from the drawing, set the symbol to 
                 NULL. If you are getting a note from a symbol definition, set 
                 the symbol to be that symbol definition.
        mode - The display mode. <p><b>Note:</b>Creo Parametric does not 
               resolve and replace symbolic callouts for notes, which are not 
               displayed. Therefore, for the value PRODISPMODE_NUMERIC, if the 
               note is not displayed or is hidden in a layer, the text 
               retrieved may contain the symbolic callouts.

    Output Arguments:
        notedata - The note data. Free the data using ProDtlnotedataFree.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note data.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed.

*/

extern ProError ProDtlnoteDelete(
    ProDtlnote *note,
    ProDtlsymdef *symbol);
/*
    Purpose: Deletes a note.

    Input Arguments:
        note - The note.
        symbol - If you are deleting a note from the drawing, set the symbol to 
                 NULL. If you are deleting a note from a symbol definition, set 
                 the symbol to be that symbol definition.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully deleted the note data.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - The note could not be deleted.

*/

extern ProError ProDtlnoteModify(
    ProDtlnote *note,
    ProDtlsymdef *symbol,
    ProDtlnotedata notedata);
/*
    Purpose: Modifies a note.

    Input Arguments:
        note - The note.
        symbol - If you are modifying a note from the drawing, set the symbol 
                 to NULL. If you are modifying a note from a symbol definition, 
                 set the symbol to be that symbol definition.
        notedata - The note data.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully modified the note data.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - Can't modify the note.

*/

extern ProError ProDtlnoteDraw(
    ProDtlnote *note);
/*
    Purpose: Draw a note. Make note in the database appear on the drawing until 
             the drawing is regenerated. <B>NOTE: </B> The drawing must be 
             current to use this function

    Input Arguments:
        note - The note.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully draw the note.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - Can't draw the note.

*/

extern ProError ProDtlnoteErase(
    ProDtlnote *note);
/*
    Purpose: Erase a note. Makes the note disappear on the drawing until the 
             drawing is regenerated. <B>NOTE: </B> The drawing must be current 
             to use this function

    Input Arguments:
        note - The note.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully erased the note.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - Can't erase the note.

*/

extern ProError ProDtlnoteShow(
    ProDtlnote *note);
/*
    Purpose: Show a note. Make note in the database appear on the drawing and 
             continue to appear after the drawing is regenerated. <B>NOTE: </B> 
             The drawing must be current to use this function; to set a note to 
             be displayed in a non-current drawing using 
             ProDtlnotedataDisplayedSet() and regenerate the drawing.

    Input Arguments:
        note - The note.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully show the note.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - Can't show the note.

*/

extern ProError ProDtlnoteRemove(
    ProDtlnote *note);
/*
    Purpose: Remove a note. Make note in the database disappear on the drawing 
             and continue to disappear after the drawing is regenerated. 
             <B>NOTE: </B> The drawing must be current to use this function; to 
             set a note to be undisplayed in a non-current drawing using 
             ProDtlnotedataDisplayedSet() and regenerate the drawing.

    Input Arguments:
        note - The note.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully removed the note.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - Can't remove the note.

*/

extern ProError ProDrawingDtlnotesCollect(
    ProDrawing drawing,
    ProDtlsymdef *symbol, 
    int sheet,
    ProDtlnote **notes);
/*
    Purpose: Collect notes in the specified drawing.

    Input Arguments:
        drawing - The drawing handle.
        symbol - If you are collecting a note from the drawing, set the symbol 
                 to NULL. If you are collecting a note from a symbol 
                 definition, set the symbol to be that symbol definition.
        sheet - The sheet number. Set to PRO_VALUE_UNUSED for current sheet.

    Output Arguments:
        notes - The ProArray of notes. The function allocates memory for array. 
                User must release memory by ProArrayFree.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully collected the notes.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed.
        PRO_TK_OUT_OF_MEMORY - The function found too many entities to be 
                               contained in the output ProArray. Use 
                               ProDrawingDtlnoteVisit instead.
        PRO_TK_E_NOT_FOUND - No notes were found.

*/

extern ProError ProDrawingDtlnoteVisit(
    ProDrawing drawing,
    ProDtlsymdef *symbol,
    int sheet,
    ProDtlitemVisitAction visit_action,
    ProDtlitemFilterAction filter_action,
    ProAppData appdata);
/*
    Purpose: Visit notes in the specified drawing.

    Input Arguments:
        drawing - The drawing handle.
        symbol - If you are visiting a note in the drawing, set the symbol to 
                 NULL. If you are visiting a note in a symbol definition, set 
                 the symbol to be that symbol definition.
        sheet - The sheet number.
        visit_action - Visit action function.
        filter_action - Filter action function. If NULL, all notes are visited 
                        using the action function.
        appdata - The application data.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully visited the notes.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed.
        PRO_TK_E_NOT_FOUND - No notes were found.
        Other - Return value passed by the caller's visit function.

*/

extern ProError ProDtlnoteModelrefGet( ProDtlnote    *note,
                                       ProDtlsyminst *symbol_inst,
                                       int           line_index,
                                       int           text_index,
                                       ProMdl        *model );
/*
    Purpose: To provide the model to which parameterized text in a detail note 
             refers.

    Input Arguments:
        note - The note
        symbol_inst - Symbol instance whose definition contains the note. Set 
                      to NULL if the note does not belong to a symbol.
        line_index - The index into the note's line array of the line 
                     containing the parameterized text.
        text_index - The index into the line's text array of the text item 
                     containing the parameterized text.

    Output Arguments:
        model - The model which contains the parameters the parameterized text 
                refers to.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully found the model.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/


extern ProError ProDtlnoteNoteGet (ProDtlnote *dtl_note, 
                                   ProNote*    solid_model_note);
/*
    Purpose: Return the solid model note that shown as a detail note.

    Input Arguments:
        dtl_note - The drawing detail note that displays the model note.

    Output Arguments:
        solid_model_note - The solid model note.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note.
        PRO_TK_BAD_INPUTS - The input argument is invalid.
        PRO_TK_NO_ACCESS - Input note is not accessible.
        PRO_TK_E_NOT_FOUND - The detail note does not show a solid model note.

*/

extern ProError ProDtlnoteGtolGet (ProDtlnote *dtl_note , ProGtol *gtol);
/*
    Purpose: Return the geometric tolerance shown in a detail note.

    Input Arguments:
        dtl_note - The drawing detail note that displays the model note.

    Output Arguments:
        gtol - The geometric tolerance handle.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note.
        PRO_TK_BAD_INPUTS - One or more input arguments is invalid.
        PRO_TK_E_NOT_FOUND - The note is not showing a geometric tolerance.

*/


/*================================================================*\
    ProDtlnotedata  functions
\*=================================================================*/
extern ProError ProDtlnotedataAlloc(ProMdl owner,
                                    ProDtlnotedata *notedata);
/*
    Purpose: Allocate and initialize memory for note data. User must release 
             memory by ProDtlnotedataFree.

    Input Arguments:
        owner - The owner model of the note

    Output Arguments:
        notedata - The note data.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully allocated memory.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/

extern ProError ProDtlnotedataFree(
    ProDtlnotedata notedata);
/*
    Purpose: Release memory allocated by ProDtlnotedataAlloc. (Also frees text 
             lines, texts and leaders)

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully release memory.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataIdGet(
    ProDtlnotedata notedata,
    int *id);
/*
    Purpose: Gets a note id.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        id - The note id.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note id.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataLineAdd(
    ProDtlnotedata notedata,
    ProDtlnoteline line);
/*
    Purpose: Adds a text line to note.

    Input Arguments:
        notedata - The note data.
        line - The text line.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully added the text line.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/

extern ProError ProDtlnoteldataLinesSet(
    ProDtlnotedata notedata,
    ProDtlnoteline *line);
/*
    Purpose: Sets text lines to note.

    Input Arguments:
        notedata - The note data.
        line - ProArray of the text lines.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the text lines.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/

extern ProError ProDtlnotedataLinesCollect(
    ProDtlnotedata notedata,
    ProDtlnoteline **lines);
/*
    Purpose: Collect text lines in the specified note.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        lines - The ProArray of text lines. The function allocates memory for 
                the array. User must release memory by ProArrayFree.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully collected the text lines.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.
        PRO_TK_E_NOT_FOUND - No text lines were found.

*/

extern ProError ProDtlnotedataMirrorSet(
    ProDtlnotedata notedata,
    ProBoolean mirror);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleMirrorSet 
             instead. Sets a mirror flag for the specified note.

    Input Arguments:
        notedata - The note data.
        mirror - The mirror flag.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the mirror flag.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataIsMirrored(
    ProDtlnotedata data,
    ProBoolean *mirrored);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleMirrorGet 
             instead. Gets a mirror flag for the specified note.

    Input Arguments:
        data - The note data.

    Output Arguments:
        mirrored - The mirror flag.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the mirror flag.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataColorGet(
    ProDtlnotedata notedata,
    ProColor *color);
/*
    Purpose: <b>Note:</b> This function is deprecated Use 
             ProTextStyleColorGetWithDef() instead. Gets a color for the 
             specified note.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        color - The note color.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note color.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataColorSet(
    ProDtlnotedata notedata,
    ProColor *color);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleColorSet 
             instead. Sets a color for the specified note.

    Input Arguments:
        notedata - The note data.
        color - The note color.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the note color.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataAttachmentGet(
    ProDtlnotedata notedata,
    ProDtlattach *attachment);
/*
    Purpose: Gets an attachment for the specified note.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        attachment - The note attachment. Release memory using ProDtlattachFree

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note 
                          attachment.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/

extern ProError ProDtlnotedataAttachmentSet(
    ProDtlnotedata notedata,
    ProDtlattach attachment);
/*
    Purpose: Sets an attachment for the specified note.

    Input Arguments:
        notedata - The note data
        attachment - The note color

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the note attachment.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataLeadersCollect(
    ProDtlnotedata notedata,
    ProDtlattach **leaders);
/*
    Purpose: Collect leaders in the specified note.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        leaders - The ProArray of leaders. The function allocates memory for 
                  the array. User must release memory by ProArrayFree.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully collected the leaders.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.
        PRO_TK_E_NOT_FOUND - No leaders were found.

*/

extern ProError ProDtlnotedataLeadersSet(
    ProDtlnotedata notedata,
    ProDtlattach *leaders);
/*
    Purpose: Sets leaders for the note.

    Input Arguments:
        notedata - The note data.
        leaders - The ProArray of leaders.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the leaders.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/

extern ProError ProDtlnotedataLeaderAdd(
    ProDtlnotedata data,
    ProDtlattach leader);
/*
    Purpose: Adds a leader to the note.

    Input Arguments:
        data - The note data.
        leader - The note leader.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully added the leader.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/

extern ProError ProDtlnotedataElbowlengthGet(
    ProDtlnotedata  data,
    ProBoolean	*is_default,
    double *elbow_length);
/*
    Purpose: Gets the elbow length for the specified note.

    Input Arguments:
        data - The note data.

    Output Arguments:
        is_default - The default flag.
        elbow_length - The note elbow length if is_default == PRO_B_FALSE.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note elbow.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataElbowlengthSet(
    ProDtlnotedata data,
    ProBoolean	is_default,
    double elbow_length);
/*
    Purpose: Sets the elbow length for the specified note.

    Input Arguments:
        data - The note data.
        is_default - The default flag.
        elbow_length - The note elbow length if is_default == PRO_B_FALSE.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the note elbow.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataAngleGet(
    ProDtlnotedata notedata,
    double *angle);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleAngleGet 
             instead. Gets an angle for the specified note.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        angle - The note angle.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the note angle.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataAngleSet(
    ProDtlnotedata notedata,
    double angle);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleAngleSet 
             instead. Sets an angle for the specified note.

    Input Arguments:
        notedata - The note data.
        angle - The note angle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the note angle.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

/*================================================================*\
    ProDtlnotetext  functions
\*=================================================================*/
extern ProError ProDtlnotetextAlloc  (
    ProDtlnotetext *text );
/*
    Purpose: Allocate memory for the note text data. User must free memory with 
             ProDtlnotetextFree().

    Input Arguments:
        none

    Output Arguments:
        text - The note data handle

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_OUT_OF_MEMORY - The function can't allocate memory

*/


extern ProError ProDtlnotetextFree(
    ProDtlnotetext text);
/*
    Purpose: Free memory that is allocated by ProDtlnotetextAlloc.

    Input Arguments:
        text - The note data handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextHeightSet (
    ProDtlnotetext text,
    double height);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleHeightSet 
             instead. Setup the text height, in screen units.

    Input Arguments:
        text - The handle to the text
        height - Height in world coordinates.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument(s) is invalid.

*/

extern ProError ProDtlnotetextHeightGet (
    ProDtlnotetext text,
    double *height);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleHeightGet 
             instead. Get the text height, in screen units.

    Input Arguments:
        text - The handle to the text

    Output Arguments:
        height - Height in world coordinates.

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextWidthSet (
    ProDtlnotetext text,
    double width_factor);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleWidthSet 
             instead. Setup the text width_factor.

    Input Arguments:
        text - The handle to the text
        width_factor - The ratio between the width and height of each character 
                       in the string. More correctly, this is the area each 
                       character occupies, including the space between them and 
                       the next character.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextWidthGet (
    ProDtlnotetext text,
    double *width_factor);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleWidthGet 
             instead. Get the text width_factor.

    Input Arguments:
        text - The handle to the text

    Output Arguments:
        width_factor - The ratio between the width and height of each character 
                       in the string. More correctly, this is the area each 
                       character occupies, including the space between them and 
                       the next character.

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextSlantSet (
    ProDtlnotetext text,
    double slant_angle);
/*
    Purpose: <b>Note:</b> This function is deprecated Use 
             ProTextStyleSlantAngleSet instead. Setup the text slant_angle.

    Input Arguments:
        text - The handle to the text
        slant_angle - The lean of the character, in degrees clockwise

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextSlantGet (
    ProDtlnotetext text,
    double *slant_angle);
/*
    Purpose: <b>Note:</b> This function is deprecated Use 
             ProTextStyleSlantAngleGet instead. Get the text slant_angle.

    Input Arguments:
        text - The handle to the text

    Output Arguments:
        slant_angle - The lean of the character, in degrees clockwise

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextThicknessSet (
    ProDtlnotetext text,
    double thickness);
/*
    Purpose: <b>Note:</b> This function is deprecated Use 
             ProTextStyleThicknessSet instead. Setup the text thickness.

    Input Arguments:
        text - The handle to the text
        thickness - The line thickness in screen coordinates. If the value is 
                    set to -1.0, this parameter is controlled by the drawing 
                    setup file.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextThicknessGet (
    ProDtlnotetext text,
    double *thickness);
/*
    Purpose: <b>Note:</b> This function is deprecated Use 
             ProTextStyleThicknessGet instead. Get the text thickness.

    Input Arguments:
        text - The handle to the text

    Output Arguments:
        thickness - The line thickness in screen coordinates. If the value is 
                    set to -1.0, this parameter is controlled by the drawing 
                    setup file.

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextFontSet (
    ProDtlnotetext text,
    ProName font);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleFontSet 
             instead. Setup the text font.

    Input Arguments:
        text - The handle to the text
        font - The text font

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextFontGet (
    ProDtlnotetext text,
    ProName font);
/*
    Purpose: <b>Note:</b> This function is deprecated Use ProTextStyleFontGet 
             instead. Get the text font.

    Input Arguments:
        text - The handle to the text

    Output Arguments:
        font - The text font

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextUlineSet (
    ProDtlnotetext text,
    ProBoolean underline);
/*
    Purpose: Setup the text underline attribute.

    Input Arguments:
        text - The handle to the text
        underline - The underline attribute.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextUlineGet (
    ProDtlnotetext text,
    ProBoolean *underline);
/*
    Purpose: Get the text underline attribute.

    Input Arguments:
        text - The handle to the text

    Output Arguments:
        underline - The underline attribute.

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextStringSet (
    ProDtlnotetext text,
    ProLine string);
/*
    Purpose: Setup the string field in the text.

    Input Arguments:
        text - The handle to the text
        string - The content of the text part. It can contain control 
                 characters to introduce special symbols, as described in the 
                 Drawing User's Guide.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotetextStringGet (
    ProDtlnotetext text,
    ProLine string);
/*
    Purpose: Get the string field from the text.

    Input Arguments:
        text - The handle to the text

    Output Arguments:
        string - The content of the text part. It can contain control 
                 characters to introduce special symbols, as described in the 
                 Drawing User's Guide.

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

/*================================================================*\
    ProDtlnoteline  functions
\*=================================================================*/
extern ProError ProDtlnotelineAlloc (
    ProDtlnoteline *line);
/*
    Purpose: Allocate memory for the note text line data. User must free memory 
             by ProDtlnotelineFree()

    Input Arguments:
        none

    Output Arguments:
        line - The note text line handle.

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_OUT_OF_MEMORY - The function can't allocate memory.

*/

extern ProError ProDtlnotelineFree (
    ProDtlnoteline line);
/*
    Purpose: Free memory that was allocated by ProDtlnotelineAlloc.

    Input Arguments:
        line - The note text line handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - success;
        PRO_TK_BAD_INPUTS - the argument is invalid.

*/

extern ProError ProDtlnotelineTextAdd (
    ProDtlnoteline line,
    ProDtlnotetext text);
/*
    Purpose: Add text to the note text line data.

    Input Arguments:
        line - The note text line handle.
        text - The handle to the text.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/

extern ProError ProDtlnotelineTextsSet (
    ProDtlnoteline line,
    ProDtlnotetext *texts);
/*
    Purpose: Setup the text for the note text line data.

    Input Arguments:
        line - The note text line handle.
        texts - A ProArray of of text handles.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_OUT_OF_MEMORY - Not enough memory.

*/


extern ProError ProDtlnotelineTextsCollect (
    ProDtlnoteline line,
    ProDtlnotetext **text);
/*
    Purpose: Returns text entities contained in the note line. Each text entity 
             can have its own properties and parametric references.

    Input Arguments:
        line - Line in note returned by function ProDtlnotedataLinesCollect().

    Output Arguments:
        text - ProArray of text entities. Free the array memory with 
               ProArayFree().

    Return Values:
        PRO_TK_NO_ERROR - Function completed successfully
        PRO_TK_BAD_INPUTS - One or more bad arguments
        Pro_E_TK_NOT_FOUND - No text entities in specified line

*/



extern ProError ProDtlnotedataJustifSet(
    ProDtlnotedata notedata,
    ProHorizontalJustification hjust,
    ProVerticalJustification   vjust );
/*
    Purpose: <b>Note:</b> This function is deprecated Use 
             ProTextStyleJustificationSet and ProTextStyleVertJustificationSet 
             instead. Sets justification for the specified note.

    Input Arguments:
        notedata - The note data.
        hjust - Horizontal justification value.
        vjust - Vertical justification value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataJustifGet(
    ProDtlnotedata notedata,
    ProHorizontalJustification *hjust,
    ProVerticalJustification   *vjust );
/*
    Purpose: <b>Note:</b> This function is deprecated Use 
             ProTextStyleJustificationGet and ProTextStyleVertJustificationGet 
             instead. Gets note justification values.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        hjust - Horizontal justification value.
        vjust - Vertical justification value.

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - Error getting justification value.

*/

extern ProError ProDtlnotedataReadonlySet(
    ProDtlnotedata notedata,
    ProBoolean read_only );
/*
    Purpose: Sets read-only flag for the specified note.

    Input Arguments:
        notedata - The note data.
        read_only - PRO_B_TRUE to make note read-only, PRO_B_FALSE otherwise

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnotedataReadonlyGet(
    ProDtlnotedata notedata,
    ProBoolean *read_only );
/*
    Purpose: Gets read-only flag for the specified note.

    Input Arguments:
        notedata - The note data.

    Output Arguments:
        read_only - PRO_B_TRUE if note is read-only, PRO_B_FALSE otherwise

    Return Values:
        PRO_TK_NO_ERROR - Success;
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.

*/

extern ProError ProDtlnoteLineEnvelopeGet(
    ProDtlnote *note,
    int line,
    ProVector envel[4]);
/*
    Purpose: Get the envelope of a line in specified note.

    Input Arguments:
        note - The note.
        line - The line number, counting from 0.

    Output Arguments:
        envel - The envelope, in screen coordinates. The order of coordinates 
                are as:<pre><br> 0 -------- 1<br> | |<br> 2 -------- 3</pre> 
                This ordering of points is preserved even if the note is 
                mirrored and/or at an angle.

    Return Values:
        PRO_TK_NO_ERROR - Success.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_EMPTY - The note is a blank string.

*/

extern ProError ProDtlnotedataIsDisplayed(
    ProDtlnotedata data,
    ProBoolean *is_displayed);
/*
    Purpose: Checks if the draft note is displayed.

    Input Arguments:
        data - The draft note data.

    Output Arguments:
        is_displayed - PRO_B_TRUE if the note is displayed by default. 
                       PRO_B_FALSE if the note is hidden by default.

    Return Values:
        PRO_TK_NO_ERROR - The function completed successfully.
        PRO_TK_BAD_INPUTS - Invalid input argument(s).

*/

extern ProError ProDtlnotedataDisplayedSet(
    ProDtlnotedata data,
    ProBoolean displayed);
/*
    Purpose: Marks the draft entity to be displayed

    Input Arguments:
        data - The draft note data.
        displayed - PRO_B_TRUE if the draft note should be displayed after 
                    every regeneration. PRO_B_FALSE if it should be undisplayed 
                    after every regeneration.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function completed successfully.
        PRO_TK_BAD_INPUTS - Invalid input argument(s).

*/

extern ProError ProDtlnoteDtlsyminstsCollect (
    ProDtlnote* note, 
    ProDtlsyminst** instances);
/*
    Purpose: Returns a list of all symbol instances which are declared in a 
             detail note via the "sym()" callout format. 
             <P><B> Note: </B> The instances are returned in the order they are 
             encountered in the note text.

    Input Arguments:
        note - The detail note.

    Output Arguments:
        instances - ProArray of symbol instances. Free this using 
                    ProArrayFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_E_NOT_FOUND - There are no symbol instances generated as a 
                             callout in this note.

*/


extern ProError  ProDtlnotetextStyleSet( ProDtlnotetext note_text,
                                         ProTextStyle r_text_style );
/*
    Purpose: Retrieves the text style of the specified text in the note

    Input Arguments:
        note_text - The note text.
        r_text_style - The text style of specified text in the note.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more inputs are NULL or invalid.

*/

extern ProError  ProDtlnotetextStyleGet( ProDtlnotetext note_text,
                                         ProTextStyle *r_text_style );
/*
    Purpose: Retrieves the text style of the specified text in the note

    Input Arguments:
        note_text - The note text.

    Output Arguments:
        r_text_style - The text style of specified text in the note. You must 
                       free this memory when you are done using it.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - One or more inputs are NULL or invalid.

*/

extern ProError  ProDtlnotedataTextStyleSet(ProDtlnotedata  note_data,
                                            ProTextStyle r_text_style );
/*
    Purpose: Set text style in the note_data.

    Input Arguments:
        note_data - The note data.
        r_text_style - The text style of the note.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more inputs are NULL or invalid.

*/

extern ProError  ProDtlnotedataTextStyleGet (ProDtlnotedata note_data,
                                             ProTextStyle *r_text_style);
/*
    Purpose: Retrieves the text style of the note. If the note has texts with 
             different styles, the returned style will have a mixed state for 
             attributes that aren't the same in all texts. Inquiry functions 
             such as ProTextStyleFontGet will return PRO_TK_GENERAL_ERROR when 
             the attribute is in a mixed state.

    Input Arguments:
        note_data - The note data.

    Output Arguments:
        r_text_style - The text style of the note. You must free this memory 
                       when you are done using it.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - One or more inputs are NULL or invalid.

*/

#define PRO_REAL_VERTJUST_DEFAULT ((ProVerticalJustification) 0)
#define PRO_REAL_VERTJUST_TOP     ((ProVerticalJustification) 1)
#define PRO_REAL_VERTJUST_MIDDLE  ((ProVerticalJustification) 2)
#define PRO_REAL_VERTJUST_BOTTOM  ((ProVerticalJustification) 3)

extern ProError ProTextStyleVertJustificationSet (ProTextStyle text_style,
                                         ProVerticalJustification justification);
/*
    Purpose: Assigns the vertical justification applied to the text style. 
             <B>NOTE: </B> : In Creo 4/5, this function is using incorrect set 
             of enum default values. To correct this issue, use the #define 
             PRO_REAL_VERTJUST_* values in ProDtlnote.h. This will be corrected 
             in a later release of Creo.

    Input Arguments:
        text_style - The text style.
        justification - The justification.

    Output Arguments:
        none

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

*/


extern ProError ProTextStyleVertJustificationGet (ProTextStyle text_style,
                                        ProVerticalJustification* justification);
/*
    Purpose: Obtains the vertical justification applied to the text style. 
             <B>NOTE: </B> : In Creo 4/5, this function is using the wrong set 
             of values. To correct for this, use the PRO_REAL_VERTJUST_ values 
             in ProDtlnote.h. This will be corrected in Creo 6.

    Input Arguments:
        text_style - The text style.

    Output Arguments:
        justification - The justification.

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

*/


extern ProError ProDtlnoteTableCellGet(ProDtlnote *note, ProDwgtable *table,
                                       int *p_row, int *p_col);
/*
    Purpose: Returns information on the table, and row and column within that 
             table, for a table note.

    Input Arguments:
        note - The detail note.

    Output Arguments:
        table - The table (may be NULL).
        p_row - The row, indexed starting at 0 (may be NULL).
        p_col - The column, indexed starting at 0 (may be NULL).

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded, outputs
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_E_NOT_FOUND - This is not a table note.

*/

extern ProError ProDtlnoteWrapTextSet (ProDtlnote *note, ProBoolean wrap, double wrap_width);
/*
    Purpose: Sets wrap text ON or OFF

    Input Arguments:
        note - The note.
        wrap - PRO_B_TRUE to wrap the text.
        wrap_width - width of text line. if wrap is PRO_B_TRUE

    Output Arguments:
        none

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

*/

extern ProError ProDtlnoteWrapTextGet(ProDtlnote *note, ProBoolean *wrap, double* wrap_width);
/*
    Purpose: Get wrap status of the text

    Input Arguments:
        note - The note.

    Output Arguments:
        wrap - PRO_B_TRUE of wrap is set.
        wrap_width - width of wrapped text line.

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

*/


PRO_END_C_DECLS

#endif /* PRODTLNOTE_H */