/**********************************************************************/
/**                       Microsoft Windows/NT                       **/
/**                Copyright(c) Microsoft Corp., 1993                **/
/**********************************************************************/

/*
    ellipsis.hxx
    Definition for fancy enhanced ellipsis-science edit control

    FILE HISTORY:
         Congpa You (congpay) 01-April-1993 created.
*/

#ifndef _BLT_HXX_
#error "Don't include this file directly; instead, include it through blt.hxx"
#endif  // _BLT_HXX_

#ifndef _ELLIPSIS_HXX_
#define _ELLIPSIS_HXX_

#include "bltctrl.hxx"
#include "bltedit.hxx"

#include "string.hxx"

enum ELLIPSIS_STYLE
{
    ELLIPSIS_NONE,     // no ellipsis text
    ELLIPSIS_LEFT,     // "dotdot" on the left
    ELLIPSIS_RIGHT,    // "dotdot" on the right - default
    ELLIPSIS_CENTER,   // "dotdot" in the middle
    ELLIPSIS_PATH      // "dotdot" for the directory path
};


/*********************************************************************

    NAME:       BASE_ELLIPSIS

    SYNOPSIS:   The base class for all ellipsis classes.

    INTERFACE:
            Init()
            Term()
            SetEllipsis(NLS_STR * pnlsStr ) // set the ellipsis text
            SetEllipsis(TCHAR * lpStr)   // set the ellipsis text
            QueryOriginalStr()
            SetOriginalStr (const TCHAR * psz)
            QueryStyle()
            SetStyle( const ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE )
            QueryText( NLS_STR * pnls )
            QueryText( TCHAR * pszBuffer, UINT cbBufSize )
            QueryTextLength()
            QueryTextSize()

    PARENT:     BASE

    USES:       NLS_STR

    NOTES:

    HISTORY:
           Congpa You (congpay) 01-April-1993 Created.

*********************************************************************/

DLL_CLASS BASE_ELLIPSIS : public BASE
{
private:
    NLS_STR         _nlsOriginalStr;    // original string
    ELLIPSIS_STYLE  _nStyle;            // style of the display method

protected:
    BASE_ELLIPSIS(ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE);

    virtual INT QueryStrLen (NLS_STR nlsStr) = 0;

    virtual INT QueryStrLen (const TCHAR * lpStr, INT nIstr) = 0;

    virtual INT QueryLimit () = 0;

    virtual INT QueryMaxCharWidth() = 0;

    APIERR  SetEllipsisLeft(NLS_STR * pnls);

    APIERR  SetEllipsisCenter(NLS_STR * pnls);

    APIERR  SetEllipsisRight(NLS_STR * pnls);

    APIERR  SetEllipsisPath(NLS_STR * pnls);

    BOOL    IsValidStyle( const ELLIPSIS_STYLE nStyle ) const;

public:
    static  APIERR Init();

    static  VOID Term();

    APIERR  SetEllipsis(NLS_STR * pnlsStr );   // set the ellipsis text

    APIERR  SetEllipsis(TCHAR * lpStr);   // set the ellipsis text

    NLS_STR QueryOriginalStr() const;

    APIERR  SetOriginalStr (const TCHAR * psz);

    ELLIPSIS_STYLE  QueryStyle() const;

    VOID    SetStyle( const ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE );

    APIERR  QueryText( NLS_STR * pnls ) const;

    APIERR  QueryText( TCHAR * pszBuffer, UINT cbBufSize ) const;

    INT     QueryTextLength() const;

    INT     QueryTextSize() const;
};

/*********************************************************************

    NAME:       CONSOLE_ELLIPSIS

    SYNOPSIS:   The ellipsis class for all console apps.

    INTERFACE:
            CONSOLE_ELLIPSIS()        - constructor
            ~CONSOLE_ELLIPSIS()       - destructor
            SetSize()         - change the size of the object

    PARENT:     BASE_ELLIPSIS

    USES:       NLS_STR

    NOTES:

    HISTORY:
           Congpa You (congpay) 01-April-1993 Created.

*********************************************************************/

