home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / xaes_new / help.c < prev    next >
C/C++ Source or Header  |  1994-10-26  |  11KB  |  377 lines

  1. /********************************************************************
  2.  *                                                                0.10*
  3.  *    XAES: Help window routines                                        *
  4.  *    By Ken Hollis                                                    *
  5.  *                                                                    *
  6.  *    Copyright (C) 1994, Bitgate Software                            *
  7.  *                                                                    *
  8.  *    Mark my words, these routines *WILL* be redesigned.                *
  9.  *                                                                    *
  10.  ********************************************************************/
  11.  
  12. #include <stdio.h>
  13.  
  14. #include "xaes.h"
  15.  
  16. #define W_ULSIZE 1   /* BOX dans l'arbre WINDOW */
  17. #define W_PCLOSE 2   /* BOX dans l'arbre WINDOW */
  18. #define W_CLOSER 3   /* BOXTEXT dans l'arbre WINDOW */
  19. #define W_TSIZE  4   /* BOX dans l'arbre WINDOW */
  20. #define W_URSIZE 5   /* BOX dans l'arbre WINDOW */
  21. #define W_PCASC  6   /* BOX dans l'arbre WINDOW */
  22. #define W_FULLER 7   /* BOXTEXT dans l'arbre WINDOW */
  23. #define W_LSIZE  8   /* BOX dans l'arbre WINDOW */
  24. #define W_RSIZE  9   /* BOX dans l'arbre WINDOW */
  25. #define W_LLSIZE 10  /* BOX dans l'arbre WINDOW */
  26. #define W_PSLLT  11  /* BOX dans l'arbre WINDOW */
  27. #define W_SLLT   12  /* BOXTEXT dans l'arbre WINDOW */
  28. #define W_BSIZE  13  /* BOX dans l'arbre WINDOW */
  29. #define W_LRSIZE 14  /* BOX dans l'arbre WINDOW */
  30. #define W_PSLDN  15  /* BOX dans l'arbre WINDOW */
  31. #define W_SLDN   16  /* BOXTEXT dans l'arbre WINDOW */
  32. #define W_MOVER  17  /* BOXTEXT dans l'arbre WINDOW */
  33. #define W_CASCADE 18  /* BOXTEXT dans l'arbre WINDOW */
  34. #define W_MENU   19  /* BOX dans l'arbre WINDOW */
  35. #define W_MENU_L 20  /* BOXTEXT dans l'arbre WINDOW */
  36. #define W_MENU_R 21  /* BOXTEXT dans l'arbre WINDOW */
  37. #define W_INFO   22  /* BOXTEXT dans l'arbre WINDOW */
  38. #define W_INFO_R 23  /* BOXTEXT dans l'arbre WINDOW */
  39. #define W_INFO_L 24  /* BOXTEXT dans l'arbre WINDOW */
  40. #define WORKAREA 25  /* BOXTEXT dans l'arbre WINDOW */
  41. #define W_SLUP   26  /* BOXTEXT dans l'arbre WINDOW */
  42. #define W_VERTRK 27  /* BOX dans l'arbre WINDOW */
  43. #define W_VERSL  28  /* BOX dans l'arbre WINDOW */
  44. #define W_HORTRK 29  /* BOX dans l'arbre WINDOW */
  45. #define W_HORSL  30  /* BOX dans l'arbre WINDOW */
  46. #define W_SLRT   31  /* BOXTEXT dans l'arbre WINDOW */
  47. #define W_OPTION 32  /* BOXTEXT dans l'arbre WINDOW */
  48.  
  49. #define HELPWIN  4   /* Formulaire/Dialogue */
  50. #define HELPTITL 2   /* TEXT dans l'arbre HELPWIN */
  51. #define HELPWORK 3   /* BOX dans l'arbre HELPWIN */
  52. #define HELPOK   5   /* BOXTEXT dans l'arbre HELPWIN */
  53.  
  54. WHELP SIZE_HELP[] =
  55. {
  56.     "Window sizer help",
  57.     "This gadget lets you resize the",
  58.     "window. If the window has a",
  59.     "minimum size, it will not let",
  60.     "you resize it any smaller than",
  61.     "its minimum.  You can resize the",
  62.     "the window to the screen size",
  63.     "regardless.", " " };
  64.  
  65. WHELP CLOSER_HELP[] =
  66. {
  67.     "Window closer help",
  68.     "This gadget closes the window.",
  69.     "If you hold down the button down",
  70.     "on the gadget, a popup menu will",
  71.     "appear with choices to close or",
  72.     "iconify the window.", " ", " ", " " };
  73.  
  74. WHELP FULLER_HELP[] =
  75. {
  76.     "Window fuller help",
  77.     "This gadget lets you bring the",
  78.     "window up to its maximum size,",
  79.     "or back to its original size.",
  80.     "A popup also appears if you hold",
  81.     "down the button, where you can",
  82.     "minimize the window, bringing it",
  83.     "down to its minimum stored size.", " " };
  84.  
  85. WHELP MOVESLIDE_HELP[] =
  86. {
  87.     "Window slider arrow help",
  88.     "This moves the associated slider",
  89.     "in the indicated direction.  If",
  90.     "you hold the button down, it",
  91.     "will move the slider rapidly.",
  92.     "If you double click, it will",
  93.     "move it to the extreme edge.", " ", " " };
  94.  
  95. WHELP MOVER_HELP[] =
  96. {
  97.     "Window title bar / mover help",
  98.     "This lets you move the window",
  99.     "to any position on the screen.",
  100.     "The text within the mover is",
  101.     "also the title of the window.",
  102.     "If the window cannot be moved,",
  103.     "the text will be grayed out.", " ", " " };
  104.  
  105. WHELP CASCADE_HELP[] =
  106. {
  107.     "Window cascader help",
  108.     "This lets you switch between",
  109.     "application windows on the desk.",
  110.     "If you hold down the button, you",
  111.     "can rotate windows, bring to",
  112.     "front, set background bit, and",
  113.     "change window settings.", " ", " " };
  114.  
  115. WHELP MENU_HELP[] =
  116. {
  117.     "Window menu bar help",
  118.     "This allows you to scroll the",
  119.     "window menu tree left or right.",
  120.     " "," "," "," "," "," " };
  121.  
  122. WHELP INFO_HELP[] =
  123. {
  124.     "Window info bar help",
  125.     "This allows you to scroll the",
  126.     "window info bar left or right.",
  127.     " "," "," "," "," "," " };
  128.  
  129. WHELP SLIDER_HELP[] =
  130. {
  131.     "Window slider help",
  132.     "This allows you to scroll the",
  133.     "contents of the window.",
  134.     " "," "," "," "," "," " };
  135.  
  136. WHELP WORKAREA_HELP[] =
  137. {
  138.     "Window work area help",
  139.     "This is the area of the window",
  140.     "that is used by applications.",
  141.     " "," "," "," "," "," " };
  142.  
  143. WHELP OPTION_HELP[] =
  144. {
  145.     "Window option help",
  146.     "This button allows you to",
  147.     "control the miscellaneous",
  148.     "options for the window.",
  149.     " "," "," "," "," " };
  150.  
  151. WHELP NOINFO_HELP[] =
  152. {
  153.     "No info available",
  154.     "Sorry, no information is",
  155.     "available on the object you",
  156.     "selected.", " ", " ", " ", " ", " " };
  157.  
  158. WHELP OKAYBUT_HELP[] =
  159. {
  160.     "Help about help",
  161.     "This button closes the window,",
  162.     "and lets you get on with your",
  163.     "normal business.", " ", " ", " ", " ", " " };
  164.  
  165. WHELP EDITABLE_HELP[] =
  166. {
  167.     "This is an editable text field.",
  168.     "Insert switches insert/replace",
  169.     "modes, you can click the mouse",
  170.     "to move the cursor within the",
  171.     "field, you can cut and paste",
  172.     "using the ^X, ^C and ^V keys,",
  173.     "and you can use the arrow keys",
  174.     "in conjunction with SHIFT, CTRL",
  175.     "and ALT." };
  176.  
  177. WHELP BUTTON_HELP[] =
  178. {
  179.     "This is a button. If the dialog",
  180.     "is backgroundable, you can click",
  181.     "on buttons without having to top",
  182.     "the window first.", " ", " ", " ", " ", " " };
  183.  
  184. WHELP RBUTTON_HELP[] =
  185. {
  186.     "This is a radio button. Only one",
  187.     "button from a group of radio",
  188.     "buttons can be selected. If the",
  189.     "dialog is backgroundable, you",
  190.     "can click on buttons without",
  191.     "having to top the window first.", " ", " ", " " };
  192.  
  193. WHELP DSLIDER_HELP[] =
  194. {
  195.     "This is a slider. You can drag",
  196.     "the slider within the confines",
  197.     "of its track to change a value",
  198.     "within a program. If it is",
  199.     "'active', you can drag the",
  200.     "slider in realtime.", " ", " ", " " };
  201.  
  202. WHELP DSLIDERBTN_HELP[] =
  203. {
  204.     "This is a slider button. You can",
  205.     "use this to adjust the position",
  206.     "of the slider in small amounts,",
  207.     "or you can double click on this",
  208.     "button to move it to the extreme",
  209.     "edge.", " ", " ", " " };
  210.  
  211. WHELP ICONIFY_HELP[] =
  212. {
  213.     "This is an iconified window.",
  214.     " ", " ", " ", " ", " ", " ", " ", " " };
  215.  
  216. GLOBAL void WSetWindowText(WINDOW *win, WHELP *txt)
  217. {
  218.     if (win)
  219.         if (txt)
  220.             (WHELP *) win->user = txt;
  221. }
  222.  
  223. LOCAL void ShowText(WINDOW *win, WHELP *txt)
  224. {
  225.     int x, y;
  226.  
  227.     if (win) {
  228.         WGrafMouse(M_OFF);
  229.  
  230.         objc_offset(win->tree, HELPWORK, &x, &y);
  231.  
  232.         x += 3;
  233.         y += gr_ch + 1;
  234.  
  235.         ChangeObjectText(win->tree, HELPTITL, txt->wind_title, 3, TE_CNTR);
  236.  
  237.         v_gtext(VDIhandle, x, y, txt->hline1);    y += gr_ch;
  238.         v_gtext(VDIhandle, x, y, txt->hline2);    y += gr_ch;
  239.         v_gtext(VDIhandle, x, y, txt->hline3);    y += gr_ch;
  240.         v_gtext(VDIhandle, x, y, txt->hline4);    y += gr_ch;
  241.         v_gtext(VDIhandle, x, y, txt->hline5);    y += gr_ch;
  242.         v_gtext(VDIhandle, x, y, txt->hline6);    y += gr_ch;
  243.         v_gtext(VDIhandle, x, y, txt->hline7);    y += gr_ch;
  244.         v_gtext(VDIhandle, x, y, txt->hline8);
  245.  
  246.         WGrafMouse(M_ON);
  247.     }
  248. }
  249.  
  250. LOCAL int WhatHelpDispatcher(WINDOW *win, int msg_buf[8])
  251. {
  252.     if (win) {
  253.         switch(*msg_buf) {
  254.             case WM_PAINT:
  255.                 ShowText(win, (WHELP *) win->user);
  256.                 return FALSE;
  257.  
  258.             case WM_DIALOG:
  259.                 switch(msg_buf[3]) {
  260.                     case HELPOK:
  261.                         WCloseWindow(win, WC_OBJECTABLE, K_ASK);
  262.                         return FALSE;
  263.                 }
  264.  
  265.                 return FALSE;
  266.  
  267.             case WM_GETHELP:
  268.                 switch(msg_buf[4]) {
  269.                     case HELPOK:
  270.                         win = WCreateObject(WC_WINDOW, W_OPEN|W_DIALOG|W_UNSIZABLE|W_BEVENT,
  271.                                         W_CUSTOMWINDOW, NAME|MOVER|CLOSER,
  272.                                         "What's this ???", NULL, HELPWINDOW, WhatHelpDispatcher, 
  273.                                         -1, -1, -1, -1, 0, NULL, 0, 0);
  274.                         ChangeObjectText(win->tree, HELPTITL, ((WHELP *) OKAYBUT_HELP->wind_title), 3, TE_CNTR);
  275.                         WSetWindowText(win, OKAYBUT_HELP);
  276.  
  277.                         return TRUE;
  278.                 }
  279.  
  280.                 return FALSE;
  281.         }
  282.     }
  283.  
  284.     return FALSE;
  285. }
  286.  
  287. GLOBAL void WHandleWindowHelp(int button)
  288. {
  289.     WINDOW *win;
  290.  
  291.     win = WCreateObject(WC_WINDOW, W_OPEN|W_DIALOG|W_UNSIZABLE|W_BEVENT,
  292.                     W_CUSTOMWINDOW, NAME|MOVER|CLOSER,
  293.                     "What's this ???", NULL, HELPWINDOW, WhatHelpDispatcher, 
  294.                     -1, -1, -1, -1, 0, NULL, 0, 0);
  295.  
  296.     if (win) {
  297.         switch(button) {
  298.             case W_ULSIZE:
  299.             case W_TSIZE:
  300.             case W_URSIZE:
  301.             case W_LSIZE:
  302.             case W_RSIZE:
  303.             case W_LLSIZE:
  304.             case W_BSIZE:
  305.             case W_LRSIZE:
  306.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) SIZE_HELP->wind_title), 3, TE_CNTR);
  307.                 WSetWindowText(win, SIZE_HELP);
  308.                 break;
  309.  
  310.             case W_CLOSER:
  311.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) CLOSER_HELP->wind_title), 3, TE_CNTR);
  312.                 WSetWindowText(win, CLOSER_HELP);
  313.                 break;
  314.  
  315.             case W_FULLER:
  316.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) FULLER_HELP->wind_title), 3, TE_CNTR);
  317.                 WSetWindowText(win, FULLER_HELP);
  318.                 break;
  319.  
  320.             case W_SLLT:
  321.             case W_SLDN:
  322.             case W_SLUP:
  323.             case W_SLRT:
  324.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) MOVESLIDE_HELP->wind_title), 3, TE_CNTR);
  325.                 WSetWindowText(win, MOVESLIDE_HELP);
  326.                 break;
  327.  
  328.             case W_MOVER:
  329.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) MOVER_HELP->wind_title), 3, TE_CNTR);
  330.                 WSetWindowText(win, MOVER_HELP);
  331.                 break;
  332.  
  333.             case W_CASCADE:
  334.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) CASCADE_HELP->wind_title), 3, TE_CNTR);
  335.                 WSetWindowText(win, CASCADE_HELP);
  336.                 break;
  337.  
  338.             case W_MENU_L:
  339.             case W_MENU_R:
  340.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) MENU_HELP->wind_title), 3, TE_CNTR);
  341.                 WSetWindowText(win, MENU_HELP);
  342.                 break;
  343.  
  344.             case W_INFO_R:
  345.             case W_INFO_L:
  346.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) INFO_HELP->wind_title), 3, TE_CNTR);
  347.                 WSetWindowText(win, INFO_HELP);
  348.                 break;
  349.  
  350.             case W_VERTRK:
  351.             case W_VERSL:
  352.             case W_HORTRK:
  353.             case W_HORSL:
  354.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) SLIDER_HELP->wind_title), 3, TE_CNTR);
  355.                 WSetWindowText(win, SLIDER_HELP);
  356.                 break;
  357.  
  358.             case WORKAREA:
  359.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) WORKAREA_HELP->wind_title), 3, TE_CNTR);
  360.                 WSetWindowText(win, WORKAREA_HELP);
  361.                 break;
  362.  
  363.             case W_OPTION:
  364.                 ChangeObjectText(win->tree, HELPTITL, ((WHELP *) OPTION_HELP->wind_title), 3, TE_CNTR);
  365.                 WSetWindowText(win, OPTION_HELP);
  366.                 break;
  367.  
  368.             default:
  369.                 ChangeObjectText(win->tree, HELPTITL, "No info available", 3, TE_CNTR);
  370.                 WSetWindowText(win, NOINFO_HELP);
  371.                 break;
  372.         }
  373.  
  374.         helpmode = FALSE;
  375.         WGrafMouse(ARROW);
  376.     }
  377. }