blob: 64474e28249dddee94e772bdea56bbbf8021ed86 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#include <sfx2/bindings.hxx>
#include <svx/htmlmode.hxx>
#include <svx/sdtacitm.hxx>
#include <svx/svdobj.hxx>
#include <svx/sdtagitm.hxx>
#include <svx/sdtakitm.hxx>
#include <svx/sdtaditm.hxx>
#include <svx/sdtaaitm.hxx>
#include <svx/svdview.hxx>
#include <svx/svdocapt.hxx>
#include <editeng/outlobj.hxx>
#include <cmdid.h>
#include <view.hxx>
#include <edtwin.hxx>
#include <wrtsh.hxx>
#include <viewopt.hxx>
#include <drawbase.hxx>
#include <conrect.hxx>
/*************************************************************************
|*
|* Konstruktor
|*
\************************************************************************/
ConstRectangle::ConstRectangle( SwWrtShell* pWrtShell, SwEditWin* pEditWin,
SwView* pSwView )
: SwDrawBase( pWrtShell, pEditWin, pSwView ),
bMarquee(sal_False),
// #93382#
mbVertical(sal_False)
{
}
/*************************************************************************
|*
|* MouseButtonDown-event
|*
\************************************************************************/
sal_Bool ConstRectangle::MouseButtonDown(const MouseEvent& rMEvt)
{
sal_Bool bReturn;
if ((bReturn = SwDrawBase::MouseButtonDown(rMEvt)) == sal_True
&& m_pWin->GetSdrDrawMode() == OBJ_CAPTION)
{
m_pView->NoRotate();
if (m_pView->IsDrawSelMode())
{
m_pView->FlipDrawSelMode();
m_pSh->GetDrawView()->SetFrameDragSingles(m_pView->IsDrawSelMode());
}
}
return (bReturn);
}
/*************************************************************************
|*
|* MouseButtonUp-event
|*
\************************************************************************/
sal_Bool ConstRectangle::MouseButtonUp(const MouseEvent& rMEvt)
{
Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel()));
sal_Bool bRet = SwDrawBase::MouseButtonUp(rMEvt);
if( bRet )
{
SdrView *pSdrView = m_pSh->GetDrawView();
const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
SdrObject* pObj = rMarkList.GetMark(0) ? rMarkList.GetMark(0)->GetMarkedSdrObj()
: 0;
switch( m_pWin->GetSdrDrawMode() )
{
case OBJ_TEXT:
if( bMarquee )
{
m_pSh->ChgAnchor(FLY_AS_CHAR);
if( pObj )
{
// die fuer das Scrollen benoetigten Attribute setzen
SfxItemSet aItemSet( pSdrView->GetModel()->GetItemPool(),
SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST);
aItemSet.Put( SdrTextAutoGrowWidthItem( sal_False ) );
aItemSet.Put( SdrTextAutoGrowHeightItem( sal_False ) );
aItemSet.Put( SdrTextAniKindItem( SDRTEXTANI_SCROLL ) );
aItemSet.Put( SdrTextAniDirectionItem( SDRTEXTANI_LEFT ) );
aItemSet.Put( SdrTextAniCountItem( 0 ) );
aItemSet.Put( SdrTextAniAmountItem(
(sal_Int16)m_pWin->PixelToLogic(Size(2,1)).Width()) );
pObj->SetMergedItemSetAndBroadcast(aItemSet);
}
}
else if(mbVertical && pObj && pObj->ISA(SdrTextObj))
{
// #93382#
SdrTextObj* pText = (SdrTextObj*)pObj;
SfxItemSet aSet(pSdrView->GetModel()->GetItemPool());
pText->SetVerticalWriting(sal_True);
aSet.Put(SdrTextAutoGrowWidthItem(sal_True));
aSet.Put(SdrTextAutoGrowHeightItem(sal_False));
aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_TOP));
aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT));
pText->SetMergedItemSet(aSet);
}
if( pObj )
{
SdrPageView* pPV = pSdrView->GetSdrPageView();
m_pView->BeginTextEdit( pObj, pPV, m_pWin, sal_True );
}
m_pView->LeaveDrawCreate(); // In Selektionsmode wechseln
m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
break;
case OBJ_CAPTION:
{
SdrCaptionObj* pCaptObj = dynamic_cast<SdrCaptionObj*>(pObj);
if( bCapVertical && pCaptObj )
{
pCaptObj->ForceOutlinerParaObject();
OutlinerParaObject* pOPO = pCaptObj->GetOutlinerParaObject();
if( pOPO && !pOPO->IsVertical() )
pOPO->SetVertical( sal_True );
}
}
break;
default:; //prevent warning
}
}
return bRet;
}
/*************************************************************************
|*
|* Function aktivieren
|*
\************************************************************************/
void ConstRectangle::Activate(const sal_uInt16 nSlotId)
{
bMarquee = bCapVertical = sal_False;
mbVertical = sal_False;
switch (nSlotId)
{
case SID_DRAW_LINE:
m_pWin->SetSdrDrawMode(OBJ_LINE);
break;
case SID_DRAW_RECT:
m_pWin->SetSdrDrawMode(OBJ_RECT);
break;
case SID_DRAW_ELLIPSE:
m_pWin->SetSdrDrawMode(OBJ_CIRC);
break;
case SID_DRAW_TEXT_MARQUEE:
bMarquee = sal_True;
m_pWin->SetSdrDrawMode(OBJ_TEXT);
break;
case SID_DRAW_TEXT_VERTICAL:
// #93382#
mbVertical = sal_True;
m_pWin->SetSdrDrawMode(OBJ_TEXT);
break;
case SID_DRAW_TEXT:
m_pWin->SetSdrDrawMode(OBJ_TEXT);
break;
case SID_DRAW_CAPTION_VERTICAL:
bCapVertical = sal_True;
// no break
case SID_DRAW_CAPTION:
m_pWin->SetSdrDrawMode(OBJ_CAPTION);
break;
default:
m_pWin->SetSdrDrawMode(OBJ_NONE);
break;
}
SwDrawBase::Activate(nSlotId);
}