/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
if(pOLV)
{ for(sal_Int32 a(0); a < aInputString.getLength(); a++)
{
vcl::KeyCode aKeyCode; // tdf#38669 - create the key event using a Unicode character
KeyEvent aKeyEvent(aInputString[a], aKeyCode);
// add actual character
pOLV->PostKeyEvent(aKeyEvent);
}
}
}
void DrawViewShell::FuPermanent(SfxRequest& rReq)
{ // We do not execute a thing during a native slide show
if (SlideShow::IsRunning(GetViewShellBase()) && !SlideShow::IsInteractiveSlideshow(&GetViewShellBase())) // IASS return;
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:
{
sal_uInt16 nSlotId = rReq.GetSlot();
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: case SID_INSERT_SIGNATURELINE:
{ if (nSId == SID_INSERT_SIGNATURELINE)
{ // See if a signing cert is passed as a parameter: if so, parse that.
std::string aSignatureCert;
std::string aSignatureKey; const SfxStringItem* pSignatureCert = rReq.GetArg<SfxStringItem>(FN_PARAM_1); if (pSignatureCert)
{
aSignatureCert = pSignatureCert->GetValue().toUtf8();
} const SfxStringItem* pSignatureKey = rReq.GetArg<SfxStringItem>(FN_PARAM_2); if (pSignatureKey)
{
aSignatureKey = pSignatureKey->GetValue().toUtf8();
} bool bExternal = false; const SfxBoolItem* pExternal = rReq.GetArg<SfxBoolItem>(FN_PARAM_3); if (pExternal)
{
bExternal = pExternal->GetValue();
}
SfxViewFrame* pFrame = GetFrame();
SfxViewShell* pViewShell = pFrame ? pFrame->GetViewShell() : nullptr; if (pViewShell)
{
svl::crypto::CertificateOrName aCertificateOrName; if (!aSignatureCert.empty() && !aSignatureKey.empty())
{
aCertificateOrName.m_xCertificate = SfxLokHelper::getSigningCertificate(aSignatureCert, aSignatureKey);
} elseif (bExternal)
{
aCertificateOrName.m_aName = mpDrawView->GetAuthor();
} // Always set the signing certificate, to clear data from a previous dispatch.
pViewShell->SetSigningCertificate(aCertificateOrName);
}
}
bCreateDirectly = comphelper::LibreOfficeKit::isActive();
bRectangle = true;
SetCurrentFunction( FuConstructRectangle::Create( *this, GetActiveWindow(), mpDrawView.get(), *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
{ // Direct mode means no interactive drawing, just insert the shape with reasonable // defaults -- to be consistent with the line insert case above.
bCreateDirectly = comphelper::LibreOfficeKit::isActive();
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.get(), *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.get(), *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.get(), *GetDoc(), rReq, bPermanent ) );
rReq.Done();
// get SdOptions
SdOptions* pOptions = SdModule::get()->GetSdOptions(GetDoc()->GetDocumentType());
sal_uInt32 nDefaultObjectSizeWidth(pOptions->GetDefaultObjectSizeWidth());
sal_uInt32 nDefaultObjectSizeHeight(pOptions->GetDefaultObjectSizeHeight()); if (nSId == SID_INSERT_SIGNATURELINE)
{ // Half of the default to better match the space available for signatures in many real-world // documents.
nDefaultObjectSizeWidth *= 0.5;
nDefaultObjectSizeHeight *= 0.5;
}
// calc position and size
::tools::Rectangle aVisArea = GetActiveWindow()->PixelToLogic(::tools::Rectangle(Point(0,0), GetActiveWindow()->GetOutputSizePixel())); if (comphelper::LibreOfficeKit::isActive())
{ // aVisArea is nonsensical in the LOK case, use the slide size
aVisArea = ::tools::Rectangle(Point(), getCurrentPage()->GetSize());
}
// create the default object
rtl::Reference<SdrObject> pObj = GetCurrentFunction()->CreateDefaultObject(nSId, aNewObjectRectangle);
if(!pObj) return;
auto pObjTmp = pObj.get(); // insert into page
GetView()->InsertObjectAtView(pObj.get(), *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: case SID_ATTR_CHAR: case SID_ATTR_CHAR_VERTICAL: case SID_TEXT_FITTOSIZE: case SID_TEXT_FITTOSIZE_VERTICAL:
{ // Make FuText the current function.
SfxUInt16Item aItem (SID_TEXTEDIT, 1);
GetViewFrame()->GetDispatcher()->
ExecuteList(SID_TEXTEDIT, SfxCallMode::SYNCHRON |
SfxCallMode::RECORD, { &aItem }); // Put text object into edit mode.
GetView()->SdrBeginTextEdit(static_cast<SdrTextObj*>(pObjTmp), pPageView); break;
}
}
if (bRectangle && !bPermanent)
{
GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SfxCallMode::ASYNCHRON);
}
}
//if any placeholders are selected if (mpDrawView->IsPresObjSelected(false))
{ //If there are placeholders in the list which can be toggled //off in edit->master->master elements then do that here,
std::vector<SdrObject*> aPresMarksToRemove; const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); for (size_t i=0; i < rMarkList.GetMarkCount(); ++i)
{
SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
SdPage* pPage = static_cast<SdPage*>(pObj->getSdrPageFromSdrObject());
PresObjKind eKind = pPage->GetPresObjKind(pObj); if (eKind == PresObjKind::Footer || eKind == PresObjKind::Header ||
eKind == PresObjKind::DateTime || eKind == PresObjKind::SlideNumber)
{
aPresMarksToRemove.push_back(pObj);
}
}
// We do not execute a thing during a native slide show if((SlideShow::IsRunning(GetViewShellBase())
&& !SlideShow::IsInteractiveSlideshow(&GetViewShellBase())) // IASS
&& (rReq.GetSlot() != SID_PRESENTATION_END && rReq.GetSlot() != SID_SIZE_PAGE)) return;
case SID_PRESENTATION: case SID_PRESENTATION_CURRENT_SLIDE: case SID_REHEARSE_TIMINGS:
{
slideshowhelp::ShowSlideShow(rReq, *GetDoc());
rReq.Ignore ();
} break;
case SID_PRESENTATION_END:
{
StopSlideShow();
rReq.Ignore ();
} break;
case SID_BEZIER_EDIT:
{
mpDrawView->SetFrameDragSingles(!mpDrawView->IsFrameDragSingles());
/****************************************************************** * turn ObjectBar on
******************************************************************/ 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);
}
case SID_CUT:
{ if ( mpDrawView->IsPresObjSelected(false, true, false, true) )
{
std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(GetFrameWeld(),
VclMessageType::Info, VclButtonsType::Ok,
SdResId(STR_ACTION_NOTPOSSIBLE)));
xInfoBox->run();
} else
{ //tdf#126197: EndTextEdit in all views if current one is not in TextEdit if ( !mpDrawView->IsTextEdit() )
mpDrawView->EndTextEditAllViews();
case SID_PASTE_SLIDE: case SID_COPY_SLIDE:
{ if (::sd::slidesorter::SlideSorterViewShell* pSlideSorterViewShell =
sd::slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase()))
pSlideSorterViewShell->GetSlideSorter().GetController().FuSupport(rReq);
Cancel();
rReq.Done();
} break;
//calculate a valid end-position by reading logical characters
sal_Int32 nUtf16Pos=0; while ((nUtf16Pos < sInput.getLength()) && (nUtf16Pos < aSel.end.nIndex))
{
sInput.iterateCodePoints(&nUtf16Pos); //The mouse can set the cursor in the middle of a multi-unit character, // so reset to the proper end of the logical characters if (nUtf16Pos > aSel.end.nIndex)
aSel.end.nIndex = nUtf16Pos;
}
case SID_DELETE:
{ if ( mpDrawView->IsTextEdit() )
{
OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
if (pOLV)
{
vcl::KeyCode aKCode(KEY_DELETE);
KeyEvent aKEvt( 0, aKCode); // We use SdrObjEditView to handle DEL for underflow handling
(void)mpDrawView->KeyInput(aKEvt, nullptr);
}
} else
{
mpDrawView->EndTextEditAllViews();
FuDeleteSelectedObjects();
}
rReq.Ignore ();
} break;
case SID_NOTES_MODE: case SID_SLIDE_MASTER_MODE: case SID_NOTES_MASTER_MODE: case SID_HANDOUT_MASTER_MODE:
// AutoLayouts have to be ready.
GetDoc()->StopWorkStartupDelay();
[[fallthrough]];
case SID_DRAWINGMODE: case SID_SLIDE_SORTER_MODE: case SID_OUTLINE_MODE: // Let the sub-shell manager handle the slot handling.
framework::FrameworkHelper::Instance(GetViewShellBase())->HandleModeChangeSlot(
nSId,
rReq);
rReq.Ignore (); break;
case SID_MASTERPAGE: // BASIC
{ // AutoLayouts needs to be finished
GetDoc()->StopWorkStartupDelay();
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(EditMode::Page, IsLayerModeActive());
Broadcast (
ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END));
// name confusion: SID_SIZE_ALL -> Zoom onto all objects // --> Is offered as optimal in program case SID_SIZE_ALL: // BASIC
{
mbZoomOnPage = false;
SdrPageView* pPageView = mpDrawView->GetSdrPageView();
case SID_ZOOM_PREV:
{ if (mpDrawView->IsTextEdit())
{
mpDrawView->SdrEndTextEdit();
}
if (mpZoomList->IsPreviousPossible())
{ // set previous ZoomRect
SetZoomRect(mpZoomList->GetPreviousZoomRect());
}
rReq.Done ();
} break;
case SID_ZOOM_NEXT:
{ if (mpDrawView->IsTextEdit())
{
mpDrawView->SdrEndTextEdit();
}
if (mpZoomList->IsNextPossible())
{ // set next ZoomRect
SetZoomRect(mpZoomList->GetNextZoomRect());
}
rReq.Done ();
} 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:
{
rtl::Reference<FuPoor> xFunc( GetCurrentFunction() );
FuEditGluePoints* pFunc = dynamic_cast< FuEditGluePoints* >( xFunc.get() );
if(pFunc)
pFunc->ReceiveRequest(rReq);
rReq.Done();
} break;
case SID_AUTOSPELL_CHECK:
{ bool bOnlineSpell; const SfxPoolItem* pItem;
case SID_TRANSLITERATE_SENTENCE_CASE: case SID_TRANSLITERATE_TITLE_CASE: case SID_TRANSLITERATE_TOGGLE_CASE: case SID_TRANSLITERATE_UPPER: case SID_TRANSLITERATE_LOWER: case SID_TRANSLITERATE_HALFWIDTH: case SID_TRANSLITERATE_FULLWIDTH: case SID_TRANSLITERATE_HIRAGANA: case SID_TRANSLITERATE_KATAKANA:
{
OutlinerView* pOLV = GetView()->GetTextEditOutlinerView(); if( pOLV )
{
TransliterationFlags nType = TransliterationFlags::NONE;
switch( nSId )
{ case SID_TRANSLITERATE_SENTENCE_CASE:
nType = TransliterationFlags::SENTENCE_CASE; break; case SID_TRANSLITERATE_TITLE_CASE:
nType = TransliterationFlags::TITLE_CASE; break; case SID_TRANSLITERATE_TOGGLE_CASE:
nType = TransliterationFlags::TOGGLE_CASE; break; case SID_TRANSLITERATE_UPPER:
nType = TransliterationFlags::LOWERCASE_UPPERCASE; break; case SID_TRANSLITERATE_LOWER:
nType = TransliterationFlags::UPPERCASE_LOWERCASE; break; case SID_TRANSLITERATE_HALFWIDTH:
nType = TransliterationFlags::FULLWIDTH_HALFWIDTH; break; case SID_TRANSLITERATE_FULLWIDTH:
nType = TransliterationFlags::HALFWIDTH_FULLWIDTH; break; case SID_TRANSLITERATE_HIRAGANA:
nType = TransliterationFlags::KATAKANA_HIRAGANA; break; case SID_TRANSLITERATE_KATAKANA:
nType = TransliterationFlags::HIRAGANA_KATAKANA; break;
}
pOLV->TransliterateText( nType );
}
rReq.Done();
} break;
// #UndoRedo# case SID_UNDO :
{ // moved implementation to BaseClass
ImpSidUndo(rReq);
} break; case SID_REDO :
{ // moved implementation to BaseClass
ImpSidRedo(rReq);
} break;
sfx2::SfxNotebookBar::LockNotebookBar(); if (SID_REHEARSE_TIMINGS == rReq.GetSlot())
xPresentation->rehearseTimings(); elseif (rDoc.getPresentationSettings().mbCustomShow)
{ //fdo#69975 if a custom show has been set, then //use it whether or not we've been asked to //start from the current or first slide
xPresentation->start();
// if the custom show not set by default, only show it. if (rDoc.getPresentationSettings().mbStartCustomShow)
rDoc.getPresentationSettings().mbCustomShow = false;
} elseif (SID_PRESENTATION_CURRENT_SLIDE == rReq.GetSlot())
{ //If there is no custom show set, start will automatically //start at the current page
xPresentation->start();
} else
{ //Start at page 0, this would blow away any custom //show settings if any were set const SfxUInt16Item* pStartingSlide = rReq.GetArg<SfxUInt16Item>(FN_PARAM_1); const sal_uInt16 nStartingSlide = pStartingSlide ? pStartingSlide->GetValue() - 1 : 0;
SdPage* pSlide = rDoc.GetSdPage(nStartingSlide, PageKind::Standard); const OUString aStartingSlide = pSlide ? pSlide->GetName() : OUString();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.