// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef PUBLIC_FPDF_EXT_H_
#define PUBLIC_FPDF_EXT_H_

#include "fpdfview.h"

#ifdef __cplusplus
extern "C" {
#endif

//flags for type of unsupport object.
#define FPDF_UNSP_DOC_XFAFORM               1
#define FPDF_UNSP_DOC_PORTABLECOLLECTION    2
#define FPDF_UNSP_DOC_ATTACHMENT            3
#define FPDF_UNSP_DOC_SECURITY              4
#define FPDF_UNSP_DOC_SHAREDREVIEW          5
#define FPDF_UNSP_DOC_SHAREDFORM_ACROBAT    6
#define FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM 7
#define FPDF_UNSP_DOC_SHAREDFORM_EMAIL      8
#define FPDF_UNSP_ANNOT_3DANNOT             11
#define FPDF_UNSP_ANNOT_MOVIE               12
#define FPDF_UNSP_ANNOT_SOUND               13
#define FPDF_UNSP_ANNOT_SCREEN_MEDIA        14
#define FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA    15
#define FPDF_UNSP_ANNOT_ATTACHMENT          16
#define FPDF_UNSP_ANNOT_SIG                 17

typedef struct _UNSUPPORT_INFO
{
    /**
    * Version number of the interface. Currently must be 1.
    **/
    int version;

    /**
    * Method: FSDK_UnSupport_Handler
    *            UnSupport Object process handling function.
    * Interface Version:
    *           1
    * Implementation Required:
    *           Yes
    * Parameters:
    *       pThis       -   Pointer to the interface structure itself.
    *       nType       -   The type of unsupportObject
    *   Return value:
    *       None.
    * */

    void(*FSDK_UnSupport_Handler)(struct _UNSUPPORT_INFO* pThis, int nType);
} UNSUPPORT_INFO;

/**
 * Function: FSDK_SetUnSpObjProcessHandler
 *           Setup A UnSupport Object process handler for foxit sdk.
 * Parameters:
 *          unsp_info       -   Pointer to a UNSUPPORT_INFO structure.
 * Return Value:
 *          TRUE means successful. FALSE means fails.
 **/

DLLEXPORT FPDF_BOOL STDCALL FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info);

//flags for page mode.

//Unknown value
#define PAGEMODE_UNKNOWN        -1

//Neither document outline nor thumbnail images visible
#define PAGEMODE_USENONE        0

//Document outline visible
#define PAGEMODE_USEOUTLINES    1

//Thumbnial images visible
#define PAGEMODE_USETHUMBS      2

//Full-screen mode, with no menu bar, window controls, or any other window visible
#define PAGEMODE_FULLSCREEN     3

//Optional content group panel visible
#define PAGEMODE_USEOC          4

//Attachments panel visible
#define PAGEMODE_USEATTACHMENTS 5


/**
 * Function: FPDFDoc_GetPageMode
 *           Get the document's PageMode(How the document should be displayed when opened)
 * Parameters:
 *          doc     -   Handle to document. Returned by FPDF_LoadDocument function.
 * Return Value:
 *          The flags for page mode.
 **/
DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document);

#ifdef __cplusplus
}
#endif

#endif  // PUBLIC_FPDF_EXT_H_