|
|
1.1 ! root 1: /*==============================================================*\ ! 2: * img_view.c - routines for handling the View menu functions ! 3: * Created 1989, 1990 IBM, Microsoft Corp. ! 4: *--------------------------------------------------------------* ! 5: * ! 6: * This module contains the code for handling the functions ! 7: * offered on the View submenu. These functions are called ! 8: * from the MainCommand() routine. ! 9: * ! 10: *--------------------------------------------------------------* ! 11: * ! 12: * This source file contains the following functions: ! 13: * ! 14: * ViewSwitchMode() ! 15: * ViewChangeColor() ! 16: * ViewSavePosition() ! 17: * ViewRestorePosition() ! 18: * ! 19: \*==============================================================*/ ! 20: /*--------------------------------------------------------------*\ ! 21: * Include files, macros, defined constants, and externs * ! 22: \*--------------------------------------------------------------*/ ! 23: #define INCL_WINSCROLLBARS ! 24: #define INCL_WINFRAMEMGR ! 25: #define INCL_GPIPRIMITIVES ! 26: ! 27: /*--------------------------------------------------------------*\ ! 28: * Include files, macros, defined constants, and externs * ! 29: \*--------------------------------------------------------------*/ ! 30: #include <os2.h> ! 31: #include <stdlib.h> ! 32: #include "img_main.h" ! 33: #include "img_xtrn.h" ! 34: #include "img_dlg.h" ! 35: ! 36: /*--------------------------------------------------------------*\ ! 37: * Static variables * ! 38: \*--------------------------------------------------------------*/ ! 39: /* foreground/background color choices */ ! 40: LONG lColorArray[COLOR_COUNT] = {CLR_BLACK, ! 41: CLR_WHITE, ! 42: CLR_BLUE, ! 43: CLR_GREEN, ! 44: CLR_YELLOW, ! 45: CLR_RED}; ! 46: ! 47: /****************************************************************\ ! 48: * Switch Modes (Non-Detail <-> Detail) procedure ! 49: *-------------------------------------------------------------- ! 50: * ! 51: * Name: ViewSwitchMode() ! 52: * ! 53: * Purpose: Toggles the mode of the application from Non-Detail ! 54: * to Detail mode and visa versa ! 55: * ! 56: * Usage: Routine is called whenever a WM_COMMAND message ! 57: * is posted to the main window in response to ! 58: * the user (de)selecting the Detail item ! 59: * from the View submenu ! 60: * ! 61: * Method: Since Non-Detail mode is the opposite to Detail mode ! 62: * toggle the menu settings, and ownership of the ! 63: * scrollbars, and redraw. If entering Detail mode ! 64: * it is necessary to size the main window aswell. ! 65: * ! 66: * Returns: ! 67: * ! 68: \****************************************************************/ ! 69: VOID ViewSwitchMode() ! 70: { ! 71: ! 72: vfDetail = !vfDetail; ! 73: ! 74: /* ! 75: * detach/attach scrollbars to main window accordingly ! 76: */ ! 77: WinSetParent(vhwndVScroll, ! 78: vfDetail ? vhwndFrame : HWND_OBJECT, ! 79: FALSE); ! 80: WinSetParent(vhwndHScroll, ! 81: vfDetail ? vhwndFrame : HWND_OBJECT, ! 82: FALSE); ! 83: ! 84: WinSendMsg(vhwndFrame, ! 85: WM_UPDATEFRAME, ! 86: MPFROMLONG(FCF_VERTSCROLL | FCF_HORZSCROLL), ! 87: 0L); ! 88: ! 89: /* resize main window if in 'Detail' mode */ ! 90: if (vfDetail) ! 91: SizeMainWindow(); ! 92: ! 93: WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE); ! 94: ! 95: } /* ViewSwitchMode() */ ! 96: ! 97: /****************************************************************\ ! 98: * Change Color Routine ! 99: *-------------------------------------------------------------- ! 100: * ! 101: * Name: ViewChangeColor() ! 102: * ! 103: * Purpose: To change the foreground/background colors of the ! 104: * selected image ! 105: * ! 106: * Usage: Routine is called whenever a WM_COMMAND message ! 107: * is posted to the main window in response to ! 108: * the user selecting a Color item from either the ! 109: * 'Foreground'/'Background' Color items on the View submenu ! 110: * ! 111: * Method: ! 112: * ! 113: * Returns: ! 114: * ! 115: \****************************************************************/ ! 116: VOID ViewChangeColor(idColor) ! 117: USHORT idColor; ! 118: { ! 119: LONG lForeClr, lBackClr; ! 120: BOOL fSameClr; ! 121: USHORT idItem; ! 122: ! 123: /* ! 124: * change either the foreground/background color and save ! 125: * previous settings so that the appropriate menuitem can ! 126: * be reset ! 127: */ ! 128: if (idColor < IDM_VIEWBACKCOLORBLACK) { ! 129: lForeClr = lColorArray[idColor - COLOR_BASE]; ! 130: fSameClr = (lForeClr == vlBackClr); ! 131: idItem = MenuGetColorItemId(IDM_VIEWFORECOLORBLACK); ! 132: } else { ! 133: lBackClr = lColorArray[idColor - COLOR_BASE - COLOR_COUNT]; ! 134: fSameClr = (lBackClr == vlForeClr); ! 135: idItem = MenuGetColorItemId(IDM_VIEWBACKCOLORBLACK); ! 136: } ! 137: /* ! 138: * if background color is the same as the foreground color ! 139: * - ensure this is correct and get out if not ! 140: */ ! 141: if (fSameClr) { ! 142: if (MessageBox(vhwndFrame, ! 143: IDMSG_BACKEQFORE, IDMSG_WARNING, ! 144: MB_APPLMODAL | MB_YESNO | MB_CUAWARNING, ! 145: TRUE) == MBID_NO) ! 146: return; ! 147: } ! 148: ! 149: /* cancel previously checked item & save new values */ ! 150: if (idColor < IDM_VIEWBACKCOLORBLACK) { ! 151: MenuCheckItem(vhwndViewForeClr, idItem, FALSE); ! 152: vlForeClr = lForeClr; ! 153: } else { ! 154: MenuCheckItem(vhwndViewBackClr, idItem, FALSE); ! 155: vlBackClr = lBackClr; ! 156: } ! 157: ! 158: /* ! 159: * set colors appropriately and force redraw ! 160: */ ! 161: GpiSetBackColor(vhps, vlBackClr); ! 162: GpiSetColor(vhps, vlForeClr); ! 163: GpiSetBackMix(vhps, BM_OVERPAINT); ! 164: WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE); ! 165: ! 166: } /* ViewChangeColor() */ ! 167: ! 168: /****************************************************************\ ! 169: * Restore Image Position Routine ! 170: *-------------------------------------------------------------- ! 171: * ! 172: * Name: ViewRestorePosition() ! 173: * ! 174: * Purpose: To restore the saved position of the image ! 175: * ! 176: * Usage: Routine is called whenever a WM_COMMAND message ! 177: * is posted to the main window in response to ! 178: * the user selecting the Restore Position item or the ! 179: * from the View submenu ! 180: * ! 181: * Method: ! 182: * ! 183: * Returns: ! 184: * ! 185: \****************************************************************/ ! 186: VOID ViewRestorePosition() ! 187: { ! 188: RECTL rcl; ! 189: ! 190: /* only valid if image is loaded & in Detail mode */ ! 191: if (vfImgLoaded && vfDetail) { ! 192: WinQueryWindowRect(vhwndClient, &rcl); ! 193: GpiSetCurrentPosition(vhps, &vptlSave); ! 194: WinSendMsg(vhwndVScroll, ! 195: SBM_SETPOS, ! 196: MPFROMLONG(vptlSave.y - rcl.yTop), ! 197: 0L); ! 198: WinSendMsg(vhwndHScroll, ! 199: SBM_SETPOS, ! 200: MPFROMLONG(labs(vptlSave.x)), ! 201: 0L); ! 202: WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE); ! 203: } ! 204: ! 205: } /* ViewRestorePosition() */ ! 206: ! 207: /****************************************************************\ ! 208: * Save Image Position Routine ! 209: *-------------------------------------------------------------- ! 210: * ! 211: * Name: ViewSavePosition() ! 212: * ! 213: * Purpose: To save the current position of the image ! 214: * ! 215: * Usage: Routine is called whenever a WM_COMMAND message ! 216: * is posted to the main window in response to ! 217: * the user selecting the Save Position item or the ! 218: * from the View submenu ! 219: * ! 220: * Method: ! 221: * ! 222: * Returns: ! 223: * ! 224: \****************************************************************/ ! 225: VOID ViewSavePosition() ! 226: { ! 227: if (vfImgLoaded && vfDetail) ! 228: GpiQueryCurrentPosition(vhps, &vptlSave); ! 229: ! 230: } /* ViewSavePosition() */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.