#ifndef _FS_ACTIONCALLBACK_C_H_
#define _FS_ACTIONCALLBACK_C_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "fs_action_c.h"

typedef struct _FSMenuList FSMenuList;

typedef struct _FSMenuItemEx FSMenuItemEx;

typedef struct _FSDialogDescriptionElement FSDialogDescriptionElement;

typedef struct _FSMenuList {
  int level;
  FS_WSTR name;
  FSMenuList* sub_menu_list_array;
  FS_UINT32 sub_menu_list_array_length;
}FSMenuList;

typedef struct _FSMenuItemEx {
  FS_WSTR item_name;
  FS_WSTR return_name;
  FS_BOOL is_checked;
  FS_BOOL is_enabled;
  FSMenuItemEx* sub_menu_item_array;
  FS_UINT32 sub_menu_item_array_length;
}FSMenuItemEx;

typedef struct _FSIdentityProperties {
  FS_WSTR corporation;
  FS_WSTR email;
  FS_WSTR login_name;
  FS_WSTR name;
  FS_WSTR first_name;
  FS_WSTR last_name;
  FS_WSTR title;
  FS_WSTR department;
}FSIdentityProperties;

typedef struct _FSButtonItem {
  FS_WSTR name;
  int pos;
  FS_WSTR exec;
  FS_WSTR enable;
  FS_WSTR marked;
  FS_WSTR tooltip;
  FS_WSTR label;
  FS_BITMAP_HANDLE bitmap;
}FSButtonItem;

typedef struct _FSMenuItemConfig {
  FS_WSTR name;
  FS_WSTR user;
  FS_WSTR parent;
  int pos;
  FS_BSTR pos_str;
  FS_WSTR exec;
  FS_WSTR enable;
  FS_WSTR marked;
}FSMenuItemConfig;

typedef struct _FSDialogDescriptionElement {
  FS_BSTR name;
  FS_BSTR item_id;
  FS_BSTR type;
  FS_BSTR next_tab;
  int width;
  int height;
  int char_width;
  int char_height;
  FS_BSTR font;
  FS_BOOL bold;
  FS_BOOL italic;
  FS_BSTR alignment;
  FS_BSTR align_children;
  FSDialogDescriptionElement** element_array;
  FS_UINT32 element_array_length;
}FSDialogDescriptionElement;

typedef struct _FSDialogDescriptionConfig {
  FS_BSTR name;
  FS_BSTR first_tab;
  int width;
  int height;
  int char_width;
  int char_height;
  FS_BSTR align_children;
  FSDialogDescriptionElement** element_array;
  FS_UINT32 element_array_length;
}FSDialogDescriptionConfig;

typedef struct _FSSOAPAuthenticateInfo {
  FS_WSTR username;
  FS_WSTR password;
  FS_BOOL is_use_platform_auth;
}FSSOAPAuthenticateInfo;

typedef struct _FSSOAPRequestProperties {
  FS_WSTR request_url;
  FS_BSTR request_content;
  FS_WSTR soap_action;
  FS_WSTR soap_namespace;
  FS_WSTR soap_version;
  FS_WSTR content_type;
  FS_BOOL is_encode;
  FS_BOOL is_wiredump;
  FS_BSTR request_header;
  FSSOAPAuthenticateInfo authenticate;
}FSSOAPRequestProperties;

typedef struct _FSSOAPResponseInfo {
  FS_WSTR response_header;
  FS_WSTR response_body;
  FS_WSTR network_error;
  FS_UINT32 status_code;
}FSSOAPResponseInfo;


typedef enum _FSPrintContent {
e_FSPrintContentDocument = 0,
e_FSPrintContentDocAndAnnots = 1,
e_FSPrintContentFormFieldsOnly = 2,
}FSPrintContent;



typedef enum _FSDuplexType {
e_FSDuplexTypeSimplex = 0,
e_FSDuplexTypeDuplexFlipLongEdge = 1,
e_FSDuplexTypeDuplexFlipShortEdge = 2,
}FSDuplexType;



typedef enum _FSBookletDuplexMode {
e_FSBookletDuplexModeBothSides = 0,
e_FSBookletDuplexModeFrontSideOnly = 1,
e_FSBookletDuplexModeBackSideOnly = 2,
}FSBookletDuplexMode;



typedef enum _FSBookletBinding {
e_FSBookletBindingRight = 0,
e_FSBookletBindingLeft = 1,
e_FSBookletBindingLeftTall = 2,
e_FSBookletBindingRightTall = 3,
}FSBookletBinding;



