home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mesaaiok.zip / source / AddIn.cpp next >
C/C++ Source or Header  |  1995-10-20  |  5KB  |  158 lines

  1. #define INCL_WIN
  2. #include <os2.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include "extaddin.h"
  6. #include "range.h"
  7. #include "addin.h"
  8.  
  9.  
  10. int AddIn :: addMenuItem(char * str)
  11. {
  12.     HWND menu = getMenu();
  13.     MENUITEM mi = { MIT_END, MIS_TEXT,      0, 0,       NULL, 0 };
  14.     HWND hwndPullDown;
  15.  
  16.     BOOL found = FALSE;
  17.     USHORT x = 27000;
  18.  
  19.     while (!found ) {   // see if the Add In sub menu is there
  20.         SHORT id = SHORT1FROMMR(WinSendMsg(menu,MM_ITEMPOSITIONFROMID,MPFROM2SHORT(x,TRUE),0));
  21.         if (id != MID_NONE) {
  22.             char buffer[100];
  23.             WinSendMsg(menu,MM_QUERYITEMTEXT,MPFROM2SHORT(x,100),(MPARAM)&buffer);
  24.             if (strcmp(buffer,"~Addins") == 0) {
  25.                 MENUITEM tMenuItem;
  26.                 found = TRUE;
  27.                 WinSendMsg(menu,MM_QUERYITEM,MPFROM2SHORT(x,TRUE),(MPARAM)&tMenuItem);
  28.                 hwndPullDown = tMenuItem.hwndSubMenu;
  29.             } else {
  30.                 x++;
  31.             } /* endif */
  32.         } else {  // the AddIn Menu wasn't found, add it
  33.             MENUITEM tMenuItem;
  34.             found = TRUE;
  35.             tMenuItem.iPosition = (SHORT1FROMMR(WinSendMsg (menu,
  36.                              MM_QUERYITEMCOUNT, 0, 0))) - 1;
  37.             tMenuItem.afStyle = MIS_TEXT | MIS_SUBMENU;
  38.             tMenuItem.afAttribute = 0;
  39.  
  40.             tMenuItem.id = x;
  41.  
  42.             hwndPullDown = WinCreateWindow (HWND_OBJECT, WC_MENU, NULL,
  43.                                    NULLHANDLE, 0, 0, 0, 0,
  44.                                    menu, HWND_BOTTOM,
  45.                                    x + 1, NULL, NULL);
  46.             tMenuItem.hwndSubMenu = hwndPullDown;
  47.             tMenuItem.hItem = 0;
  48.             WinSendMsg (menu, MM_INSERTITEM, &tMenuItem, "~Addins");
  49.             WinSendMsg (WinQueryWindow (menu, QW_PARENT), WM_UPDATEFRAME,
  50.                     (MPARAM) FCF_MENU, 0);
  51.         } /* endif */
  52.     } /* endwhile */
  53.  
  54.     // find first unused ID
  55.     found = FALSE;
  56.  
  57.     while (!found) {
  58.         SHORT id = SHORT1FROMMR(WinSendMsg(menu,MM_ITEMPOSITIONFROMID,MPFROM2SHORT(x,TRUE),0));
  59.         if (id == MID_NONE) {
  60.            found = TRUE;
  61.         } else {
  62.            x++;
  63.         } /* endif */
  64.     } /* endwhile */
  65.  
  66.     mi.id = x;
  67.     WinSendMsg(hwndPullDown,MM_INSERTITEM,(MPARAM)&mi,(MPARAM)str);
  68.     return x;
  69. }
  70.  
  71. int AddIn :: version()
  72. {
  73.     return (int)performAddInFunction(getVersionNumberMesaAddIn);
  74. }
  75.  
  76. HWND AddIn :: getMenu()
  77. {
  78.     return (HWND)performAddInFunction(getMenuWindowMesaAddIn);
  79. }
  80.  
  81. HWND AddIn :: getApplicationWindow()
  82. {
  83.    return (HWND)performAddInFunction(getApplicationWindowMesaAddIn);
  84. }
  85.  
  86. HWND AddIn :: getActiveWindow()
  87. {
  88.     return (HWND)performAddInFunction(getActiveWindowMesaAddIn);
  89. }
  90.  
  91. void AddIn :: registerMenuCallBackFunction(void *pfn)
  92. {
  93.     performAddInFunction(registerMenuCallBackMesaAddIn, mod_handle,pfn);
  94. }
  95.  
  96. void AddIn :: registerPMCallBackFunction(void *pfn)
  97. {
  98.     performAddInFunction(registerPMCallBackMesaAddIn, mod_handle,pfn);
  99. }
  100.  
  101. void AddIn :: registerDataEnteredFunction(void *pfn)
  102. {
  103.     performAddInFunction(registerDataEnteredMesaAddIn, mod_handle,pfn);
  104. }
  105.  
  106. void AddIn :: registerAboutToCloseFunction(void * pfn)
  107. {
  108.     performAddInFunction(registerAboutToCloseMesaAddIn, mod_handle,pfn);
  109. }
  110.  
  111. void AddIn :: registerJustOpenedFunction(void * pfn)
  112. {
  113.     performAddInFunction(registerOpenedMesaAddIn, mod_handle,pfn);
  114. }
  115.  
  116. void AddIn :: registerAboutToSaveFunction(void * pfn)
  117. {
  118.     performAddInFunction(registerAboutToSaveMesaAddIn, mod_handle,pfn);
  119. }
  120.  
  121. void AddIn :: registerDoubleClickFunction(void * pfn)
  122. {
  123.     performAddInFunction(registerDoubleClickMesaAddIn, mod_handle,pfn);
  124. }
  125.  
  126. void AddIn :: registerFunction(char *func_name,char *fbName,char *fbPrototype, char *fbDescription,
  127.         char *fbExample, int *fbMembers, void * callBack)
  128. {
  129.     performAddInFunction(registerFunctionMesaAddIn,func_name,fbName,fbPrototype,fbDescription,
  130.                          fbExample,fbMembers,callBack);
  131. }
  132.  
  133. Address AddIn :: getCurrentAddress()
  134. {
  135.     int r,c,l;
  136.     int rc = (int) performAddInFunction(getCurrentAddressMesaAddIn,&r, &c, &l);
  137.     if (rc) {
  138.        return Address(r,c,l);
  139.     }
  140.     return Address(-1,-1,-1);
  141. }
  142.  
  143. Range AddIn :: getCurrentRange()
  144. {
  145.     int r,c,l;
  146.     int r2,c2,l2;
  147.     Range ra;
  148.     Address a,b;
  149.     int rc = (int) performAddInFunction(getCurrentRangeMesaAddIn,&r, &c, &l, &r2,&c2,&l2);
  150.     if (rc) {
  151.         a.set(r,c,l);
  152.         b.set(r2,c2,l2);
  153.         ra.add(a,b);
  154.     } /* endif */
  155.     return ra;
  156. }
  157.  
  158.