home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 18 / CD_ASCQ_18_111294_W.iso / dos / prg / c / x_lib10 / xw_pop.cpp < prev    next >
C/C++ Source or Header  |  1994-10-20  |  2KB  |  121 lines

  1. #include    "xw.h"
  2.  
  3. /*-----
  4. */
  5.  
  6. #include    "xk.h"
  7. #include    "xo.h"
  8. #include    "xx.h"
  9.  
  10. #include    <string.h>
  11.  
  12. /*-----
  13.     XWinMgr::pop
  14.     affiche un menu pop-up
  15. */
  16.  
  17. class    PopWin : public XWin
  18.         {
  19.     private :
  20.         int        OUT;
  21.  
  22.     protected :
  23.         virtual    void    on_call (XObj *obj);
  24.         virtual    void    on_char (int key);
  25.         virtual    void    on_lmou (int, int);
  26.  
  27.     public :
  28.         PopWin (int wdt, int hgh, const char *hdr, XOpt *opt, int out);
  29.         };
  30.  
  31. PopWin::PopWin (int wdt, int hgh, const char *hdr, XOpt *opt, int out)
  32.  
  33.         : XWin(wdt + 2, hgh + 2)
  34.  
  35.         {
  36.         int        cnt;
  37.         char *    str;
  38.         XOpt *    ptr;
  39.  
  40.         type(xw_VMENU);
  41.  
  42.         if (hdr == 0)
  43.             defw(xw_STDWIN & ~xw_HEADER);
  44.         else
  45.             head(hdr);
  46.  
  47.         for (cnt = 0, ptr = opt; cnt < hgh; cnt++, ptr++)
  48.             {
  49.  
  50.             if ((str = ptr->str) != 0)
  51.                 link(new XOption(ptr->idt, cnt, 0, wdt, str, ptr->key));
  52.             else
  53.                 link(new XBreak(0, cnt, 0, wdt));
  54.  
  55.             }
  56.  
  57.         OUT = out;
  58.         }
  59.  
  60. void    PopWin::on_call (XObj *obj)
  61.         {
  62.         retn(obj->id());
  63.         hide();
  64.         }
  65.  
  66. void    PopWin::on_char (int key)
  67.         {
  68.  
  69.         if (key == xk_ESC)
  70.             {
  71.             retn(0);
  72.             hide();
  73.             }
  74.  
  75.         }
  76.  
  77. void    PopWin::on_lmou (int, int)
  78.         {
  79.  
  80.         if (OUT != 0)
  81.             {
  82.             retn(0);
  83.             hide();
  84.             }
  85.  
  86.         }
  87.  
  88. int        XWinMgr::pop (const char *hdr, XOpt *opt, int out)
  89.         {
  90.         int            wdt, tmp, cnt;
  91.         char *        str;
  92.         XOpt *        ptr;
  93.         PopWin *    win;
  94.  
  95.         wdt = 20;
  96.         ptr = opt;
  97.         cnt = 0;
  98.  
  99.         while (ptr->idt != -1)
  100.             {
  101.  
  102.             if ((str = ptr->str) != 0)
  103.                 {
  104.  
  105.                 if ((tmp = strlen(str) - _scnt(str, '&') + 2) > wdt)
  106.                     wdt = tmp;
  107.  
  108.                 }
  109.  
  110.             ++cnt;
  111.             ++ptr;
  112.             }
  113.  
  114.         win = new PopWin(wdt, cnt, hdr, opt, out);
  115.         tmp = xw.exec(win);
  116.         delete win;
  117.  
  118.         return (tmp);
  119.         }
  120.  
  121.