typedef enum _FSPageOrder {
e_FSPageOrderHorizontal = 0,
e_FSPageOrderHorizontalReversed = 1,
e_FSPageOrderVertical = 2,
}FSPageOrder;



typedef enum _FSPrintHandling {
e_FSPrintHandlingNone = 0,
e_FSPrintHandlingFitPaper = 1,
e_FSPrintHandlingReducePaper = 2,
e_FSPrintHandlingMultiplePages = 3,
e_FSPrintHandlingTileLargePages = 4,
e_FSPrintHandlingBooklet = 5,
}FSPrintHandling;



typedef enum _FSPrintRangeMode {
e_FSPrintRangeModeAll = 0,
e_FSPrintRangeModeCurrentView = 1,
e_FSPrintRangeModeCurrentPage = 2,
e_FSPrintRangeModePages = 3,
e_FSPrintRangeModePortfolioSelected = 4,
e_FSPrintRangeModePortfolioAll = 5,
}FSPrintRangeMode;


typedef struct _FSPrintParams {
  FS_BOOL is_show_ui;
  FS_BOOL is_reverse;
  FS_BOOL is_print_as_image;
  FS_BOOL is_print_auto_center;
  FS_BOOL is_print_auto_rotate;
  FS_BOOL is_simulate_overprinting;
  FS_BOOL is_print_page_border;
  FS_RANGE_HANDLE page_range;
  FSPrintContent print_content;
  FS_WSTR printer_name;
  FS_WSTR output_file_name;
  int num_copies;
  FSDuplexType duplex_type;
  FS_BOOL is_tile_label;
  FS_BOOL tile_mark;
  float tile_overlap;
  float tile_scale;
  FSPrintHandling handling;
  FSBookletBinding binding;
  FSBookletDuplexMode booklet_duplex_mode;
  int num_pages_h;
  int num_pages_v;
  FSPageOrder page_order;
}FSPrintParams;


typedef enum _FSWindowPosition {
e_FSWindowPositionTopLeft = 0,
e_FSWindowPositionTopCenter = 1,
e_FSWindowPositionTopRight = 2,
e_FSWindowPositionCenterLeft = 3,
e_FSWindowPositionCenter = 4,
e_FSWindowPositionCenterRight = 5,
e_FSWindowPositionBottomLeft = 6,
e_FSWindowPositionBottomCenter = 7,
e_FSWindowPositionBottomRight = 8,
}FSWindowPosition;



typedef enum _FSRelativeTarget {
e_FSRelativeTargetPageWindow = 0,
e_FSRelativeTargetAppWindow = 1,
e_FSRelativeTargetDesktop = 2,
e_FSRelativeTargetMonitor = 3,
}FSRelativeTarget;



typedef enum _FSResizeType {
e_FSResizeTypeNo = 0,
e_FSResizeTypeKeepRatio = 1,
e_FSResizeTypeYes = 2,
}FSResizeType;



typedef enum _FSOffScreenAction {
e_FSOffScreenAllow = 0,
e_FSOffScreenForceOnScreen = 1,
e_FSOffScreenCancel = 2,
}FSOffScreenAction;


typedef struct _FSFloatingInfo {
  
  FSWindowPosition window_pos;
  FSRelativeTarget relative_target;
  FSResizeType resize_type;
  FS_BOOL has_close;
  FS_BOOL has_title;
  FS_WSTR title;
  FSOffScreenAction off_screen;
  FSRectF rect;
}FSFloatingInfo;


typedef enum _FSPlayerWindowType {
e_FSPlayerWindowTypeDockedPage = 1,
e_FSPlayerWindowTypeFloating = 2,
e_FSPlayerWindowTypeFullScreen = 4,
}FSPlayerWindowType;


typedef struct _FSMediaSettings {
  FS_BOOL auto_play;
  FS_WSTR base_url;
  FS_RGB bg_color;
  float bg_opacity;
  int duration;
  int page;
  int repeat;
  FS_BOOL show_ui;
  FS_BOOL is_visible;
  int volume;
  FSPlayerWindowType window_type;
  FSFloatingInfo floating_wnd_info;
}FSMediaSettings;

typedef struct _FSPlayerArgs {
  FS_PDFDOC_HANDLE doc;
  FS_SCREENANNOT_HANDLE screen_annot;
  FS_RENDITION_HANDLE rendition;
  FS_WSTR URL;
  FS_WSTR audio_format;
  FSMediaSettings player_settings;
}FSPlayerArgs;


