|
|
1.1 ! root 1: /*==============================================================*\ ! 2: * img_menu.c - routines for menu handling ! 3: * Created 1989, 1990 IBM, Microsoft Corp. ! 4: *--------------------------------------------------------------* ! 5: * ! 6: * This module contains the code for initializing menus as a ! 7: * result of a WM_INITMENU message, and also code for disabling/ ! 8: * enabling single menu items. ! 9: * ! 10: *--------------------------------------------------------------* ! 11: * ! 12: * This source file contains the following functions: ! 13: * ! 14: * MenuInit() ! 15: * MenuEnableItem(hwndMenu, idItem, fEnabled) ! 16: * ! 17: \*==============================================================*/ ! 18: /*--------------------------------------------------------------*\ ! 19: * Include files, macros, defined constants, and externs * ! 20: \*--------------------------------------------------------------*/ ! 21: #define INCL_WINMENUS ! 22: #define INCL_WINFRAMEMGR ! 23: #include <os2.h> ! 24: #include "img_main.h" ! 25: #include "img_xtrn.h" ! 26: ! 27: /*--------------------------------------------------------------*\ ! 28: * Entry point declarations * ! 29: \*--------------------------------------------------------------*/ ! 30: VOID MenuEnableItem(HWND hwndMenu, SHORT idItem, BOOL fEnable); ! 31: ! 32: /****************************************************************\ ! 33: * Menu item intialization routine ! 34: *-------------------------------------------------------------- ! 35: * ! 36: * Name: MenuInit(mp1, mp2) ! 37: * ! 38: * Purpose: Processes the WM_INITMENU message for the main window, ! 39: * disabling any menus that are not active ! 40: * ! 41: * Usage: Routine is called each time a menu is dropped ! 42: * ! 43: * Method: A switch statement branches control based upon ! 44: * the id of the menu which is being displayed ! 45: * ! 46: * Returns: ! 47: \****************************************************************/ ! 48: VOID MenuInit(mp1, mp2) ! 49: MPARAM mp1; /* first message parameter */ ! 50: MPARAM mp2; /* second message parameter */ ! 51: { ! 52: ! 53: switch(SHORT1FROMMP(mp1)) { ! 54: case IDM_FILE: ! 55: ! 56: /* ! 57: * set the items on the File sub-menu appropriately ! 58: */ ! 59: MenuEnableItem(HWNDFROMMP(mp2), IDM_FILEOPEN, (BOOL)!vfMaximized); ! 60: break; ! 61: ! 62: case IDM_VIEW: ! 63: ! 64: /* ! 65: * set the items on the View sub-menu appropriately ! 66: */ ! 67: if (!vfImgLoaded) ! 68: MenuEnableItem(HWNDFROMMP(mp2), IDM_VIEWDETAIL, FALSE); ! 69: else { ! 70: MenuEnableItem(HWNDFROMMP(mp2), IDM_VIEWDETAIL, TRUE); ! 71: MenuCheckItem(HWNDFROMMP(mp2), IDM_VIEWDETAIL, vfDetail); ! 72: } ! 73: ! 74: MenuEnableItem(HWNDFROMMP(mp2), IDM_VIEWFOREGROUNDCOLOR, ! 75: vfImgLoaded); ! 76: ! 77: MenuEnableItem(HWNDFROMMP(mp2), IDM_VIEWBACKGROUNDCOLOR, ! 78: vfImgLoaded); ! 79: ! 80: MenuEnableItem(HWNDFROMMP(mp2), IDM_VIEWSAVEPOSITION, ! 81: (BOOL)(vfImgLoaded && vfDetail)); ! 82: ! 83: MenuEnableItem(HWNDFROMMP(mp2), IDM_VIEWRESTOREPOSITION, ! 84: (BOOL)(vfImgLoaded && vfDetail)); ! 85: ! 86: break; ! 87: ! 88: /* ! 89: * check the currently selected foreground color & ! 90: * set global variable if previously not set ! 91: */ ! 92: case IDM_VIEWFOREGROUNDCOLOR: ! 93: MenuCheckItem(HWNDFROMMP(mp2), ! 94: MenuGetColorItemId(IDM_VIEWFORECOLORBLACK), TRUE); ! 95: ! 96: if (!vhwndViewForeClr) ! 97: vhwndViewForeClr = HWNDFROMMP(mp2); ! 98: break; ! 99: ! 100: /* ! 101: * check the currently selected background color & ! 102: * set global variable if previously not set ! 103: */ ! 104: case IDM_VIEWBACKGROUNDCOLOR: ! 105: MenuCheckItem(HWNDFROMMP(mp2), ! 106: MenuGetColorItemId(IDM_VIEWBACKCOLORBLACK), TRUE); ! 107: ! 108: if (!vhwndViewBackClr) ! 109: vhwndViewBackClr = HWNDFROMMP(mp2); ! 110: break; ! 111: ! 112: case IDM_HELP: ! 113: /* ! 114: * Enable or disable the Help menu depending upon whether the ! 115: * help manager has been enabled ! 116: */ ! 117: MenuEnableItem(HWNDFROMMP(mp2), ! 118: IDM_HELPHELPFORHELP, vfHelpEnabled); ! 119: ! 120: MenuEnableItem(HWNDFROMMP(mp2), ! 121: IDM_HELPEXTENDED, vfHelpEnabled); ! 122: ! 123: MenuEnableItem(HWNDFROMMP(mp2), ! 124: IDM_HELPKEYS, vfHelpEnabled); ! 125: ! 126: MenuEnableItem(HWNDFROMMP(mp2), ! 127: IDM_HELPINDEX, vfHelpEnabled); ! 128: ! 129: /** REMEMBER: add a case for IDM_HELPTUTORIAL if you include ! 130: the menu item **/ ! 131: ! 132: break; ! 133: } ! 134: ! 135: } /* MenuInit() */ ! 136: ! 137: /****************************************************************\ ! 138: * Get color menu item id ! 139: *-------------------------------------------------------------- ! 140: * ! 141: * Name: MenuGetColorItemId(idBase) ! 142: * ! 143: * Purpose: Returns ID for the currently selected foreground/ ! 144: * background color value ! 145: * ! 146: * Usage: Called whenever either the foreground/background ! 147: * floating color menu is to be displayed. ! 148: * ! 149: * Method: ! 150: * ! 151: * Returns: ! 152: * ! 153: \****************************************************************/ ! 154: SHORT MenuGetColorItemId(idBase) ! 155: SHORT idBase; /* Id of the base color for foregrnd/backgrnd color menu */ ! 156: { ! 157: LONG lColor; ! 158: ! 159: if (idBase == IDM_VIEWFORECOLORBLACK) ! 160: lColor = vlForeClr; ! 161: else ! 162: lColor = vlBackClr; ! 163: ! 164: /* ! 165: * calculate menu item id based on current color value ! 166: */ ! 167: switch ((SHORT)lColor) { ! 168: case CLR_BLACK: ! 169: return idBase; ! 170: break; ! 171: case CLR_WHITE: ! 172: return idBase + 1; ! 173: break; ! 174: case CLR_BLUE: ! 175: return idBase + 2; ! 176: break; ! 177: case CLR_GREEN: ! 178: return idBase + 3; ! 179: break; ! 180: case CLR_YELLOW: ! 181: return idBase + 4; ! 182: break; ! 183: case CLR_RED: ! 184: return idBase + 5; ! 185: break; ! 186: } ! 187: } /* MenuGetColorItemId() */ ! 188: ! 189: /****************************************************************\ ! 190: * Enables/Disables the menu item of the given menu ! 191: *-------------------------------------------------------------- ! 192: * ! 193: * Name: MenuEnableItem(hwndMenu, idItem, fEnable) ! 194: * ! 195: * Purpose: Enables or disables the menu item ! 196: * ! 197: * Usage: Called whenever a menu item is to enabled or ! 198: * disabled ! 199: * ! 200: * Method: Sends a MM_SETITEMATTR to the menu with the ! 201: * given item id. Sets the MIA_DISABLED attribute ! 202: * flag if the item is to be disabled, clears the flag ! 203: * if enabling ! 204: * ! 205: * Returns: ! 206: * ! 207: \****************************************************************/ ! 208: VOID MenuEnableItem(hwndMenu, idItem, fEnable) ! 209: HWND hwndMenu; /* Handle to the menu */ ! 210: SHORT idItem; /* Id of the menu item to be enabled/disabled */ ! 211: BOOL fEnable; /* flag to set enable or disable bit */ ! 212: { ! 213: WinSendMsg(hwndMenu, ! 214: MM_SETITEMATTR, ! 215: MPFROM2SHORT(idItem, TRUE), ! 216: MPFROM2SHORT(MIA_DISABLED, ! 217: (fEnable ? 0 : MIA_DISABLED))); ! 218: ! 219: } /* MenuEnableItem() */ ! 220: ! 221: ! 222: /****************************************************************\ ! 223: * Check the menu item of the given menu ! 224: *-------------------------------------------------------------- ! 225: * ! 226: * Name: MenuCheckItem(hwndMenu, idItem) ! 227: * ! 228: * Purpose: Checks menu item ! 229: * ! 230: * Usage: Called whenever a menu item is to checked ! 231: * ! 232: * Method: Sends a MM_SETITEMATTR to the menu with the ! 233: * given item id. Sets the MIA_CHECKED attribute ! 234: * flag if the item is to be checked ! 235: * ! 236: * Returns: ! 237: * ! 238: \****************************************************************/ ! 239: VOID MenuCheckItem(hwndMenu, idItem, fCheck) ! 240: HWND hwndMenu; /* Handle to the menu */ ! 241: SHORT idItem; /* Id of the menu item to be enabled/disabled */ ! 242: BOOL fCheck; /* Check/uncheck item */ ! 243: { ! 244: WinSendMsg(hwndMenu, ! 245: MM_SETITEMATTR, ! 246: MPFROM2SHORT(idItem, TRUE), ! 247: MPFROM2SHORT(MIA_CHECKED, ! 248: (fCheck ? MIA_CHECKED : ~MIA_CHECKED))); ! 249: ! 250: } /* MenuCheckItem() */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.