/***************************************************************************\
*
* Module Name: PMMLE.H
*
* OS/2 Presentation Manager MultiLine Edit Control - Version 1.0
*
* Copyright (c) International Business Machines Corporation 1989, 1990
*
\***************************************************************************/

/***************************************************************************\
* MLE Class and dialog code
\***************************************************************************/
/* in pmwin.h */

/***************************************************************************\
* MLE Window styles ( in addition to WS_* )
\***************************************************************************/
#define MLS_WORDWRAP               0x00000001L
#define MLS_BORDER                 0x00000002L
#define MLS_VSCROLL                0x00000004L
#define MLS_HSCROLL                0x00000008L
#define MLS_READONLY               0x00000010L
#define MLS_IGNORETAB              0x00000020L

/***************************************************************************\
* MLE External Data Types
\***************************************************************************/
typedef LONG    IPT;        /* insertion point                             */
typedef PLONG   PIPT;       /* insertion point                             */
typedef LONG    PIX;        /* pixel                                       */
typedef ULONG   LINE;       /* Line number                                 */

typedef struct _FORMATRECT { /* MLEFRD format rectangle data               */
    LONG cxFormat;           /* format rectangle width                     */
    LONG cyFormat;           /* format rectangle height                    */
} MLEFORMATRECT;
typedef MLEFORMATRECT FAR *PFORMATRECT;

typedef struct _MLECTLDATA { /* MLECTL control data                        */
   USHORT   cbCtlData;      /* Length of the MLECTLDATA structure          */
   USHORT   afIEFormat;     /* import/export format                        */
   ULONG    cchText;        /* text limit                                  */
   IPT      iptAnchor;      /* beginning of selection                      */
   IPT      iptCursor;      /* ending of selection                         */
   LONG     cxFormat;       /* format rectangle width                      */
   LONG     cyFormat;       /* format rectangle height                     */
   ULONG    afFormatFlags;  /* formatting rectangle flags - see mask below */
} MLECTLDATA;
typedef MLECTLDATA FAR *PMLECTLDATA;

/***************************************************************************\
* afFormatFlags mask
\***************************************************************************/
#define MLFFMTRECT_LIMITHORZ       0x00000001L
#define MLFFMTRECT_LIMITVERT       0x00000002L
#define MLFFMTRECT_MATCHWINDOW     0x00000004L
#define MLFFMTRECT_FORMATRECT      0x00000007L
/***************************************************************************\
* afIEFormat - Import/Export Format flags
\***************************************************************************/
#define MLFIE_CFTEXT               0
#define MLFIE_NOTRANS              1
#define MLFIE_WINFMT               2
#define MLFIE_RTF                  3

/***************************************************************************\
* MLN_OVERFLOW structure
\***************************************************************************/
typedef struct _MLEOVERFLOW { /* overflow structure                        */
   ULONG afErrInd;            /* see mask below                            */
   LONG nBytesOver;           /* number of bytes overflowed                */
   LONG pixHorzOver;          /* number of pixels horizontally overflowed  */
   LONG pixVertOver;          /* number of pixels vertically overflowed    */
}  MLEOVERFLOW;
typedef MLEOVERFLOW FAR *POVERFLOW;

/***************************************************************************\
* afErrInd - error format rectangle flags
\***************************************************************************/
#define MLFEFR_RESIZE              0x00000001L
#define MLFEFR_TABSTOP             0x00000002L
#define MLFEFR_FONT                0x00000004L
#define MLFEFR_TEXT                0x00000008L
#define MLFEFR_WORDWRAP            0x00000010L
#define MLFETL_TEXTBYTES           0x00000020L

/***************************************************************************\
* MLN_MARGIN structure
\***************************************************************************/
typedef struct _MLEMARGSTRUCT { /* margin structure                        */
   USHORT afMargins;          /* margin indicator                          */
   USHORT usMouMsg;           /* mouse message                             */
   IPT    iptNear;            /* the geometrically nearest insertion point */
} MLEMARGSTRUCT;
typedef MLEMARGSTRUCT FAR *PMARGSTRUCT;

/***************************************************************************\
* afFlags - margin notification indicators
\***************************************************************************/
#define MLFMARGIN_LEFT             0x0001
#define MLFMARGIN_BOTTOM           0x0002
#define MLFMARGIN_RIGHT            0x0003
#define MLFMARGIN_TOP              0x0004

/***************************************************************************\
* MLM_QUERYSELECTION flags
\***************************************************************************/
#define MLFQS_MINMAXSEL            0
#define MLFQS_MINSEL               1
#define MLFQS_MAXSEL               2
#define MLFQS_ANCHORSEL            3
#define MLFQS_CURSORSEL            4

/***************************************************************************\
* MLN_CLPBDFAIL flags
\***************************************************************************/
#define MLFCLPBD_TOOMUCHTEXT       0x00000001L
#define MLFCLPBD_ERROR             0x00000002L

