/* -*- 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 .
*/
#include <FrameView.hxx>
#include <svx/svxids.hrc>
#include <com/sun/star/drawing/framework/ResourceId.hpp>
#include <com/sun/star/drawing/framework/XView.hpp>
#include <rtl/ustrbuf.hxx>
#include <unokywds.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <o3tl/string_view.hxx>
#include <osl/diagnose.h>
#include <vector>
#include <ViewShell.hxx>
#include <drawdoc.hxx>
#include <DrawDocShell.hxx>
#include <optsitem.hxx>
#include <ViewShellBase.hxx>
#include <sdmod.hxx>
#include <pres.hxx>
#include <framework/FrameworkHelper.hxx>
#include <comphelper/processfactory.hxx>
#include <sfx2/viewfrm.hxx>
#include <officecfg/Office/Common.hxx>
#include <officecfg/Office/Draw.hxx>
#include <officecfg/Office/Impress.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
namespace sd {
FrameView::FrameView(SdDrawDocument* pDrawDoc, FrameView* pFrameView /* = NULL */)
: SdrView(*pDrawDoc, nullptr), // TTTT SdDrawDocument* -> should be reference
mnRefCount(0),
mnPresViewShellId(SID_VIEWSHELL0),
mbIsNavigatorShowingAllShapes(false)
{
EndListening(*pDrawDoc);
EnableExtendedKeyInputDispatcher(false);
EnableExtendedMouseEventDispatcher(false);
SetGridFront( false );
SetHlplFront( false );
SetOConSnap( false );
SetFrameDragSingles();
SetSlidesPerRow(4);
if( nullptr == pFrameView )
{
DrawDocShell* pDocShell = pDrawDoc->GetDocSh();
if ( pDocShell )
{
// document is loaded, is there a FrameView?
sal_uLong nSdViewShellCount = 0;
SfxViewFrame* pSfxViewFrame = SfxViewFrame::GetFirst(pDocShell);
while (pSfxViewFrame)
{
// Count the FrameViews and remember the type of the main
// view shell.
SfxViewShell* pSfxViewSh = pSfxViewFrame->GetViewShell();
ViewShellBase* pBase = dynamic_cast<ViewShellBase*>( pSfxViewSh );
if (pBase != nullptr)
{
nSdViewShellCount++;
OUString sViewURL;
Reference<drawing::framework::XView> xView (
framework::FrameworkHelper::Instance(*pBase)->GetView(
drawing::framework::ResourceId::create(
::comphelper::getProcessComponentContext(),
framework::FrameworkHelper::msCenterPaneURL)));
if (xView.is())
sViewURL = xView->getResourceId()->getResourceURL();
switch (framework::FrameworkHelper::GetViewId(sViewURL))
{
default:
// case ViewShell::ST_IMPRESS:
// case ViewShell::ST_NOTES:
// case ViewShell::ST_HANDOUT:
mnPresViewShellId = SID_VIEWSHELL0;
break;
case ViewShell::ST_SLIDE_SORTER:
mnPresViewShellId = SID_VIEWSHELL1;
break;
case ViewShell::ST_OUTLINE:
mnPresViewShellId = SID_VIEWSHELL2;
break;
}
}
pSfxViewFrame = SfxViewFrame::GetNext(*pSfxViewFrame, pDocShell);
}
SdDrawDocument* pDoc = pDocShell->GetDoc();
pFrameView = pDoc->GetFrameView(nSdViewShellCount);
}
}
if (pFrameView)
{
// initialize FrameView with the FrameView of the DocShell
SetRuler( pFrameView->HasRuler() );
SetGridCoarse( pFrameView->GetGridCoarse() );
SetGridFine( pFrameView->GetGridFine() );
SetSnapGridWidth(pFrameView->GetSnapGridWidthX(), pFrameView->GetSnapGridWidthY());
SetGridVisible( pFrameView->IsGridVisible() );
SetGridFront( pFrameView->IsGridFront() );
SetSnapAngle( pFrameView->GetSnapAngle() );
SetGridSnap( pFrameView->IsGridSnap() );
SetBordSnap( pFrameView->IsBordSnap() );
SetHlplSnap( pFrameView->IsHlplSnap() );
SetOFrmSnap( pFrameView->IsOFrmSnap() );
SetOPntSnap( pFrameView->IsOPntSnap() );
SetOConSnap( pFrameView->IsOConSnap() );
SetHlplVisible( pFrameView->IsHlplVisible() );
SetDragStripes( pFrameView->IsDragStripes() );
SetPlusHandlesAlwaysVisible( pFrameView->IsPlusHandlesAlwaysVisible() );
SetFrameDragSingles( pFrameView->IsFrameDragSingles() );
SetSnapMagneticPixel( pFrameView->GetSnapMagneticPixel() );
SetMarkedHitMovesAlways( pFrameView->IsMarkedHitMovesAlways() );
SetMoveOnlyDragging( pFrameView->IsMoveOnlyDragging() );
SetCrookNoContortion( pFrameView->IsCrookNoContortion() );
SetSlantButShear( pFrameView->IsSlantButShear() );
SetNoDragXorPolys( pFrameView->IsNoDragXorPolys() );
SetAngleSnapEnabled( pFrameView->IsAngleSnapEnabled() );
SetBigOrtho( pFrameView->IsBigOrtho() );
SetOrtho( pFrameView->IsOrtho() );
SetEliminatePolyPointLimitAngle( pFrameView->GetEliminatePolyPointLimitAngle() );
SetEliminatePolyPoints( pFrameView->IsEliminatePolyPoints() );
SetDesignMode( pFrameView->IsDesignMode() );
SetSolidDragging( pFrameView->IsSolidDragging() );
maVisibleLayers = pFrameView->GetVisibleLayers();
maPrintableLayers = pFrameView->GetPrintableLayers();
maLockedLayers = pFrameView->GetLockedLayers();
maStandardHelpLines = pFrameView->GetStandardHelpLines();
maNotesHelpLines = pFrameView->GetNotesHelpLines();
maHandoutHelpLines = pFrameView->GetHandoutHelpLines();
SetActiveLayer( pFrameView->GetActiveLayer() );
mbNoColors = pFrameView->IsNoColors();
mbNoAttribs = pFrameView->IsNoAttribs() ;
maVisArea = pFrameView->GetVisArea();
mePageKind = pFrameView->GetPageKind();
mePageKindOnLoad = pFrameView->GetPageKindOnLoad();
mnSelectedPage = pFrameView->GetSelectedPage();
mnSelectedPageOnLoad = pFrameView->GetSelectedPageOnLoad();
mePageEditMode = pFrameView->GetViewShEditMode();
// meStandardEditMode = pFrameView->GetViewShEditMode(PageKind::Standard);
// meNotesEditMode = pFrameView->GetViewShEditMode(PageKind::Notes);
// meHandoutEditMode = pFrameView->GetViewShEditMode(PageKind::Handout);
SetViewShEditModeOnLoad(pFrameView->GetViewShEditModeOnLoad());
mbLayerMode = pFrameView->IsLayerMode();
mbQuickEdit = pFrameView->IsQuickEdit();
// #i26631#
SetMasterPagePaintCaching( pFrameView->IsMasterPagePaintCaching() );
SetDragWithCopy( pFrameView->IsDragWithCopy() );
mbDoubleClickTextEdit = pFrameView->IsDoubleClickTextEdit();
mbClickChangeRotation = pFrameView->IsClickChangeRotation();
mnSlidesPerRow = pFrameView->GetSlidesPerRow();
mnDrawMode = pFrameView->GetDrawMode();
mbIsNavigatorShowingAllShapes = pFrameView->IsNavigatorShowingAllShapes();
SetPreviousViewShellType (pFrameView->GetPreviousViewShellType());
SetViewShellTypeOnLoad (pFrameView->GetViewShellTypeOnLoad());
}
else
{
// initialize FrameView with the application data
// Layers need to be set, otherwise they are not visible and not printable in
// Impress documents. The document contains already the actual layers and their
// settings for visible, printable and locked. In case not read from <draw:layer-set>,
// ODF defaults are used.
SdrLayerAdmin rLayerAdmin = pDrawDoc -> GetLayerAdmin();
rLayerAdmin.getVisibleLayersODF(maVisibleLayers);
rLayerAdmin.getPrintableLayersODF(maPrintableLayers);
rLayerAdmin.getLockedLayersODF(maLockedLayers);
SetGridCoarse( Size( 1000, 1000 ) );
SetSnapGridWidth(Fraction(1000, 1), Fraction(1000, 1));
SetActiveLayer(sUNO_LayerName_layout);
mbNoColors = true;
mbNoAttribs = false;
maVisArea = ::tools::Rectangle( Point(), Size(0, 0) );
mePageKind = PageKind::Standard;
mePageKindOnLoad = PageKind::Standard;
mnSelectedPage = 0;
mnSelectedPageOnLoad = 0;
mePageEditMode = EditMode::Page;
// meStandardEditMode = EditMode::Page;
// meNotesEditMode = EditMode::Page;
// meHandoutEditMode = EditMode::MasterPage;
SetViewShEditModeOnLoad(EditMode::Page);
mbLayerMode = false;
SetEliminatePolyPoints(false);
mbDoubleClickTextEdit = false;
mbClickChangeRotation = false;
mnSlidesPerRow = officecfg::Office::Impress::Misc::SorterSlidesPerRow::get();
{
bool bUseContrast = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
mnDrawMode = bUseContrast ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR;
}
mbIsNavigatorShowingAllShapes = true;
SetPreviousViewShellType (ViewShell::ST_NONE);
SetViewShellTypeOnLoad (ViewShell::ST_IMPRESS);
// get default for design mode
bool bInitDesignMode = pDrawDoc->GetOpenInDesignMode();
if( pDrawDoc->OpenInDesignModeIsDefaulted() )
{
bInitDesignMode = true;
}
SfxObjectShell* pObjShell = pDrawDoc->GetObjectShell();
if( pObjShell && pObjShell->IsReadOnly() )
bInitDesignMode = false;
SetDesignMode( bInitDesignMode );
Update( SD_MOD()->GetSdOptions(pDrawDoc->GetDocumentType()) );
}
}
FrameView::~FrameView()
{
}
void FrameView::Connect()
{
mnRefCount++;
}
void FrameView::Disconnect()
{
if (mnRefCount > 0)
{
mnRefCount--;
}
if (mnRefCount == 0)
{
delete this;
}
}
/**
* Update with data from the specified SdOptions
*/
void FrameView::Update(SdOptions const * pOptions)
{
if (!pOptions)
return;
SdDrawDocument* pDrawDocument = dynamic_cast<SdDrawDocument*>(&GetModel());
const bool bImpress = pDrawDocument && pDrawDocument->GetDocumentType() == DocumentType::Impress;
if (bImpress)
{
mbRuler = officecfg::Office::Impress::Layout::Display::Ruler::get();
SetAngleSnapEnabled( officecfg::Office::Impress::Snap::Position::Rotating::get() );
SetBigOrtho( officecfg::Office::Impress::Snap::Position::ExtendEdges::get() );
SetBordSnap( officecfg::Office::Impress::Snap::Object::PageMargin::get() );
SetDragStripes( officecfg::Office::Impress::Layout::Display::Guide::get() );
SetHlplSnap( officecfg::Office::Impress::Snap::Object::SnapLine::get() );
SetHlplVisible( officecfg::Office::Impress::Layout::Display::Helpline::get() );
SetEliminatePolyPointLimitAngle( Degree100(officecfg::Office::Impress::Snap::Position::PointReduction::get()) );
SetNoDragXorPolys ( !officecfg::Office::Impress::Layout::Display::Contour::get() );
SetOFrmSnap( officecfg::Office::Impress::Snap::Object::ObjectFrame::get() );
SetOPntSnap( officecfg::Office::Impress::Snap::Object::ObjectPoint::get() );
SetOrtho( officecfg::Office::Impress::Snap::Position::CreatingMoving::get() );
SetPlusHandlesAlwaysVisible( officecfg::Office::Impress::Layout::Display::Bezier::get() );
SetSnapAngle( Degree100(officecfg::Office::Impress::Snap::Position::RotatingValue::get()) );
SetSnapMagneticPixel( officecfg::Office::Impress::Snap::Object::Range::get() );
}
else
{
mbRuler = officecfg::Office::Draw::Layout::Display::Ruler::get();
SetAngleSnapEnabled( officecfg::Office::Draw::Snap::Position::Rotating::get() );
SetBigOrtho( officecfg::Office::Draw::Snap::Position::ExtendEdges::get() );
SetBordSnap( officecfg::Office::Draw::Snap::Object::PageMargin::get() );
SetDragStripes( officecfg::Office::Draw::Layout::Display::Guide::get() );
SetHlplSnap( officecfg::Office::Draw::Snap::Object::SnapLine::get() );
SetHlplVisible( officecfg::Office::Draw::Layout::Display::Helpline::get() );
SetEliminatePolyPointLimitAngle( Degree100(officecfg::Office::Draw::Snap::Position::PointReduction::get()) );
SetNoDragXorPolys ( !officecfg::Office::Draw::Layout::Display::Contour::get() );
SetOFrmSnap( officecfg::Office::Draw::Snap::Object::ObjectFrame::get() );
SetOPntSnap( officecfg::Office::Draw::Snap::Object::ObjectPoint::get() );
SetOrtho( officecfg::Office::Draw::Snap::Position::CreatingMoving::get() );
SetPlusHandlesAlwaysVisible( officecfg::Office::Draw::Layout::Display::Bezier::get() );
SetSnapAngle( Degree100(officecfg::Office::Draw::Snap::Position::RotatingValue::get()) );
SetSnapMagneticPixel( officecfg::Office::Draw::Snap::Object::Range::get() );
}
SetGridVisible( pOptions->IsGridVisible() );
SetGridSnap( pOptions->IsUseGridSnap() );
SetMarkedHitMovesAlways( pOptions->IsMarkedHitMovesAlways() );
SetMoveOnlyDragging( pOptions->IsMoveOnlyDragging() );
SetSlantButShear( pOptions->IsMoveOnlyDragging() );
SetCrookNoContortion( pOptions->IsCrookNoContortion() );
GetModel().SetPickThroughTransparentTextFrames( pOptions->IsPickThrough() );
SetSolidDragging( pOptions->IsSolidDragging() );
SetGridCoarse( Size( pOptions->GetFieldDrawX(), pOptions->GetFieldDrawY() ) );
SetGridFine( Size( pOptions->GetFieldDivisionX(), pOptions->GetFieldDivisionY() ) );
Fraction aFractX(pOptions->GetFieldDrawX(), pOptions->GetFieldDrawX() / ( pOptions->GetFieldDivisionX() ? pOptions->GetFieldDivisionX() : 1 ));
Fraction aFractY(pOptions->GetFieldDrawY(), pOptions->GetFieldDrawY() / ( pOptions->GetFieldDivisionY() ? pOptions->GetFieldDivisionY() : 1 ));
SetSnapGridWidth(aFractX, aFractY);
SetQuickEdit(pOptions->IsQuickEdit());
// #i26631#
SetMasterPagePaintCaching( pOptions->IsMasterPagePaintCaching() );
SetDragWithCopy(pOptions->IsDragWithCopy());
SetDragThresholdPixels(pOptions->GetDragThresholdPixels());
SetDoubleClickTextEdit( pOptions->IsDoubleClickTextEdit() );
SetClickChangeRotation( pOptions->IsClickChangeRotation() );
}
/**
* Set EditMode (Page or MasterPage) of working mode
*/
void FrameView::SetViewShEditMode(EditMode eMode)
{
mePageEditMode = eMode;
}
/**
* Return EditMode (Page or MasterPage) of working mode
*/
EditMode FrameView::GetViewShEditMode() const
{
return mePageEditMode;
}
void FrameView::SetViewShEditModeOnLoad (EditMode eMode)
{
meEditModeOnLoad = eMode;
}
static OUString createHelpLinesString( const SdrHelpLineList& rHelpLines )
{
OUStringBuffer aLines;
const sal_uInt16 nCount = rHelpLines.GetCount();
for( sal_uInt16 nHlpLine = 0; nHlpLine < nCount; nHlpLine++ )
{
const SdrHelpLine& rHelpLine = rHelpLines[nHlpLine];
const Point& rPos = rHelpLine.GetPos();
switch( rHelpLine.GetKind() )
{
case SdrHelpLineKind::Point:
aLines.append( 'P' );
aLines.append( static_cast<sal_Int32>(rPos.X()) );
aLines.append( ',' );
aLines.append( static_cast<sal_Int32>(rPos.Y()) );
break;
case SdrHelpLineKind::Vertical:
aLines.append( 'V' );
aLines.append( static_cast<sal_Int32>(rPos.X()) );
break;
case SdrHelpLineKind::Horizontal:
aLines.append( 'H' );
aLines.append( static_cast<sal_Int32>(rPos.Y()) );
break;
default:
OSL_FAIL( "Unsupported helpline Kind!" );
}
}
return aLines.makeStringAndClear();
}
void FrameView::WriteUserDataSequence ( css::uno::Sequence < css::beans::PropertyValue >& rValues )
{
std::vector< std::pair< OUString, Any > > aUserData;
aUserData.reserve(41); // worst case
aUserData.emplace_back( sUNO_View_GridIsVisible, Any( IsGridVisible() ) );
aUserData.emplace_back( sUNO_View_GridIsFront, Any( IsGridFront() ) );
aUserData.emplace_back( sUNO_View_IsSnapToGrid, Any( IsGridSnap() ) );
aUserData.emplace_back( sUNO_View_IsSnapToPageMargins, Any( IsBordSnap() ) );
aUserData.emplace_back( sUNO_View_IsSnapToSnapLines, Any( IsHlplSnap() ) );
aUserData.emplace_back( sUNO_View_IsSnapToObjectFrame, Any( IsOFrmSnap() ) );
aUserData.emplace_back( sUNO_View_IsSnapToObjectPoints, Any( IsOPntSnap() ) );
aUserData.emplace_back( sUNO_View_IsPlusHandlesAlwaysVisible, Any( IsPlusHandlesAlwaysVisible() ) );
aUserData.emplace_back( sUNO_View_IsFrameDragSingles, Any( IsFrameDragSingles() ) );
aUserData.emplace_back( sUNO_View_EliminatePolyPointLimitAngle, Any( static_cast<sal_Int32>(GetEliminatePolyPointLimitAngle()) ) );
aUserData.emplace_back( sUNO_View_IsEliminatePolyPoints, Any( IsEliminatePolyPoints() ) );
if ( officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::get() )
{
SdrLayerAdmin& rLayerAdmin = getSdrModelFromSdrView().GetLayerAdmin();
Any aAny;
rLayerAdmin.QueryValue(GetVisibleLayers(), aAny);
aUserData.emplace_back( sUNO_View_VisibleLayers, aAny );
rLayerAdmin.QueryValue(GetPrintableLayers(), aAny);
aUserData.emplace_back( sUNO_View_PrintableLayers, aAny );
rLayerAdmin.QueryValue(GetLockedLayers(), aAny);
aUserData.emplace_back( sUNO_View_LockedLayers, aAny );
}
aUserData.emplace_back( sUNO_View_NoAttribs, Any( IsNoAttribs() ) );
aUserData.emplace_back( sUNO_View_NoColors, Any( IsNoColors() ) );
if( GetStandardHelpLines().GetCount() )
aUserData.emplace_back( sUNO_View_SnapLinesDrawing, Any( createHelpLinesString( GetStandardHelpLines() ) ) );
if( GetNotesHelpLines().GetCount() )
aUserData.emplace_back( sUNO_View_SnapLinesNotes, Any( createHelpLinesString( GetNotesHelpLines() ) ) );
if( GetHandoutHelpLines().GetCount() )
aUserData.emplace_back( sUNO_View_SnapLinesHandout, Any( createHelpLinesString( GetHandoutHelpLines() ) ) );
aUserData.emplace_back( sUNO_View_RulerIsVisible, Any( HasRuler() ) );
aUserData.emplace_back( sUNO_View_PageKind, Any( static_cast<sal_Int16>(GetPageKind()) ) );
aUserData.emplace_back( sUNO_View_SelectedPage, Any( static_cast<sal_Int16>(GetSelectedPage()) ) );
aUserData.emplace_back( sUNO_View_IsLayerMode, Any( IsLayerMode() ) );
aUserData.emplace_back( sUNO_View_IsDoubleClickTextEdit, Any( IsDoubleClickTextEdit() ) );
aUserData.emplace_back( sUNO_View_IsClickChangeRotation, Any( IsClickChangeRotation() ) );
aUserData.emplace_back( sUNO_View_SlidesPerRow, Any( static_cast<sal_Int16>(GetSlidesPerRow()) ) );
aUserData.emplace_back( sUNO_View_EditMode, Any( static_cast<sal_Int32>(GetViewShEditMode()) ) );
// aUserData.emplace_back( sUNO_View_EditModeStandard, makeAny( (sal_Int32)GetViewShEditMode( PageKind::Standard ) ) );
// aUserData.emplace_back( sUNO_View_EditModeNotes, makeAny( (sal_Int32)GetViewShEditMode( PageKind::Notes ) ) );
// aUserData.emplace_back( sUNO_View_EditModeHandout, makeAny( (sal_Int32)GetViewShEditMode( PageKind::Handout ) ) );
{
const ::tools::Rectangle aVisArea = GetVisArea();
aUserData.emplace_back( sUNO_View_VisibleAreaTop, Any( static_cast<sal_Int32>(aVisArea.Top()) ) );
aUserData.emplace_back( sUNO_View_VisibleAreaLeft, Any( static_cast<sal_Int32>(aVisArea.Left()) ) );
aUserData.emplace_back( sUNO_View_VisibleAreaWidth, Any( static_cast<sal_Int32>(aVisArea.GetWidth()) ) );
aUserData.emplace_back( sUNO_View_VisibleAreaHeight, Any( static_cast<sal_Int32>(aVisArea.GetHeight()) ) );
}
aUserData.emplace_back( sUNO_View_GridCoarseWidth, Any( static_cast<sal_Int32>(GetGridCoarse().Width()) ) );
aUserData.emplace_back( sUNO_View_GridCoarseHeight, Any( static_cast<sal_Int32>(GetGridCoarse().Height()) ) );
aUserData.emplace_back( sUNO_View_GridFineWidth, Any( static_cast<sal_Int32>(GetGridFine().Width()) ) );
aUserData.emplace_back( sUNO_View_GridFineHeight, Any( static_cast<sal_Int32>(GetGridFine().Height()) ) );
aUserData.emplace_back( sUNO_View_GridSnapWidthXNumerator, Any( GetSnapGridWidthX().GetNumerator() ) );
aUserData.emplace_back( sUNO_View_GridSnapWidthXDenominator, Any( GetSnapGridWidthX().GetDenominator() ) );
aUserData.emplace_back( sUNO_View_GridSnapWidthYNumerator, Any( GetSnapGridWidthY().GetNumerator() ) );
aUserData.emplace_back( sUNO_View_GridSnapWidthYDenominator, Any( GetSnapGridWidthY().GetDenominator() ) );
aUserData.emplace_back( sUNO_View_IsAngleSnapEnabled, Any( IsAngleSnapEnabled() ) );
aUserData.emplace_back( sUNO_View_SnapAngle, Any( static_cast<sal_Int32>(GetSnapAngle()) ) );
const sal_Int32 nOldLength = rValues.getLength();
rValues.realloc( nOldLength + aUserData.size() );
PropertyValue* pValue = &(rValues.getArray()[nOldLength]);
for( const auto& rItem : aUserData )
{
pValue->Name = rItem.first;
pValue->Value = rItem.second;
++pValue;
}
}
static void createHelpLinesFromString( const OUString& rLines, SdrHelpLineList& rHelpLines )
{
const sal_Unicode * pStr = rLines.getStr();
SdrHelpLine aNewHelpLine;
OUStringBuffer sBuffer;
while( *pStr )
{
Point aPoint;
switch( *pStr )
{
case 'P':
aNewHelpLine.SetKind( SdrHelpLineKind::Point );
break;
case 'V':
aNewHelpLine.SetKind( SdrHelpLineKind::Vertical );
break;
case 'H':
aNewHelpLine.SetKind( SdrHelpLineKind::Horizontal );
break;
default:
OSL_FAIL( "syntax error in snap lines settings string" );
return;
}
pStr++;
while( (*pStr >= '0' && *pStr <= '9') || (*pStr == '+') || (*pStr == '-') )
{
sBuffer.append( *pStr++ );
}
sal_Int32 nValue = o3tl::toInt32(sBuffer);
sBuffer.setLength(0);
if( aNewHelpLine.GetKind() == SdrHelpLineKind::Horizontal )
{
aPoint.setY( nValue );
}
else
{
aPoint.setX( nValue );
if( aNewHelpLine.GetKind() == SdrHelpLineKind::Point )
{
if( *pStr++ != ',' )
return;
while( (*pStr >= '0' && *pStr <= '9') || (*pStr == '+') || (*pStr == '-') )
{
sBuffer.append( *pStr++ );
}
aPoint.setY( o3tl::toInt32(sBuffer) );
sBuffer.setLength(0);
}
}
aNewHelpLine.SetPos( aPoint );
rHelpLines.Insert( aNewHelpLine );
}
}
void FrameView::ReadUserDataSequence ( const css::uno::Sequence < css::beans::PropertyValue >& rSequence )
{
const sal_Int32 nLength = rSequence.getLength();
if (!nLength)
return;
SdDrawDocument* pDrawDocument = dynamic_cast<SdDrawDocument*>(&GetModel());
const bool bImpress = pDrawDocument && pDrawDocument->GetDocumentType() == DocumentType::Impress;
bool bBool = false;
sal_Int32 nInt32 = 0;
sal_Int16 nInt16 = 0;
OUString aString;
sal_Int32 aSnapGridWidthXNum = GetSnapGridWidthX().GetNumerator();
sal_Int32 aSnapGridWidthXDom = GetSnapGridWidthX().GetDenominator();
sal_Int32 aSnapGridWidthYNum = GetSnapGridWidthY().GetNumerator();
sal_Int32 aSnapGridWidthYDom = GetSnapGridWidthY().GetDenominator();
for (const css::beans::PropertyValue& rValue : rSequence)
{
if ( rValue.Name == sUNO_View_ViewId )
{
}
else if ( rValue.Name == sUNO_View_SnapLinesDrawing )
{
if( rValue.Value >>= aString )
{
SdrHelpLineList aHelpLines;
createHelpLinesFromString( aString, aHelpLines );
SetStandardHelpLines( aHelpLines );
}
}
else if ( rValue.Name == sUNO_View_SnapLinesNotes )
{
if( rValue.Value >>= aString )
{
SdrHelpLineList aHelpLines;
createHelpLinesFromString( aString, aHelpLines );
SetNotesHelpLines( aHelpLines );
}
}
else if ( rValue.Name == sUNO_View_SnapLinesHandout )
{
if( rValue.Value >>= aString )
{
SdrHelpLineList aHelpLines;
createHelpLinesFromString( aString, aHelpLines );
SetHandoutHelpLines( aHelpLines );
}
}
else if ( rValue.Name == sUNO_View_RulerIsVisible )
{
if( rValue.Value >>= bBool )
{
SetRuler( bBool );
}
}
else if ( rValue.Name == sUNO_View_PageKind )
{
if( rValue.Value >>= nInt16 )
{
SdDrawDocument* pDoc = dynamic_cast<SdDrawDocument*>(&GetModel());
if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
SetPageKind( static_cast<PageKind>(nInt16) );
SetPageKindOnLoad( static_cast<PageKind>(nInt16) );
}
}
else if ( rValue.Name == sUNO_View_SelectedPage )
{
if( rValue.Value >>= nInt16 )
{
SdDrawDocument* pDoc = dynamic_cast<SdDrawDocument*>(&GetModel());
if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
SetSelectedPage( static_cast<sal_uInt16>(nInt16) );
SetSelectedPageOnLoad( static_cast<sal_uInt16>(nInt16) );
}
}
else if ( rValue.Name == sUNO_View_IsLayerMode )
{
if( rValue.Value >>= bBool )
{
SetLayerMode( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsDoubleClickTextEdit )
{
if( rValue.Value >>= bBool )
{
SetDoubleClickTextEdit( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsClickChangeRotation )
{
if( rValue.Value >>= bBool )
{
SetClickChangeRotation( bBool );
}
}
else if ( rValue.Name == sUNO_View_SlidesPerRow )
{
if( rValue.Value >>= nInt16 )
{
SetSlidesPerRow( static_cast<sal_uInt16>(nInt16) );
}
}
else if ( rValue.Name == sUNO_View_EditMode )
{
if( rValue.Value >>= nInt32 )
{
SdDrawDocument* pDoc = dynamic_cast<SdDrawDocument*>(&GetModel());
if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
SetViewShEditMode( static_cast<EditMode>(nInt32) );
}
}
// This one is kept for compatibility. Old value read from sUNO_View_EditModeStandard
// is used. New value will be written into sUNO_View_EditMode.
// Values from sUNO_View_EditModeNotes and sUNO_View_EditModeHangout will be ignored.
else if ( rValue.Name == sUNO_View_EditModeStandard )
{
if( rValue.Value >>= nInt32 )
{
SdDrawDocument* pDoc = dynamic_cast<SdDrawDocument*>(&GetModel());
if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
SetViewShEditMode( static_cast<EditMode>(nInt32) );
}
}
else if ( rValue.Name == sUNO_View_VisibleAreaTop )
{
sal_Int32 nTop = 0;
if( rValue.Value >>= nTop )
{
::tools::Rectangle aVisArea( GetVisArea() );
aVisArea.AdjustBottom(nTop - aVisArea.Top() );
aVisArea.SetTop( nTop );
SetVisArea( aVisArea );
}
}
else if ( rValue.Name == sUNO_View_VisibleAreaLeft )
{
sal_Int32 nLeft = 0;
if( rValue.Value >>= nLeft )
{
::tools::Rectangle aVisArea( GetVisArea() );
aVisArea.AdjustRight(nLeft - aVisArea.Left() );
aVisArea.SetLeft( nLeft );
SetVisArea( aVisArea );
}
}
else if ( rValue.Name == sUNO_View_VisibleAreaWidth )
{
sal_Int32 nWidth = 0;
if( rValue.Value >>= nWidth )
{
::tools::Rectangle aVisArea( GetVisArea() );
aVisArea.SetRight( aVisArea.Left() + nWidth - 1 );
SetVisArea( aVisArea );
}
}
else if ( rValue.Name == sUNO_View_VisibleAreaHeight )
{
sal_Int32 nHeight = 0;
if( rValue.Value >>= nHeight )
{
::tools::Rectangle aVisArea( GetVisArea() );
aVisArea.SetBottom( nHeight + aVisArea.Top() - 1 );
SetVisArea( aVisArea );
}
}
else if ( rValue.Name == sUNO_View_GridIsVisible )
{
if( rValue.Value >>= bBool )
{
SetGridVisible( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsSnapToGrid )
{
if( rValue.Value >>= bBool )
{
SetGridSnap( bBool );
}
}
else if ( rValue.Name == sUNO_View_GridIsFront )
{
if( rValue.Value >>= bBool )
{
SetGridFront( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsSnapToPageMargins )
{
if( rValue.Value >>= bBool )
{
SetBordSnap( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsSnapToSnapLines )
{
if( rValue.Value >>= bBool )
{
SetHlplSnap( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsSnapToObjectFrame )
{
if( rValue.Value >>= bBool )
{
SetOFrmSnap( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsSnapToObjectPoints )
{
if( rValue.Value >>= bBool )
{
SetOPntSnap( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsPlusHandlesAlwaysVisible )
{
if( rValue.Value >>= bBool )
{
SetPlusHandlesAlwaysVisible( bBool );
}
}
else if ( rValue.Name == sUNO_View_IsFrameDragSingles )
{
if( rValue.Value >>= bBool )
{
SetFrameDragSingles( bBool );
}
}
else if ( rValue.Name == sUNO_View_EliminatePolyPointLimitAngle )
{
if( rValue.Value >>= nInt32 )
{
SetEliminatePolyPointLimitAngle( Degree100(nInt32) );
}
}
else if ( rValue.Name == sUNO_View_IsEliminatePolyPoints )
{
if( rValue.Value >>= bBool )
{
SetEliminatePolyPoints( bBool );
}
}
else if ( rValue.Name == sUNO_View_ActiveLayer )
{
if( rValue.Value >>= aString )
{
SetActiveLayer( aString );
}
}
else if ( rValue.Name == sUNO_View_NoAttribs )
{
if( rValue.Value >>= bBool )
{
SetNoAttribs( bBool );
}
}
else if ( rValue.Name == sUNO_View_NoColors )
{
if( rValue.Value >>= bBool )
{
SetNoColors( bBool );
}
}
else if ( rValue.Name == sUNO_View_GridCoarseWidth )
{
if( rValue.Value >>= nInt32 )
{
const Size aCoarse( nInt32, GetGridCoarse().Height() );
SetGridCoarse( aCoarse );
}
}
else if ( rValue.Name == sUNO_View_GridCoarseHeight )
{
if( rValue.Value >>= nInt32 )
{
const Size aCoarse( GetGridCoarse().Width(), nInt32 );
SetGridCoarse( aCoarse );
}
}
else if ( rValue.Name == sUNO_View_GridFineWidth )
{
if( rValue.Value >>= nInt32 )
{
const Size aCoarse( nInt32, GetGridFine().Height() );
SetGridFine( aCoarse );
}
}
else if ( rValue.Name == sUNO_View_GridFineHeight )
{
if( rValue.Value >>= nInt32 )
{
const Size aCoarse( GetGridFine().Width(), nInt32 );
SetGridFine( aCoarse );
}
}
else if ( rValue.Name == sUNO_View_IsAngleSnapEnabled )
{
if( rValue.Value >>= bBool )
{
SetAngleSnapEnabled( bBool );
}
}
else if ( rValue.Name == sUNO_View_SnapAngle )
{
if( rValue.Value >>= nInt32 )
{
SetSnapAngle( Degree100(nInt32) );
}
}
else if ( rValue.Name == sUNO_View_GridSnapWidthXNumerator )
{
rValue.Value >>= aSnapGridWidthXNum;
}
else if ( rValue.Name == sUNO_View_GridSnapWidthXDenominator )
{
rValue.Value >>= aSnapGridWidthXDom;
}
else if ( rValue.Name == sUNO_View_GridSnapWidthYNumerator )
{
rValue.Value >>= aSnapGridWidthYNum;
}
else if ( rValue.Name == sUNO_View_GridSnapWidthYDenominator )
{
rValue.Value >>= aSnapGridWidthYDom;
}
else if (!bImpress && rValue.Name == sUNO_View_VisibleLayers )
{
SdrLayerIDSet aSdrLayerIDSets;
aSdrLayerIDSets.PutValue( rValue.Value );
SetVisibleLayers( aSdrLayerIDSets );
}
else if (!bImpress && rValue.Name == sUNO_View_PrintableLayers )
{
SdrLayerIDSet aSdrLayerIDSets;
aSdrLayerIDSets.PutValue( rValue.Value );
SetPrintableLayers( aSdrLayerIDSets );
}
else if (!bImpress && rValue.Name == sUNO_View_LockedLayers )
{
SdrLayerIDSet aSdrLayerIDSets;
aSdrLayerIDSets.PutValue( rValue.Value );
SetLockedLayers( aSdrLayerIDSets );
}
}
SetViewShEditModeOnLoad(EditMode::Page);
const Fraction aSnapGridWidthX( aSnapGridWidthXNum, aSnapGridWidthXDom );
const Fraction aSnapGridWidthY( aSnapGridWidthYNum, aSnapGridWidthYDom );
SetSnapGridWidth( aSnapGridWidthX, aSnapGridWidthY );
}
void FrameView::SetPreviousViewShellType (ViewShell::ShellType eType)
{
mePreviousViewShellType = eType;
}
void FrameView::SetViewShellTypeOnLoad (ViewShell::ShellType eType)
{
meViewShellTypeOnLoad = eType;
}
void FrameView::SetSelectedPage(sal_uInt16 nPage)
{
mnSelectedPage = nPage;
}
void FrameView::SetIsNavigatorShowingAllShapes (const bool bIsNavigatorShowingAllShapes)
{
mbIsNavigatorShowingAllShapes = bIsNavigatorShowingAllShapes;
}
} // end of namespace sd
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V530 The return value of function 'append' is required to be utilized.
↑ V1077 The 'FrameView' constructor contains potentially uninitialized members. Inspect the following: mbRuler, mbQuickEdit, mePreviousViewShellType, meViewShellTypeOnLoad.