Metropoli BBS
VIEWER: tcxlmnu.h MODE: TEXT (ASCII)
/*=====[ The TesSeRact(TM) CXL User Interface Development System ]======*
 | Copyright (c) 1987-1990, Innovative Data Concepts. All Rights Reserved
 |
 | This Library is part of IDC's TesSeRact Development Tools product
 | line. For information about other IDC products, call 1-215-884-3373.
 *----------------------------------------------------------------------*
 | <TCXLmnu.h> : Public definitions and prototypes for TCXL Menu system
 | (User level).
 *----------------------------------------------------------------------*
 | PGS : $Id: tcxlmnu.h 5.51 90/10/01 00:00:00 MLM Release Locker: MLM $
 | $Log:	tcxlmnu.h $
 | Revision 5.51  90/10/01  00:00:00  MLM
 | TCXL 5.51
 | 
 *======================================================================*/
#ifndef  _TCXLmnu_
#  define   _TCXLmnu_ 1
#  ifndef   _TCXLwnd_
#    include <TCXLwin.h>   /* window definitions */
#  endif
#  ifndef   _TCXLkey_
#    include <TCXLkey.h>   /* keyboard definitions */
#  endif
                              /*- MnuEnd() menu type -------*/
#define  MNU_HOR     0x01     /* horizontal                 */
#define  MNU_VER     0x02     /* vertical                   */
#define  MNU_OMN     0x07     /* omnidirectional            */
#define  MNU_PUL     0x08     /* pull-down                  */
#define  MNU_NQS     0x10     /* disable quick selection    */
#define  MNU_SAV     0x20     /* save last bar position     */
#define  MNU_DSP     0x40     /* always display             */
#define  MNU_USE     0x80     /* use current window         */
                              /*- MnuItm() feature mask ----*/
#define  ITM_PUL     0x01     /* pull-down attached         */
#define  ITM_NSL     0x02     /* not selectable             */
#define  ITM_AFT     0x04     /* close after select         */
#define  ITM_ALL     0x08     /* close all when selected    */
#define  ITM_BEF     0x10     /* close before select        */
#define  ITM_DSP     0x20     /* redisplay                  */

/*------------------[ Data objects and access macros ]------------------*/

TYP   struct   Idf   IdfT, *IdfP;      /* object, pointer types */
TYP   struct   Mctl  MctlT;
TYP   struct   Mdf   MdfT, *MdfP;

struct   Mctl           /*-[ Menu-control object ]----------*/
{  MdfP     mtop;       /* 00|00 : top menu                 */
   MdfP     mcur;       /* 02|04 : current menu             */
   IntT     mmnu;       /* 04|08 : menu level               */
   IntT     mitm;       /* 06|0A : item level               */
};                      /* 08|0C ]--------------------------*/

GBL   MctlT CDC   _MnuCtl;    /*- global menu-control object -----------*/
#define  MctlTop  (_MnuCtl.mtop)                      /* top menu       */
#define  MctlCur  (_MnuCtl.mcur)                      /* current menu   */
#define  MctlMnu  (_MnuCtl.mmnu)                      /* menu level     */
#define  MctlItm  (_MnuCtl.mitm)                      /* item level     */