typedef enum _FSWordMatching {
e_FSWordMatchingMatchPhrase = 0,
e_FSWordMatchingMatchAllWords = 1,
e_FSWordMatchingMatchAnyWord = 2,
}FSWordMatching;


typedef struct _FSSearchOption {
  FS_BOOL is_whole_word;
  FS_BOOL is_case_sensitive;
  FS_BOOL is_search_bookmarks;
  FS_BOOL is_search_in_markup;
  FS_BOOL is_search_in_attachments;
  FS_BOOL is_ignore_accents;
  FS_BOOL is_proximity;
  FS_BOOL is_stemming;
  FS_BOOL is_ignore_full_width;
  int max_docs;
  FSWordMatching word_matching;
  FS_BOOL is_search_doc_text;
}FSSearchOption;

typedef struct _FSSearchIndexConfig {
  FS_WSTR name;
  FS_BOOL is_available;
  FS_WSTR path;
  FS_BOOL is_selected;
}FSSearchIndexConfig;


typedef enum _FSJSMediaPlayerState {
e_FSJSMediaPlayerStateOpen = 0,
e_FSJSMediaPlayerStateClose = 1,
e_FSJSMediaPlayerStatePlaying = 2,
e_FSJSMediaPlayerStateStop = 3,
e_FSJSMediaPlayerStateSuspend = 4,
}FSJSMediaPlayerState;


typedef struct _FSMediaPlayerCallback {
  void* user_data;
  void (*Release)(void* user_data);
  FS_BOOL (*Play)(void* user_data);
  void (*Close)(void* user_data);
  FS_BOOL (*Stop)(void* user_data);
  FS_BOOL (*Seek)(void* user_data, int current_pos);
  FSJSMediaPlayerState (*GetState)(void* user_data);
  FSMediaSettings (*GetPlayerSettings)(void* user_data);
  
}FSMediaPlayerCallback;


typedef enum _FSLanguage {
e_FSLanguageLanguageUnknown = 0,
e_FSLanguageCHS = 1,
e_FSLanguageCHT = 2,
e_FSLanguageDAN = 3,
e_FSLanguageDEU = 4,
e_FSLanguageENU = 5,
e_FSLanguageESP = 6,
e_FSLanguageFRA = 7,
e_FSLanguageITA = 8,
e_FSLanguageKOR = 9,
e_FSLanguageJPN = 10,
e_FSLanguageNLD = 11,
e_FSLanguageNOR = 12,
e_FSLanguagePTB = 13,
e_FSLanguageSUO = 14,
e_FSLanguageSVE = 15,
}FSLanguage;



typedef enum _FSAppInfoType {
e_FSAppInfoTypeFormsVersion = 0x0,
e_FSAppInfoTypeViewerType = 0x01,
e_FSAppInfoTypeViewerVariation = 0x02,
e_FSAppInfoTypeViewerVersion = 0x03,
e_FSAppInfoTypeAppVersion = 0x04,
}FSAppInfoType;



typedef enum _FSMailType {
e_FSMailTypeDoc = 0,
e_FSMailTypeForm = 1,
e_FSMailTypeMsg = 2,
}FSMailType;



typedef enum _FSJSFieldValueChangeType {
e_FSJSFieldValueChangedByFormat = 0,
e_FSJSFieldValueChangedByCalculation = 1,
e_FSJSFieldValueChangedBySetValue = 2,
e_FSJSFieldValueChangedBySetReadOnly = 3,
e_FSJSFieldValueChangedByFillColor = 4,
}FSJSFieldValueChangeType;



typedef enum _FSLayoutMode {
e_FSLayoutModeSinglePage = 0,
e_FSLayoutModeContinuous = 1,
e_FSLayoutModeFacing = 2,
e_FSLayoutModeContinuousFacing = 3,
}FSLayoutMode;



typedef enum _FSJsMailResult {
e_FSJSMailResultFailed = 0,
e_FSJSMailResultSuccess = 1,
e_FSJSMailResultUserAbort = 2,
}FSJsMailResult;



typedef enum _FSSearchScope {
e_FSSearchScopeActiveDoc = 0,
e_FSSearchScopeFolder = 1,
e_FSSearchScopeIndex = 2,
e_FSSearchScopeActiveIndexes = 3,
}FSSearchScope;



