/**************************************************************************
 *  File name  :  user.c
 *
 *  Description:  This module contains the code for processing messages
 *		  sent to the standard window that the standard window does
 *		  not process.	The application developer need only modify
 *		  this file in order to implement new menu items or process
 *		  messages not handled by the standard message routine.
 *
 *		  This source file contains the following functions:
 *
 *		  UserWndProc(hwnd, msg, mp1, mp2)
 *		  UserCommand(mp1, mp2)
 *
 *  Concepts   :  message processing
 *
 *  API's      :  WinDefWindowProc
 *		  WinSendMsg
 *
 *    Files    :  OS2.H, MAIN.H, DLG.H, XTRN.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_WINMENUS

#include <os2.h>
#include "main.h"
#include "dlg.h"
#include "xtrn.h"

/*
 *  Global variables
 */


/*
 *  Entry point declarations
 */


/**************************************************************************
 *
 *  Name       : UserWndProc(hwnd, msg, mp1, mp2)
 *
 *  Description: Process any messages sent to hwndMain that
 *		 are not processed by the standard window procedure.
 *
 *  Concepts:	 Routine is called for each message MainWndProc
 *		 does not process.
 *
 *		 A switch statement branches control based upon
 *		 the message passed.  Any messages not processed
 *		 here must be passed onto WinDefWindowProc().
 *
 *  API's      : WinDefWindowProc
 *
 *  Parameters :  hwnd = window handle
 *		  msg  = message i.d.
 *		  mp1  = first message parameter
 *		  mp2  = second message parameter
 *
 *  Return     :  Return value dependent upon the message processed
 *
 *************************************************************************/
MRESULT UserWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
   switch(msg)
   {
   /*
    *  Add case statements for message ids you wish to process.
    */

   default:    /* default must call WinDefWindowProc() */
      return(WinDefWindowProc(hwnd, msg, mp1, mp2));
      break;
   }
   return (MRESULT)0;
}   /* End of UserWndProc   */


/**************************************************************************
 *
 *  Name       : UserCommand(mp1, mp2)
 *
 *  Description: Process any WM_COMMAND messages sent to hwndMain
 *		 that are not processed by MainCommand.
 *
 *  Concepts:	 Routine is called for each WM_COMMAND that is
 *		 not posted by a standard menu item.
 *
 *		 A switch statement branches control based upon
 *		 the id of the control which posted the message.
 *
 *  API's      :  [none]
 *
 *  Parameters :  mp1  = first message parameter
 *		  mp2  = second message parameter
 *
 *  Return     :  [none]
 *
 *************************************************************************/
VOID UserCommand(MPARAM mp1, MPARAM mp2)
{
   switch(SHORT1FROMMP(mp1))
   {

   /*
    *  Add case statements for menuitem ids you wish to process.
    */

   default:
      break;
   }

   /* This routine currently doesn't use the mp2 parameter but
    *  it is referenced here to prevent an 'Unreferenced Parameter'
    *  warning at compile time.
    */
   mp2 = mp2;
}   /* End of UserCommand  */

/**************************************************************************
 *
 *  Name       : InitMenu()
 *
 *  Description: Processes the WM_INITMENU message for the main window,
 *		 disabling any menus that are not active.
 *
 *  Concepts:	 Routine is called each time a menu is dropped.
 *
 *		 A switch statement branches control based upon
 *		 the id of the menu that is being displayed.
 *
 *  API's      :  [none]
 *
 *  Parameters :  mp1  = first message parameter
 *		  mp2  = second message parameter
 *
 *  Return     :  [none]
 *
 *************************************************************************/
VOID InitMenu(MPARAM mp1, MPARAM mp2)
{
	      /* define a shorthand way of denoting the menu handle */
#define hwndMenu	HWNDFROMMP(mp2)

   switch(SHORT1FROMMP(mp1))
   {
   case IDM_FILE:
      break;

   case IDM_HELP:
	    /*
	     * Enable or disable the Help menu depending upon whether the
	     * help manager has been enabled
	     */
	EnableMenuItem(hwndMenu, IDM_HELPUSINGHELP, fHelpEnabled);
	EnableMenuItem(hwndMenu, IDM_HELPGENERAL, fHelpEnabled);
	EnableMenuItem(hwndMenu, IDM_HELPKEYS, fHelpEnabled);
	EnableMenuItem(hwndMenu, IDM_HELPINDEX, fHelpEnabled);

	 /*  REMEMBER: add a case for IDM_HELPTUTORIAL if you include
	  *  the Tutorial menu item.
	  */

       break;

    default:
       break;
    }

#undef hwndMenu
}   /* End of InitMenu	 */

/**************************************************************************
 *
 *  Name       : EnableMenuItem(hwndMenu, idItem, fEnable)
 *
 *  Description: Enables or disables the menu item
 *
 *  Concepts:	 Called whenever a menu item is to be enabled or
 *		 disabled
 *
 *		 Sends a MM_SETITEMATTR to the menu with the
 *		 given item id.	 Sets the MIA_DISABLED attribute
 *		 flag if the item is to be disabled, clears the flag
 *		 if enabling.
 *
 *  API's      : WinSendMsg
 *
 *  Parameters :  hwndmenu = menu window handle
 *		  idItem   = menu item i.d.
 *		  fEnable  = enable (yes) or disable (no)
 *
 *  Return     :  [none]
 *
 *************************************************************************/
VOID EnableMenuItem(HWND hwndMenu, USHORT idItem, BOOL fEnable)
{
   SHORT fsFlag;

   if(fEnable)
      fsFlag = 0;
   else
      fsFlag = MIA_DISABLED;

   WinSendMsg(hwndMenu,
	      MM_SETITEMATTR,
	      MPFROM2SHORT(idItem, TRUE),
	      MPFROM2SHORT(MIA_DISABLED, fsFlag));

}   /* End of EnableMenuItem() */
/***************************  End of user.c  ****************************/
