1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20 #include <FrameView.hxx>
21
22 #include <svx/svxids.hrc>
23 #include <com/sun/star/drawing/framework/ResourceId.hpp>
24 #include <com/sun/star/drawing/framework/XView.hpp>
25 #include <rtl/ustrbuf.hxx>
26 #include <unokywds.hxx>
27 #include <vcl/settings.hxx>
28 #include <vcl/svapp.hxx>
29
30 #include <vector>
31 #include <ViewShell.hxx>
32 #include <drawdoc.hxx>
33 #include <DrawDocShell.hxx>
34 #include <optsitem.hxx>
35 #include <ViewShellBase.hxx>
36 #include <sdmod.hxx>
37 #include <pres.hxx>
38 #include <framework/FrameworkHelper.hxx>
39 #include <comphelper/processfactory.hxx>
40 #include <sfx2/viewfrm.hxx>
41 #include <officecfg/Office/Common.hxx>
42
43 using namespace ::com::sun::star;
44 using namespace ::com::sun::star::uno;
45 using namespace ::com::sun::star::beans;
46 using namespace ::std;
47
48 namespace sd {
49
FrameView(SdDrawDocument * pDrawDoc,FrameView * pFrameView)50 FrameView::FrameView(SdDrawDocument* pDrawDoc, FrameView* pFrameView /* = NULL */)
51 : SdrView(*pDrawDoc, nullptr), // TTTT SdDrawDocument* -> should be reference
52 mnRefCount(0),
53 mnPresViewShellId(SID_VIEWSHELL0),
54 mbIsNavigatorShowingAllShapes(false)
55 {
56 EndListening(*pDrawDoc);
57
58 EnableExtendedKeyInputDispatcher(false);
59 EnableExtendedMouseEventDispatcher(false);
60
61 SetGridFront( false );
62 SetHlplFront( false );
63 SetOConSnap( false );
64 SetFrameDragSingles();
65 SetSlidesPerRow(4);
66
67 if( nullptr == pFrameView )
68 {
69 DrawDocShell* pDocShell = pDrawDoc->GetDocSh();
70
71 if ( pDocShell )
72 {
73 // document is loaded, is there a FrameView?
74 sal_uLong nSdViewShellCount = 0;
75 SfxViewFrame* pSfxViewFrame = SfxViewFrame::GetFirst(pDocShell);
76
77 while (pSfxViewFrame)
78 {
79 // Count the FrameViews and remember the type of the main
80 // view shell.
81 SfxViewShell* pSfxViewSh = pSfxViewFrame->GetViewShell();
82 ViewShellBase* pBase = dynamic_cast<ViewShellBase*>( pSfxViewSh );
83
84 if (pBase != nullptr)
85 {
86 nSdViewShellCount++;
87
88 OUString sViewURL;
89 Reference<drawing::framework::XView> xView (
90 framework::FrameworkHelper::Instance(*pBase)->GetView(
91 drawing::framework::ResourceId::create(
92 ::comphelper::getProcessComponentContext(),
93 framework::FrameworkHelper::msCenterPaneURL)));
94 if (xView.is())
95 sViewURL = xView->getResourceId()->getResourceURL();
96
97 switch (framework::FrameworkHelper::GetViewId(sViewURL))
98 {
99 default:
100 // case ViewShell::ST_IMPRESS:
101 // case ViewShell::ST_NOTES:
102 // case ViewShell::ST_HANDOUT:
103 mnPresViewShellId = SID_VIEWSHELL0;
104 break;
105
106 case ViewShell::ST_SLIDE_SORTER:
107 mnPresViewShellId = SID_VIEWSHELL1;
108 break;
109
110 case ViewShell::ST_OUTLINE:
111 mnPresViewShellId = SID_VIEWSHELL2;
112 break;
113 }
114 }
115
116 pSfxViewFrame = SfxViewFrame::GetNext(*pSfxViewFrame, pDocShell);
117 }
118
119 SdDrawDocument* pDoc = pDocShell->GetDoc();
120 pFrameView = pDoc->GetFrameView(nSdViewShellCount);
121 }
122 }
123
124 if (pFrameView)
125 {
126 // initialize FrameView with the FrameView of the DocShell
127 SetRuler( pFrameView->HasRuler() );
128 SetGridCoarse( pFrameView->GetGridCoarse() );
129 SetGridFine( pFrameView->GetGridFine() );
130 SetSnapGridWidth(pFrameView->GetSnapGridWidthX(), pFrameView->GetSnapGridWidthY());
131 SetGridVisible( pFrameView->IsGridVisible() );
132 SetGridFront( pFrameView->IsGridFront() );
133 SetSnapAngle( pFrameView->GetSnapAngle() );
134 SetGridSnap( pFrameView->IsGridSnap() );
135 SetBordSnap( pFrameView->IsBordSnap() );
136 SetHlplSnap( pFrameView->IsHlplSnap() );
137 SetOFrmSnap( pFrameView->IsOFrmSnap() );
138 SetOPntSnap( pFrameView->IsOPntSnap() );
139 SetOConSnap( pFrameView->IsOConSnap() );
140 SetHlplVisible( pFrameView->IsHlplVisible() );
141 SetDragStripes( pFrameView->IsDragStripes() );
142 SetPlusHandlesAlwaysVisible( pFrameView->IsPlusHandlesAlwaysVisible() );
143 SetFrameDragSingles( pFrameView->IsFrameDragSingles() );
144 SetSnapMagneticPixel( pFrameView->GetSnapMagneticPixel() );
145 SetMarkedHitMovesAlways( pFrameView->IsMarkedHitMovesAlways() );
146 SetMoveOnlyDragging( pFrameView->IsMoveOnlyDragging() );
147 SetCrookNoContortion( pFrameView->IsCrookNoContortion() );
148 SetSlantButShear( pFrameView->IsSlantButShear() );
149 SetNoDragXorPolys( pFrameView->IsNoDragXorPolys() );
150 SetAngleSnapEnabled( pFrameView->IsAngleSnapEnabled() );
151 SetBigOrtho( pFrameView->IsBigOrtho() );
152 SetOrtho( pFrameView->IsOrtho() );
153 SetEliminatePolyPointLimitAngle( pFrameView->GetEliminatePolyPointLimitAngle() );
154 SetEliminatePolyPoints( pFrameView->IsEliminatePolyPoints() );
155 SetDesignMode( pFrameView->IsDesignMode() );
156
157 SetSolidDragging( pFrameView->IsSolidDragging() );
158
159 maVisibleLayers = pFrameView->GetVisibleLayers();
160 maPrintableLayers = pFrameView->GetPrintableLayers();
161 maLockedLayers = pFrameView->GetLockedLayers();
162 maStandardHelpLines = pFrameView->GetStandardHelpLines();
163 maNotesHelpLines = pFrameView->GetNotesHelpLines();
164 maHandoutHelpLines = pFrameView->GetHandoutHelpLines();
165 SetActiveLayer( pFrameView->GetActiveLayer() );
166 mbNoColors = pFrameView->IsNoColors();
167 mbNoAttribs = pFrameView->IsNoAttribs() ;
168 maVisArea = pFrameView->GetVisArea();
169 mePageKind = pFrameView->GetPageKind();
170 mePageKindOnLoad = pFrameView->GetPageKindOnLoad();
171 mnSelectedPage = pFrameView->GetSelectedPage();
172 mnSelectedPageOnLoad = pFrameView->GetSelectedPageOnLoad();
173 mePageEditMode = pFrameView->GetViewShEditMode();
174 // meStandardEditMode = pFrameView->GetViewShEditMode(PageKind::Standard);
175 // meNotesEditMode = pFrameView->GetViewShEditMode(PageKind::Notes);
176 // meHandoutEditMode = pFrameView->GetViewShEditMode(PageKind::Handout);
177 SetViewShEditModeOnLoad(pFrameView->GetViewShEditModeOnLoad());
178 mbLayerMode = pFrameView->IsLayerMode();
179 mbQuickEdit = pFrameView->IsQuickEdit();
180
181 // #i26631#
182 SetMasterPagePaintCaching( pFrameView->IsMasterPagePaintCaching() );
183
184 SetDragWithCopy( pFrameView->IsDragWithCopy() );
185 mbDoubleClickTextEdit = pFrameView->IsDoubleClickTextEdit();
186 mbClickChangeRotation = pFrameView->IsClickChangeRotation();
187 mnSlidesPerRow = pFrameView->GetSlidesPerRow();
188 mnDrawMode = pFrameView->GetDrawMode();
189 mbIsNavigatorShowingAllShapes = pFrameView->IsNavigatorShowingAllShapes();
190 SetPreviousViewShellType (pFrameView->GetPreviousViewShellType());
191 SetViewShellTypeOnLoad (pFrameView->GetViewShellTypeOnLoad());
192 }
193 else
194 {
195 // initialize FrameView with the application data
196
197 // Layers need to be set, otherwise they are not visible and not printable in
198 // Impress documents. The document contains already the actual layers and their
199 // settings for visible, printable and locked. In case not read from <draw:layer-set>,
200 // ODF defaults are used.
201 SdrLayerAdmin rLayerAdmin = pDrawDoc -> GetLayerAdmin();
202 rLayerAdmin.getVisibleLayersODF(maVisibleLayers);
203 rLayerAdmin.getPrintableLayersODF(maPrintableLayers);
204 rLayerAdmin.getLockedLayersODF(maLockedLayers);
205 SetGridCoarse( Size( 1000, 1000 ) );
206 SetSnapGridWidth(Fraction(1000, 1), Fraction(1000, 1));
207 SetActiveLayer(sUNO_LayerName_layout);
208 mbNoColors = true;
209 mbNoAttribs = false;
210 maVisArea = ::tools::Rectangle( Point(), Size(0, 0) );
211 mePageKind = PageKind::Standard;
212 mePageKindOnLoad = PageKind::Standard;
213 mnSelectedPage = 0;
214 mnSelectedPageOnLoad = 0;
215 mePageEditMode = EditMode::Page;
216 // meStandardEditMode = EditMode::Page;
217 // meNotesEditMode = EditMode::Page;
218 // meHandoutEditMode = EditMode::MasterPage;
219 SetViewShEditModeOnLoad(EditMode::Page);
220 mbLayerMode = false;
221 SetEliminatePolyPoints(false);
222 mbDoubleClickTextEdit = false;
223 mbClickChangeRotation = false;
224 mnSlidesPerRow = 4;
225
226 {
227 bool bUseContrast = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
228 mnDrawMode = bUseContrast ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR;
229 }
230 mbIsNavigatorShowingAllShapes = false;
231 SetPreviousViewShellType (ViewShell::ST_NONE);
232 SetViewShellTypeOnLoad (ViewShell::ST_IMPRESS);
233
234 // get default for design mode
235 bool bInitDesignMode = pDrawDoc->GetOpenInDesignMode();
236 if( pDrawDoc->OpenInDesignModeIsDefaulted() )
237 {
238 bInitDesignMode = true;
239 }
240
241 SfxObjectShell* pObjShell = pDrawDoc->GetObjectShell();
242 if( pObjShell && pObjShell->IsReadOnly() )
243 bInitDesignMode = false;
244 SetDesignMode( bInitDesignMode );
245
246 Update( SD_MOD()->GetSdOptions(pDrawDoc->GetDocumentType()) );
247 }
248
249 }
250
~FrameView()251 FrameView::~FrameView()
252 {
253 }
254
Connect()255 void FrameView::Connect()
256 {
257 mnRefCount++;
258 }
259
Disconnect()260 void FrameView::Disconnect()
261 {
262 if (mnRefCount > 0)
263 {
264 mnRefCount--;
265 }
266
267 if (mnRefCount == 0)
268 {
269 delete this;
270 }
271 }
272
273 /**
274 * Update with data from the specified SdOptions
275 */
Update(SdOptions const * pOptions)276 void FrameView::Update(SdOptions const * pOptions)
277 {
278 if (!pOptions)
279 return;
280
281 mbRuler = pOptions->IsRulerVisible();
282 SetGridVisible( pOptions->IsGridVisible() );
283 SetSnapAngle( pOptions->GetAngle() );
284 SetGridSnap( pOptions->IsUseGridSnap() );
285 SetBordSnap( pOptions->IsSnapBorder() );
286 SetHlplSnap( pOptions->IsSnapHelplines() );
287 SetOFrmSnap( pOptions->IsSnapFrame() );
288 SetOPntSnap( pOptions->IsSnapPoints() );
289 SetHlplVisible( pOptions->IsHelplines() );
290 SetDragStripes( pOptions->IsDragStripes() );
291 SetPlusHandlesAlwaysVisible( pOptions->IsHandlesBezier() );
292 SetSnapMagneticPixel( pOptions->GetSnapArea() );
293 SetMarkedHitMovesAlways( pOptions->IsMarkedHitMovesAlways() );
294 SetMoveOnlyDragging( pOptions->IsMoveOnlyDragging() );
295 SetSlantButShear( pOptions->IsMoveOnlyDragging() );
296 SetNoDragXorPolys ( !pOptions->IsMoveOutline() );
297 SetCrookNoContortion( pOptions->IsCrookNoContortion() );
298 SetAngleSnapEnabled( pOptions->IsRotate() );
299 SetBigOrtho( pOptions->IsBigOrtho() );
300 SetOrtho( pOptions->IsOrtho() );
301 SetEliminatePolyPointLimitAngle( pOptions->GetEliminatePolyPointLimitAngle() );
302 GetModel()->SetPickThroughTransparentTextFrames( pOptions->IsPickThrough() );
303
304 SetSolidDragging( pOptions->IsSolidDragging() );
305
306 SetGridCoarse( Size( pOptions->GetFieldDrawX(), pOptions->GetFieldDrawY() ) );
307 SetGridFine( Size( pOptions->GetFieldDivisionX(), pOptions->GetFieldDivisionY() ) );
308 Fraction aFractX(pOptions->GetFieldDrawX(), pOptions->GetFieldDrawX() / ( pOptions->GetFieldDivisionX() ? pOptions->GetFieldDivisionX() : 1 ));
309 Fraction aFractY(pOptions->GetFieldDrawY(), pOptions->GetFieldDrawY() / ( pOptions->GetFieldDivisionY() ? pOptions->GetFieldDivisionY() : 1 ));
310 SetSnapGridWidth(aFractX, aFractY);
311 SetQuickEdit(pOptions->IsQuickEdit());
312
313 // #i26631#
314 SetMasterPagePaintCaching( pOptions->IsMasterPagePaintCaching() );
315
316 SetDragWithCopy(pOptions->IsDragWithCopy());
317 SetDoubleClickTextEdit( pOptions->IsDoubleClickTextEdit() );
318 SetClickChangeRotation( pOptions->IsClickChangeRotation() );
319 }
320
321 /**
322 * Set EditMode (Page or MasterPage) of working mode
323 */
SetViewShEditMode(EditMode eMode)324 void FrameView::SetViewShEditMode(EditMode eMode)
325 {
326 mePageEditMode = eMode;
327 }
328
329 /**
330 * Return EditMode (Page or MasterPage) of working mode
331 */
GetViewShEditMode() const332 EditMode FrameView::GetViewShEditMode() const
333 {
334 return mePageEditMode;
335 }
336
SetViewShEditModeOnLoad(EditMode eMode)337 void FrameView::SetViewShEditModeOnLoad (EditMode eMode)
338 {
339 meEditModeOnLoad = eMode;
340 }
341
createHelpLinesString(const SdrHelpLineList & rHelpLines)342 static OUString createHelpLinesString( const SdrHelpLineList& rHelpLines )
343 {
344 OUStringBuffer aLines;
345
346 const sal_uInt16 nCount = rHelpLines.GetCount();
347 for( sal_uInt16 nHlpLine = 0; nHlpLine < nCount; nHlpLine++ )
348 {
349 const SdrHelpLine& rHelpLine = rHelpLines[nHlpLine];
350 const Point& rPos = rHelpLine.GetPos();
351
352 switch( rHelpLine.GetKind() )
353 {
354 case SdrHelpLineKind::Point:
355 aLines.append( 'P' );
356 aLines.append( static_cast<sal_Int32>(rPos.X()) );
357 aLines.append( ',' );
358 aLines.append( static_cast<sal_Int32>(rPos.Y()) );
359 break;
360 case SdrHelpLineKind::Vertical:
361 aLines.append( 'V' );
362 aLines.append( static_cast<sal_Int32>(rPos.X()) );
363 break;
364 case SdrHelpLineKind::Horizontal:
365 aLines.append( 'H' );
366 aLines.append( static_cast<sal_Int32>(rPos.Y()) );
367 break;
368 default:
369 OSL_FAIL( "Unsupported helpline Kind!" );
370 }
371 }
372
373 return aLines.makeStringAndClear();
374 }
375
376 #define addValue( n, v ) push_back( std::pair< OUString, Any >( OUString( n ), v ) )
WriteUserDataSequence(css::uno::Sequence<css::beans::PropertyValue> & rValues)377 void FrameView::WriteUserDataSequence ( css::uno::Sequence < css::beans::PropertyValue >& rValues )
378 {
379 std::vector< std::pair< OUString, Any > > aUserData;
380
381 aUserData.addValue( sUNO_View_GridIsVisible, makeAny( IsGridVisible() ) );
382 aUserData.addValue( sUNO_View_GridIsFront, makeAny( IsGridFront() ) );
383 aUserData.addValue( sUNO_View_IsSnapToGrid, makeAny( IsGridSnap() ) );
384 aUserData.addValue( sUNO_View_IsSnapToPageMargins, makeAny( IsBordSnap() ) );
385 aUserData.addValue( sUNO_View_IsSnapToSnapLines, makeAny( IsHlplSnap() ) );
386 aUserData.addValue( sUNO_View_IsSnapToObjectFrame, makeAny( IsOFrmSnap() ) );
387 aUserData.addValue( sUNO_View_IsSnapToObjectPoints, makeAny( IsOPntSnap() ) );
388
389 aUserData.addValue( sUNO_View_IsPlusHandlesAlwaysVisible, makeAny( IsPlusHandlesAlwaysVisible() ) );
390 aUserData.addValue( sUNO_View_IsFrameDragSingles, makeAny( IsFrameDragSingles() ) );
391
392 aUserData.addValue( sUNO_View_EliminatePolyPointLimitAngle, makeAny( static_cast<sal_Int32>(GetEliminatePolyPointLimitAngle()) ) );
393 aUserData.addValue( sUNO_View_IsEliminatePolyPoints, makeAny( IsEliminatePolyPoints() ) );
394
395 if ( officecfg::Office::Common::Misc::WriteLayerStateAsConfigItem::get() )
396 {
397 SdrLayerAdmin& rLayerAdmin = getSdrModelFromSdrView().GetLayerAdmin();
398 Any aAny;
399 rLayerAdmin.QueryValue(GetVisibleLayers(), aAny);
400 aUserData.addValue( sUNO_View_VisibleLayers, aAny );
401
402 rLayerAdmin.QueryValue(GetPrintableLayers(), aAny);
403 aUserData.addValue( sUNO_View_PrintableLayers, aAny );
404
405 rLayerAdmin.QueryValue(GetLockedLayers(), aAny);
406 aUserData.addValue( sUNO_View_LockedLayers, aAny );
407 }
408
409 aUserData.addValue( sUNO_View_NoAttribs, makeAny( IsNoAttribs() ) );
410 aUserData.addValue( sUNO_View_NoColors, makeAny( IsNoColors() ) );
411
412 if( GetStandardHelpLines().GetCount() )
413 aUserData.addValue( sUNO_View_SnapLinesDrawing, makeAny( createHelpLinesString( GetStandardHelpLines() ) ) );
414
415 if( GetNotesHelpLines().GetCount() )
416 aUserData.addValue( sUNO_View_SnapLinesNotes, makeAny( createHelpLinesString( GetNotesHelpLines() ) ) );
417
418 if( GetHandoutHelpLines().GetCount() )
419 aUserData.addValue( sUNO_View_SnapLinesHandout, makeAny( createHelpLinesString( GetHandoutHelpLines() ) ) );
420
421 aUserData.addValue( sUNO_View_RulerIsVisible, makeAny( HasRuler() ) );
422 aUserData.addValue( sUNO_View_PageKind, makeAny( static_cast<sal_Int16>(GetPageKind()) ) );
423 aUserData.addValue( sUNO_View_SelectedPage, makeAny( static_cast<sal_Int16>(GetSelectedPage()) ) );
424 aUserData.addValue( sUNO_View_IsLayerMode, makeAny( IsLayerMode() ) );
425
426 aUserData.addValue( sUNO_View_IsDoubleClickTextEdit, makeAny( IsDoubleClickTextEdit() ) );
427 aUserData.addValue( sUNO_View_IsClickChangeRotation, makeAny( IsClickChangeRotation() ) );
428
429 aUserData.addValue( sUNO_View_SlidesPerRow, makeAny( static_cast<sal_Int16>(GetSlidesPerRow()) ) );
430 aUserData.addValue( sUNO_View_EditMode, makeAny( static_cast<sal_Int32>(GetViewShEditMode()) ) );
431 // aUserData.addValue( sUNO_View_EditModeStandard, makeAny( (sal_Int32)GetViewShEditMode( PageKind::Standard ) ) );
432 // aUserData.addValue( sUNO_View_EditModeNotes, makeAny( (sal_Int32)GetViewShEditMode( PageKind::Notes ) ) );
433 // aUserData.addValue( sUNO_View_EditModeHandout, makeAny( (sal_Int32)GetViewShEditMode( PageKind::Handout ) ) );
434
435 {
436 const ::tools::Rectangle aVisArea = GetVisArea();
437
438 aUserData.addValue( sUNO_View_VisibleAreaTop, makeAny( static_cast<sal_Int32>(aVisArea.Top()) ) );
439 aUserData.addValue( sUNO_View_VisibleAreaLeft, makeAny( static_cast<sal_Int32>(aVisArea.Left()) ) );
440 aUserData.addValue( sUNO_View_VisibleAreaWidth, makeAny( static_cast<sal_Int32>(aVisArea.GetWidth()) ) );
441 aUserData.addValue( sUNO_View_VisibleAreaHeight, makeAny( static_cast<sal_Int32>(aVisArea.GetHeight()) ) );
442 }
443
444 aUserData.addValue( sUNO_View_GridCoarseWidth, makeAny( static_cast<sal_Int32>(GetGridCoarse().Width()) ) );
445 aUserData.addValue( sUNO_View_GridCoarseHeight, makeAny( static_cast<sal_Int32>(GetGridCoarse().Height()) ) );
446 aUserData.addValue( sUNO_View_GridFineWidth, makeAny( static_cast<sal_Int32>(GetGridFine().Width()) ) );
447 aUserData.addValue( sUNO_View_GridFineHeight, makeAny( static_cast<sal_Int32>(GetGridFine().Height()) ) );
448 aUserData.addValue( sUNO_View_GridSnapWidthXNumerator, makeAny( GetSnapGridWidthX().GetNumerator() ) );
449 aUserData.addValue( sUNO_View_GridSnapWidthXDenominator, makeAny( GetSnapGridWidthX().GetDenominator() ) );
450 aUserData.addValue( sUNO_View_GridSnapWidthYNumerator, makeAny( GetSnapGridWidthY().GetNumerator() ) );
451 aUserData.addValue( sUNO_View_GridSnapWidthYDenominator, makeAny( GetSnapGridWidthY().GetDenominator() ) );
452 aUserData.addValue( sUNO_View_IsAngleSnapEnabled, makeAny( IsAngleSnapEnabled() ) );
453 aUserData.addValue( sUNO_View_SnapAngle, makeAny( static_cast<sal_Int32>(GetSnapAngle()) ) );
454
455 const sal_Int32 nOldLength = rValues.getLength();
456 rValues.realloc( nOldLength + aUserData.size() );
457
458 PropertyValue* pValue = &(rValues.getArray()[nOldLength]);
459
460 for( const auto& rItem : aUserData )
461 {
462 pValue->Name = rItem.first;
463 pValue->Value = rItem.second;
464 ++pValue;
465 }
466 }
467 #undef addValue
468
createHelpLinesFromString(const OUString & rLines,SdrHelpLineList & rHelpLines)469 static void createHelpLinesFromString( const OUString& rLines, SdrHelpLineList& rHelpLines )
470 {
471 const sal_Unicode * pStr = rLines.getStr();
472 SdrHelpLine aNewHelpLine;
473 OUStringBuffer sBuffer;
474
475 while( *pStr )
476 {
477 Point aPoint;
478
479 switch( *pStr )
480 {
481 case 'P':
482 aNewHelpLine.SetKind( SdrHelpLineKind::Point );
483 break;
484 case 'V':
485 aNewHelpLine.SetKind( SdrHelpLineKind::Vertical );
486 break;
487 case 'H':
488 aNewHelpLine.SetKind( SdrHelpLineKind::Horizontal );
489 break;
490 default:
491 OSL_FAIL( "syntax error in snap lines settings string" );
492 return;
493 }
494
495 pStr++;
496
497 while( (*pStr >= '0' && *pStr <= '9') || (*pStr == '+') || (*pStr == '-') )
498 {
499 sBuffer.append( *pStr++ );
500 }
501
502 sal_Int32 nValue = sBuffer.makeStringAndClear().toInt32();
503
504 if( aNewHelpLine.GetKind() == SdrHelpLineKind::Horizontal )
505 {
506 aPoint.setY( nValue );
507 }
508 else
509 {
510 aPoint.setX( nValue );
511
512 if( aNewHelpLine.GetKind() == SdrHelpLineKind::Point )
513 {
514 if( *pStr++ != ',' )
515 return;
516
517 while( (*pStr >= '0' && *pStr <= '9') || (*pStr == '+') || (*pStr == '-') )
518 {
519 sBuffer.append( *pStr++ );
520 }
521
522 aPoint.setY( sBuffer.makeStringAndClear().toInt32() );
523
524 }
525 }
526
527 aNewHelpLine.SetPos( aPoint );
528 rHelpLines.Insert( aNewHelpLine );
529 }
530 }
531
ReadUserDataSequence(const css::uno::Sequence<css::beans::PropertyValue> & rSequence)532 void FrameView::ReadUserDataSequence ( const css::uno::Sequence < css::beans::PropertyValue >& rSequence )
533 {
534 const sal_Int32 nLength = rSequence.getLength();
535 if (!nLength)
536 return;
537
538 SdDrawDocument* pDrawDocument = dynamic_cast<SdDrawDocument*>(GetModel());
539 const bool bImpress = pDrawDocument && pDrawDocument->GetDocumentType() == DocumentType::Impress;
540
541 bool bBool = false;
542 sal_Int32 nInt32 = 0;
543 sal_Int16 nInt16 = 0;
544 OUString aString;
545
546 sal_Int32 aSnapGridWidthXNum = GetSnapGridWidthX().GetNumerator();
547 sal_Int32 aSnapGridWidthXDom = GetSnapGridWidthX().GetDenominator();
548
549 sal_Int32 aSnapGridWidthYNum = GetSnapGridWidthY().GetNumerator();
550 sal_Int32 aSnapGridWidthYDom = GetSnapGridWidthY().GetDenominator();
551
552 for (const css::beans::PropertyValue& rValue : rSequence)
553 {
554 if ( rValue.Name == sUNO_View_ViewId )
555 {
556 }
557 else if ( rValue.Name == sUNO_View_SnapLinesDrawing )
558 {
559 if( rValue.Value >>= aString )
560 {
561 SdrHelpLineList aHelpLines;
562 createHelpLinesFromString( aString, aHelpLines );
563 SetStandardHelpLines( aHelpLines );
564 }
565 }
566 else if ( rValue.Name == sUNO_View_SnapLinesNotes )
567 {
568 if( rValue.Value >>= aString )
569 {
570 SdrHelpLineList aHelpLines;
571 createHelpLinesFromString( aString, aHelpLines );
572 SetNotesHelpLines( aHelpLines );
573 }
574 }
575 else if ( rValue.Name == sUNO_View_SnapLinesHandout )
576 {
577 if( rValue.Value >>= aString )
578 {
579 SdrHelpLineList aHelpLines;
580 createHelpLinesFromString( aString, aHelpLines );
581 SetHandoutHelpLines( aHelpLines );
582 }
583 }
584 else if ( rValue.Name == sUNO_View_RulerIsVisible )
585 {
586 if( rValue.Value >>= bBool )
587 {
588 SetRuler( bBool );
589 }
590 }
591 else if ( rValue.Name == sUNO_View_PageKind )
592 {
593 if( rValue.Value >>= nInt16 )
594 {
595 SdDrawDocument* pDoc = dynamic_cast< SdDrawDocument* >( GetModel() );
596 if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
597 SetPageKind( static_cast<PageKind>(nInt16) );
598
599 SetPageKindOnLoad( static_cast<PageKind>(nInt16) );
600 }
601 }
602 else if ( rValue.Name == sUNO_View_SelectedPage )
603 {
604 if( rValue.Value >>= nInt16 )
605 {
606 SdDrawDocument* pDoc = dynamic_cast< SdDrawDocument* >( GetModel() );
607 if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
608 SetSelectedPage( static_cast<sal_uInt16>(nInt16) );
609
610 SetSelectedPageOnLoad( static_cast<sal_uInt16>(nInt16) );
611 }
612 }
613 else if ( rValue.Name == sUNO_View_IsLayerMode )
614 {
615 if( rValue.Value >>= bBool )
616 {
617 SetLayerMode( bBool );
618 }
619 }
620 else if ( rValue.Name == sUNO_View_IsDoubleClickTextEdit )
621 {
622 if( rValue.Value >>= bBool )
623 {
624 SetDoubleClickTextEdit( bBool );
625 }
626 }
627 else if ( rValue.Name == sUNO_View_IsClickChangeRotation )
628 {
629 if( rValue.Value >>= bBool )
630 {
631 SetClickChangeRotation( bBool );
632 }
633 }
634 else if ( rValue.Name == sUNO_View_SlidesPerRow )
635 {
636 if( rValue.Value >>= nInt16 )
637 {
638 SetSlidesPerRow( static_cast<sal_uInt16>(nInt16) );
639 }
640 }
641 else if ( rValue.Name == sUNO_View_EditMode )
642 {
643 if( rValue.Value >>= nInt32 )
644 {
645 SdDrawDocument* pDoc = dynamic_cast< SdDrawDocument* >( GetModel() );
646 if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
647 SetViewShEditMode( static_cast<EditMode>(nInt32) );
648 }
649 }
650 // This one is kept for compatibility. Old value read from sUNO_View_EditModeStandard
651 // is used. New value will be written into sUNO_View_EditMode.
652 // Values from sUNO_View_EditModeNotes and sUNO_View_EditModeHangout will be ignored.
653 else if ( rValue.Name == sUNO_View_EditModeStandard )
654 {
655 if( rValue.Value >>= nInt32 )
656 {
657 SdDrawDocument* pDoc = dynamic_cast< SdDrawDocument* >( GetModel() );
658 if( pDoc && pDoc->GetDocSh() && ( SfxObjectCreateMode::EMBEDDED == pDoc->GetDocSh()->GetCreateMode() ) )
659 SetViewShEditMode( static_cast<EditMode>(nInt32) );
660 }
661 }
662 else if ( rValue.Name == sUNO_View_VisibleAreaTop )
663 {
664 sal_Int32 nTop = 0;
665 if( rValue.Value >>= nTop )
666 {
667 ::tools::Rectangle aVisArea( GetVisArea() );
668 aVisArea.AdjustBottom(nTop - aVisArea.Top() );
669 aVisArea.SetTop( nTop );
670 SetVisArea( aVisArea );
671 }
672 }
673 else if ( rValue.Name == sUNO_View_VisibleAreaLeft )
674 {
675 sal_Int32 nLeft = 0;
676 if( rValue.Value >>= nLeft )
677 {
678 ::tools::Rectangle aVisArea( GetVisArea() );
679 aVisArea.AdjustRight(nLeft - aVisArea.Left() );
680 aVisArea.SetLeft( nLeft );
681 SetVisArea( aVisArea );
682 }
683 }
684 else if ( rValue.Name == sUNO_View_VisibleAreaWidth )
685 {
686 sal_Int32 nWidth = 0;
687 if( rValue.Value >>= nWidth )
688 {
689 ::tools::Rectangle aVisArea( GetVisArea() );
690 aVisArea.SetRight( aVisArea.Left() + nWidth - 1 );
691 SetVisArea( aVisArea );
692 }
693 }
694 else if ( rValue.Name == sUNO_View_VisibleAreaHeight )
695 {
696 sal_Int32 nHeight = 0;
697 if( rValue.Value >>= nHeight )
698 {
699 ::tools::Rectangle aVisArea( GetVisArea() );
700 aVisArea.SetBottom( nHeight + aVisArea.Top() - 1 );
701 SetVisArea( aVisArea );
702 }
703 }
704
705 else if ( rValue.Name == sUNO_View_GridIsVisible )
706 {
707 if( rValue.Value >>= bBool )
708 {
709 SetGridVisible( bBool );
710 }
711 }
712
713 else if ( rValue.Name == sUNO_View_IsSnapToGrid )
714 {
715 if( rValue.Value >>= bBool )
716 {
717 SetGridSnap( bBool );
718 }
719 }
720 else if ( rValue.Name == sUNO_View_GridIsFront )
721 {
722 if( rValue.Value >>= bBool )
723 {
724 SetGridFront( bBool );
725 }
726 }
727 else if ( rValue.Name == sUNO_View_IsSnapToPageMargins )
728 {
729 if( rValue.Value >>= bBool )
730 {
731 SetBordSnap( bBool );
732 }
733 }
734 else if ( rValue.Name == sUNO_View_IsSnapToSnapLines )
735 {
736 if( rValue.Value >>= bBool )
737 {
738 SetHlplSnap( bBool );
739 }
740 }
741 else if ( rValue.Name == sUNO_View_IsSnapToObjectFrame )
742 {
743 if( rValue.Value >>= bBool )
744 {
745 SetOFrmSnap( bBool );
746 }
747 }
748 else if ( rValue.Name == sUNO_View_IsSnapToObjectPoints )
749 {
750 if( rValue.Value >>= bBool )
751 {
752 SetOPntSnap( bBool );
753 }
754 }
755 else if ( rValue.Name == sUNO_View_IsPlusHandlesAlwaysVisible )
756 {
757 if( rValue.Value >>= bBool )
758 {
759 SetPlusHandlesAlwaysVisible( bBool );
760 }
761 }
762 else if ( rValue.Name == sUNO_View_IsFrameDragSingles )
763 {
764 if( rValue.Value >>= bBool )
765 {
766 SetFrameDragSingles( bBool );
767 }
768 }
769 else if ( rValue.Name == sUNO_View_EliminatePolyPointLimitAngle )
770 {
771 if( rValue.Value >>= nInt32 )
772 {
773 SetEliminatePolyPointLimitAngle( nInt32 );
774 }
775 }
776 else if ( rValue.Name == sUNO_View_IsEliminatePolyPoints )
777 {
778 if( rValue.Value >>= bBool )
779 {
780 SetEliminatePolyPoints( bBool );
781 }
782 }
783 else if ( rValue.Name == sUNO_View_ActiveLayer )
784 {
785 if( rValue.Value >>= aString )
786 {
787 SetActiveLayer( aString );
788 }
789 }
790 else if ( rValue.Name == sUNO_View_NoAttribs )
791 {
792 if( rValue.Value >>= bBool )
793 {
794 SetNoAttribs( bBool );
795 }
796 }
797 else if ( rValue.Name == sUNO_View_NoColors )
798 {
799 if( rValue.Value >>= bBool )
800 {
801 SetNoColors( bBool );
802 }
803 }
804 else if ( rValue.Name == sUNO_View_GridCoarseWidth )
805 {
806 if( rValue.Value >>= nInt32 )
807 {
808 const Size aCoarse( nInt32, GetGridCoarse().Height() );
809 SetGridCoarse( aCoarse );
810 }
811 }
812 else if ( rValue.Name == sUNO_View_GridCoarseHeight )
813 {
814 if( rValue.Value >>= nInt32 )
815 {
816 const Size aCoarse( GetGridCoarse().Width(), nInt32 );
817 SetGridCoarse( aCoarse );
818 }
819 }
820 else if ( rValue.Name == sUNO_View_GridFineWidth )
821 {
822 if( rValue.Value >>= nInt32 )
823 {
824 const Size aCoarse( nInt32, GetGridFine().Height() );
825 SetGridFine( aCoarse );
826 }
827 }
828 else if ( rValue.Name == sUNO_View_GridFineHeight )
829 {
830 if( rValue.Value >>= nInt32 )
831 {
832 const Size aCoarse( GetGridFine().Width(), nInt32 );
833 SetGridFine( aCoarse );
834 }
835 }
836 else if ( rValue.Name == sUNO_View_IsAngleSnapEnabled )
837 {
838 if( rValue.Value >>= bBool )
839 {
840 SetAngleSnapEnabled( bBool );
841 }
842 }
843 else if ( rValue.Name == sUNO_View_SnapAngle )
844 {
845 if( rValue.Value >>= nInt32 )
846 {
847 SetSnapAngle( nInt32 );
848 }
849 }
850 else if ( rValue.Name == sUNO_View_GridSnapWidthXNumerator )
851 {
852 rValue.Value >>= aSnapGridWidthXNum;
853 }
854 else if ( rValue.Name == sUNO_View_GridSnapWidthXDenominator )
855 {
856 rValue.Value >>= aSnapGridWidthXDom;
857 }
858 else if ( rValue.Name == sUNO_View_GridSnapWidthYNumerator )
859 {
860 rValue.Value >>= aSnapGridWidthYNum;
861 }
862 else if ( rValue.Name == sUNO_View_GridSnapWidthYDenominator )
863 {
864 rValue.Value >>= aSnapGridWidthYDom;
865 }
866 else if (!bImpress && rValue.Name == sUNO_View_VisibleLayers )
867 {
868 SdrLayerIDSet aSdrLayerIDSets;
869 aSdrLayerIDSets.PutValue( rValue.Value );
870 SetVisibleLayers( aSdrLayerIDSets );
871 }
872 else if (!bImpress && rValue.Name == sUNO_View_PrintableLayers )
873 {
874 SdrLayerIDSet aSdrLayerIDSets;
875 aSdrLayerIDSets.PutValue( rValue.Value );
876 SetPrintableLayers( aSdrLayerIDSets );
877 }
878 else if (!bImpress && rValue.Name == sUNO_View_LockedLayers )
879 {
880 SdrLayerIDSet aSdrLayerIDSets;
881 aSdrLayerIDSets.PutValue( rValue.Value );
882 SetLockedLayers( aSdrLayerIDSets );
883 }
884 }
885
886 SetViewShEditModeOnLoad(EditMode::Page);
887
888 const Fraction aSnapGridWidthX( aSnapGridWidthXNum, aSnapGridWidthXDom );
889 const Fraction aSnapGridWidthY( aSnapGridWidthYNum, aSnapGridWidthYDom );
890
891 SetSnapGridWidth( aSnapGridWidthX, aSnapGridWidthY );
892 }
893
SetPreviousViewShellType(ViewShell::ShellType eType)894 void FrameView::SetPreviousViewShellType (ViewShell::ShellType eType)
895 {
896 mePreviousViewShellType = eType;
897 }
898
SetViewShellTypeOnLoad(ViewShell::ShellType eType)899 void FrameView::SetViewShellTypeOnLoad (ViewShell::ShellType eType)
900 {
901 meViewShellTypeOnLoad = eType;
902 }
903
SetSelectedPage(sal_uInt16 nPage)904 void FrameView::SetSelectedPage(sal_uInt16 nPage)
905 {
906 mnSelectedPage = nPage;
907 }
908
SetIsNavigatorShowingAllShapes(const bool bIsNavigatorShowingAllShapes)909 void FrameView::SetIsNavigatorShowingAllShapes (const bool bIsNavigatorShowingAllShapes)
910 {
911 mbIsNavigatorShowingAllShapes = bIsNavigatorShowingAllShapes;
912 }
913
914 } // end of namespace sd
915
916 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
917