typedef enum _FSJavascriptEventType {
e_FSJavascriptEventTypeJavascriptEventTypeUnknown = 0,
e_FSJavascriptEventTypeAppInit = 1,
e_FSJavascriptEventTypeHtmlCallback = 2,
e_FSJavascriptEventTypeDocOpen = 3,
e_FSJavascriptEventTypeDocWillPrint = 4,
e_FSJavascriptEventTypeDocDidprint = 5,
e_FSJavascriptEventTypeDocWillSave = 6,
e_FSJavascriptEventTypeDocDidSave = 7,
e_FSJavascriptEventTypeDocWillClose = 8,
e_FSJavascriptEventTypePageOpen = 9,
e_FSJavascriptEventTypePageClose = 10,
e_FSJavascriptEventTypePageInView = 11,
e_FSJavascriptEventTypePageOutView = 12,
e_FSJavascriptEventTypeFieldMouseDown = 13,
e_FSJavascriptEventTypeFieldMouseUp = 14,
e_FSJavascriptEventTypeFieldMouseEnter = 15,
e_FSJavascriptEventTypeFieldMouseExit = 16,
e_FSJavascriptEventTypeFieldFocus = 17,
e_FSJavascriptEventTypeFieldBlur= 18,
e_FSJavascriptEventTypeFieldKeyStroke= 19,
e_FSJavascriptEventTypeFieldValidate= 21,
e_FSJavascriptEventTypeFieldCalculate= 22,
e_FSJavascriptEventTypeFieldFormat= 23,
e_FSJavascriptEventTypeScreenFocus = 24,
e_FSJavascriptEventTypeScreenBlur = 25,
e_FSJavascriptEventTypeScreenOpen = 26,
e_FSJavascriptEventTypeScreenClose = 27,
e_FSJavascriptEventTypeScreenMouseDown = 28,
e_FSJavascriptEventTypeScreenMouseUp = 29,
e_FSJavascriptEventTypeScreenMouseEnter = 30,
e_FSJavascriptEventTypeScreenMouseExit = 31,
e_FSJavascriptEventTypeScreenInview = 32,
e_FSJavascriptEventTypeScreenOutview = 33,
e_FSJavascriptEventTypeBatchExec = 34,
e_FSJavascriptEventTypeMenuExec = 35,
e_FSJavascriptEventTypeConsoleExec = 36,
e_FSJavascriptEventTypeExternalExec = 37,
e_FSJavascriptEventTypeBookmarkMouseUp = 38,
e_FSJavascriptEventTypeLinkMouseUp = 39,
e_FSJavascriptEventTypeMediaBlur = 40,
e_FSJavascriptEventTypeMediaClose = 41,
e_FSJavascriptEventTypeMediaDone = 42,
e_FSJavascriptEventTypeMediaPlay = 43,
e_FSJavascriptEventTypeMediaReady = 44,
e_FSJavascriptEventTypeMediaSeek = 45,
e_FSJavascriptEventTypeMediaStop = 46,
}FSJavascriptEventType;



typedef enum _FSJavascriptModifyItemType {
e_FSJavascriptModifyItemTypeNone = 0,
e_FSJavascriptModifyItemTypeField = 1,
e_FSJavascriptModifyItemTypeAnnot = 2,
e_FSJavascriptModifyItemTypePage = 3,
e_FSJavascriptModifyItemTypeDoc= 4,
}FSJavascriptModifyItemType;



