| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef _CRSTATE_HXX |
| #define _CRSTATE_HXX |
| |
| #include <com/sun/star/text/HoriOrientation.hpp> |
| #include <tools/gen.hxx> |
| #include <swtypes.hxx> |
| #include <swrect.hxx> |
| |
| |
| enum SwFillMode |
| { |
| FILL_TAB, // default, Auffuellen mit Tabulatoren |
| FILL_SPACE, // ... mit Tabulatoren und Spaces |
| FILL_MARGIN, // nur links, zentriert, rechts Ausrichten |
| FILL_INDENT // durch linken Absatzeinzug |
| }; |
| |
| struct SwFillCrsrPos |
| { |
| SwRect aCrsr; // Position und Groesse des Shadowcursors |
| sal_uInt16 nParaCnt; // Anzahl der einzufuegenden Absaetze |
| sal_uInt16 nTabCnt; // Anzahl der Tabs bzw. Groesse des Einzugs |
| sal_uInt16 nSpaceCnt; // Anzahl der einzufuegenden Leerzeichen |
| sal_uInt16 nColumnCnt; // Anzahl der notwendigen Spaltenumbrueche |
| sal_Int16 eOrient; // Absatzausrichtung |
| SwFillMode eMode; // Gewuenschte Auffuellregel |
| SwFillCrsrPos( SwFillMode eMd = FILL_TAB ) : |
| nParaCnt( 0 ), nTabCnt( 0 ), nSpaceCnt( 0 ), nColumnCnt( 0 ), |
| eOrient( com::sun::star::text::HoriOrientation::NONE ), eMode( eMd ) |
| {} |
| }; |
| |
| // Multiportion types: two lines, bidirectional, 270 degrees rotation, |
| // ruby portion and 90 degrees rotation |
| #define MT_TWOLINE 0 |
| #define MT_BIDI 1 |
| #define MT_ROT_270 3 |
| #define MT_RUBY 4 |
| #define MT_ROT_90 7 |
| |
| struct Sw2LinesPos |
| { |
| SwRect aLine; // Position and size of the line |
| SwRect aPortion; // Position and size of the multi portion |
| SwRect aPortion2; // needed for nested multi portions |
| sal_uInt8 nMultiType; // Multiportion type |
| }; |
| |
| /** |
| * SwSpecialPos. This structure is used to pass some additional information |
| * during the call of SwTxtFrm::GetCharRect(). An SwSpecialPos defines a position |
| * inside a portion which does not have a representation in the core string or |
| * which is only represented by one position, e.g., field portions, |
| * number portions, ergo sum and quo vadis portions. |
| * |
| * nCharOfst - The offset inside the special portion. Fields and its |
| * follow fields are treated as one long special portion. |
| * nLineOfst - The number of lines between the beginning of the special |
| * portion and nCharOfst. A line offset required to be |
| * nCharOfst relative to the beginning of the line. |
| * nExtendRange - Setting this identifies portions which are in front or |
| * behind the core string (number portion, quo vadis) |
| * |
| * Examples 1) |
| * |
| * Get the position of the second character inside a number portion: |
| * nCharOfst = 2; nLineOfst = 0; nExtendRange = SP_EXTEND_RANGE_BEFORE; |
| * Call SwTxtFrm:::GetCharRect with core string position 0. |
| * |
| * Example 2) |
| * |
| * Field A - Length = 5 |
| * Follow field B - Length = 9 |
| * Get the position of the third character in follow field B, core position |
| * of field A is 33. |
| * nCharOfst = 7; nLineOfst = 0; nExtendRange = SP_EXTEND_RANGE_NONE; |
| * Call SwTxtFrm:::GetCharRect with core string position 33. |
| */ |
| |
| #define SP_EXTEND_RANGE_NONE 0 |
| #define SP_EXTEND_RANGE_BEFORE 1 |
| #define SP_EXTEND_RANGE_BEHIND 2 |
| |
| struct SwSpecialPos |
| { |
| xub_StrLen nCharOfst; |
| sal_uInt16 nLineOfst; |
| sal_uInt8 nExtendRange; |
| |
| // #i27615# |
| SwSpecialPos() : nCharOfst(0), nLineOfst(0), |
| nExtendRange(SP_EXTEND_RANGE_NONE) |
| {} |
| }; |
| |
| // CrsrTravelling-Staties (fuer GetCrsrOfst) |
| enum CrsrMoveState |
| { |
| MV_NONE, // default |
| MV_UPDOWN, // Crsr Up/Down |
| MV_RIGHTMARGIN, // an rechten Rand |
| MV_LEFTMARGIN, // an linken Rand |
| MV_SETONLYTEXT, // mit dem Cursr nur im Text bleiben |
| MV_TBLSEL // nicht in wiederholte Headlines |
| }; |
| |
| // struct fuer spaetere Erweiterungen |
| struct SwCrsrMoveState |
| { |
| SwFillCrsrPos *pFill; // fuer das automatische Auffuellen mit Tabs etc. |
| Sw2LinesPos *p2Lines; // for selections inside/around 2line portions |
| SwSpecialPos* pSpecialPos; // for positions inside fields |
| Point aRealHeight; // enthaelt dann die Position/Hoehe des Cursors |
| CrsrMoveState eState; |
| sal_uInt8 nCursorBidiLevel; |
| sal_Bool bStop :1; |
| sal_Bool bRealHeight :1; // Soll die reale Hoehe berechnet werden? |
| sal_Bool bFieldInfo :1; // Sollen Felder erkannt werden? |
| sal_Bool bPosCorr :1; // Point musste korrigiert werden |
| sal_Bool bFtnNoInfo :1; // Fussnotennumerierung erkannt |
| sal_Bool bExactOnly :1; // GetCrsrOfst nur nach Exakten Treffern |
| // suchen lassen, sprich niemals in das |
| // GetCntntPos laufen. |
| sal_Bool bFillRet :1; // wird nur im FillModus temp. genutzt |
| sal_Bool bSetInReadOnly :1; // ReadOnlyBereiche duerfen betreten werden |
| sal_Bool bRealWidth :1; // Calculation of the width required |
| sal_Bool b2Lines :1; // Check 2line portions and fill p2Lines |
| sal_Bool bNoScroll :1; // No scrolling of undersized textframes |
| sal_Bool bPosMatchesBounds :1; // GetCrsrOfst should not return the next |
| // position if screen position is inside second |
| // have of bound rect |
| |
| sal_Bool bCntntCheck :1; // --> FME 2005-05-13 #i43742# Cursor position over content? <-- |
| |
| // #i27615# |
| /** |
| cursor in front of label |
| */ |
| sal_Bool bInFrontOfLabel :1; |
| sal_Bool bInNumPortion :1; // point is in number portion #i23726# |
| int nInNumPostionOffset; // distance from number portion's start |
| |
| SwCrsrMoveState( CrsrMoveState eSt = MV_NONE ) : |
| pFill( NULL ), |
| p2Lines( NULL ), |
| pSpecialPos( NULL ), |
| eState( eSt ), |
| nCursorBidiLevel( 0 ), |
| bStop( sal_False ), |
| bRealHeight( sal_False ), |
| bFieldInfo( sal_False ), |
| bPosCorr( sal_False ), |
| bFtnNoInfo( sal_False ), |
| bExactOnly( sal_False ), |
| bSetInReadOnly( sal_False ), |
| bRealWidth( sal_False ), |
| b2Lines( sal_False ), |
| bNoScroll( sal_False ), |
| bPosMatchesBounds( sal_False ), |
| bCntntCheck( sal_False ), // --> FME 2005-05-13 #i43742# <-- |
| bInFrontOfLabel( sal_False ), // #i27615# |
| bInNumPortion(sal_False), // #i26726# |
| nInNumPostionOffset(0) // #i26726# |
| {} |
| SwCrsrMoveState( SwFillCrsrPos *pInitFill ) : |
| pFill( pInitFill ), |
| pSpecialPos( NULL ), |
| eState( MV_SETONLYTEXT ), |
| nCursorBidiLevel( 0 ), |
| bStop( sal_False ), |
| bRealHeight( sal_False ), |
| bFieldInfo( sal_False ), |
| bPosCorr( sal_False ), |
| bFtnNoInfo( sal_False ), |
| bExactOnly( sal_False ), |
| bSetInReadOnly( sal_False ), |
| bRealWidth( sal_False ), |
| b2Lines( sal_False ), |
| bNoScroll( sal_False ), |
| bPosMatchesBounds( sal_False ), |
| bCntntCheck( sal_False ), // --> FME 2005-05-13 #i43742# <-- |
| bInFrontOfLabel( sal_False ), // #i27615# |
| bInNumPortion(sal_False), // #i23726# |
| nInNumPostionOffset(0) // #i23726# |
| {} |
| }; |
| |
| |
| #endif |
| |
| |