// Scintilla source code edit control
/** @file CallTip.h
 ** Interface to the call tip control.
 **/
// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.

#ifndef CALLTIP_H
#define CALLTIP_H

/**
 */
class CallTip {
    int startHighlight;    // character offset to start and...
    int endHighlight;      // ...end of highlighted text
    char *val;
    Font font;
    PRectangle rectUp;      // rectangle of last up angle in the tip
    PRectangle rectDown;    // rectangle of last down arrow in the tip
    int lineHeight;         // vertical line spacing
    int offsetMain;         // The alignment point of the call tip
    int tabSize;            // Tab size in pixels, <=0 no TAB expand
    bool useStyleCallTip;   // if true, STYLE_CALLTIP should be used

    // Private so CallTip objects can not be copied
    CallTip(const CallTip &) {}
    CallTip &operator=(const CallTip &) { return *this; }
    void DrawChunk(Surface *surface, int &x, const char *s,
        int posStart, int posEnd, int ytext, PRectangle rcClient,
        bool highlight, bool draw);
    int PaintContents(Surface *surfaceWindow, bool draw);
    bool IsTabCharacter(char c);
    int NextTabPos(int x);

public:
    Window wCallTip;
    Window wDraw;
    bool inCallTipMode;
    int posStartCallTip;
    ColourPair colourBG;
    ColourPair colourUnSel;
    ColourPair colourSel;
    ColourPair colourShade;
    ColourPair colourLight;
    int codePage;
    int clickPlace;

    CallTip();
    ~CallTip();

    /// Claim or accept palette entries for the colours required to paint a calltip.
    void RefreshColourPalette(Palette &pal, bool want);

    void PaintCT(Surface *surfaceWindow);

    void MouseClick(Point pt);

    /// Setup the calltip and return a rectangle of the area required.
    PRectangle CallTipStart(int pos, Point pt, const char *defn,
        const char *faceName, int size, int codePage_, 
        int characterSet, Window &wParent);

    void CallTipCancel();

    /// Set a range of characters to be displayed in a highlight style.
    /// Commonly used to highlight the current parameter.
    void SetHighlight(int start, int end);

    /// Set the tab size in pixels for the call tip. 0 or -ve means no tab expand.
    void SetTabSize(int tabSz);

    /// Used to determine which STYLE_xxxx to use for call tip information
    bool UseStyleCallTip() const { return useStyleCallTip;}

    // Modify foreground and background colours
    void SetForeBack(const ColourPair &fore, const ColourPair &back);
};

#endif
