mirror of
https://github.com/microsoft/Microsoft-3D-Movie-Maker.git
synced 2024-11-22 02:12:33 +01:00
161 lines
4.5 KiB
C++
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
|
|
|