home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
viscobv6.zip
/
vac22os2
/
ibmcobol
/
samples
/
toolkit
/
pm
/
porting
/
img_view.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-11-19
|
9KB
|
264 lines
/**************************************************************************
* File name : img_view.c
*
* Description: This module contains the code for handling the functions
* offered on the View submenu. These functions are called
* from the MainCommand() routine:
*
* ViewSwitchMode()
* ViewChangeColor()
* ViewSavePosition()
* ViewRestorePosition()
*
* Concepts : display modes, image processing
*
* API's : WinSetParent
* WinSendMsg
* WinInvalidateRect
* GpiSetBackCol
* GpiSetColor
* GpiSetBackMix
* WinQueryWindowRect
* GpiSetCurrentPosition
*
* Required
* Files : OS2.H, STDLIB.H, IMG_MAIN.H, IMG_XTRN.H, IMG_DLG.H
*
* Copyright (C) 1991 IBM Corporation
*
* DISCLAIMER OF WARRANTIES. The following [enclosed] code is
* sample code created by IBM Corporation. This sample code is not
* part of any standard or IBM product and is provided to you solely
* for the purpose of assisting you in the development of your
* applications. The code is provided "AS IS", without
* warranty of any kind. IBM shall not be liable for any damages
* arising out of your use of the sample code, even if they have been
* advised of the possibility of such damages. *
*************************************************************************/
/*
* Include files, macros, defined constants, and externs
*/
#define INCL_WINSCROLLBARS
#define INCL_WINFRAMEMGR
#define INCL_WINSTDFILE
#define INCL_GPIPRIMITIVES
/*
* Include files, macros, defined constants, and externs
*/
#include <os2.h>
#include <stdlib.h>
#include "img_main.h"
#include "img_xtrn.h"
#include "img_dlg.h"
/*
* Static variables
*/
/* foreground/background color choices */
LONG lColorArray[COLOR_COUNT] = {CLR_BLACK,
CLR_WHITE,
CLR_BLUE,
CLR_GREEN,
CLR_YELLOW,
CLR_RED};
/**************************************************************************
*
* Name : ViewSwitchMode()
*
* Description: Toggles the mode of the application from Non-Detail
* to Detail mode and visa versa
*
* Concepts : Routine is called whenever a WM_COMMAND message
* is posted to the main window in response to
* the user (de)selecting the Detail item
* from the View submenu.
*
* Since Non-Detail mode is the opposite to Detail mode,
* toggle the menu settings, and ownership of the
* scrollbars, and redraw. If entering Detail mode
* it is necessary to size the main window as well.
*
* API's : WinSetParent
* WinSendMsg
* WinInvalidateRect
*
* Parameters : [none]
*
* Return : [none]
*
*************************************************************************/
VOID ViewSwitchMode()
{
vfDetail = (BOOL)(!vfDetail);
/*
* detach/attach scrollbars to main window accordingly
*/
WinSetParent(vhwndVScroll,
vfDetail ? vhwndFrame : HWND_OBJECT,
FALSE);
WinSetParent(vhwndHScroll,
vfDetail ? vhwndFrame : HWND_OBJECT,
FALSE);
WinSendMsg(vhwndFrame,
WM_UPDATEFRAME,
MPFROMLONG(FCF_VERTSCROLL | FCF_HORZSCROLL),
(MPARAM)NULL);
/* resize main window if in 'Detail' mode */
if (vfDetail)
SizeMainWindow();
WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE);
} /* End of ViewSwitchMode */
/**************************************************************************
*
* Name : ViewChangeColor(idColor)
*
* Description: Changes the foreground/background colors of the
* selected image.
*
* Concepts : Routine is called whenever a WM_COMMAND message
* is posted to the main window in response to
* the user selecting a Color item from either the
* 'Foreground'/'Background' Color items on the View submenu
*
* API's : GpiSetBackColor
* GpiSetColor
* GpiSetBackMix
* WinInvalidateRect
*
* Parameters : idColor = identifier of the selected color
*
* Return : [none]
*
*************************************************************************/
VOID ViewChangeColor(USHORT idColor)
{
LONG lForeClr, lBackClr;
BOOL fSameClr;
USHORT idItem;
/*
* change either the foreground/background color and save
* previous settings so that the appropriate menuitem can
* be reset
*/
if (idColor < IDM_VIEWBACKCOLORBLACK)
{
lForeClr = lColorArray[idColor - COLOR_BASE];
fSameClr = (BOOL)(lForeClr == vlBackClr);
idItem = MenuGetColorItemId(IDM_VIEWFORECOLORBLACK);
}
else
{
lBackClr = lColorArray[idColor - COLOR_BASE - COLOR_COUNT];
fSameClr = (BOOL)(lBackClr == vlForeClr);
idItem = MenuGetColorItemId(IDM_VIEWBACKCOLORBLACK);
}
/*
* if background color is the same as the foreground color
* - ensure this is correct and get out if not
*/
if (fSameClr)
{
if (MessageBox(vhwndFrame,
IDMSG_BACKEQFORE, IDMSG_WARNING,
MB_APPLMODAL | MB_YESNO | MB_CUAWARNING,
TRUE) == MBID_NO)
return;
}
/* cancel previously checked item & save new values */
if (idColor < IDM_VIEWBACKCOLORBLACK)
{
MenuEnableItem(vhwndViewForeClr, idItem, TRUE);
vlForeClr = lForeClr;
}
else
{
MenuEnableItem(vhwndViewBackClr, idItem, TRUE);
vlBackClr = lBackClr;
}
/*
* set colors appropriately and force redraw
*/
GpiSetBackColor(vhps, vlBackClr);
GpiSetColor(vhps, vlForeClr);
GpiSetBackMix(vhps, BM_OVERPAINT);
WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE);
} /* End of ViewChangeColor() */
/**************************************************************************
*
* Name : ViewRestorePosition()
*
* Description: Restores the saved position of the image
*
* Concepts : Routine is called whenever a WM_COMMAND message
* is posted to the main window in response to
* the user selecting the Restore Position item
*
* API's : WinQueryWindowRect
* GpiSetCurrentPosition
* WinSendMsg
* WinInvalidateRect
*
* Parameters : [none]
*
* Return : [none]
*
*************************************************************************/
VOID ViewRestorePosition(void)
{
RECTL rcl;
/* only valid if image is loaded & in Detail mode */
if (vfImgLoaded && vfDetail)
{
WinQueryWindowRect(vhwndClient, &rcl);
GpiSetCurrentPosition(vhps, &vptlSave);
WinSendMsg(vhwndVScroll,
SBM_SETPOS,
MPFROMLONG(vptlSave.y - rcl.yTop),
(MPARAM)NULL);
WinSendMsg(vhwndHScroll,
SBM_SETPOS,
MPFROMLONG(labs(vptlSave.x)),
(MPARAM)NULL);
WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE);
}
} /* End of ViewRestorePosition */
/**************************************************************************
*
* Name : ViewSavePosition()
*
* Description: Saves the saved position of the image
*
* Concepts : Routine is called whenever a WM_COMMAND message
* is posted to the main window in response to
* the user selecting the Save Position item
*
* API's : GpiQueryCurrentPosition
*
* Parameters : [none]
*
* Return : [none]
*
*************************************************************************/
VOID ViewSavePosition(void)
{
if (vfImgLoaded && vfDetail)
GpiQueryCurrentPosition(vhps, &vptlSave);
} /* ViewSavePosition() */
/*************************** End of img_view.c *************************/