/* Copyright (c) Microsoft Corporation. Licensed under the MIT License. */ /*************************************************************************** Status: All changes must be code reviewed. Textbox Class Textbox (TBOX) TXRD ---> TBOX Drawing stuff Textbox border (TBXB) GOB ---> TBXB Textbox Ddg (TBXG) TXRG ---> TBXG (created as a child Gob of a TBXB) Cut/Copy/Paste Stuff Clipboard object (TCLP) DOCB ---> TCLP ***************************************************************************/ #ifndef TBOX_H #define TBOX_H // // Defines for global text box constant values // #define kdzpBorderTbox 5 // Width of the border in pixels #define kdxpMinTbox 16 + 2 * kdxpIndentTxtg // Minimum Width of a tbox in pixels #define kdypMinTbox 12 // Minimum Height of a tbox in pixels #define kxpDefaultTbox 177 // Default location of a tbox #define kypDefaultTbox 78 // Default location of a tbox #define kdxpDefaultTbox 140 // Default width of a tbox #define kdypDefaultTbox 100 // Default height of a tbox // // // The border for a single textbox (TBXB) // // // // Definitions for each of the anchor points in a border // enum TBXT { tbxtUp, tbxtUpRight, tbxtRight, tbxtDownRight, tbxtDown, tbxtDownLeft, tbxtLeft, tbxtUpLeft, tbxtMove }; #define TBXB_PAR GOB typedef class TBXB *PTBXB; #define kclsTBXB 'TBXB' class TBXB : public TBXB_PAR { RTCLASS_DEC ASSERT MARKMEM private: PTBOX _ptbox; // Owning text box. bool _fTrackingMouse; // Are we tracking the mouse. TBXT _tbxt; // The anchor point being dragged. long _xpPrev; // Previous x coord of the mouse. long _ypPrev; // Previous y coord of the mouse. RC _rcOrig; // Original size of the border. TBXB(PTBOX ptbox, PGCB pgcb) : GOB(pgcb) { _ptbox = ptbox; } TBXT _TbxtAnchor(long xp, long yp); // Returns the anchor point the mouse is at. public: // // Creates a text box with border // static PTBXB PtbxbNew(PTBOX ptbox, PGCB pgcb); // // Overridden routines // void Draw(PGNV pgnv, RC *prcClip); void Activate(bool fActive); virtual bool FPtIn(long xp, long yp); virtual bool FCmdMouseMove(PCMD_MOUSE pcmd); virtual bool FCmdTrackMouse(PCMD_MOUSE pcmd); void AttachToMouse(void); }; // // // The DDG for a single textbox (TBXG). // // #define TBXG_PAR TXRG typedef class TBXG *PTBXG; #define kclsTBXG 'TBXG' class TBXG : public TBXG_PAR { RTCLASS_DEC ASSERT MARKMEM CMD_MAP_DEC(TBXG) private: PTBXB _ptbxb; // Enclosing border. RC _rcOld; // Old rectangle for the ddg. TBXG(PTXRD ptxrd, PGCB pgcb) : TXRG(ptxrd, pgcb) {} ~TBXG(void); public: // // Creation function // static PTBXG PtbxgNew(PTBOX ptbox, PGCB pgcb); // // Accessors // void SetTbxb(PTBXB ptbxb) { _ptbxb = ptbxb; } PTBXB Ptbxb(void) { return _ptbxb; } // // Scrolling // bool FNeedToScroll(void); // Does this text box need to scroll anything void Scroll(long scaVert); // Scrolls to beginning or a single pixel only. // // Overridden routines // virtual bool FPtIn(long xp, long yp); virtual bool FCmdMouseMove(PCMD_MOUSE pcmd); virtual bool FCmdTrackMouse(PCMD_MOUSE pcmd); virtual bool FCmdClip(PCMD pcmd); virtual bool FEnableDdgCmd(PCMD pcmd, ulong *pgrfeds); virtual void Draw(PGNV pgnv, RC *prcClip); virtual long _DxpDoc(void); virtual void _NewRc(void); virtual void InvalCp(long cp, long ccpIns, long ccpDel); void Activate(bool fActive); virtual void _FetchChp(long cp, PCHP pchp, long *pcpMin = pvNil, long *pcpLim = pvNil); // // Status // bool FTextSelected(void); // // Only for TBXB // bool _FDoClip(long tool); // Actually does a clipboard command. }; enum { grfchpNil = 0, kfchpOnn = 0x01, kfchpDypFont = 0x02, kfchpBold = 0x04, kfchpItalic = 0x08 }; const ulong kgrfchpAll = (kfchpOnn | kfchpDypFont | kfchpBold | kfchpItalic); // // // Text box document class (TBOX). // // typedef class TBOX *PTBOX; #define TBOX_PAR TXRD #define kclsTBOX 'TBOX' class TBOX : public TBOX_PAR { RTCLASS_DEC ASSERT MARKMEM private: PSCEN _pscen; // The owning scene long _nfrmFirst; // Frame the tbox appears in. long _nfrmMax; // Frame the tbox disappears in. long _nfrmCur; // Current frame number. bool _fSel; // Is this tbox selected? bool _fStory; // Is this a story text box. RC _rc; // Size of text box. TBOX(void) : TXRD() {} public: // // Creation routines // static PTBOX PtboxNew(PSCEN pscen=pvNil, RC *prcRel=pvNil, bool fStory = fTrue); PDDG PddgNew(PGCB pgcb) { return TBXG::PtbxgNew(this, pgcb); } static PTBOX PtboxRead(PCRF pcrf, CNO cno, PSCEN pscen); bool FWrite(PCFL pcfl, CNO cno); bool FDup(PTBOX *pptbox); // // Movie specific functions // void SetScen(PSCEN pscen); bool FIsVisible(void); bool FGotoFrame(long nfrm); void Select(bool fSel); bool FSelected(void) { return _fSel; } bool FGetLifetime(long *pnfrmStart, long *pnfrmLast); bool FShowCore(void); bool FShow(void); void HideCore(void); bool FHide(void); bool FStory(void) { return _fStory; } void SetTypeCore(bool fStory); bool FSetType(bool fStory); bool FNeedToScroll(void); void Scroll(void); PSCEN Pscen(void) { return _pscen; } bool FTextSelected(void); bool FSetAcrBack(ACR acr); bool FSetAcrText(ACR acr); bool FSetOnnText(long onn); bool FSetDypFontText(long dypFont); bool FSetStyleText(ulong grfont); void SetStartFrame(long nfrm); void SetOnnDef(long onn) { _onnDef = onn; } void SetDypFontDef(long dypFont) { _dypFontDef = dypFont; } void FetchChpSel(PCHP pchp, ulong *pgrfchp); void AttachToMouse(void); // // Overridden functions // void SetDirty(bool fDirty = fTrue); virtual bool FAddUndo(PUNDB pundb); virtual void ClearUndo(void); void ParClearUndo(void) { TBOX_PAR::ClearUndo(); } // // TBXG/TBXB specific funtions // void GetRc(RC *prc) { *prc= _rc; } void SetRc(RC *prc); void CleanDdg(void); long Itbox(void); // // Undo access functions, not for use by anyone but tbox.cpp // long NfrmFirst(void) { return _nfrmFirst; } long nfrmMax(void) { return _nfrmMax; } }; // // // Textbox document for clipping // // typedef class TCLP *PTCLP; #define TCLP_PAR DOCB #define kclsTCLP 'TCLP' class TCLP : public TCLP_PAR { RTCLASS_DEC MARKMEM ASSERT protected: PTBOX _ptbox; // Text box copy. TCLP(void) {} public: // // Constructors and destructors // static PTCLP PtclpNew(PTBOX ptbox); ~TCLP(void); // // Pasting // bool FPaste(PSCEN pscen); }; #endif