/*
	Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/


/*-------------------------- Pro/Toolkit includes ---------------------------*/
#include <ProToolkit.h>
#include <ProMdl.h>
#include <ProCsys.h>
#include <ProDtlnote.h>

/*-------------------------- Application includes ---------------------------*/
#include <TestError.h>



/*================================================================*\
FUNCTION  : UserNotesColor
PURPOSE   : Creates both general and projection type drawing views.
\*================================================================*/
ProError UserNotesColor ()
{
    ProError  status;
    ProColor  color;
    int       color_index;
    ProDrawing    p_draw;
    int           sheet, n_notes, n;
    int		  i_range[2] = {0 , PRO_COLOR_MAX};
    ProFileName WMSGFIL = {'m','s','g','_','u','g','d','w','g','.','t','x','t','\0'};
    ProDtlnote *notes;

    /*------------------------------------------------------------*\
    Ask the user the color of the notes
    \*------------------------------------------------------------*/
    status = ProMessageDisplay(WMSGFIL, "USER %0s", 
				"Enter the color index : ");
    ERROR_CHECK("UserNotesColor","ProMessageDisplay",status);

    status = ProMessageIntegerRead(i_range, &color_index);
    ERROR_CHECK("UserNotesColor","ProMessageIntegerRead",status);
    if (status != PRO_TK_NO_ERROR) return(status);
 
    /*------------------------------------------------------------*\
    Get the current model
    \*------------------------------------------------------------*/
    status = ProMdlCurrentGet((ProMdl*)&p_draw);
    ERROR_CHECK("UserNotesColor","ProMdlCurrentGet",status);
    if (status != PRO_TK_NO_ERROR) return(status);

    /*------------------------------------------------------------*\
    Get the list of notes on the current sheet.
    \*------------------------------------------------------------*/
    status = ProDrawingCurrentSheetGet(p_draw, &sheet);
    ERROR_CHECK("UserNotesColor","ProDrawingCurrentSheetGet",status);
    if (sheet <=0) return (PRO_TK_NOT_VALID);

    status = ProDrawingDtlnotesCollect(p_draw, NULL, sheet, &notes);
    ERROR_CHECK("UserNotesColor","prodtl_get_ids", status);
    status = ProArraySizeGet ((ProArray)notes, &n_notes);
    ERROR_CHECK("UserNotesColor","prodtl_get_ids", (n_notes <0));

    if (n_notes < 0) return (PRO_TK_E_NOT_FOUND);
 
    color.method = PRO_COLOR_METHOD_TYPE;
    color.value.type = (ProColortype)color_index;

    for (n = 0; n < n_notes; n++)
    {
        ProDtlnote  *p_note;
        ProDtlnotedata notedata;
        ProTextStyle dtlNote_text_style;

        p_note = &notes[n];


    	/*--------------------------------------------------------*\
        Get the note description and modify the note color.
    	\*--------------------------------------------------------*/
        status = ProDtlnoteDataGet (p_note, NULL, PRODISPMODE_NUMERIC, &notedata);

        status = ProDtlnotedataTextStyleGet(notedata, &dtlNote_text_style);
        status = ProTextStyleColorSetWithDef(dtlNote_text_style, &color);
     	/*--------------------------------------------------------*\
        Erase, modify, and redraw the note.
    	\*--------------------------------------------------------*/
        status = ProDtlnoteErase(p_note);
        ERROR_CHECK("UserNotesColor","ProDtlnoteErase", status);
        if (status != PRO_TK_NO_ERROR) return (PRO_TK_GENERAL_ERROR);

        status = ProDtlnoteModify(p_note, NULL, notedata);
        ERROR_CHECK("UserNotesColor","ProDtlnoteModify", status);
        if (status != PRO_TK_NO_ERROR) return (PRO_TK_GENERAL_ERROR);

        status = ProDtlnoteDraw(p_note);
        ERROR_CHECK("UserNotesColor","ProDtlnoteDraw", status);
        if (status != PRO_TK_NO_ERROR) return (PRO_TK_GENERAL_ERROR);
    }
   return (PRO_TK_NO_ERROR);
}