| /************************************************************** |
| * |
| * 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 _TEXTDAT2_HXX |
| #define _TEXTDAT2_HXX |
| |
| #include <svl/svarray.hxx> |
| #include <tools/list.hxx> |
| #include <vcl/seleng.hxx> |
| #include <vcl/virdev.hxx> |
| #include <vcl/cursor.hxx> |
| |
| class TextNode; |
| class TextView; |
| |
| #define PORTIONKIND_TEXT 0 |
| #define PORTIONKIND_TAB 1 |
| |
| #define DELMODE_SIMPLE 0 |
| #define DELMODE_RESTOFWORD 1 |
| #define DELMODE_RESTOFCONTENT 2 |
| |
| #define DEL_LEFT 1 |
| #define DEL_RIGHT 2 |
| #define TRAVEL_X_DONTKNOW 0xFFFF |
| #define MAXCHARSINPARA 0x3FFF-CHARPOSGROW |
| |
| #define LINE_SEP 0x0A |
| |
| |
| class TETextPortion |
| { |
| private: |
| sal_uInt16 nLen; |
| long nWidth; |
| sal_uInt8 nKind; |
| sal_uInt8 nRightToLeft; |
| |
| TETextPortion() { nLen = 0; nKind = PORTIONKIND_TEXT; nWidth = -1; nRightToLeft = 0;} |
| |
| public: |
| TETextPortion( sal_uInt16 nL ) { |
| nLen = nL; |
| nKind = PORTIONKIND_TEXT; |
| nWidth= -1; |
| nRightToLeft = 0; |
| } |
| |
| sal_uInt16 GetLen() const { return nLen; } |
| sal_uInt16& GetLen() { return nLen; } |
| |
| long GetWidth()const { return nWidth; } |
| long& GetWidth() { return nWidth; } |
| |
| sal_uInt8 GetKind() const { return nKind; } |
| sal_uInt8& GetKind() { return nKind; } |
| |
| sal_uInt8 GetRightToLeft() const { return nRightToLeft; } |
| sal_uInt8& GetRightToLeft() { return nRightToLeft; } |
| sal_Bool IsRightToLeft() const { return (nRightToLeft&1); } |
| |
| sal_Bool HasValidSize() const { return nWidth != (-1); } |
| }; |
| |
| |
| |
| typedef TETextPortion* TextPortionPtr; |
| SV_DECL_PTRARR( TextPortionArray, TextPortionPtr, 0, 8 ) |
| |
| class TETextPortionList : public TextPortionArray |
| { |
| public: |
| TETextPortionList(); |
| ~TETextPortionList(); |
| |
| void Reset(); |
| sal_uInt16 FindPortion( sal_uInt16 nCharPos, sal_uInt16& rPortionStart, sal_Bool bPreferStartingPortion = sal_False ); |
| sal_uInt16 GetPortionStartIndex( sal_uInt16 nPortion ); |
| void DeleteFromPortion( sal_uInt16 nDelFrom ); |
| }; |
| |
| struct TEWritingDirectionInfo |
| { |
| sal_uInt8 nType; |
| sal_uInt16 nStartPos; |
| sal_uInt16 nEndPos; |
| TEWritingDirectionInfo( sal_uInt8 _Type, sal_uInt16 _Start, sal_uInt16 _End ) |
| { |
| nType = _Type; |
| nStartPos = _Start; |
| nEndPos = _End; |
| } |
| }; |
| |
| SV_DECL_VARARR( TEWritingDirectionInfos, TEWritingDirectionInfo, 0, 4 ) |
| |
| class TextLine |
| { |
| private: |
| sal_uInt16 mnStart; |
| sal_uInt16 mnEnd; |
| sal_uInt16 mnStartPortion; |
| sal_uInt16 mnEndPortion; |
| |
| short mnStartX; |
| |
| sal_Bool mbInvalid; // fuer geschickte Formatierung/Ausgabe |
| |
| public: |
| TextLine() { |
| mnStart = mnEnd = 0; |
| mnStartPortion = mnEndPortion = 0; |
| mnStartX = 0; |
| mbInvalid = sal_True; |
| } |
| |
| sal_Bool IsIn( sal_uInt16 nIndex ) const |
| { return ( (nIndex >= mnStart ) && ( nIndex < mnEnd ) ); } |
| |
| sal_Bool IsIn( sal_uInt16 nIndex, sal_Bool bInclEnd ) const |
| { return ( ( nIndex >= mnStart ) && ( bInclEnd ? ( nIndex <= mnEnd ) : ( nIndex < mnEnd ) ) ); } |
| |
| void SetStart( sal_uInt16 n ) { mnStart = n; } |
| sal_uInt16 GetStart() const { return mnStart; } |
| sal_uInt16& GetStart() { return mnStart; } |
| |
| void SetEnd( sal_uInt16 n ) { mnEnd = n; } |
| sal_uInt16 GetEnd() const { return mnEnd; } |
| sal_uInt16& GetEnd() { return mnEnd; } |
| |
| void SetStartPortion( sal_uInt16 n ) { mnStartPortion = n; } |
| sal_uInt16 GetStartPortion() const { return mnStartPortion; } |
| sal_uInt16& GetStartPortion() { return mnStartPortion; } |
| |
| void SetEndPortion( sal_uInt16 n ) { mnEndPortion = n; } |
| sal_uInt16 GetEndPortion() const { return mnEndPortion; } |
| sal_uInt16& GetEndPortion() { return mnEndPortion; } |
| |
| sal_uInt16 GetLen() const { return mnEnd - mnStart; } |
| |
| sal_Bool IsInvalid() const { return mbInvalid; } |
| sal_Bool IsValid() const { return !mbInvalid; } |
| void SetInvalid() { mbInvalid = sal_True; } |
| void SetValid() { mbInvalid = sal_False; } |
| |
| sal_Bool IsEmpty() const { return (mnEnd > mnStart) ? sal_False : sal_True; } |
| |
| short GetStartX() const { return mnStartX; } |
| void SetStartX( short n ) { mnStartX = n; } |
| |
| inline sal_Bool operator == ( const TextLine& rLine ) const; |
| inline sal_Bool operator != ( const TextLine& rLine ) const; |
| }; |
| |
| typedef TextLine* TextLinePtr; |
| SV_DECL_PTRARR_DEL( TextLines, TextLinePtr, 1, 4 ) |
| |
| inline sal_Bool TextLine::operator == ( const TextLine& rLine ) const |
| { |
| return ( ( mnStart == rLine.mnStart ) && |
| ( mnEnd == rLine.mnEnd ) && |
| ( mnStartPortion == rLine.mnStartPortion ) && |
| ( mnEndPortion == rLine.mnEndPortion ) ); |
| } |
| |
| inline sal_Bool TextLine::operator != ( const TextLine& rLine ) const |
| { |
| return !( *this == rLine ); |
| } |
| |
| |
| |
| class TEParaPortion |
| { |
| private: |
| TextNode* mpNode; |
| |
| TextLines maLines; |
| TETextPortionList maTextPortions; |
| TEWritingDirectionInfos maWritingDirectionInfos; |
| |
| |
| sal_uInt16 mnInvalidPosStart; |
| short mnInvalidDiff; |
| |
| sal_Bool mbInvalid; |
| sal_Bool mbSimple; // nur lineares Tippen |
| |
| |
| TEParaPortion( const TEParaPortion& ) {;} |
| |
| public: |
| TEParaPortion( TextNode* pNode ); |
| ~TEParaPortion(); |
| |
| |
| sal_Bool IsInvalid() const { return mbInvalid; } |
| sal_Bool IsSimpleInvalid() const { return mbSimple; } |
| void SetNotSimpleInvalid() { mbSimple = sal_False; } |
| void SetValid() { mbInvalid = sal_False; mbSimple = sal_True;} |
| |
| void MarkInvalid( sal_uInt16 nStart, short nDiff); |
| void MarkSelectionInvalid( sal_uInt16 nStart, sal_uInt16 nEnd ); |
| |
| sal_uInt16 GetInvalidPosStart() const { return mnInvalidPosStart; } |
| short GetInvalidDiff() const { return mnInvalidDiff; } |
| |
| TextNode* GetNode() const { return mpNode; } |
| TextLines& GetLines() { return maLines; } |
| TETextPortionList& GetTextPortions() { return maTextPortions; } |
| TEWritingDirectionInfos& GetWritingDirectionInfos() { return maWritingDirectionInfos; } |
| |
| |
| sal_uInt16 GetLineNumber( sal_uInt16 nIndex, sal_Bool bInclEnd ); |
| void CorrectValuesBehindLastFormattedLine( sal_uInt16 nLastFormattedLine ); |
| }; |
| |
| |
| class TEParaPortions : public ToolsList<TEParaPortion*> |
| { |
| public: |
| TEParaPortions(); |
| ~TEParaPortions(); |
| void Reset(); |
| }; |
| |
| |
| class TextSelFunctionSet: public FunctionSet |
| { |
| private: |
| TextView* mpView; |
| |
| public: |
| TextSelFunctionSet( TextView* pView ); |
| |
| virtual void BeginDrag(); |
| |
| virtual void CreateAnchor(); |
| |
| virtual sal_Bool SetCursorAtPoint( const Point& rPointPixel, sal_Bool bDontSelectAtCursor = sal_False ); |
| |
| virtual sal_Bool IsSelectionAtPoint( const Point& rPointPixel ); |
| virtual void DeselectAll(); |
| |
| virtual void DeselectAtPoint( const Point& ); |
| virtual void DestroyAnchor(); |
| }; |
| |
| |
| class IdleFormatter : public Timer |
| { |
| private: |
| TextView* mpView; |
| sal_uInt16 mnRestarts; |
| |
| public: |
| IdleFormatter(); |
| ~IdleFormatter(); |
| |
| void DoIdleFormat( TextView* pV, sal_uInt16 nMaxRestarts ); |
| void ForceTimeout(); |
| TextView* GetView() { return mpView; } |
| }; |
| |
| struct TextDDInfo |
| { |
| Cursor maCursor; |
| TextPaM maDropPos; |
| |
| sal_Bool mbStarterOfDD; |
| sal_Bool mbVisCursor; |
| |
| TextDDInfo() |
| { |
| maCursor.SetStyle( CURSOR_SHADOW ); |
| mbStarterOfDD = sal_False; |
| mbVisCursor = sal_False; |
| } |
| }; |
| |
| #endif // _TEXTDAT2_HXX |