struct   Mdf            /*-[ Menu-definition object ]----*/
{  MdfP     mprv;       /* 00|00 : previous menu         */
   MdfP     mnxt;       /* 02|04 : next menu             */
   MdfP     mpar;       /* 04|08 : parent menu           */
   IdfP     mtop;       /* 06|0C : head item             */
   IdfP     mcur;       /* 08|10 : current item          */
   VfvCP    mopn;       /* 0A|14 : post-open function    */
   TagT     mtag;       /* 0C|18 : selected tag ID       */
   VposT    mbeg;       /* 0E|1A : start position        */
   VposT    mend;       /* 10|1C : end position          */
   BoxT     mfrm;       /* 12|1E : border                */
   AtrT     mwat;       /* 14|20 : window attr           */
   BytT     mtyp;       /* 15|21 : type mask             */
   BytT     mwid;       /* 16|22 : bar width             */
   BytT     mofs;       /* 17|23 : text offset           */
   AtrT     mtat;       /* 18|24 : text attr             */
   AtrT     msat;       /* 19|25 : select char attr      */
   AtrT     mnat;       /* 1A|26 : non-select attr       */
   AtrT     mbat;       /* 1B|27 : bar attribute         */
};                      /* 1C|28 ]-----------------------*/
#define  MdfPrv(m)   ((m)->mprv)                   /* previous MdfT     */
#define  MdfNxt(m)   ((m)->mnxt)                   /* next MdfT         */
#define  MdfPar(m)   ((m)->mpar)                   /* parent MdfT       */
#define  MdfTop(m)   ((m)->mtop)                   /* head IdfT         */
#define  MdfCur(m)   ((m)->mcur)                   /* current IdfT      */
#define  MdfOpn(m)   ((m)->mopn)                   /* post-open func    */
#define  MdfTag(m)   ((m)->mtag)                   /* selected tag ID   */
#define  MdfBeg(m)   ((m)->mbeg)                   /* start position    */
#define  MdfBegW(m)  (VposW(MdfBeg(m)))            /*    word           */
#define  MdfBegC(m)  (VposC(MdfBeg(m)))            /*    col            */
#define  MdfBegR(m)  (VposR(MdfBeg(m)))            /*    row            */
#define  MdfEnd(m)   ((m)->mend)                   /* end position      */
#define  MdfEndW(m)  (VposW(MdfEnd(m)))            /*    word           */
#define  MdfEndC(m)  (VposC(MdfEnd(m)))            /*    col            */
#define  MdfEndR(m)  (VposR(MdfEnd(m)))            /*    row            */
#define  MdfFrm(m)   ((m)->mfrm)                   /* border            */
#define  MdfFrmT(m)  (BoxTyp(MdfFrm(m)))           /*    type           */
#define  MdfFrmA(m)  (BoxAtr(MdfFrm(m)))           /*    attr           */
#define  MdfWat(m)   ((m)->mwat)                   /* window attr       */
#define  MdfTyp(m)   ((m)->mtyp)                   /* type mask         */
#define  MdfHor(m)   (0 != (MdfTyp(m) & MNU_HOR))  /*    horizontal     */
#define  MdfVer(m)   (0 != (MdfTyp(m) & MNU_VER))  /*    vertical       */
#define  MdfOmn(m)   (0 != (MdfTyp(m) & MNU_OMN))  /*    omnidirectional*/
#define  MdfPul(m)   (0 != (MdfTyp(m) & MNU_PUL))  /*    pull-down      */
#define  MdfNqs(m)   (0 != (MdfTyp(m) & MNU_NQS))  /*    no quick select*/
#define  MdfSav(m)   (0 != (MdfTyp(m) & MNU_SAV))  /*    save bar pos   */
#define  MdfDsp(m)   (0 != (MdfTyp(m) & MNU_DSP))  /*    always display */
#define  MdfUse(m)   (0 != (MdfTyp(m) & MNU_USE))  /*    use current    */
#define  MdfWid(m)   ((m)->mwid)                   /* bar width         */
#define  MdfOfs(m)   ((m)->mofs)                   /* text offset       */
#define  MdfTat(m)   ((m)->mtat)                   /* text attribute    */
#define  MdfSat(m)   ((m)->msat)                   /* select char attr  */
#define  MdfNat(m)   ((m)->mnat)                   /* non-select attr   */
#define  MdfBat(m)   ((m)->mbat)                   /* bar attribute     */

