/****************************************************************************
* [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