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

161 lines
4.5 KiB
C++

/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
/***************************************************************************
Author: ShonK
Project: Kauai
Reviewed:
Copyright (c) Microsoft Corporation
For editing a text file or text stream as a document. Unlike the edit
controls in text.h/text.cpp, all the text need not be in memory (this
uses a BSF) and there can be multiple views on the same text.
***************************************************************************/
#ifndef TEXTDOC_H
#define TEXTDOC_H
/***************************************************************************
Text document. A doc wrapper for a BSF.
***************************************************************************/
typedef class TXDC *PTXDC;
#define TXDC_PAR DOCB
#define kclsTXDC 'TXDC'
class TXDC : public TXDC_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
protected:
PBSF _pbsf;
PFIL _pfil;
TXDC(PDOCB pdocb = pvNil, ulong grfdoc = fdocNil);
~TXDC(void);
bool _FInit(PFNI pfni = pvNil, PBSF pbsf = pvNil);
public:
static PTXDC PtxdcNew(PFNI pfni = pvNil, PBSF pbsf = pvNil, PDOCB pdocb = pvNil,
ulong grfdoc = fdocNil);
PBSF Pbsf(void)
{ return _pbsf; }
virtual PDDG PddgNew(PGCB pgcb);
virtual bool FGetFni(FNI *pfni);
virtual bool FSaveToFni(FNI *pfni, bool fSetFni);
};
/***************************************************************************
Text document display GOB - DDG for a TXDC.
***************************************************************************/
const long kcchMaxLine = 512;
const long kdxpIndentTxdd = 5;
typedef class TXDD *PTXDD;
#define TXDD_PAR DDG
#define kclsTXDD 'TXDD'
class TXDD : public TXDD_PAR
{
RTCLASS_DEC
ASSERT
MARKMEM
protected:
PBSF _pbsf;
long _clnDisp;
long _clnDispWhole;
PGL _pglichStarts;
//the selection
long _ichAnchor;
long _ichOther;
bool _fSelOn: 1;
ulong _tsSel;
long _xpSel;
bool _fXpValid;
//the font
long _onn;
ulong _grfont;
long _dypFont;
long _dypLine;
long _dxpTab;
//the cache
achar _rgchCache[kcchMaxLine];
long _ichMinCache;
long _ichLimCache;
TXDD(PDOCB pdocb, PGCB pgcb, PBSF pbsf, long onn, ulong grfont, long dypFont);
~TXDD(void);
virtual bool _FInit(void);
virtual void _NewRc(void);
virtual void _Activate(bool fActive);
void _Reformat(long lnMin, long *pclnIns = pvNil, long *pclnDel = pvNil);
void _ReformatEdit(long ichMinEdit, long cchIns, long cchDel,
long *pln, long *pclnIns = pvNil, long *pclnDel = pvNil);
bool _FFetchCh(long ich, achar *pch);
void _FetchLineLn(long ln, achar *prgch, long cchMax, long *pcch,
long *pichMin = pvNil);
void _FetchLineIch(long ich, achar *prgch, long cchMax, long *pcch,
long *pichMin = pvNil);
bool _FFindNextLineStart(long ich, long *pich,
achar *prgch = pvNil, long cchMax = 0);
bool _FFindLineStart(long ich, long *pich);
bool _FFindNextLineStartCached(long ich, long *pich,
achar *prgch = pvNil, long cchMax = 0);
bool _FFindLineStartCached(long ich, long *pich);
void _DrawLine(PGNV pgnv, RC *prcClip, long yp, achar *prgch, long cch);
void _SwitchSel(bool fOn, bool fDraw);
void _InvertSel(PGNV pgnv, bool fDraw);
void _InvertIchRange(PGNV pgnv, long ich1, long ich2, bool fDraw);
long _LnFromIch(long ich);
long _IchMinLn(long ln);
long _XpFromLnIch(PGNV pgnv, long ln, long ich);
long _XpFromIch(long ich);
long _XpFromRgch(PGNV pgnv, achar *prgch, long cch);
long _IchFromLnXp(long ln, long xp);
long _IchFromIchXp(long ich, long xp);
long _IchFromRgchXp(achar *prgch, long cch, long ichMinLine, long xp);
long *_QichLn(long ln)
{ return (long *)_pglichStarts->QvGet(ln); }
void _InvalAllTxdd(long ich, long cchIns, long cchDel);
void _InvalIch(long ich, long cchIns, long cchDel);
//scrolling support
virtual long _ScvMax(bool fVert);
virtual void _Scroll(long scaHorz, long scaVert,
long scvHorz = 0, long scvVert = 0);
//clipboard support
virtual bool _FCopySel(PDOCB *ppdocb = pvNil);
virtual void _ClearSel(void);
virtual bool _FPaste(PCLIP pclip, bool fDoIt, long cid);
public:
static PTXDD PtxddNew(PDOCB pdocb, PGCB pgcb, PBSF pbsf,
long onn, ulong grfont, long dypFont);
virtual void Draw(PGNV pgnv, RC *prcClip);
virtual bool FCmdTrackMouse(PCMD_MOUSE pcmd);
virtual bool FCmdKey(PCMD_KEY pcmd);
virtual bool FCmdSelIdle(PCMD pcmd);
void SetSel(long ichAnchor, long ichOther, bool fDraw);
void ShowSel(bool fDraw);
bool FReplace(achar *prgch, long cch, long ich1, long ich2, bool fDraw);
};
#endif //!TEXTDOC_H