struct  Idf                /*-[ Item-definition object ]----*/
{  IdfP  iprv;             /* 00|00 : previous IdfT         */
   IdfP  inxt;             /* 02|04 : next IdfT             */
   MdfP  isub;             /* 04|08 : submenu MdfT          */
   ChrP  istr;             /* 06|0C : selection text        */
   ChrP  itxt;             /* 08|10 : description text      */
   VfvCP isel;             /* 0A|14 : "select" function     */
   VfvCP ibef;             /* 0C|18 : "before" function     */
   VfvCP iaft;             /* 0E|1C : "after"  function     */
   KeyT  ikey;             /* 10|20 : hot key               */
   TagT  itag;             /* 12|22 : tag ID                */
   TagT  ihlp;             /* 14|24 : help tag              */
   VposT ispo;             /* 16|26 : select text position  */
   VposT idpo;             /* 18|28 : description position  */
   AtrT  idat;             /* 1A|2A : description attribute */
   BytT  ichr;             /* 1B|2B : quick select char     */
   BytT  imsk;             /* 1C|2C : feature mask          */
   BytT  ilen;             /* 1D|2D : selection-text length */
   VposT icpo;             /* 1E|2E : center position       */
};                         /* 20|30 ]-----------------------*/
#define  IdfPrv(i)   ((i)->iprv)                   /* previous IdfT     */
#define  IdfNxt(i)   ((i)->inxt)                   /* next IdfT         */
#define  IdfSub(i)   ((i)->isub)                   /* submenu MdfT      */
#define  IdfStr(i)   ((i)->istr)                   /* selection text    */
#define  IdfTxt(i)   ((i)->itxt)                   /* description text  */
#define  IdfSel(i)   ((i)->isel)                   /* "select" function */
#define  IdfBef(i)   ((i)->ibef)                   /* "before" function */
#define  IdfAft(i)   ((i)->iaft)                   /* "after"  function */
#define  IdfKey(i)   ((i)->ikey)                   /* hot key           */
#define  IdfTag(i)   ((i)->itag)                   /* tag ID            */
#define  IdfHlp(i)   ((i)->ihlp)                   /* help tag          */
#define  IdfSpo(i)   ((i)->ispo)                   /* text pos          */
#define  IdfSpoW(i)  (VposW(IdfSpo(i)))            /*    word           */
#define  IdfSpoC(i)  (VposC(IdfSpo(i)))            /*    col            */
#define  IdfSpoR(i)  (VposR(IdfSpo(i)))            /*    row            */
#define  IdfDpo(i)   ((i)->idpo)                   /* description pos   */
#define  IdfDpoW(i)  (VposW(IdfDpo(i)))            /*    word           */
#define  IdfDpoC(i)  (VposC(IdfDpo(i)))            /*    col            */
#define  IdfDpoR(i)  (VposR(IdfDpo(i)))            /*    row            */
#define  IdfDat(i)   ((i)->idat)                   /* description attr  */
#define  IdfChr(i)   ((i)->ichr)                   /* quick select char */
#define  IdfMsk(i)   ((i)->imsk)                   /* feature mask      */
#define  IdfPul(i)   (0 != (IdfMsk(i) & ITM_PUL))  /*    pull-down      */
#define  IdfNsl(i)   (0 != (IdfMsk(i) & ITM_NSL))  /*    not selectable */
#define  IdfCaf(i)   (0 != (IdfMsk(i) & ITM_AFT))  /*    close after    */
#define  IdfCal(i)   (0 != (IdfMsk(i) & ITM_ALL))  /*    close all      */
#define  IdfCbf(i)   (0 != (IdfMsk(i) & ITM_BEF))  /*    close before   */
#define  IdfDsp(i)   (0 != (IdfMsk(i) & ITM_DSP))  /*    redisplay      */
#define  IdfLen(i)   ((i)->ilen)                   /* text length       */
#define  IdfCpo(i)   ((i)->icpo)                   /* center position   */
#define  IdfCpoW(i)  (VposW(IdfCpo(i)))            /*    word           */
#define  IdfCpoC(i)  (VposC(IdfCpo(i)))            /*    col            */
#define  IdfCpoR(i)  (VposR(IdfCpo(i)))            /*    row            */

/*------------------------[ Function prototypes ]-----------------------*/

#ifdef __cplusplus            /* no mangling, please */
   extern "C" {
#endif
                                       /*- Menu-item Functions ---------*/
IdfP        ItmCur(NOARG);             /* Current item pointer          */
IntT  CTYP  ItmDis(TagT id);           /* Disable item <id>             */
IntT  CTYP  ItmDsp(TagT id);           /* Re-display item <id>          */
IntT  CTYP  ItmEna(TagT id);           /* Enable item <id>              */
IntT  CTYP  ItmFun(VfvCP bf,           /* Assign "before" and "after"   */
   VfvCP af);                          /*    functions                  */
ChrP  CTYP  ItmGet(TagT id);           /* Get item <id> text            */
IdfP  CTYP  ItmKey(KeyT kc);           /* Find item by hot-key <kc>     */
IdfP  CTYP  ItmLoc(TagT id);           /* Find item <id>                */
IntT  CTYP  ItmNxt(TagT id);           /* Goto item <id>                */
IntT  CTYP  ItmSet(TagT id, ChrP tp);  /* Set item <id> text            */
IntT  CTYP  ItmTxt(IntT wr, IntT wc,   /* Add text description          */
   IntT at, ChrP ps);
                                       /*- Menu Functions --------------*/
IntT  CTYP  MnuAct(NOARG);             /* Define menu in active window  */
IntT  CTYP  MnuBeg(IntT sr, IntT sc,   /* Define menu                   */
   IntT er, IntT ec, IntT bt, IntT ba, IntT wa, VfvCP fo);
MdfP        MnuCur(NOARG);             /* Current menu pointer          */
IntT  CTYP  MnuEnd(TagT ti, IntT mt,   /* End menu definition           */
   IntT bw, IntT tp, IntT ta, IntT sa, IntT na, IntT ba);
IntT  CTYP  MnuItm(IntT wr, IntT wc,   /* Define menu item              */
   ChrP ps, IntT sc, TagT id, IntT fm, VfvCP sf, WrdT hk, TagT he);
IntT  CTYP  MnuShow(NOARG);            /* Display/process menu          */
#define  MnuCur()  (MctlCur)
#define  ItmCur()  (MdfCur(MctlCur))
#ifdef __cplusplus
   }
#endif
#endif   /* _TCXLmnu_ : End of TCXLmnu.h */

[ RETURN TO DIRECTORY ]