home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
iedhelp.zip
/
IEDHELP.C
< prev
next >
Wrap
Text File
|
1995-02-15
|
19KB
|
685 lines
/****************************************************************************\
* *
* MODULE NAME:IEDHELP.C *
* *
* IBM Confidential *
* *
* Copyright (c) IBM Corporation 1994 *
* *
* All Rights Reserved *
\****************************************************************************/
#define LINT_ARGS /* argument checking enabled */
#define INCL_WINWINDOWMGR /* General window management */
#define INCL_WINMESSAGEMGR /* Message management */
#define INCL_WININPUT /* Mouse and keyboard input */
#define INCL_WINDIALOGS /* Dialog boxes */
#define INCL_WINSTATICS /* Static controls */
#define INCL_WINFRAMEMGR /* Frame manager */
#define INCL_WINFRAMECTLS /* Frame controls (title bars & size border) */
#define INCL_WINACCELERATORS /* Keyboard accelerators */
#define INCL_WINBUTTONS /* Button controls */
#define INCL_WINENTRYFIELDS /* Entry Fields */
#define INCL_WINMENUS /* Menu controls */
#define INCL_WINSCROLLBARS /* Scroll bar controls */
#define INCL_WINSYS /* System values (and colors) */
#define INCL_WINLISTBOXES /* List box controls */
#define INCL_GPIBITMAPS /* Bitmaps and Pel Operations */
#define INCL_WINPOINTERS /* Mouse pointers */
#define INCL_WINCURSORS
#define INCL_GPIPRIMITIVES /* Drawing Primitives and Primitive Attributes*/
#define INCL_WINTRACKRECT
#define INCL_WINRECTANGLES
#define INCL_GPICONTROL
#define INCL_GPITRANSFORMS
#define INCL_GPILCIDS
#define INCL_WINTIMER
#define INCL_WINHELP
#include <os2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define HELP_MAIN
#include "iedtype.h"
#include "iedmain.h"
#include "iedmisc.h"
#include "iedrc.h"
#include "iedhlpid.h"
#include "iedtoc.h"
#include "iedgram.h"
#include "iedclist.h"
#include "ieddrag.h"
#include "iedhelp.h"
VOID PanelHelp (pDocInfo, hwndHelpInstance)
PDOCINFO pDocInfo;
HWND hwndHelpInstance;
{
ULONG ulMarked;
ULONG ulDrag = 0;
USHORT usX;
USHORT usY;
HWND hwnd;
USHORT usPanelID = HELP_PANEL;
if (!hwndHelpInstance)
{
return;
}
if (pDocInfo->pMarkData && pDocInfo->pMarkData->pBeginLine)
{
ulMarked = TRUE;
}
else
{
ulMarked = FALSE;
}
if (pObject2)
{
hwnd = GetWindowUnderMousePointer (pObject2, &usX, &usY, &ulDrag);
if (pObject2->ulSourceObject & OBJECT_MARKED_PANEL)
{
usPanelID = HELP_PANEL_MARKED_DRAG;
}
else
{
usPanelID = HELP_PANEL_DRAG;
}
}
else
{
if (ulMarked)
{
usPanelID = HELP_PANEL_MARKED;
}
}
WinSendMsg (hwndHelpInstance, HM_DISPLAY_HELP,
(MPARAM)usPanelID, (MPARAM)HMPANELTYPE_NUMBER);
}
VOID InitHelpObject (hwndAssociate)
HWND hwndAssociate;
{
HELPINIT hmiHelpData; /* Help initialization structure*/
/* size of initialization structure*/
hmiHelpData.cb = sizeof(HELPINIT);
/* store HM return code from init. */
hmiHelpData.ulReturnCode = 0;
hmiHelpData.pszTutorialName = NULL;
/* indicates help table is defined */
/* in the RC file. */
hmiHelpData.phtHelpTable = (PVOID)(0xffff0000 | MAIN_HELPTABLE);
/* action bar is not tailored */
hmiHelpData.hmodAccelActionBarModule = NULLHANDLE;
hmiHelpData.idAccelTable = 0;
hmiHelpData.idActionBar = 0;
GetRcString (chMsg, IDS_MSG_288);
hmiHelpData.pszHelpWindowTitle = chMsg;
hmiHelpData.hmodHelpTableModule = hModule;
hmiHelpData.fShowPanelId = 0;
hmiHelpData.pszHelpLibraryName = "HWHLP.HLP";
/********************************************/
/* Create Instance of IPF */
/* */
/* pass Anchor Block handle and address of */
/* IPF initialization structure, and check */
/* that creation was successful. */
/********************************************/
hmiHelpData.ulReturnCode = 0;
hwndHelpInstance = WinCreateHelpInstance(hAB, &hmiHelpData);
if (!hwndHelpInstance)
{
if (hmiHelpData.ulReturnCode)
DisplayIDMsg (NULL, IDS_MSG_24, MB_OK);
return;
}
else
{
if (hmiHelpData.ulReturnCode)
{
DisplayIDMsg (NULL, IDS_MSG_24, MB_OK);
WinDestroyHelpInstance(hwndHelpInstance);
return;
}
}
/* register object window class */
if (!WinRegisterClass( hAB,
(PCH )"CLA_HELP_OBJECT",
(PFNWP)HelpObjectProc,
0,
0))
{
WinDestroyHelpInstance(hwndHelpInstance);
return;
}
/* create comunication window */
hwndObject = WinCreateWindow ((HWND)hwndAssociate,
(PSZ)"CLA_HELP_OBJECT",
(PSZ)"",
(ULONG)NULL,
0,
0,
0,
0,
(HWND)hwndAssociate,
HWND_BOTTOM,
(USHORT)-1,
(PVOID)NULL,
(PVOID)NULL);
if (!hwndObject)
{
WinDestroyHelpInstance(hwndHelpInstance);
return;
}
/* associate help instance with the associated window */
WinAssociateHelpInstance (hwndHelpInstance ,hwndAssociate);
WinSendMsg (hwndHelpInstance, HM_SET_OBJCOM_WINDOW, (MPARAM)hwndObject, NULL);
}
MRESULT EXPENTRY HelpObjectProc( hWnd, msg, mp1, mp2 )
HWND hWnd;
ULONG msg;
MPARAM mp1;
MPARAM mp2;
{
switch (msg)
{
case HM_INFORM:
break;
}
return (WinDefWindowProc( hWnd, msg, mp1, mp2 ) );
}
VOID DestroyHelpObject ()
{
if (hwndObject)
{
WinDestroyWindow (hwndObject);
hwndObject = NULLHANDLE;
}
if (hwndHelpInstance)
{
WinDestroyHelpInstance(hwndHelpInstance);
hwndHelpInstance = NULLHANDLE;
}
}
BOOL DisplayHelp (hwnd)
HWND hwnd;
{
USHORT usPanelID = 0;
USHORT usWndID;
/* ->@@HWD */
usWndID = WinQueryWindowUShort (hwnd, QWS_ID);
if (usWndID == (USHORT)FID_CLIENT)
{
hwnd = WinQueryWindow (hwnd, QW_PARENT);
usWndID = WinQueryWindowUShort (hwnd, QWS_ID);
}
/* @@HWD<- */
switch (usWndID)
{
/* ->@@ACT */
case IDD_CTRL :
usPanelID = IDH_DLG_CTRL;
break;
/* ->@@ACT */
case IDD_CTRL_GROUP :
usPanelID = IDH_CTRL_GROUP;
break;
case IDD_NEWFILE :
usPanelID = IDH_IDD_NEWFILE;
break;
case IDD_DOCATTR :
usPanelID = IDH_IDD_DOCATTR;
break;
case IDD_PRINT :
usPanelID = IDH_IDD_PRINT;
break;
case IDD_SEARCH :
usPanelID = IDH_IDD_SEARCH;
break;
case IDD_ATTR :
usPanelID = IDH_IDD_ATTR;
break;
case IDD_BITMAP :
usPanelID = IDH_IDD_BITMAP;
break;
case IDD_ANIMATEATTR :
usPanelID = IDH_IDD_ANIMATEATTR;
break;
case DLG_ARTWORK :
usPanelID = IDH_DLG_ARTWORK;
break;
case IDD_INDEX :
usPanelID = IDH_IDD_INDEX;
break;
case IDD_INDEX2 :
usPanelID = IDH_IDD_INDEX2;
break;
case IDD_SYNONYMDEF :
usPanelID = IDH_IDD_SYNONYMDEF;
break;
case IDD_TABLE :
usPanelID = IDH_IDD_TABLE;
break;
case IDD_LABEL_FRAME :
usPanelID = IDH_IDD_LABEL_FRAME;
break;
case IDD_TBL_LAYOUT :
usPanelID = IDH_IDD_TBL_LAYOUT;
break;
case IDD_HIDEKEY :
usPanelID = IDH_IDD_HIDEKEY;
break;
case IDD_UPDATE_BMP :
usPanelID = IDH_IDD_UPDATE_BITMAP;
break;
case IDD_PREF :
usPanelID = IDH_IDD_PREF;
break;
case IDD_PANELLINK :
usPanelID = IDH_IDD_PANELLINK;
break;
case IDD_LAUNCHLINK :
usPanelID = IDH_IDD_LAUNCHLINK;
break;
case IDD_INFORMLINK :
usPanelID = IDH_IDD_INFORMLINK;
break;
case IDD_LINKVIDEO :
usPanelID = IDH_IDD_LINKVIDEO;
break;
case IDD_LINKAUDIO :
usPanelID = IDH_IDD_LINKAUDIO;
break;
case IDD_PANELATTR :
usPanelID = IDH_IDD_PANELATTR;
break;
case IDD_ACVIEWPORT :
usPanelID = IDH_IDD_ACVIEWPORT;
break;
case IDD_DDFATTR :
usPanelID = IDH_IDD_DDFATTR;
break;
case IDD_DATAFILE :
usPanelID = IDH_IDD_DATAFILE;
break;
case IDD_FONT :
usPanelID = IDH_IDD_FONT;
break;
case IDD_AUTOSTREAM :
usPanelID = IDH_IDD_AUTOSTREAM;
break;
case IDD_COMPONENT :
usPanelID = IDH_IDD_COMPONENT;
break;
case IDD_COMPONENT2 :
usPanelID = IDH_IDD_COMPONENT2;
break;
case IDD_ELE_PRTOPT :
usPanelID = IDH_IDD_ELE_PRTOPT;
break;
case IDD_PANELDEF :
usPanelID = IDH_IDD_PANELDEF;
break;
case IDD_SYMBOL :
usPanelID = IDH_IDD_SYMBOL;
break;
case IDD_SAVESTYLEFILE :
usPanelID = IDH_SAVESTYLEFILE;
break;
case IDD_OUTLINER :
usPanelID = IDH_IDD_OUTLINE;
break;
case IDD_SPELL_OPTION :
usPanelID = IDH_IDD_SPELLOPTION;
break;
case IDD_SPELLCHECK :
usPanelID = IDH_IDD_SPELLCHECK;
break;
case IDD_ALIGN :
usPanelID = IDH_IDD_ALIGN;
break;
case IDD_IMP_IPF :
usPanelID = IDH_IDD_IMPORT_IPF;
break;
case IDD_IMP_BKM :
usPanelID = IDH_IDD_IMPORT_BKM;
break;
case IDD_IMP_RTF :
usPanelID = IDH_IDD_IMPORT_RTF;
break;
case IDD_EXP_IPF :
usPanelID = IDH_IDD_EXPORT_IPF;
break;
case IDD_EXP_BKM :
usPanelID = IDH_IDD_EXPORT_BKM;
break;
case IDD_EXP_HLP :
usPanelID = IDH_IDD_EXPORT_HLP;
break;
case IDD_EXP_INF :
usPanelID = IDH_IDD_EXPORT_INF;
break;
case IDD_EXP_HTML :
usPanelID = IDH_IDD_EXPORT_HTML;
break;
case WINDOW_ID_STATUS :
break;
case WINDOW_ID_COLOR :
usPanelID = IDH_WND_COLOR;
break;
case WINDOW_ID_TRASH + CLOSE_TRASH :
case WINDOW_ID_TRASH + OPEN_TRASH :
usPanelID = IDH_WND_TRASH;
break;
case WINDOW_ID_ANIMATE :
break;
case WINDOW_ID_CANIMATE:
break;
case WINDOW_ID_PALETTE :
break;
case WINDOW_ID_EDIT :
usPanelID = IDH_WND_AUTOLINK;
break;
case WINDOW_ID_DIR :
usPanelID = IDH_WND_DIR;
break;
case WINDOW_ID_FILE :
usPanelID = IDH_WND_FILE;
break;
case WINDOW_ID_NEW_FILE :
usPanelID = IDH_WND_NEWFILE;
break;
case WINDOW_ID_LAYOUT :
usPanelID = 0;
break;
case WINDOW_ID_LOCK :
usPanelID = IDH_WND_LOCK;
break;
}
if (usPanelID)
{
HWND hwndOwner;
WinSendMsg (hwndHelpInstance, HM_SET_ACTIVE_WINDOW,
(MPARAM)hwnd, (MPARAM)NULL);
WinSendMsg (hwndHelpInstance, HM_DISPLAY_HELP,
(MPARAM)usPanelID, (MPARAM)HMPANELTYPE_NUMBER);
hwndOwner = WinQueryWindow (hwnd, QW_OWNER);
WinSendMsg (hwndHelpInstance, HM_SET_ACTIVE_WINDOW,
(MPARAM)hwndOwner, (MPARAM)NULL);
return TRUE;
}
return FALSE;
}
BOOL DisplayHelp2 (HWND hwnd,
USHORT usWndID)
{
USHORT usPanelID = 0;
switch (usWndID)
{
case IDD_IMPSTYLE_FILE :
usPanelID = IDH_IMPSTYLE_FILE;
break;
case IDD_SAVEAS_FILE:
usPanelID = IDH_SAVEAS;
break;
case IDD_SAVE_ANMT_FILE:
usPanelID = IDH_AN_FSAVE;
break;
case IDD_FONT :
usPanelID = IDH_IDD_FONT;
break;
}
if (usPanelID)
{
HWND hwndOwner;
//WinSetActiveWindowAssociateHelpInstance (hwndHelpInstance ,hwnd);
WinSendMsg (hwndHelpInstance, HM_SET_ACTIVE_WINDOW,
(MPARAM)hwnd, (MPARAM)NULL);
WinSendMsg (hwndHelpInstance, HM_DISPLAY_HELP,
(MPARAM)usPanelID, (MPARAM)HMPANELTYPE_NUMBER);
hwndOwner = WinQueryWindow (hwnd, QW_OWNER);
WinSendMsg (hwndHelpInstance, HM_SET_ACTIVE_WINDOW,
(MPARAM)hwndOwner, (MPARAM)NULL);
return TRUE;
}
return FALSE;
}
BOOL DisplayHelp3 (USHORT usPanelID)
{
WinSendMsg (hwndHelpInstance, HM_DISPLAY_HELP,
(MPARAM)usPanelID, (MPARAM)HMPANELTYPE_NUMBER);
return TRUE;
}
/* this displayhelp only handles custom list window helps */
BOOL DisplayHelp4 (hwnd)
HWND hwnd;
{
USHORT usPanelID = 0;
USHORT usWndID;
hwnd = WinQueryWindow (hwnd, QW_PARENT);
usWndID = WinQueryWindowUShort (hwnd, QWS_ID);
switch (usWndID)
{
case WINDOW_ID_LIST :
usPanelID = IDH_WND_PANELLIST;
break;
case WINDOW_ID_PANEL :
usPanelID = IDH_WND_PANEL;
break;
case WINDOW_ID_BMP_LIST:
usPanelID = IDH_WND_BMPLIST;
break;
case WINDOW_ID_MMC_ANMT:
usPanelID = IDH_WND_ANMT;
break;
case WINDOW_ID_CANIMATE:
break;
case WINDOW_ID_COMLIST :
usPanelID = IDH_WND_ELELIST;
break;
case WINDOW_ID_FONTLIST :
usPanelID = IDH_WND_FONTLIST;
break;
case WINDOW_ID_CTRLLIST :
usPanelID = IDH_WND_PUSHBUTTONLIST;
break;
case WINDOW_ID_AUTOSTRLIST:
usPanelID = IDH_WND_PREFIXLIST;
break;
case WINDOW_ID_PNLPROPERTYLIST:
usPanelID = IDH_WND_PANELSTYLIST;
break;
case WINDOW_ID_CONTENTS :
usPanelID = IDH_WND_TOC;
break;
case WINDOW_ID_INDEX :
usPanelID = IDH_WND_INDEX;
break;
case WINDOW_ID_AUTOLINK :
usPanelID = IDH_WND_AUTOLINK;
break;
case WINDOW_ID_SYNONYMLIST:
usPanelID = IDH_WND_SYNLIST;
break;
case WINDOW_ID_LAYOUT :
usPanelID = 0;
break;
case WINDOW_ID_SYMBOLLIST :
usPanelID = IDH_WND_SYMBOLLIST;
break;
}
if (usPanelID)
{
WinSendMsg (hwndHelpInstance, HM_DISPLAY_HELP,
(MPARAM)usPanelID, (MPARAM)HMPANELTYPE_NUMBER);
return TRUE;
}
return FALSE;
}
BOOL ShowBubbleHelp (USHORT usRcID, PSZ pszHelpMsg, ULONG ulFlag)
{
if (usBubbleWidth == NO_SHOW_BUBBLE)
{
return;
}
if (!pszHelpMsg)
{
GetRcString (chMsg, usRcID);
pszHelpMsg = chMsg;
}
if (usBubbleWidth)
{
DestroyBubbleHelp ();
}
CreateBubbleHelp (pszHelpMsg, ulFlag);
return TRUE;
}
BOOL CreateBubbleHelp (PSZ pszHelpMsg, ULONG ulFlag)
{
POINTL Pt5[5];
POINTL pt;
RECTL Rect;
ULONG Len;
USHORT usTextHeight;
HPS hps;
CHAR chName[48];
FONTMETRICS Metrics;
WinQueryPointerPos (HWND_DESKTOP, &pt);
WinQueryPresParam (HWND_DESKTOP, PP_FONTNAMESIZE, 0, NULL, 48L, chName, 0);
WinSetPresParam (HWND_DESKTOP, PP_FONTNAMESIZE, 8L, (PVOID)"8.Helv");
hps = WinGetScreenPS (HWND_DESKTOP);
Len = strlen(pszHelpMsg);
GpiQueryTextBox (hps, (ULONG)Len, pszHelpMsg, 5L, (PPOINTL) Pt5);
usBubbleWidth = (USHORT)Pt5[TXTBOX_CONCAT].x;
if (ulFlag & HELP_DOWN_POS)
{
Rect.yTop = pt.y - 20;
Rect.xLeft = pt.x - (usBubbleWidth >> 1) - (usStdCharWidth >> 1);
}
else if (ulFlag & HELP_RIGHT_POS)
{
Rect.yTop = pt.y + (usStdCharHeight >> 1);
Rect.xLeft = pt.x + 20;
}
Rect.yBottom = Rect.yTop - usStdCharHeight;
if (Rect.xLeft < 0)
{
Rect.xLeft = 0;
}
if (Rect.yBottom < 0)
{
Rect.yBottom = 0;
}
Rect.xRight = Rect.xLeft + usBubbleWidth + usStdCharWidth;
BubbleHelpPos.x = Rect.xLeft;
BubbleHelpPos.y = Rect.yBottom;
WinFillRect (hps, &Rect, CLR_YELLOW);
GpiSetColor (hps, CLR_BLACK);
pt.x = Rect.xLeft;
pt.y = Rect.yBottom;
GpiSetCurrentPosition( hps, &pt);
pt.x = Rect.xRight - 1;
pt.y = Rect.yTop - 1;
GpiBox( hps, DRO_OUTLINE, &pt, 0L, 0L);
DrawShadow (hps, &Rect, 2, 2, CLR_BLACK);
GpiQueryFontMetrics (hps, (LONG)sizeof(FONTMETRICS), &Metrics);
usTextHeight = (USHORT)(Metrics.lMaxBaselineExt + Metrics.lExternalLeading);
pt.x = Rect.xLeft + (usStdCharWidth >> 1);
pt.y = Rect.yBottom + ((Rect.yTop - Rect.yBottom - usTextHeight) >> 1) +
Metrics.lMaxDescender;
GpiCharStringAt(hps, &pt, (LONG)Len, pszHelpMsg);
WinReleasePS (hps);
WinSetPresParam (HWND_DESKTOP, PP_FONTNAMESIZE, 48L, (PVOID)chName);
return TRUE;
}
VOID DestroyBubbleHelp ()
{
RECTL Rect;
HPS hps;
if (usBubbleWidth == NO_SHOW_BUBBLE)
{
return;
}
if (!usBubbleWidth)
{
return;
}
hps = WinGetScreenPS (HWND_DESKTOP);
Rect.yBottom = BubbleHelpPos.y - 2;
Rect.yTop = Rect.yBottom + usStdCharHeight + 2;
Rect.xLeft = BubbleHelpPos.x;
Rect.xRight = Rect.xLeft + usBubbleWidth + usStdCharWidth + 2;
GpiSetViewingLimits (hps, &Rect);
WinInvalidateRect (HWND_DESKTOP, &Rect, TRUE);
usBubbleWidth = 0;
usBubbleIndex = 0xFFFF;
WinReleasePS (hps);
}