#ifndef EDMPLUGINMAIN_VISITED
#define EDMPLUGINMAIN_VISITED



/***************************************************************************\
* Flags for menu reactors. These flags can be OR:ed together.
\***************************************************************************/
const int Rmnu_Nothing                =  0;    //No requirements.
const int Rmnu_MustHaveSelection      =  1;    //Item only available when file/folder selected.
const int Rmnu_OnlyFiles              =  2;    //Only files, not folders valid for command.
const int Rmnu_OnlyFolders            =  4;    //Only folders, not files valid for command.
const int Rmnu_OnlySingleSelection    =  8;    //Only valid on a single file/folder.
const int Rmnu_OnlyMultipleSelection  = 16;    //Only valid on multiple files/folders.
const int Rmnu_OnlyInContextMenu      = 32;    //Only display item in context menu.
const int Rmnu_NeverInContextMenu     = 64;    //Only in standard menu, not in the context menu.


/***************************************************************************\
* Access rights flags. These flags can be OR:ed together.
* The flags can be passed as argument to IEdmFile::HasRights
\***************************************************************************/
const int Right_Read      = 1;
const int Right_Lock      = 2;
const int Right_Destroy   = 4;
const int Right_AddRename = 8;
const int Right_Share = 16;


/***************************************************************************\
* Control types. These constants are returned by the method 
* IEdmCardControl::GetType
\***************************************************************************/
const int CtrlType_Icon               = 1;
const int CtrlType_Text               = 2;
const int CtrlType_Frame              = 3;
const int CtrlType_Editbox            = 4;
const int CtrlType_Button             = 5;
const int CtrlType_RadioColumn        = 6;
const int CtrlType_ComboboxSimple     = 7;
const int CtrlType_ComboboxDropdown   = 8;
const int CtrlType_ComboboxDroplist   = 9;
const int CtrlType_Listbox            = 10;
const int CtrlType_TabControl         = 11;
const int CtrlType_Viewer             = 12;
const int CtrlType_Checkbox           = 13;


/***************************************************************************\
* Validation types. Returned from IEdmCardControl::GetValidation.
\***************************************************************************/
const int CtrlValidation_None         = 0;  //No validation.                   
const int CtrlValidation_String       = 1;  //Check string length.             
const int CtrlValidation_Int          = 2;  //Check integer range.             
const int CtrlValidation_Double       = 3;  //Check floating point value range.
const int CtrlValidation_Date         = 4;  //Check date range.

/***************************************************************************\
* Value types. Returned from IEdmCardCtrl::GetValueType.
\***************************************************************************/
const int CtrlValue_None              = 0;  //Not connected to a variable.
const int CtrlValue_Attribute         = 1;  //Obsolete in Conisio 5.0
const int CtrlValue_AttributeClass    = 2;  //Obsolete in Conisio 5.0
const int CtrlValue_Variable          = 3;  //Connected to a variable.

/***************************************************************************\
* Bit flags for the file format plugins.
\***************************************************************************/ 
enum EdmFileFormatFlags
{
  EdmFmt_HasReferences              = 1,  //A file can reference other files?
  EdmFmt_HasExtraSubFileNavigation  = 2,  //Has sub-file navigation besides references?
  EdmFmt_HasPreview                 = 4,  //Has IEdmFilePreview interface?
  EdmFmt_HasAttributes              = 8,  //Can store attributes?
  EdmFmt_PreviewExtendsViewMenu     = 16, //Will preview add items to view menu?
  EdmFmt_HasProjectName             = 32, //Supports a ProjectName variable?
  EdmFmt_CustomRootFolder           = 64, //The root folder is a custom sub-file folder?
  EdmFmt_HasConfigurations          = 128,//Supports configurations?
  EdmFmt_RoutedClass                = 256,//Some functionality handled by another plugin?
  EdmFmt_HasGhosts                  = 512,//Ghostreferences, references referenced by reference but stored in main drawing
  EdmFmt_GetNotify                  = 1024,//call plugin after get
  EdmFmt_GetTopNodeData             = 2048,//call plugin when starting to process a topnode ref
  EdmFmt_HasBOMs                    = 4096,//Supports BOMs?


  EdmFmt_All                        = 0xffffffff //All flags, used as mask.
};

/***************************************************************************\
* Flags to IEdmVault::CreatePluginMenu2. These flags are defined in the
* type library.
\***************************************************************************/
/*
typedef enum tagPluginMenuFlags
{
  PMF_AllItemsInSameFolder  = 1,
  PMF_IncludeAdminItem      = 2,
  PMF_GrayOutInvalidItems   = 4,
  PMF_ContextMenu           = 8
}
PluginMenuFlags;
*/


/***************************************************************************\
* IDs of interfaces and classes.                   
\***************************************************************************/
#ifndef _EDMINTERFACE_MAIN

#ifdef __cplusplus
extern "C" {
#endif

extern const GUID IID_IEdmReactor;
extern const GUID IID_IEdmReactorMenu;
extern const GUID IID_IEdmReactorState;
extern const GUID IID_IEdmReactorLock;
extern const GUID IID_IEdmReactorFileOp;

//Class IDs.
#define CLSID__EdmStrLst __uuidof(EdmStrLst) //{0x0969ABCC,0x61CE,0x11D3,{0x90,0xDD,0x00,0xC0,0x4F,0x56,0xB3,0xAF}};
#define CLSID__EdmVault __uuidof(EdmVault) //{0xAE784C6C,0x0155,0x11D3,{0xB2,0x4B,0x00,0x00,0xF8,0x79,0xF9,0x3B}};

#ifdef __cplusplus
}
#endif


#endif

/***************************************************************************\
* Useful macros
\***************************************************************************/

#define VERIFY_PTR(PTR) if(!PTR) { ASSERT(false); return E_POINTER; }

#endif