typedef enum _FSJavascriptModifyPropertyType {
e_FSJavascriptModifyPropertyTypeNone = 0,
e_FSJavascriptModifyPropertyTypeBorderColor = 1,
e_FSJavascriptModifyPropertyTypeFillColor = 2,
e_FSJavascriptModifyPropertyTypeTextColor = 3,
e_FSJavascriptModifyPropertyTypeValue = 4,
e_FSJavascriptModifyPropertyTypeCharLimit = 5,
e_FSJavascriptModifyPropertyTypeButtonPosition = 6,
e_FSJavascriptModifyPropertyTypeSelectChange = 7,
e_FSJavascriptModifyPropertyTypeAlignment = 8,
e_FSJavascriptModifyPropertyTypeBorderStyle = 9,
e_FSJavascriptModifyPropertyTypeButtonAlignX = 10,
e_FSJavascriptModifyPropertyTypeButtonAlignY = 11,
e_FSJavascriptModifyPropertyTypeButtonFitBounds = 12,
e_FSJavascriptModifyPropertyTypeButtonScaleHow = 13,
e_FSJavascriptModifyPropertyTypeButtonScaleWhen = 14,
e_FSJavascriptModifyPropertyTypeComb = 15,
e_FSJavascriptModifyPropertyTypeDefaultStyle = 16,
e_FSJavascriptModifyPropertyTypeDefaultValue = 17,
e_FSJavascriptModifyPropertyTypeDoNotScroll = 18,
e_FSJavascriptModifyPropertyTypeDelay= 19,
e_FSJavascriptModifyPropertyTypeDisplay = 20,
e_FSJavascriptModifyPropertyTypeEditable = 21,
e_FSJavascriptModifyPropertyTypeNotSpellCheck = 22,
e_FSJavascriptModifyPropertyTypeHidden = 23,
e_FSJavascriptModifyPropertyTypeHighlight= 24,
e_FSJavascriptModifyPropertyTypeLineWidth = 25,
e_FSJavascriptModifyPropertyTypeMultiline = 26,
e_FSJavascriptModifyPropertyTypePassword = 27,
e_FSJavascriptModifyPropertyTypeRect = 28,
e_FSJavascriptModifyPropertyTypeRequired = 29,
e_FSJavascriptModifyPropertyTypeRichText = 30,
e_FSJavascriptModifyPropertyTypeRichValue = 31,
e_FSJavascriptModifyPropertyTypeRotation = 32,
e_FSJavascriptModifyPropertyTypeJavascriptModifyPropertyTypeNormalCaption = 33,
e_FSJavascriptModifyPropertyTypeDownCaption = 34,
e_FSJavascriptModifyPropertyTypeRolloverCaption = 35,
e_FSJavascriptModifyPropertyTypeTextFont = 36,
e_FSJavascriptModifyPropertyTypeUserName = 37,
e_FSJavascriptModifyPropertyTypeButtonSetIcon = 38,
e_FSJavascriptModifyPropertyTypeCheckThisBox = 39,
e_FSJavascriptModifyPropertyTypeClearItems = 40,
e_FSJavascriptModifyPropertyTypeDefaultIsChecked = 41,
e_FSJavascriptModifyPropertyTypeDeleteItemAt = 42,
e_FSJavascriptModifyPropertyTypeInsertItemAt = 43,
e_FSJavascriptModifyPropertyTypeSetItems = 44,
e_FSJavascriptModifyPropertyTypeActivated = 45,
e_FSJavascriptModifyPropertyTypeArrowBegin = 46,
e_FSJavascriptModifyPropertyTypeArrowEnd = 47,
e_FSJavascriptModifyPropertyTypeAttachIcon = 48,
e_FSJavascriptModifyPropertyTypeBorderEffectIntensity = 49,
e_FSJavascriptModifyPropertyTypeBorderEffectStyle = 50,
e_FSJavascriptModifyPropertyTypeCallout = 51,
e_FSJavascriptModifyPropertyTypeCaretSymbol = 52,
e_FSJavascriptModifyPropertyTypeContents = 53,
e_FSJavascriptModifyPropertyTypeDash = 54,
e_FSJavascriptModifyPropertyTypeDoCaption = 55,
e_FSJavascriptModifyPropertyTypeGestures = 56,
e_FSJavascriptModifyPropertyTypeIntent = 57,
e_FSJavascriptModifyPropertyTypeLeaderExtend = 58,
e_FSJavascriptModifyPropertyTypeLeaderLength = 59,
e_FSJavascriptModifyPropertyTypeLineEnding = 60,
e_FSJavascriptModifyPropertyTypeNoteIcon = 61,
e_FSJavascriptModifyPropertyTypeToggleNoView = 62,
e_FSJavascriptModifyPropertyTypeOpacity = 63,
e_FSJavascriptModifyPropertyTypePoints = 64,
e_FSJavascriptModifyPropertyTypeQuads = 65,
e_FSJavascriptModifyPropertyTypeTextSize = 66,
e_FSJavascriptModifyPropertyTypeRichContents = 67,
e_FSJavascriptModifyPropertyTypeRichDefaults = 68,
e_FSJavascriptModifyPropertyTypeSoundIcon = 69,
e_FSJavascriptModifyPropertyTypeSubject = 70,
e_FSJavascriptModifyPropertyTypeVertices = 71,
e_FSJavascriptModifyPropertyTypeImport = 72,
e_FSJavascriptModifyPropertyTypeRemoveDataObject = 73,
e_FSJavascriptModifyPropertyTypeImportDataObject = 74,
e_FSJavascriptModifyPropertyTypeRemoveTemplate = 75,
e_FSJavascriptModifyPropertyTypeAddPageTemplate = 76,
e_FSJavascriptModifyPropertyTypeRsetForms = 77,
e_FSJavascriptModifyPropertyTypeRsetAllForms = 78,
e_FSJavascriptModifyPropertyTypeTitle = 79,
e_FSJavascriptModifyPropertyTypeResizePage = 80,
e_FSJavascriptModifyPropertyTypeSpawnPageFromTemplate = 81,
e_FSJavascriptModifyPropertyTypeAddWeblinks = 82,
e_FSJavascriptModifyPropertyTypeRemoveWeblinks = 83,
e_FSJavascriptModifyPropertyTypeRemoveLinks = 84,
e_FSJavascriptModifyPropertyTypePageRotations = 85,
e_FSJavascriptModifyPropertyTypeNewPage = 86,
e_FSJavascriptModifyPropertyTypeMovePage = 87,
e_FSJavascriptModifyPropertyTypeInsertPages = 88,
e_FSJavascriptModifyPropertyTypeReplacePages = 89,
e_FSJavascriptModifyPropertyTypeImportAnnotFromXFDF = 90,
e_FSJavascriptModifyPropertyTypeDeleteAnnot = 91,
e_FSJavascriptModifyPropertyTypeAddWatermark = 92,
e_FSJavascriptModifyPropertyTypeFlatDocument = 93,
e_FSJavascriptModifyPropertyTypeAddFileAttachment = 94,
e_FSJavascriptModifyPropertyTypeRuntimeHighlight = 95,
e_FSJavascriptModifyPropertyTypeRuntimeHighlightColor = 96,
e_FSJavascriptModifyPropertyTypeInsertFromTemplates = 97,
e_FSJavascriptModifyPropertyTypeAddLink = 98,
e_FSJavascriptModifyPropertyTypeMultipleSelection = 99,
e_FSJavascriptModifyPropertyTypeSetPageTemplateVisible = 100,
}FSJavascriptModifyPropertyType;



