1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
# ifndef DOC_SELECT_H
# define DOC_SELECT_H
/************************************************************************/
/* */
/* Forward declarations of structs. */
/* */
/************************************************************************/
struct BufferDocument;
struct BufferItem;
struct DocumentField;
/************************************************************************/
/* */
/* Used to layout lines of text. */
/* */
/* A0 paper is 4* 30 cm high: 28.3465* 120* 20= 68031.6 Twips. */
/* So an unsigned short limits us to A1 paper. */
/* */
/************************************************************************/
typedef struct LayoutPosition
{
unsigned short lpPageYTwips;
unsigned short lpPage;
unsigned char lpColumn;
unsigned char lpAtTopOfColumn;
} LayoutPosition;
/************************************************************************/
/* */
/* A position in a document. */
/* */
/* 1) Indication for the kind of root item for the selection. */
/* 2) Geometry is derived from the position, NOT the other way round. */
/* */
/* A) Indication for the kind of root item for the selection. */
/* B) When the selection is not in the body of the document, the */
/* number of the section that the external item belongs to. */
/* D) If the external item is a footnote/endnote: The index in the */
/* array of notes in the section. */
/* */
/* E) The beginning, end and anchor of the selection. The order is in */
/* the reding direction. NOT in the order that the selection was */
/* made. USE EXTREME CARE WHEN YOU REFER TO THE OLD POSITION IN */
/* EDITING CODE. */
/* */
/************************************************************************/
typedef struct DocumentPosition
{
struct BufferItem * dpBi;
int dpParticule;
int dpStroff;
} DocumentPosition;
typedef struct SelectionScope
{
int ssInExternalItem; /* A */
int ssSectNrExternalTo; /* B */
int ssNoteArrayIndex; /* D */
} SelectionScope;
typedef struct DocumentSelection
{
SelectionScope dsSelectionScope;
DocumentPosition dsBegin; /* E */
DocumentPosition dsEnd; /* E */
DocumentPosition dsAnchor; /* E */
int dsCol0;
int dsCol1;
int dsDirection;
} DocumentSelection;
/* 2 */
typedef struct PositionGeometry
{
int pgLine;
int pgXPixels;
LayoutPosition pgTopPosition;
int pgY1Pixels;
int pgBaselinePixels;
} PositionGeometry;
typedef struct SelectionGeometry
{
DocumentRectangle sgRectangle;
PositionGeometry sgBegin; /* E */
PositionGeometry sgEnd; /* E */
PositionGeometry sgAnchor; /* E */
} SelectionGeometry;
typedef struct TableRectangle
{
int trCol0;
int trCol1;
int trCol11;
int trRow00;
int trRow0;
int trRow1;
int trRow11;
} TableRectangle;
# define docPositionsInsideCell(b,e) \
((b)->dpBi->biParent == (e)->dpBi->biParent)
# define docPositionsInsideRow(b,e) \
((b)->dpBi->biParent->biParent == (e)->dpBi->biParent->biParent)
# define docSelectionInsideCell(ds) \
docPositionsInsideCell(&(ds)->dsBegin,&(ds)->dsEnd)
# define docSelectionInsideRow(ds) \
docPositionsInsideRow(&(ds)->dsBegin,&(ds)->dsEnd)
/************************************************************************/
/* */
/* Routine Declarations. */
/* */
/************************************************************************/
extern void docInitDocumentPosition( DocumentPosition * dp );
extern void docInitDocumentSelection( DocumentSelection * ds );
extern void docInitPositionGeometry( PositionGeometry * pg );
extern void docInitSelectionGeometry( SelectionGeometry * sg );
extern void docSetIBarSelection( DocumentSelection * ds,
const DocumentPosition * dp );
extern int docIsIBarSelection( const DocumentSelection * ds );
extern int docIsParaSelection( const DocumentSelection * ds );
extern int docGetObjectSelection( DocumentSelection * ds,
DocumentPosition * dpObject,
InsertedObject ** pIo );
extern void docSetRangeSelection(
DocumentSelection * ds,
const DocumentPosition * dpFrom,
const DocumentPosition * dpTo,
int direction,
int col0,
int col1 );
extern int docBeginOfLine( DocumentPosition * dp );
extern int docEndOfLine( DocumentPosition * dp );
# endif /* DOC_SELECT_H */
|