Microsoft-3D-Movie-Maker/kauai/TOOLS/CHELP.H
2022-05-03 16:31:19 -07:00

513 lines
12 KiB
C++

/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
/***************************************************************************
Main include file for the help authoring tool.
***************************************************************************/
#ifndef CHELP_H
#define CHELP_H
#include "kidframe.h"
#include "chelpexp.h"
#include "chelpres.h"
extern PSTRG vpstrg;
extern SC_LID vsclid;
extern PSPLC vpsplc;
enum
{
khidLigButton = khidLimFrame,
khidLigPicture,
};
//creator type for the help editor
#define kctgChelp 'CHLP'
typedef class LID *PLID;
typedef class LIG *PLIG;
typedef class HETD *PHETD;
/***************************************************************************
App class
***************************************************************************/
#define APP_PAR APPB
#define kclsAPP 'APP'
class APP : public APP_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
CMD_MAP_DEC(APP)
protected:
PCRM _pcrm;
PLID _plidPicture;
PLID _plidButton;
virtual bool _FInit(ulong grfapp, ulong grfgob, long ginDef);
virtual void _FastUpdate(PGOB pgob, PREGN pregnClip,
ulong grfapp = fappNil, PGPT pgpt = pvNil);
public:
virtual void GetStnAppName(PSTN pstn);
virtual void UpdateHwnd(HWND hwnd, RC *prc, ulong grfapp = fappNil);
virtual bool FCmdOpen(PCMD pcmd);
virtual bool FCmdLoadResFile(PCMD pcmd);
virtual bool FCmdChooseLanguage(PCMD pcmd);
virtual bool FEnableChooseLanguage(PCMD pcmd, ulong *pgrfeds);
PLIG PligNew(bool fButton, PGCB pgcb, PTXHD ptxhd);
bool FLoadResFile(PFNI pfni);
bool FOpenDocFile(PFNI pfni, long cid = cidOpen);
};
extern APP vapp;
/***************************************************************************
List document
***************************************************************************/
#define LID_PAR DOCB
#define kclsLID 'LID'
class LID : public LID_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
protected:
struct CACH
{
PCRF pcrf;
CNO cno;
CNO cnoMbmp;
};
PCRM _pcrm; // where to look for the chunks
CTG _ctg; // what ctg to look for
CHID _chid; // what chid value the MBMP should be at (if _ctg is not MBMP)
PGL _pglcach; // list of the chunks that we found
LID(void);
~LID(void);
bool _FInit(PCRM pcrm, CTG ctg, CHID chid);
public:
static PLID PlidNew(PCRM pcrm, CTG ctg, CHID chid = 0);
bool FRefresh(void);
long Ccki(void);
void GetCki(long icki, CKI *pcki, PCRF *ppcrf = pvNil);
PMBMP PmbmpGet(long icki);
};
/***************************************************************************
List display gob
***************************************************************************/
const long kdxpCellLig = kdzpInch * 2;
const long kdypCellLig = kdzpInch;
typedef class LIG *PLIG;
#define LIG_PAR DDG
#define kclsLIG 'LIG'
class LIG : public LIG_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
CMD_MAP_DEC(LIG)
protected:
PTXHD _ptxhd; // the document to put the chunk in
PSCB _pscb; // our scroll bar
long _dypCell; // how tall are our cells
LIG(PLID plid, GCB *pgcb);
bool _FInit(PTXHD ptxhd, long dypCell);
public:
static PLIG PligNew(PLID plid, GCB *pgcb, PTXHD ptxhd,
long dypCell = kdypCellLig);
PLID Plid(void);
void Refresh(void);
virtual void MouseDown(long xp, long yp, long cact, ulong grfcust);
virtual void Draw(PGNV pgnv, RC *prcClip);
virtual bool FCmdScroll(PCMD pcmd);
};
/***************************************************************************
Color chooser GOB.
***************************************************************************/
const long kcacrCcg = 8;
const long kdxpCcg = 78;
const long kdxpFrameCcg = 2;
typedef class CCG *PCCG;
#define CCG_PAR GOB
#define kclsCCG 'CCG'
class CCG : public CCG_PAR
{
RTCLASS_DEC
ASSERT
protected:
PTXHD _ptxhd; // the document to put the color in
long _cacrRow; // how many colors to put on a row
bool _fForeColor; // whether this sets the foreground or background color
bool _FGetAcrFromPt(long xp, long yp, ACR *pacr, RC *prc = pvNil,
long *piscr = pvNil);
public:
CCG(GCB *pgcb, PTXHD ptxhd, bool fForeColor, long cacrRow = kcacrCcg);
virtual void MouseDown(long xp, long yp, long cact, ulong grfcust);
virtual void Draw(PGNV pgnv, RC *prcClip);
virtual bool FCmdMouseMove(PCMD_MOUSE pcmd);
virtual bool FEnsureToolTip(PGOB *ppgobCurTip, long xpMouse, long ypMouse);
};
/***************************************************************************
Color chooser tool tip.
***************************************************************************/
typedef class CCGT *PCCGT;
#define CCGT_PAR GOB
#define kclsCCGT 'CCGT'
class CCGT : public CCGT_PAR
{
RTCLASS_DEC
protected:
ACR _acr;
STN _stn;
public:
CCGT(PGCB pgcb, ACR acr = kacrBlack, PSTN pstn = pvNil);
void SetAcr(ACR acr, PSTN pstn = pvNil);
ACR AcrCur(void)
{ return _acr; }
virtual void Draw(PGNV pgnv, RC *prcClip);
};
/***************************************************************************
Help editor doc - consists of a CFL containing (possibly) multiple
topics.
***************************************************************************/
typedef class HEDO *PHEDO;
#define HEDO_PAR DOCB
#define kclsHEDO 'HEDO'
class HEDO : public HEDO_PAR
{
RTCLASS_DEC
ASSERT
protected:
PCFL _pcfl; //the chunky file
PRCA _prca; //the resources
HEDO(void);
~HEDO(void);
public:
static PHEDO PhedoNew(FNI *pfni, PRCA prca);
PCFL Pcfl(void)
{ return _pcfl; }
PRCA Prca(void)
{ return _prca; }
virtual PDDG PddgNew(PGCB pgcb);
virtual bool FGetFni(FNI *pfni);
virtual bool FGetFniSave(FNI *pfni);
virtual bool FSaveToFni(FNI *pfni, bool fSetFni);
virtual void InvalAllDdg(CNO cno);
virtual bool FExportText(void);
virtual void DoFindNext(PHETD phetd, CNO cno, bool fAdvance = fTrue);
virtual PHETD PhetdOpenNext(PHETD phetd);
virtual PHETD PhetdOpenPrev(PHETD phetd);
};
/***************************************************************************
TSEL: used to track a selection in a chunky file doc
***************************************************************************/
#define TSEL_PAR BASE
#define kclsTSEL 'TSEL'
class TSEL : public TSEL_PAR
{
RTCLASS_DEC
ASSERT
protected:
PCFL _pcfl;
long _icki;
CNO _cno;
void _SetNil(void);
public:
TSEL(PCFL pcfl);
void Adjust(void);
long Icki(void) { return _icki; }
CNO Cno(void) { return _cno; }
bool FSetIcki(long icki);
bool FSetCno(CNO cno);
};
/***************************************************************************
Help editor document display GOB - displays a HEDO.
***************************************************************************/
typedef class HEDG *PHEDG;
#define HEDG_PAR DDG
#define kclsHEDG 'HEDG'
class HEDG : public HEDG_PAR
{
RTCLASS_DEC
CMD_MAP_DEC(HEDG)
ASSERT
protected:
long _onn; //fixed width font to use
long _dypHeader; //height of the header
long _dypLine; //height of one line
long _dxpChar; //width of a character
long _dypBorder; //height of border (included in _dypLine)
PCFL _pcfl; //the chunky file
TSEL _tsel; //the selection
HEDG(PHEDO phedo, PCFL pcfl, PGCB pgcb);
virtual void _Scroll(long scaHorz, long scaVert,
long scvHorz = 0, long scvVert = 0);
virtual void _ScrollDxpDyp(long dxp, long dyp);
long _YpFromIcki(long icki)
{ return LwMul(icki - _scvVert, _dypLine) + _dypHeader; }
long _XpFromIch(long ich)
{ return LwMul(ich - _scvHorz + 1, _dxpChar); }
long _IckiFromYp(long yp);
void _GetContent(RC *prc);
void _DrawSel(PGNV pgnv);
void _SetSel(long icki, CNO cno = cnoNil);
void _ShowSel(void);
void _EditTopic(CNO cno);
virtual void _Activate(bool fActive);
virtual long _ScvMax(bool fVert);
//clipboard support
virtual bool _FCopySel(PDOCB *ppdocb = pvNil);
virtual void _ClearSel(void);
virtual bool _FPaste(PCLIP pclip, bool fDoIt, long cid);
#ifdef WIN
void _StartPage(PGNV pgnv, PSTN pstnDoc, long lwPage,
RC *prcPage, long onn);
#endif //WIN
public:
static PHEDG PhedgNew(PHEDO phedo, PCFL pcfl, PGCB pgcb);
virtual void Draw(PGNV pgnv, RC *prcClip);
virtual void MouseDown(long xp, long yp, long cact, ulong grfcust);
virtual bool FCmdKey(PCMD_KEY pcmd);
virtual void InvalCno(CNO cno);
virtual bool FEnableHedgCmd(PCMD pcmd, ulong *pgrfeds);
virtual bool FCmdNewTopic(PCMD pcmd);
virtual bool FCmdEditTopic(PCMD pcmd);
virtual bool FCmdDeleteTopic(PCMD pcmd);
virtual bool FCmdExport(PCMD pcmd);
virtual bool FCmdFind(PCMD pcmd);
virtual bool FCmdPrint(PCMD pcmd);
virtual bool FCmdCheckSpelling(PCMD pcmd);
virtual bool FCmdDump(PCMD pcmd);
PHEDO Phedo(void)
{ return (PHEDO)_pdocb; }
};
/***************************************************************************
Help editor topic doc - for editing a single topic in a HEDO.
An instance of this class is a child doc of a HEDO.
***************************************************************************/
#define HETD_PAR TXHD
#define kclsHETD 'HETD'
class HETD : public HETD_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
protected:
PCFL _pcfl; //which chunk is being edited
CNO _cno;
PGST _pgst; //string versions of stuff in HTOP
STN _stnDesc; //description
HETD(PDOCB pdocb, PRCA prca, PCFL pcfl, CNO cno);
~HETD(void);
virtual bool _FReadChunk(PCFL pcfl, CTG ctg, CNO cno, bool fCopyText);
public:
static PHETD PhetdNew(PDOCB pdocb, PRCA prca, PCFL pcfl, CNO cno);
static PHETD PhetdFromChunk(PDOCB pdocb, CNO cno);
static void CloseDeletedHetd(PDOCB pdocb);
virtual PDMD PdmdNew(void);
virtual PDDG PddgNew(PGCB pgcb);
virtual void GetName(PSTN pstn);
virtual bool FSave(long cid);
virtual bool FSaveToChunk(PCFL pcfl, CKI *pcki, bool fRedirectText = fFalse);
void EditHtop(void);
bool FDoFind(long cpMin, long *pcpMin, long *pcpLim);
bool FDoReplace(long cp1, long cp2, long *pcpMin, long *pcpLim);
PHEDO Phedo(void)
{ return (PHEDO)PdocbPar(); }
CNO Cno(void)
{ return _cno; }
void GetHtopStn(long istn, PSTN pstn);
};
/***************************************************************************
DDG for an HETD. Help text document editing gob.
***************************************************************************/
typedef class HETG *PHETG;
#define HETG_PAR TXRG
#define kclsHETG 'HETG'
class HETG : public HETG_PAR
{
RTCLASS_DEC
CMD_MAP_DEC(HETG)
protected:
HETG(PHETD phetd, PGCB pgcb);
// clipboard support
virtual bool _FCopySel(PDOCB *ppdocb = pvNil);
// override these so we can put up our dialogs
virtual bool _FGetOtherSize(long *pdypFont);
virtual bool _FGetOtherSubSuper(long *pdypOffset);
// we have our own ruler
virtual long _DypTrul(void);
virtual PTRUL _PtrulNew(PGCB pgcb);
// override _DrawLinExtra so we can put boxes around grouped text.
virtual void _DrawLinExtra(PGNV pgnv, PRC prcClip, LIN *plin,
long dxp, long yp, ulong grftxtg);
public:
static PHETG PhetgNew(PHETD phetd, PGCB pgcb);
virtual void InvalCp(long cp, long ccpIns, long ccpDel);
virtual void Draw(PGNV pgnv, RC *prcClip);
virtual bool FInsertPicture(PCRF pcrf, CTG ctg, CNO cno);
virtual bool FInsertButton(PCRF pcrf, CTG ctg, CNO cno);
virtual bool FCmdGroupText(PCMD pcmd);
virtual bool FCmdFormatPicture(PCMD pcmd);
virtual bool FCmdFormatButton(PCMD pcmd);
virtual bool FEnableHetgCmd(PCMD pcmd, ulong *pgrfeds);
virtual bool FCmdEditHtop(PCMD pcmd);
virtual bool FCmdInsertEdit(PCMD pcmd);
virtual bool FCmdFormatEdit(PCMD pcmd);
virtual bool FCmdFind(PCMD pcmd);
virtual bool FCmdPrint(PCMD pcmd);
virtual bool FCmdLineSpacing(PCMD pcmd);
virtual bool FCmdNextTopic(PCMD pcmd);
virtual bool FCmdCheckSpelling(PCMD pcmd);
virtual bool FCmdFontDialog(PCMD pcmd);
virtual bool FCheckSpelling(long *pcactChanges);
PHETD Phetd(void)
{ return (PHETD)_ptxtb; }
long DypLine(long ilin);
};
const long kstidFind = 1;
const long kstidReplace = 2;
/***************************************************************************
The ruler for a help text document.
***************************************************************************/
typedef class HTRU *PHTRU;
#define HTRU_PAR TRUL
#define kclsHTRU 'HTRU'
class HTRU : public HTRU_PAR
{
RTCLASS_DEC
ASSERT
protected:
//ruler track type
enum
{
rttNil,
krttTab,
krttDoc
};
PTXTG _ptxtg;
long _dxpTab;
long _dxpDoc;
long _dyp;
long _xpLeft;
long _dxpTrack;
long _rtt;
long _onn;
long _dypFont;
ulong _grfont;
HTRU(GCB *pgcb, PTXTG ptxtg);
public:
static PHTRU PhtruNew(GCB *pgcb, PTXTG ptxtg, long dxpTab, long dxpDoc,
long dypDoc, long xpLeft, long onn, long dypFont, ulong grfont);
virtual void Draw(PGNV pgnv, RC *prcClip);
virtual bool FCmdTrackMouse(PCMD_MOUSE pcmd);
virtual void SetDxpTab(long dxpTab);
virtual void SetDxpDoc(long dxpDoc);
virtual void SetXpLeft(long xpLeft);
virtual void SetDypHeight(long dyp);
};
#endif //!CHELP_H