/***************************************************************************\
* MLM_SEARCH structure
\***************************************************************************/
typedef struct _SEARCH { /* search structure                               */
   USHORT cb;            /* size of search spec structure                  */
   PCHAR  pchFind;       /* string to search for                           */
   PCHAR  pchReplace;    /* string to replace with                         */
   SHORT  cchFind;       /* length of pchFindString                        */
   SHORT  cchReplace;    /* length of replace string                       */
   IPT    iptStart;      /* point at which to start search                 */
                         /* (negative indicates cursor pt)                 */
                         /* becomes pt where string found                  */
   IPT    iptStop;       /* point at which to stop search                  */
                         /* (negative indicates EOT)                       */
   USHORT cchFound;      /* Length of found string at iptStart             */
} MLE_SEARCHDATA;
typedef MLE_SEARCHDATA FAR *PMLE_SEARCHDATA;

/***************************************************************************\
* MLM_SEARCH style flags
\***************************************************************************/
#define MLFSEARCH_CASESENSITIVE    0x00000001L
#define MLFSEARCH_SELECTMATCH      0x00000002L
#define MLFSEARCH_CHANGEALL        0x00000004L

/***************************************************************************\
* MLE messages - MLM from 0x01b0 to 0x01de; MLN from 0x0001 to 0x000f
\***************************************************************************/
/* formatting messages */
#define MLM_SETTEXTLIMIT           0x01b0
#define MLM_QUERYTEXTLIMIT         0x01b1
#define MLM_SETFORMATRECT          0x01b2
#define MLM_QUERYFORMATRECT        0x01b3
#define MLM_SETWRAP                0x01b4
#define MLM_QUERYWRAP              0x01b5
#define MLM_SETTABSTOP             0x01b6
#define MLM_QUERYTABSTOP           0x01b7
#define MLM_SETREADONLY            0x01b8
#define MLM_QUERYREADONLY          0x01b9

/* text content manipulation and queries messages */
#define MLM_QUERYCHANGED           0x01ba
#define MLM_SETCHANGED             0x01bb
#define MLM_QUERYLINECOUNT         0x01bc
#define MLM_CHARFROMLINE           0x01bd
#define MLM_LINEFROMCHAR           0x01be
#define MLM_QUERYLINELENGTH        0x01bf
#define MLM_QUERYTEXTLENGTH        0x01c0

/* text import and export messages */
#define MLM_FORMAT                 0x01c1
#define MLM_SETIMPORTEXPORT        0x01c2
#define MLM_IMPORT                 0x01c3
#define MLM_EXPORT                 0x01c4
#define MLM_DELETE                 0x01c6
#define MLM_QUERYFORMATLINELENGTH  0x01c7
#define MLM_QUERYFORMATTEXTLENGTH  0x01c8
#define MLM_INSERT                 0x01c9

/* selection messages */
#define MLM_SETSEL                 0x01ca
#define MLM_QUERYSEL               0x01cb
#define MLM_QUERYSELTEXT           0x01cc

/* undo and redo messages */
#define MLM_QUERYUNDO              0x01cd
#define MLM_UNDO                   0x01ce
#define MLM_RESETUNDO              0x01cf

/* text attributes messages */
#define MLM_QUERYFONT              0x01d0
#define MLM_SETFONT                0x01d1
#define MLM_SETTEXTCOLOR           0x01d2
#define MLM_QUERYTEXTCOLOR         0x01d3
#define MLM_SETBACKCOLOR           0x01d4
#define MLM_QUERYBACKCOLOR         0x01d5

/* scrolling messages */
#define MLM_QUERYFIRSTCHAR         0x01d6
#define MLM_SETFIRSTCHAR           0x01d7

/* clipboard messages */
#define MLM_CUT                    0x01d8
#define MLM_COPY                   0x01d9
#define MLM_PASTE                  0x01da
#define MLM_CLEAR                  0x01db

/* display manipulation messages */
#define MLM_ENABLEREFRESH          0x01dc
#define MLM_DISABLEREFRESH         0x01dd

/* search message */
#define MLM_SEARCH                 0x01de
#define MLM_QUERYIMPORTEXPORT      0x01df

/* notification messages */
#define MLN_OVERFLOW               0x0001
#define MLN_PIXHORZOVERFLOW        0x0002
#define MLN_PIXVERTOVERFLOW        0x0003
#define MLN_TEXTOVERFLOW           0x0004
#define MLN_VSCROLL                0x0005
#define MLN_HSCROLL                0x0006
#define MLN_CHANGE                 0x0007
#define MLN_SETFOCUS               0x0008
#define MLN_KILLFOCUS              0x0009
#define MLN_MARGIN                 0x000a
#define MLN_SEARCHPAUSE            0x000b
#define MLN_MEMERROR               0x000c
#define MLN_UNDOOVERFLOW           0x000d
#define MLN_CLPBDFAIL              0x000f
