LibreOffice Module sc (master) 1
fuins1.cxx
Go to the documentation of this file.
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 <config_features.h>
21
22#include <officecfg/Office/Common.hxx>
23#include <editeng/sizeitem.hxx>
24#include <sal/log.hxx>
25#include <sfx2/opengrf.hxx>
26#include <sfx2/viewfrm.hxx>
27#include <svx/svdograf.hxx>
28#include <svx/svdomedia.hxx>
29#include <svx/svdpage.hxx>
30#include <svx/svdpagv.hxx>
31#include <svx/svdview.hxx>
32#include <svx/linkwarn.hxx>
33#include <svx/svxids.hrc>
34#include <vcl/graphicfilter.hxx>
35#include <svl/stritem.hxx>
37#include <vcl/svapp.hxx>
38#include <vcl/weld.hxx>
41#include <fuinsert.hxx>
42#include <tabvwsh.hxx>
43#include <drwlayer.hxx>
44#include <drawview.hxx>
45#include <document.hxx>
46#include <scresid.hxx>
47#include <strings.hrc>
48#include <globstr.hrc>
49#include <comphelper/lok.hxx>
50
51#include <com/sun/star/frame/XDispatchProvider.hpp>
52#include <com/sun/star/media/XPlayer.hpp>
53#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
54#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
55#include <com/sun/star/ui/dialogs/ListboxControlActions.hpp>
56#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
57#include <com/sun/star/uno/Sequence.hxx>
58
59using namespace css;
60using namespace css::uno;
61
62void ScLimitSizeOnDrawPage( Size& rSize, Point& rPos, const Size& rPage )
63{
64 if ( !rPage.Width() || !rPage.Height() )
65 return;
66
67 Size aPageSize = rPage;
68 bool bNegative = aPageSize.Width() < 0;
69 if ( bNegative )
70 {
71 // make everything positive temporarily
72 aPageSize.setWidth( -aPageSize.Width() );
73 rPos.setX( -rPos.X() - rSize.Width() );
74 }
75
76 if ( rSize.Width() > aPageSize.Width() || rSize.Height() > aPageSize.Height() )
77 {
78 double fX = aPageSize.Width() / static_cast<double>(rSize.Width());
79 double fY = aPageSize.Height() / static_cast<double>(rSize.Height());
80
81 if ( fX < fY )
82 {
83 rSize.setWidth( aPageSize.Width() );
84 rSize.setHeight( static_cast<tools::Long>( rSize.Height() * fX ) );
85 }
86 else
87 {
88 rSize.setHeight( aPageSize.Height() );
89 rSize.setWidth( static_cast<tools::Long>( rSize.Width() * fY ) );
90 }
91
92 if (!rSize.Width())
93 rSize.setWidth( 1 );
94 if (!rSize.Height())
95 rSize.setHeight( 1 );
96 }
97
98 if ( rPos.X() + rSize.Width() > aPageSize.Width() )
99 rPos.setX( aPageSize.Width() - rSize.Width() );
100 if ( rPos.Y() + rSize.Height() > aPageSize.Height() )
101 rPos.setY( aPageSize.Height() - rSize.Height() );
102
103 if ( bNegative )
104 rPos.setX( -rPos.X() - rSize.Width() ); // back to real position
105}
106
107static void lcl_InsertGraphic( const Graphic& rGraphic,
108 const OUString& rFileName, bool bAsLink, bool bApi,
109 ScTabViewShell& rViewSh, const vcl::Window* pWindow, SdrView* pView,
110 ScAnchorType aAnchorType = SCA_CELL )
111{
112 Graphic& rGraphic1 = const_cast<Graphic &>(rGraphic);
113 GraphicNativeMetadata aMetadata;
114 if ( aMetadata.read(rGraphic1) )
115 {
116 const Degree10 aRotation = aMetadata.getRotation();
117 if (aRotation)
118 {
119 GraphicNativeTransform aTransform( rGraphic1 );
120 aTransform.rotate( aRotation );
121 }
122 }
123 ScDrawView* pDrawView = rViewSh.GetScDrawView();
124
125 // #i123922# check if an existing object is selected; if yes, evtl. replace
126 // the graphic for a SdrGraphObj (including link state updates) or adapt the fill
127 // style for other objects
128 if(pDrawView && 1 == pDrawView->GetMarkedObjectCount())
129 {
130 SdrObject* pPickObj = pDrawView->GetMarkedObjectByIndex(0);
131
132 if(pPickObj)
133 {
134 //sal_Int8 nAction(DND_ACTION_MOVE);
135 //Point aPos;
136 const OUString aBeginUndo(ScResId(STR_UNDO_DRAGDROP));
137
138 SdrObject* pResult = pDrawView->ApplyGraphicToObject(
139 *pPickObj,
140 rGraphic1,
141 aBeginUndo,
142 bAsLink ? rFileName : OUString());
143
144 if(pResult)
145 {
146 // we are done; mark the modified/new object
147 pDrawView->MarkObj(pResult, pDrawView->GetSdrPageView());
148 return;
149 }
150 }
151 }
152
153 // set the size so the graphic has its original pixel size
154 // at 100% view scale (as in SetMarkedOriginalSize),
155 // instead of respecting the current view scale
156 MapMode aSourceMap = rGraphic.GetPrefMapMode();
157 MapMode aDestMap( MapUnit::Map100thMM );
158 if ( aSourceMap.GetMapUnit() == MapUnit::MapPixel && pDrawView )
159 {
160 Fraction aScaleX, aScaleY;
161 pDrawView->CalcNormScale( aScaleX, aScaleY );
162 aDestMap.SetScaleX(aScaleX);
163 aDestMap.SetScaleY(aScaleY);
164 }
165 Size aLogicSize = pWindow->LogicToLogic(
166 rGraphic.GetPrefSize(), &aSourceMap, &aDestMap );
167
168 // Limit size
169
170 SdrPageView* pPV = pView->GetSdrPageView();
171 SdrPage* pPage = pPV->GetPage();
172 Point aInsertPos = rViewSh.GetInsertPos();
173
174 ScViewData& rData = rViewSh.GetViewData();
175 if ( rData.GetDocument().IsNegativePage( rData.GetTabNo() ) )
176 aInsertPos.AdjustX( -(aLogicSize.Width()) ); // move position to left edge
177
178 ScLimitSizeOnDrawPage( aLogicSize, aInsertPos, pPage->GetSize() );
179
180 tools::Rectangle aRect ( aInsertPos, aLogicSize );
181
183 pView->getSdrModelFromSdrView(), // TTTT pView should be reference
184 rGraphic1,
185 aRect);
186
187 // calling SetGraphicLink here doesn't work
188 // Yes, due to the SdrObject had no SdrModel
189 // Path is no longer used as name for the graphics object
190
191 ScDrawLayer* pLayer = static_cast<ScDrawLayer*>(&pView->GetModel());
192 OUString aName = pLayer->GetNewGraphicName(); // "Graphics"
193 pObj->SetName(aName);
194
195 if (aAnchorType == SCA_CELL || aAnchorType == SCA_CELL_RESIZE)
197 aAnchorType == SCA_CELL_RESIZE);
198
199 // don't select if from (dispatch) API, to allow subsequent cell operations
200 SdrInsertFlags nInsOptions = (bApi && !comphelper::LibreOfficeKit::isActive()) ? SdrInsertFlags::DONTMARK : SdrInsertFlags::NONE;
201 bool bSuccess = pView->InsertObjectAtView( pObj.get(), *pPV, nInsOptions );
202
203 // SetGraphicLink has to be used after inserting the object,
204 // otherwise an empty graphic is swapped in and the contact stuff crashes.
205 // See #i37444#.
206 if (bSuccess && bAsLink)
207 pObj->SetGraphicLink( rFileName );
208}
209
210#if HAVE_FEATURE_AVMEDIA
211
212static void lcl_InsertMedia( const OUString& rMediaURL, bool bApi,
213 ScTabViewShell* pViewSh, const vcl::Window* pWindow, SdrView* pView,
214 const Size& rPrefSize, bool const bLink )
215{
216 SdrPageView* pPV = pView->GetSdrPageView();
217 SdrPage* pPage = pPV->GetPage();
218 ScViewData& rData = pViewSh->GetViewData();
219 Point aInsertPos( pViewSh->GetInsertPos() );
220 Size aSize;
221
222 if( rPrefSize.Width() && rPrefSize.Height() )
223 {
224 if( pWindow )
225 aSize = pWindow->PixelToLogic(rPrefSize, MapMode(MapUnit::Map100thMM));
226 else
227 aSize = Application::GetDefaultDevice()->PixelToLogic(rPrefSize, MapMode(MapUnit::Map100thMM));
228 }
229 else
230 aSize = Size( 5000, 5000 );
231
232 ScLimitSizeOnDrawPage( aSize, aInsertPos, pPage->GetSize() );
233
234 if( rData.GetDocument().IsNegativePage( rData.GetTabNo() ) )
235 aInsertPos.AdjustX( -(aSize.Width()) );
236
237 OUString realURL;
238 if (bLink)
239 {
240 realURL = rMediaURL;
241 }
242 else
243 {
244 uno::Reference<frame::XModel> const xModel(
246 bool const bRet = ::avmedia::EmbedMedia(xModel, rMediaURL, realURL);
247 if (!bRet) { return; }
248 }
249
251 *rData.GetDocument().GetDrawLayer(),
252 tools::Rectangle(aInsertPos, aSize));
253
254 pObj->setURL( realURL, ""/*TODO?*/ );
255 pView->InsertObjectAtView( pObj.get(), *pPV, bApi ? SdrInsertFlags::DONTMARK : SdrInsertFlags::NONE );
256}
257#endif
258
260 vcl::Window* pWin,
261 ScDrawView* pViewP,
262 SdrModel* pDoc,
263 SfxRequest& rReq )
264 : FuPoor(rViewSh, pWin, pViewP, pDoc, rReq)
265{
266 const SfxItemSet* pReqArgs = rReq.GetArgs();
267 const SfxStringItem* pGraphicItem;
268 if ( pReqArgs &&
269 (pGraphicItem = pReqArgs->GetItemIfSet( SID_INSERT_GRAPHIC, true )) )
270 {
271 OUString aFileName = pGraphicItem->GetValue();
272
273 OUString aFilterName;
274 if ( const SfxStringItem* pFilterItem = pReqArgs->GetItemIfSet( FN_PARAM_FILTER ) )
275 aFilterName = pFilterItem->GetValue();
276
277 bool bAsLink = false;
278 const SfxPoolItem* pItem;
279 if ( pReqArgs->GetItemState( FN_PARAM_1, true, &pItem ) == SfxItemState::SET )
280 bAsLink = static_cast<const SfxBoolItem*>(pItem)->GetValue();
281
282 Graphic aGraphic;
283 ErrCode nError = GraphicFilter::LoadGraphic( aFileName, aFilterName, aGraphic, &GraphicFilter::GetGraphicFilter() );
284 if ( nError == ERRCODE_NONE )
285 {
286 lcl_InsertGraphic( aGraphic, aFileName, bAsLink, true, rViewSh, pWindow, pView );
287 }
288 }
289 else
290 {
291 SvxOpenGraphicDialog aDlg(ScResId(STR_INSERTGRAPHIC), pWin ? pWin->GetFrameWeld() : nullptr,
292 ui::dialogs::TemplateDescription::FILEOPEN_LINK_PREVIEW_IMAGE_ANCHOR);
293
294 Reference<ui::dialogs::XFilePickerControlAccess> xCtrlAcc = aDlg.GetFilePickerControlAccess();
295 sal_Int16 nSelect = 0;
296 Sequence<OUString> aListBoxEntries {
297 ScResId(STR_ANCHOR_TO_CELL),
298 ScResId(STR_ANCHOR_TO_CELL_RESIZE),
299 ScResId(STR_ANCHOR_TO_PAGE)
300 };
301 try
302 {
303 Any aTemplates(&aListBoxEntries, cppu::UnoType<decltype(aListBoxEntries)>::get());
304
305 xCtrlAcc->setValue(ui::dialogs::ExtendedFilePickerElementIds::LISTBOX_IMAGE_ANCHOR,
306 ui::dialogs::ListboxControlActions::ADD_ITEMS, aTemplates);
307
308 Any aSelectPos(&nSelect, cppu::UnoType<decltype(nSelect)>::get());
309 xCtrlAcc->setValue(ui::dialogs::ExtendedFilePickerElementIds::LISTBOX_IMAGE_ANCHOR,
310 ui::dialogs::ListboxControlActions::SET_SELECT_ITEM, aSelectPos);
311 }
312 catch (const Exception&)
313 {
314 SAL_WARN("sc", "control access failed");
315 }
316
317 if( aDlg.Execute() == ERRCODE_NONE )
318 {
319 Graphic aGraphic;
320 ErrCode nError = aDlg.GetGraphic(aGraphic);
321 if( nError == ERRCODE_NONE )
322 {
323 OUString aFileName = aDlg.GetPath();
324 const OUString& aFilterName = aDlg.GetDetectedFilter();
325 bool bAsLink = aDlg.IsAsLink();
326
327 // really store as link only?
328 if( bAsLink && officecfg::Office::Common::Misc::ShowLinkWarningDialog::get() )
329 {
330 SvxLinkWarningDialog aWarnDlg(pWin ? pWin->GetFrameWeld() : nullptr, aFileName);
331 if (aWarnDlg.run() != RET_OK)
332 bAsLink = false; // don't store as link
333 }
334
335 // Anchor to cell or to page?
336 Any aAnchorValue = xCtrlAcc->getValue(
337 ui::dialogs::ExtendedFilePickerElementIds::LISTBOX_IMAGE_ANCHOR,
338 ui::dialogs::ListboxControlActions::GET_SELECTED_ITEM );
339 OUString sAnchor;
340 aAnchorValue >>= sAnchor;
341
342 ScAnchorType aAnchorType;
343 if (sAnchor == ScResId(STR_ANCHOR_TO_CELL))
344 aAnchorType = SCA_CELL;
345 else if (sAnchor == ScResId(STR_ANCHOR_TO_CELL_RESIZE))
346 aAnchorType = SCA_CELL_RESIZE;
347 else if (sAnchor == ScResId(STR_ANCHOR_TO_PAGE))
348 aAnchorType = SCA_PAGE;
349 else
350 aAnchorType = SCA_DONTKNOW;
351
352 lcl_InsertGraphic( aGraphic, aFileName, bAsLink, false, rViewSh, pWindow, pView, aAnchorType );
353
354 // append items for recording
355 rReq.AppendItem( SfxStringItem( SID_INSERT_GRAPHIC, aFileName ) );
356 rReq.AppendItem( SfxStringItem( FN_PARAM_FILTER, aFilterName ) );
357 rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bAsLink ) );
358 rReq.Done();
359 }
360 else
361 {
362 // error is handled in SvxOpenGraphicDialog::GetGraphic
363 }
364 }
365 }
366}
367
369{
370}
371
373 vcl::Window* pWin,
374 ScDrawView* pViewP,
375 SdrModel* pDoc,
376 const SfxRequest& rReq ) :
377 FuPoor(rViewSh, pWin, pViewP, pDoc, rReq)
378{
379#if HAVE_FEATURE_AVMEDIA
380 OUString aURL;
381 const SfxItemSet* pReqArgs = rReq.GetArgs();
382 bool bAPI = false;
383
384 const SvxSizeItem* pSizeItem = rReq.GetArg<SvxSizeItem>(FN_PARAM_1);
385 const SfxBoolItem* pLinkItem = rReq.GetArg<SfxBoolItem>(FN_PARAM_2);
386 const bool bSizeUnknown = !pSizeItem;
387 Size aPrefSize;
388
389 if( pReqArgs )
390 {
391 const SfxStringItem* pStringItem = dynamic_cast<const SfxStringItem*>( &pReqArgs->Get( rReq.GetSlot() ) );
392
393 if( pStringItem )
394 {
395 aURL = pStringItem->GetValue();
396 bAPI = aURL.getLength();
397 }
398 }
399
400 bool bLink(pLinkItem ? pLinkItem->GetValue() : true);
401 bool bInsertMedia = bAPI;
402 if (!bInsertMedia)
403 bInsertMedia = ::avmedia::MediaWindow::executeMediaURLDialog(pWin ? pWin->GetFrameWeld() : nullptr, aURL, &bLink);
404 if (!bInsertMedia)
405 return;
406
407 if (!bSizeUnknown)
408 {
409 aPrefSize = pSizeItem->GetSize();
410 }
411 else
412 {
413 if( pWin )
414 pWin->EnterWait();
415
416 css::uno::Reference<css::frame::XDispatchProvider> xDispatchProvider(rViewShell.GetViewFrame().GetFrame().GetFrameInterface(), css::uno::UNO_QUERY);
417
419 [xDispatchProvider, aURL, bLink](const css::uno::Reference<css::media::XPlayer>& rPlayer){
420 css::awt::Size aSize = rPlayer->getPreferredPlayerWindowSize();
421 avmedia::MediaWindow::dispatchInsertAVMedia(xDispatchProvider, aSize, aURL, bLink);
422 }));
423
424 const bool bIsMediaURL = ::avmedia::MediaWindow::isMediaURL(aURL, ""/*TODO?*/, true, xPlayerListener);
425
426 if( pWin )
427 pWin->LeaveWait();
428
429 if (!bIsMediaURL && !bAPI)
431
432 return;
433 }
434
435 if (pWin)
436 pWin->EnterWait();
437
438 lcl_InsertMedia(aURL, bAPI, &rViewSh, pWindow, pView, aPrefSize, bLink);
439
440 if (pWin)
441 pWin->LeaveWait();
442#endif
443}
444
446{
447}
448
449/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static OutputDevice * GetDefaultDevice()
const OUString & GetValue() const
virtual ~FuInsertGraphic() override
Definition: fuins1.cxx:368
FuInsertGraphic(ScTabViewShell &rViewSh, vcl::Window *pWin, ScDrawView *pView, SdrModel *pDoc, SfxRequest &rReq)
Definition: fuins1.cxx:259
FuInsertMedia(ScTabViewShell &rViewSh, vcl::Window *pWin, ScDrawView *pView, SdrModel *pDoc, const SfxRequest &rReq)
Definition: fuins1.cxx:372
virtual ~FuInsertMedia() override
Definition: fuins1.cxx:445
Base class for all functions.
Definition: fupoor.hxx:40
ScDrawView * pView
Definition: fupoor.hxx:42
ScTabViewShell & rViewShell
Definition: fupoor.hxx:43
VclPtr< vcl::Window > pWindow
Definition: fupoor.hxx:44
static GraphicFilter & GetGraphicFilter()
static ErrCode LoadGraphic(const OUString &rPath, const OUString &rFilter, Graphic &rGraphic, GraphicFilter *pFilter=nullptr, sal_uInt16 *pDeterminedFormat=nullptr)
Degree10 getRotation() const
bool read(Graphic const &rGraphic)
void rotate(Degree10 aRotation)
Size GetPrefSize() const
MapMode GetPrefMapMode() const
void SetScaleY(const Fraction &rScaleY)
MapUnit GetMapUnit() const
void SetScaleX(const Fraction &rScaleX)
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
constexpr tools::Long Y() const
void setX(tools::Long nX)
void setY(tools::Long nY)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
SC_DLLPUBLIC bool IsNegativePage(SCTAB nTab) const
Definition: document.cxx:982
SC_DLLPUBLIC ScDrawLayer * GetDrawLayer()
Definition: document.hxx:1084
SfxObjectShell * GetDocumentShell() const
Definition: document.hxx:1083
static void SetCellAnchoredFromPosition(SdrObject &rObj, const ScDocument &rDoc, SCTAB nTab, bool bResizeWithCell)
Definition: drwlayer.cxx:2575
OUString GetNewGraphicName(tools::Long *pnCounter=nullptr) const
Definition: drwlayer.cxx:2478
SdrObject * ApplyGraphicToObject(SdrObject &rHitObject, const Graphic &rGraphic, const OUString &rBeginUndoText, const OUString &rFile)
Definition: drawview.cxx:1117
void CalcNormScale(Fraction &rFractX, Fraction &rFractY) const
Definition: drawvie4.cxx:411
Point GetInsertPos() const
Definition: tabview.cxx:1737
ScViewData & GetViewData()
Definition: tabview.hxx:344
ScDrawView * GetScDrawView()
Definition: tabview.hxx:352
SCTAB GetTabNo() const
Definition: viewdata.hxx:395
ScDocument & GetDocument() const
Definition: viewdata.hxx:380
bool InsertObjectAtView(SdrObject *pObj, SdrPageView &rPV, SdrInsertFlags nOptions=SdrInsertFlags::NONE)
SdrObject * GetMarkedObjectByIndex(size_t nNum) const
size_t GetMarkedObjectCount() const
bool MarkObj(const Point &rPnt, short nTol=-2, bool bToggle=false, bool bDeep=false)
SdrPage * GetPage() const
Size GetSize() const
SdrModel & getSdrModelFromSdrView() const
SdrPageView * GetSdrPageView() const
SdrModel & GetModel() const
const css::uno::Reference< css::frame::XFrame > & GetFrameInterface() const
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
css::uno::Reference< css::frame::XModel3 > GetModel() const
sal_uInt16 GetSlot() const
const SfxItemSet * GetArgs() const
const T * GetArg(sal_uInt16 nSlotId) const
void AppendItem(const SfxPoolItem &)
void Done(bool bRemove=false)
SfxFrame & GetFrame() const
SfxViewFrame & GetViewFrame() const
constexpr tools::Long Height() const
void setWidth(tools::Long nWidth)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
css::uno::Reference< css::ui::dialogs::XFilePickerControlAccess > const & GetFilePickerControlAccess() const
OUString GetPath() const
ErrCode GetGraphic(Graphic &) const
OUString const & GetDetectedFilter() const
bool IsAsLink() const
const Size & GetSize() const
static void dispatchInsertAVMedia(const css::uno::Reference< css::frame::XDispatchProvider > &, const css::awt::Size &rSize, const OUString &rURL, bool bLink)
static bool executeMediaURLDialog(weld::Window *pParent, OUString &rURL, bool *const o_pbLink)
static bool isMediaURL(std::u16string_view rURL, const OUString &rReferer, bool bDeep=false, rtl::Reference< PlayerListener > xPreferredPixelSizeListener=nullptr)
static void executeFormatErrorBox(weld::Window *pParent)
Size LogicToLogic(const Size &rSzSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
void LeaveWait()
Point PixelToLogic(const Point &rDevicePt) const
void EnterWait()
weld::Window * GetFrameWeld() const
URL aURL
#define ERRCODE_NONE
static void lcl_InsertGraphic(const Graphic &rGraphic, const OUString &rFileName, bool bAsLink, bool bApi, ScTabViewShell &rViewSh, const vcl::Window *pWindow, SdrView *pView, ScAnchorType aAnchorType=SCA_CELL)
Definition: fuins1.cxx:107
void ScLimitSizeOnDrawPage(Size &rSize, Point &rPos, const Size &rPage)
Definition: fuins1.cxx:62
ScAnchorType
Definition: global.hxx:374
@ SCA_DONTKNOW
Definition: global.hxx:378
@ SCA_CELL_RESIZE
Definition: global.hxx:376
@ SCA_CELL
Definition: global.hxx:375
@ SCA_PAGE
Definition: global.hxx:377
OUString aName
#define SAL_WARN(area, stream)
@ Exception
long Long
const char GetValue[]
OUString ScResId(TranslateId aId)
Definition: scdll.cxx:90
Reference< XModel > xModel
SdrInsertFlags
RET_OK