DLL_CLASS CONSOLE_ELLIPSIS : public BASE_ELLIPSIS
{
private:
    INT             _nLimit;

protected:
    virtual INT QueryStrLen (NLS_STR nlsStr);
    virtual INT QueryStrLen (const TCHAR * lpStr, INT nIstr);
    virtual INT QueryLimit ();
    virtual INT QueryMaxCharWidth();

public:
    CONSOLE_ELLIPSIS( ELLIPSIS_STYLE nStyle ,
                      INT            nLimit );

    VOID SetSize (INT nLimit);
};



/*********************************************************************

    NAME:       WIN_ELLIPSIS

    SYNOPSIS:   The ellipsis base class for all Win aware classes.

    INTERFACE:
            WIN_ELLIPSIS()        - constructor
            ~WIN_ELLIPSIS()       - destructor
            SetSize()     - change the size of the window object

    PARENT:     BASE_ELLIPSIS

    USES:       NLS_STR

    NOTES:

    HISTORY:
           Congpa You (congpay) 01-April-1993 Created.

*********************************************************************/

DLL_CLASS WIN_ELLIPSIS : public BASE_ELLIPSIS
{
private:
    DISPLAY_CONTEXT  _dc;
    RECT             _rect;

protected:
    virtual INT QueryStrLen (NLS_STR nlsStr);
    virtual INT QueryStrLen (const TCHAR * lpStr, INT nIstr);
    virtual INT QueryLimit ();
    virtual INT QueryMaxCharWidth();

public:
    WIN_ELLIPSIS( WINDOW * pwin, ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE);

    WIN_ELLIPSIS( WINDOW * pwin, HDC hdc, const RECT * prect, ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE);

    VOID    SetSize (INT dxWidth, INT dyHeight);
};

/*********************************************************************

    NAME:       SLT_ELLIPSIS

    SYNOPSIS:   The ellipsis class for SLT

    INTERFACE:
            SLT_ELLIPSIS()        - constructor
            ~SLT_ELLIPSIS()       - destructor
            SetText()
            ClearText()
            ResetStyle()
            SetSize()

    PARENT:     WIN_ELLIPSIS, SLT

    USES:       NLS_STR

    NOTES:

    HISTORY:
           Congpa You (congpay) 01-April-1993 Created.

*********************************************************************/

DLL_CLASS SLT_ELLIPSIS : public SLT, public WIN_ELLIPSIS
{
DECLARE_MI_NEWBASE (SLT_ELLIPSIS);

protected:
    APIERR ConvertAndSetStr();

public:
    SLT_ELLIPSIS( OWNER_WINDOW * pownd, CID cid, ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE);
    SLT_ELLIPSIS( OWNER_WINDOW * pownd, CID cid,
                  XYPOINT xy, XYDIMENSION dxy,
                  ULONG flStyle, const TCHAR * pszClassName = CW_CLASS_STATIC,
                  ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE);

    APIERR  QueryText( TCHAR * pszBuffer, UINT cbBufSize ) const;
    APIERR  QueryText( NLS_STR * pnls ) const;
    APIERR  SetText (const TCHAR * psz);
    APIERR  SetText (const NLS_STR & nls);
    VOID    ClearText();

    VOID    ResetStyle( const ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE );
    VOID    SetSize (INT dxWidth, INT dyHeight, BOOL fRepaint = TRUE);
};

/*********************************************************************

    NAME:       STR_DTE_ELLIPSIS

    SYNOPSIS:   The ellipsis class for STR_DTE

    INTERFACE:
            STR_DTE_ELLIPSIS()        - constructor
            ~STR_DTE_ELLIPSIS()       - destructor
            Paint()

    PARENT:     STR_DTE

    USES:       NLS_STR

    NOTES:

    HISTORY:
           Congpa You (congpay) 01-April-1993 Created.

*********************************************************************/

DLL_CLASS STR_DTE_ELLIPSIS : public STR_DTE
{
private:
    LISTBOX * _plb;
    ELLIPSIS_STYLE _nStyle;

public:
    STR_DTE_ELLIPSIS( const TCHAR * pch,  LISTBOX * plb, ELLIPSIS_STYLE nStyle = ELLIPSIS_NONE);

    virtual VOID Paint (HDC hdc, const RECT * prect) const;
};

#endif // _ELLIPSIS_HXX_ - end of file