office-gobmx/sd/source/ui/view/drviewse.cxx

1671 lines
57 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* 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.
*
* 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).
*
* 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.
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"
#include <com/sun/star/presentation/XPresentation2.hpp>
#include <com/sun/star/form/FormButtonType.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/i18n/TransliterationModules.hdl>
#include <comphelper/processfactory.hxx>
#include "undo/undomanager.hxx"
#include <vcl/waitobj.hxx>
#include <svl/aeitem.hxx>
#include <editeng/editstat.hxx>
#include <vcl/msgbox.hxx>
#include <svl/urlbmk.hxx>
#include <svx/svdpagv.hxx>
#include <svx/fmshell.hxx>
#include <vcl/scrbar.hxx>
#include <svx/svdopath.hxx>
#include <svx/svdundo.hxx>
#include <svx/svdorect.hxx>
#include <svx/svdograf.hxx>
#include <svl/eitem.hxx>
#include <editeng/eeitem.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/request.hxx>
#include <svx/svxids.hrc>
#include <editeng/flditem.hxx>
#include <svx/ruler.hxx>
#include <svx/obj3d.hxx>
#include <svx/fmglob.hxx>
#include <svx/svdouno.hxx>
#include <svx/dataaccessdescriptor.hxx>
#include <tools/urlobj.hxx>
#include <svl/slstitm.hxx>
#include <sfx2/ipclient.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <avmedia/mediawindow.hxx>
#include <svl/urihelper.hxx>
#include <sfx2/docfile.hxx>
#include "DrawViewShell.hxx"
#include "slideshow.hxx"
#include "ViewShellImplementation.hxx"
#include "ViewShellHint.hxx"
#include "framework/FrameworkHelper.hxx"
#include "app.hrc"
#include "glob.hrc"
#include "strings.hrc"
#include "res_bmp.hrc"
#include "drawdoc.hxx"
#include "fusel.hxx"
#include "futext.hxx"
#include "fuconrec.hxx"
#include "fuconcs.hxx"
#include "fuconuno.hxx"
#include "fuconbez.hxx"
#include "fuediglu.hxx"
#include "fuconarc.hxx"
#include "fucon3d.hxx"
#include "sdresid.hxx"
#include "slideshow.hxx"
#include "Outliner.hxx"
#include "PresentationViewShell.hxx"
#include "sdpage.hxx"
#include "FrameView.hxx"
#include "zoomlist.hxx"
#include "drawview.hxx"
#include "DrawDocShell.hxx"
#include "sdattr.hxx"
#include "ViewShellBase.hxx"
#include "ToolBarManager.hxx"
#include "anminfo.hxx"
#include "optsitem.hxx"
#include "Window.hxx"
#include "fuformatpaintbrush.hxx"
using ::rtl::OUString;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::presentation;
namespace sd {
#ifdef _MSC_VER
#pragma optimize ( "", off )
#endif
/*************************************************************************
|*
|* Permanente Funktionen
|*
\************************************************************************/
void ImpAddPrintableCharactersToTextEdit(SfxRequest& rReq, ::sd::View* pView)
{
// #98198# evtl. feed characters to activated textedit
const SfxItemSet* pSet = rReq.GetArgs();
if(pSet)
{
String aInputString;
if(SFX_ITEM_SET == pSet->GetItemState(SID_ATTR_CHAR))
aInputString = ((SfxStringItem&)pSet->Get(SID_ATTR_CHAR)).GetValue();
if(aInputString.Len())
{
OutlinerView* pOLV = pView->GetTextEditOutlinerView();
if(pOLV)
{
for(sal_uInt16 a(0); a < aInputString.Len(); a++)
{
sal_Char aChar = (sal_Char)aInputString.GetChar(a);
KeyCode aKeyCode;
KeyEvent aKeyEvent(aChar, aKeyCode);
// add actual character
pOLV->PostKeyEvent(aKeyEvent);
}
}
}
}
}
void DrawViewShell::FuPermanent(SfxRequest& rReq)
{
// Waehrend einer Native-Diashow wird nichts ausgefuehrt!
if (SlideShow::IsRunning(GetViewShellBase()))
return;
USHORT nSId = rReq.GetSlot();
if( HasCurrentFunction() &&
( nSId == SID_TEXTEDIT || nSId == SID_ATTR_CHAR || nSId == SID_TEXT_FITTOSIZE ||
nSId == SID_ATTR_CHAR_VERTICAL || nSId == SID_TEXT_FITTOSIZE_VERTICAL ) )
{
FunctionReference xFunc( GetCurrentFunction() );
FuText* pFuText = dynamic_cast< FuText* >( xFunc.get() );
if( pFuText )
{
pFuText->SetPermanent(TRUE);
xFunc->ReceiveRequest( rReq );
MapSlot( nSId );
Invalidate();
Invalidate();
// #98198# evtl. feed characters to activated textedit
if(SID_ATTR_CHAR == nSId && GetView() && GetView()->IsTextEdit())
ImpAddPrintableCharactersToTextEdit(rReq, GetView());
rReq.Done();
return;
}
}
CheckLineTo (rReq);
USHORT nOldSId = 0;
BOOL bPermanent = FALSE;
if( !mpDrawView )
return;
if(HasCurrentFunction())
{
if( (nSId == SID_FORMATPAINTBRUSH) && (GetCurrentFunction()->GetSlotID() == SID_TEXTEDIT) )
{
// save text edit mode for format paintbrush!
SetOldFunction( GetCurrentFunction() );
}
else
{
if(GetOldFunction() == GetCurrentFunction())
{
SetOldFunction(0);
}
}
if ( nSId != SID_TEXTEDIT && nSId != SID_ATTR_CHAR && nSId != SID_TEXT_FITTOSIZE &&
nSId != SID_ATTR_CHAR_VERTICAL && nSId != SID_TEXT_FITTOSIZE_VERTICAL &&
nSId != SID_FORMATPAINTBRUSH &&
mpDrawView->IsTextEdit() )
{
mpDrawView->SdrEndTextEdit();
}
if( HasCurrentFunction() )
{
nOldSId = GetCurrentFunction()->GetSlotID();
if (nOldSId == nSId ||
((nOldSId == SID_TEXTEDIT || nOldSId == SID_ATTR_CHAR || nOldSId == SID_TEXT_FITTOSIZE ||
nOldSId == SID_ATTR_CHAR_VERTICAL || nOldSId == SID_TEXT_FITTOSIZE_VERTICAL) &&
(nSId == SID_TEXTEDIT || nSId == SID_ATTR_CHAR || nSId == SID_TEXT_FITTOSIZE ||
nSId == SID_ATTR_CHAR_VERTICAL || nSId == SID_TEXT_FITTOSIZE_VERTICAL )))
{
bPermanent = TRUE;
}
GetCurrentFunction()->Deactivate();
}
SetCurrentFunction(0);
SfxBindings& rBind = GetViewFrame()->GetBindings();
rBind.Invalidate(nOldSId);
rBind.Update(nOldSId);
}
// Slot wird gemapped (ToolboxImages/-Slots)
MapSlot( nSId );
switch ( nSId )
{
case SID_TEXTEDIT: // BASIC ???
case SID_ATTR_CHAR:
case SID_ATTR_CHAR_VERTICAL:
case SID_TEXT_FITTOSIZE:
case SID_TEXT_FITTOSIZE_VERTICAL:
{
SetCurrentFunction( FuText::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) );
GetCurrentFunction()->DoExecute(rReq);
SfxBindings& rBindings = GetViewFrame()->GetBindings();
rBindings.Invalidate( SID_ATTR_CHAR );
rBindings.Invalidate( SID_ATTR_CHAR_VERTICAL );
rBindings.Invalidate( SID_TEXT_FITTOSIZE );
rBindings.Invalidate( SID_TEXT_FITTOSIZE_VERTICAL );
// #98198# evtl. feed characters to activated textedit
if(SID_ATTR_CHAR == nSId && GetView() && GetView()->IsTextEdit())
ImpAddPrintableCharactersToTextEdit(rReq, GetView());
rReq.Done();
}
break;
case SID_FM_CREATE_CONTROL:
{
SetCurrentFunction( FuConstructUnoControl::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
rReq.Done();
}
break;
// #98721#
case SID_FM_CREATE_FIELDCONTROL:
{
SFX_REQUEST_ARG( rReq, pDescriptorItem, SfxUnoAnyItem, SID_FM_DATACCESS_DESCRIPTOR, sal_False );
DBG_ASSERT( pDescriptorItem, "DrawViewShell::FuPermanent(SID_FM_CREATE_FIELDCONTROL): invalid request args!" );
if(pDescriptorItem)
{
// get the form view
FmFormView* pFormView = PTR_CAST(FmFormView, mpDrawView);
SdrPageView* pPageView = pFormView ? pFormView->GetSdrPageView() : NULL;
if(pPageView)
{
::svx::ODataAccessDescriptor aDescriptor(pDescriptorItem->GetValue());
SdrObject* pNewDBField = pFormView->CreateFieldControl(aDescriptor);
if(pNewDBField)
{
Rectangle aVisArea = GetActiveWindow()->PixelToLogic(Rectangle(Point(0,0), GetActiveWindow()->GetOutputSizePixel()));
Point aObjPos(aVisArea.Center());
Size aObjSize(pNewDBField->GetLogicRect().GetSize());
aObjPos.X() -= aObjSize.Width() / 2;
aObjPos.Y() -= aObjSize.Height() / 2;
Rectangle aNewObjectRectangle(aObjPos, aObjSize);
pNewDBField->SetLogicRect(aNewObjectRectangle);
GetView()->InsertObjectAtView(pNewDBField, *pPageView);
}
}
}
rReq.Done();
}
break;
case SID_OBJECT_SELECT:
case SID_OBJECT_ROTATE:
case SID_OBJECT_MIRROR:
case SID_OBJECT_CROP:
case SID_OBJECT_TRANSPARENCE:
case SID_OBJECT_GRADIENT:
case SID_OBJECT_SHEAR:
case SID_OBJECT_CROOK_ROTATE:
case SID_OBJECT_CROOK_SLANT:
case SID_OBJECT_CROOK_STRETCH:
case SID_CONVERT_TO_3D_LATHE:
{
short nSlotId = rReq.GetSlot();
if (nSlotId == SID_OBJECT_CROOK_ROTATE ||
nSlotId == SID_OBJECT_CROOK_SLANT ||
nSlotId == SID_OBJECT_CROOK_STRETCH)
{
if ( mpDrawView->GetMarkedObjectList().GetMarkCount() > 0 &&
!mpDrawView->IsCrookAllowed( mpDrawView->IsCrookNoContortion() ) )
{
if ( mpDrawView->IsPresObjSelected() )
{
::sd::Window* pWindow = GetActiveWindow();
InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
}
else if ( QueryBox(GetActiveWindow(), WB_YES_NO,
String(SdResId(STR_ASK_FOR_CONVERT_TO_BEZIER) )
).Execute() == RET_YES )
{
// Implizite Wandlung in Bezier
WaitObject aWait( (Window*)GetActiveWindow() );
mpDrawView->ConvertMarkedToPathObj(FALSE);
}
}
}
else if (nSlotId == SID_OBJECT_SHEAR)
{
ULONG i = 0;
const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
ULONG nMarkCnt = rMarkList.GetMarkCount();
BOOL b3DObjMarked = FALSE;
while (i < nMarkCnt && !b3DObjMarked)
{
if (rMarkList.GetMark(i)->GetMarkedSdrObj()->ISA(E3dObject))
{
b3DObjMarked = TRUE;
}
else
{
i++;
}
}
if ( nMarkCnt > 0 && !b3DObjMarked &&
(!mpDrawView->IsShearAllowed() || !mpDrawView->IsDistortAllowed()) )
{
if ( mpDrawView->IsPresObjSelected() )
{
::sd::Window* pWindow = GetActiveWindow();
InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
}
else if ( QueryBox(GetActiveWindow(), WB_YES_NO,
String(SdResId(STR_ASK_FOR_CONVERT_TO_BEZIER) )
).Execute() == RET_YES )
{
// Implizite Wandlung in Bezier
WaitObject aWait( (Window*)GetActiveWindow() );
mpDrawView->ConvertMarkedToPathObj(FALSE);
}
}
}
SetCurrentFunction( FuSelection::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) );
rReq.Done();
Invalidate( SID_OBJECT_SELECT );
}
break;
case SID_DRAW_LINE:
case SID_DRAW_XLINE:
case SID_DRAW_MEASURELINE:
case SID_LINE_ARROW_START:
case SID_LINE_ARROW_END:
case SID_LINE_ARROWS:
case SID_LINE_ARROW_CIRCLE:
case SID_LINE_CIRCLE_ARROW:
case SID_LINE_ARROW_SQUARE:
case SID_LINE_SQUARE_ARROW:
case SID_DRAW_RECT:
case SID_DRAW_RECT_NOFILL:
case SID_DRAW_RECT_ROUND:
case SID_DRAW_RECT_ROUND_NOFILL:
case SID_DRAW_SQUARE:
case SID_DRAW_SQUARE_NOFILL:
case SID_DRAW_SQUARE_ROUND:
case SID_DRAW_SQUARE_ROUND_NOFILL:
case SID_DRAW_ELLIPSE:
case SID_DRAW_ELLIPSE_NOFILL:
case SID_DRAW_CIRCLE:
case SID_DRAW_CIRCLE_NOFILL:
case SID_DRAW_CAPTION:
case SID_DRAW_CAPTION_VERTICAL:
case SID_TOOL_CONNECTOR:
case SID_CONNECTOR_ARROW_START:
case SID_CONNECTOR_ARROW_END:
case SID_CONNECTOR_ARROWS:
case SID_CONNECTOR_CIRCLE_START:
case SID_CONNECTOR_CIRCLE_END:
case SID_CONNECTOR_CIRCLES:
case SID_CONNECTOR_LINE:
case SID_CONNECTOR_LINE_ARROW_START:
case SID_CONNECTOR_LINE_ARROW_END:
case SID_CONNECTOR_LINE_ARROWS:
case SID_CONNECTOR_LINE_CIRCLE_START:
case SID_CONNECTOR_LINE_CIRCLE_END:
case SID_CONNECTOR_LINE_CIRCLES:
case SID_CONNECTOR_CURVE:
case SID_CONNECTOR_CURVE_ARROW_START:
case SID_CONNECTOR_CURVE_ARROW_END:
case SID_CONNECTOR_CURVE_ARROWS:
case SID_CONNECTOR_CURVE_CIRCLE_START:
case SID_CONNECTOR_CURVE_CIRCLE_END:
case SID_CONNECTOR_CURVE_CIRCLES:
case SID_CONNECTOR_LINES:
case SID_CONNECTOR_LINES_ARROW_START:
case SID_CONNECTOR_LINES_ARROW_END:
case SID_CONNECTOR_LINES_ARROWS:
case SID_CONNECTOR_LINES_CIRCLE_START:
case SID_CONNECTOR_LINES_CIRCLE_END:
case SID_CONNECTOR_LINES_CIRCLES:
{
SetCurrentFunction( FuConstructRectangle::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
rReq.Done();
}
break;
case SID_DRAW_POLYGON:
case SID_DRAW_POLYGON_NOFILL:
case SID_DRAW_XPOLYGON:
case SID_DRAW_XPOLYGON_NOFILL:
case SID_DRAW_FREELINE:
case SID_DRAW_FREELINE_NOFILL:
case SID_DRAW_BEZIER_FILL: // BASIC
case SID_DRAW_BEZIER_NOFILL: // BASIC
{
SetCurrentFunction( FuConstructBezierPolygon::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent) );
rReq.Done();
}
break;
case SID_GLUE_EDITMODE:
{
if (nOldSId != SID_GLUE_EDITMODE)
{
SetCurrentFunction( FuEditGluePoints::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
}
else
{
GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
}
rReq.Done();
}
break;
case SID_DRAW_ARC:
case SID_DRAW_CIRCLEARC:
case SID_DRAW_PIE:
case SID_DRAW_PIE_NOFILL:
case SID_DRAW_CIRCLEPIE:
case SID_DRAW_CIRCLEPIE_NOFILL:
case SID_DRAW_ELLIPSECUT:
case SID_DRAW_ELLIPSECUT_NOFILL:
case SID_DRAW_CIRCLECUT:
case SID_DRAW_CIRCLECUT_NOFILL:
{
SetCurrentFunction( FuConstructArc::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent) );
rReq.Done();
}
break;
case SID_3D_CUBE:
case SID_3D_SHELL:
case SID_3D_SPHERE:
case SID_3D_TORUS:
case SID_3D_HALF_SPHERE:
case SID_3D_CYLINDER:
case SID_3D_CONE:
case SID_3D_PYRAMID:
{
SetCurrentFunction( FuConstruct3dObject::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
rReq.Done();
}
break;
case SID_DRAWTBX_CS_BASIC :
case SID_DRAWTBX_CS_SYMBOL :
case SID_DRAWTBX_CS_ARROW :
case SID_DRAWTBX_CS_FLOWCHART :
case SID_DRAWTBX_CS_CALLOUT :
case SID_DRAWTBX_CS_STAR :
case SID_DRAW_CS_ID :
{
SetCurrentFunction( FuConstructCustomShape::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
rReq.Done();
if ( nSId != SID_DRAW_CS_ID )
{
SfxBindings& rBind = GetViewFrame()->GetBindings();
rBind.Invalidate( nSId );
rBind.Update( nSId );
}
}
break;
case SID_FORMATPAINTBRUSH:
{
SetCurrentFunction( FuFormatPaintBrush::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) );
rReq.Done();
SfxBindings& rBind = GetViewFrame()->GetBindings();
rBind.Invalidate( nSId );
rBind.Update( nSId );
break;
}
default:
break;
}
if(HasOldFunction())
{
USHORT nSlotId = GetOldFunction()->GetSlotID();
GetOldFunction()->Deactivate();
SetOldFunction(0);
SfxBindings& rBind = GetViewFrame()->GetBindings();
rBind.Invalidate( nSlotId );
rBind.Update( nSlotId );
}
if(HasCurrentFunction())
{
GetCurrentFunction()->Activate();
SetOldFunction( GetCurrentFunction() );
SetHelpId( GetCurrentFunction()->GetSlotID() );
}
// Shell wird invalidiert, schneller als einzeln (laut MI)
// Jetzt explizit der letzte Slot incl. Update()
Invalidate();
// #97016# III CTRL-SID_OBJECT_SELECT -> select first draw object if none is selected yet
if(SID_OBJECT_SELECT == nSId && HasCurrentFunction() && (rReq.GetModifier() & KEY_MOD1))
{
if(!GetView()->AreObjectsMarked())
{
// select first object
GetView()->UnmarkAllObj();
GetView()->MarkNextObj(TRUE);
// ...and make it visible
if(GetView()->AreObjectsMarked())
GetView()->MakeVisible(GetView()->GetAllMarkedRect(), *GetActiveWindow());
}
}
// #97016# with qualifier construct directly
if(HasCurrentFunction() && (rReq.GetModifier() & KEY_MOD1))
{
// get SdOptions
SdOptions* pOptions = SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType());
sal_uInt32 nDefaultObjectSizeWidth(pOptions->GetDefaultObjectSizeWidth());
sal_uInt32 nDefaultObjectSizeHeight(pOptions->GetDefaultObjectSizeHeight());
// calc position and size
Rectangle aVisArea = GetActiveWindow()->PixelToLogic(Rectangle(Point(0,0), GetActiveWindow()->GetOutputSizePixel()));
Point aPagePos = aVisArea.Center();
aPagePos.X() -= nDefaultObjectSizeWidth / 2;
aPagePos.Y() -= nDefaultObjectSizeHeight / 2;
Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight));
SdrPageView* pPageView = mpDrawView->GetSdrPageView();
if(pPageView)
{
// create the default object
SdrObject* pObj = GetCurrentFunction()->CreateDefaultObject(nSId, aNewObjectRectangle);
if(pObj)
{
// insert into page
GetView()->InsertObjectAtView(pObj, *pPageView);
// Now that pFuActual has done what it was created for we
// can switch on the edit mode for callout objects.
switch (nSId)
{
case SID_DRAW_CAPTION:
case SID_DRAW_CAPTION_VERTICAL:
{
// Make FuText the current function.
SfxUInt16Item aItem (SID_TEXTEDIT, 1);
GetViewFrame()->GetDispatcher()->
Execute(SID_TEXTEDIT, SFX_CALLMODE_SYNCHRON |
SFX_CALLMODE_RECORD, &aItem, 0L);
// Put text object into edit mode.
GetView()->SdrBeginTextEdit(static_cast<SdrTextObj*>(pObj), pPageView);
break;
}
}
}
}
}
}
//////////////////////////////////////////////////////////////////////////////
// service routine for Undo/Redo implementation
extern SfxUndoManager* ImpGetUndoManagerFromViewShell(DrawViewShell& rDViewShell);
/*************************************************************************
|*
|* SfxRequests fuer Support-Funktionen
|*
\************************************************************************/
void DrawViewShell::FuSupport(SfxRequest& rReq)
{
if( rReq.GetSlot() == SID_STYLE_FAMILY && rReq.GetArgs())
GetDocSh()->SetStyleFamily(((SfxUInt16Item&)rReq.GetArgs()->Get( SID_STYLE_FAMILY )).GetValue());
// Waehrend einer Native-Diashow wird nichts ausgefuehrt!
if(SlideShow::IsRunning(GetViewShellBase()) &&
(rReq.GetSlot() != SID_PRESENTATION_END &&
rReq.GetSlot() != SID_SIZE_PAGE))
return;
CheckLineTo (rReq);
if( !mpDrawView )
return;
USHORT nSId = rReq.GetSlot();
// Slot wird evtl. gemapped (ToolboxImages/-Slots)
MapSlot( nSId );
switch ( nSId )
{
case SID_CLEAR_UNDO_STACK:
{
GetDocSh()->ClearUndoBuffer();
rReq.Ignore ();
}
break;
// Slots der ToolboxController gemapped ausfuehren
case SID_OBJECT_CHOOSE_MODE:
case SID_POSITION:
case SID_OBJECT_ALIGN:
case SID_ZOOM_TOOLBOX:
case SID_DRAWTBX_TEXT:
case SID_DRAWTBX_RECTANGLES:
case SID_DRAWTBX_ELLIPSES:
case SID_DRAWTBX_LINES:
case SID_DRAWTBX_ARROWS:
case SID_DRAWTBX_3D_OBJECTS:
case SID_DRAWTBX_CONNECTORS:
case SID_DRAWTBX_INSERT:
{
USHORT nMappedSlot = GetMappedSlot( nSId );
if( nMappedSlot > 0 )
{
SfxRequest aReq( nMappedSlot, 0, GetDoc()->GetItemPool() );
ExecuteSlot( aReq );
}
}
break;
case SID_PRESENTATION:
case SID_REHEARSE_TIMINGS:
{
Reference< XPresentation2 > xPresentation( GetDoc()->getPresentation() );
if( xPresentation.is() )
{
if( ( SID_REHEARSE_TIMINGS != rReq.GetSlot() ) )
xPresentation->start();
else
xPresentation->rehearseTimings();
}
rReq.Ignore ();
}
break;
case SID_PRESENTATION_END:
{
StopSlideShow(true);
rReq.Ignore ();
}
break;
case SID_BEZIER_EDIT:
{
mpDrawView->SetFrameDragSingles(!mpDrawView->IsFrameDragSingles());
/******************************************************************
* ObjectBar einschalten
******************************************************************/
if( dynamic_cast< FuSelection* >( GetCurrentFunction().get() ) || dynamic_cast< FuConstructBezierPolygon* >( GetCurrentFunction().get() ) )
{
// Tell the tool bar manager about the context change.
GetViewShellBase().GetToolBarManager()->SelectionHasChanged(*this,*mpDrawView);
}
Invalidate(SID_BEZIER_EDIT);
rReq.Ignore();
}
break;
case SID_OBJECT_CLOSE:
{
const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
if ( rMarkList.GetMark(0) && !mpDrawView->IsAction() )
{
SdrPathObj* pPathObj = (SdrPathObj*) rMarkList.GetMark(0)->GetMarkedSdrObj();
const bool bUndo = mpDrawView->IsUndoEnabled();
if( bUndo )
mpDrawView->BegUndo(String(SdResId(STR_UNDO_BEZCLOSE)));
mpDrawView->UnmarkAllPoints();
if( bUndo )
mpDrawView->AddUndo(new SdrUndoGeoObj(*pPathObj));
pPathObj->ToggleClosed();
if( bUndo )
mpDrawView->EndUndo();
}
rReq.Done();
}
break;
case SID_CUT:
{
if ( mpDrawView->IsPresObjSelected(FALSE, TRUE, FALSE, TRUE) )
{
::sd::Window* pWindow = GetActiveWindow();
InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
}
else
{
if(HasCurrentFunction())
{
GetCurrentFunction()->DoCut();
}
else if(mpDrawView)
{
mpDrawView->DoCut();
}
}
rReq.Ignore ();
}
break;
case SID_COPY:
{
if ( mpDrawView->IsPresObjSelected(FALSE, TRUE, FALSE, TRUE) )
{
::sd::Window* pWindow = GetActiveWindow();
InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
}
else
{
if(HasCurrentFunction())
{
GetCurrentFunction()->DoCopy();
}
else if( mpDrawView )
{
mpDrawView->DoCopy();
}
}
rReq.Ignore ();
}
break;
case SID_PASTE:
{
WaitObject aWait( (Window*)GetActiveWindow() );
if(HasCurrentFunction())
{
GetCurrentFunction()->DoPaste();
}
else if(mpDrawView)
{
mpDrawView->DoPaste();
}
rReq.Ignore ();
}
break;
case SID_CLIPBOARD_FORMAT_ITEMS:
{
WaitObject aWait( (Window*)GetActiveWindow() );
TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) );
const SfxItemSet* pReqArgs = rReq.GetArgs();
UINT32 nFormat = 0;
if( pReqArgs )
{
SFX_REQUEST_ARG( rReq, pIsActive, SfxUInt32Item, SID_CLIPBOARD_FORMAT_ITEMS, FALSE );
nFormat = pIsActive->GetValue();
}
if( nFormat && aDataHelper.GetTransferable().is() )
{
sal_Int8 nAction = DND_ACTION_COPY;
if( !mpDrawView->InsertData( aDataHelper,
GetActiveWindow()->PixelToLogic( Rectangle( Point(), GetActiveWindow()->GetOutputSizePixel() ).Center() ),
nAction, FALSE, nFormat ) )
{
INetBookmark aINetBookmark( aEmptyStr, aEmptyStr );
if( ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) &&
aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) ) ||
( aDataHelper.HasFormat( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) &&
aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR, aINetBookmark ) ) ||
( aDataHelper.HasFormat( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ) &&
aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR, aINetBookmark ) ) )
{
InsertURLField( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), aEmptyStr, NULL );
}
}
}
}
break;
case SID_DELETE:
{
if ( mpDrawView->IsTextEdit() )
{
OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
if (pOLV)
{
KeyCode aKCode(KEY_DELETE);
KeyEvent aKEvt( 0, aKCode);
pOLV->PostKeyEvent(aKEvt);
}
}
else if ( mpDrawView->IsPresObjSelected(FALSE, TRUE, FALSE, TRUE) )
{
::sd::Window* pWindow = GetActiveWindow();
InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
}
else
{
KeyCode aKCode(KEY_DELETE);
KeyEvent aKEvt( 0, aKCode);
bool bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt );
if( !bConsumed && HasCurrentFunction() )
bConsumed = GetCurrentFunction()->KeyInput(aKEvt);
if( !bConsumed && mpDrawView )
mpDrawView->DeleteMarked();
}
rReq.Ignore ();
}
break;
case SID_NOTESMODE:
case SID_HANDOUTMODE:
// AutoLayouts have to be ready.
GetDoc()->StopWorkStartupDelay();
// Fall through to following case statements.
case SID_DRAWINGMODE:
case SID_DIAMODE:
case SID_OUTLINEMODE:
// Let the sub-shell manager handle the slot handling.
framework::FrameworkHelper::Instance(GetViewShellBase())->HandleModeChangeSlot(
nSId,
rReq);
rReq.Ignore ();
break;
case SID_MASTERPAGE: // BASIC
case SID_SLIDE_MASTERPAGE: // BASIC
case SID_TITLE_MASTERPAGE: // BASIC
case SID_NOTES_MASTERPAGE: // BASIC
case SID_HANDOUT_MASTERPAGE: // BASIC
{
// AutoLayouts muessen fertig sein
GetDoc()->StopWorkStartupDelay();
const SfxItemSet* pReqArgs = rReq.GetArgs();
if ( pReqArgs )
{
SFX_REQUEST_ARG (rReq, pIsActive, SfxBoolItem, SID_MASTERPAGE, FALSE);
mbIsLayerModeActive = pIsActive->GetValue ();
}
Broadcast (
ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START));
if (nSId == SID_MASTERPAGE ||
(nSId == SID_SLIDE_MASTERPAGE && mePageKind == PK_STANDARD) ||
(nSId == SID_TITLE_MASTERPAGE && mePageKind == PK_STANDARD) ||
(nSId == SID_NOTES_MASTERPAGE && mePageKind == PK_NOTES) ||
(nSId == SID_HANDOUT_MASTERPAGE && mePageKind == PK_HANDOUT))
{
if (nSId == SID_TITLE_MASTERPAGE ||
nSId == SID_SLIDE_MASTERPAGE)
{
// Gibt es eine Seite mit dem AutoLayout "Titel"?
BOOL bFound = FALSE;
USHORT i = 0;
USHORT nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
while (i < nCount && !bFound)
{
SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
if (nSId == SID_TITLE_MASTERPAGE && pPage->GetAutoLayout() == AUTOLAYOUT_TITLE)
{
bFound = TRUE;
SwitchPage((pPage->GetPageNum() - 1) / 2);
}
else if (nSId == SID_SLIDE_MASTERPAGE && pPage->GetAutoLayout() != AUTOLAYOUT_TITLE)
{
bFound = TRUE;
SwitchPage((pPage->GetPageNum() - 1) / 2);
}
i++;
}
}
// Default-Layer der MasterPage einschalten
mpDrawView->SetActiveLayer( String( SdResId(STR_LAYER_BCKGRNDOBJ) ) );
ChangeEditMode(EM_MASTERPAGE, mbIsLayerModeActive);
if(HasCurrentFunction(SID_BEZIER_EDIT))
GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
}
else
{
// Switch to requested ViewShell.
::OUString sRequestedView;
PageKind ePageKind;
switch (nSId)
{
case SID_SLIDE_MASTERPAGE:
case SID_TITLE_MASTERPAGE:
default:
sRequestedView = framework::FrameworkHelper::msImpressViewURL;
ePageKind = PK_STANDARD;
break;
case SID_NOTES_MASTERPAGE:
sRequestedView = framework::FrameworkHelper::msNotesViewURL;
ePageKind = PK_NOTES;
break;
case SID_HANDOUT_MASTERPAGE:
sRequestedView = framework::FrameworkHelper::msHandoutViewURL;
ePageKind = PK_HANDOUT;
break;
}
mpFrameView->SetViewShEditMode(EM_MASTERPAGE, ePageKind);
mpFrameView->SetLayerMode(mbIsLayerModeActive);
framework::FrameworkHelper::Instance(GetViewShellBase())->RequestView(
sRequestedView,
framework::FrameworkHelper::msCenterPaneURL);
}
Broadcast (
ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END));
InvalidateWindows();
Invalidate();
rReq.Done();
}
break;
case SID_CLOSE_MASTER_VIEW:
{
Broadcast (
ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START));
// Switch page back to the first one. Not doing so leads to a
// crash. This seems to be some bug in the edit mode switching
// and page switching methods.
SwitchPage (0);
ChangeEditMode(EM_PAGE, IsLayerModeActive());
Broadcast (
ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END));
if(HasCurrentFunction(SID_BEZIER_EDIT))
{
GetViewFrame()->GetDispatcher()->Execute(
SID_OBJECT_SELECT,
SFX_CALLMODE_ASYNCHRON);
}
rReq.Done();
}
break;
case SID_RULER:
{
const SfxItemSet* pReqArgs = rReq.GetArgs();
// #97516# Remember old ruler state
BOOL bOldHasRuler(HasRuler());
if ( pReqArgs )
{
SFX_REQUEST_ARG (rReq, pIsActive, SfxBoolItem, SID_RULER, FALSE);
SetRuler (pIsActive->GetValue ());
}
else SetRuler (!HasRuler());
// #97516# Did ruler state change? Tell that to SdOptions, too.
BOOL bHasRuler(HasRuler());
if(bOldHasRuler != bHasRuler)
{
SdOptions* pOptions = SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType());
if(pOptions && pOptions->IsRulerVisible() != bHasRuler)
{
pOptions->SetRulerVisible(bHasRuler);
}
}
Invalidate (SID_RULER);
Resize();
rReq.Done ();
}
break;
case SID_SIZE_PAGE:
case SID_SIZE_PAGE_WIDTH: // BASIC
{
mbZoomOnPage = ( rReq.GetSlot() == SID_SIZE_PAGE );
SdrPageView* pPageView = mpDrawView->GetSdrPageView();
if ( pPageView )
{
Point aPagePos(0, 0); // = pPageView->GetOffset();
Size aPageSize = pPageView->GetPage()->GetSize();
aPagePos.X() += aPageSize.Width() / 2;
aPageSize.Width() = (long) (aPageSize.Width() * 1.03);
if( rReq.GetSlot() == SID_SIZE_PAGE )
{
aPagePos.Y() += aPageSize.Height() / 2;
aPageSize.Height() = (long) (aPageSize.Height() * 1.03);
aPagePos.Y() -= aPageSize.Height() / 2;
}
else
{
Point aPt = GetActiveWindow()->PixelToLogic( Point( 0, GetActiveWindow()->GetSizePixel().Height() / 2 ) );
aPagePos.Y() += aPt.Y();
aPageSize.Height() = 2;
}
aPagePos.X() -= aPageSize.Width() / 2;
SetZoomRect( Rectangle( aPagePos, aPageSize ) );
Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
GetActiveWindow()->GetOutputSizePixel()) );
mpZoomList->InsertZoomRect(aVisAreaWin);
}
Invalidate( SID_ZOOM_IN );
Invalidate( SID_ZOOM_OUT );
Invalidate( SID_ZOOM_PANNING );
Invalidate( SID_ZOOM_TOOLBOX );
rReq.Done ();
}
break;
case SID_SIZE_REAL: // BASIC
{
mbZoomOnPage = FALSE;
SetZoom( 100 );
Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
GetActiveWindow()->GetOutputSizePixel()) );
mpZoomList->InsertZoomRect(aVisAreaWin);
Invalidate( SID_ZOOM_IN );
Invalidate( SID_ZOOM_OUT );
Invalidate( SID_ZOOM_PANNING );
Invalidate( SID_ZOOM_TOOLBOX );
rReq.Done ();
}
break;
case SID_ZOOM_IN: // BASIC
{
mbZoomOnPage = FALSE;
SetZoom( Max( (long) ( GetActiveWindow()->GetZoom() / 2 ), (long) GetActiveWindow()->GetMinZoom() ) );
Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
GetActiveWindow()->GetOutputSizePixel()) );
mpZoomList->InsertZoomRect(aVisAreaWin);
Invalidate( SID_ZOOM_IN );
Invalidate( SID_ZOOM_OUT );
Invalidate( SID_ZOOM_PANNING );
Invalidate( SID_ZOOM_TOOLBOX );
rReq.Done ();
}
break;
case SID_SIZE_VISAREA:
{
Rectangle aVisArea = mpFrameView->GetVisArea();
Size aVisAreaSize = aVisArea.GetSize();
if (aVisAreaSize.Height()!=0 && aVisAreaSize.Width()!=0)
{
mbZoomOnPage = FALSE;
SetZoomRect(aVisArea);
Invalidate( SID_ZOOM_IN );
Invalidate( SID_ZOOM_OUT );
Invalidate( SID_ZOOM_PANNING );
Invalidate( SID_ZOOM_TOOLBOX );
}
rReq.Done ();
}
break;
// Namensverwirrung: SID_SIZE_OPTIMAL -> Zoom auf selektierte Objekte
// --> Wird als Objektzoom im Programm angeboten
case SID_SIZE_OPTIMAL: // BASIC
{
mbZoomOnPage = FALSE;
if ( mpDrawView->AreObjectsMarked() )
{
maMarkRect = mpDrawView->GetAllMarkedRect();
long nW = (long) (maMarkRect.GetWidth() * 1.03);
long nH = (long) (maMarkRect.GetHeight() * 1.03);
Point aPos = maMarkRect.Center();
aPos.X() -= nW / 2;
aPos.Y() -= nH / 2;
if ( nW && nH )
{
SetZoomRect(Rectangle(aPos, Size(nW, nH)));
Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
GetActiveWindow()->GetOutputSizePixel()) );
mpZoomList->InsertZoomRect(aVisAreaWin);
}
}
Invalidate( SID_ZOOM_IN );
Invalidate( SID_ZOOM_OUT );
Invalidate( SID_ZOOM_PANNING );
Invalidate( SID_ZOOM_TOOLBOX );
rReq.Done ();
}
break;
// Namensverwirrung: SID_SIZE_ALL -> Zoom auf alle Objekte
// --> Wird als Optimal im Programm angeboten
case SID_SIZE_ALL: // BASIC
{
mbZoomOnPage = FALSE;
SdrPageView* pPageView = mpDrawView->GetSdrPageView();
if( pPageView )
{
Rectangle aBoundRect( pPageView->GetObjList()->GetAllObjBoundRect() );
long nW = (long) (aBoundRect.GetWidth() * 1.03);
long nH = (long) (aBoundRect.GetHeight() * 1.03);
Point aPos = aBoundRect.Center();
aPos.X() -= nW / 2;
aPos.Y() -= nH / 2;
if ( nW && nH )
{
SetZoomRect( Rectangle( aPos, Size( nW, nH ) ) );
Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
GetActiveWindow()->GetOutputSizePixel()) );
mpZoomList->InsertZoomRect(aVisAreaWin);
}
Invalidate( SID_ZOOM_IN );
Invalidate( SID_ZOOM_OUT );
Invalidate( SID_ZOOM_PANNING );
Invalidate( SID_ZOOM_TOOLBOX );
}
rReq.Done ();
}
break;
case SID_ZOOM_PREV:
{
if (mpDrawView->IsTextEdit())
{
mpDrawView->SdrEndTextEdit();
}
if (mpZoomList->IsPreviousPossible())
{
// Vorheriges ZoomRect einstellen
SetZoomRect(mpZoomList->GetPreviousZoomRect());
}
rReq.Done ();
Invalidate( SID_ZOOM_TOOLBOX );
}
break;
case SID_ZOOM_NEXT:
{
if (mpDrawView->IsTextEdit())
{
mpDrawView->SdrEndTextEdit();
}
if (mpZoomList->IsNextPossible())
{
// Naechstes ZoomRect einstellen
SetZoomRect(mpZoomList->GetNextZoomRect());
}
rReq.Done ();
Invalidate( SID_ZOOM_TOOLBOX );
}
break;
case SID_GLUE_INSERT_POINT:
case SID_GLUE_PERCENT:
case SID_GLUE_ESCDIR:
case SID_GLUE_ESCDIR_LEFT:
case SID_GLUE_ESCDIR_RIGHT:
case SID_GLUE_ESCDIR_TOP:
case SID_GLUE_ESCDIR_BOTTOM:
case SID_GLUE_HORZALIGN_CENTER:
case SID_GLUE_HORZALIGN_LEFT:
case SID_GLUE_HORZALIGN_RIGHT:
case SID_GLUE_VERTALIGN_CENTER:
case SID_GLUE_VERTALIGN_TOP:
case SID_GLUE_VERTALIGN_BOTTOM:
{
FunctionReference xFunc( GetCurrentFunction() );
FuEditGluePoints* pFunc = dynamic_cast< FuEditGluePoints* >( xFunc.get() );
if(pFunc)
pFunc->ReceiveRequest(rReq);
rReq.Done();
}
break;
#ifdef DBG_UTIL
case SID_SHOW_ITEMBROWSER:
{
mpDrawView->ShowItemBrowser( !mpDrawView->IsItemBrowserVisible() );
rReq.Done ();
}
break;
#endif
case SID_AUTOSPELL_CHECK:
{
BOOL bOnlineSpell = !GetDoc()->GetOnlineSpell();
GetDoc()->SetOnlineSpell(bOnlineSpell);
::Outliner* pOL = mpDrawView->GetTextEditOutliner();
if (pOL)
{
ULONG nCntrl = pOL->GetControlWord();
if (bOnlineSpell)
nCntrl |= EE_CNTRL_ONLINESPELLING;
else
nCntrl &= ~EE_CNTRL_ONLINESPELLING;
pOL->SetControlWord(nCntrl);
}
GetActiveWindow()->Invalidate();
rReq.Done ();
}
break;
case SID_CONVERT_TO_1BIT_THRESHOLD:
case SID_CONVERT_TO_1BIT_MATRIX:
case SID_CONVERT_TO_4BIT_GRAYS:
case SID_CONVERT_TO_4BIT_COLORS:
case SID_CONVERT_TO_8BIT_GRAYS:
case SID_CONVERT_TO_8BIT_COLORS:
case SID_CONVERT_TO_24BIT:
{
BmpConversion eBmpConvert = BMP_CONVERSION_NONE;
switch( nSId )
{
case SID_CONVERT_TO_1BIT_THRESHOLD:
eBmpConvert = BMP_CONVERSION_1BIT_THRESHOLD;
break;
case SID_CONVERT_TO_1BIT_MATRIX:
eBmpConvert = BMP_CONVERSION_1BIT_MATRIX;
break;
case SID_CONVERT_TO_4BIT_GRAYS:
eBmpConvert = BMP_CONVERSION_4BIT_GREYS;
break;
case SID_CONVERT_TO_4BIT_COLORS:
eBmpConvert = BMP_CONVERSION_4BIT_COLORS;
break;
case SID_CONVERT_TO_8BIT_GRAYS:
eBmpConvert = BMP_CONVERSION_8BIT_GREYS;
break;
case SID_CONVERT_TO_8BIT_COLORS:
eBmpConvert = BMP_CONVERSION_8BIT_COLORS;
break;
case SID_CONVERT_TO_24BIT:
eBmpConvert = BMP_CONVERSION_24BIT;
break;
}
mpDrawView->BegUndo(String(SdResId(STR_UNDO_COLORRESOLUTION)));
const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
for (ULONG i=0; i<rMarkList.GetMarkCount(); i++)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
if (pObj->GetObjInventor() == SdrInventor)
{
if (pObj->GetObjIdentifier() == OBJ_GRAF && !((SdrGrafObj*) pObj)->IsLinkedGraphic())
{
const Graphic& rGraphic = ((SdrGrafObj*) pObj)->GetGraphic();
if( rGraphic.GetType() == GRAPHIC_BITMAP )
{
SdrGrafObj* pNewObj = (SdrGrafObj*) pObj->Clone();
if( rGraphic.IsAnimated() )
{
Animation aAnim( rGraphic.GetAnimation() );
aAnim.Convert( eBmpConvert );
pNewObj->SetGraphic( aAnim );
}
else
{
BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
aBmpEx.Convert( eBmpConvert );
pNewObj->SetGraphic( aBmpEx );
}
mpDrawView->ReplaceObjectAtView( pObj, *mpDrawView->GetSdrPageView(), pNewObj );
}
}
}
}
mpDrawView->EndUndo();
rReq.Done ();
}
break;
case SID_TRANSLITERATE_UPPER:
case SID_TRANSLITERATE_LOWER:
case SID_TRANSLITERATE_HALFWIDTH:
case SID_TRANSLITERATE_FULLWIDTH:
case SID_TRANSLITERATE_HIRAGANA:
case SID_TRANSLITERATE_KATAGANA:
{
OutlinerView* pOLV = GetView()->GetTextEditOutlinerView();
if( pOLV )
{
using namespace ::com::sun::star::i18n;
sal_Int32 nType = 0;
switch( nSId )
{
case SID_TRANSLITERATE_UPPER:
nType = TransliterationModules_LOWERCASE_UPPERCASE;
break;
case SID_TRANSLITERATE_LOWER:
nType = TransliterationModules_UPPERCASE_LOWERCASE;
break;
case SID_TRANSLITERATE_HALFWIDTH:
nType = TransliterationModules_FULLWIDTH_HALFWIDTH;
break;
case SID_TRANSLITERATE_FULLWIDTH:
nType = TransliterationModules_HALFWIDTH_FULLWIDTH;
break;
case SID_TRANSLITERATE_HIRAGANA:
nType = TransliterationModules_KATAKANA_HIRAGANA;
break;
case SID_TRANSLITERATE_KATAGANA:
nType = TransliterationModules_HIRAGANA_KATAKANA;
break;
}
pOLV->TransliterateText( nType );
}
rReq.Done();
}
break;
// #UndoRedo#
case SID_UNDO :
{
// #96090# moved implementation to BaseClass
ImpSidUndo(TRUE, rReq);
}
break;
case SID_REDO :
{
// #96090# moved implementation to BaseClass
ImpSidRedo(TRUE, rReq);
}
break;
default:
break;
}
}
/*************************************************************************
|*
|* URL-Feld einfuegen
|*
\************************************************************************/
void DrawViewShell::InsertURLField(const String& rURL, const String& rText,
const String& rTarget, const Point* pPos)
{
OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
if (pOLV)
{
ESelection aSel( pOLV->GetSelection() );
SvxFieldItem aURLItem( SvxURLField( rURL, rText, SVXURLFORMAT_REPR ), EE_FEATURE_FIELD );
pOLV->InsertField( aURLItem );
if ( aSel.nStartPos <= aSel.nEndPos )
aSel.nEndPos = aSel.nStartPos + 1;
else
aSel.nStartPos = aSel.nEndPos + 1;
pOLV->SetSelection( aSel );
}
else
{
Outliner* pOutl = GetDoc()->GetInternalOutliner();
pOutl->Init( OUTLINERMODE_TEXTOBJECT );
USHORT nOutlMode = pOutl->GetMode();
SvxURLField aURLField(rURL, rText, SVXURLFORMAT_REPR);
aURLField.SetTargetFrame(rTarget);
SvxFieldItem aURLItem(aURLField, EE_FEATURE_FIELD);
pOutl->QuickInsertField( aURLItem, ESelection() );
OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject();
SdrRectObj* pRectObj = new SdrRectObj(OBJ_TEXT);
pOutl->UpdateFields();
pOutl->SetUpdateMode( TRUE );
Size aSize(pOutl->CalcTextSize());
pOutl->SetUpdateMode( FALSE );
Point aPos;
if (pPos)
{
aPos = *pPos;
}
else
{
Rectangle aRect(aPos, GetActiveWindow()->GetOutputSizePixel() );
aPos = aRect.Center();
aPos = GetActiveWindow()->PixelToLogic(aPos);
aPos.X() -= aSize.Width() / 2;
aPos.Y() -= aSize.Height() / 2;
}
Rectangle aLogicRect(aPos, aSize);
pRectObj->SetLogicRect(aLogicRect);
pRectObj->SetOutlinerParaObject( pOutlParaObject );
mpDrawView->InsertObjectAtView(pRectObj, *mpDrawView->GetSdrPageView());
pOutl->Init( nOutlMode );
}
}
/*************************************************************************
|*
|* URL-Button einfuegen
|*
\************************************************************************/
void DrawViewShell::InsertURLButton(const String& rURL, const String& rText,
const String& rTarget, const Point* pPos)
{
BOOL bNewObj = TRUE;
const OUString sTargetURL( ::URIHelper::SmartRel2Abs( INetURLObject( GetDocSh()->GetMedium()->GetBaseURL() ), rURL, URIHelper::GetMaybeFileHdl(), true, false,
INetURLObject::WAS_ENCODED,
INetURLObject::DECODE_UNAMBIGUOUS ) );
if (mpDrawView->GetMarkedObjectList().GetMarkCount() > 0)
{
SdrObject* pMarkedObj = mpDrawView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
if( pMarkedObj ) try
{
// change first marked object
if( (FmFormInventor == pMarkedObj->GetObjInventor() && pMarkedObj->GetObjIdentifier() == OBJ_FM_BUTTON) )
{
bNewObj = FALSE;
SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >( pMarkedObj );
Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), UNO_QUERY_THROW );
Reference< beans::XPropertySet > xPropSet( xControlModel, UNO_QUERY_THROW );
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" )), Any( OUString( rText ) ) );
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetURL" )), Any( sTargetURL ) );
if( rTarget.Len() )
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetFrame" )), Any( OUString( rTarget ) ) );
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "ButtonType" )), Any( form::FormButtonType_URL ) );
if ( ::avmedia::MediaWindow::isMediaURL( rURL ) )
{
// #105638# OJ
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DispatchURLInternal" )), Any( sal_True ) );
}
}
else
{
// add url as interaction for first selected shape
bNewObj = FALSE;
SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pMarkedObj, true);
pInfo->meClickAction = presentation::ClickAction_DOCUMENT;
pInfo->SetBookmark( sTargetURL );
}
}
catch( uno::Exception& )
{
}
}
if (bNewObj) try
{
SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >( SdrObjFactory::MakeNewObject(FmFormInventor, OBJ_FM_BUTTON,
mpDrawView->GetSdrPageView()->GetPage(), GetDoc()) );
Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), uno::UNO_QUERY_THROW );
Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY_THROW );
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" )), Any( OUString( rText ) ) );
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetURL" )), Any( sTargetURL ) );
if( rTarget.Len() )
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetFrame" )), Any( OUString( rTarget ) ) );
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "ButtonType" )), Any( form::FormButtonType_URL ) );
// #105638# OJ
if ( ::avmedia::MediaWindow::isMediaURL( rURL ) )
xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DispatchURLInternal" )), Any( sal_True ) );
Point aPos;
if (pPos)
{
aPos = *pPos;
}
else
{
aPos = Rectangle(aPos, GetActiveWindow()->GetOutputSizePixel()).Center();
aPos = GetActiveWindow()->PixelToLogic(aPos);
}
Size aSize(4000, 1000);
aPos.X() -= aSize.Width() / 2;
aPos.Y() -= aSize.Height() / 2;
pUnoCtrl->SetLogicRect(Rectangle(aPos, aSize));
ULONG nOptions = SDRINSERT_SETDEFLAYER;
OSL_ASSERT (GetViewShell()!=NULL);
SfxInPlaceClient* pIpClient = GetViewShell()->GetIPClient();
if (pIpClient!=NULL && pIpClient->IsObjectInPlaceActive())
{
nOptions |= SDRINSERT_DONTMARK;
}
mpDrawView->InsertObjectAtView(pUnoCtrl, *mpDrawView->GetSdrPageView(), nOptions);
}
catch( Exception& )
{
}
}
/*************************************************************************
|*
|*
|*
\************************************************************************/
void DrawViewShell::ShowUIControls (bool bVisible)
{
ViewShell::ShowUIControls (bVisible);
//AF: The LayerDialogChildWindow is not used anymore (I hope).
// GetViewFrame()->SetChildWindow(
// LayerDialogChildWindow::GetChildWindowId(),
// IsLayerModeActive() && bVisible);
maTabControl.Show (bVisible);
}
void DrawViewShell::StopSlideShow (bool /*bCloseFrame*/)
{
Reference< XPresentation2 > xPresentation( GetDoc()->getPresentation() );
if(xPresentation.is() && xPresentation->isRunning())
{
if( mpDrawView->IsTextEdit() )
mpDrawView->SdrEndTextEdit();
xPresentation->end();
}
}
#ifdef _MSC_VER
#pragma optimize ( "", on )
#endif
} // end of namespace sd