Files
libreoffice/editeng/source/outliner/outlvw.cxx

1723 lines
51 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2000-09-18 16:07:07 +00:00
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2000-09-18 16:07:07 +00:00
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org - a multi-platform office productivity suite
2000-09-18 16:07:07 +00:00
*
* This file is part of OpenOffice.org.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
2000-09-18 16:07:07 +00:00
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
2000-09-18 16:07:07 +00:00
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
2010-02-26 08:13:29 +01:00
#include "precompiled_editeng.hxx"
#include <com/sun/star/i18n/WordType.hpp>
#include <svl/intitem.hxx>
#include <editeng/editeng.hxx>
#include <editeng/editview.hxx>
#include <editeng/editdata.hxx>
#include <editeng/eerdll.hxx>
#include <editeng/lrspitem.hxx>
#include <editeng/fhgtitem.hxx>
2010-02-26 08:13:29 +01:00
#include <svl/style.hxx>
#include <i18npool/mslangid.hxx>
2000-09-18 16:07:07 +00:00
#define _OUTLINER_CXX
#include <editeng/outliner.hxx>
2000-09-18 16:07:07 +00:00
#include <outleeng.hxx>
#include <paralist.hxx>
#include <outlundo.hxx>
#include <editeng/outlobj.hxx>
#include <editeng/flditem.hxx>
#include <editeng/flditem.hxx>
#include <editeng/eeitem.hxx>
#include <editeng/numitem.hxx>
2000-09-18 16:07:07 +00:00
#include <vcl/window.hxx>
#include <svl/itemset.hxx>
#include <editeng/editstat.hxx>
2000-09-18 16:07:07 +00:00
2011-02-16 16:34:02 -05:00
// Width of the border zones within which is scrolled during Drag and Drop
2000-09-18 16:07:07 +00:00
#define OL_SCROLL_LRBORDERWIDTHPIX 10
#define OL_SCROLL_TBBORDERWIDTHPIX 10
2011-02-16 16:34:02 -05:00
// Value to the window content when scrolling during Drag and Drop
#define OL_SCROLL_HOROFFSET 20 /* in % of VisibleSize.Width */
#define OL_SCROLL_VEROFFSET 20 /* in % of VisibleSize.Height */
2000-09-18 16:07:07 +00:00
using namespace ::com::sun::star;
DBG_NAME(OutlinerView)
2000-09-18 16:07:07 +00:00
OutlinerView::OutlinerView( Outliner* pOut, Window* pWin )
{
DBG_CTOR( OutlinerView, 0 );
pOwner = pOut;
bDDCursorVisible = FALSE;
bInDragMode = FALSE;
nDDScrollLRBorderWidthWin = 0;
nDDScrollTBBorderWidthWin = 0;
pHorTabArrDoc = 0;
pEditView = new EditView( pOut->pEditEngine, pWin );
pEditView->SetSelectionMode( EE_SELMODE_TXTONLY );
}
OutlinerView::~OutlinerView()
{
DBG_DTOR(OutlinerView,0);
delete pEditView;
}
void OutlinerView::Paint( const Rectangle& rRect )
{
DBG_CHKTHIS(OutlinerView,0);
2011-02-16 16:34:02 -05:00
// For the first Paint/KeyInput/Drop an emty Outliner is turned into
// an Outliner with exactly one paragraph.
2000-09-18 16:07:07 +00:00
if( pOwner->bFirstParaIsEmpty )
pOwner->Insert( String() );
pEditView->Paint( rRect );
}
BOOL OutlinerView::PostKeyEvent( const KeyEvent& rKEvt, Window* pFrameWin )
2000-09-18 16:07:07 +00:00
{
DBG_CHKTHIS( OutlinerView, 0 );
2011-02-16 16:34:02 -05:00
// For the first Paint/KeyInput/Drop an emty Outliner is turned into
// an Outliner with exactly one paragraph.
2000-09-18 16:07:07 +00:00
if( pOwner->bFirstParaIsEmpty )
pOwner->Insert( String() );
BOOL bKeyProcessed = FALSE;
ESelection aSel( pEditView->GetSelection() );
BOOL bSelection = aSel.HasRange();
KeyCode aKeyCode = rKEvt.GetKeyCode();
KeyFuncType eFunc = aKeyCode.GetFunction();
USHORT nCode = aKeyCode.GetCode();
BOOL bReadOnly = IsReadOnly();
if( bSelection && ( nCode != KEY_TAB ) && EditEngine::DoesKeyChangeText( rKEvt ) )
2000-09-18 16:07:07 +00:00
{
if ( ImpCalcSelectedPages( FALSE ) && !pOwner->ImpCanDeleteSelectedPages( this ) )
return TRUE;
}
if ( eFunc != KEYFUNC_DONTKNOW )
{
switch ( eFunc )
{
case KEYFUNC_CUT:
{
if ( !bReadOnly )
{
Cut();
bKeyProcessed = TRUE;
}
}
break;
case KEYFUNC_COPY:
{
Copy();
bKeyProcessed = TRUE;
}
break;
case KEYFUNC_PASTE:
{
if ( !bReadOnly )
{
PasteSpecial();
bKeyProcessed = TRUE;
}
}
break;
case KEYFUNC_DELETE:
{
if( !bReadOnly && !bSelection && ( pOwner->ImplGetOutlinerMode() != OUTLINERMODE_TEXTOBJECT ) )
{
if( aSel.nEndPos == pOwner->pEditEngine->GetTextLen( aSel.nEndPara ) )
{
Paragraph* pNext = pOwner->pParaList->GetParagraph( aSel.nEndPara+1 );
if( pNext && pNext->HasFlag(PARAFLAG_ISPAGE) )
2000-09-18 16:07:07 +00:00
{
if( !pOwner->ImpCanDeleteSelectedPages( this, aSel.nEndPara, 1 ) )
return FALSE;
}
}
}
}
break;
2011-02-16 16:34:02 -05:00
default: // is then possibly edited below.
2000-09-18 16:07:07 +00:00
eFunc = KEYFUNC_DONTKNOW;
}
}
if ( eFunc == KEYFUNC_DONTKNOW )
{
switch ( nCode )
{
case KEY_TAB:
{
if ( !bReadOnly && !aKeyCode.IsMod1() && !aKeyCode.IsMod2() )
{
if ( ( pOwner->ImplGetOutlinerMode() != OUTLINERMODE_TEXTOBJECT ) &&
( pOwner->ImplGetOutlinerMode() != OUTLINERMODE_TITLEOBJECT ) &&
( bSelection || !aSel.nStartPos ) )
{
2001-03-20 08:08:06 +00:00
Indent( aKeyCode.IsShift() ? (-1) : (+1) );
2000-09-18 16:07:07 +00:00
bKeyProcessed = TRUE;
}
else if ( ( pOwner->ImplGetOutlinerMode() == OUTLINERMODE_TEXTOBJECT ) &&
!bSelection && !aSel.nEndPos && pOwner->ImplHasBullet( aSel.nEndPara ) )
{
2001-03-20 08:08:06 +00:00
Indent( aKeyCode.IsShift() ? (-1) : (+1) );
bKeyProcessed = TRUE;
2000-09-18 16:07:07 +00:00
}
}
}
break;
case KEY_BACKSPACE:
{
if( !bReadOnly && !bSelection && aSel.nEndPara && !aSel.nEndPos )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( aSel.nEndPara );
Paragraph* pPrev = pOwner->pParaList->GetParagraph( aSel.nEndPara-1 );
if( !pPrev->IsVisible() )
return TRUE;
if( !pPara->GetDepth() )
{
if(!pOwner->ImpCanDeleteSelectedPages(this, aSel.nEndPara , 1 ) )
return TRUE;
}
}
}
break;
case KEY_RETURN:
{
if ( !bReadOnly )
{
2011-02-16 16:34:02 -05:00
// Special treatment: hard return at the end of a paragraph,
// which has collapsed subparagraphs.
2000-09-18 16:07:07 +00:00
Paragraph* pPara = pOwner->pParaList->GetParagraph( aSel.nEndPara );
if( !aKeyCode.IsShift() )
{
2011-02-16 16:34:02 -05:00
// ImpGetCursor again???
2000-09-18 16:07:07 +00:00
if( !bSelection &&
aSel.nEndPos == pOwner->pEditEngine->GetTextLen( aSel.nEndPara ) )
{
ULONG nChilds = pOwner->pParaList->GetChildCount(pPara);
if( nChilds && !pOwner->pParaList->HasVisibleChilds(pPara))
{
pOwner->UndoActionStart( OLUNDO_INSERT );
ULONG nTemp = aSel.nEndPara;
nTemp += nChilds;
2011-02-16 16:34:02 -05:00
nTemp++; // insert above next Non-Child
2000-09-18 16:07:07 +00:00
pOwner->Insert( String(),nTemp,pPara->GetDepth());
2011-02-16 16:34:02 -05:00
// Position the cursor
2000-09-18 16:07:07 +00:00
ESelection aTmpSel((USHORT)nTemp,0,(USHORT)nTemp,0);
pEditView->SetSelection( aTmpSel );
pEditView->ShowCursor( TRUE, TRUE );
pOwner->UndoActionEnd( OLUNDO_INSERT );
bKeyProcessed = TRUE;
}
}
}
if( !bKeyProcessed && !bSelection &&
!aKeyCode.IsShift() && aKeyCode.IsMod1() &&
( aSel.nEndPos == pOwner->pEditEngine->GetTextLen(aSel.nEndPara) ) )
{
pOwner->UndoActionStart( OLUNDO_INSERT );
ULONG nTemp = aSel.nEndPara;
nTemp++;
pOwner->Insert( String(), nTemp, pPara->GetDepth()+1 );
2011-02-16 16:34:02 -05:00
// Position the cursor
2000-09-18 16:07:07 +00:00
ESelection aTmpSel((USHORT)nTemp,0,(USHORT)nTemp,0);
pEditView->SetSelection( aTmpSel );
pEditView->ShowCursor( TRUE, TRUE );
pOwner->UndoActionEnd( OLUNDO_INSERT );
bKeyProcessed = TRUE;
}
}
}
break;
}
}
return bKeyProcessed ? TRUE : pEditView->PostKeyEvent( rKEvt, pFrameWin );
2000-09-18 16:07:07 +00:00
}
2002-07-24 12:18:20 +00:00
ULONG OutlinerView::ImpCheckMousePos(const Point& rPosPix, MouseTarget& reTarget)
2000-09-18 16:07:07 +00:00
{
DBG_CHKTHIS(OutlinerView,0);
ULONG nPara = EE_PARA_NOT_FOUND;
2002-07-24 12:18:20 +00:00
Point aMousePosWin = pEditView->GetWindow()->PixelToLogic( rPosPix );
2000-09-18 16:07:07 +00:00
if( !pEditView->GetOutputArea().IsInside( aMousePosWin ) )
2002-07-24 12:18:20 +00:00
{
2000-09-18 16:07:07 +00:00
reTarget = MouseOutside;
2002-07-24 12:18:20 +00:00
}
2000-09-18 16:07:07 +00:00
else
{
reTarget = MouseText;
2002-07-24 12:18:20 +00:00
Point aPaperPos( aMousePosWin );
2000-09-18 16:07:07 +00:00
Rectangle aOutArea = pEditView->GetOutputArea();
Rectangle aVisArea = pEditView->GetVisArea();
2002-07-24 12:18:20 +00:00
aPaperPos.X() -= aOutArea.Left();
aPaperPos.X() += aVisArea.Left();
aPaperPos.Y() -= aOutArea.Top();
aPaperPos.Y() += aVisArea.Top();
BOOL bBullet;
if ( pOwner->IsTextPos( aPaperPos, 0, &bBullet ) )
2000-09-18 16:07:07 +00:00
{
Point aDocPos = pOwner->GetDocPos( aPaperPos );
nPara = pOwner->pEditEngine->FindParagraph( aDocPos.Y() );
2002-07-24 12:18:20 +00:00
if ( bBullet )
2000-09-18 16:07:07 +00:00
{
reTarget = MouseBullet;
}
2002-07-24 12:18:20 +00:00
else
{
// Check for hyperlink
const SvxFieldItem* pFieldItem = pEditView->GetField( aMousePosWin );
if ( pFieldItem && pFieldItem->GetField() && pFieldItem->GetField()->ISA( SvxURLField ) )
reTarget = MouseHypertext;
}
2000-09-18 16:07:07 +00:00
}
}
return nPara;
}
2010-12-11 23:23:07 +01:00
BOOL OutlinerView::MouseMove( const MouseEvent& rMEvt )
2000-09-18 16:07:07 +00:00
{
DBG_CHKTHIS(OutlinerView,0);
2002-07-24 12:18:20 +00:00
2000-09-18 16:07:07 +00:00
if( ( pOwner->ImplGetOutlinerMode() == OUTLINERMODE_TEXTOBJECT ) || pEditView->GetEditEngine()->IsInSelectionMode())
return pEditView->MouseMove( rMEvt );
2002-07-24 12:18:20 +00:00
Point aMousePosWin( pEditView->GetWindow()->PixelToLogic( rMEvt.GetPosPixel() ) );
if( !pEditView->GetOutputArea().IsInside( aMousePosWin ) )
return FALSE;
Pointer aPointer = GetPointer( rMEvt.GetPosPixel() );
pEditView->GetWindow()->SetPointer( aPointer );
return pEditView->MouseMove( rMEvt );
2000-09-18 16:07:07 +00:00
}
2010-12-11 23:23:07 +01:00
BOOL OutlinerView::MouseButtonDown( const MouseEvent& rMEvt )
2000-09-18 16:07:07 +00:00
{
DBG_CHKTHIS(OutlinerView,0);
if ( ( pOwner->ImplGetOutlinerMode() == OUTLINERMODE_TEXTOBJECT ) || pEditView->GetEditEngine()->IsInSelectionMode() )
return pEditView->MouseButtonDown( rMEvt );
2002-07-24 12:18:20 +00:00
Point aMousePosWin( pEditView->GetWindow()->PixelToLogic( rMEvt.GetPosPixel() ) );
if( !pEditView->GetOutputArea().IsInside( aMousePosWin ) )
2000-09-18 16:07:07 +00:00
return FALSE;
2002-07-24 12:18:20 +00:00
Pointer aPointer = GetPointer( rMEvt.GetPosPixel() );
pEditView->GetWindow()->SetPointer( aPointer );
MouseTarget eTarget;
ULONG nPara = ImpCheckMousePos( rMEvt.GetPosPixel(), eTarget );
2000-09-18 16:07:07 +00:00
if ( eTarget == MouseBullet )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
BOOL bHasChilds = (pPara && pOwner->pParaList->HasChilds(pPara));
if( rMEvt.GetClicks() == 1 )
{
ULONG nEndPara = nPara;
if ( bHasChilds && pOwner->pParaList->HasVisibleChilds(pPara) )
nEndPara += pOwner->pParaList->GetChildCount( pPara );
2011-02-16 16:34:02 -05:00
// The selection is inverted, so that EditEngine does not scroll
2000-09-18 16:07:07 +00:00
ESelection aSel((USHORT)nEndPara, 0xffff,(USHORT)nPara, 0 );
pEditView->SetSelection( aSel );
}
else if( rMEvt.GetClicks() == 2 && bHasChilds )
ImpToggleExpand( pPara );
aDDStartPosPix = rMEvt.GetPosPixel();
aDDStartPosRef=pEditView->GetWindow()->PixelToLogic( aDDStartPosPix,pOwner->GetRefMapMode());
return TRUE;
}
// special case for outliner view in impress, check if double click hits the page icon for toggle
if( (nPara == EE_PARA_NOT_FOUND) && (pOwner->ImplGetOutlinerMode() == OUTLINERMODE_OUTLINEVIEW) && (eTarget == MouseText) && (rMEvt.GetClicks() == 2) )
{
ESelection aSel( pEditView->GetSelection() );
nPara = aSel.nStartPara;
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
if( (pPara && pOwner->pParaList->HasChilds(pPara)) && pPara->HasFlag(PARAFLAG_ISPAGE) )
{
ImpToggleExpand( pPara );
}
}
2000-09-18 16:07:07 +00:00
return pEditView->MouseButtonDown( rMEvt );
}
2010-12-11 23:23:07 +01:00
BOOL OutlinerView::MouseButtonUp( const MouseEvent& rMEvt )
2000-09-18 16:07:07 +00:00
{
DBG_CHKTHIS(OutlinerView,0);
if ( ( pOwner->ImplGetOutlinerMode() == OUTLINERMODE_TEXTOBJECT ) || pEditView->GetEditEngine()->IsInSelectionMode() )
return pEditView->MouseButtonUp( rMEvt );
2002-07-24 12:18:20 +00:00
Point aMousePosWin( pEditView->GetWindow()->PixelToLogic( rMEvt.GetPosPixel() ) );
if( !pEditView->GetOutputArea().IsInside( aMousePosWin ) )
2000-09-18 16:07:07 +00:00
return FALSE;
2002-07-24 12:18:20 +00:00
Pointer aPointer = GetPointer( rMEvt.GetPosPixel() );
pEditView->GetWindow()->SetPointer( aPointer );
2000-09-18 16:07:07 +00:00
return pEditView->MouseButtonUp( rMEvt );
}
void OutlinerView::ImpHideDDCursor()
{
DBG_CHKTHIS(OutlinerView,0);
if ( bDDCursorVisible )
{
bDDCursorVisible = FALSE;
ImpPaintDDCursor();
}
}
void OutlinerView::ImpShowDDCursor()
{
DBG_CHKTHIS(OutlinerView,0);
if ( !bDDCursorVisible )
{
bDDCursorVisible = TRUE;
ImpPaintDDCursor();
}
}
void OutlinerView::ImpPaintDDCursor()
{
DBG_CHKTHIS(OutlinerView,0);
Window* pWindow = pEditView->GetWindow();
RasterOp eOldOp = pWindow->GetRasterOp();
pWindow->SetRasterOp( ROP_INVERT );
const Color& rOldLineColor = pWindow->GetLineColor();
pWindow->SetLineColor( Color( COL_BLACK ) );
Point aStartPointWin, aEndPointWin;
Rectangle aOutputArWin = pEditView->GetOutputArea();
if( bDDChangingDepth )
{
aStartPointWin.X() = pHorTabArrDoc[ nDDCurDepth ];
aStartPointWin.X() += aOutputArWin.Left();
aStartPointWin.Y() = aOutputArWin.Top();
aEndPointWin.X() = aStartPointWin.X();
aEndPointWin.Y() = aOutputArWin.Bottom();
}
else
{
ULONG nPara = nDDCurPara;
if ( nDDCurPara == LIST_APPEND )
{
Paragraph* pTemp = pOwner->pParaList->LastVisible();
nPara = pOwner->pParaList->GetAbsPos( pTemp );
}
aStartPointWin = pEditView->GetWindowPosTopLeft((USHORT) nPara );
if ( nDDCurPara == LIST_APPEND )
{
long nHeight = pOwner->pEditEngine->GetTextHeight((USHORT)nPara );
aStartPointWin.Y() += nHeight;
}
aStartPointWin.X() = aOutputArWin.Left();
aEndPointWin.Y() = aStartPointWin.Y();
aEndPointWin.X() = aOutputArWin.Right();
}
pWindow->DrawLine( aStartPointWin, aEndPointWin );
pWindow->SetLineColor( rOldLineColor );
pWindow->SetRasterOp( eOldOp );
}
2011-02-16 16:34:02 -05:00
// Calculates above which paragraph must it must be inserted
2000-09-18 16:07:07 +00:00
ULONG OutlinerView::ImpGetInsertionPara( const Point& rPosPixel )
{
DBG_CHKTHIS(OutlinerView,0);
ULONG nCurPara = pEditView->GetParagraph( rPosPixel );
ParagraphList* pParaList = pOwner->pParaList;
if ( nCurPara == EE_PARA_NOT_FOUND )
nCurPara = LIST_APPEND;
else
{
Point aPosWin = pEditView->GetWindow()->PixelToLogic( rPosPixel );
Point aParaPosWin = pEditView->GetWindowPosTopLeft((USHORT)nCurPara);
long nHeightRef = pOwner->pEditEngine->GetTextHeight((USHORT)nCurPara);
long nParaYOffs = aPosWin.Y() - aParaPosWin.Y();
if ( nParaYOffs > nHeightRef / 2 )
{
Paragraph* p = pParaList->GetParagraph( nCurPara );
p = pParaList->NextVisible( p );
nCurPara = p ? pParaList->GetAbsPos( p ) : LIST_APPEND;
}
}
return nCurPara;
}
void OutlinerView::ImpToggleExpand( Paragraph* pPara )
{
DBG_CHKTHIS(OutlinerView,0);
USHORT nPara = (USHORT) pOwner->pParaList->GetAbsPos( pPara );
pEditView->SetSelection( ESelection( nPara, 0, nPara, 0 ) );
ImplExpandOrCollaps( nPara, nPara, !pOwner->pParaList->HasVisibleChilds( pPara ) );
pEditView->ShowCursor();
}
void OutlinerView::SetOutliner( Outliner* pOutliner )
{
DBG_CHKTHIS(OutlinerView,0);
pOwner = pOutliner;
pEditView->SetEditEngine( pOutliner->pEditEngine );
}
2000-09-18 16:07:07 +00:00
ULONG OutlinerView::Select( Paragraph* pParagraph, BOOL bSelect,
BOOL bWithChilds )
{
DBG_CHKTHIS(OutlinerView,0);
ULONG nPara = pOwner->pParaList->GetAbsPos( pParagraph );
USHORT nEnd = 0;
if ( bSelect )
nEnd = 0xffff;
ULONG nChildCount = 0;
if ( bWithChilds )
nChildCount = pOwner->pParaList->GetChildCount( pParagraph );
ESelection aSel( (USHORT)nPara, 0,(USHORT)(nPara+nChildCount), nEnd );
pEditView->SetSelection( aSel );
return nChildCount+1;
}
void OutlinerView::SetAttribs( const SfxItemSet& rAttrs )
{
DBG_CHKTHIS(OutlinerView,0);
BOOL bUpdate = pOwner->pEditEngine->GetUpdateMode();
pOwner->pEditEngine->SetUpdateMode( FALSE );
if( !pOwner->IsInUndo() && pOwner->IsUndoEnabled() )
pOwner->UndoActionStart( OLUNDO_ATTR );
ParaRange aSel = ImpGetSelectedParagraphs( FALSE );
pEditView->SetAttribs( rAttrs );
2000-09-18 16:07:07 +00:00
2011-02-16 16:34:02 -05:00
// Update Bullet text
2000-09-18 16:07:07 +00:00
for( USHORT nPara= aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
{
pOwner->ImplCheckNumBulletItem( nPara );
// update following paras as well, numbering depends on
// previous paras
pOwner->ImplCalcBulletText( nPara, TRUE, FALSE );
2000-09-18 16:07:07 +00:00
if( !pOwner->IsInUndo() && pOwner->IsUndoEnabled() )
pOwner->InsertUndo( new OutlinerUndoCheckPara( pOwner, nPara ) );
}
if( !pOwner->IsInUndo() && pOwner->IsUndoEnabled() )
pOwner->UndoActionEnd( OLUNDO_ATTR );
pEditView->SetEditEngineUpdateMode( bUpdate );
}
ParaRange OutlinerView::ImpGetSelectedParagraphs( BOOL bIncludeHiddenChilds )
{
DBG_CHKTHIS( OutlinerView, 0 );
ESelection aSel = pEditView->GetSelection();
ParaRange aParas( aSel.nStartPara, aSel.nEndPara );
aParas.Adjust();
2011-02-16 16:34:02 -05:00
// Record the invisible Children of the last Parents in the selection
2000-09-18 16:07:07 +00:00
if ( bIncludeHiddenChilds )
{
Paragraph* pLast = pOwner->pParaList->GetParagraph( aParas.nEndPara );
if ( pOwner->pParaList->HasHiddenChilds( pLast ) )
aParas.nEndPara =
sal::static_int_cast< USHORT >(
aParas.nEndPara +
pOwner->pParaList->GetChildCount( pLast ) );
2000-09-18 16:07:07 +00:00
}
return aParas;
}
2011-02-16 16:34:02 -05:00
// TODO: Name should be changed!
2000-09-18 16:07:07 +00:00
void OutlinerView::AdjustDepth( short nDX )
{
Indent( nDX );
}
void OutlinerView::Indent( short nDiff )
{
DBG_CHKTHIS( OutlinerView, 0 );
if( !nDiff || ( ( nDiff > 0 ) && ImpCalcSelectedPages( TRUE ) && !pOwner->ImpCanIndentSelectedPages( this ) ) )
return;
const bool bOutlinerView = pOwner->pEditEngine->GetControlWord() & EE_CNTRL_OUTLINER;
2000-09-18 16:07:07 +00:00
BOOL bUpdate = pOwner->pEditEngine->GetUpdateMode();
pOwner->pEditEngine->SetUpdateMode( FALSE );
BOOL bUndo = !pOwner->IsInUndo() && pOwner->IsUndoEnabled();
if( bUndo )
pOwner->UndoActionStart( OLUNDO_DEPTH );
2011-02-16 16:34:02 -05:00
sal_Int16 nMinDepth = -1; // Optimization: Not to recalculate to manny parargaphs when not really needed.
2000-09-18 16:07:07 +00:00
ParaRange aSel = ImpGetSelectedParagraphs( TRUE );
for ( USHORT nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
sal_Int16 nOldDepth = pPara->GetDepth();
sal_Int16 nNewDepth = nOldDepth + nDiff;
if( bOutlinerView && nPara )
2000-09-18 16:07:07 +00:00
{
const bool bPage = pPara->HasFlag(PARAFLAG_ISPAGE);
if( (bPage && (nDiff == +1)) || (!bPage && (nDiff == -1) && (nOldDepth <= 0)) )
{
2011-02-16 16:34:02 -05:00
// Notify App
pOwner->nDepthChangedHdlPrevDepth = (sal_Int16)nOldDepth;
pOwner->mnDepthChangeHdlPrevFlags = pPara->nFlags;
pOwner->pHdlParagraph = pPara;
if( bPage )
pPara->RemoveFlag( PARAFLAG_ISPAGE );
else
pPara->SetFlag( PARAFLAG_ISPAGE );
pOwner->DepthChangedHdl();
pOwner->pEditEngine->QuickMarkInvalid( ESelection( nPara, 0, nPara, 0 ) );
if( bUndo )
pOwner->InsertUndo( new OutlinerUndoChangeParaFlags( pOwner, nPara, pOwner->mnDepthChangeHdlPrevFlags, pPara->nFlags ) );
continue;
}
2000-09-18 16:07:07 +00:00
}
// do not switch off numeration with tab
if( (nOldDepth == 0) && (nNewDepth == -1) )
continue;
// do not indent if there is no numeration enabled
if( nOldDepth == -1 )
continue;
2000-09-18 16:07:07 +00:00
if ( nNewDepth < pOwner->nMinDepth )
nNewDepth = pOwner->nMinDepth;
if ( nNewDepth > pOwner->nMaxDepth )
nNewDepth = pOwner->nMaxDepth;
if( nOldDepth < nMinDepth )
nMinDepth = nOldDepth;
if( nNewDepth < nMinDepth )
nMinDepth = nNewDepth;
if( nOldDepth != nNewDepth )
{
2001-03-20 08:08:06 +00:00
if ( ( nPara == aSel.nStartPara ) && aSel.nStartPara && ( pOwner->ImplGetOutlinerMode() != OUTLINERMODE_TEXTOBJECT ))
2000-09-18 16:07:07 +00:00
{
2011-02-16 16:34:02 -05:00
// Special case: the predecessor of an indented paragraph is
// invisible and is now on the same level as the visible
// paragraph. In this case, the next visible paragraph is
// searched for and fluffed.
#ifdef DBG_UTIL
Paragraph* _pPara = pOwner->pParaList->GetParagraph( aSel.nStartPara );
DBG_ASSERT(_pPara->IsVisible(),"Selected Paragraph invisible ?!");
#endif
2000-09-18 16:07:07 +00:00
Paragraph* pPrev= pOwner->pParaList->GetParagraph( aSel.nStartPara-1 );
if( !pPrev->IsVisible() && ( pPrev->GetDepth() == nNewDepth ) )
{
2011-02-16 16:34:02 -05:00
// Predecessor is collapsed and is on the same level
// => find next visible paragraph and expand it
pPrev = pOwner->pParaList->GetParent( pPrev );
2000-09-18 16:07:07 +00:00
while( !pPrev->IsVisible() )
pPrev = pOwner->pParaList->GetParent( pPrev );
2000-09-18 16:07:07 +00:00
pOwner->Expand( pPrev );
pOwner->InvalidateBullet( pPrev, pOwner->pParaList->GetAbsPos( pPrev ) );
}
}
pOwner->nDepthChangedHdlPrevDepth = (sal_Int16)nOldDepth;
pOwner->mnDepthChangeHdlPrevFlags = pPara->nFlags;
pOwner->pHdlParagraph = pPara;
2000-09-18 16:07:07 +00:00
pOwner->ImplInitDepth( nPara, nNewDepth, TRUE, FALSE );
pOwner->ImplCalcBulletText( nPara, FALSE, FALSE );
if ( pOwner->ImplGetOutlinerMode() == OUTLINERMODE_OUTLINEOBJECT )
pOwner->ImplSetLevelDependendStyleSheet( nPara );
2011-02-16 16:34:02 -05:00
// Notify App
2000-09-18 16:07:07 +00:00
pOwner->DepthChangedHdl();
}
else
{
// Needs at least a repaint...
pOwner->pEditEngine->QuickMarkInvalid( ESelection( nPara, 0, nPara, 0 ) );
}
2000-09-18 16:07:07 +00:00
}
USHORT nParas = (USHORT)pOwner->pParaList->GetParagraphCount();
for ( USHORT n = aSel.nEndPara+1; n < nParas; n++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( n );
if ( pPara->GetDepth() < nMinDepth )
break;
pOwner->ImplCalcBulletText( n, FALSE, FALSE );
}
if ( bUpdate )
{
pEditView->SetEditEngineUpdateMode( TRUE );
pEditView->ShowCursor();
}
if( bUndo )
pOwner->UndoActionEnd( OLUNDO_DEPTH );
}
BOOL OutlinerView::AdjustHeight( long nDY )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->MoveParagraphs( nDY );
return TRUE; // remove return value...
2000-09-18 16:07:07 +00:00
}
void OutlinerView::AdjustDepth( Paragraph* pPara, short nDX, BOOL bWithChilds)
{
DBG_CHKTHIS(OutlinerView,0);
ULONG nStartPara = pOwner->pParaList->GetAbsPos( pPara );
ULONG nEndPara = nStartPara;
if ( bWithChilds )
nEndPara += pOwner->pParaList->GetChildCount( pPara );
ESelection aSel((USHORT)nStartPara, 0,(USHORT)nEndPara, 0xffff );
pEditView->SetSelection( aSel );
AdjustDepth( nDX );
}
void OutlinerView::AdjustHeight( Paragraph* pPara, long nDY, BOOL bWithChilds )
{
DBG_CHKTHIS(OutlinerView,0);
ULONG nStartPara = pOwner->pParaList->GetAbsPos( pPara );
ULONG nEndPara = nStartPara;
if ( bWithChilds )
nEndPara += pOwner->pParaList->GetChildCount( pPara );
ESelection aSel( (USHORT)nStartPara, 0, (USHORT)nEndPara, 0xffff );
pEditView->SetSelection( aSel );
AdjustHeight( nDY );
}
Rectangle OutlinerView::GetVisArea() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetVisArea();
}
Point OutlinerView::ImpGetDocPos( const Point& rPosPixel )
{
DBG_CHKTHIS(OutlinerView,0);
Rectangle aOutArWin = GetOutputArea();
2011-02-16 16:34:02 -05:00
// Calculate position in the OutputArea
2000-09-18 16:07:07 +00:00
Point aCurPosDoc( rPosPixel );
aCurPosDoc = pEditView->GetWindow()->PixelToLogic( aCurPosDoc );
aCurPosDoc -= aOutArWin.TopLeft();
aCurPosDoc += pEditView->GetVisArea().TopLeft();
return aCurPosDoc;
}
void OutlinerView::ImpDragScroll( const Point& rPosPix )
{
DBG_CHKTHIS(OutlinerView,0);
Point aPosWin = pEditView->GetWindow()->PixelToLogic( rPosPix );
Rectangle aOutputArWin = pEditView->GetOutputArea();
if ( aPosWin.X() <= aOutputArWin.Left() + nDDScrollLRBorderWidthWin)
ImpScrollLeft();
else if( aPosWin.X() >= aOutputArWin.Right()- nDDScrollLRBorderWidthWin)
ImpScrollRight();
else if( aPosWin.Y() <= aOutputArWin.Top() + nDDScrollTBBorderWidthWin)
ImpScrollUp();
else if(aPosWin.Y() >= aOutputArWin.Bottom() - nDDScrollTBBorderWidthWin)
ImpScrollDown();
}
void OutlinerView::ImpScrollLeft()
{
DBG_CHKTHIS(OutlinerView,0);
Rectangle aVisArea( pEditView->GetVisArea() );
long nMaxScrollOffs = aVisArea.Left();
if ( !nMaxScrollOffs )
return;
long nScrollOffsRef = (aVisArea.GetWidth() * OL_SCROLL_HOROFFSET) / 100;
if ( !nScrollOffsRef )
nScrollOffsRef = 1;
if ( nScrollOffsRef > nMaxScrollOffs )
nScrollOffsRef = nMaxScrollOffs;
ImpHideDDCursor();
Scroll( -nScrollOffsRef, 0 );
EditStatus aScrollStat;
aScrollStat.GetStatusWord() = EE_STAT_HSCROLL;
pOwner->pEditEngine->GetStatusEventHdl().Call( &aScrollStat );
}
void OutlinerView::ImpScrollRight()
{
DBG_CHKTHIS(OutlinerView,0);
Rectangle aVisArea( pEditView->GetVisArea() );
long nMaxScrollOffs = pOwner->pEditEngine->GetPaperSize().Width() -
aVisArea.Right();
if ( !nMaxScrollOffs )
return;
long nScrollOffsRef = (aVisArea.GetWidth() * OL_SCROLL_HOROFFSET) / 100;
if ( !nScrollOffsRef )
nScrollOffsRef = 1;
if ( nScrollOffsRef > nMaxScrollOffs )
nScrollOffsRef = nMaxScrollOffs;
ImpHideDDCursor();
Scroll( nScrollOffsRef, 0 );
EditStatus aScrollStat;
aScrollStat.GetStatusWord() = EE_STAT_HSCROLL;
pOwner->pEditEngine->GetStatusEventHdl().Call( &aScrollStat );
}
void OutlinerView::ImpScrollDown()
{
DBG_CHKTHIS(OutlinerView,0);
Rectangle aVisArea( pEditView->GetVisArea() );
Size aDocSize( 0, (long)pOwner->pEditEngine->GetTextHeight() );
long nMaxScrollOffs = aDocSize.Height();
nMaxScrollOffs -= aVisArea.Top();
nMaxScrollOffs -= aVisArea.GetHeight();
if ( !nMaxScrollOffs )
return;
long nScrollOffsRef = (aVisArea.GetHeight() * OL_SCROLL_VEROFFSET) / 100;
if ( nScrollOffsRef > nMaxScrollOffs )
nScrollOffsRef = nMaxScrollOffs;
if ( !nScrollOffsRef )
nScrollOffsRef = 1;
ImpHideDDCursor();
Scroll( 0, -nScrollOffsRef );
EditStatus aScrollStat;
aScrollStat.GetStatusWord() = EE_STAT_VSCROLL;
pOwner->pEditEngine->GetStatusEventHdl().Call( &aScrollStat );
}
void OutlinerView::ImpScrollUp()
{
DBG_CHKTHIS(OutlinerView,0);
Rectangle aVisArea( pEditView->GetVisArea() );
long nMaxScrollOffs = aVisArea.Top();
if ( !nMaxScrollOffs )
return;
long nScrollOffsRef = (aVisArea.GetHeight() * OL_SCROLL_VEROFFSET) / 100;
if ( nScrollOffsRef > nMaxScrollOffs )
nScrollOffsRef = nMaxScrollOffs;
if ( !nScrollOffsRef )
nScrollOffsRef = 1;
ImpHideDDCursor();
Scroll( 0, nScrollOffsRef );
EditStatus aScrollStat;
aScrollStat.GetStatusWord() = EE_STAT_VSCROLL;
pOwner->pEditEngine->GetStatusEventHdl().Call( &aScrollStat );
}
void OutlinerView::Expand()
{
DBG_CHKTHIS( OutlinerView, 0 );
ParaRange aParas = ImpGetSelectedParagraphs( FALSE );
ImplExpandOrCollaps( aParas.nStartPara, aParas.nEndPara, TRUE );
}
void OutlinerView::Collapse()
{
DBG_CHKTHIS( OutlinerView, 0 );
ParaRange aParas = ImpGetSelectedParagraphs( FALSE );
ImplExpandOrCollaps( aParas.nStartPara, aParas.nEndPara, FALSE );
}
void OutlinerView::ExpandAll()
{
DBG_CHKTHIS( OutlinerView, 0 );
ImplExpandOrCollaps( 0, (USHORT)(pOwner->pParaList->GetParagraphCount()-1), TRUE );
}
void OutlinerView::CollapseAll()
{
DBG_CHKTHIS(OutlinerView,0);
ImplExpandOrCollaps( 0, (USHORT)(pOwner->pParaList->GetParagraphCount()-1), FALSE );
}
void OutlinerView::ImplExpandOrCollaps( USHORT nStartPara, USHORT nEndPara, BOOL bExpand )
{
DBG_CHKTHIS( OutlinerView, 0 );
BOOL bUpdate = pOwner->GetUpdateMode();
pOwner->SetUpdateMode( FALSE );
BOOL bUndo = !pOwner->IsInUndo() && pOwner->IsUndoEnabled();
if( bUndo )
pOwner->UndoActionStart( bExpand ? OLUNDO_EXPAND : OLUNDO_COLLAPSE );
for ( USHORT nPara = nStartPara; nPara <= nEndPara; nPara++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
BOOL bDone = bExpand ? pOwner->Expand( pPara ) : pOwner->Collapse( pPara );
if( bDone )
{
2011-02-16 16:34:02 -05:00
// The line under the paragraph should disappear ...
2000-09-18 16:07:07 +00:00
pOwner->pEditEngine->QuickMarkToBeRepainted( nPara );
}
}
if( bUndo )
pOwner->UndoActionEnd( bExpand ? OLUNDO_EXPAND : OLUNDO_COLLAPSE );
if ( bUpdate )
{
pOwner->SetUpdateMode( TRUE );
pEditView->ShowCursor();
}
}
void OutlinerView::Expand( Paragraph* pPara)
{
DBG_CHKTHIS(OutlinerView,0);
pOwner->Expand( pPara );
}
void OutlinerView::Collapse( Paragraph* pPara)
{
DBG_CHKTHIS(OutlinerView,0);
pOwner->Collapse( pPara );
}
void OutlinerView::InsertText( const OutlinerParaObject& rParaObj )
{
2011-02-16 16:34:02 -05:00
// Like Paste, only EditView::Insert, instead of EditView::Paste.
// Actually not quite true that possible indentations must be corrected,
// but that comes later by a universal import. The indentation level is
// then determined right in the Inserted method.
// Possible structure:
// pImportInfo with DestPara, DestPos, nFormat, pParaObj...
// Possibly problematic:
// EditEngine, RTF => Splitting the area, later join together.
2000-09-18 16:07:07 +00:00
DBG_CHKTHIS(OutlinerView,0);
if ( ImpCalcSelectedPages( FALSE ) && !pOwner->ImpCanDeleteSelectedPages( this ) )
return;
pOwner->UndoActionStart( OLUNDO_INSERT );
pOwner->pEditEngine->SetUpdateMode( FALSE );
ULONG nStart, nParaCount;
nParaCount = pOwner->pEditEngine->GetParagraphCount();
USHORT nSize = ImpInitPaste( nStart );
pEditView->InsertText( rParaObj.GetTextObject() );
ImpPasted( nStart, nParaCount, nSize);
pEditView->SetEditEngineUpdateMode( TRUE );
pOwner->UndoActionEnd( OLUNDO_INSERT );
pEditView->ShowCursor( TRUE, TRUE );
}
void OutlinerView::Cut()
{
DBG_CHKTHIS(OutlinerView,0);
if ( !ImpCalcSelectedPages( FALSE ) || pOwner->ImpCanDeleteSelectedPages( this ) )
pEditView->Cut();
}
void OutlinerView::Paste()
{
DBG_CHKTHIS(OutlinerView,0);
2011-02-16 16:34:02 -05:00
PasteSpecial(); // HACK(SD does not call PasteSpecial)
2000-09-18 16:07:07 +00:00
}
void OutlinerView::PasteSpecial()
{
DBG_CHKTHIS(OutlinerView,0);
if ( !ImpCalcSelectedPages( FALSE ) || pOwner->ImpCanDeleteSelectedPages( this ) )
{
pOwner->UndoActionStart( OLUNDO_INSERT );
pOwner->pEditEngine->SetUpdateMode( FALSE );
2001-11-14 10:01:23 +00:00
pOwner->bPasting = TRUE;
2000-09-18 16:07:07 +00:00
pEditView->PasteSpecial();
CWS-TOOLING: integrate CWS impress177 2009-10-07 13:02:12 +0200 sj r276751 : #i104579# fixed horz and vert adjustment for master styles (excluding notes master) 2009-10-06 18:09:14 +0200 sj r276724 : #i104579# fixed horz and vert adjustment for master styles 2009-10-05 15:02:38 +0200 sj r276679 : #i104685# fixed text color problem 2009-10-02 14:01:22 +0200 aw r276641 : #i105508# added own flag for ClipOnBounds to SdrBlockTextPrimitive2D and the helper createTextPrimitive; adapted usages; corrected VerticalText stuff; corrected ClipOnBounds for CustomShapes 2009-09-30 11:55:44 +0200 cl r276550 : CWS-TOOLING: rebase CWS impress177 to trunk@276429 (milestone: DEV300:m60) 2009-09-28 17:57:37 +0200 cl r276498 : #i94900# after a paste special make sure the stylesheets for outline shapes are correct 2009-09-24 17:36:29 +0200 af r276425 : #i103464# Restore device more reliably. 2009-09-24 12:29:31 +0200 sj r276417 : #i104685# fixed text color propblem 2009-09-22 16:48:06 +0200 sj r276360 : #i104682# fixed table border line thickness 2009-09-22 16:46:29 +0200 sj r276359 : #i104682# fixed table border line thickness 2009-09-22 10:29:30 +0200 sj r276346 : #104579# fixed horz and vert adjustment for master styles 2009-09-21 14:18:29 +0200 af r276330 : #i100905# Fixed crash when region is split into bands. 2009-09-15 15:44:30 +0200 cl r276181 : #i103179# always hide presentation shapes from master page if rendered as slide background 2009-09-15 10:44:52 +0200 cl r276155 : #i104579# return correct IsEmptyPresObj state 2009-09-14 16:51:41 +0200 cl r276132 : #i96538# restored OOo 3.0 numbering behaviour
2009-10-14 15:14:05 +00:00
if ( pOwner->ImplGetOutlinerMode() == OUTLINERMODE_OUTLINEOBJECT )
{
const USHORT nParaCount = pOwner->pEditEngine->GetParagraphCount();
for( USHORT nPara = 0; nPara < nParaCount; nPara++ )
pOwner->ImplSetLevelDependendStyleSheet( nPara );
}
2001-11-14 10:01:23 +00:00
pEditView->SetEditEngineUpdateMode( TRUE );
2000-09-18 16:07:07 +00:00
pOwner->UndoActionEnd( OLUNDO_INSERT );
pEditView->ShowCursor( TRUE, TRUE );
}
}
List* OutlinerView::CreateSelectionList()
{
DBG_CHKTHIS( OutlinerView, 0 );
ParaRange aParas = ImpGetSelectedParagraphs( TRUE );
List* pSelList = new List;
for ( USHORT nPara = aParas.nStartPara; nPara <= aParas.nEndPara; nPara++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
pSelList->Insert( pPara, LIST_APPEND );
}
return pSelList;
}
SfxStyleSheet* OutlinerView::GetStyleSheet() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetStyleSheet();
}
void OutlinerView::SetStyleSheet( SfxStyleSheet* pStyle )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetStyleSheet( pStyle );
ParaRange aSel = ImpGetSelectedParagraphs( TRUE );
for( USHORT nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
{
pOwner->ImplCheckNumBulletItem( nPara );
pOwner->ImplCalcBulletText( nPara, FALSE, FALSE );
}
}
Pointer OutlinerView::GetPointer( const Point& rPosPixel )
{
DBG_CHKTHIS(OutlinerView,0);
2002-07-24 12:18:20 +00:00
2000-09-18 16:07:07 +00:00
MouseTarget eTarget;
ImpCheckMousePos( rPosPixel, eTarget );
2002-07-24 12:18:20 +00:00
PointerStyle ePointerStyle = POINTER_ARROW;
if ( eTarget == MouseText )
{
ePointerStyle = GetOutliner()->IsVertical() ? POINTER_TEXT_VERTICAL : POINTER_TEXT;
}
else if ( eTarget == MouseHypertext )
{
ePointerStyle = POINTER_REFHAND;
}
else if ( eTarget == MouseBullet )
{
ePointerStyle = POINTER_MOVE;
}
return Pointer( ePointerStyle );
2000-09-18 16:07:07 +00:00
}
USHORT OutlinerView::ImpInitPaste( ULONG& rStart )
{
DBG_CHKTHIS(OutlinerView,0);
pOwner->bPasting = TRUE;
ESelection aSelection( pEditView->GetSelection() );
aSelection.Adjust();
rStart = aSelection.nStartPara;
USHORT nSize = aSelection.nEndPara - aSelection.nStartPara + 1;
return nSize;
}
void OutlinerView::ImpPasted( ULONG nStart, ULONG nPrevParaCount, USHORT nSize)
{
DBG_CHKTHIS(OutlinerView,0);
pOwner->bPasting = FALSE;
ULONG nCurParaCount = (ULONG)pOwner->pEditEngine->GetParagraphCount();
if( nCurParaCount < nPrevParaCount )
nSize = sal::static_int_cast< USHORT >(
nSize - ( nPrevParaCount - nCurParaCount ) );
2000-09-18 16:07:07 +00:00
else
nSize = sal::static_int_cast< USHORT >(
nSize + ( nCurParaCount - nPrevParaCount ) );
2000-09-18 16:07:07 +00:00
pOwner->ImpTextPasted( nStart, nSize );
}
void OutlinerView::Command( const CommandEvent& rCEvt )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->Command( rCEvt );
2000-09-18 16:07:07 +00:00
}
void OutlinerView::SelectRange( ULONG nFirst, USHORT nCount )
{
DBG_CHKTHIS(OutlinerView,0);
ULONG nLast = nFirst+nCount;
nCount = (USHORT)pOwner->pParaList->GetParagraphCount();
if( nLast <= nCount )
nLast = nCount - 1;
ESelection aSel( (USHORT)nFirst, 0, (USHORT)nLast, 0xffff );
pEditView->SetSelection( aSel );
}
USHORT OutlinerView::ImpCalcSelectedPages( BOOL bIncludeFirstSelected )
{
DBG_CHKTHIS(OutlinerView,0);
ESelection aSel( pEditView->GetSelection() );
aSel.Adjust();
USHORT nPages = 0;
USHORT nFirstPage = 0xFFFF;
USHORT nStartPara = aSel.nStartPara;
if ( !bIncludeFirstSelected )
2011-02-16 16:34:02 -05:00
nStartPara++; // All paragraphs after StartPara will be deleted
2000-09-18 16:07:07 +00:00
for ( USHORT nPara = nStartPara; nPara <= aSel.nEndPara; nPara++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
2011-02-16 16:34:02 -05:00
DBG_ASSERT(pPara, "ImpCalcSelectedPages: invalid Selection? ");
if( pPara->HasFlag(PARAFLAG_ISPAGE) )
2000-09-18 16:07:07 +00:00
{
nPages++;
if( nFirstPage == 0xFFFF )
nFirstPage = nPara;
}
}
if( nPages )
{
pOwner->nDepthChangedHdlPrevDepth = nPages;
pOwner->pHdlParagraph = 0;
pOwner->mnFirstSelPage = nFirstPage;
2000-09-18 16:07:07 +00:00
}
return nPages;
}
void OutlinerView::ToggleBullets()
2000-09-18 16:07:07 +00:00
{
pOwner->UndoActionStart( OLUNDO_DEPTH );
2000-09-18 16:07:07 +00:00
ESelection aSel( pEditView->GetSelection() );
aSel.Adjust();
const bool bUpdate = pOwner->pEditEngine->GetUpdateMode();
2000-09-18 16:07:07 +00:00
pOwner->pEditEngine->SetUpdateMode( FALSE );
sal_Int16 nDepth = -2;
2000-09-18 16:07:07 +00:00
for ( USHORT nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
DBG_ASSERT(pPara, "OutlinerView::ToggleBullets(), illegal selection?");
if( pPara )
2000-09-18 16:07:07 +00:00
{
if( nDepth == -2 )
nDepth = (pOwner->GetDepth(nPara) == -1) ? 0 : -1;
pOwner->SetDepth( pPara, nDepth );
if( nDepth == -1 )
2000-09-18 16:07:07 +00:00
{
const SfxItemSet& rAttrs = pOwner->GetParaAttribs( nPara );
if(rAttrs.GetItemState( EE_PARA_BULLETSTATE ) == SFX_ITEM_SET)
{
SfxItemSet aAttrs(rAttrs);
aAttrs.ClearItem( EE_PARA_BULLETSTATE );
pOwner->SetParaAttribs( nPara, aAttrs );
}
2000-09-18 16:07:07 +00:00
}
}
}
2010-10-04 16:20:36 +02:00
// #i100014#
// It is not a good idea to substract 1 from a count and cast the result
// to USHORT without check, if the count is 0.
USHORT nParaCount = (USHORT) (pOwner->pParaList->GetParagraphCount());
pOwner->ImplCheckParagraphs( aSel.nStartPara, nParaCount );
pOwner->pEditEngine->QuickMarkInvalid( ESelection( aSel.nStartPara, 0, nParaCount, 0 ) );
2000-09-18 16:07:07 +00:00
pOwner->pEditEngine->SetUpdateMode( bUpdate );
pOwner->UndoActionEnd( OLUNDO_DEPTH );
2000-09-18 16:07:07 +00:00
}
void OutlinerView::EnableBullets()
{
pOwner->UndoActionStart( OLUNDO_DEPTH );
ESelection aSel( pEditView->GetSelection() );
aSel.Adjust();
const bool bUpdate = pOwner->pEditEngine->GetUpdateMode();
pOwner->pEditEngine->SetUpdateMode( FALSE );
for ( USHORT nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
DBG_ASSERT(pPara, "OutlinerView::ToggleBullets(), illegal selection?");
if( pPara && (pOwner->GetDepth(nPara) == -1) )
{
pOwner->SetDepth( pPara, 0 );
}
}
2010-10-04 16:20:36 +02:00
// #i100014#
// It is not a good idea to substract 1 from a count and cast the result
// to USHORT without check, if the count is 0.
USHORT nParaCount = (USHORT) (pOwner->pParaList->GetParagraphCount());
pOwner->ImplCheckParagraphs( aSel.nStartPara, nParaCount );
pOwner->pEditEngine->QuickMarkInvalid( ESelection( aSel.nStartPara, 0, nParaCount, 0 ) );
pOwner->pEditEngine->SetUpdateMode( bUpdate );
pOwner->UndoActionEnd( OLUNDO_DEPTH );
}
void OutlinerView::RemoveAttribsKeepLanguages( BOOL bRemoveParaAttribs )
{
RemoveAttribs( bRemoveParaAttribs, 0, TRUE /*keep language attribs*/ );
}
void OutlinerView::RemoveAttribs( BOOL bRemoveParaAttribs, USHORT nWhich, BOOL bKeepLanguages )
2000-09-18 16:07:07 +00:00
{
DBG_CHKTHIS(OutlinerView,0);
BOOL bUpdate = pOwner->GetUpdateMode();
pOwner->SetUpdateMode( FALSE );
pOwner->UndoActionStart( OLUNDO_ATTR );
if (bKeepLanguages)
pEditView->RemoveAttribsKeepLanguages( bRemoveParaAttribs );
else
pEditView->RemoveAttribs( bRemoveParaAttribs, nWhich );
2000-09-18 16:07:07 +00:00
if ( bRemoveParaAttribs )
{
2011-02-16 16:34:02 -05:00
// Loop through all paragraphs and set indentation and level
2000-09-18 16:07:07 +00:00
ESelection aSel = pEditView->GetSelection();
aSel.Adjust();
for ( USHORT nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
{
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
pOwner->ImplInitDepth( nPara, pPara->GetDepth(), FALSE, FALSE );
2000-09-18 16:07:07 +00:00
}
}
pOwner->UndoActionEnd( OLUNDO_ATTR );
pOwner->SetUpdateMode( bUpdate );
}
2011-02-16 16:34:02 -05:00
// ======================================================================
// ====================== Simple pass-through =======================
2000-09-18 16:07:07 +00:00
// ======================================================================
void OutlinerView::InsertText( const XubString& rNew, BOOL bSelect )
{
DBG_CHKTHIS(OutlinerView,0);
if( pOwner->bFirstParaIsEmpty )
pOwner->Insert( String() );
pEditView->InsertText( rNew, bSelect );
}
void OutlinerView::SetVisArea( const Rectangle& rRec )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetVisArea( rRec );
}
void OutlinerView::SetSelection( const ESelection& rSel )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetSelection( rSel );
}
void OutlinerView::SetReadOnly( BOOL bReadOnly )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetReadOnly( bReadOnly );
}
BOOL OutlinerView::IsReadOnly() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->IsReadOnly();
}
BOOL OutlinerView::HasSelection() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->HasSelection();
}
void OutlinerView::ShowCursor( BOOL bGotoCursor )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->ShowCursor( bGotoCursor );
}
void OutlinerView::HideCursor()
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->HideCursor();
}
void OutlinerView::SetWindow( Window* pWin )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetWindow( pWin );
}
Window* OutlinerView::GetWindow() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetWindow();
}
void OutlinerView::SetOutputArea( const Rectangle& rRect )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetOutputArea( rRect );
}
Rectangle OutlinerView::GetOutputArea() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetOutputArea();
}
XubString OutlinerView::GetSelected() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetSelected();
}
void OutlinerView::RemoveCharAttribs( ULONG nPara, USHORT nWhich)
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->RemoveCharAttribs( (USHORT)nPara, nWhich);
}
void OutlinerView::CompleteAutoCorrect()
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->CompleteAutoCorrect();
}
EESpellState OutlinerView::StartSpeller( BOOL bMultiDoc )
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->StartSpeller( bMultiDoc );
}
EESpellState OutlinerView::StartThesaurus()
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->StartThesaurus();
}
void OutlinerView::StartTextConversion(
LanguageType nSrcLang, LanguageType nDestLang, const Font *pDestFont,
INT32 nOptions, BOOL bIsInteractive, BOOL bMultipleDoc )
{
DBG_CHKTHIS(OutlinerView,0);
CWS-TOOLING: integrate CWS cmcfixes51 2008-12-08 10:12:55 +0100 cmc r264975 : #i96203# protect with ifdefs to avoid unused symbol on mac 2008-12-05 12:23:47 +0100 cmc r264898 : CWS-TOOLING: rebase CWS cmcfixes51 to trunk@264807 (milestone: DEV300:m37) 2008-12-01 14:45:17 +0100 cmc r264606 : #i76655# ehlos apparently required 2008-11-28 17:49:30 +0100 cmc r264567 : #i96655# remove newly unused method 2008-11-28 10:41:28 +0100 cmc r264531 : #i96647# better ppc-bridges flushCode impl 2008-11-27 12:58:40 +0100 cmc r264478 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:32:49 +0100 cmc r264476 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:26:02 +0100 cmc r264475 : #i96655# redundant old table export helpers 2008-11-27 11:49:06 +0100 cmc r264473 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:38:35 +0100 cmc r264471 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:14:21 +0100 cmc r264467 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:06:22 +0100 cmc r264464 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:58:18 +0100 cmc r264462 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:41:44 +0100 cmc r264461 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:19:24 +0100 cmc r264460 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:13:39 +0100 cmc r264459 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:06:14 +0100 cmc r264458 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:59:54 +0100 cmc r264457 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:52:51 +0100 cmc r264456 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:48:26 +0100 cmc r264454 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:40:20 +0100 cmc r264452 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:35:26 +0100 cmc r264451 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:31:00 +0100 cmc r264450 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:24:08 +0100 cmc r264449 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:26:15 +0100 cmc r264443 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:21:01 +0100 cmc r264442 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:09:40 +0100 cmc r264441 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:51:56 +0100 cmc r264440 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:49:09 +0100 cmc r264439 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:09:54 +0100 cmc r264432 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:07:40 +0100 cmc r264431 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:28:02 +0100 cmc r264429 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:27:39 +0100 cmc r264428 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:18:36 +0100 cmc r264426 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 16:22:16 +0100 cmc r264415 : #i96624# make implicit braces and brackets explicit to avoid warnings 2008-11-26 16:00:23 +0100 cmc r264409 : #i90426# remove warnings from svtools 2008-11-26 15:59:17 +0100 cmc r264408 : #i90426# remove warnings 2008-11-26 15:47:32 +0100 cmc r264404 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:46:57 +0100 cmc r264394 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:19:50 +0100 cmc r264387 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:15:26 +0100 cmc r264386 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:11:26 +0100 cmc r264384 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:44:23 +0100 cmc r264380 : #i96084# comfirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:12:24 +0100 cmc r264372 : #i96604# silence new warnings 2008-11-26 12:35:02 +0100 cmc r264369 : #i96203# make qstarter work in 3-layer land 2008-11-26 12:33:04 +0100 cmc r264368 : #i96170# ensure gtypes are up and running
2008-12-11 07:05:03 +00:00
if (
(LANGUAGE_KOREAN == nSrcLang && LANGUAGE_KOREAN == nDestLang) ||
(LANGUAGE_CHINESE_SIMPLIFIED == nSrcLang && LANGUAGE_CHINESE_TRADITIONAL == nDestLang) ||
(LANGUAGE_CHINESE_TRADITIONAL == nSrcLang && LANGUAGE_CHINESE_SIMPLIFIED == nDestLang)
)
{
pEditView->StartTextConversion( nSrcLang, nDestLang, pDestFont, nOptions, bIsInteractive, bMultipleDoc );
CWS-TOOLING: integrate CWS cmcfixes51 2008-12-08 10:12:55 +0100 cmc r264975 : #i96203# protect with ifdefs to avoid unused symbol on mac 2008-12-05 12:23:47 +0100 cmc r264898 : CWS-TOOLING: rebase CWS cmcfixes51 to trunk@264807 (milestone: DEV300:m37) 2008-12-01 14:45:17 +0100 cmc r264606 : #i76655# ehlos apparently required 2008-11-28 17:49:30 +0100 cmc r264567 : #i96655# remove newly unused method 2008-11-28 10:41:28 +0100 cmc r264531 : #i96647# better ppc-bridges flushCode impl 2008-11-27 12:58:40 +0100 cmc r264478 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:32:49 +0100 cmc r264476 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:26:02 +0100 cmc r264475 : #i96655# redundant old table export helpers 2008-11-27 11:49:06 +0100 cmc r264473 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:38:35 +0100 cmc r264471 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:14:21 +0100 cmc r264467 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:06:22 +0100 cmc r264464 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:58:18 +0100 cmc r264462 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:41:44 +0100 cmc r264461 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:19:24 +0100 cmc r264460 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:13:39 +0100 cmc r264459 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:06:14 +0100 cmc r264458 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:59:54 +0100 cmc r264457 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:52:51 +0100 cmc r264456 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:48:26 +0100 cmc r264454 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:40:20 +0100 cmc r264452 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:35:26 +0100 cmc r264451 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:31:00 +0100 cmc r264450 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:24:08 +0100 cmc r264449 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:26:15 +0100 cmc r264443 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:21:01 +0100 cmc r264442 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:09:40 +0100 cmc r264441 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:51:56 +0100 cmc r264440 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:49:09 +0100 cmc r264439 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:09:54 +0100 cmc r264432 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:07:40 +0100 cmc r264431 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:28:02 +0100 cmc r264429 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:27:39 +0100 cmc r264428 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:18:36 +0100 cmc r264426 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 16:22:16 +0100 cmc r264415 : #i96624# make implicit braces and brackets explicit to avoid warnings 2008-11-26 16:00:23 +0100 cmc r264409 : #i90426# remove warnings from svtools 2008-11-26 15:59:17 +0100 cmc r264408 : #i90426# remove warnings 2008-11-26 15:47:32 +0100 cmc r264404 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:46:57 +0100 cmc r264394 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:19:50 +0100 cmc r264387 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:15:26 +0100 cmc r264386 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:11:26 +0100 cmc r264384 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:44:23 +0100 cmc r264380 : #i96084# comfirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:12:24 +0100 cmc r264372 : #i96604# silence new warnings 2008-11-26 12:35:02 +0100 cmc r264369 : #i96203# make qstarter work in 3-layer land 2008-11-26 12:33:04 +0100 cmc r264368 : #i96170# ensure gtypes are up and running
2008-12-11 07:05:03 +00:00
}
else
{
DBG_ERROR( "unexpected language" );
}
}
2000-09-18 16:07:07 +00:00
USHORT OutlinerView::StartSearchAndReplace( const SvxSearchItem& rSearchItem )
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->StartSearchAndReplace( rSearchItem );
}
2001-02-23 13:02:48 +00:00
void OutlinerView::TransliterateText( sal_Int32 nTransliterationMode )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->TransliterateText( nTransliterationMode );
}
2000-09-18 16:07:07 +00:00
ESelection OutlinerView::GetSelection()
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetSelection();
}
void OutlinerView::Scroll( long nHorzScroll, long nVertScroll )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->Scroll( nHorzScroll, nVertScroll );
}
void OutlinerView::SetControlWord( ULONG nWord )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetControlWord( nWord );
}
ULONG OutlinerView::GetControlWord() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetControlWord();
}
void OutlinerView::SetAnchorMode( EVAnchorMode eMode )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetAnchorMode( eMode );
}
EVAnchorMode OutlinerView::GetAnchorMode() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetAnchorMode();
}
void OutlinerView::Undo()
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->Undo();
}
void OutlinerView::Redo()
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->Redo();
}
void OutlinerView::EnablePaste( BOOL bEnable )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->EnablePaste( bEnable );
}
void OutlinerView::Copy()
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->Copy();
}
void OutlinerView::InsertField( const SvxFieldItem& rFld )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->InsertField( rFld );
}
const SvxFieldItem* OutlinerView::GetFieldUnderMousePointer() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetFieldUnderMousePointer();
}
const SvxFieldItem* OutlinerView::GetFieldUnderMousePointer( USHORT& nPara, USHORT& nPos ) const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetFieldUnderMousePointer( nPara, nPos );
}
const SvxFieldItem* OutlinerView::GetFieldAtSelection() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetFieldAtSelection();
}
void OutlinerView::SetInvalidateMore( USHORT nPixel )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetInvalidateMore( nPixel );
}
USHORT OutlinerView::GetInvalidateMore() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetInvalidateMore();
}
BOOL OutlinerView::IsCursorAtWrongSpelledWord( BOOL bMarkIfWrong )
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->IsCursorAtWrongSpelledWord( bMarkIfWrong );
}
BOOL OutlinerView::IsWrongSpelledWordAtPos( const Point& rPosPixel, BOOL bMarkIfWrong )
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->IsWrongSpelledWordAtPos( rPosPixel, bMarkIfWrong );
}
void OutlinerView::SpellIgnoreWord()
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SpellIgnoreWord();
}
void OutlinerView::ExecuteSpellPopup( const Point& rPosPixel, Link* pStartDlg )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->ExecuteSpellPopup( rPosPixel, pStartDlg );
}
ULONG OutlinerView::Read( SvStream& rInput, const String& rBaseURL, EETextFormat eFormat, BOOL bSelect, SvKeyValueIterator* pHTTPHeaderAttrs )
2000-09-18 16:07:07 +00:00
{
DBG_CHKTHIS(OutlinerView,0);
USHORT nOldParaCount = pEditView->GetEditEngine()->GetParagraphCount();
ESelection aOldSel = pEditView->GetSelection();
aOldSel.Adjust();
ULONG nRet = pEditView->Read( rInput, rBaseURL, eFormat, bSelect, pHTTPHeaderAttrs );
2000-09-18 16:07:07 +00:00
long nParaDiff = pEditView->GetEditEngine()->GetParagraphCount() - nOldParaCount;
USHORT nChangesStart = aOldSel.nStartPara;
USHORT nChangesEnd = sal::static_int_cast< USHORT >(nChangesStart + nParaDiff + (aOldSel.nEndPara-aOldSel.nStartPara));
2000-09-18 16:07:07 +00:00
for ( USHORT n = nChangesStart; n <= nChangesEnd; n++ )
{
if ( eFormat == EE_FORMAT_BIN )
{
USHORT nDepth = 0;
const SfxItemSet& rAttrs = pOwner->GetParaAttribs( n );
const SfxInt16Item& rLevel = (const SfxInt16Item&) rAttrs.Get( EE_PARA_OUTLLEVEL );
2000-09-18 16:07:07 +00:00
nDepth = rLevel.GetValue();
pOwner->ImplInitDepth( n, nDepth, FALSE );
}
if ( pOwner->ImplGetOutlinerMode() == OUTLINERMODE_OUTLINEOBJECT )
pOwner->ImplSetLevelDependendStyleSheet( n );
}
if ( eFormat != EE_FORMAT_BIN )
{
pOwner->ImpFilterIndents( nChangesStart, nChangesEnd );
}
return nRet;
}
ULONG OutlinerView::Write( SvStream& rOutput, EETextFormat eFormat )
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->Write( rOutput, eFormat );
}
void OutlinerView::SetBackgroundColor( const Color& rColor )
{
DBG_CHKTHIS(OutlinerView,0);
pEditView->SetBackgroundColor( rColor );
}
Color OutlinerView::GetBackgroundColor()
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetBackgroundColor();
}
SfxItemSet OutlinerView::GetAttribs()
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetAttribs();
}
USHORT OutlinerView::GetSelectedScriptType() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetSelectedScriptType();
}
CWS-TOOLING: integrate CWS impress171 2009-06-02 16:32:02 +0200 cl r272511 : fixed build error 2009-05-29 16:40:09 +0200 cl r272471 : CWS-TOOLING: rebase CWS impress171 to trunk@272291 (milestone: DEV300:m49) 2009-05-19 15:14:08 +0200 sj r272082 : #i101459# applied patch (writing out StyleTextProperties even if no chars given) 2009-05-19 15:09:31 +0200 sj r272081 : #i101459# applied patch (writing out StyleTextProperties even if no chars given) 2009-05-19 15:09:14 +0200 sj r272080 : #i101459# applied patch (writing out StyleTextProperties even if no chars given) 2009-05-18 13:34:05 +0200 sj r272015 : #i47689# fixed rectangles toolbar 2009-05-13 14:59:08 +0200 sj r271862 : #i101563# fixed crash when loading pptx document 2009-05-12 19:31:58 +0200 sj r271835 : #101684# fixed rotation of customshapes 2009-05-08 16:37:01 +0200 sj r271724 : #i101683,i101584,i48160# added shearing of customshapes, fixed rotation problem 2009-04-28 17:32:14 +0200 sj r271335 : #i48160# fixed gluepoint rotation of customshapes 2009-04-27 16:31:54 +0200 cl r271291 : #i100138# applied patch for japanese reconversion feature 2009-04-27 16:30:52 +0200 cl r271290 : #i100138# applied patch for japanese reconversion feature 2009-04-27 16:28:55 +0200 cl r271289 : #i100138# applied patch for japanese reconversion feature 2009-04-23 14:22:59 +0200 cl r271170 : #i95342# #i96820# #i97298# multiple table handling fixes 2009-04-23 14:18:54 +0200 sj r271169 : #i60368# ignoring gamma values for toolbar/menu icons 2009-04-23 11:54:28 +0200 cl r271146 : #i97298# set style to text even during text edit 2009-04-23 11:46:38 +0200 cl r271145 : fixed compiler error with debug 2009-04-22 19:09:37 +0200 sj r271135 : #i101051# applied patch (proper import of notes page object) 2009-04-22 11:07:54 +0200 cl r271082 : #i96820# modify doc after merging cells 2009-04-22 10:57:35 +0200 cl r271081 : #i100307# applied patch from jlcheng to correctly set modfiy state 2009-04-22 10:31:11 +0200 cl r271079 : #i96736# copy merge information on clone 2009-04-21 08:27:22 +0200 cl r271016 : #i89541# use SfxErrorContext to make the ErrorHandler dialog modal 2009-04-20 17:52:56 +0200 cl r271003 : #i98480# removed 'EndPosition' and 'StartPosition' from styles 2009-04-20 16:41:55 +0200 cl r270994 : #i98403# fixed state handling for selected motion path 2009-04-17 11:35:25 +0200 cl r270931 : #i61274# export to pdf should behave like printing considering layer visibility 2009-04-17 10:00:17 +0200 cl r270924 : #i98967# set default style on any new shape except a page obj 2009-04-16 16:28:20 +0200 cl r270893 : #i98859# use percentage type for relative font height
2009-06-17 10:58:14 +00:00
String OutlinerView::GetSurroundingText() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetSurroundingText();
}
Selection OutlinerView::GetSurroundingTextSelection() const
{
DBG_CHKTHIS(OutlinerView,0);
return pEditView->GetSurroundingTextSelection();
}
// ======================================================================
// ===== some code for thesaurus sub menu within context menu
// ======================================================================
// returns: true if a word for thesaurus look-up was found at the current cursor position.
// The status string will be word + iso language string (e.g. "light#en-US")
2010-02-26 13:02:44 +01:00
bool EDITENG_DLLPUBLIC GetStatusValueForThesaurusFromContext(
String &rStatusVal,
LanguageType &rLang,
const EditView &rEditView )
{
// get text and locale for thesaurus look up
String aText;
EditEngine *pEditEngine = rEditView.GetEditEngine();
ESelection aTextSel( rEditView.GetSelection() );
if (!aTextSel.HasRange())
aTextSel = pEditEngine->GetWord( aTextSel, i18n::WordType::DICTIONARY_WORD );
aText = pEditEngine->GetText( aTextSel );
aTextSel.Adjust();
LanguageType nLang = pEditEngine->GetLanguage( aTextSel.nStartPara, aTextSel.nStartPos );
String aLangText( MsLangId::convertLanguageToIsoString( nLang ) );
// set word and locale to look up as status value
String aStatusVal( aText );
aStatusVal.AppendAscii( "#" );
aStatusVal += aLangText;
rStatusVal = aStatusVal;
rLang = nLang;
return aText.Len() > 0;
}
2010-02-26 13:02:44 +01:00
void EDITENG_DLLPUBLIC ReplaceTextWithSynonym( EditView &rEditView, const String &rSynonmText )
{
// get selection to use
ESelection aCurSel( rEditView.GetSelection() );
if (!rEditView.HasSelection())
{
// select the same word that was used in GetStatusValueForThesaurusFromContext by calling GetWord.
// (In the end both functions will call ImpEditEngine::SelectWord)
rEditView.SelectCurrentWord( i18n::WordType::DICTIONARY_WORD );
aCurSel = rEditView.GetSelection();
}
// replace word ...
rEditView.InsertText( rSynonmText );
rEditView.ShowCursor( sal_True, sal_False );
}
2010-02-12 11:22:34 +01:00
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */