blob: 2d8f86b4898a482c95a887d0f39a211e624d35a7 [file] [log] [blame]
/**************************************************************
*
* 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 _OUTLINER_HXX
#define _OUTLINER_HXX
#include <tools/gen.hxx>
#include <tools/string.hxx>
#include <tools/debug.hxx>
#include <svl/brdcst.hxx>
#include <editeng/editdata.hxx>
#include <i18npool/lang.h>
#include <tools/color.hxx>
#include <vcl/graph.hxx>
#include <tools/list.hxx>
#include <tools/link.hxx>
#include <rsc/rscsfx.hxx>
#include "editeng/editengdllapi.h"
#include <editeng/numitem.hxx>
#include <svtools/grfmgr.hxx>
#include <tools/rtti.hxx> // wegen typedef TypeId
#include <vector>
class OutlinerEditEng;
class Outliner;
class EditView;
class EditUndo;
class ParagraphList;
class OutlinerParaObject;
class SvStream;
class SvxBulletItem;
class SvxFont;
class SvxSearchItem;
class SvxFieldItem;
class OLUndoRemove;
class Window;
class KeyEvent;
class MouseEvent;
class Pointer;
class CommandEvent;
class MapMode;
class OutputDevice;
class PolyPolygon;
class SfxStyleSheetPool;
class SfxStyleSheet;
class SfxItemPool;
class SfxItemSet;
class SvxNumBulletItem;
class SvxNumberFormat;
class SvxLRSpaceItem;
class EditEngine;
class SvKeyValueIterator;
class SvxForbiddenCharactersTable;
namespace svl
{
class IUndoManager;
}
#include <com/sun/star/uno/Reference.h>
#include <vos/ref.hxx>
#include <editeng/svxfont.hxx>
#include <editeng/eedata.hxx>
#include <editeng/paragraphdata.hxx>
class SvxFieldData;
//////////////////////////////////////////////////////////////////////////////
namespace com { namespace sun { namespace star { namespace linguistic2 {
class XSpellChecker1;
class XHyphenator;
}}}}
namespace svx{
struct SpellPortion;
typedef std::vector<SpellPortion> SpellPortions;
}
namespace basegfx { class B2DPolyPolygon; }
// nur interner Gebrauch!
#define PARAFLAG_DROPTARGET 0x1000
#define PARAFLAG_DROPTARGET_EMPTY 0x2000
#define PARAFLAG_HOLDDEPTH 0x4000
#define PARAFLAG_SETBULLETTEXT 0x8000
#define PARAFLAG_ISPAGE 0x0100
// Undo-Action-Ids
#define OLUNDO_DEPTH EDITUNDO_USER
// #define OLUNDO_HEIGHT EDITUNDO_USER+1
#define OLUNDO_EXPAND EDITUNDO_USER+2
#define OLUNDO_COLLAPSE EDITUNDO_USER+3
// #define OLUNDO_REMOVE EDITUNDO_USER+4
#define OLUNDO_ATTR EDITUNDO_USER+5
#define OLUNDO_INSERT EDITUNDO_USER+6
// #define OLUNDO_MOVEPARAGRAPHS EDITUNDO_USER+7
#define OLUNDO_CHECKPARA EDITUNDO_USER+8
class Paragraph : protected ParagraphData
{
private:
friend class Outliner;
friend class ParagraphList;
friend class OutlinerView;
friend class OutlinerParaObject;
friend class OutlinerEditEng;
friend class OLUndoDepth;
friend class OutlinerUndoCheckPara;
friend class OutlinerUndoChangeParaFlags;
Paragraph& operator=(const Paragraph& rPara );
sal_uInt16 nFlags;
XubString aBulText;
Size aBulSize;
sal_Bool bVisible;
sal_Bool IsVisible() const { return bVisible; }
void SetText( const XubString& rText ) { aBulText = rText; aBulSize.Width() = -1; }
void Invalidate() { aBulSize.Width() = -1; }
void SetDepth( sal_Int16 nNewDepth ) { nDepth = nNewDepth; aBulSize.Width() = -1; }
const XubString& GetText() const { return aBulText; }
Paragraph( sal_Int16 nDepth );
Paragraph( const Paragraph& );
Paragraph( const ParagraphData& );
~Paragraph();
sal_Int16 GetDepth() const { return nDepth; }
sal_Int16 GetNumberingStartValue() const { return mnNumberingStartValue; }
void SetNumberingStartValue( sal_Int16 nNumberingStartValue );
sal_Bool IsParaIsNumberingRestart() const { return mbParaIsNumberingRestart; }
void SetParaIsNumberingRestart( sal_Bool bParaIsNumberingRestart );
void SetFlag( sal_uInt16 nFlag ) { nFlags |= nFlag; }
void RemoveFlag( sal_uInt16 nFlag ) { nFlags &= ~nFlag; }
bool HasFlag( sal_uInt16 nFlag ) const { return (nFlags & nFlag) != 0; }
};
struct ParaRange
{
sal_uInt16 nStartPara;
sal_uInt16 nEndPara;
ParaRange( sal_uInt16 nS, sal_uInt16 nE ) { nStartPara = nS, nEndPara = nE; }
void Adjust();
sal_uInt16 Len() const { return 1 + ( ( nEndPara > nStartPara ) ? (nEndPara-nStartPara) : (nStartPara-nEndPara) ); }
};
inline void ParaRange::Adjust()
{
if ( nStartPara > nEndPara )
{
sal_uInt16 nTmp = nStartPara;
nStartPara = nEndPara;
nEndPara = nTmp;
}
}
#define OL_ROOTPARENT (Paragraph*)NULL
class EDITENG_DLLPUBLIC OutlinerView
{
friend class Outliner;
private:
Outliner* pOwner;
EditView* pEditView;
// Drag & Drop
sal_Bool bBeginDragAtMove_OLDMEMBER;
sal_Bool bInDragMode;
Point aDDStartPosRef;
Point aDDStartPosPix;
sal_uLong nDDStartPara;
sal_uLong nDDStartParaVisChildCount;
sal_uLong nDDCurPara;
sal_uInt16 nDDStartDepth;
sal_uInt16 nDDCurDepth;
sal_uInt16 nDDMaxDepth;
sal_Bool bDDChangingDepth;
sal_Bool bDDCursorVisible;
long* pHorTabArrDoc;
long nDDScrollLRBorderWidthWin; // Left Right
long nDDScrollTBBorderWidthWin; // Top Bottom
long nDDScrollLROffs;
long nDDScrollTDOffs;
void* pDummy;
sal_uLong nDummy;
enum MouseTarget {
MouseText = 0,
MouseBullet = 1,
MouseHypertext = 2, // ausserhalb OutputArea
MouseOutside = 3, // ausserhalb OutputArea
MouseDontKnow = 4
};
MouseTarget OLD_ePrevMouseTarget;
#ifdef _OUTLINER_CXX
EDITENG_DLLPRIVATE void ImplExpandOrCollaps( sal_uInt16 nStartPara, sal_uInt16 nEndPara, sal_Bool bExpand );
EDITENG_DLLPRIVATE sal_uLong ImpCheckMousePos( const Point& rPosPixel, MouseTarget& reTarget);
EDITENG_DLLPRIVATE void ImpToggleExpand( Paragraph* pParentPara );
EDITENG_DLLPRIVATE ParaRange ImpGetSelectedParagraphs( sal_Bool bIncludeHiddenChilds );
EDITENG_DLLPRIVATE void ImpHideDDCursor();
EDITENG_DLLPRIVATE void ImpShowDDCursor();
EDITENG_DLLPRIVATE void ImpPaintDDCursor();
EDITENG_DLLPRIVATE void ImpDragScroll( const Point& rPosPix );
EDITENG_DLLPRIVATE void ImpScrollLeft();
EDITENG_DLLPRIVATE void ImpScrollRight();
EDITENG_DLLPRIVATE void ImpScrollUp();
EDITENG_DLLPRIVATE void ImpScrollDown();
EDITENG_DLLPRIVATE sal_uLong ImpGetInsertionPara( const Point& rPosPixel );
EDITENG_DLLPRIVATE Point ImpGetDocPos( const Point& rPosPixel );
EDITENG_DLLPRIVATE Pointer ImpGetMousePointer( MouseTarget eTarget );
EDITENG_DLLPRIVATE sal_uInt16 ImpInitPaste( sal_uLong& rStart );
EDITENG_DLLPRIVATE void ImpPasted( sal_uLong nStart, sal_uLong nPrevParaCount, sal_uInt16 nSize);
EDITENG_DLLPRIVATE sal_uInt16 ImpCalcSelectedPages( sal_Bool bIncludeFirstSelected );
EDITENG_DLLPRIVATE sal_Bool ImpIsIndentingPages();
#endif
public:
OutlinerView( Outliner* pOut, Window* pWindow );
virtual ~OutlinerView();
EditView& GetEditView() const { return *pEditView; }
void Scroll( long nHorzScroll, long nVertScroll );
void Paint( const Rectangle& rRect, OutputDevice* pTargetDevice = 0 );
sal_Bool PostKeyEvent( const KeyEvent& rKEvt );
sal_Bool MouseButtonDown( const MouseEvent& );
sal_Bool MouseButtonUp( const MouseEvent& );
sal_Bool MouseMove( const MouseEvent& );
void ShowCursor( sal_Bool bGotoCursor = sal_True );
void HideCursor();
void SetOutliner( Outliner* pOutliner );
Outliner* GetOutliner() const { return pOwner; }
void SetWindow( Window* pWindow );
Window* GetWindow() const;
void SetReadOnly( sal_Bool bReadOnly );
sal_Bool IsReadOnly() const;
void SetOutputArea( const Rectangle& rRect );
Rectangle GetOutputArea() const;
Rectangle GetVisArea() const;
List* CreateSelectionList();
// gibt Anzahl selektierter Absaetze zurueck
// MT 07/00: Who needs this?
sal_uLong Select( Paragraph* pParagraph,
sal_Bool bSelect=sal_True,
sal_Bool bWChilds=sal_True);
String GetSelected() const;
void SelectRange( sal_uLong nFirst, sal_uInt16 nCount );
void SetAttribs( const SfxItemSet& );
void Indent( short nDiff );
void AdjustDepth( short nDX ); // Spaeter gegeb Indent ersetzen!
sal_Bool AdjustHeight( long nDY );
void AdjustDepth( Paragraph* pPara, short nDX,
sal_Bool bWithChilds = sal_False );
void AdjustHeight( Paragraph* pPara, long nDY,
sal_Bool bWithChilds=sal_False );
sal_uLong Read( SvStream& rInput, const String& rBaseURL, EETextFormat eFormat, sal_Bool bSelect = sal_False, SvKeyValueIterator* pHTTPHeaderAttrs = NULL );
sal_uLong Write( SvStream& rOutput, EETextFormat eFormat );
void InsertText( const String& rNew, sal_Bool bSelect = sal_False );
void InsertText( const OutlinerParaObject& rParaObj );
void Expand();
void Collapse();
void Expand( Paragraph* );
void Collapse( Paragraph* );
void ExpandAll();
void CollapseAll();
void SetBackgroundColor( const Color& rColor );
Color GetBackgroundColor();
SfxItemSet GetAttribs();
void Cut();
void Copy();
void Paste();
void PasteSpecial();
void EnablePaste( sal_Bool bEnable );
void Undo();
void Redo();
void SetStyleSheet( SfxStyleSheet* );
SfxStyleSheet* GetStyleSheet() const;
void SetControlWord( sal_uLong nWord );
sal_uLong GetControlWord() const;
void SetAnchorMode( EVAnchorMode eMode );
EVAnchorMode GetAnchorMode() const;
Pointer GetPointer( const Point& rPosPixel );
void Command( const CommandEvent& rCEvt );
void RemoveCharAttribs( sal_uLong nPara, sal_uInt16 nWhich = 0 );
void CompleteAutoCorrect();
EESpellState StartSpeller( sal_Bool bMultipleDoc = sal_False );
EESpellState StartThesaurus();
sal_uInt16 StartSearchAndReplace( const SvxSearchItem& rSearchItem );
// for text conversion
void StartTextConversion( LanguageType nSrcLang, LanguageType nDestLang, const Font *pDestFont, sal_Int32 nOptions, sal_Bool bIsInteractive, sal_Bool bMultipleDoc );
void TransliterateText( sal_Int32 nTransliterationMode );
ESelection GetSelection();
sal_uInt16 GetSelectedScriptType() const;
void SetVisArea( const Rectangle& rRec );
void SetSelection( const ESelection& );
void RemoveAttribs( sal_Bool bRemoveParaAttribs = sal_False, sal_uInt16 nWhich = 0, sal_Bool bKeepLanguages = sal_False );
void RemoveAttribsKeepLanguages( sal_Bool bRemoveParaAttribs );
sal_Bool HasSelection() const;
void InsertField( const SvxFieldItem& rFld );
const SvxFieldItem* GetFieldUnderMousePointer() const;
const SvxFieldItem* GetFieldUnderMousePointer( sal_uInt16& nPara, xub_StrLen& nPos ) const;
const SvxFieldItem* GetFieldAtSelection() const;
/** enables bullets for the selected paragraphs if the bullets/numbering of the first paragraph is off
or disables bullets/numbering for the selected paragraphs if the bullets/numbering of the first paragraph is on
*/
void ToggleBullets();
void ToggleBulletsNumbering(
const bool bToggle,
const bool bHandleBullets,
const SvxNumRule* pNumRule = NULL );
/** apply bullets/numbering for paragraphs
@param boolean bHandleBullets
true: handle bullets
false: handle numbering
@param pNewNumRule
numbering rule which needs to be applied. can be 0.
@param boolean bAtSelection
true: apply bullets/numbering at selected paragraphs
false: apply bullets/numbering at all paragraphs
*/
void ApplyBulletsNumbering(
const bool bHandleBullets,
const SvxNumRule* pNewNumRule,
const bool bCheckCurrentNumRuleBeforeApplyingNewNumRule,
const bool bAtSelection = false );
/** switch off bullets/numbering for paragraphs
@param boolean bAtSelection
true: switch off bullets/numbering at selected paragraphs
false: switch off bullets/numbering at all paragraphs
*/
void SwitchOffBulletsNumbering(
const bool bAtSelection = false );
/** enables numbering for the selected paragraphs that are not enabled and ignore all selected
paragraphs that already have numbering enabled.
*/
void EnableBullets();
sal_Bool IsCursorAtWrongSpelledWord( sal_Bool bMarkIfWrong = sal_False );
sal_Bool IsWrongSpelledWordAtPos( const Point& rPosPixel, sal_Bool bMarkIfWrong = sal_False );
void SpellIgnoreWord();
void ExecuteSpellPopup( const Point& rPosPixel, Link* pCallBack = 0 );
void SetInvalidateMore( sal_uInt16 nPixel );
sal_uInt16 GetInvalidateMore() const;
String GetSurroundingText() const;
Selection GetSurroundingTextSelection() const;
};
// some thesaurus functionality to avoid code duplication in different projects...
bool EDITENG_DLLPUBLIC GetStatusValueForThesaurusFromContext( String &rStatusVal, LanguageType &rLang, const EditView &rEditView );
void EDITENG_DLLPUBLIC ReplaceTextWithSynonym( EditView &rEditView, const String &rSynonmText );
//#if 0 // _SOLAR__PRIVATE
DECLARE_LIST(ViewList,OutlinerView*)
//#else
//typedef List ViewList;
//#endif
class EDITENG_DLLPUBLIC DrawPortionInfo
{
public:
const Point& mrStartPos;
const String& mrText;
sal_uInt16 mnTextStart;
sal_uInt16 mnTextLen;
sal_uInt16 mnPara;
xub_StrLen mnIndex;
const SvxFont& mrFont;
const sal_Int32* mpDXArray;
const EEngineData::WrongSpellVector* mpWrongSpellVector;
const SvxFieldData* mpFieldData;
const ::com::sun::star::lang::Locale* mpLocale;
const Color maOverlineColor;
const Color maTextLineColor;
// #101498# BiDi level needs to be transported, too.
sal_uInt8 mnBiDiLevel;
// bitfield
unsigned mbEndOfLine : 1;
unsigned mbEndOfParagraph : 1;
unsigned mbEndOfBullet : 1;
sal_uInt8 GetBiDiLevel() const { return mnBiDiLevel; }
sal_Bool IsRTL() const;
DrawPortionInfo(
const Point& rPos,
const String& rTxt,
sal_uInt16 nTxtStart,
sal_uInt16 nTxtLen,
const SvxFont& rFnt,
sal_uInt16 nPar,
xub_StrLen nIdx,
const sal_Int32* pDXArr,
const EEngineData::WrongSpellVector* pWrongSpellVector,
const SvxFieldData* pFieldData,
const ::com::sun::star::lang::Locale* pLocale,
const Color& rOverlineColor,
const Color& rTextLineColor,
sal_uInt8 nBiDiLevel,
bool bEndOfLine,
bool bEndOfParagraph,
bool bEndOfBullet)
: mrStartPos(rPos),
mrText(rTxt),
mnTextStart(nTxtStart),
mnTextLen(nTxtLen),
mnPara(nPar),
mnIndex(nIdx),
mrFont(rFnt),
mpDXArray(pDXArr),
mpWrongSpellVector(pWrongSpellVector),
mpFieldData(pFieldData),
mpLocale(pLocale),
maOverlineColor(rOverlineColor),
maTextLineColor(rTextLineColor),
mnBiDiLevel(nBiDiLevel),
mbEndOfLine(bEndOfLine),
mbEndOfParagraph(bEndOfParagraph),
mbEndOfBullet(bEndOfBullet)
{}
};
class EDITENG_DLLPUBLIC DrawBulletInfo
{
public:
const GraphicObject maBulletGraphicObject;
Point maBulletPosition;
Size maBulletSize;
DrawBulletInfo(
const GraphicObject& rBulletGraphicObject,
const Point& rBulletPosition,
const Size& rBulletSize)
: maBulletGraphicObject(rBulletGraphicObject),
maBulletPosition(rBulletPosition),
maBulletSize(rBulletSize)
{}
};
struct EDITENG_DLLPUBLIC PaintFirstLineInfo
{
sal_uInt16 mnPara;
const Point& mrStartPos;
long mnBaseLineY;
const Point& mrOrigin;
short mnOrientation;
OutputDevice* mpOutDev;
PaintFirstLineInfo( sal_uInt16 nPara, const Point& rStartPos, long nBaseLineY, const Point& rOrigin, short nOrientation, OutputDevice* pOutDev )
: mnPara( nPara ), mrStartPos( rStartPos ), mnBaseLineY( nBaseLineY ), mrOrigin( rOrigin ), mnOrientation( nOrientation ), mpOutDev( pOutDev )
{}
};
class SdrPage;
class EditFieldInfo
{
private:
Outliner* pOutliner;
const SvxFieldItem& rFldItem;
Color* pTxtColor;
Color* pFldColor;
String aRepresentation;
sal_uInt16 nPara;
xub_StrLen nPos;
sal_Bool bSimpleClick;
EditFieldInfo();
EditFieldInfo( const EditFieldInfo& );
SdrPage* mpSdrPage;
public:
EditFieldInfo( Outliner* pOutl, const SvxFieldItem& rFItem, sal_uInt16 nPa, xub_StrLen nPo )
: rFldItem( rFItem )
{
pOutliner = pOutl;
nPara = nPa; nPos = nPo;
pTxtColor = 0; pFldColor = 0; bSimpleClick = sal_False;
mpSdrPage = 0;
}
~EditFieldInfo()
{
delete pTxtColor;
delete pFldColor;
}
Outliner* GetOutliner() const { return pOutliner; }
const SvxFieldItem& GetField() const { return rFldItem; }
Color* GetTxtColor() const { return pTxtColor; }
void SetTxtColor( const Color& rColor )
{ delete pTxtColor; pTxtColor = new Color( rColor ); }
Color* GetFldColor() const { return pFldColor; }
void SetFldColor( const Color& rColor )
{ delete pFldColor; pFldColor = new Color( rColor ); }
void ClearFldColor()
{ delete pFldColor; pFldColor = 0; }
sal_uInt16 GetPara() const { return nPara; }
xub_StrLen GetPos() const { return nPos; }
sal_Bool IsSimpleClick() const { return bSimpleClick; }
void SetSimpleClick( sal_Bool bSimple ) { bSimpleClick = bSimple; }
const String& GetRepresentation() const { return aRepresentation; }
String& GetRepresentation() { return aRepresentation; }
void SetRepresentation( const String& rStr ) { aRepresentation = rStr; }
void SetSdrPage( SdrPage* pPage ) { mpSdrPage = pPage; }
SdrPage* GetSdrPage() const { return mpSdrPage; }
};
struct EBulletInfo
{
sal_Bool bVisible;
sal_uInt16 nType; // see SvxNumberType
String aText;
SvxFont aFont;
Graphic aGraphic;
sal_uInt16 nParagraph;
Rectangle aBounds;
EBulletInfo() : bVisible( sal_False ), nType( 0 ), nParagraph( EE_PARA_NOT_FOUND ) {}
};
#define OUTLINERMODE_DONTKNOW 0x0000
#define OUTLINERMODE_TEXTOBJECT 0x0001
#define OUTLINERMODE_TITLEOBJECT 0x0002
#define OUTLINERMODE_OUTLINEOBJECT 0x0003
#define OUTLINERMODE_OUTLINEVIEW 0x0004
#define OUTLINERMODE_USERMASK 0x00FF
#define OUTLINERMODE_SUBTITLE (0x0100|OUTLINERMODE_TEXTOBJECT)
#define OUTLINERMODE_NOTE (0x0200|OUTLINERMODE_TEXTOBJECT)
class EDITENG_DLLPUBLIC Outliner : public SfxBroadcaster
{
friend class OutlinerView;
friend class OutlinerEditEng;
friend class OutlinerParaObject;
friend class OLUndoExpand;
friend class OutlinerUndoChangeDepth;
friend class OutlinerUndoCheckPara;
friend class OutlinerUndoChangeParaFlags;
OutlinerEditEng* pEditEngine;
ParagraphList* pParaList;
ViewList aViewList;
Paragraph* pHdlParagraph;
sal_uLong mnFirstSelPage;
Link aDrawPortionHdl;
Link aDrawBulletHdl;
Link aExpandHdl;
Link aParaInsertedHdl;
Link aParaRemovingHdl;
Link aDepthChangedHdl;
Link aWidthArrReqHdl;
Link aBeginMovingHdl;
Link aEndMovingHdl;
Link aIndentingPagesHdl;
Link aRemovingPagesHdl;
Link aFieldClickedHdl;
Link aCalcFieldValueHdl;
Link maPaintFirstLineHdl;
Link maBeginPasteOrDropHdl;
Link maEndPasteOrDropHdl;
sal_Int16 nDepthChangedHdlPrevDepth;
sal_uInt16 mnDepthChangeHdlPrevFlags;
sal_Int16 nMaxDepth;
const sal_Int16 nMinDepth;
sal_uInt16 nFirstPage;
sal_uInt16 nOutlinerMode;
sal_Bool bIsExpanding; // Nur in Expand/Collaps-Hdl gueltig, mal umstellen
sal_Bool bFirstParaIsEmpty;
sal_Bool bBlockInsCallback;
sal_Bool bStrippingPortions;
sal_Bool bPasting;
sal_uLong nDummy;
#ifdef _OUTLINER_CXX
DECL_LINK( ParaVisibleStateChangedHdl, Paragraph* );
DECL_LINK( BeginMovingParagraphsHdl, MoveParagraphsInfo* );
DECL_LINK( EndMovingParagraphsHdl, MoveParagraphsInfo* );
DECL_LINK( BeginPasteOrDropHdl, PasteOrDropInfos* );
DECL_LINK( EndPasteOrDropHdl, PasteOrDropInfos* );
DECL_LINK( EditEngineNotifyHdl, EENotify* );
void ImplCheckParagraphs( sal_uInt16 nStart, sal_uInt16 nEnd );
bool ImplHasNumberFormat( sal_uInt16 nPara ) const;
Size ImplGetBulletSize( sal_uInt16 nPara );
sal_uInt16 ImplGetNumbering( sal_uInt16 nPara, const SvxNumberFormat* pParaFmt );
void ImplCalcBulletText( sal_uInt16 nPara, sal_Bool bRecalcLevel, sal_Bool bRecalcChilds );
String ImplGetBulletText( sal_uInt16 nPara );
void ImplCheckNumBulletItem( sal_uInt16 nPara );
void ImplInitDepth( sal_uInt16 nPara, sal_Int16 nDepth, sal_Bool bCreateUndo, sal_Bool bUndoAction = sal_False );
void ImplSetLevelDependendStyleSheet( sal_uInt16 nPara, SfxStyleSheet* pLevelStyle = NULL );
void ImplBlockInsertionCallbacks( sal_Bool b );
void ImplCheckStyleSheet( sal_uInt16 nPara, sal_Bool bReplaceExistingStyle );
void ImpRecalcBulletIndent( sal_uLong nPara );
const SvxBulletItem& ImpGetBullet( sal_uLong nPara, sal_uInt16& );
void ImpFilterIndents( sal_uLong nFirstPara, sal_uLong nLastPara );
bool ImpConvertEdtToOut( sal_uInt32 nPara, EditView* pView = 0 );
void ImpTextPasted( sal_uLong nStartPara, sal_uInt16 nCount );
long ImpCalcMaxBulletWidth( sal_uInt16 nPara, const SvxBulletItem& rBullet );
Font ImpCalcBulletFont( sal_uInt16 nPara ) const;
Rectangle ImpCalcBulletArea( sal_uInt16 nPara, sal_Bool bAdjust, sal_Bool bReturnPaperPos );
long ImpGetTextIndent( sal_uLong nPara );
sal_Bool ImpCanIndentSelectedPages( OutlinerView* pCurView );
sal_Bool ImpCanDeleteSelectedPages( OutlinerView* pCurView );
sal_Bool ImpCanDeleteSelectedPages( OutlinerView* pCurView, sal_uInt16 nFirstPage, sal_uInt16 nPages );
sal_uInt16 ImplGetOutlinerMode() const { return nOutlinerMode & OUTLINERMODE_USERMASK; }
void ImplCheckDepth( sal_Int16& rnDepth ) const;
#endif
protected:
void ParagraphInserted( sal_uInt16 nParagraph );
void ParagraphDeleted( sal_uInt16 nParagraph );
void ParaAttribsChanged( sal_uInt16 nParagraph );
virtual void StyleSheetChanged( SfxStyleSheet* pStyle );
void InvalidateBullet( Paragraph* pPara, sal_uLong nPara );
void PaintBullet( sal_uInt16 nPara, const Point& rStartPos,
const Point& rOrigin, short nOrientation,
OutputDevice* pOutDev );
// used by OutlinerEditEng. Allows Outliner objects to provide
// bullet access to the EditEngine.
virtual const SvxNumberFormat* GetNumberFormat( sal_uInt16 nPara ) const;
public:
Outliner( SfxItemPool* pPool, sal_uInt16 nOutlinerMode );
virtual ~Outliner();
void Init( sal_uInt16 nOutlinerMode );
sal_uInt16 GetMode() const { return nOutlinerMode; }
void SetVertical( sal_Bool bVertical );
sal_Bool IsVertical() const;
void SetFixedCellHeight( sal_Bool bUseFixedCellHeight );
sal_Bool IsFixedCellHeight() const;
void SetDefaultHorizontalTextDirection( EEHorizontalTextDirection eHTextDir );
EEHorizontalTextDirection GetDefaultHorizontalTextDirection() const;
sal_uInt16 GetScriptType( const ESelection& rSelection ) const;
LanguageType GetLanguage( sal_uInt16 nPara, sal_uInt16 nPos ) const;
void SetAsianCompressionMode( sal_uInt16 nCompressionMode );
sal_uInt16 GetAsianCompressionMode() const;
void SetKernAsianPunctuation( sal_Bool bEnabled );
sal_Bool IsKernAsianPunctuation() const;
void SetAddExtLeading( sal_Bool b );
sal_Bool IsAddExtLeading() const;
sal_uLong InsertView( OutlinerView* pView, sal_uLong nIndex=LIST_APPEND);
OutlinerView* RemoveView( OutlinerView* pView );
OutlinerView* RemoveView( sal_uLong nIndex );
OutlinerView* GetView( sal_uLong nIndex ) const;
sal_uLong GetViewCount() const;
Paragraph* Insert( const String& rText, sal_uLong nAbsPos = LIST_APPEND, sal_Int16 nDepth = 0 );
void SetText( const OutlinerParaObject& );
void AddText( const OutlinerParaObject& );
void SetText( const String& rText, Paragraph* pParagraph );
String GetText( Paragraph* pPara, sal_uLong nParaCount=1 ) const;
OutlinerParaObject* CreateParaObject( sal_uInt16 nStartPara = 0, sal_uInt16 nParaCount = 0xFFFF ) const;
const SfxItemSet& GetEmptyItemSet() const;
void SetRefMapMode( const MapMode& );
MapMode GetRefMapMode() const;
void SetBackgroundColor( const Color& rColor );
Color GetBackgroundColor() const;
sal_Int16 GetMinDepth() const { return -1; }
void SetMaxDepth( sal_Int16 nDepth, sal_Bool bCheckParas = sal_False );
sal_Int16 GetMaxDepth() const { return nMaxDepth; }
void SetUpdateMode( sal_Bool bUpdate );
sal_Bool GetUpdateMode() const;
void Clear();
void RemoveAttribs( const ESelection& rSelection, sal_Bool bRemoveParaAttribs, sal_uInt16 nWhich );
sal_uLong GetParagraphCount() const;
Paragraph* GetParagraph( sal_uLong nAbsPos ) const;
sal_Bool HasParent( Paragraph* pParagraph ) const;
sal_Bool HasChilds( Paragraph* pParagraph ) const;
sal_uLong GetChildCount( Paragraph* pParent ) const;
sal_Bool IsExpanded( Paragraph* pPara ) const;
// Paragraph* GetParagraph( Paragraph* pParent, sal_uLong nRelPos ) const;
Paragraph* GetParent( Paragraph* pParagraph ) const;
// sal_uLong GetRelPos( Paragraph* pParent, Paragraph* pPara ) const;
sal_uLong GetAbsPos( Paragraph* pPara );
sal_Int16 GetDepth( sal_uLong nPara ) const;
void SetDepth( Paragraph* pParagraph, sal_Int16 nNewDepth );
void SetVisible( Paragraph* pPara, sal_Bool bVisible );
sal_Bool IsVisible( Paragraph* pPara ) const { return pPara->IsVisible(); }
void EnableUndo( sal_Bool bEnable );
sal_Bool IsUndoEnabled() const;
void UndoActionStart( sal_uInt16 nId );
void UndoActionEnd( sal_uInt16 nId );
void InsertUndo( EditUndo* pUndo );
sal_Bool IsInUndo();
void ClearModifyFlag();
sal_Bool IsModified() const;
Paragraph* GetHdlParagraph() const { return pHdlParagraph; }
sal_Bool IsExpanding() const { return bIsExpanding; }
virtual void ExpandHdl();
void SetExpandHdl( const Link& rLink ) { aExpandHdl = rLink; }
Link GetExpandHdl() const { return aExpandHdl; }
virtual void ParagraphInsertedHdl();
void SetParaInsertedHdl(const Link& rLink){aParaInsertedHdl=rLink;}
Link GetParaInsertedHdl() const { return aParaInsertedHdl; }
virtual void ParagraphRemovingHdl();
void SetParaRemovingHdl(const Link& rLink){aParaRemovingHdl=rLink;}
Link GetParaRemovingHdl() const { return aParaRemovingHdl; }
virtual void DepthChangedHdl();
void SetDepthChangedHdl(const Link& rLink){aDepthChangedHdl=rLink;}
Link GetDepthChangedHdl() const { return aDepthChangedHdl; }
sal_Int16 GetPrevDepth() const { return nDepthChangedHdlPrevDepth; }
sal_uInt16 GetPrevFlags() const { return mnDepthChangeHdlPrevFlags; }
virtual long RemovingPagesHdl( OutlinerView* );
void SetRemovingPagesHdl(const Link& rLink){aRemovingPagesHdl=rLink;}
Link GetRemovingPagesHdl() const { return aRemovingPagesHdl; }
virtual long IndentingPagesHdl( OutlinerView* );
void SetIndentingPagesHdl(const Link& rLink){aIndentingPagesHdl=rLink;}
Link GetIndentingPagesHdl() const { return aIndentingPagesHdl; }
// nur gueltig in den beiden oberen Handlern
sal_uInt16 GetSelPageCount() const { return nDepthChangedHdlPrevDepth; }
// nur gueltig in den beiden oberen Handlern
sal_uLong GetFirstSelPage() const { return mnFirstSelPage; }
void SetCalcFieldValueHdl(const Link& rLink ) { aCalcFieldValueHdl= rLink; }
Link GetCalcFieldValueHdl() const { return aCalcFieldValueHdl; }
void SetFieldClickedHdl(const Link& rLink ) { aFieldClickedHdl= rLink; }
Link GetFieldClickedHdl() const { return aFieldClickedHdl; }
void SetDrawPortionHdl(const Link& rLink){aDrawPortionHdl=rLink;}
Link GetDrawPortionHdl() const { return aDrawPortionHdl; }
void SetDrawBulletHdl(const Link& rLink){aDrawBulletHdl=rLink;}
Link GetDrawBulletHdl() const { return aDrawBulletHdl; }
void SetPaintFirstLineHdl(const Link& rLink) { maPaintFirstLineHdl = rLink; }
Link GetPaintFirstLineHdl() const { return maPaintFirstLineHdl; }
void SetModifyHdl( const Link& rLink );
Link GetModifyHdl() const;
void SetNotifyHdl( const Link& rLink );
Link GetNotifyHdl() const;
void SetStatusEventHdl( const Link& rLink );
Link GetStatusEventHdl() const;
void Draw( OutputDevice* pOutDev, const Rectangle& rOutRect );
void Draw( OutputDevice* pOutDev, const Rectangle& rOutRect, const Point& rStartDocPos );
void Draw( OutputDevice* pOutDev, const Point& rStartPos, short nOrientation = 0 );
const Size& GetPaperSize() const;
void SetPaperSize( const Size& rSize );
void SetFirstPageNumber( sal_uInt16 n ) { nFirstPage = n; }
sal_uInt16 GetFirstPageNumber() const { return nFirstPage; }
void SetPolygon( const basegfx::B2DPolyPolygon& rPolyPolygon );
void SetPolygon( const basegfx::B2DPolyPolygon& rPolyPolygon, const basegfx::B2DPolyPolygon* pLinePolyPolygon);
void ClearPolygon();
const PolyPolygon* GetPolygon();
const Size& GetMinAutoPaperSize() const;
void SetMinAutoPaperSize( const Size& rSz );
const Size& GetMaxAutoPaperSize() const;
void SetMaxAutoPaperSize( const Size& rSz );
void SetDefTab( sal_uInt16 nTab );
sal_uInt16 GetDefTab() const;
sal_Bool IsFlatMode() const;
void SetFlatMode( sal_Bool bFlat );
void EnableAutoColor( sal_Bool b );
sal_Bool IsAutoColorEnabled() const;
void ForceAutoColor( sal_Bool b );
sal_Bool IsForceAutoColor() const;
EBulletInfo GetBulletInfo( sal_uInt16 nPara );
void SetWordDelimiters( const String& rDelimiters );
String GetWordDelimiters() const;
String GetWord( sal_uInt16 nPara, xub_StrLen nIndex );
void StripPortions();
// #101498#
virtual void DrawingText(
const Point& rStartPos, const String& rText, sal_uInt16 nTextStart, sal_uInt16 nTextLen,
const sal_Int32* pDXArray, const SvxFont& rFont, sal_uInt16 nPara, xub_StrLen nIndex, sal_uInt8 nRightToLeft,
const EEngineData::WrongSpellVector* pWrongSpellVector,
const SvxFieldData* pFieldData,
bool bEndOfLine,
bool bEndOfParagraph,
bool bEndOfBullet,
const ::com::sun::star::lang::Locale* pLocale,
const Color& rOverlineColor,
const Color& rTextLineColor);
Size CalcTextSize();
Point GetDocPos( Paragraph* pPara );
void SetStyleSheetPool( SfxStyleSheetPool* pSPool );
SfxStyleSheetPool* GetStyleSheetPool();
sal_Bool IsInSelectionMode() const;
void SetStyleSheet( sal_uLong nPara, SfxStyleSheet* pStyle );
SfxStyleSheet* GetStyleSheet( sal_uLong nPara );
void SetParaAttribs( sal_uInt16 nPara, const SfxItemSet& );
SfxItemSet GetParaAttribs( sal_uInt16 nPara );
void Remove( Paragraph* pPara, sal_uLong nParaCount );
sal_Bool Expand( Paragraph* );
sal_Bool Collapse( Paragraph* );
void SetParaFlag( Paragraph* pPara, sal_uInt16 nFlag );
void RemoveParaFlag( Paragraph* pPara, sal_uInt16 nFlag );
bool HasParaFlag( const Paragraph* pPara, sal_uInt16 nFlag ) const;
// gibt ein Array mit den Bulletbreiten der n Einrueckebenen
// zurueck. Letzter Wert muss -1 sein. Wird vom Outliner geloescht.
Link GetWidthArrReqHdl() const{ return aWidthArrReqHdl; }
void SetWidthArrReqHdl(const Link& rLink){aWidthArrReqHdl=rLink; }
void SetControlWord( sal_uLong nWord );
sal_uLong GetControlWord() const;
Link GetBeginMovingHdl() const { return aBeginMovingHdl; }
void SetBeginMovingHdl(const Link& rLink) {aBeginMovingHdl=rLink;}
Link GetEndMovingHdl() const {return aEndMovingHdl;}
void SetEndMovingHdl( const Link& rLink){aEndMovingHdl=rLink;}
sal_uLong GetLineCount( sal_uLong nParagraph ) const;
sal_uInt16 GetLineLen( sal_uLong nParagraph, sal_uInt16 nLine ) const;
sal_uLong GetLineHeight( sal_uLong nParagraph, sal_uLong nLine = 0 );
// nFormat muss ein Wert aus dem enum EETextFormat sein (wg.CLOOKS)
sal_uLong Read( SvStream& rInput, const String& rBaseURL, sal_uInt16, SvKeyValueIterator* pHTTPHeaderAttrs = NULL );
::svl::IUndoManager& GetUndoManager();
::svl::IUndoManager* SetUndoManager(::svl::IUndoManager* pNew);
void QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel );
void QuickInsertField( const SvxFieldItem& rFld, const ESelection& rSel );
void QuickInsertLineBreak( const ESelection& rSel );
// nur fuer EditEngine-Modus
void QuickInsertText( const String& rText, const ESelection& rSel );
void QuickDelete( const ESelection& rSel );
void QuickRemoveCharAttribs( sal_uInt16 nPara, sal_uInt16 nWhich = 0 );
void QuickFormatDoc( sal_Bool bFull = sal_False );
sal_Bool UpdateFields();
void RemoveFields( sal_Bool bKeepFieldText, TypeId aType = NULL );
virtual void FieldClicked( const SvxFieldItem& rField, sal_uInt16 nPara, xub_StrLen nPos );
virtual void FieldSelected( const SvxFieldItem& rField, sal_uInt16 nPara, xub_StrLen nPos );
virtual String CalcFieldValue( const SvxFieldItem& rField, sal_uInt16 nPara, xub_StrLen nPos, Color*& rTxtColor, Color*& rFldColor );
void SetSpeller( ::com::sun::star::uno::Reference<
::com::sun::star::linguistic2::XSpellChecker1 > &xSpeller );
::com::sun::star::uno::Reference<
::com::sun::star::linguistic2::XSpellChecker1 >
GetSpeller();
::com::sun::star::uno::Reference<
::com::sun::star::linguistic2::XHyphenator >
GetHyphenator() const;
void SetHyphenator( ::com::sun::star::uno::Reference<
::com::sun::star::linguistic2::XHyphenator >& xHyph );
void SetForbiddenCharsTable( vos::ORef<SvxForbiddenCharactersTable> xForbiddenChars );
vos::ORef<SvxForbiddenCharactersTable> GetForbiddenCharsTable() const;
// Depricated
void SetDefaultLanguage( LanguageType eLang );
LanguageType GetDefaultLanguage() const;
sal_Bool HasOnlineSpellErrors() const;
void CompleteOnlineSpelling();
EESpellState HasSpellErrors();
sal_Bool HasText( const SvxSearchItem& rSearchItem );
virtual sal_Bool SpellNextDocument();
// for text conversion
sal_Bool HasConvertibleTextPortion( LanguageType nLang );
virtual sal_Bool ConvertNextDocument();
void SetEditTextObjectPool( SfxItemPool* pPool );
SfxItemPool* GetEditTextObjectPool() const;
void SetRefDevice( OutputDevice* pRefDev );
OutputDevice* GetRefDevice() const;
sal_uInt16 GetFirstLineOffset( sal_uLong nParagraph );
sal_uLong GetTextHeight() const;
sal_uLong GetTextHeight( sal_uLong nParagraph ) const;
Point GetDocPosTopLeft( sal_uLong nParagraph );
Point GetDocPos( const Point& rPaperPos ) const;
sal_Bool IsTextPos( const Point& rPaperPos, sal_uInt16 nBorder = 0 );
sal_Bool IsTextPos( const Point& rPaperPos, sal_uInt16 nBorder, sal_Bool* pbBuuletPos );
void SetGlobalCharStretching( sal_uInt16 nX = 100, sal_uInt16 nY = 100 );
void GetGlobalCharStretching( sal_uInt16& rX, sal_uInt16& rY );
void DoStretchChars( sal_uInt16 nX, sal_uInt16 nY );
void EraseVirtualDevice();
void SetBigTextObjectStart( sal_uInt16 nStartAtPortionCount );
sal_uInt16 GetBigTextObjectStart() const;
sal_Bool ShouldCreateBigTextObject() const;
const EditEngine& GetEditEngine() const { return *((EditEngine*)pEditEngine); }
// this is needed for StarOffice Api
void SetLevelDependendStyleSheet( sal_uInt16 nPara );
sal_uInt16 GetOutlinerMode() const { return nOutlinerMode & OUTLINERMODE_USERMASK; }
void StartSpelling(EditView& rEditView, sal_Bool bMultipleDoc);
//spell and return a sentence
bool SpellSentence(EditView& rEditView, ::svx::SpellPortions& rToFill, bool bIsGrammarChecking );
// put spell position to start of current sentence
void PutSpellingToSentenceStart( EditView& rEditView );
//applies a changed sentence
void ApplyChangedSentence(EditView& rEditView, const ::svx::SpellPortions& rNewPortions, bool bRecheck );
void EndSpelling();
/** sets a link that is called at the beginning of a drag operation at an edit view */
void SetBeginDropHdl( const Link& rLink );
Link GetBeginDropHdl() const;
/** sets a link that is called at the end of a drag operation at an edit view */
void SetEndDropHdl( const Link& rLink );
Link GetEndDropHdl() const;
/** sets a link that is called before a drop or paste operation. */
void SetBeginPasteOrDropHdl( const Link& rLink );
Link GetBeginPasteOrDropHdl() const { return maBeginPasteOrDropHdl; }
/** sets a link that is called after a drop or paste operation. */
void SetEndPasteOrDropHdl( const Link& rLink );
Link GetEndPasteOrDropHdl() const { return maEndPasteOrDropHdl; }
virtual sal_Int16 GetNumberingStartValue( sal_uInt16 nPara );
virtual void SetNumberingStartValue( sal_uInt16 nPara, sal_Int16 nNumberingStartValue );
virtual sal_Bool IsParaIsNumberingRestart( sal_uInt16 nPara );
virtual void SetParaIsNumberingRestart( sal_uInt16 nPara, sal_Bool bParaIsNumberingRestart );
/** determine the bullets/numbering status of the given paragraphs
@param nParaStart
index of paragraph at which the check starts
@param nParaEnd
index of paragraph at which the check ends
@returns
0 : all paragraphs have bullets
1 : all paragraphs have numbering
2 : otherwise
*/
sal_Int16 GetBulletsNumberingStatus(
const sal_uInt16 nParaStart,
const sal_uInt16 nParaEnd ) const;
// convenient method to determine the bullets/numbering status for all paragraphs
sal_Int16 GetBulletsNumberingStatus() const;
};
#endif