1*8af74909SZhong Yang // Scintilla source code edit control 2*8af74909SZhong Yang /** @file CallTip.h 3*8af74909SZhong Yang ** Interface to the call tip control. 4*8af74909SZhong Yang **/ 5*8af74909SZhong Yang // Copyright 1998-2001 by Neil Hodgson <[email protected]> 6*8af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed. 7*8af74909SZhong Yang 8*8af74909SZhong Yang #ifndef CALLTIP_H 9*8af74909SZhong Yang #define CALLTIP_H 10*8af74909SZhong Yang 11*8af74909SZhong Yang namespace Scintilla { 12*8af74909SZhong Yang 13*8af74909SZhong Yang struct Chunk { 14*8af74909SZhong Yang size_t start; 15*8af74909SZhong Yang size_t end; startChunk16*8af74909SZhong Yang constexpr Chunk(size_t start_=0, size_t end_=0) noexcept : start(start_), end(end_) { 17*8af74909SZhong Yang assert(start <= end); 18*8af74909SZhong Yang } 19*8af74909SZhong Yang size_t Length() const noexcept; 20*8af74909SZhong Yang }; 21*8af74909SZhong Yang 22*8af74909SZhong Yang /** 23*8af74909SZhong Yang */ 24*8af74909SZhong Yang class CallTip { 25*8af74909SZhong Yang Chunk highlight; // character offset to start and end of highlighted text 26*8af74909SZhong Yang std::string val; 27*8af74909SZhong Yang Font font; 28*8af74909SZhong Yang PRectangle rectUp; // rectangle of last up angle in the tip 29*8af74909SZhong Yang PRectangle rectDown; // rectangle of last down arrow in the tip 30*8af74909SZhong Yang int lineHeight; // vertical line spacing 31*8af74909SZhong Yang int offsetMain; // The alignment point of the call tip 32*8af74909SZhong Yang int tabSize; // Tab size in pixels, <=0 no TAB expand 33*8af74909SZhong Yang bool useStyleCallTip; // if true, STYLE_CALLTIP should be used 34*8af74909SZhong Yang bool above; // if true, display calltip above text 35*8af74909SZhong Yang 36*8af74909SZhong Yang int DrawChunk(Surface *surface, int x, std::string_view sv, 37*8af74909SZhong Yang int ytext, PRectangle rcClient, bool asHighlight, bool draw); 38*8af74909SZhong Yang int PaintContents(Surface *surfaceWindow, bool draw); 39*8af74909SZhong Yang bool IsTabCharacter(char ch) const noexcept; 40*8af74909SZhong Yang int NextTabPos(int x) const noexcept; 41*8af74909SZhong Yang 42*8af74909SZhong Yang public: 43*8af74909SZhong Yang Window wCallTip; 44*8af74909SZhong Yang Window wDraw; 45*8af74909SZhong Yang bool inCallTipMode; 46*8af74909SZhong Yang Sci::Position posStartCallTip; 47*8af74909SZhong Yang ColourDesired colourBG; 48*8af74909SZhong Yang ColourDesired colourUnSel; 49*8af74909SZhong Yang ColourDesired colourSel; 50*8af74909SZhong Yang ColourDesired colourShade; 51*8af74909SZhong Yang ColourDesired colourLight; 52*8af74909SZhong Yang int codePage; 53*8af74909SZhong Yang int clickPlace; 54*8af74909SZhong Yang 55*8af74909SZhong Yang int insetX; // text inset in x from calltip border 56*8af74909SZhong Yang int widthArrow; 57*8af74909SZhong Yang int borderHeight; 58*8af74909SZhong Yang int verticalOffset; // pixel offset up or down of the calltip with respect to the line 59*8af74909SZhong Yang 60*8af74909SZhong Yang CallTip() noexcept; 61*8af74909SZhong Yang // Deleted so CallTip objects can not be copied. 62*8af74909SZhong Yang CallTip(const CallTip &) = delete; 63*8af74909SZhong Yang CallTip(CallTip &&) = delete; 64*8af74909SZhong Yang CallTip &operator=(const CallTip &) = delete; 65*8af74909SZhong Yang CallTip &operator=(CallTip &&) = delete; 66*8af74909SZhong Yang ~CallTip(); 67*8af74909SZhong Yang 68*8af74909SZhong Yang void PaintCT(Surface *surfaceWindow); 69*8af74909SZhong Yang 70*8af74909SZhong Yang void MouseClick(Point pt) noexcept; 71*8af74909SZhong Yang 72*8af74909SZhong Yang /// Setup the calltip and return a rectangle of the area required. 73*8af74909SZhong Yang PRectangle CallTipStart(Sci::Position pos, Point pt, int textHeight, const char *defn, 74*8af74909SZhong Yang const char *faceName, int size, int codePage_, 75*8af74909SZhong Yang int characterSet, int technology, const Window &wParent); 76*8af74909SZhong Yang 77*8af74909SZhong Yang void CallTipCancel(); 78*8af74909SZhong Yang 79*8af74909SZhong Yang /// Set a range of characters to be displayed in a highlight style. 80*8af74909SZhong Yang /// Commonly used to highlight the current parameter. 81*8af74909SZhong Yang void SetHighlight(size_t start, size_t end); 82*8af74909SZhong Yang 83*8af74909SZhong Yang /// Set the tab size in pixels for the call tip. 0 or -ve means no tab expand. 84*8af74909SZhong Yang void SetTabSize(int tabSz) noexcept; 85*8af74909SZhong Yang 86*8af74909SZhong Yang /// Set calltip position. 87*8af74909SZhong Yang void SetPosition(bool aboveText) noexcept; 88*8af74909SZhong Yang 89*8af74909SZhong Yang /// Used to determine which STYLE_xxxx to use for call tip information 90*8af74909SZhong Yang bool UseStyleCallTip() const noexcept; 91*8af74909SZhong Yang 92*8af74909SZhong Yang // Modify foreground and background colours 93*8af74909SZhong Yang void SetForeBack(const ColourDesired &fore, const ColourDesired &back) noexcept; 94*8af74909SZhong Yang }; 95*8af74909SZhong Yang 96*8af74909SZhong Yang } 97*8af74909SZhong Yang 98*8af74909SZhong Yang #endif 99