home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / pmvnc100.zip / menu.c < prev    next >
C/C++ Source or Header  |  1999-02-24  |  4KB  |  166 lines

  1. /*
  2.  * menu.c - PM VNC Viewer, Menu Handling
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. #define INCL_PM
  10. #include <os2.h>
  11.  
  12. #include "pmvncdef.h"
  13. #include "pmvncres.h"
  14.  
  15. /*
  16.  * Variables to Manage Menus
  17.  */
  18.  
  19. static  HWND    hwndSysMenu = NULLHANDLE ;
  20. static  HWND    hwndSubMenu = NULLHANDLE ;
  21. static  USHORT  fidSubMenu ;
  22.  
  23. /*
  24.  * menuInit - append additional menus to SysMenu
  25.  */
  26.  
  27. BOOL    menuInit(HWND hwndFrame)
  28. {
  29.     HWND        hwndNewMenu ;
  30.     MENUITEM    miSysMenu   ;
  31.     MENUITEM    miNewMenu   ;
  32.     int         i, id ;
  33.     PUCHAR      nmMenu[128] ;
  34.  
  35.     hwndSysMenu = WinWindowFromID(hwndFrame, FID_SYSMENU) ;
  36.     fidSubMenu = (USHORT) WinSendMsg(hwndSysMenu, 
  37.                 MM_ITEMIDFROMPOSITION, MPFROMSHORT(0), NULL) ;
  38.     WinSendMsg(hwndSysMenu, MM_QUERYITEM, 
  39.             MPFROM2SHORT(fidSubMenu, FALSE), MPFROMP(&miSysMenu)) ;
  40.     hwndSubMenu = miSysMenu.hwndSubMenu ;
  41.     
  42.     TRACE("SysSubMenu %d (%08x)\n", fidSubMenu, fidSubMenu) ;
  43.  
  44.     if (hwndSysMenu == NULLHANDLE || hwndSubMenu == NULLHANDLE) {
  45.         TRACE("menuInit - failed to access to SysMenu\n") ;
  46.     return FALSE ;
  47.     }
  48.  
  49.     hwndNewMenu = WinLoadMenu(hwndSubMenu, NULLHANDLE, IDM_MENU) ;
  50.     
  51.     if (hwndNewMenu == NULLHANDLE) {
  52.         TRACE("menuInit - failed to load new menu\n") ;
  53.     return FALSE ;
  54.     }
  55.  
  56.     for (i = 0 ; ; i++) {
  57.         id = WinSendMsg(hwndNewMenu,
  58.             MM_ITEMIDFROMPOSITION, MPFROMSHORT(i), NULL) ;
  59.         WinSendMsg(hwndNewMenu, MM_QUERYITEM,
  60.             MPFROM2SHORT(id, FALSE), MPFROMP(&miNewMenu)) ;
  61.         WinSendMsg(hwndNewMenu, MM_QUERYITEMTEXT,
  62.             MPFROM2SHORT(id, 128), MPFROMP(nmMenu)) ;
  63.         miNewMenu.iPosition = MIT_END ;
  64.         WinSendMsg(hwndSubMenu, MM_INSERTITEM,
  65.             MPFROMP(&miNewMenu), MPFROMP(nmMenu)) ;
  66.         if (id == IDM_ABOUT) {
  67.         break ;
  68.     }
  69.     }
  70.     return TRUE ;
  71. }
  72.  
  73. /*
  74.  * menuHook - setup menu items (on WM_INITMENU)
  75.  */
  76.  
  77. void    menuHook(HWND hwnd, USHORT id)
  78. {
  79.     USHORT  attr, mask ;
  80.     
  81.     TRACE("menuHook %08x (%08x)\n", id, fidSubMenu) ;
  82.     
  83.     if (id != fidSubMenu) {
  84.         return ;
  85.     }
  86.     TRACE("menuHook for SysSubMenu\n") ;
  87.  
  88.     mask = MIA_DISABLED ;
  89.     if (clipChkRemoteClip(hwnd)) {
  90.         attr = ~MIA_DISABLED ;
  91.     } else {
  92.         attr = MIA_DISABLED ;
  93.     }
  94.     WinSendMsg(hwndSubMenu, MM_SETITEMATTR,
  95.         MPFROM2SHORT(IDM_COPY, FALSE), MPFROM2SHORT(mask, attr)) ;
  96.     TRACE("IDM_COPY %04x\n", (mask & attr)) ;
  97.  
  98.     mask = MIA_DISABLED ;
  99.     if (clipChkLocalClip(hwnd)) {
  100.         attr = ~MIA_DISABLED ;
  101.     } else {
  102.         attr = MIA_DISABLED ;
  103.     }
  104.     WinSendMsg(hwndSubMenu, MM_SETITEMATTR,
  105.         MPFROM2SHORT(IDM_PASTE, FALSE), MPFROM2SHORT(mask, attr)) ;
  106.     TRACE("IDM_PASTE %04x\n", (mask & attr)) ;
  107. }
  108.  
  109. /*
  110.  * menuProc - handle notify from menu (on WM_COMMAND)
  111.  */
  112.  
  113. void    menuProc(HWND hwnd, USHORT id)
  114. {
  115.     switch (id) {
  116.  
  117.     case IDM_OPTIONS :
  118.         sessModify(WinQueryAnchorBlock(hwnd)) ;
  119.         break ;
  120.     case IDM_CONNINF :
  121.         infoConn() ;
  122.         break ;
  123.     case IDM_ABOUT   :
  124.         infoAbout() ;
  125.         break ;
  126.     case IDM_REFRESH :
  127.     protoSendRequest(FALSE, NULL) ;
  128.     break ;
  129.     case IDM_COPY    :
  130.         clipCopy(hwnd) ;
  131.         break ;
  132.     case IDM_PASTE   :
  133.         clipPaste(hwnd) ;
  134.         break ;
  135.     case IDM_CTLTGL  :
  136.     case IDM_ALTTGL  :
  137.         keyEmulateToggle(id) ;
  138.         break ;
  139.     case IDM_CTLDN   :
  140.     case IDM_CTLUP   :
  141.     case IDM_ALTDN   :
  142.     case IDM_ALTUP   :
  143.         keyEmulateFixed(id) ;
  144.         break ;
  145.     case IDM_FUNC01  :
  146.     case IDM_FUNC02  :
  147.     case IDM_FUNC03  :
  148.     case IDM_FUNC04  :
  149.     case IDM_FUNC05  :
  150.     case IDM_FUNC06  :
  151.     case IDM_FUNC07  :
  152.     case IDM_FUNC08  :
  153.     case IDM_FUNC09  :
  154.     case IDM_FUNC10  :
  155.     case IDM_FUNC11  :
  156.     case IDM_FUNC12  :
  157.         keyEmulateFixed(id) ;
  158.         break ;
  159.     case IDM_C_A_D   :
  160.     case IDM_CTLESC  :
  161.     case IDM_ALTTAB  :
  162.         keyEmulateFixed(id) ;
  163.         break ;
  164.     }
  165. }
  166.