home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 24 / CD_ASCQ_24_0995.iso / vrac / dflt20.zip / COMBOBOX.C < prev    next >
Text File  |  1992-10-07  |  4KB  |  128 lines

  1. /* -------------- combobox.c -------------- */
  2.  
  3. #include "dflat.h"
  4.  
  5. int ListProc(WINDOW, MESSAGE, PARAM, PARAM);
  6.  
  7. int ComboProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  8. {
  9.     switch (msg)    {
  10.         case CREATE_WINDOW:
  11.             wnd->extension = CreateWindow(
  12.                         LISTBOX,
  13.                         NULL,
  14.                         wnd->rc.lf,wnd->rc.tp+1,
  15.                         wnd->ht-1, wnd->wd+1,
  16.                         NULL,
  17.                         wnd,
  18.                         ListProc,
  19.                         HASBORDER | NOCLIP | SAVESELF);
  20.             ((WINDOW)(wnd->extension))->ct->command =
  21.                                         wnd->ct->command;
  22.             wnd->ht = 1;
  23.             wnd->rc.bt = wnd->rc.tp;
  24.             break;
  25.         case PAINT:
  26.             foreground = WndBackground(wnd);
  27.             background = WndForeground(wnd);
  28.             wputch(wnd, DOWNSCROLLBOX, WindowWidth(wnd), 0);
  29.             break;
  30.         case KEYBOARD:
  31.             if ((int)p1 == DN)    {
  32.                 SendMessage(wnd->extension, SETFOCUS, TRUE, 0);
  33.                 return TRUE;
  34.             }
  35.             break;
  36.         case LEFT_BUTTON:
  37.             if ((int)p1 == GetRight(wnd) + 1)
  38.                 SendMessage(wnd->extension, SETFOCUS, TRUE, 0);
  39.             break;
  40.         case CLOSE_WINDOW:
  41.             SendMessage(wnd->extension, CLOSE_WINDOW, 0, 0);
  42.             break;
  43.         default:
  44.             break;
  45.     }
  46.     return BaseWndProc(COMBOBOX, wnd, msg, p1, p2);
  47. }
  48.  
  49. int ListProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  50. {
  51.     WINDOW pwnd = GetParent(GetParent(wnd));
  52.     DBOX *db = pwnd->extension;
  53.     WINDOW cwnd = ControlWindow(db, wnd->ct->command);
  54.     char text[130];
  55.     int rtn;
  56.     WINDOW currFocus;
  57.     switch (msg)    {
  58.         case CREATE_WINDOW:
  59.             wnd->ct = DFmalloc(sizeof(CTLWINDOW));
  60.             wnd->ct->setting = OFF;
  61.             wnd->WindowColors[FRAME_COLOR][FG] = 
  62.                 wnd->WindowColors[STD_COLOR][FG];
  63.             wnd->WindowColors[FRAME_COLOR][BG] = 
  64.                 wnd->WindowColors[STD_COLOR][BG];
  65.             rtn = DefaultWndProc(wnd, msg, p1, p2);
  66.             return rtn;
  67.         case SETFOCUS:
  68.             if ((int)p1 == FALSE)    {
  69.                 if (!wnd->isHelping)    {
  70.                     SendMessage(wnd, HIDE_WINDOW, 0, 0);
  71.                     wnd->ct->setting = OFF;
  72.                 }
  73.             }
  74.             else
  75.                 wnd->ct->setting = ON;
  76.             break;
  77.         case SHOW_WINDOW:
  78.             if (wnd->ct->setting == OFF)
  79.                 return TRUE;
  80.             break;
  81.         case BORDER:
  82.             currFocus = inFocus;
  83.             inFocus = NULL;
  84.             rtn = DefaultWndProc(wnd, msg, p1, p2);
  85.             inFocus = currFocus;
  86.             return rtn;
  87.         case LB_SELECTION:
  88.             rtn = DefaultWndProc(wnd, msg, p1, p2);
  89.             SendMessage(wnd, LB_GETTEXT,
  90.                             (PARAM) text, wnd->selection);
  91.             PutItemText(pwnd, wnd->ct->command, text);
  92.             SendMessage(cwnd, PAINT, 0, 0);
  93.             cwnd->TextChanged = TRUE;
  94.             return rtn;
  95.         case KEYBOARD:
  96.             switch ((int) p1)    {
  97.                 case ESC:
  98.                 case FWD:
  99.                 case BS:
  100.                     SendMessage(cwnd, SETFOCUS, TRUE, 0);
  101.                     return TRUE;
  102.                 default:
  103.                     break;
  104.             }
  105.             break;
  106.         case LB_CHOOSE:
  107.             SendMessage(cwnd, SETFOCUS, TRUE, 0);
  108.             return TRUE;
  109.         case CLOSE_WINDOW:
  110.             if (wnd->ct != NULL)
  111.                 free(wnd->ct);
  112.             wnd->ct = NULL;
  113.             break;
  114.         default:
  115.             break;
  116.     }
  117.     return DefaultWndProc(wnd, msg, p1, p2);
  118. }
  119.  
  120. void PutComboListText(WINDOW wnd, enum commands cmd, char *text)
  121. {
  122.     CTLWINDOW *ct = FindCommand(wnd->extension, cmd, COMBOBOX);
  123.     if (ct != NULL)        {
  124.         WINDOW lwnd = ((WINDOW)(ct->wnd))->extension;
  125.         SendMessage(lwnd, ADDTEXT, (PARAM) text, 0);
  126.     }
  127. }
  128.