home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ool.zip / OOL / source / xhelp.cpp < prev    next >
C/C++ Source or Header  |  1997-04-04  |  4KB  |  150 lines

  1. #include "XHelp.h"
  2. #include "XFrmwnd.H"
  3. #include "XResLib.h"
  4. #include "XRes.h"
  5. #include "XProcess.h"
  6. #include "xdialog.h"
  7.  
  8. #include <string.h>
  9.  
  10. /*@ 
  11. @class XHelpInstance
  12. @type overview
  13. @symbol _
  14. @remarks XHelpInstance handles help functions for you. Therefore you have
  15. to write your help-text for your controls and give the text the same id
  16. (res=XXX in the IPF-file) like you have defined for the requested control.<BR>
  17. You can associate a XHelpInstance to one ore more framewindows.
  18. <p>The help-instance also supports help for a message-box, refer to XMessageBox for details.
  19. */
  20.  
  21.  
  22. BOOL HelpHook(HAB hab, ULONG mode, ULONG idT, ULONG idS, PRECTL rect)
  23. {
  24.     if (mode)                    // == HLPM_MESSAGE)
  25.     {
  26.         HWND hwnd = WinQueryFocus(HWND_DESKTOP);
  27.  
  28.         hwnd = WinQueryWindow(hwnd, QW_OWNER);
  29.         if (idT == 0)
  30.             idT = WinQueryWindowUShort(hwnd, QWS_ID);
  31.         if (hwnd)
  32.         {
  33.             WinSendMsg(WinQueryHelpInstance(hwnd), HM_DISPLAY_HELP, MPFROMSHORT(idT), MPFROMSHORT(HM_RESOURCEID));
  34.             return TRUE;
  35.         }
  36.     }
  37.     return FALSE;
  38. }
  39.  
  40.  
  41. /*@ XHelpInstance :: XHelpInstance(const char *path, const XProcess * pro, const char *title, const XResource * helpTable, const XResourceLibrary * actionBarLib)
  42. @group constructors/destructors
  43. @remarks Construct a helpinstance
  44. @parameters    <t '°' c=2>
  45.                     °char * path                        °path for the help-file
  46.                °XProcess * pro                     °owner process
  47.                °char * title                       °window -title (default is NULL)
  48.                °XResource * helpTableLib           °resource for the help-table (default is NULL)
  49.                °XResourceLibrary * actionBarLib    °library for action-bar (defaul tis NULL)
  50.                     </t>
  51. */
  52. XHelpInstance :: XHelpInstance(const char *path, const XProcess * pro, const char *title, const XResource * helpTable, const XResourceLibrary * actionBarLib)
  53. {
  54.     HELPINIT helpinit;
  55.  
  56.     memset(&helpinit, 0, sizeof(helpinit));
  57.  
  58.     helpinit.cb = sizeof(HELPINIT);
  59.     helpinit.ulReturnCode = 0;
  60.     helpinit.pszTutorialName = NULL;
  61.     if (helpTable)
  62.         helpinit.phtHelpTable = (PHELPTABLE) MPFROM2SHORT(helpTable->GetID(), 0xFFFF);
  63.  
  64.     helpinit.idAccelTable = 0;
  65.     helpinit.idActionBar = 0;
  66.  
  67.     helpinit.pszHelpWindowTitle = (PSZ) title;
  68.     helpinit.fShowPanelId = CMIC_HIDE_PANEL_ID;
  69.     helpinit.fShowPanelId = 0;
  70.     helpinit.pszHelpLibraryName = (PSZ) path;
  71.     if (actionBarLib)
  72.         helpinit.hmodAccelActionBarModule = actionBarLib->GetModuleHandle();
  73.     if (helpTable)
  74.         if (helpTable->GetResourceLibrary())
  75.             helpinit.hmodHelpTableModule = helpTable->GetResourceLibrary()->GetModuleHandle();
  76.     helpInstance = WinCreateHelpInstance(pro->hab, &helpinit);
  77.     WinSetHook(pro->hab, HMQ_CURRENT, HK_HELP, (PFN) HelpHook, NULLHANDLE);
  78. }
  79.  
  80.  
  81. /*@ XHelpInstance::ShowHelpForHelp(void)
  82. @group help funcions
  83. @remarks Shows how to use help
  84. */
  85. void XHelpInstance::ShowHelpForHelp(void) const
  86. {
  87.     WinSendMsg(helpInstance, HM_DISPLAY_HELP, NULL, NULL);
  88. }
  89.  
  90.  
  91.  
  92. /*@ XHelpInstance::ShowHelpContents(void)
  93. @group help funcions
  94. @remarks Show the contents
  95. */
  96. void XHelpInstance::ShowHelpContents(void) const
  97. {
  98.     WinSendMsg(helpInstance, HM_HELP_CONTENTS, NULL, NULL);
  99. }
  100.  
  101.  
  102. /*@ XHelpInstance::ShowHelpIndex(void)
  103. @group help funcions
  104. @remarks Shows the index
  105. */
  106. void XHelpInstance::ShowHelpIndex(void) const
  107. {
  108.     WinSendMsg(helpInstance, HM_HELP_INDEX, NULL, NULL);
  109. }
  110.  
  111.  
  112. /*@ XHelpInstance::ShowHelpForId(const LONG id)
  113. @group help funcions
  114. @remarks Shows the help for a given ID
  115. @parameters LONG id     the requested id
  116. */
  117. void XHelpInstance::ShowHelpForId(const LONG id) const
  118. {
  119.     WinSendMsg(helpInstance, HM_DISPLAY_HELP, MPFROMSHORT(id), MPFROMSHORT(HM_RESOURCEID));
  120. }
  121.  
  122.  
  123. XHelpInstance :: ~XHelpInstance()
  124. {
  125.     if (helpInstance)
  126.         WinDestroyHelpInstance(helpInstance);
  127. }
  128.  
  129.  
  130. /*@ XHelpInstance::AssociateWindow(const XFrameWindow * fWin)
  131. @group window functions
  132. @remarks Associate a frame-window with the help-instance
  133. @parameters XFrameWindow * window
  134. */
  135. void XHelpInstance::AssociateWindow(const XFrameWindow * fWin) const
  136. {
  137.     WinAssociateHelpInstance(helpInstance, fWin->frame);
  138. }
  139.  
  140.  
  141. /*@ XHelpInstance::AssociateWindow(const XDialog * fWin)
  142. @group window functions
  143. @remarks Associate a dialog with the help-instance
  144. @parameters XDialog * dialog
  145. */
  146. void XHelpInstance::AssociateWindow(const XDialog * dlg) const
  147. {
  148.     WinAssociateHelpInstance(helpInstance, dlg->GetHandle());
  149. }
  150.