TextP.h revision 749
299N/A/*
299N/A* $XConsortium: TextP.h,v 1.54 95/06/14 15:07:27 kaleb Exp $
299N/A*/
299N/A
911N/A
851N/A/***********************************************************
299N/A
299N/ACopyright (c) 1987, 1988, 1994 X Consortium
299N/A
299N/APermission is hereby granted, free of charge, to any person obtaining a copy
299N/Aof this software and associated documentation files (the "Software"), to deal
299N/Ain the Software without restriction, including without limitation the rights
299N/Ato use, copy, modify, merge, publish, distribute, sublicense, and/or sell
299N/Acopies of the Software, and to permit persons to whom the Software is
299N/Afurnished to do so, subject to the following conditions:
299N/A
299N/AThe above copyright notice and this permission notice shall be included in
299N/Aall copies or substantial portions of the Software.
299N/A
299N/ATHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
299N/AIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
299N/AFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
299N/AX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
299N/AAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
299N/ACONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
299N/A
299N/AExcept as contained in this notice, the name of the X Consortium shall not be
299N/Aused in advertising or otherwise to promote the sale, use or other dealings
299N/Ain this Software without prior written authorization from the X Consortium.
299N/A
299N/A
299N/ACopyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts.
299N/A
299N/A All Rights Reserved
299N/A
493N/APermission to use, copy, modify, and distribute this software and its
299N/Adocumentation for any purpose and without fee is hereby granted,
299N/Aprovided that the above copyright notice appear in all copies and that
851N/Aboth that copyright notice and this permission notice appear in
299N/Asupporting documentation, and that the name of Digital not be
911N/Aused in advertising or publicity pertaining to distribution of the
911N/Asoftware without specific, written prior permission.
911N/A
911N/ADIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
299N/AALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
851N/ADIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
299N/AANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
299N/AWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
299N/AARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
493N/ASOFTWARE.
493N/A
299N/A******************************************************************/
300N/A
493N/A#ifndef _XawTextP_h
300N/A#define _XawTextP_h
493N/A
375N/A#include <X11/Xaw/Text.h>
299N/A#include <X11/Xaw/SimpleP.h>
/****************************************************************
*
* Text widget private
*
****************************************************************/
#define MAXCUT 30000 /* Maximum number of characters that can be cut. */
#define GETLASTPOS XawTextSourceScan(ctx->text.source, 0, \
XawstAll, XawsdRight, 1, TRUE)
#define zeroPosition ((XawTextPosition) 0)
extern XtActionsRec _XawTextActionsTable[];
extern Cardinal _XawTextActionsTableCount;
#define XawLF 0x0a
#define XawCR 0x0d
#define XawTAB 0x09
#define XawBS 0x08
#define XawSP 0x20
#define XawDEL 0x7f
#define XawESC 0x1b
#define XawBSLASH '\\'
/* constants that subclasses may want to know */
#define DEFAULT_TEXT_HEIGHT ((Dimension)~0)
/* displayable text management data structures */
typedef struct {
XawTextPosition position;
Position y;
Dimension textWidth;
} XawTextLineTableEntry, *XawTextLineTableEntryPtr;
typedef struct {
XawTextPosition left, right;
XawTextSelectType type;
Atom* selections;
int atom_count;
int array_size;
} XawTextSelection;
typedef struct _XawTextSelectionSalt {
struct _XawTextSelectionSalt *next;
XawTextSelection s;
/*
* The element "contents" stores the CT string which is gotten in the
* function _XawTextSaltAwaySelection().
*/
char *contents;
int length;
} XawTextSelectionSalt;
/* Line Tables are n+1 long - last position displayed is in last lt entry */
typedef struct {
XawTextPosition top; /* Top of the displayed text. */
int lines; /* How many lines in this table. */
XawTextLineTableEntry *info; /* A dynamic array, one entry per line */
} XawTextLineTable, *XawTextLineTablePtr;
typedef struct _XawTextMargin {
Position left, right, top, bottom;
} XawTextMargin;
#define VMargins(ctx) ( (ctx)->text.margin.top + (ctx)->text.margin.bottom )
#define HMargins(ctx) ( (ctx)->text.margin.left + (ctx)->text.margin.right )
#define IsPositionVisible(ctx, pos) \
(pos >= ctx->text.lt.info[0].position && \
pos < ctx->text.lt.info[ctx->text.lt.lines].position)
/*
* Search & Replace data structure.
*/
struct SearchAndReplace {
Boolean selection_changed; /* flag so that the selection cannot be
changed out from underneath query-replace.*/
Widget search_popup; /* The poppup widget that allows searches.*/
Widget label1; /* The label widgets for the search window. */
Widget label2;
Widget left_toggle; /* The left search toggle radioGroup. */
Widget right_toggle; /* The right search toggle radioGroup. */
Widget rep_label; /* The Replace label string. */
Widget rep_text; /* The Replace text field. */
Widget search_text; /* The Search text field. */
Widget rep_one; /* The Replace one button. */
Widget rep_all; /* The Replace all button. */
};
/* Private Text Definitions */
typedef int (*ActionProc)();
/* New fields for the Text widget class record */
typedef struct {int empty;} TextClassPart;
struct text_move {
int h, v;
struct text_move * next;
};
/* Full class record declaration */
typedef struct _TextClassRec {
CoreClassPart core_class;
SimpleClassPart simple_class;
TextClassPart text_class;
} TextClassRec;
extern TextClassRec textClassRec;
/* New fields for the Text widget record */
typedef struct _TextPart {
/* resources */
Widget source, sink;
XawTextPosition insertPos;
XawTextSelection s;
XawTextSelectType *sarray; /* Array to cycle for selections. */
XawTextSelectionSalt *salt; /* salted away selections */
int options; /* wordbreak, scroll, etc. */
int dialog_horiz_offset; /* position for popup dialog */
int dialog_vert_offset; /* position for popup dialog */
Boolean display_caret; /* insertion pt visible iff T */
Boolean auto_fill; /* Auto fill mode? */
XawTextScrollMode scroll_vert, scroll_horiz; /*what type of scrollbars.*/
XawTextWrapMode wrap; /* The type of wrapping. */
XawTextResizeMode resize; /* what to resize */
XawTextMargin r_margin; /* The real margins. */
XtCallbackList unrealize_callbacks; /* used for scrollbars */
/* private state */
XawTextMargin margin; /* The current margins. */
XawTextLineTable lt;
XawTextScanDirection extendDir;
XawTextSelection origSel; /* the selection being modified */
Time lasttime; /* timestamp of last processed action */
Time time; /* time of last key or button action */
Position ev_x, ev_y; /* x, y coords for key or button action */
Widget vbar, hbar; /* The scroll bars (none = NULL). */
struct SearchAndReplace * search;/* Search and replace structure. */
Widget file_insert; /* The file insert popup widget. */
XawTextPosition *updateFrom; /* Array of start positions for update. */
XawTextPosition *updateTo; /* Array of end positions for update. */
int numranges; /* How many update ranges there are. */
int maxranges; /* How many ranges we have space for */
XawTextPosition lastPos; /* Last position of source. */
GC gc;
Boolean showposition; /* True if we need to show the position. */
Boolean hasfocus; /* TRUE if we currently have input focus.*/
Boolean update_disabled; /* TRUE if display updating turned off */
Boolean single_char; /* Single character replaced. */
XawTextPosition old_insert; /* Last insertPos for batched updates */
short mult; /* Multiplier. */
struct text_move * copy_area_offsets; /* Text offset area (linked list) */
/* private state, shared w/Source and Sink */
Boolean redisplay_needed; /* in SetValues */
XawTextSelectionSalt *salt2; /* salted away selections */
} TextPart;
/*************************************************************
*
* Resource types private to Text widget.
*
*************************************************************/
#define XtRScrollMode "ScrollMode"
#define XtRWrapMode "WrapMode"
#define XtRResizeMode "ResizeMode"
/****************************************************************
*
* Full instance record declaration
*
****************************************************************/
typedef struct _TextRec {
CorePart core;
SimplePart simple;
TextPart text;
} TextRec;
/********************************************
*
* Semi-private functions
* for use by other Xaw modules only
*
*******************************************/
extern void _XawTextBuildLineTable (
#if NeedFunctionPrototypes
TextWidget /*ctx*/,
XawTextPosition /*top pos*/,
_XtBoolean /* force_rebuild */
#endif
);
extern char* _XawTextGetSTRING(
#if NeedFunctionPrototypes
TextWidget /*ctx*/,
XawTextPosition /*left*/,
XawTextPosition /*right*/
#endif
);
extern void _XawTextSaltAwaySelection(
#if NeedFunctionPrototypes
TextWidget /*ctx*/,
Atom* /*selections*/,
int /*num_atoms*/
#endif
);
extern void _XawTextPosToXY(
#if NeedFunctionPrototypes
Widget /* w */,
XawTextPosition /* pos */,
Position * /* x */,
Position * /*y */
#endif
);
#endif /* _XawTextP_h */