/**************************************************************************** * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | * * -----------------------------------------------------------| \\._.// * * SmaugWiz (C) 1998 by Russ Pillsbury (Windows NT version) | (0...0) * * -----------------------------------------------------------| ).:.( * * SMAUG (C) 1994, 1995, 1996 by Derek Snider | {o o} * * -----------------------------------------------------------| / ' ' \ * * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, |~'~.VxvxV.~'~* * Scryn, Swordbearer, Rennard, Tricops, and Gorog. | * * ------------------------------------------------------------------------ * * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe. * * ------------------------------------------------------------------------ * * Smaug Menus Interface file * ****************************************************************************/ #ifndef MENUS_H #define MENUS_H class CMenuData; enum MenuFnOps { MF_DISP, MF_EDIT }; class CMenuFnData { public: MenuFnOps Op; // Display or Edit CMenuData *pMd; void *Base; // base address CCharacter *ch; char *pArg; // any string argument }; enum MenuTypes { MT_INT, MT_SINT, MT_BOOL, MT_RIS, MT_STRING, MT_CSTRING, MT_GROUP, MT_END }; class CMenuData { public: void SetCheck (CCharacter& Ch, BOOL bSet, BOOL bDisplay = FALSE); char Section; char Choice; int y; int x; int Len; int Offset; MenuTypes Type; int Base; BOOL (*MenuFn)(CMenuFnData& Fd); int Xlines; // # of extended (additional) lines int Xcol; // starting column for extended lines int Xlen; // length for extended lines }; class CSmaugMenu { public: virtual ~CSmaugMenu () = 0 {} virtual void Display (CCharacter& Ch, char page) { Display (Ch, page - 'a'); } virtual void Display (CCharacter& Ch, int page) = 0; virtual void Save (CCharacter& Ch) = 0; virtual const CString& GetName () = 0; virtual void DisplayData (CCharacter& Ch); virtual BOOL Edit (CCharacter& Ch, char* arg, const char* cmd); virtual void ReturnToMenu (CCharacter* ch, BOOL b) { if (m_pRetFun) m_pRetFun (ch, b); } void ClearToEnd (CCharacter& Ch); // Housekeeping vars int m_Vnum; char *m_Base [2]; BOOL m_bProto; int m_HelpMenu; int m_PageNr; int m_CurrPageLines; int m_nDataItems; CMenuData *m_pPageData; void (*m_pRetFun)(CCharacter* ch, BOOL bDone); void *m_pRetData; }; extern int GetLineCount (const char* str); extern int GetItemCount (CMenuData* pMd); extern BOOL MenuStringFn (CMenuFnData& Fd); extern BOOL MenuStringEditFn (CMenuFnData& Fd); extern BOOL HandleBooleanGroup (CMenuFnData& Fd, BOOL bDisplay); extern int GetAffect (CAffectList& AList, int type); extern void SetAffect (CAffectList& AList, int apply, int value); extern void SetRisString (char* str, CAffectList& AList, int bit); extern BOOL GetAffected (CAffectList& AList, int bit); #endif