Files
libreoffice/sd/source/ui/func/futext.cxx

1548 lines
54 KiB
C++
Raw Normal View History

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 2008 by Sun Microsystems, Inc.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org - a multi-platform office productivity suite
2000-09-18 16:07:07 +00:00
*
* $RCSfile: futext.cxx,v $
CWS-TOOLING: integrate CWS impressfontsize 2008-12-11 14:15:16 +0100 wg r265298 : i97125 2008-12-11 12:54:53 +0100 wg r265288 : i97125 2008-12-11 12:53:03 +0100 wg r265287 : i97125 2008-12-11 11:25:42 +0100 wg r265270 : i97125 2008-12-11 10:22:13 +0100 wg r265253 : i97125 2008-12-11 09:22:47 +0100 wg r265247 : i97125 2008-12-09 15:28:51 +0100 cl r265097 : added missing toolbar buttons for inc/dec font size 2008-12-08 17:39:46 +0100 cl r265012 : #i80257# added autolayout text only 2008-12-08 17:32:07 +0100 cl r265011 : #i80257# added autolayout text only 2008-12-08 16:42:19 +0100 cl r265008 : #i94459# fixed a bug in insertByName and replaceByName 2008-12-08 16:25:26 +0100 cl r265007 : #i80257# new image for text only auto layout in impress 2008-12-08 16:24:01 +0100 cl r265006 : #i80257# new image for text only auto layout in impress 2008-12-08 16:01:46 +0100 cl r265003 : #i88855# changed wording from Monitor to Display 2008-12-08 15:57:24 +0100 cl r265002 : #i91904# applied patch to fix a wrong index access 2008-12-05 12:51:47 +0100 cl r264900 : #i8824# allow setting of text properties at shape without reformating text 2008-12-05 11:09:21 +0100 cl r264895 : fixed build problem 2008-12-04 12:04:09 +0100 cl r264829 : fixed build issue 2008-12-04 11:03:58 +0100 cl r264823 : #i8824# set new fontsize at shape 2008-12-02 22:39:22 +0100 cl r264732 : fixed build problem 2008-12-02 22:38:42 +0100 cl r264731 : fixed build problem 2008-12-01 17:44:29 +0100 cl r264623 : CWS-TOOLING: rebase CWS impressfontsize to trunk@264325 (milestone: DEV300:m36) 2008-11-07 11:38:13 +0100 cl r263418 : #i95920# fixed an OpenSolaris build breaker 2008-11-06 14:56:04 +0100 cl r263386 : #i40730# added support to supress export of hidden slides to html 2008-11-06 14:55:41 +0100 cl r263385 : #i40730# added support to supress export of hidden slides to html 2008-11-06 14:03:59 +0100 cl r263384 : #158530# allow editing of interaction links with hyperlink editor 2008-10-20 15:34:13 +0200 cl r262322 : #i8824# migrate cws impressfontsize to subversion.
2008-12-11 15:25:59 +00:00
* $Revision: 1.66.8.1 $
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
#include "precompiled_sd.hxx"
2000-09-18 16:07:07 +00:00
#include "futext.hxx"
2000-09-18 16:07:07 +00:00
#include <svx/eeitem.hxx>
#include <svx/dlgutil.hxx>
#include <svx/svxerr.hxx>
#include <tools/urlobj.hxx>
2000-09-18 16:07:07 +00:00
#include <vcl/help.hxx>
#include <svx/editstat.hxx>
#include <svtools/aeitem.hxx>
#include <svtools/intitem.hxx>
#include <svx/svdotext.hxx>
#ifndef _SVDOGROUP_HXX //autogen
#include <svx/svdogrp.hxx>
#endif
#include <svx/flditem.hxx>
#include <svtools/style.hxx>
#include <svx/svdpagv.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/request.hxx>
#include <svx/editeng.hxx>
#include <svx/svdoutl.hxx>
#include <svx/svxids.hrc>
#include <sfx2/docfile.hxx>
2000-11-17 10:13:31 +00:00
#include <comphelper/processfactory.hxx>
2001-02-05 10:35:37 +00:00
#include <svx/outlobj.hxx>
// #104122#
#include <svx/frmdiritem.hxx>
#include <svx/svdetc.hxx>
CWS-TOOLING: integrate CWS impressfontsize 2008-12-11 14:15:16 +0100 wg r265298 : i97125 2008-12-11 12:54:53 +0100 wg r265288 : i97125 2008-12-11 12:53:03 +0100 wg r265287 : i97125 2008-12-11 11:25:42 +0100 wg r265270 : i97125 2008-12-11 10:22:13 +0100 wg r265253 : i97125 2008-12-11 09:22:47 +0100 wg r265247 : i97125 2008-12-09 15:28:51 +0100 cl r265097 : added missing toolbar buttons for inc/dec font size 2008-12-08 17:39:46 +0100 cl r265012 : #i80257# added autolayout text only 2008-12-08 17:32:07 +0100 cl r265011 : #i80257# added autolayout text only 2008-12-08 16:42:19 +0100 cl r265008 : #i94459# fixed a bug in insertByName and replaceByName 2008-12-08 16:25:26 +0100 cl r265007 : #i80257# new image for text only auto layout in impress 2008-12-08 16:24:01 +0100 cl r265006 : #i80257# new image for text only auto layout in impress 2008-12-08 16:01:46 +0100 cl r265003 : #i88855# changed wording from Monitor to Display 2008-12-08 15:57:24 +0100 cl r265002 : #i91904# applied patch to fix a wrong index access 2008-12-05 12:51:47 +0100 cl r264900 : #i8824# allow setting of text properties at shape without reformating text 2008-12-05 11:09:21 +0100 cl r264895 : fixed build problem 2008-12-04 12:04:09 +0100 cl r264829 : fixed build issue 2008-12-04 11:03:58 +0100 cl r264823 : #i8824# set new fontsize at shape 2008-12-02 22:39:22 +0100 cl r264732 : fixed build problem 2008-12-02 22:38:42 +0100 cl r264731 : fixed build problem 2008-12-01 17:44:29 +0100 cl r264623 : CWS-TOOLING: rebase CWS impressfontsize to trunk@264325 (milestone: DEV300:m36) 2008-11-07 11:38:13 +0100 cl r263418 : #i95920# fixed an OpenSolaris build breaker 2008-11-06 14:56:04 +0100 cl r263386 : #i40730# added support to supress export of hidden slides to html 2008-11-06 14:55:41 +0100 cl r263385 : #i40730# added support to supress export of hidden slides to html 2008-11-06 14:03:59 +0100 cl r263384 : #158530# allow editing of interaction links with hyperlink editor 2008-10-20 15:34:13 +0200 cl r262322 : #i8824# migrate cws impressfontsize to subversion.
2008-12-11 15:25:59 +00:00
#include <svx/editview.hxx>
2000-09-18 16:07:07 +00:00
#include "sdresid.hxx"
#include "app.hrc"
#include "res_bmp.hrc"
#include "ViewShell.hxx"
#include "ViewShellBase.hxx"
#include "View.hxx"
#include "Outliner.hxx"
#include "Window.hxx"
2000-09-18 16:07:07 +00:00
#include "drawdoc.hxx"
#include "sdpage.hxx"
#include "sdmod.hxx"
#include "FrameView.hxx"
#include "ToolBarManager.hxx"
#include "DrawDocShell.hxx"
2000-09-18 16:07:07 +00:00
#include "glob.hrc"
#include "pres.hxx"
#include "optsitem.hxx"
2000-09-18 16:07:07 +00:00
using ::rtl::OUString;
2000-09-18 16:07:07 +00:00
using namespace ::com::sun::star;
2000-10-25 09:34:04 +00:00
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::linguistic2;
2000-09-18 16:07:07 +00:00
namespace sd {
2000-09-18 16:07:07 +00:00
static USHORT SidArray[] = {
SID_STYLE_FAMILY2, // 5542
SID_STYLE_FAMILY5, // 5545
SID_CUT, // 5710
SID_COPY, // 5711
SID_ATTR_TABSTOP, // 10002
2000-09-18 16:07:07 +00:00
SID_ATTR_CHAR_FONT, // 10007
SID_ATTR_CHAR_POSTURE, // 10008
SID_ATTR_CHAR_WEIGHT, // 10009
SID_ATTR_CHAR_UNDERLINE, // 10014
SID_ATTR_CHAR_FONTHEIGHT, // 10015
SID_ATTR_CHAR_COLOR, // 10017
SID_ATTR_PARA_ADJUST_LEFT, // 10028
SID_ATTR_PARA_ADJUST_RIGHT, // 10029
SID_ATTR_PARA_ADJUST_CENTER, // 10030
SID_ATTR_PARA_ADJUST_BLOCK, // 10031
SID_ATTR_PARA_LINESPACE_10, // 10034
SID_ATTR_PARA_LINESPACE_15, // 10035
SID_ATTR_PARA_LINESPACE_20, // 10036
SID_ATTR_PARA_LRSPACE, // 10043
SID_OUTLINE_UP, // 10150
SID_OUTLINE_DOWN, // 10151
SID_OUTLINE_LEFT, // 10152
SID_OUTLINE_RIGHT, // 10153
SID_FORMTEXT_STYLE, // 10257
SID_SET_SUPER_SCRIPT, // 10294
SID_SET_SUB_SCRIPT, // 10295
SID_HYPERLINK_GETLINK, // 10361
2001-02-07 08:08:30 +00:00
SID_TEXTDIRECTION_LEFT_TO_RIGHT, // 10907
SID_TEXTDIRECTION_TOP_TO_BOTTOM, // 10908
2002-08-01 10:30:12 +00:00
SID_ATTR_PARA_LEFT_TO_RIGHT, // 10950
SID_ATTR_PARA_RIGHT_TO_LEFT, // 10951
2000-09-18 16:07:07 +00:00
FN_NUM_BULLET_ON, // 20138
SID_BULLET, // 27019
SID_PARASPACE_INCREASE, // 27346
SID_PARASPACE_DECREASE, // 27347
0 };
TYPEINIT1( FuText, FuConstruct );
static BOOL bTestText = 0;
/*************************************************************************
|*
|* Basisklasse fuer Textfunktionen
|*
\************************************************************************/
FuText::FuText( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
: FuConstruct(pViewSh, pWin, pView, pDoc, rReq)
, bFirstObjCreated(FALSE)
, rRequest (rReq)
{
}
FunctionReference FuText::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
{
FunctionReference xFunc( new FuText( pViewSh, pWin, pView, pDoc, rReq ) );
return xFunc;
}
2000-09-18 16:07:07 +00:00
/*************************************************************************
|*
|* Destruktor
|*
\************************************************************************/
void FuText::disposing()
2000-09-18 16:07:07 +00:00
{
if(mpView)
{
if(mpView->SdrEndTextEdit(FALSE) == SDRENDTEXTEDIT_DELETED)
mxTextObj.reset( 0 );
2000-09-18 16:07:07 +00:00
// die RequestHandler der benutzten Outliner zuruecksetzen auf den
// Handler am Dokument
::Outliner* pOutliner = mpView->GetTextEditOutliner();
2000-09-18 16:07:07 +00:00
if (pOutliner)
pOutliner->SetStyleSheetPool(static_cast<SfxStyleSheetPool*>(mpDoc->GetStyleSheetPool()));
2000-09-18 16:07:07 +00:00
}
}
/*************************************************************************
|*
|* Execute functionality of this class:
|*
|* #71422: Start the functionality of this class in this method
|* and not in the ctor.
|* If you construct an object of this class and you put the
|* address of this object to pFuActual you've got a problem,
|* because some methods inside DoExecute use the pFuActual-Pointer.
|* If the code inside DoExecute is executed inside the ctor,
|* the value of pFuActual is not right. And the value will not
|* be right until the ctor finished !!!
|*
\************************************************************************/
void FuText::DoExecute( SfxRequest& )
2000-09-18 16:07:07 +00:00
{
mpViewShell->GetViewShellBase().GetToolBarManager()->SetToolBarShell(
ToolBarManager::TBG_FUNCTION,
RID_DRAW_TEXT_TOOLBOX);
mpView->SetCurrentObj(OBJ_TEXT);
mpView->SetEditMode(SDREDITMODE_EDIT);
2000-09-18 16:07:07 +00:00
MouseEvent aMEvt(mpWindow->GetPointerPosPixel());
2000-09-18 16:07:07 +00:00
if (nSlotId == SID_TEXTEDIT)
2000-09-18 16:07:07 +00:00
{
// Try to select an object
SdrPageView* pPV = mpView->GetSdrPageView();
SdrViewEvent aVEvt;
mpView->PickAnything(aMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
mpView->MarkObj(aVEvt.pRootObj, pPV);
2000-09-18 16:07:07 +00:00
mxTextObj.reset( dynamic_cast< SdrTextObj* >( aVEvt.pObj ) );
}
else if (mpView->AreObjectsMarked())
{
const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
if (rMarkList.GetMarkCount() == 1)
2000-09-18 16:07:07 +00:00
{
SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
mxTextObj.reset( dynamic_cast< SdrTextObj* >( pObj ) );
}
}
2000-09-18 16:07:07 +00:00
// check for table
if (mpView->AreObjectsMarked())
{
const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
if (rMarkList.GetMarkCount() == 1)
{
SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
if( pObj && (pObj->GetObjInventor() == SdrInventor ) && (pObj->GetObjIdentifier() == OBJ_TABLE) )
2000-09-18 16:07:07 +00:00
{
mpViewShell->GetViewShellBase().GetToolBarManager()->AddToolBarShell( ToolBarManager::TBG_FUNCTION, RID_DRAW_TABLE_TOOLBOX );
2000-09-18 16:07:07 +00:00
}
}
}
2000-09-18 16:07:07 +00:00
BOOL bQuickDrag = TRUE;
2000-09-18 16:07:07 +00:00
const SfxItemSet* pArgs = rRequest.GetArgs();
2000-09-18 16:07:07 +00:00
if (pArgs
// #98198# test for type before using
&& SID_TEXTEDIT == nSlotId
&& SFX_ITEM_SET == pArgs->GetItemState(SID_TEXTEDIT)
&& (UINT16)((SfxUInt16Item&)pArgs->Get(SID_TEXTEDIT)).GetValue() == 2)
{
// Selection by doubleclick -> don't allow QuickDrag
bQuickDrag = FALSE;
2000-09-18 16:07:07 +00:00
}
SetInEditMode(aMEvt, bQuickDrag);
2000-09-18 16:07:07 +00:00
}
/*************************************************************************
|*
|* MouseButtonDown-event
|*
\************************************************************************/
BOOL FuText::MouseButtonDown(const MouseEvent& rMEvt)
{
bMBDown = TRUE;
BOOL bReturn = FuDraw::MouseButtonDown(rMEvt);
/* af: (de)Select object before showing the context menu.
2000-09-18 16:07:07 +00:00
// Fuer PopupMenu (vorher DrawViewShell)
if ((rMEvt.GetButtons() == MOUSE_RIGHT) && rMEvt.GetClicks() == 1 &&
mpView->IsTextEdit())
2000-09-18 16:07:07 +00:00
{
return (TRUE);
}
*/
2000-09-18 16:07:07 +00:00
mpView->SetMarkHdlWhenTextEdit(TRUE);
2000-09-18 16:07:07 +00:00
SdrViewEvent aVEvt;
SdrHitKind eHit = mpView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
2000-09-18 16:07:07 +00:00
if (eHit == SDRHIT_TEXTEDIT)
{
// Text getroffen -> Event von SdrView auswerten lassen
if (mpView->MouseButtonDown(rMEvt, mpWindow))
2000-09-18 16:07:07 +00:00
return (TRUE);
}
if (rMEvt.GetClicks() == 1)
{
if (mpView->IsTextEdit() && eHit != SDRHIT_MARKEDOBJECT && eHit != SDRHIT_HANDLE)
2000-09-18 16:07:07 +00:00
{
// Texteingabe beenden
if(mpView->SdrEndTextEdit() == SDRENDTEXTEDIT_DELETED)
2000-09-18 16:07:07 +00:00
{
// Bugfix von MBA: bei Doppelclick auf der Wiese im Modus Text wird
// beim zweiten Click eHit = SDRHIT_TEXTEDITOBJ erhalten, weil ja der
// zweite Click auf das im ersten Click angelegte TextObject geht.
// Dieses wird aber in SdrEndTextEdit entfernt, weil es leer ist. Es
2000-09-18 16:07:07 +00:00
// befindet sich aber noch in der Mark-Liste und der Aufruf MarkObj
// weiter unten greift dann auf das tote Object zu.
// Als einfacher Fix wird nach SdrEndTextEdit noch einmal eHit ermittelt,
2000-09-18 16:07:07 +00:00
// was dann SDRHIT_NONE liefert.
mxTextObj.reset( NULL );
eHit = mpView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
2000-09-18 16:07:07 +00:00
}
mpView->SetCurrentObj(OBJ_TEXT);
mpView->SetEditMode(SDREDITMODE_EDIT);
2000-09-18 16:07:07 +00:00
}
if (rMEvt.IsLeft() || rMEvt.IsRight())
2000-09-18 16:07:07 +00:00
{
mpWindow->CaptureMouse();
2000-09-18 16:07:07 +00:00
SdrObject* pObj;
SdrPageView* pPV = mpView->GetSdrPageView();
2000-09-18 16:07:07 +00:00
if (eHit == SDRHIT_TEXTEDIT)
{
SetInEditMode(rMEvt, FALSE);
}
else
{
BOOL bMacro = FALSE;
if (bMacro && mpView->PickObj(aMDPos,pObj,pPV,SDRSEARCH_PICKMACRO))
2000-09-18 16:07:07 +00:00
{
// Makro
USHORT nHitLog = USHORT ( mpWindow->PixelToLogic(Size(HITPIX,0)).Width() );
mpView->BegMacroObj(aMDPos,nHitLog,pObj,pPV,mpWindow);
2000-09-18 16:07:07 +00:00
}
else
{
if (eHit != SDRHIT_HANDLE)
{
// Selektion aufheben
if (!rMEvt.IsShift() && eHit == SDRHIT_TEXTEDITOBJ)
{
mpView->UnmarkAll();
mpView->SetDragMode(SDRDRAG_MOVE);
2000-09-18 16:07:07 +00:00
}
}
if ( aVEvt.eEvent == SDREVENT_EXECUTEURL ||
eHit == SDRHIT_HANDLE ||
eHit == SDRHIT_MARKEDOBJECT ||
eHit == SDRHIT_TEXTEDITOBJ ||
( eHit == SDRHIT_UNMARKEDOBJECT && bFirstObjCreated &&
!bPermanent ) )
{
/**********************************************************
* Handle, markiertes oder unmarkiertes Objekt getroffen
**********************************************************/
if (eHit == SDRHIT_TEXTEDITOBJ)
{
/******************************************************
* Text eines unmarkierten Objekts getroffen:
* Objekt wird selektiert und in EditMode versetzt
******************************************************/
mpView->MarkObj(aVEvt.pRootObj, pPV);
2000-09-18 16:07:07 +00:00
if (aVEvt.pObj && aVEvt.pObj->ISA(SdrTextObj))
{
mxTextObj.reset( static_cast<SdrTextObj*>(aVEvt.pObj) );
2000-09-18 16:07:07 +00:00
}
SetInEditMode(rMEvt, TRUE);
}
else if (aVEvt.eEvent == SDREVENT_EXECUTEURL && !rMEvt.IsMod2())
{
/******************************************************
* URL ausfuehren
******************************************************/
mpWindow->ReleaseMouse();
2000-09-18 16:07:07 +00:00
SfxStringItem aStrItem(SID_FILE_NAME, aVEvt.pURLField->GetURL());
SfxStringItem aReferer(SID_REFERER, mpDocSh->GetMedium()->GetName());
2001-06-12 11:46:15 +00:00
SfxBoolItem aBrowseItem( SID_BROWSE, TRUE );
SfxViewFrame* pFrame = mpViewShell->GetViewFrame();
mpWindow->ReleaseMouse();
2000-09-18 16:07:07 +00:00
if (rMEvt.IsMod1())
{
// Im neuen Frame oeffnen
pFrame->GetDispatcher()->Execute(SID_OPENDOC, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
&aStrItem, &aBrowseItem, &aReferer, 0L);
}
else
{
// Im aktuellen Frame oeffnen
SfxFrameItem aFrameItem(SID_DOCFRAME, pFrame);
pFrame->GetDispatcher()->Execute(SID_OPENDOC, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
&aStrItem, &aFrameItem, &aBrowseItem, &aReferer, 0L);
}
}
else
{
/******************************************************
* Objekt oder Handle draggen
******************************************************/
// #i78748#
// do the EndTextEdit first, it will delete the handles and force a
// recreation. This will make aVEvt.pHdl to point to a deleted handle,
// thus it is necessary to reset it and to get it again.
::Outliner* pOutl = mpView->GetTextEditOutliner();
if (mxTextObj.is() && (mxTextObj->GetOutlinerParaObject() ||
(pOutl && pOutl->GetText(pOutl->GetParagraph( 0 )).Len() != 0)))
{
mpView->SdrEndTextEdit();
if(aVEvt.pHdl)
{
// force new handle identification, the pointer will be dead here
// since SdrEndTextEdit has resetted (deleted) the handles.
aVEvt.pHdl = 0;
mpView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
}
}
2000-09-18 16:07:07 +00:00
if (!aVEvt.pHdl)
{
if( eHit == SDRHIT_UNMARKEDOBJECT )
{
if ( !rMEvt.IsShift() )
mpView->UnmarkAll();
2000-09-18 16:07:07 +00:00
mpView->MarkObj(aVEvt.pRootObj, pPV);
2000-09-18 16:07:07 +00:00
}
// Objekt draggen
bFirstMouseMove = TRUE;
aDragTimer.Start();
}
if ( ! rMEvt.IsRight())
{
// we need to pick again since SdrEndTextEdit can rebuild the handles list
eHit = mpView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
if( (eHit == SDRHIT_HANDLE) || (eHit == SDRHIT_MARKEDOBJECT) )
{
USHORT nDrgLog = USHORT ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() );
mpView->BegDragObj(aMDPos, (OutputDevice*) NULL, aVEvt.pHdl, nDrgLog);
}
}
bReturn = true;
2000-09-18 16:07:07 +00:00
}
}
else if ( nSlotId != SID_TEXTEDIT &&
(bPermanent || !bFirstObjCreated) )
{
/**********************************************************
* Objekt erzeugen
**********************************************************/
mpView->SetCurrentObj(OBJ_TEXT);
mpView->SetEditMode(SDREDITMODE_CREATE);
USHORT nDrgLog = USHORT ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() );
mpView->BegCreateObj(aMDPos, (OutputDevice*) NULL, nDrgLog);
2000-09-18 16:07:07 +00:00
}
else
{
/**********************************************************
* Selektieren
**********************************************************/
if( !rMEvt.IsShift() )
mpView->UnmarkAll();
2000-09-18 16:07:07 +00:00
mpView->BegMarkObj( aMDPos );
2000-09-18 16:07:07 +00:00
}
}
}
}
}
else if ( rMEvt.GetClicks() == 2 && !mpView->IsTextEdit() )
2000-09-18 16:07:07 +00:00
{
MouseEvent aMEvt( mpWindow->GetPointerPosPixel() );
2000-09-18 16:07:07 +00:00
SetInEditMode( aMEvt, FALSE );
}
if (!bIsInDragMode)
{
ForcePointer(&rMEvt);
mpViewShell->GetViewFrame()->GetBindings().Invalidate(SidArray);
2000-09-18 16:07:07 +00:00
}
return (bReturn);
}
/*************************************************************************
|*
|* MouseMove-event
|*
\************************************************************************/
BOOL FuText::MouseMove(const MouseEvent& rMEvt)
{
BOOL bReturn = FuDraw::MouseMove(rMEvt);
if (aDragTimer.IsActive() )
{
if( bFirstMouseMove )
bFirstMouseMove = FALSE;
else
aDragTimer.Stop();
}
if (!bReturn && mpView->IsAction() && !mpDocSh->IsReadOnly())
2000-09-18 16:07:07 +00:00
{
Point aPix(rMEvt.GetPosPixel());
Point aPnt(mpWindow->PixelToLogic(aPix));
2000-09-18 16:07:07 +00:00
ForceScroll(aPix);
mpView->MovAction(aPnt);
2000-09-18 16:07:07 +00:00
}
ForcePointer(&rMEvt);
return (bReturn);
}
/*************************************************************************
|*
|* MouseButtonUp-event
|*
\************************************************************************/
// #97016#
void FuText::ImpSetAttributesForNewTextObject(SdrTextObj* pTxtObj)
{
if(mpDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS)
{
if( nSlotId == SID_ATTR_CHAR )
{
// Impress-Textobjekt wird erzeugt (faellt auf Zeilenhoehe zusammen)
// Damit das Objekt beim anschliessenden Erzeugen gleich die richtige
// Hoehe bekommt (sonst wird zuviel gepainted)
SfxItemSet aSet(mpViewShell->GetPool());
aSet.Put(SdrTextMinFrameHeightItem(0));
aSet.Put(SdrTextAutoGrowWidthItem(FALSE));
aSet.Put(SdrTextAutoGrowHeightItem(TRUE));
pTxtObj->SetMergedItemSet(aSet);
pTxtObj->AdjustTextFrameWidthAndHeight();
aSet.Put(SdrTextMaxFrameHeightItem(pTxtObj->GetLogicRect().GetSize().Height()));
pTxtObj->SetMergedItemSet(aSet);
}
else if( nSlotId == SID_ATTR_CHAR_VERTICAL )
{
SfxItemSet aSet(mpViewShell->GetPool());
aSet.Put(SdrTextMinFrameWidthItem(0));
aSet.Put(SdrTextAutoGrowWidthItem(TRUE));
aSet.Put(SdrTextAutoGrowHeightItem(FALSE));
// #91853# Needs to be set since default is SDRTEXTHORZADJUST_BLOCK
aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT));
pTxtObj->SetMergedItemSet(aSet);
pTxtObj->AdjustTextFrameWidthAndHeight();
aSet.Put(SdrTextMaxFrameWidthItem(pTxtObj->GetLogicRect().GetSize().Width()));
pTxtObj->SetMergedItemSet(aSet);
}
}
else
{
if( nSlotId == SID_ATTR_CHAR_VERTICAL )
{
// draw text object, needs to be initialized when vertical text is used
SfxItemSet aSet(mpViewShell->GetPool());
// #91510#
aSet.Put(SdrTextAutoGrowWidthItem(TRUE));
aSet.Put(SdrTextAutoGrowHeightItem(FALSE));
// #91508#
//aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_TOP));
//aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT));
// #107235#
// Set defaults for vertical klick-n'drag text object, pool defaults are:
// SdrTextVertAdjustItem: SDRTEXTVERTADJUST_TOP
// SdrTextHorzAdjustItem: SDRTEXTHORZADJUST_BLOCK
// Analog to that (thus, #91508# was not completely correct):
aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_BLOCK));
aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT));
pTxtObj->SetMergedItemSet(aSet);
}
}
}
// #97016#
void FuText::ImpSetAttributesFitToSize(SdrTextObj* pTxtObj)
{
// FitToSize (An Rahmen anpassen)
SfxItemSet aSet(mpViewShell->GetPool(), SDRATTR_TEXT_AUTOGROWHEIGHT, SDRATTR_TEXT_AUTOGROWWIDTH);
SdrFitToSizeType eFTS = SDRTEXTFIT_PROPORTIONAL;
aSet.Put(SdrTextFitToSizeTypeItem(eFTS));
aSet.Put(SdrTextAutoGrowHeightItem(FALSE));
aSet.Put(SdrTextAutoGrowWidthItem(FALSE));
pTxtObj->SetMergedItemSet(aSet);
pTxtObj->AdjustTextFrameWidthAndHeight();
}
// #97016#
void FuText::ImpSetAttributesFitToSizeVertical(SdrTextObj* pTxtObj)
{
SfxItemSet aSet(mpViewShell->GetPool(),
SDRATTR_TEXT_AUTOGROWHEIGHT, SDRATTR_TEXT_AUTOGROWWIDTH);
SdrFitToSizeType eFTS = SDRTEXTFIT_PROPORTIONAL;
aSet.Put(SdrTextFitToSizeTypeItem(eFTS));
aSet.Put(SdrTextAutoGrowHeightItem(FALSE));
aSet.Put(SdrTextAutoGrowWidthItem(FALSE));
pTxtObj->SetMergedItemSet(aSet);
pTxtObj->AdjustTextFrameWidthAndHeight();
}
// #97016#
void FuText::ImpSetAttributesFitCommon(SdrTextObj* pTxtObj)
{
// Normales Textobjekt
if (mpDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS)
{
if( nSlotId == SID_ATTR_CHAR )
{
// Impress-Textobjekt (faellt auf Zeilenhoehe zusammen)
SfxItemSet aSet(mpViewShell->GetPool());
aSet.Put(SdrTextMinFrameHeightItem(0));
aSet.Put(SdrTextMaxFrameHeightItem(0));
aSet.Put(SdrTextAutoGrowHeightItem(TRUE));
aSet.Put(SdrTextAutoGrowWidthItem(FALSE));
pTxtObj->SetMergedItemSet(aSet);
}
else if( nSlotId == SID_ATTR_CHAR_VERTICAL )
{
SfxItemSet aSet(mpViewShell->GetPool());
aSet.Put(SdrTextMinFrameWidthItem(0));
aSet.Put(SdrTextMaxFrameWidthItem(0));
aSet.Put(SdrTextAutoGrowWidthItem(TRUE));
aSet.Put(SdrTextAutoGrowHeightItem(FALSE));
pTxtObj->SetMergedItemSet(aSet);
}
pTxtObj->AdjustTextFrameWidthAndHeight();
}
}
2000-09-18 16:07:07 +00:00
BOOL FuText::MouseButtonUp(const MouseEvent& rMEvt)
{
BOOL bReturn = FALSE;
if (aDragTimer.IsActive())
{
aDragTimer.Stop();
bIsInDragMode = FALSE;
}
mpViewShell->GetViewFrame()->GetBindings().Invalidate( SidArray );
2000-09-18 16:07:07 +00:00
Point aPnt( mpWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
2000-09-18 16:07:07 +00:00
if( mpView && mpView->MouseButtonUp(rMEvt, mpWindow) || rMEvt.GetClicks() == 2 )
2000-09-18 16:07:07 +00:00
return (TRUE); // Event von der SdrView ausgewertet
BOOL bEmptyTextObj = FALSE;
if (mxTextObj.is())
2000-09-18 16:07:07 +00:00
{
const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
2000-09-18 16:07:07 +00:00
if (rMarkList.GetMarkCount() == 1
&& ( rMarkList.GetMark(0)->GetMarkedSdrObj() == mxTextObj.get()) )
2000-09-18 16:07:07 +00:00
{
if( mxTextObj.is() && !GetTextObj()->GetOutlinerParaObject() )
2000-09-18 16:07:07 +00:00
bEmptyTextObj = TRUE;
else
bFirstObjCreated = TRUE;
}
else
{
mxTextObj.reset( 0 );
}
2000-09-18 16:07:07 +00:00
}
if( mpView && mpView->IsDragObj())
2000-09-18 16:07:07 +00:00
{
/**********************************************************************
* Objekt wurde verschoben
**********************************************************************/
FrameView* pFrameView = mpViewShell->GetFrameView();
2000-09-18 16:07:07 +00:00
BOOL bDragWithCopy = (rMEvt.IsMod1() && pFrameView->IsDragWithCopy());
if (bDragWithCopy)
{
bDragWithCopy = !mpView->IsPresObjSelected(FALSE, TRUE);
2000-09-18 16:07:07 +00:00
}
mpView->SetDragWithCopy(bDragWithCopy);
mpView->EndDragObj( mpView->IsDragWithCopy() );
mpView->ForceMarkedToAnotherPage();
mpView->SetCurrentObj(OBJ_TEXT);
2000-09-18 16:07:07 +00:00
}
else if( mpView && mpView->IsCreateObj() && rMEvt.IsLeft())
2000-09-18 16:07:07 +00:00
{
/**********************************************************************
* Objekt wurde erzeugt
**********************************************************************/
mxTextObj.reset( dynamic_cast< SdrTextObj* >( mpView->GetCreateObj() ) );
if( mxTextObj.is() )
2000-09-18 16:07:07 +00:00
{
//AW outliner needs to be set to vertical when there is no
// outliner object up to now; also it needs to be set back to not
// vertical when there was a vertical one used last time.
OutlinerParaObject* pOPO = GetTextObj()->GetOutlinerParaObject();
SdrOutliner& rOutl = mxTextObj->GetModel()->GetDrawOutliner(GetTextObj());
BOOL bVertical((pOPO && pOPO->IsVertical())
|| nSlotId == SID_ATTR_CHAR_VERTICAL
|| nSlotId == SID_TEXT_FITTOSIZE_VERTICAL);
rOutl.SetVertical(bVertical);
// #107235#
// Before ImpSetAttributesForNewTextObject the vertical writing mode
// needs to be set at the object. This is done here at the OutlinerParaObject
// directly to not mirror the layout text items involved. These items will be set
// from ImpSetAttributesForNewTextObject and below.
OutlinerParaObject* pPara = GetTextObj()->GetOutlinerParaObject();
if(!pPara)
{
GetTextObj()->ForceOutlinerParaObject();
pPara = GetTextObj()->GetOutlinerParaObject();
}
CWS-TOOLING: integrate CWS aw063 2009-02-12 13:10:24 +0100 aw r267649 : #i99123# when a primitive is invisible, it is not sufficient to produce no output when decomposing, but to add invisible data using HitTestPrimitive2D. This is needed for the slideshow which relies on geometry data in MetaFiles when painting invisible objects 2009-02-12 13:08:39 +0100 aw r267648 : #i99123# do not ignore HitTestPrimitive2D, but draw empty rectangles instead. This is needed since Slideshow is based on getting MetaFile content when painting invisible objects 2009-02-11 16:04:28 +0100 aw r267620 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:04:10 +0100 aw r267619 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:03:56 +0100 aw r267618 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:03:39 +0100 aw r267617 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:03:21 +0100 aw r267615 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:02:48 +0100 aw r267614 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:02:24 +0100 aw r267613 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:02:01 +0100 aw r267612 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:01:32 +0100 aw r267611 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:01:05 +0100 aw r267610 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:00:15 +0100 aw r267608 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 11:27:33 +0100 aw r267585 : #i98788# added missing include for STL 2009-02-10 17:46:50 +0100 aw r267570 : #i98788# added reaction on pool destruction 2009-02-10 17:11:58 +0100 aw r267562 : #i98788# added messaging mechanism to register for pool destruction 2009-02-10 13:35:35 +0100 aw r267549 : #i98788# removing changes, too complicated and risky for 3.1 2009-02-10 12:13:48 +0100 aw r267546 : #i98788# 4th round 2009-02-10 12:13:37 +0100 aw r267545 : #i98788# 4th round 2009-02-10 12:13:26 +0100 aw r267544 : #i98788# 4th round 2009-02-10 12:13:14 +0100 aw r267543 : #i98788# 4th round 2009-02-10 12:13:03 +0100 aw r267542 : #i98788# 4th round 2009-02-10 12:12:50 +0100 aw r267541 : #i98788# 4th round 2009-02-10 12:12:37 +0100 aw r267540 : #i98788# 4th round 2009-02-08 14:38:22 +0100 aw r267495 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:38:06 +0100 aw r267494 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:37:48 +0100 aw r267493 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:37:17 +0100 aw r267492 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:56 +0100 aw r267491 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:44 +0100 aw r267490 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:29 +0100 aw r267489 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:16 +0100 aw r267488 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:02 +0100 aw r267487 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:35:46 +0100 aw r267486 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-05 12:20:39 +0100 aw r267415 : #i98788# 2nd batch of adaptions for SfxItemPoolHolder addition 2009-02-04 15:12:54 +0100 aw r267385 : #i98788# added newline at EOF 2009-02-04 13:26:04 +0100 aw r267379 : #i98788# make SfxItemPool holdable 2009-02-04 13:25:40 +0100 aw r267378 : #i98788# make SfxItemPool holdable 2009-02-04 13:25:08 +0100 aw r267377 : #i98788# make SfxItemPool holdable 2009-02-04 13:24:42 +0100 aw r267376 : #i98788# make SfxItemPool holdable 2009-02-04 13:23:14 +0100 aw r267375 : #i98788# make SfxItemPool holdable 2009-02-04 13:23:02 +0100 aw r267374 : #i98788# make SfxItemPool holdable 2009-01-29 17:08:31 +0100 aw r267159 : #i97628# completed the fix 2009-01-29 17:08:15 +0100 aw r267158 : #i97628# completed the fix 2009-01-29 14:09:07 +0100 aw r267132 : #i97628# Corrected usage of ParagraphData in headers 2009-01-29 14:06:58 +0100 iha r267131 : #i98344# incorrect font size in charts 2009-01-29 12:13:46 +0100 aw r267115 : #i97628# back to old state; triggers too many errors in other modules 2009-01-29 12:03:51 +0100 aw r267114 : #i97628# enabled exceptions due to STL vector include 2009-01-29 11:21:37 +0100 aw r267107 : #i97628# added needed include 2009-01-28 17:58:29 +0100 aw r267077 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-28 17:58:12 +0100 aw r267076 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-28 17:57:51 +0100 aw r267074 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-28 17:57:21 +0100 aw r267073 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-27 17:07:33 +0100 aw r267011 : #i98402# added support for ViewRange when exporting MetaFiles in ObjectContactOfPageView::DoProcessDisplay to avoid to paint too much 2009-01-27 11:45:48 +0100 aw r266973 : #i98404# Added a warning to a place where a conversion to rectangle should not be copied from 2009-01-26 21:44:36 +0100 iha r266949 : #i98497# 3D charts are rendered with wrong size 2009-01-26 20:47:07 +0100 aw r266947 : #i98404# handle BackgroundColorPrimitive2D directly in PixelRenderers and avoid AA under all circumstances 2009-01-26 14:50:36 +0100 aw r266926 : #i98386# secured cloning of SdrObject in IMapUserData by boost::shared_prt usage 2009-01-26 12:51:30 +0100 aw r266916 : #i96581# added separated FontStretching and fallback for small X!=Y scale differences 2009-01-23 16:14:55 +0100 aw r266834 : #i96475# added missing implementation of TextDecoratedPortionPrimitive2D::getB2DRange 2009-01-23 15:24:34 +0100 aw r266826 : #i98405# fixed fallback to DrawAlphaRect to use the correctly sized rectangle 2009-01-23 13:34:43 +0100 aw r266813 : #i96474# fixed impSplitSingleWords for an unexpected case 2009-01-23 10:47:31 +0100 aw r266786 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:47:20 +0100 aw r266785 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:47:09 +0100 aw r266783 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:46:58 +0100 aw r266782 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:46:48 +0100 aw r266781 : #i98289#,#i96474# tooling and new flags for tasks
2009-03-04 14:16:02 +00:00
if(pPara && (bool)bVertical != pPara->IsVertical())
{
// set ParaObject orientation accordingly
pPara->SetVertical(bVertical);
}
// #97016#
ImpSetAttributesForNewTextObject(GetTextObj());
2000-09-18 16:07:07 +00:00
}
if (!mpView->EndCreateObj(SDRCREATE_FORCEEND))
2000-09-18 16:07:07 +00:00
{
// Textobjekt konnte nicht erzeugt werden
mxTextObj.reset(0);
2000-09-18 16:07:07 +00:00
}
else if (nSlotId == SID_TEXT_FITTOSIZE)
{
// #97016#
ImpSetAttributesFitToSize(GetTextObj());
2000-09-18 16:07:07 +00:00
SetInEditMode(rMEvt, FALSE);
}
2001-02-07 08:08:30 +00:00
else if ( nSlotId == SID_TEXT_FITTOSIZE_VERTICAL )
{
// #97016#
ImpSetAttributesFitToSizeVertical(GetTextObj());
2001-02-07 08:08:30 +00:00
SetInEditMode(rMEvt, FALSE);
}
2000-09-18 16:07:07 +00:00
else
{
// #97016#
ImpSetAttributesFitCommon(GetTextObj());
2000-09-18 16:07:07 +00:00
// Damit die Handles und der graue Rahmen stimmen
mpView->AdjustMarkHdl();
mpView->PickHandle(aPnt);
2000-09-18 16:07:07 +00:00
SetInEditMode(rMEvt, FALSE);
}
}
else if ( mpView && mpView->IsAction())
2000-09-18 16:07:07 +00:00
{
mpView->EndAction();
2000-09-18 16:07:07 +00:00
}
ForcePointer(&rMEvt);
mpWindow->ReleaseMouse();
USHORT nDrgLog1 = USHORT ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() );
2000-09-18 16:07:07 +00:00
if ( mpView && !mpView->AreObjectsMarked() &&
Abs(aMDPos.X() - aPnt.X()) < nDrgLog1 &&
Abs(aMDPos.Y() - aPnt.Y()) < nDrgLog1 &&
2000-09-18 16:07:07 +00:00
!rMEvt.IsShift() && !rMEvt.IsMod2() )
{
SdrPageView* pPV = mpView->GetSdrPageView();
2000-09-18 16:07:07 +00:00
SdrViewEvent aVEvt;
mpView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
mpView->MarkObj(aVEvt.pRootObj, pPV);
2000-09-18 16:07:07 +00:00
}
if ( !mxTextObj.is() && mpView )
2000-09-18 16:07:07 +00:00
{
if ( ( (!bEmptyTextObj && bPermanent) ||
(!bFirstObjCreated && !bPermanent) ) &&
!mpDocSh->IsReadOnly() &&
2000-09-18 16:07:07 +00:00
nSlotId != SID_TEXTEDIT )
{
/**********************************************************************
* Mengentext (linksbuendiges AutoGrow)
**********************************************************************/
mpView->SetCurrentObj(OBJ_TEXT);
mpView->SetEditMode(SDREDITMODE_CREATE);
USHORT nDrgLog = USHORT ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() );
mpView->BegCreateObj(aMDPos, (OutputDevice*) NULL, nDrgLog);
2000-09-18 16:07:07 +00:00
BOOL bSnapEnabled = mpView->IsSnapEnabled();
2000-09-18 16:07:07 +00:00
if (bSnapEnabled)
mpView->SetSnapEnabled(FALSE);
2000-09-18 16:07:07 +00:00
aPnt.X() += nDrgLog + nDrgLog;
aPnt.Y() += nDrgLog + nDrgLog;
mpView->MovAction(aPnt);
2000-09-18 16:07:07 +00:00
mxTextObj.reset( dynamic_cast< SdrTextObj* >( mpView->GetCreateObj() ) );
2000-09-18 16:07:07 +00:00
if(mxTextObj.is())
2000-09-18 16:07:07 +00:00
{
GetTextObj()->SetDisableAutoWidthOnDragging(TRUE);
2000-09-18 16:07:07 +00:00
}
if(!mpView->EndCreateObj(SDRCREATE_FORCEEND))
2000-09-18 16:07:07 +00:00
{
mxTextObj.reset(0);
2000-09-18 16:07:07 +00:00
}
if(bSnapEnabled)
mpView->SetSnapEnabled(bSnapEnabled);
2000-09-18 16:07:07 +00:00
if(mxTextObj.is())
2000-09-18 16:07:07 +00:00
{
SfxItemSet aSet(mpViewShell->GetPool());
aSet.Put(SdrTextMinFrameHeightItem(0));
aSet.Put(SdrTextMinFrameWidthItem(0));
aSet.Put(SdrTextAutoGrowHeightItem(TRUE));
aSet.Put(SdrTextAutoGrowWidthItem(TRUE));
// #91508#
if(nSlotId == SID_ATTR_CHAR_VERTICAL)
{
// #107235#
//
// Here, all items which need to be different from pool default need to be set
// again on the newly created text object.
// Since this is a simple klick text object, it is first created, then SetVertical()
// is used, then ImpSetAttributesForNewTextObject is called and then the object is
// deleted again since not the minimum drag distance was travelled. Then, a new
// klick text object is created and thus all that stuff needs to be set again here.
//
// Before using the new object the vertical writing mode
// needs to be set. This is done here at the OutlinerParaObject
// directly to not mirror the layout text items involved. These items will be set
// below.
OutlinerParaObject* pPara = GetTextObj()->GetOutlinerParaObject();
if(!pPara)
{
GetTextObj()->ForceOutlinerParaObject();
pPara = GetTextObj()->GetOutlinerParaObject();
}
if(pPara && sal_True != pPara->IsVertical())
{
// set ParaObject orientation accordingly
pPara->SetVertical(sal_True);
}
// #91508#
// aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_TOP));
aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT));
// #107235#
// Analog to the else case below, for vertical simple click texts
// one of the defaulted setted items from ImpSetAttributesForNewTextObject
// needs to be adapted to non-block mode. This could have been done with the
// #104122#, but was obviously overseen.
const SfxItemSet& rSet = mpView->GetDefaultAttr();
SvxFrameDirection eDirection = (SvxFrameDirection)((SvxFrameDirectionItem&)rSet.Get(EE_PARA_WRITINGDIR)).GetValue();
if(FRMDIR_HORI_RIGHT_TOP == eDirection || FRMDIR_VERT_TOP_RIGHT == eDirection)
{
aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_BOTTOM));
}
else
{
aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_TOP));
}
}
else
{
// #104122# This is for Format/Page settings. Since this also leads
// to the object defaults to be changed, i think this code can be
// removed. CL. wanted to take a look before adding this.
//const SdrTextHorzAdjust eHA = ( ( pDoc && pDoc->GetDefaultWritingMode() == ::com::sun::star::text::WritingMode_RL_TB ) ?
// SDRTEXTHORZADJUST_RIGHT : SDRTEXTHORZADJUST_LEFT );
//aSet.Put( SdrTextHorzAdjustItem( eHA ) );
// #104122# Look in the object defaults if left-to-right is wanted. If
// yes, set text anchoring to right to let the box grow to left.
const SfxItemSet& rSet = mpView->GetDefaultAttr();
SvxFrameDirection eDirection = (SvxFrameDirection)((SvxFrameDirectionItem&)rSet.Get(EE_PARA_WRITINGDIR)).GetValue();
if(FRMDIR_HORI_RIGHT_TOP == eDirection)
{
aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT));
}
else
{
aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_LEFT));
}
}
GetTextObj()->SetMergedItemSet(aSet);
GetTextObj()->SetDisableAutoWidthOnDragging(TRUE);
2000-09-18 16:07:07 +00:00
SetInEditMode(rMEvt, FALSE);
}
bFirstObjCreated = TRUE;
}
else
{
// In die Fkt. Selektion wechseln
if (mpView->SdrEndTextEdit() == SDRENDTEXTEDIT_DELETED)
2000-09-18 16:07:07 +00:00
{
mxTextObj.reset(0);
2000-09-18 16:07:07 +00:00
}
mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_OBJECT_SELECT,
2000-09-18 16:07:07 +00:00
SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
}
}
bMBDown = FALSE;
FuConstruct::MouseButtonUp(rMEvt);
return (bReturn);
}
/*************************************************************************
|*
|* Tastaturereignisse bearbeiten
|*
|* Wird ein KeyEvent bearbeitet, so ist der Return-Wert TRUE, andernfalls
|* FALSE.
|*
\************************************************************************/
BOOL FuText::KeyInput(const KeyEvent& rKEvt)
{
BOOL bReturn = FALSE;
mpView->SetMarkHdlWhenTextEdit(TRUE);
2000-09-18 16:07:07 +00:00
KeyCode nCode = rKEvt.GetKeyCode();
BOOL bShift = nCode.IsShift();
// #97016# IV
if(mxTextObj.is())
{
// maybe object is deleted, test if it's equal to the selected object
const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
SdrObject* pSelectedObj = 0L;
if(1 == rMarkList.GetMarkCount())
{
SdrMark* pMark = rMarkList.GetMark(0);
pSelectedObj = pMark->GetMarkedSdrObj();
}
if(mxTextObj.get() != pSelectedObj)
{
mxTextObj.reset(0);
}
}
if ( mxTextObj.is() && mxTextObj->GetObjInventor() == SdrInventor && mxTextObj->GetObjIdentifier() == OBJ_TITLETEXT && rKEvt.GetKeyCode().GetCode() == KEY_RETURN )
2000-09-18 16:07:07 +00:00
{
// Titeltext-Objekt: immer "weiche" Umbrueche
bShift = TRUE;
}
USHORT nKey = nCode.GetCode();
KeyCode aKeyCode (nKey, bShift, nCode.IsMod1(), nCode.IsMod2() );
KeyEvent aKEvt(rKEvt.GetCharCode(), aKeyCode);
BOOL bOK = TRUE;
if (mpDocSh->IsReadOnly())
2000-09-18 16:07:07 +00:00
{
bOK = !EditEngine::DoesKeyChangeText(aKEvt);
}
if( aKeyCode.GetCode() == KEY_PAGEUP || aKeyCode.GetCode() == KEY_PAGEDOWN )
{
bOK = FALSE; // default handling in base class
}
if (bOK && mpView->KeyInput(aKEvt, mpWindow) )
2000-09-18 16:07:07 +00:00
{
bReturn = TRUE;
mpViewShell->GetViewFrame()->GetBindings().Invalidate( SidArray );
2000-09-18 16:07:07 +00:00
2001-03-26 13:37:56 +00:00
// if ( pTextObj )
// pTextObj->SetEmptyPresObj(FALSE);
2000-09-18 16:07:07 +00:00
}
else if (aKeyCode == KEY_ESCAPE)
{
bReturn = cancel();
2000-09-18 16:07:07 +00:00
}
if( bPermanent )
{
mpView->SetCurrentObj(OBJ_TEXT);
mpView->SetEditMode(SDREDITMODE_CREATE);
2000-09-18 16:07:07 +00:00
}
if (!bReturn)
{
bReturn = FuDraw::KeyInput(aKEvt);
}
return (bReturn);
}
/*************************************************************************
|*
|* Function aktivieren
|*
\************************************************************************/
void FuText::Activate()
{
mpView->SetQuickTextEditMode(mpViewShell->GetFrameView()->IsQuickEdit());
2000-09-18 16:07:07 +00:00
CWS-TOOLING: integrate CWS aw058 2008-11-19 14:27:57 +0100 aw r263994 : #i95264# corrected line primitive range calculation for hairlines 2008-11-18 11:31:52 +0100 wg r263754 : i96156 2008-11-18 11:22:38 +0100 wg r263752 : i96156 2008-11-13 11:46:49 +0100 aw r263626 : #i93169# used flag the wrong way; true means that nothing was done yet 2008-11-12 15:33:41 +0100 wg r263601 : i96156 2008-11-12 13:22:38 +0100 wg r263592 : i95527 2008-11-12 13:18:51 +0100 wg r263591 : i95527 2008-10-29 13:22:02 +0100 aw r262794 : #i93485# identified reason and with PL's help changed problem accordingly with usage of an old fallback. This will need to be optimized again by HDU when he finds the time. 2008-10-28 18:23:04 +0100 aw r262763 : unxmacxi compiler warning fixed 2008-10-28 18:17:01 +0100 aw r262762 : unxmacxi compiler warning fixed 2008-10-28 17:55:18 +0100 aw r262761 : unxmacxi compiler warning fixed 2008-10-28 13:48:22 +0100 aw r262743 : #i93485# added UnifiedAlphaPrimitive2D to VclRenderer; corrected getB2DRange implementations for hairlines which are view-dependent 2008-10-28 12:40:55 +0100 aw r262735 : #i93485# had to move Pre/PostPaint to LocalPre/PostPaint since PrePaint is a virtual window method 2008-10-27 15:54:10 +0100 aw r262679 : #i19871# adapted the call order to parent implementations in some Nbc methods in SdrPathObj due to errors in SnapRect recalculation when GluePoints are involved 2008-10-24 18:31:48 +0200 aw r262661 : #i77187# disable all buttons in bezier toolbar when move and/or resize protected object is involved 2008-10-24 18:30:16 +0200 aw r262660 : #i77187# simplified and secured model changers, added toolbar update, disabled move drag start when polygon point is selected 2008-10-24 12:57:50 +0200 hdu r262635 : #i93485# use device transformation for SAL layer 2008-10-24 12:41:37 +0200 hdu r262634 : #i93485# use device transformation for SAL layer 2008-10-23 19:46:12 +0200 aw r262630 : mac compiler warning fixed 2008-10-23 18:15:02 +0200 aw r262628 : #i93485# modified dialog previews to use prerendering 2008-10-23 18:14:27 +0200 aw r262627 : #i93485# added assert when render helper uses Window as copy source 2008-10-22 18:07:30 +0200 aw r262610 : #i95264# fixes assertion 2008-10-22 14:31:51 +0200 aw r262606 : #i89661# also enabling DrawTransparent shortcut for VCL-Renderer 2008-10-22 14:10:31 +0200 aw r262604 : #i89661# new HitTest 2D primitive to support BoundRect and HitTest calculations/tests 2008-10-22 14:09:22 +0200 aw r262603 : #i89661# new HitTest tolerance, new TextFrame selection overlay, support for HitTest geometry 2008-10-22 14:08:16 +0200 aw r262602 : #i89661# correcting old HitTest tolerance expansion 2008-10-20 15:31:48 +0200 aw r262321 : #i89661# added patch to test it 2008-10-20 11:50:31 +0200 aw r262310 : #i87762# removed no longer used icons (aw053) 2008-10-17 15:41:48 +0200 aw r262288 : #i93169#, #i93180# FormControl corrections for Primitive handling 2008-10-17 15:40:54 +0200 aw r262287 : #i93169#, #i93180# FormControl corrections for Primitive handling 2008-10-16 11:12:44 +0200 aw r262253 : #i93595# removed superfluous grid interface 2008-10-16 11:11:20 +0200 aw r262252 : #i93595# changed grid display to sub-grid usage and new defaults 2008-10-15 15:09:40 +0200 aw r262234 : #i93597# moved flag for only vertical PageBorder, added reacting on it to primitive creation 2008-10-15 15:09:09 +0200 aw r262233 : #i93597# moved flag for only vertical PageBorder 2008-10-15 15:08:46 +0200 aw r262232 : #i93597# moved flag for only vertical PageBorder, added reacting on it to primitive creation 2008-10-14 16:27:07 +0200 aw r262207 : #i93648# (flushViewObjectContacts) and #i93318# (propertyChange) 2008-10-14 16:25:10 +0200 aw r262206 : #i93318# back to old state since detecting a change is not placed well at the primitive (which is a graphical information at the itme it was fetched). Instead i will add the needed check and flush at the FormControl's VOC 2008-10-14 13:47:38 +0200 aw r262201 : #i93318# added a change listener to the XControlModel and code to make the operator== at control primitive fail
2008-11-19 14:05:59 +00:00
// #i89661# it's no longer necessary to make it so big here, it's fine tuned
// for text objects in SdrMarkView::ImpCheckObjHit
mpView->SetHitTolerancePixel( 2 * HITPIX );
2000-09-18 16:07:07 +00:00
OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
2000-09-18 16:07:07 +00:00
if (pOLV)
pOLV->ShowCursor();
FuConstruct::Activate();
if( pOLV )
mpView->SetEditMode(SDREDITMODE_EDIT);
2000-09-18 16:07:07 +00:00
}
/*************************************************************************
|*
|* Function deaktivieren
|*
\************************************************************************/
void FuText::Deactivate()
{
OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
2000-09-18 16:07:07 +00:00
if (pOLV)
pOLV->HideCursor();
mpView->SetHitTolerancePixel( HITPIX );
2000-09-18 16:07:07 +00:00
FuConstruct::Deactivate();
}
/*************************************************************************
|*
|* Objekt in Edit-Mode setzen
|*
\************************************************************************/
void FuText::SetInEditMode(const MouseEvent& rMEvt, BOOL bQuickDrag)
{
SdrPageView* pPV = mpView->GetSdrPageView();
if( mxTextObj.is() && (mxTextObj->GetPage() == pPV->GetPage()) )
2000-09-18 16:07:07 +00:00
{
mpView->SetCurrentObj(OBJ_TEXT);
2000-09-18 16:07:07 +00:00
if( bPermanent )
mpView->SetEditMode(SDREDITMODE_CREATE);
2000-09-18 16:07:07 +00:00
else
mpView->SetEditMode(SDREDITMODE_EDIT);
2000-09-18 16:07:07 +00:00
BOOL bEmptyOutliner = FALSE;
if (!GetTextObj()->GetOutlinerParaObject() && mpView->GetTextEditOutliner())
2000-09-18 16:07:07 +00:00
{
::Outliner* pOutl = mpView->GetTextEditOutliner();
2000-09-18 16:07:07 +00:00
ULONG nParaAnz = pOutl->GetParagraphCount();
Paragraph* p1stPara = pOutl->GetParagraph( 0 );
if (nParaAnz==1 && p1stPara)
{
// Bei nur einem Pararaph
if (pOutl->GetText(p1stPara).Len() == 0)
{
bEmptyOutliner = TRUE;
}
}
}
if (GetTextObj() != mpView->GetTextEditObject() || bEmptyOutliner)
2000-09-18 16:07:07 +00:00
{
UINT32 nInv = mxTextObj->GetObjInventor();
UINT16 nSdrObjKind = mxTextObj->GetObjIdentifier();
2000-09-18 16:07:07 +00:00
if (nInv == SdrInventor && GetTextObj()->HasTextEdit() &&
2000-09-18 16:07:07 +00:00
(nSdrObjKind == OBJ_TEXT ||
nSdrObjKind == OBJ_TITLETEXT ||
nSdrObjKind == OBJ_OUTLINETEXT || !mxTextObj->IsEmptyPresObj() ) )
2000-09-18 16:07:07 +00:00
{
// Neuen Outliner machen (gehoert der SdrObjEditView)
SdrOutliner* pOutl = SdrMakeOutliner( OUTLINERMODE_OUTLINEOBJECT, mpDoc );
2000-09-18 16:07:07 +00:00
if (bEmptyOutliner)
mpView->SdrEndTextEdit(sal_True);
2000-09-18 16:07:07 +00:00
SdrTextObj* pTextObj = GetTextObj();
if( pTextObj )
{
OutlinerParaObject* pOPO = pTextObj->GetOutlinerParaObject();
if( ( pOPO && pOPO->IsVertical() ) || (nSlotId == SID_ATTR_CHAR_VERTICAL) || (nSlotId == SID_TEXT_FITTOSIZE_VERTICAL) )
pOutl->SetVertical( TRUE );
2001-02-05 10:35:37 +00:00
if( pTextObj->getTextCount() > 1 )
{
Point aPix(rMEvt.GetPosPixel());
Point aPnt(mpWindow->PixelToLogic(aPix));
pTextObj->setActiveText( pTextObj->CheckTextHit(aPnt ) );
}
2001-02-05 10:35:37 +00:00
if (mpView->SdrBeginTextEdit(pTextObj, pPV, mpWindow, sal_True, pOutl) && mxTextObj->GetObjInventor() == SdrInventor)
{
bFirstObjCreated = TRUE;
DeleteDefaultText();
2000-09-18 16:07:07 +00:00
OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
2000-09-18 16:07:07 +00:00
nSdrObjKind = mxTextObj->GetObjIdentifier();
2000-09-18 16:07:07 +00:00
SdrViewEvent aVEvt;
SdrHitKind eHit = mpView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
2000-09-18 16:07:07 +00:00
if (eHit == SDRHIT_TEXTEDIT)
2000-09-18 16:07:07 +00:00
{
// Text getroffen
if (nSdrObjKind == OBJ_TEXT ||
nSdrObjKind == OBJ_TITLETEXT ||
nSdrObjKind == OBJ_OUTLINETEXT ||
nSdrObjKind == OBJ_TABLE ||
nSlotId == SID_TEXTEDIT ||
!bQuickDrag)
{
pOLV->MouseButtonDown(rMEvt);
pOLV->MouseMove(rMEvt);
pOLV->MouseButtonUp(rMEvt);
}
2000-09-18 16:07:07 +00:00
if (mpViewShell->GetFrameView()->IsQuickEdit() && bQuickDrag && GetTextObj()->GetOutlinerParaObject())
{
pOLV->MouseButtonDown(rMEvt);
}
}
else
2000-09-18 16:07:07 +00:00
{
// #98198# Move cursor to end of text
ESelection aNewSelection(EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND, EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND);
pOLV->SetSelection(aNewSelection);
2000-09-18 16:07:07 +00:00
}
}
else
{
mpView->RestoreDefaultText(dynamic_cast< SdrTextObj* >( mxTextObj.get() ));
}
2000-09-18 16:07:07 +00:00
}
}
}
}
else
{
mxTextObj.reset(0);
2000-09-18 16:07:07 +00:00
}
}
/*************************************************************************
|*
|* Texteingabe wird gestartet, ggf. Default-Text loeschen
|*
\************************************************************************/
BOOL FuText::DeleteDefaultText()
{
BOOL bDeleted = FALSE;
if ( mxTextObj.is() && mxTextObj->IsEmptyPresObj() )
2000-09-18 16:07:07 +00:00
{
String aString;
SdPage* pPage = (SdPage*) mxTextObj->GetPage();
2000-09-18 16:07:07 +00:00
if (pPage)
{
PresObjKind ePresObjKind = pPage->GetPresObjKind(mxTextObj.get());
2000-09-18 16:07:07 +00:00
if ( (ePresObjKind == PRESOBJ_TITLE ||
ePresObjKind == PRESOBJ_OUTLINE ||
ePresObjKind == PRESOBJ_NOTES ||
ePresObjKind == PRESOBJ_TEXT) &&
!pPage->IsMasterPage() )
{
::Outliner* pOutliner = mpView->GetTextEditOutliner();
2000-09-18 16:07:07 +00:00
SfxStyleSheet* pSheet = pOutliner->GetStyleSheet( 0 );
BOOL bIsUndoEnabled = pOutliner->IsUndoEnabled();
if( bIsUndoEnabled )
pOutliner->EnableUndo(FALSE);
2000-09-18 16:07:07 +00:00
pOutliner->SetText( String(), pOutliner->GetParagraph( 0 ) );
if( bIsUndoEnabled )
pOutliner->EnableUndo(TRUE);
2000-09-18 16:07:07 +00:00
if (pSheet &&
(ePresObjKind == PRESOBJ_NOTES || ePresObjKind == PRESOBJ_TEXT))
pOutliner->SetStyleSheet(0, pSheet);
mxTextObj->SetEmptyPresObj(TRUE);
2000-09-18 16:07:07 +00:00
bDeleted = TRUE;
}
}
}
return(bDeleted);
}
/*************************************************************************
|*
|* Command-event
|*
\************************************************************************/
BOOL FuText::Command(const CommandEvent& rCEvt)
{
return( FuPoor::Command(rCEvt) );
}
/*************************************************************************
|*
|* Help-event
|*
\************************************************************************/
BOOL FuText::RequestHelp(const HelpEvent& rHEvt)
{
BOOL bReturn = FALSE;
OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
2000-09-18 16:07:07 +00:00
if ((Help::IsBalloonHelpEnabled() || Help::IsQuickHelpEnabled()) &&
mxTextObj.is() && pOLV && pOLV->GetFieldUnderMousePointer())
2000-09-18 16:07:07 +00:00
{
String aHelpText;
const SvxFieldItem* pFieldItem = pOLV->GetFieldUnderMousePointer();
const SvxFieldData* pField = pFieldItem->GetField();
if (pField && pField->ISA(SvxURLField))
{
/******************************************************************
* URL-Field
******************************************************************/
aHelpText = INetURLObject::decode( ((const SvxURLField*)pField)->GetURL(), '%', INetURLObject::DECODE_WITH_CHARSET );
2000-09-18 16:07:07 +00:00
}
if (aHelpText.Len())
{
Rectangle aLogicPix = mpWindow->LogicToPixel(mxTextObj->GetLogicRect());
Rectangle aScreenRect(mpWindow->OutputToScreenPixel(aLogicPix.TopLeft()),
mpWindow->OutputToScreenPixel(aLogicPix.BottomRight()));
2000-09-18 16:07:07 +00:00
if (Help::IsBalloonHelpEnabled())
{
bReturn = Help::ShowBalloon( (Window*)mpWindow, rHEvt.GetMousePosPixel(), aScreenRect, aHelpText);
2000-09-18 16:07:07 +00:00
}
else if (Help::IsQuickHelpEnabled())
{
bReturn = Help::ShowQuickHelp( (Window*)mpWindow, aScreenRect, aHelpText);
2000-09-18 16:07:07 +00:00
}
}
}
if (!bReturn)
{
bReturn = FuConstruct::RequestHelp(rHEvt);
}
return(bReturn);
}
/*************************************************************************
|*
|* Request verarbeiten
|*
\************************************************************************/
void FuText::ReceiveRequest(SfxRequest& rReq)
{
nSlotId = rReq.GetSlot();
// Dann Basisklasse rufen (dort wird u.a. nSlotId NICHT gesetzt)
FuPoor::ReceiveRequest(rReq);
if (nSlotId == SID_TEXTEDIT || mpViewShell->GetFrameView()->IsQuickEdit() || /*#95971#*/ SID_ATTR_CHAR == nSlotId)
2000-09-18 16:07:07 +00:00
{
MouseEvent aMEvt(mpWindow->GetPointerPosPixel());
2000-09-18 16:07:07 +00:00
mxTextObj.reset(0);
2000-09-18 16:07:07 +00:00
if (nSlotId == SID_TEXTEDIT)
{
// Wird gerade editiert?
if(!bTestText)
mxTextObj.reset( dynamic_cast< SdrTextObj* >( mpView->GetTextEditObject() ) );
2000-09-18 16:07:07 +00:00
if (!mxTextObj.is())
2000-09-18 16:07:07 +00:00
{
// Versuchen, ein Obj zu selektieren
SdrPageView* pPV = mpView->GetSdrPageView();
2000-09-18 16:07:07 +00:00
SdrViewEvent aVEvt;
mpView->PickAnything(aMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
mpView->MarkObj(aVEvt.pRootObj, pPV);
2000-09-18 16:07:07 +00:00
if (aVEvt.pObj && aVEvt.pObj->ISA(SdrTextObj))
{
mxTextObj.reset( static_cast< SdrTextObj* >( aVEvt.pObj ) );
2000-09-18 16:07:07 +00:00
}
}
}
else if (mpView->AreObjectsMarked())
2000-09-18 16:07:07 +00:00
{
const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
2000-09-18 16:07:07 +00:00
if (rMarkList.GetMarkCount() == 1)
{
SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
2000-09-18 16:07:07 +00:00
if (pObj->ISA(SdrTextObj))
{
mxTextObj.reset( static_cast< SdrTextObj* >( pObj ) );
2000-09-18 16:07:07 +00:00
}
}
}
BOOL bQuickDrag = TRUE;
const SfxItemSet* pArgs = rReq.GetArgs();
if (pArgs
// #98198# test for type before using
&& SID_TEXTEDIT == nSlotId
&& SFX_ITEM_SET == pArgs->GetItemState(SID_TEXTEDIT)
&& (UINT16) ((SfxUInt16Item&) pArgs->Get(SID_TEXTEDIT)).GetValue() == 2)
2000-09-18 16:07:07 +00:00
{
// Anwahl per Doppelklick -> kein QuickDrag zulassen
bQuickDrag = FALSE;
}
SetInEditMode(aMEvt, bQuickDrag);
}
}
/*************************************************************************
|*
|* SpellChecker: Error-LinkHdl
|*
\************************************************************************/
IMPL_LINK( FuText, SpellError, void *, nLang )
{
String aError( ::GetLanguageString( (LanguageType)(ULONG)nLang ) );
ErrorHandler::HandleError(* new StringErrorInfo(
ERRCODE_SVX_LINGU_LANGUAGENOTEXISTS, aError) );
return 0;
}
/*************************************************************************
|*
|* Reaktion auf Doppelklick
|*
\************************************************************************/
void FuText::DoubleClick(const MouseEvent& )
2000-09-18 16:07:07 +00:00
{
// Nichts zu tun
}
/** #97016#
#105815# Removed the insertion of default text and putting a new text
object directly into edit mode.
*/
SdrObject* FuText::CreateDefaultObject(const sal_uInt16 nID, const Rectangle& rRectangle)
{
// case SID_TEXTEDIT: // BASIC ???
// case SID_ATTR_CHAR:
// case SID_ATTR_CHAR_VERTICAL:
// case SID_TEXT_FITTOSIZE:
// case SID_TEXT_FITTOSIZE_VERTICAL:
SdrObject* pObj = SdrObjFactory::MakeNewObject(
mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
0L, mpDoc);
if(pObj)
{
if(pObj->ISA(SdrTextObj))
{
SdrTextObj* pText = (SdrTextObj*)pObj;
pText->SetLogicRect(rRectangle);
sal_Bool bVertical = (SID_ATTR_CHAR_VERTICAL == nID || SID_TEXT_FITTOSIZE_VERTICAL == nID);
pText->SetVerticalWriting(bVertical);
// #97016#
ImpSetAttributesForNewTextObject(pText);
if (nSlotId == SID_TEXT_FITTOSIZE)
{
// #97016#
ImpSetAttributesFitToSize(pText);
}
else if ( nSlotId == SID_TEXT_FITTOSIZE_VERTICAL )
{
// #97016#
ImpSetAttributesFitToSizeVertical(pText);
}
else
{
// #97016#
ImpSetAttributesFitCommon(pText);
}
// Put text object into edit mode.
SdrPageView* pPV = mpView->GetSdrPageView();
mpView->SdrBeginTextEdit(pText, pPV);
}
else
{
DBG_ERROR("Object is NO text object");
}
}
2000-09-18 16:07:07 +00:00
return pObj;
}
2000-09-18 16:07:07 +00:00
/** is called when the currenct function should be aborted. <p>
This is used when a function gets a KEY_ESCAPE but can also
be called directly.
@returns true if a active function was aborted
*/
bool FuText::cancel()
{
if ( mpView->IsTextEdit() )
{
if(mpView->SdrEndTextEdit() == SDRENDTEXTEDIT_DELETED)
mxTextObj.reset(0);
mpView->SetCurrentObj(OBJ_TEXT);
mpView->SetEditMode(SDREDITMODE_EDIT);
return true;
}
else
{
return false;
}
}
CWS-TOOLING: integrate CWS impressfontsize 2008-12-11 14:15:16 +0100 wg r265298 : i97125 2008-12-11 12:54:53 +0100 wg r265288 : i97125 2008-12-11 12:53:03 +0100 wg r265287 : i97125 2008-12-11 11:25:42 +0100 wg r265270 : i97125 2008-12-11 10:22:13 +0100 wg r265253 : i97125 2008-12-11 09:22:47 +0100 wg r265247 : i97125 2008-12-09 15:28:51 +0100 cl r265097 : added missing toolbar buttons for inc/dec font size 2008-12-08 17:39:46 +0100 cl r265012 : #i80257# added autolayout text only 2008-12-08 17:32:07 +0100 cl r265011 : #i80257# added autolayout text only 2008-12-08 16:42:19 +0100 cl r265008 : #i94459# fixed a bug in insertByName and replaceByName 2008-12-08 16:25:26 +0100 cl r265007 : #i80257# new image for text only auto layout in impress 2008-12-08 16:24:01 +0100 cl r265006 : #i80257# new image for text only auto layout in impress 2008-12-08 16:01:46 +0100 cl r265003 : #i88855# changed wording from Monitor to Display 2008-12-08 15:57:24 +0100 cl r265002 : #i91904# applied patch to fix a wrong index access 2008-12-05 12:51:47 +0100 cl r264900 : #i8824# allow setting of text properties at shape without reformating text 2008-12-05 11:09:21 +0100 cl r264895 : fixed build problem 2008-12-04 12:04:09 +0100 cl r264829 : fixed build issue 2008-12-04 11:03:58 +0100 cl r264823 : #i8824# set new fontsize at shape 2008-12-02 22:39:22 +0100 cl r264732 : fixed build problem 2008-12-02 22:38:42 +0100 cl r264731 : fixed build problem 2008-12-01 17:44:29 +0100 cl r264623 : CWS-TOOLING: rebase CWS impressfontsize to trunk@264325 (milestone: DEV300:m36) 2008-11-07 11:38:13 +0100 cl r263418 : #i95920# fixed an OpenSolaris build breaker 2008-11-06 14:56:04 +0100 cl r263386 : #i40730# added support to supress export of hidden slides to html 2008-11-06 14:55:41 +0100 cl r263385 : #i40730# added support to supress export of hidden slides to html 2008-11-06 14:03:59 +0100 cl r263384 : #158530# allow editing of interaction links with hyperlink editor 2008-10-20 15:34:13 +0200 cl r262322 : #i8824# migrate cws impressfontsize to subversion.
2008-12-11 15:25:59 +00:00
void FuText::ChangeFontSize( bool bGrow, OutlinerView* pOLV, const FontList* pFontList, ::sd::View* pView )
{
if( !pFontList || !pView )
return;
if( pOLV )
{
pOLV->GetEditView().ChangeFontSize( bGrow, pFontList );
}
else
{
// SdDrawDocument* pDoc = pView->GetDoc();
const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
for( sal_uInt32 nMark = 0; nMark < rMarkList.GetMarkCount(); nMark++ )
{
SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( rMarkList.GetMark(nMark)->GetMarkedSdrObj() );
if( pTextObj )
{
for( sal_Int32 nText = 0; nText < pTextObj->getTextCount(); nText++ )
{
pTextObj->setActiveText( nText );
// Put text object into edit mode.
SdrPageView* pPV = pView->GetSdrPageView();
pView->SdrBeginTextEdit(pTextObj, pPV);
pOLV = pView->GetTextEditOutlinerView();
if( pOLV )
{
EditEngine* pEditEngine = pOLV->GetEditView().GetEditEngine();
if( pEditEngine )
{
ESelection aSel;
aSel.nEndPara = pEditEngine->GetParagraphCount()-1;
aSel.nEndPos = pEditEngine->GetTextLen(aSel.nEndPara);
pOLV->SetSelection(aSel);
}
ChangeFontSize( bGrow, pOLV, pFontList, pView );
}
pView->SdrEndTextEdit();
}
SfxItemSet aShapeSet( pTextObj->GetMergedItemSet() );
if( EditView::ChangeFontSize( bGrow, aShapeSet, pFontList ) )
{
pTextObj->SetObjectItemNoBroadcast( aShapeSet.Get( EE_CHAR_FONTHEIGHT ) );
pTextObj->SetObjectItemNoBroadcast( aShapeSet.Get( EE_CHAR_FONTHEIGHT_CJK ) );
pTextObj->SetObjectItemNoBroadcast( aShapeSet.Get( EE_CHAR_FONTHEIGHT_CTL ) );
}
}
}
}
}
} // end of namespace sd