typedef enum _FSJavascriptModifyType {
e_FSJavascriptModifyTypeNone = 0,
e_FSJavascriptModifyTypeAdd = 1,
e_FSJavascriptModifyTypeModify = 2,
e_FSJavascriptModifyTypeDelete = 3,
}FSJavascriptModifyType;



typedef enum _FSModifyItemType {
e_FSModifyItemTypeNone = 0,
e_FSModifyItemTypeField = 1,
e_FSModifyItemTypeAnnot = 2,
e_FSModifyItemTypePage = 3,
e_FSModifyItemTypeDoc = 4,
}FSModifyItemType;


typedef struct _FSJavascriptModifyItemInfo {
  FSJavascriptEventType event_type;
  int page_index;
  int field_control_index;
  
  FSJavascriptModifyItemType modify_item_type;
  FSJavascriptModifyType modify_type;
  FSJavascriptModifyPropertyType modify_property_type;
  FS_WSTR field_or_annot_name;
  FS_WSTR new_value;
  FS_WSTR old_value;
}FSJavascriptModifyItemInfo;

typedef struct _FSActionCallback {
  void* user_data;
  void (*Release)(void* user_data);
  FS_BOOL (*InvalidateRect)(void* user_data, const FS_PDFDOC_HANDLE document, int page_index, const FSRectF pdf_rect);
  int (*GetCurrentPage)(void* user_data, const FS_PDFDOC_HANDLE document);
  void (*SetCurrentPage)(void* user_data, const FS_PDFDOC_HANDLE document, int page_index);
  void (*SetCurrentPage0)(void* user_data, const FS_PDFDOC_HANDLE document, const FS_DESTINATION_HANDLE destination);
  FSRotation (*GetPageRotation)(void* user_data, const FS_PDFDOC_HANDLE document, int page_index);
  FS_BOOL (*SetPageRotation)(void* user_data, const FS_PDFDOC_HANDLE document, int page_index, FSRotation rotation);
  FS_BOOL (*ExecuteNamedAction)(void* user_data, const FS_PDFDOC_HANDLE document, const char* named_action);
  FS_BOOL (*SetDocChangeMark)(void* user_data, const FS_PDFDOC_HANDLE document, FS_BOOL change_mark);
  FS_BOOL (*GetDocChangeMark)(void* user_data, const FS_PDFDOC_HANDLE document);
  int (*GetOpenedDocCount)(void* user_data);
  FS_PDFDOC_HANDLE (*GetOpenedDoc)(void* user_data, int index);
  FS_PDFDOC_HANDLE (*GetCurrentDoc)(void* user_data);
  FS_PDFDOC_HANDLE (*CreateBlankDoc)(void* user_data);
  void (*CloseDoc)(void* user_data, const FS_PDFDOC_HANDLE document, FS_BOOL is_prompt_to_save);
  FS_PDFDOC_HANDLE (*OpenDoc)(void* user_data, const wchar_t* file_path, const FS_WSTR* password);
  FS_BOOL (*Beep)(void* user_data, int type);
  FS_WSTR (*FSResponse)(void* user_data, const wchar_t* question, const wchar_t* title, const wchar_t* default_value,
                                const wchar_t* label, FS_BOOL is_password);
  FS_WSTR (*GetFilePath)(void* user_data, const FS_PDFDOC_HANDLE document);
  FS_BOOL (*IsLocalFile)(void* user_data, const FS_PDFDOC_HANDLE document);
  FS_WSTR (*GetAttachmentsFilePath)(void* user_data, const FS_PDFDOC_HANDLE pdf_doc, const wchar_t* name);
  FS_WSTR (*GetExtractedEmbeddedFilePath)(void* user_data, const FS_PDFDOC_HANDLE pdf_doc, const wchar_t* name);
  FS_BOOL (*Print)(void* user_data, const FS_PDFDOC_HANDLE document, FS_BOOL is_ui,
                     const FS_RANGE_HANDLE page_range, FS_BOOL is_silent ,
                     FS_BOOL is_shrunk_to_fit, FS_BOOL is_printed_as_image,
                     FS_BOOL is_reversed, FS_BOOL is_to_print_annots);
  FS_BOOL (*Print0)(void* user_data, const FS_PDFDOC_HANDLE document, const FSPrintParams print_params);
  FS_BOOL (*SubmitForm)(void* user_data, const FS_PDFDOC_HANDLE document, void* form_data, FS_UINT32 length, const char* url, FSFileFormatType file_format_type);
  FS_BOOL (*LaunchURL)(void* user_data, const char* url);
  FS_WSTR (*BrowseFile)(void* user_data);
  FS_WSTR (*BrowseFile0)(void* user_data, FS_BOOL is_open_dialog, const wchar_t* file_format, const wchar_t* file_filter);
  FSLanguage (*GetLanguage)(void* user_data);
  int (*Alert)(void* user_data, const wchar_t* msg, const wchar_t* title, int type, int icon);
  FSIdentityProperties (*GetIdentityProperties)(void* user_data);
  FS_BOOL (*SetIdentityProperties)(void* user_data, const FSIdentityProperties identity_properties);
  FS_WSTR (*PopupMenu)(void* user_data, FSMenuList* menulist_array, FS_UINT32 array_length_menus, FS_BOOL is_selected_item);
  FSMenuItemEx (*PopupMenuEx)(void* user_data, FSMenuItemEx* menuitem_array, FS_UINT32 array_length_menus, FS_BOOL is_selected_item);
  FS_WSTR (*GetAppInfo)(void* user_data, FSAppInfoType type);
  FS_BOOL (*MailData)(void* user_data, void* data, FSMailType data_type, FS_BOOL is_ui, const wchar_t* to,
                        const wchar_t* subject, const wchar_t* cc, const wchar_t* bcc, const wchar_t* message);
  FS_UINT32 (*VerifySignature)(void* user_data, const FS_PDFDOC_HANDLE document, const FS_SIGNATURE_HANDLE pdf_signature);
  FS_WSTR (*GetUntitledBookmarkName)(void* user_data);
  void (*GetPrinterNameList)(void* user_data, FS_WSTR* return_stringarray, FS_UINT32* return_stringarray_length);
  FS_BOOL (*AddToolButton)(void* user_data, const FSButtonItem button_item);
  FS_BOOL (*RemoveToolButtom)(void* user_data, const wchar_t* button_name);
  void (*GetMenuItemNameList)(void* user_data, FSMenuList* return_menulistarray, FS_UINT32* return_menulistarray_length);
  FS_BOOL (*AddMenuItem)(void* user_data, const FSMenuItemConfig menu_item_config, FS_BOOL is_prepend);
  FS_BOOL (*AddSubMenu)(void* user_data, const FSMenuItemConfig menu_item_config);
  FS_BOOL (*ShowDialog)(void* user_data, const FSDialogDescriptionConfig dlg_config);
  FS_BOOL (*GetFullScreen)(void* user_data);
  void (*SetFullScreen)(void* user_data, FS_BOOL is_full_screen);
  void (*OnFieldValueChanged)(void* user_data, const wchar_t* field_name, FSJSFieldValueChangeType type, const FS_WSTR* value_before_changed, FS_UINT32 value_before_changed_array_length_, const FS_WSTR* value_after_changed, FS_UINT32 value_after_changed_array_length_);
  void (*UpdateLogicalLabel)(void* user_data);
  FSJsMailResult (*MailDoc)(void* user_data, const FS_PDFDOC_HANDLE document,
    const wchar_t* to_address, const wchar_t* cc_address, const wchar_t* bcc_address,
    const wchar_t* subject, const wchar_t* message, FS_BOOL is_ui);
  FS_WSTR (*GetTemporaryFileName)(void* user_data, const FS_PDFDOC_HANDLE document, const wchar_t* file_suffix_name);
  FSMediaPlayerCallback* (*OpenMediaPlayer)(void* user_data, const FSPlayerArgs player_args);
  FS_WSTR (*GetTemporaryDirectory)(void* user_data);
  void (*Scroll)(void* user_data, const FSPointF point);
  void (*SelectPageNthWord)(void* user_data, int page_index, int start_offset, int end_offset, FS_BOOL is_show_selection);
  FSPointF (*GetMousePosition)(void* user_data);
  FSRectF (*GetPageWindowRect)(void* user_data, const FS_PDFDOC_HANDLE document, int page_index);
  FSLayoutMode (*GetLayoutMode)(void* user_data);
  void (*SetLayoutMode)(void* user_data, FSLayoutMode layout_mode, FS_BOOL is_cover_mode);
  float (*GetPageScale)(void* user_data);
  void (*SetPageScale)(void* user_data,  FSZoomMode zoom_mode, const FS_DESTINATION_HANDLE dest);
  FSZoomMode (*GetPageZoomMode)(void* user_data);
  void (*Query)(void* user_data, const wchar_t* keywords, FSSearchScope search_scope, const FSSearchOption search_option, const wchar_t* di_path);
  FSSearchIndexConfig (*AddSearchIndex)(void* user_data, const wchar_t* di_path, FS_BOOL is_selected);
  FS_BOOL (*RemoveSearchIndex)(void* user_data, const FSSearchIndexConfig search_index_config);
  void (*GetSignatureAPStyleNameList)(void* user_data, FS_WSTR* return_stringarray, FS_UINT32* return_stringarray_length);
  FSSOAPResponseInfo (*SoapRequest)(void* user_data, const FSSOAPRequestProperties request_params);
  void (*EnablePageLoop)(void* user_data, FS_BOOL is_loop);
  FS_BOOL (*IsPageLoop)(void* user_data);
  void (*SetDefaultPageTransitionMode)(void* user_data, const wchar_t* trans_type, const wchar_t* trans_di);
  FS_BOOL (*IsCurrentDocOpenedInBrowser)(void* user_data);
  void (*PostMessageToHtml)(void* user_data, FS_WSTR* message_array, FS_UINT32 message_array_length);
  void (*NotifyBeginDoJob)(void* user_data, const FS_PDFDOC_HANDLE document, FSJavascriptEventType event_type);
  void (*NotifyAfterDataChange)(void* user_data, const FS_PDFDOC_HANDLE document, FSJavascriptModifyItemInfo modify_item_info);
  void (*NotifyEndDoJob)(void* user_data, const FS_PDFDOC_HANDLE document, FSJavascriptEventType event_type);
  FS_BOOL (*InitModifyItem)(void* user_data, const FS_PDFDOC_HANDLE document, FSModifyItemType item_type, int page_index, const wchar_t*dict_name);
  void (*ResetModifyItem)(void* user_data, const FS_PDFDOC_HANDLE document);
  int (*GetVisiblePageCount)(void* user_data, const FS_PDFDOC_HANDLE document);
  int (*GetVisiblePage)(void* user_data, const FS_PDFDOC_HANDLE document, int index);
}FSActionCallback;

#ifdef __cplusplus
}
#endif
#endif
