2000-09-18 16:07:07 +00:00
|
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
2008-04-11 01:20:06 +00:00
|
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-11 01:20:06 +00:00
|
|
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-11 01:20:06 +00:00
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-11 01:20:06 +00:00
|
|
|
|
* $RCSfile: outlvw.cxx,v $
|
2008-11-20 14:55:36 +00:00
|
|
|
|
* $Revision: 1.34.150.2 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-11 01:20:06 +00:00
|
|
|
|
* This file is part of OpenOffice.org.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-11 01:20:06 +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
|
|
|
|
*
|
2008-04-11 01:20:06 +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
|
|
|
|
*
|
2008-04-11 01:20:06 +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
|
|
|
|
*
|
|
|
|
|
************************************************************************/
|
2006-09-17 04:31:43 +00:00
|
|
|
|
|
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
|
#include "precompiled_svx.hxx"
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <outl_pch.hxx>
|
|
|
|
|
#include <svtools/style.hxx>
|
|
|
|
|
|
|
|
|
|
#define _OUTLINER_CXX
|
2007-06-27 17:42:38 +00:00
|
|
|
|
#include <svx/outliner.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <outleeng.hxx>
|
|
|
|
|
#include <paralist.hxx>
|
|
|
|
|
#include <outlundo.hxx>
|
2007-06-27 17:42:38 +00:00
|
|
|
|
#include <svx/outlobj.hxx>
|
|
|
|
|
#include <svx/flditem.hxx>
|
|
|
|
|
#include <svx/flditem.hxx>
|
|
|
|
|
#include <svx/eeitem.hxx>
|
|
|
|
|
#include <svx/numitem.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <vcl/window.hxx>
|
|
|
|
|
#include <svtools/itemset.hxx>
|
|
|
|
|
#include <editstat.hxx>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Breite der Randzonen innerhalb derer beim D&D gescrollt wird
|
|
|
|
|
#define OL_SCROLL_LRBORDERWIDTHPIX 10
|
|
|
|
|
#define OL_SCROLL_TBBORDERWIDTHPIX 10
|
|
|
|
|
|
|
|
|
|
// Wert, um den Fensterinhalt beim D&D gescrollt wird
|
|
|
|
|
#define OL_SCROLL_HOROFFSET 20 /* in % von VisibleSize.Width */
|
|
|
|
|
#define OL_SCROLL_VEROFFSET 20 /* in % von VisibleSize.Height */
|
|
|
|
|
|
2006-10-12 12:03:10 +00:00
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
// beim ersten Paint/KeyInput/Drop wird aus einem leeren Outliner ein
|
|
|
|
|
// Outliner mit genau einem Absatz
|
|
|
|
|
if( pOwner->bFirstParaIsEmpty )
|
|
|
|
|
pOwner->Insert( String() );
|
|
|
|
|
|
|
|
|
|
pEditView->Paint( rRect );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL OutlinerView::PostKeyEvent( const KeyEvent& rKEvt )
|
|
|
|
|
{
|
|
|
|
|
DBG_CHKTHIS( OutlinerView, 0 );
|
|
|
|
|
|
|
|
|
|
// beim ersten Paint/KeyInput/Drop wird aus einem leeren Outliner ein
|
|
|
|
|
// Outliner mit genau einem Absatz
|
|
|
|
|
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();
|
|
|
|
|
|
2001-10-31 14:43:41 +00:00
|
|
|
|
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 );
|
2008-06-06 11:32:40 +00:00
|
|
|
|
if( pNext && pNext->HasFlag(PARAFLAG_ISPAGE) )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
if( !pOwner->ImpCanDeleteSelectedPages( this, aSel.nEndPara, 1 ) )
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default: // wird dann evtl. unten bearbeitet.
|
|
|
|
|
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 )
|
|
|
|
|
{
|
|
|
|
|
// Sonderbehandlung: Hartes Return am Ende eines Absatzes,
|
|
|
|
|
// der eingeklappte Unterabsaetze besitzt
|
|
|
|
|
Paragraph* pPara = pOwner->pParaList->GetParagraph( aSel.nEndPara );
|
|
|
|
|
|
|
|
|
|
if( !aKeyCode.IsShift() )
|
|
|
|
|
{
|
|
|
|
|
// Nochmal ImpGetCursor ???
|
|
|
|
|
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;
|
|
|
|
|
nTemp++; // einfuegen ueber naechstem Non-Child
|
|
|
|
|
pOwner->Insert( String(),nTemp,pPara->GetDepth());
|
|
|
|
|
// Cursor positionieren
|
|
|
|
|
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 );
|
|
|
|
|
|
|
|
|
|
// Cursor positionieren
|
|
|
|
|
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 );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
{
|
2002-08-05 10:37:22 +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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL __EXPORT OutlinerView::MouseMove( const MouseEvent& rMEvt )
|
|
|
|
|
{
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL __EXPORT OutlinerView::MouseButtonDown( const MouseEvent& rMEvt )
|
|
|
|
|
{
|
|
|
|
|
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;
|
2001-08-24 12:52:13 +00:00
|
|
|
|
|
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 );
|
|
|
|
|
// umgekehrt rum selektieren, damit EditEngine nicht scrollt
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
return pEditView->MouseButtonDown( rMEvt );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL __EXPORT OutlinerView::MouseButtonUp( const MouseEvent& rMEvt )
|
|
|
|
|
{
|
|
|
|
|
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();
|
|
|
|
|
Rectangle aVisAreaRef = pEditView->GetVisArea();
|
|
|
|
|
|
|
|
|
|
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 );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Berechnet, ueber welchem Absatz eingefuegt werden muss
|
|
|
|
|
|
|
|
|
|
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 );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2003-09-19 09:35:45 +00:00
|
|
|
|
|
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 );
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
pEditView->SetAttribs( rAttrs );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
// Bullet-Texte aktualisieren
|
|
|
|
|
for( USHORT nPara= aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
|
|
|
|
|
{
|
|
|
|
|
pOwner->ImplCheckNumBulletItem( nPara );
|
|
|
|
|
pOwner->ImplCalcBulletText( nPara, FALSE, FALSE );
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
// unsichtbare Childs des letzten Parents in Selektion mit aufnehmen
|
|
|
|
|
if ( bIncludeHiddenChilds )
|
|
|
|
|
{
|
|
|
|
|
Paragraph* pLast = pOwner->pParaList->GetParagraph( aParas.nEndPara );
|
|
|
|
|
if ( pOwner->pParaList->HasHiddenChilds( pLast ) )
|
2006-10-12 12:03:10 +00:00
|
|
|
|
aParas.nEndPara =
|
|
|
|
|
sal::static_int_cast< USHORT >(
|
|
|
|
|
aParas.nEndPara +
|
|
|
|
|
pOwner->pParaList->GetChildCount( pLast ) );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
return aParas;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MT: Name sollte mal geaendert werden!
|
|
|
|
|
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;
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
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 );
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
sal_Int16 nMinDepth = -1; // Optimierung: Nicht unnoetig viele Absatze neu berechnen
|
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 );
|
2008-06-06 11:32:40 +00:00
|
|
|
|
|
|
|
|
|
sal_Int16 nOldDepth = pPara->GetDepth();
|
|
|
|
|
sal_Int16 nNewDepth = nOldDepth + nDiff;
|
|
|
|
|
|
|
|
|
|
if( bOutlinerView && nPara )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2008-06-06 11:32:40 +00:00
|
|
|
|
const bool bPage = pPara->HasFlag(PARAFLAG_ISPAGE);
|
|
|
|
|
if( (bPage && (nDiff == +1)) || (!bPage && (nDiff == -1) && (nOldDepth <= 0)) )
|
|
|
|
|
{
|
|
|
|
|
// App benachrichtigen
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
2008-06-06 11:32:40 +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
|
|
|
|
{
|
|
|
|
|
// Sonderfall: Der Vorgaenger eines eingerueckten Absatzes ist
|
|
|
|
|
// unsichtbar und steht jetzt auf der gleichen Ebene wie der
|
|
|
|
|
// sichtbare Absatz. In diesem Fall wird der naechste sichtbare
|
|
|
|
|
// Absatz gesucht und aufgeplustert.
|
2006-10-12 12:03:10 +00:00
|
|
|
|
#ifdef DBG_UTIL
|
|
|
|
|
Paragraph* _pPara = pOwner->pParaList->GetParagraph( aSel.nStartPara );
|
2008-11-10 15:06:12 +00:00
|
|
|
|
DBG_ASSERT(_pPara->IsVisible(),"Selected Paragraph invisible ?!");
|
2006-10-12 12:03:10 +00:00
|
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
|
Paragraph* pPrev= pOwner->pParaList->GetParagraph( aSel.nStartPara-1 );
|
|
|
|
|
|
|
|
|
|
if( !pPrev->IsVisible() && ( pPrev->GetDepth() == nNewDepth ) )
|
|
|
|
|
{
|
|
|
|
|
// Vorgaenger ist eingeklappt und steht auf gleicher Ebene
|
|
|
|
|
// => naechsten sichtbaren Absatz suchen und expandieren
|
2008-06-06 11:32:40 +00:00
|
|
|
|
pPrev = pOwner->pParaList->GetParent( pPrev );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
while( !pPrev->IsVisible() )
|
2008-06-06 11:32:40 +00:00
|
|
|
|
pPrev = pOwner->pParaList->GetParent( pPrev );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
pOwner->Expand( pPrev );
|
|
|
|
|
pOwner->InvalidateBullet( pPrev, pOwner->pParaList->GetAbsPos( pPrev ) );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
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 );
|
|
|
|
|
|
|
|
|
|
// App benachrichtigen
|
|
|
|
|
pOwner->DepthChangedHdl();
|
|
|
|
|
}
|
2001-10-31 14:43:41 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// Needs at least a repaint...
|
|
|
|
|
pOwner->pEditEngine->QuickMarkInvalid( ESelection( nPara, 0, nPara, 0 ) );
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MT 19.08.99: War mal fuer Optimierung (outliner.cxx#1.193),
|
|
|
|
|
// hat aber zu zuviel Wartungsaufwand / doppelten Funktionen gefuehrt
|
|
|
|
|
// und zu wenig gebracht:
|
|
|
|
|
// pOwner->ImpSetBulletTextsFrom( aSel.nStartPara+1, nMinDepth );
|
|
|
|
|
// Wird jetzt direkt in Schleife mit ImplCalcBulletText() erledigt.
|
|
|
|
|
// Jetzt fehlen nur noch die folgenden Ansaetze, die davon betroffen sind.
|
|
|
|
|
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);
|
2001-08-17 09:54:10 +00:00
|
|
|
|
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();
|
|
|
|
|
// Position in der OutputArea berechnen
|
|
|
|
|
Point aCurPosDoc( rPosPixel );
|
|
|
|
|
aCurPosDoc = pEditView->GetWindow()->PixelToLogic( aCurPosDoc );
|
|
|
|
|
aCurPosDoc -= aOutArWin.TopLeft();
|
|
|
|
|
aCurPosDoc += pEditView->GetVisArea().TopLeft();
|
|
|
|
|
return aCurPosDoc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MT 05/00: Wofuer dies ImpXXXScroll, sollte das nicht die EditEngine machen???
|
|
|
|
|
|
|
|
|
|
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 )
|
|
|
|
|
{
|
|
|
|
|
// Der Strich unter dem Absatz muss verschwinden...
|
|
|
|
|
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 )
|
|
|
|
|
{
|
|
|
|
|
// MT: Wie Paste, nur EditView::Insert, statt EditView::Paste.
|
|
|
|
|
// Eigentlich nicht ganz richtig, das evtl. Einrueckungen
|
|
|
|
|
// korrigiert werden muessen, aber das kommt spaeter durch ein
|
|
|
|
|
// allgemeingueltiges Import.
|
|
|
|
|
// Dann wird im Inserted gleich ermittelt, was f<>r eine Einrueckebene
|
|
|
|
|
// Moegliche Struktur:
|
|
|
|
|
// pImportInfo mit DestPara, DestPos, nFormat, pParaObj...
|
|
|
|
|
// Evtl. Problematisch:
|
|
|
|
|
// EditEngine, RTF => Absplittung des Bereichs, spaeter
|
|
|
|
|
// zusammenfuehrung
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
PasteSpecial(); // HACK(SD ruft nicht PasteSpecial auf)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
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 )
|
2006-10-12 12:03:10 +00:00
|
|
|
|
nSize = sal::static_int_cast< USHORT >(
|
|
|
|
|
nSize - ( nPrevParaCount - nCurParaCount ) );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
else
|
2006-10-12 12:03:10 +00:00
|
|
|
|
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);
|
2001-08-17 09:54:10 +00:00
|
|
|
|
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 )
|
|
|
|
|
nStartPara++; // alle nach StartPara kommenden Absaetze werden geloescht
|
|
|
|
|
for ( USHORT nPara = nStartPara; nPara <= aSel.nEndPara; nPara++ )
|
|
|
|
|
{
|
|
|
|
|
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
|
|
|
|
|
DBG_ASSERT(pPara, "ImpCalcSelectedPages: ungueltige Selection? ");
|
2008-06-06 11:32:40 +00:00
|
|
|
|
if( pPara->HasFlag(PARAFLAG_ISPAGE) )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
nPages++;
|
|
|
|
|
if( nFirstPage == 0xFFFF )
|
|
|
|
|
nFirstPage = nPara;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( nPages )
|
|
|
|
|
{
|
|
|
|
|
pOwner->nDepthChangedHdlPrevDepth = nPages;
|
2006-10-12 12:03:10 +00:00
|
|
|
|
pOwner->pHdlParagraph = 0;
|
|
|
|
|
pOwner->mnFirstSelPage = nFirstPage;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nPages;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
void OutlinerView::ToggleBullets()
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2008-06-06 11:32:40 +00:00
|
|
|
|
pOwner->UndoActionStart( OLUNDO_DEPTH );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
ESelection aSel( pEditView->GetSelection() );
|
|
|
|
|
aSel.Adjust();
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
const bool bUpdate = pOwner->pEditEngine->GetUpdateMode();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pOwner->pEditEngine->SetUpdateMode( FALSE );
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
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 );
|
2008-06-06 11:32:40 +00:00
|
|
|
|
DBG_ASSERT(pPara, "OutlinerView::ToggleBullets(), illegal selection?");
|
|
|
|
|
|
|
|
|
|
if( pPara )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2008-06-06 11:32:40 +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
|
|
|
|
{
|
2008-06-06 11:32:40 +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
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-06-06 11:32:40 +00:00
|
|
|
|
|
|
|
|
|
USHORT nParaCount = (USHORT) (pOwner->pParaList->GetParagraphCount()-1);
|
|
|
|
|
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 );
|
|
|
|
|
|
2008-06-06 11:32:40 +00:00
|
|
|
|
pOwner->UndoActionEnd( OLUNDO_DEPTH );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2008-11-20 14:55:36 +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 );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
USHORT nParaCount = (USHORT) (pOwner->pParaList->GetParagraphCount()-1);
|
|
|
|
|
pOwner->ImplCheckParagraphs( aSel.nStartPara, nParaCount );
|
|
|
|
|
pOwner->pEditEngine->QuickMarkInvalid( ESelection( aSel.nStartPara, 0, nParaCount, 0 ) );
|
|
|
|
|
|
|
|
|
|
pOwner->pEditEngine->SetUpdateMode( bUpdate );
|
|
|
|
|
|
|
|
|
|
pOwner->UndoActionEnd( OLUNDO_DEPTH );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2007-11-23 15:44:03 +00:00
|
|
|
|
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 );
|
2007-11-23 15:44:03 +00:00
|
|
|
|
if (bKeepLanguages)
|
|
|
|
|
pEditView->RemoveAttribsKeepLanguages( bRemoveParaAttribs );
|
|
|
|
|
else
|
|
|
|
|
pEditView->RemoveAttribs( bRemoveParaAttribs, nWhich );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if ( bRemoveParaAttribs )
|
|
|
|
|
{
|
|
|
|
|
// Ueber alle Absaetze, und Einrueckung und Level einstellen
|
|
|
|
|
ESelection aSel = pEditView->GetSelection();
|
|
|
|
|
aSel.Adjust();
|
|
|
|
|
for ( USHORT nPara = aSel.nStartPara; nPara <= aSel.nEndPara; nPara++ )
|
|
|
|
|
{
|
|
|
|
|
Paragraph* pPara = pOwner->pParaList->GetParagraph( nPara );
|
2002-08-20 12:01:43 +00:00
|
|
|
|
pOwner->ImplInitDepth( nPara, pPara->GetDepth(), FALSE, FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pOwner->UndoActionEnd( OLUNDO_ATTR );
|
|
|
|
|
pOwner->SetUpdateMode( bUpdate );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// =====================================================================
|
|
|
|
|
// ====================== Einfache Durchreicher =======================
|
|
|
|
|
// ======================================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2000-12-05 10:13:08 +00:00
|
|
|
|
EESpellState OutlinerView::StartSpeller( BOOL bMultiDoc )
|
|
|
|
|
{
|
|
|
|
|
DBG_CHKTHIS(OutlinerView,0);
|
|
|
|
|
return pEditView->StartSpeller( bMultiDoc );
|
|
|
|
|
}
|
|
|
|
|
|
2004-04-27 14:50:21 +00:00
|
|
|
|
|
2000-12-05 10:13:08 +00:00
|
|
|
|
EESpellState OutlinerView::StartThesaurus()
|
|
|
|
|
{
|
|
|
|
|
DBG_CHKTHIS(OutlinerView,0);
|
|
|
|
|
return pEditView->StartThesaurus();
|
|
|
|
|
}
|
|
|
|
|
|
2004-04-27 14:50:21 +00:00
|
|
|
|
|
2004-09-17 12:45:57 +00:00
|
|
|
|
void OutlinerView::StartTextConversion(
|
|
|
|
|
LanguageType nSrcLang, LanguageType nDestLang, const Font *pDestFont,
|
|
|
|
|
INT32 nOptions, BOOL bIsInteractive, BOOL bMultipleDoc )
|
2004-04-27 14:50:21 +00:00
|
|
|
|
{
|
|
|
|
|
DBG_CHKTHIS(OutlinerView,0);
|
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)
|
|
|
|
|
)
|
|
|
|
|
{
|
2004-09-17 12:45:57 +00:00
|
|
|
|
pEditView->StartTextConversion( nSrcLang, nDestLang, pDestFont, nOptions, bIsInteractive, bMultipleDoc );
|
2008-12-11 07:05:03 +00:00
|
|
|
|
}
|
2004-04-27 14:50:21 +00:00
|
|
|
|
else
|
2008-06-30 14:45:11 +00:00
|
|
|
|
{
|
2004-04-27 14:50:21 +00:00
|
|
|
|
DBG_ERROR( "unexpected language" );
|
2008-06-30 14:45:11 +00:00
|
|
|
|
}
|
2004-04-27 14:50:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
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 );
|
|
|
|
|
}
|
|
|
|
|
|
2005-01-11 12:02:21 +00:00
|
|
|
|
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();
|
|
|
|
|
|
2005-01-11 12:02:21 +00:00
|
|
|
|
ULONG nRet = pEditView->Read( rInput, rBaseURL, eFormat, bSelect, pHTTPHeaderAttrs );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
// MT 08/00: Hier sollte eigentlich das gleiche wie in PasteSpecial passieren!
|
|
|
|
|
// Mal anpassen, wenn dieses ImplInitPaste und ImpPasted-Geraffel ueberarbeitet ist.
|
|
|
|
|
|
|
|
|
|
long nParaDiff = pEditView->GetEditEngine()->GetParagraphCount() - nOldParaCount;
|
|
|
|
|
USHORT nChangesStart = aOldSel.nStartPara;
|
2006-10-12 12:03:10 +00:00
|
|
|
|
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 );
|
2008-06-06 11:32:40 +00:00
|
|
|
|
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();
|
|
|
|
|
}
|
2000-11-24 10:30:28 +00:00
|
|
|
|
|
|
|
|
|
USHORT OutlinerView::GetSelectedScriptType() const
|
|
|
|
|
{
|
|
|
|
|
DBG_CHKTHIS(OutlinerView,0);
|
|
|
|
|
return pEditView->GetSelectedScriptType();
|
|
|
|
|
}
|