Line data Source code
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 <hintids.hxx>
23 : #include <svl/whiter.hxx>
24 : #include <svtools/imapobj.hxx>
25 : #include <svtools/miscopt.hxx>
26 : #include <svl/srchitem.hxx>
27 : #include <svtools/imap.hxx>
28 : #include <sfx2/viewfrm.hxx>
29 : #include <basic/sbstar.hxx>
30 : #include <svl/rectitem.hxx>
31 : #include <svl/ptitem.hxx>
32 : #include <svl/stritem.hxx>
33 : #include <svl/intitem.hxx>
34 : #include <svl/eitem.hxx>
35 : #include <editeng/colritem.hxx>
36 : #include <editeng/lineitem.hxx>
37 : #include <editeng/boxitem.hxx>
38 : #include <editeng/protitem.hxx>
39 : #include <sfx2/dispatch.hxx>
40 : #include <sfx2/request.hxx>
41 : #include <sfx2/objface.hxx>
42 : #include <sfx2/sidebar/EnumContext.hxx>
43 : #include <svx/hlnkitem.hxx>
44 : #include <svx/svdview.hxx>
45 : #include <vcl/msgbox.hxx>
46 : #include <tools/diagnose_ex.h>
47 :
48 : #include <doc.hxx>
49 : #include <drawdoc.hxx>
50 : #include <IDocumentSettingAccess.hxx>
51 : #include <IDocumentDrawModelAccess.hxx>
52 : #include <fmturl.hxx>
53 : #include <fmtclds.hxx>
54 : #include <fmtcnct.hxx>
55 : #include <swmodule.hxx>
56 : #include <wrtsh.hxx>
57 : #include <wview.hxx>
58 : #include <frmatr.hxx>
59 : #include <uitool.hxx>
60 : #include <frmfmt.hxx>
61 : #include <frmsh.hxx>
62 : #include <frmmgr.hxx>
63 : #include <frmdlg.hxx>
64 : #include <swevent.hxx>
65 : #include <usrpref.hxx>
66 : #include <edtwin.hxx>
67 : #include <swdtflvr.hxx>
68 : #include <swwait.hxx>
69 : #include <docstat.hxx>
70 : #include <IDocumentStatistics.hxx>
71 : #include <comphelper/processfactory.hxx>
72 : #include <com/sun/star/ui/dialogs/XSLTFilterDialog.hpp>
73 :
74 : #include <helpid.h>
75 : #include <cmdid.h>
76 : #include <cfgitems.hxx>
77 : #include <globals.hrc>
78 : #include <popup.hrc>
79 : #include <shells.hrc>
80 : #include "swabstdlg.hxx"
81 : #include "misc.hrc"
82 :
83 : #include <svx/dialogs.hrc>
84 : #include <wordcountdialog.hxx>
85 :
86 : #include <docsh.hxx>
87 : #include <svx/drawitem.hxx>
88 : #include <boost/scoped_ptr.hpp>
89 :
90 : using ::editeng::SvxBorderLine;
91 : using namespace ::com::sun::star;
92 : using namespace ::com::sun::star::uno;
93 :
94 : // Prototypes
95 : static void lcl_FrmGetMaxLineWidth(const SvxBorderLine* pBorderLine, SvxBorderLine& rBorderLine);
96 0 : static const SwFrmFmt* lcl_GetFrmFmtByName(SwWrtShell& rSh, const OUString& rName)
97 : {
98 0 : sal_uInt16 nCount = rSh.GetFlyCount(FLYCNTTYPE_FRM);
99 0 : for( sal_uInt16 i = 0; i < nCount; i++)
100 : {
101 0 : const SwFrmFmt* pFmt = rSh.GetFlyNum(i, FLYCNTTYPE_FRM);
102 0 : if(pFmt->GetName() == rName)
103 0 : return pFmt;
104 : }
105 0 : return 0;
106 : }
107 :
108 : #define SwFrameShell
109 : #include <sfx2/msg.hxx>
110 : #include "swslots.hxx"
111 :
112 540 : SFX_IMPL_INTERFACE(SwFrameShell, SwBaseShell, SW_RES(STR_SHELLNAME_FRAME))
113 :
114 90 : void SwFrameShell::InitInterface_Impl()
115 : {
116 90 : GetStaticInterface()->RegisterPopupMenu(SW_RES(MN_FRM_POPUPMENU));
117 :
118 90 : GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, SW_RES(RID_FRAME_TOOLBOX));
119 90 : }
120 :
121 0 : void SwFrameShell::Execute(SfxRequest &rReq)
122 : {
123 : //First those who do not need FrmMgr.
124 0 : SwWrtShell &rSh = GetShell();
125 0 : bool bMore = false;
126 0 : const SfxItemSet* pArgs = rReq.GetArgs();
127 : const SfxPoolItem* pItem;
128 0 : sal_uInt16 nSlot = rReq.GetSlot();
129 :
130 0 : switch ( nSlot )
131 : {
132 : case FN_FRAME_TO_ANCHOR:
133 0 : if ( rSh.IsFrmSelected() )
134 : {
135 0 : rSh.GotoFlyAnchor();
136 0 : rSh.EnterStdMode();
137 0 : rSh.CallChgLnk();
138 : }
139 0 : break;
140 : case SID_FRAME_TO_TOP:
141 0 : rSh.SelectionToTop();
142 0 : break;
143 :
144 : case SID_FRAME_TO_BOTTOM:
145 0 : rSh.SelectionToBottom();
146 0 : break;
147 :
148 : case FN_FRAME_UP:
149 0 : rSh.SelectionToTop( false );
150 0 : break;
151 :
152 : case FN_FRAME_DOWN:
153 0 : rSh.SelectionToBottom( false );
154 0 : break;
155 : case FN_INSERT_FRAME:
156 0 : if (!pArgs)
157 : {
158 : // Frame already exists, open frame dialog for editing.
159 0 : SfxStringItem aDefPage(FN_FORMAT_FRAME_DLG, "columns");
160 0 : rSh.GetView().GetViewFrame()->GetDispatcher()->Execute( FN_FORMAT_FRAME_DLG,
161 : SfxCallMode::SYNCHRON|SfxCallMode::RECORD,
162 0 : &aDefPage, 0L );
163 :
164 : }
165 : else
166 : {
167 : // Frame already exists, only the number of columns will be changed.
168 0 : sal_uInt16 nCols = 1;
169 0 : if(pArgs->GetItemState(SID_ATTR_COLUMNS, false, &pItem) == SfxItemState::SET)
170 0 : nCols = ((SfxUInt16Item *)pItem)->GetValue();
171 :
172 0 : SfxItemSet aSet(GetPool(),RES_COL,RES_COL);
173 0 : rSh.GetFlyFrmAttr( aSet );
174 0 : SwFmtCol aCol((const SwFmtCol&)aSet.Get(RES_COL));
175 : // GutterWidth will not always passed, hence get firstly
176 : // (see view2: Execute on this slot)
177 0 : sal_uInt16 nGutterWidth = aCol.GetGutterWidth();
178 0 : if(!nCols )
179 0 : nCols++;
180 0 : aCol.Init(nCols, nGutterWidth, aCol.GetWishWidth());
181 0 : aSet.Put(aCol);
182 : // Template AutoUpdate
183 0 : SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
184 0 : if(pFmt && pFmt->IsAutoUpdateFmt())
185 : {
186 0 : rSh.AutoUpdateFrame(pFmt, aSet);
187 : }
188 : else
189 : {
190 0 : rSh.StartAllAction();
191 0 : rSh.SetFlyFrmAttr( aSet );
192 0 : rSh.SetModified();
193 0 : rSh.EndAllAction();
194 0 : }
195 :
196 : }
197 0 : return;
198 :
199 : case SID_HYPERLINK_SETLINK:
200 : {
201 0 : if(pArgs && SfxItemState::SET == pArgs->GetItemState(SID_HYPERLINK_SETLINK, false, &pItem))
202 : {
203 0 : const SvxHyperlinkItem& rHLinkItem = *(const SvxHyperlinkItem *)pItem;
204 0 : const OUString& rURL = rHLinkItem.GetURL();
205 0 : const OUString& rTarget = rHLinkItem.GetTargetFrame();
206 :
207 0 : SfxItemSet aSet( rSh.GetAttrPool(), RES_URL, RES_URL );
208 0 : rSh.GetFlyFrmAttr( aSet );
209 0 : SwFmtURL aURL( (SwFmtURL&)aSet.Get( RES_URL ) );
210 :
211 0 : OUString sOldName(rHLinkItem.GetName().toAsciiUpperCase());
212 0 : OUString sFlyName(rSh.GetFlyName().toAsciiUpperCase());
213 0 : if (sOldName != sFlyName)
214 : {
215 0 : OUString sName(sOldName);
216 0 : sal_uInt16 i = 1;
217 0 : while (rSh.FindFlyByName(sName))
218 : {
219 0 : sName = sOldName;
220 0 : sName += "_";
221 0 : sName += OUString::number(i++);
222 : }
223 0 : rSh.SetFlyName(sName);
224 : }
225 0 : aURL.SetURL( rURL, false );
226 0 : aURL.SetTargetFrameName(rTarget);
227 :
228 0 : aSet.Put( aURL );
229 0 : rSh.SetFlyFrmAttr( aSet );
230 : }
231 : }
232 0 : break;
233 :
234 : case FN_FRAME_CHAIN:
235 0 : rSh.GetView().GetEditWin().SetChainMode( !rSh.GetView().GetEditWin().IsChainMode() );
236 0 : break;
237 :
238 : case FN_FRAME_UNCHAIN:
239 0 : rSh.Unchain( (SwFrmFmt&)*rSh.GetFlyFrmFmt() );
240 0 : GetView().GetViewFrame()->GetBindings().Invalidate(FN_FRAME_CHAIN);
241 0 : break;
242 : case FN_FORMAT_FOOTNOTE_DLG:
243 : {
244 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
245 : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
246 :
247 0 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateSwFootNoteOptionDlg(GetView().GetWindow(), GetView().GetWrtShell()));
248 : OSL_ENSURE(pDlg, "Dialog creation failed!");
249 0 : pDlg->Execute();
250 0 : break;
251 : }
252 : case FN_NUMBERING_OUTLINE_DLG:
253 : {
254 0 : SfxItemSet aTmp(GetPool(), FN_PARAM_1, FN_PARAM_1);
255 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
256 : OSL_ENSURE(pFact, "Dialog creation failed!");
257 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSwTabDialog( DLG_TAB_OUTLINE,
258 0 : GetView().GetWindow(), &aTmp, GetView().GetWrtShell()));
259 : OSL_ENSURE(pDlg, "Dialog creation failed!");
260 0 : pDlg->Execute();
261 0 : pDlg.reset();
262 0 : rReq.Done();
263 0 : break;
264 : }
265 : case SID_OPEN_XML_FILTERSETTINGS:
266 : {
267 : try
268 : {
269 0 : uno::Reference < ui::dialogs::XExecutableDialog > xDialog = ui::dialogs::XSLTFilterDialog::create(::comphelper::getProcessComponentContext());
270 0 : xDialog->execute();
271 : }
272 0 : catch (const uno::Exception&)
273 : {
274 : }
275 0 : rReq.Ignore ();
276 : }
277 0 : break;
278 : case FN_WORDCOUNT_DIALOG:
279 : {
280 0 : SfxViewFrame* pVFrame = GetView().GetViewFrame();
281 0 : if (pVFrame != NULL)
282 : {
283 0 : pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG);
284 0 : Invalidate(rReq.GetSlot());
285 :
286 0 : SwWordCountWrapper *pWrdCnt = (SwWordCountWrapper*)pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId());
287 0 : if (pWrdCnt)
288 0 : pWrdCnt->UpdateCounts();
289 : }
290 : }
291 0 : break;
292 0 : default: bMore = true;
293 : }
294 :
295 0 : if ( !bMore )
296 : {
297 0 : return;
298 : }
299 :
300 0 : SwFlyFrmAttrMgr aMgr( false, &rSh, FRMMGR_TYPE_NONE );
301 0 : bool bUpdateMgr = true;
302 0 : bool bCopyToFmt = false;
303 0 : switch ( nSlot )
304 : {
305 : case SID_OBJECT_ALIGN_MIDDLE:
306 : case FN_FRAME_ALIGN_VERT_CENTER:
307 0 : aMgr.SetVertOrientation( text::VertOrientation::CENTER );
308 0 : break;
309 : case SID_OBJECT_ALIGN_DOWN :
310 : case FN_FRAME_ALIGN_VERT_BOTTOM:
311 0 : aMgr.SetVertOrientation( text::VertOrientation::BOTTOM );
312 0 : break;
313 : case SID_OBJECT_ALIGN_UP :
314 : case FN_FRAME_ALIGN_VERT_TOP:
315 0 : aMgr.SetVertOrientation( text::VertOrientation::TOP );
316 0 : break;
317 :
318 : case FN_FRAME_ALIGN_VERT_CHAR_CENTER:
319 0 : aMgr.SetVertOrientation( text::VertOrientation::CHAR_CENTER );
320 0 : break;
321 :
322 : case FN_FRAME_ALIGN_VERT_CHAR_BOTTOM:
323 0 : aMgr.SetVertOrientation( text::VertOrientation::CHAR_BOTTOM );
324 0 : break;
325 :
326 : case FN_FRAME_ALIGN_VERT_CHAR_TOP:
327 0 : aMgr.SetVertOrientation( text::VertOrientation::CHAR_TOP );
328 0 : break;
329 :
330 : case FN_FRAME_ALIGN_VERT_ROW_CENTER:
331 0 : aMgr.SetVertOrientation( text::VertOrientation::LINE_CENTER );
332 0 : break;
333 :
334 : case FN_FRAME_ALIGN_VERT_ROW_BOTTOM:
335 0 : aMgr.SetVertOrientation( text::VertOrientation::LINE_BOTTOM );
336 0 : break;
337 :
338 : case FN_FRAME_ALIGN_VERT_ROW_TOP:
339 0 : aMgr.SetVertOrientation( text::VertOrientation::LINE_TOP );
340 0 : break;
341 : case SID_OBJECT_ALIGN_CENTER :
342 : case FN_FRAME_ALIGN_HORZ_CENTER:
343 0 : aMgr.SetHorzOrientation( text::HoriOrientation::CENTER );
344 0 : break;
345 : case SID_OBJECT_ALIGN_RIGHT:
346 : case FN_FRAME_ALIGN_HORZ_RIGHT:
347 0 : aMgr.SetHorzOrientation( text::HoriOrientation::RIGHT );
348 0 : break;
349 : case SID_OBJECT_ALIGN_LEFT:
350 : case FN_FRAME_ALIGN_HORZ_LEFT:
351 0 : aMgr.SetHorzOrientation( text::HoriOrientation::LEFT );
352 0 : break;
353 :
354 : case FN_SET_FRM_POSITION:
355 : {
356 : aMgr.SetAbsPos(((SfxPointItem &)pArgs->Get
357 0 : (FN_SET_FRM_POSITION)).GetValue());
358 : }
359 0 : break;
360 : case SID_ATTR_BRUSH:
361 : {
362 0 : if(pArgs)
363 : {
364 0 : aMgr.SetAttrSet( *pArgs );
365 0 : bCopyToFmt = true;
366 : }
367 : }
368 0 : break;
369 : case SID_ATTR_ULSPACE:
370 : case SID_ATTR_LRSPACE:
371 : {
372 0 : if(pArgs && SfxItemState::SET == pArgs->GetItemState(GetPool().GetWhich(nSlot), false, &pItem))
373 : {
374 0 : aMgr.SetAttrSet( *pArgs );
375 0 : bCopyToFmt = true;
376 : }
377 : }
378 0 : break;
379 :
380 : case SID_ATTR_TRANSFORM:
381 : {
382 0 : bool bApplyNewSize = false;
383 :
384 0 : Size aNewSize = aMgr.GetSize();
385 0 : if ( SfxItemState::SET == pArgs->GetItemState( SID_ATTR_TRANSFORM_WIDTH, false, &pItem ) )
386 : {
387 0 : aNewSize.setWidth( static_cast< const SfxUInt32Item* >(pItem)->GetValue() );
388 0 : bApplyNewSize = true;
389 : }
390 :
391 0 : if ( SfxItemState::SET == pArgs->GetItemState( SID_ATTR_TRANSFORM_HEIGHT, false, &pItem ) )
392 : {
393 0 : aNewSize.setHeight( static_cast< const SfxUInt32Item* >(pItem)->GetValue() );
394 0 : bApplyNewSize = true;
395 : }
396 :
397 0 : if ( bApplyNewSize )
398 : {
399 0 : aMgr.SetSize( aNewSize );
400 : }
401 : else
402 : {
403 0 : bUpdateMgr = false;
404 : }
405 :
406 : }
407 0 : break;
408 :
409 : case FN_FORMAT_FRAME_DLG:
410 : case FN_DRAW_WRAP_DLG:
411 : {
412 0 : const int nSel = rSh.GetSelectionType();
413 0 : if (nSel & nsSelectionType::SEL_GRF)
414 : {
415 0 : rSh.GetView().GetViewFrame()->GetDispatcher()->Execute(FN_FORMAT_GRAFIC_DLG);
416 0 : bUpdateMgr = false;
417 : }
418 : else
419 : {
420 0 : SfxItemSet aSet(GetPool(), //UUUU sorted by indices
421 : RES_FRMATR_BEGIN, RES_FRMATR_END-1, // [82
422 :
423 : //UUUU FillAttribute support
424 : XATTR_FILL_FIRST, XATTR_FILL_LAST, // [1014
425 :
426 : SID_DOCFRAME, SID_DOCFRAME, // [5598
427 :
428 : SID_ATTR_BRUSH, SID_ATTR_BRUSH, // [10001
429 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, // [10023
430 : SID_ATTR_LRSPACE, SID_ATTR_ULSPACE, // [10048
431 : SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE, // [10051
432 :
433 : //UUUU items to hand over XPropertyList things like
434 : // XColorList, XHatchList, XGradientList and XBitmapList
435 : // to the Area TabPage
436 : SID_COLOR_TABLE, SID_BITMAP_LIST, // [10179
437 :
438 : SID_HTML_MODE, SID_HTML_MODE, // [10414
439 : FN_GET_PRINT_AREA, FN_GET_PRINT_AREA, // [21032
440 : FN_SURROUND, FN_HORI_ORIENT, // [21303
441 : FN_SET_FRM_NAME, FN_KEEP_ASPECT_RATIO, // [21306
442 : FN_SET_FRM_ALT_NAME, FN_SET_FRM_ALT_NAME, // [21318
443 : FN_OLE_IS_MATH, FN_MATH_BASELINE_ALIGNMENT, // [22314
444 : FN_PARAM_CHAIN_PREVIOUS, FN_PARAM_CHAIN_NEXT, // [22420
445 :
446 0 : 0);
447 :
448 : //UUUU create needed items for XPropertyList entries from the DrawModel so that
449 : // the Area TabPage can access them
450 0 : const SwDrawModel* pDrawModel = rSh.GetView().GetDocShell()->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel();
451 :
452 0 : aSet.Put(SvxColorListItem(pDrawModel->GetColorList(), SID_COLOR_TABLE));
453 0 : aSet.Put(SvxGradientListItem(pDrawModel->GetGradientList(), SID_GRADIENT_LIST));
454 0 : aSet.Put(SvxHatchListItem(pDrawModel->GetHatchList(), SID_HATCH_LIST));
455 0 : aSet.Put(SvxBitmapListItem(pDrawModel->GetBitmapList(), SID_BITMAP_LIST));
456 :
457 0 : const SwViewOption* pVOpt = rSh.GetViewOptions();
458 0 : if(nSel & nsSelectionType::SEL_OLE)
459 0 : aSet.Put( SfxBoolItem(FN_KEEP_ASPECT_RATIO, pVOpt->IsKeepRatio()) );
460 0 : aSet.Put(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(GetView().GetDocShell())));
461 0 : aSet.Put(SfxStringItem(FN_SET_FRM_NAME, rSh.GetFlyName()));
462 0 : if( nSel & nsSelectionType::SEL_OLE )
463 : {
464 : // #i73249#
465 0 : aSet.Put( SfxStringItem( FN_SET_FRM_ALT_NAME, rSh.GetObjTitle() ) );
466 : }
467 :
468 0 : const SwRect &rPg = rSh.GetAnyCurRect(RECT_PAGE);
469 0 : SwFmtFrmSize aFrmSize(ATT_VAR_SIZE, rPg.Width(), rPg.Height());
470 0 : aFrmSize.SetWhich(GetPool().GetWhich(SID_ATTR_PAGE_SIZE));
471 0 : aSet.Put(aFrmSize);
472 :
473 0 : const SwRect &rPr = rSh.GetAnyCurRect(RECT_PAGE_PRT);
474 0 : SwFmtFrmSize aPrtSize(ATT_VAR_SIZE, rPr.Width(), rPr.Height());
475 0 : aPrtSize.SetWhich(GetPool().GetWhich(FN_GET_PRINT_AREA));
476 0 : aSet.Put(aPrtSize);
477 :
478 0 : aSet.Put(aMgr.GetAttrSet());
479 0 : aSet.SetParent( aMgr.GetAttrSet().GetParent() );
480 :
481 : // On % values initialize size
482 0 : SwFmtFrmSize& rSize = (SwFmtFrmSize&)aSet.Get(RES_FRM_SIZE);
483 0 : if (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff)
484 0 : rSize.SetWidth(rSh.GetAnyCurRect(RECT_FLY_EMBEDDED).Width());
485 0 : if (rSize.GetHeightPercent() && rSize.GetHeightPercent() != 0xff)
486 0 : rSize.SetHeight(rSh.GetAnyCurRect(RECT_FLY_EMBEDDED).Height());
487 :
488 : // disable vertical positioning for Math Objects anchored 'as char' if baseline alignment is activated
489 : aSet.Put( SfxBoolItem( FN_MATH_BASELINE_ALIGNMENT,
490 0 : rSh.GetDoc()->getIDocumentSettingAccess().get( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT ) ) );
491 0 : const uno::Reference < embed::XEmbeddedObject > xObj( rSh.GetOleRef() );
492 0 : aSet.Put( SfxBoolItem( FN_OLE_IS_MATH, xObj.is() && SotExchange::IsMath( xObj->getClassID() ) ) );
493 :
494 0 : OString sDefPage;
495 0 : if(pArgs && pArgs->GetItemState(FN_FORMAT_FRAME_DLG, false, &pItem) == SfxItemState::SET)
496 0 : sDefPage = OUStringToOString(((SfxStringItem *)pItem)->GetValue(), RTL_TEXTENCODING_UTF8);
497 :
498 0 : aSet.Put(SfxFrameItem( SID_DOCFRAME, &GetView().GetViewFrame()->GetTopFrame()));
499 0 : FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, &GetView()));
500 0 : SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric) ));
501 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
502 : OSL_ENSURE(pFact, "Dialog creation failed!");
503 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateFrmTabDialog(
504 0 : nSel & nsSelectionType::SEL_GRF ? "PictureDialog" :
505 0 : nSel & nsSelectionType::SEL_OLE ? "ObjectDialog":
506 : "FrameDialog",
507 0 : GetView().GetViewFrame(),
508 0 : GetView().GetWindow(),
509 : aSet, false,
510 : false,
511 0 : sDefPage));
512 : OSL_ENSURE(pDlg, "Dialog creation failed!");
513 :
514 0 : if ( nSlot == FN_DRAW_WRAP_DLG )
515 : {
516 0 : pDlg->SetCurPageId("wrap");
517 : }
518 :
519 0 : if ( pDlg->Execute() )
520 : {
521 0 : const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
522 0 : if(pOutSet)
523 : {
524 0 : rReq.Done(*pOutSet);
525 0 : if(nSel & nsSelectionType::SEL_OLE &&
526 0 : SfxItemState::SET == pOutSet->GetItemState(FN_KEEP_ASPECT_RATIO, true, &pItem))
527 : {
528 0 : SwViewOption aUsrPref( *pVOpt );
529 0 : aUsrPref.SetKeepRatio(((const SfxBoolItem*)pItem)->GetValue());
530 0 : SW_MOD()->ApplyUsrPref(aUsrPref, &GetView());
531 : }
532 0 : if (SfxItemState::SET == pOutSet->GetItemState(FN_SET_FRM_ALT_NAME, true, &pItem))
533 : {
534 : // #i73249#
535 0 : rSh.SetObjTitle(((const SfxStringItem*)pItem)->GetValue());
536 : }
537 : // Template AutoUpdate
538 0 : SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
539 0 : if(pFmt && pFmt->IsAutoUpdateFmt())
540 : {
541 0 : rSh.AutoUpdateFrame(pFmt, *pOutSet);
542 : // Anything which is not supported by the format must be set hard.
543 0 : if(SfxItemState::SET == pOutSet->GetItemState(FN_SET_FRM_NAME, false, &pItem))
544 0 : rSh.SetFlyName(((SfxStringItem*)pItem)->GetValue());
545 0 : SfxItemSet aShellSet(GetPool(), RES_FRM_SIZE, RES_FRM_SIZE,
546 : RES_SURROUND, RES_SURROUND,
547 : RES_ANCHOR, RES_ANCHOR,
548 : RES_VERT_ORIENT,RES_HORI_ORIENT,
549 0 : 0);
550 0 : aShellSet.Put(*pOutSet);
551 0 : aMgr.SetAttrSet(aShellSet);
552 0 : if(SfxItemState::SET == pOutSet->GetItemState(FN_SET_FRM_NAME, false, &pItem))
553 0 : rSh.SetFlyName(((SfxStringItem*)pItem)->GetValue());
554 : }
555 : else
556 0 : aMgr.SetAttrSet( *pOutSet );
557 :
558 0 : const SwFrmFmt* pCurrFlyFmt = rSh.GetFlyFrmFmt();
559 0 : if(SfxItemState::SET ==
560 : pOutSet->GetItemState(FN_PARAM_CHAIN_PREVIOUS,
561 0 : false, &pItem))
562 : {
563 0 : rSh.HideChainMarker();
564 :
565 : OUString sPrevName =
566 0 : ((const SfxStringItem*)pItem)->GetValue();
567 0 : const SwFmtChain &rChain = pCurrFlyFmt->GetChain();
568 : //needs cast - no non-const method available
569 : SwFlyFrmFmt* pFlyFmt =
570 0 : (SwFlyFrmFmt*)rChain.GetPrev();
571 0 : if(pFlyFmt)
572 : {
573 0 : if (pFlyFmt->GetName() != sPrevName)
574 : {
575 0 : rSh.Unchain(*pFlyFmt);
576 : }
577 : else
578 0 : sPrevName = OUString();
579 : }
580 :
581 0 : if (!sPrevName.isEmpty())
582 : {
583 : //needs cast - no non-const method available
584 : SwFrmFmt* pPrevFmt = (SwFrmFmt*)
585 0 : lcl_GetFrmFmtByName(rSh, sPrevName);
586 : OSL_ENSURE(pPrevFmt, "No frame found!");
587 0 : if(pPrevFmt)
588 : {
589 0 : rSh.Chain(*pPrevFmt, *pCurrFlyFmt);
590 : }
591 : }
592 0 : rSh.SetChainMarker();
593 : }
594 0 : if(SfxItemState::SET ==
595 : pOutSet->GetItemState(FN_PARAM_CHAIN_NEXT, false,
596 0 : &pItem))
597 : {
598 0 : rSh.HideChainMarker();
599 : OUString sNextName =
600 0 : ((const SfxStringItem*)pItem)->GetValue();
601 0 : const SwFmtChain &rChain = pCurrFlyFmt->GetChain();
602 : //needs cast - no non-const method available
603 : SwFlyFrmFmt* pFlyFmt =
604 0 : (SwFlyFrmFmt*)rChain.GetNext();
605 0 : if(pFlyFmt)
606 : {
607 0 : if (pFlyFmt->GetName() != sNextName)
608 : {
609 0 : rSh.Unchain(*((SwFlyFrmFmt*) pCurrFlyFmt));
610 : }
611 : else
612 0 : sNextName = OUString();
613 : }
614 :
615 0 : if (!sNextName.isEmpty())
616 : {
617 : //needs cast - no non-const method available
618 : SwFrmFmt* pNextFmt = (SwFrmFmt*)
619 0 : lcl_GetFrmFmtByName(rSh, sNextName);
620 : OSL_ENSURE(pNextFmt, "No frame found!");
621 0 : if(pNextFmt)
622 : {
623 : rSh.Chain(*(SwFrmFmt*)
624 0 : pCurrFlyFmt, *pNextFmt);
625 : }
626 : }
627 0 : rSh.SetChainMarker();
628 : }
629 : }
630 : }
631 : else
632 0 : bUpdateMgr = false;
633 : }
634 : }
635 0 : break;
636 : case FN_FRAME_MIRROR_ON_EVEN_PAGES:
637 : {
638 0 : SwFmtHoriOrient aHori(aMgr.GetHoriOrient());
639 0 : bool bMirror = !aHori.IsPosToggle();
640 0 : aHori.SetPosToggle(bMirror);
641 0 : SfxItemSet aSet(GetPool(), RES_HORI_ORIENT, RES_HORI_ORIENT);
642 0 : aSet.Put(aHori);
643 0 : aMgr.SetAttrSet(aSet);
644 0 : bCopyToFmt = true;
645 0 : rReq.SetReturnValue(SfxBoolItem(nSlot, bMirror));
646 : }
647 0 : break;
648 : // #i73249#
649 : case FN_TITLE_DESCRIPTION_SHAPE:
650 : {
651 0 : bUpdateMgr = false;
652 0 : SdrView* pSdrView = rSh.GetDrawViewWithValidMarkList();
653 0 : if ( pSdrView &&
654 0 : pSdrView->GetMarkedObjectCount() == 1 )
655 : {
656 0 : OUString aDescription(rSh.GetObjDescription());
657 0 : OUString aTitle(rSh.GetObjTitle());
658 :
659 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
660 : OSL_ENSURE(pFact, "Dialog creation failed!");
661 : boost::scoped_ptr<AbstractSvxObjectTitleDescDialog> pDlg(
662 : pFact->CreateSvxObjectTitleDescDialog( NULL,
663 : aTitle,
664 0 : aDescription ));
665 : OSL_ENSURE(pDlg, "Dialog creation failed!");
666 :
667 0 : if ( pDlg->Execute() == RET_OK )
668 : {
669 0 : pDlg->GetDescription(aDescription);
670 0 : pDlg->GetTitle(aTitle);
671 :
672 0 : rSh.SetObjDescription(aDescription);
673 0 : rSh.SetObjTitle(aTitle);
674 0 : }
675 : }
676 : }
677 0 : break;
678 : default:
679 : OSL_ENSURE( false, "wrong dispatcher" );
680 0 : return;
681 : }
682 0 : if ( bUpdateMgr )
683 : {
684 0 : SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
685 0 : if ( bCopyToFmt && pFmt && pFmt->IsAutoUpdateFmt() )
686 : {
687 0 : rSh.AutoUpdateFrame(pFmt, aMgr.GetAttrSet());
688 : }
689 : else
690 : {
691 0 : aMgr.UpdateFlyFrm();
692 : }
693 0 : }
694 :
695 : }
696 :
697 0 : void SwFrameShell::GetState(SfxItemSet& rSet)
698 : {
699 0 : SwWrtShell &rSh = GetShell();
700 0 : bool bHtmlMode = 0 != ::GetHtmlMode(rSh.GetView().GetDocShell());
701 0 : if (rSh.IsFrmSelected())
702 : {
703 0 : SfxItemSet aSet( rSh.GetAttrPool(),
704 : RES_LR_SPACE, RES_UL_SPACE,
705 : RES_PROTECT, RES_HORI_ORIENT,
706 : RES_OPAQUE, RES_OPAQUE,
707 : RES_PRINT, RES_OPAQUE,
708 0 : 0 );
709 0 : rSh.GetFlyFrmAttr( aSet );
710 :
711 0 : bool bProtect = rSh.IsSelObjProtected(FLYPROTECT_POS);
712 0 : bool bParentCntProt = rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
713 :
714 0 : bProtect |= bParentCntProt;
715 :
716 0 : const sal_uInt16 eFrmType = rSh.GetFrmType(0,true);
717 0 : SwFlyFrmAttrMgr aMgr( false, &rSh, FRMMGR_TYPE_NONE );
718 :
719 0 : SfxWhichIter aIter( rSet );
720 0 : sal_uInt16 nWhich = aIter.FirstWhich();
721 0 : while ( nWhich )
722 : {
723 0 : switch ( nWhich )
724 : {
725 : case RES_FRM_SIZE:
726 : {
727 0 : SwFmtFrmSize aSz(aMgr.GetFrmSize());
728 0 : rSet.Put(aSz);
729 : }
730 0 : break;
731 : case RES_VERT_ORIENT:
732 : case RES_HORI_ORIENT:
733 : case SID_ATTR_ULSPACE:
734 : case SID_ATTR_LRSPACE:
735 : case RES_LR_SPACE:
736 : case RES_UL_SPACE:
737 : case RES_PROTECT:
738 : case RES_OPAQUE:
739 : case RES_PRINT:
740 : case RES_SURROUND:
741 : {
742 0 : rSet.Put(aSet.Get(GetPool().GetWhich(nWhich), true ));
743 : }
744 0 : break;
745 : case SID_OBJECT_ALIGN_LEFT :
746 : case SID_OBJECT_ALIGN_CENTER :
747 : case SID_OBJECT_ALIGN_RIGHT :
748 : case FN_FRAME_ALIGN_HORZ_CENTER:
749 : case FN_FRAME_ALIGN_HORZ_RIGHT:
750 : case FN_FRAME_ALIGN_HORZ_LEFT:
751 0 : if ( (eFrmType & FRMTYPE_FLY_INCNT) ||
752 0 : bProtect ||
753 0 : ((nWhich == FN_FRAME_ALIGN_HORZ_CENTER || nWhich == SID_OBJECT_ALIGN_CENTER) &&
754 : bHtmlMode ))
755 0 : rSet.DisableItem( nWhich );
756 0 : break;
757 : case FN_FRAME_ALIGN_VERT_ROW_TOP:
758 : case FN_FRAME_ALIGN_VERT_ROW_CENTER:
759 : case FN_FRAME_ALIGN_VERT_ROW_BOTTOM:
760 : case FN_FRAME_ALIGN_VERT_CHAR_TOP:
761 : case FN_FRAME_ALIGN_VERT_CHAR_CENTER:
762 : case FN_FRAME_ALIGN_VERT_CHAR_BOTTOM:
763 0 : if ( !(eFrmType & FRMTYPE_FLY_INCNT) || bProtect
764 0 : || (bHtmlMode && FN_FRAME_ALIGN_VERT_CHAR_BOTTOM == nWhich) )
765 0 : rSet.DisableItem( nWhich );
766 0 : break;
767 :
768 : case SID_OBJECT_ALIGN_UP :
769 : case SID_OBJECT_ALIGN_MIDDLE :
770 : case SID_OBJECT_ALIGN_DOWN :
771 :
772 : case FN_FRAME_ALIGN_VERT_TOP:
773 : case FN_FRAME_ALIGN_VERT_CENTER:
774 : case FN_FRAME_ALIGN_VERT_BOTTOM:
775 0 : if ( bProtect || (bHtmlMode && eFrmType & FRMTYPE_FLY_ATCNT))
776 0 : rSet.DisableItem( nWhich );
777 : else
778 : {
779 0 : sal_uInt16 nId = 0;
780 0 : if (eFrmType & FRMTYPE_FLY_INCNT)
781 : {
782 0 : switch (nWhich)
783 : {
784 : case SID_OBJECT_ALIGN_UP :
785 : case FN_FRAME_ALIGN_VERT_TOP:
786 0 : nId = STR_TOP_BASE; break;
787 : case SID_OBJECT_ALIGN_MIDDLE :
788 : case FN_FRAME_ALIGN_VERT_CENTER:
789 0 : nId = STR_CENTER_BASE; break;
790 : case SID_OBJECT_ALIGN_DOWN :
791 : case FN_FRAME_ALIGN_VERT_BOTTOM:
792 0 : if(!bHtmlMode)
793 0 : nId = STR_BOTTOM_BASE;
794 : else
795 0 : rSet.DisableItem( nWhich );
796 0 : break;
797 : }
798 : }
799 : else
800 : {
801 0 : if (nWhich != FN_FRAME_ALIGN_VERT_TOP &&
802 : nWhich != SID_OBJECT_ALIGN_UP )
803 : {
804 0 : if (aMgr.GetAnchor() == FLY_AT_FLY)
805 : {
806 0 : const SwFrmFmt* pFmt = rSh.IsFlyInFly();
807 0 : if (pFmt)
808 : {
809 0 : const SwFmtFrmSize& rFrmSz = pFmt->GetFrmSize();
810 0 : if (rFrmSz.GetHeightSizeType() != ATT_FIX_SIZE)
811 : {
812 0 : rSet.DisableItem( nWhich );
813 0 : break;
814 : }
815 : }
816 : }
817 : }
818 0 : switch (nWhich)
819 : {
820 : case SID_OBJECT_ALIGN_UP :
821 : case FN_FRAME_ALIGN_VERT_TOP:
822 0 : nId = STR_TOP; break;
823 : case SID_OBJECT_ALIGN_MIDDLE:
824 : case FN_FRAME_ALIGN_VERT_CENTER:
825 0 : nId = STR_CENTER_VERT; break;
826 : case SID_OBJECT_ALIGN_DOWN:
827 : case FN_FRAME_ALIGN_VERT_BOTTOM:
828 0 : nId = STR_BOTTOM; break;
829 : }
830 : }
831 0 : if ( nId )
832 0 : rSet.Put( SfxStringItem( nWhich, SW_RES(nId) ));
833 : }
834 0 : break;
835 : case SID_HYPERLINK_GETLINK:
836 : {
837 0 : SvxHyperlinkItem aHLinkItem;
838 : const SfxPoolItem* pItem;
839 :
840 0 : SfxItemSet aURLSet(GetPool(), RES_URL, RES_URL);
841 0 : rSh.GetFlyFrmAttr( aURLSet );
842 :
843 0 : if(SfxItemState::SET == aURLSet.GetItemState(RES_URL, true, &pItem))
844 : {
845 0 : const SwFmtURL* pFmtURL = (const SwFmtURL*)pItem;
846 0 : aHLinkItem.SetURL(pFmtURL->GetURL());
847 0 : aHLinkItem.SetTargetFrame(pFmtURL->GetTargetFrameName());
848 0 : aHLinkItem.SetName(rSh.GetFlyName());
849 : }
850 :
851 0 : aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() |
852 0 : (bHtmlMode ? HLINK_HTMLMODE : 0)));
853 :
854 0 : rSet.Put(aHLinkItem);
855 : }
856 0 : break;
857 :
858 : case FN_FRAME_CHAIN:
859 : {
860 0 : const int nSel = rSh.GetSelectionType();
861 0 : if (nSel & nsSelectionType::SEL_GRF || nSel & nsSelectionType::SEL_OLE)
862 0 : rSet.DisableItem( FN_FRAME_CHAIN );
863 : else
864 : {
865 0 : const SwFrmFmt *pFmt = rSh.GetFlyFrmFmt();
866 0 : if ( bParentCntProt || rSh.GetView().GetEditWin().GetApplyTemplate() ||
867 0 : !pFmt || pFmt->GetChain().GetNext() )
868 : {
869 0 : rSet.DisableItem( FN_FRAME_CHAIN );
870 : }
871 : else
872 : {
873 0 : bool bChainMode = rSh.GetView().GetEditWin().IsChainMode();
874 0 : rSet.Put( SfxBoolItem( FN_FRAME_CHAIN, bChainMode ) );
875 : }
876 : }
877 : }
878 0 : break;
879 : case FN_FRAME_UNCHAIN:
880 : {
881 0 : const int nSel = rSh.GetSelectionType();
882 0 : if (nSel & nsSelectionType::SEL_GRF || nSel & nsSelectionType::SEL_OLE)
883 0 : rSet.DisableItem( FN_FRAME_UNCHAIN );
884 : else
885 : {
886 0 : const SwFrmFmt *pFmt = rSh.GetFlyFrmFmt();
887 0 : if ( bParentCntProt || rSh.GetView().GetEditWin().GetApplyTemplate() ||
888 0 : !pFmt || !pFmt->GetChain().GetNext() )
889 : {
890 0 : rSet.DisableItem( FN_FRAME_UNCHAIN );
891 : }
892 : }
893 : }
894 0 : break;
895 : case SID_FRAME_TO_TOP:
896 : case SID_FRAME_TO_BOTTOM:
897 : case FN_FRAME_UP:
898 : case FN_FRAME_DOWN:
899 0 : if ( bParentCntProt )
900 0 : rSet.DisableItem( nWhich );
901 0 : break;
902 :
903 : case SID_ATTR_TRANSFORM:
904 : {
905 0 : rSet.DisableItem( nWhich );
906 : }
907 0 : break;
908 :
909 : case SID_ATTR_TRANSFORM_PROTECT_SIZE:
910 : {
911 0 : const sal_uInt8 eProtection = rSh.IsSelObjProtected( FLYPROTECT_SIZE );
912 0 : if ( ( eProtection & FLYPROTECT_CONTENT ) ||
913 0 : ( eProtection & FLYPROTECT_SIZE ) )
914 : {
915 0 : rSet.Put( SfxBoolItem( SID_ATTR_TRANSFORM_PROTECT_SIZE, true ) );
916 : }
917 : else
918 : {
919 0 : rSet.Put( SfxBoolItem( SID_ATTR_TRANSFORM_PROTECT_SIZE, false ) );
920 : }
921 : }
922 0 : break;
923 :
924 : case SID_ATTR_TRANSFORM_WIDTH:
925 : {
926 0 : rSet.Put( SfxUInt32Item( SID_ATTR_TRANSFORM_WIDTH, aMgr.GetSize().getWidth() ) );
927 : }
928 0 : break;
929 :
930 : case SID_ATTR_TRANSFORM_HEIGHT:
931 : {
932 0 : rSet.Put( SfxUInt32Item( SID_ATTR_TRANSFORM_HEIGHT, aMgr.GetSize().getHeight() ) );
933 : }
934 0 : break;
935 :
936 : case FN_FORMAT_FRAME_DLG:
937 : {
938 0 : const int nSel = rSh.GetSelectionType();
939 0 : if ( bParentCntProt || nSel & nsSelectionType::SEL_GRF)
940 0 : rSet.DisableItem( nWhich );
941 : }
942 0 : break;
943 : // #i73249#
944 : case FN_TITLE_DESCRIPTION_SHAPE:
945 : {
946 0 : SwWrtShell &rWrtSh = GetShell();
947 0 : SdrView* pSdrView = rWrtSh.GetDrawViewWithValidMarkList();
948 0 : if ( !pSdrView ||
949 0 : pSdrView->GetMarkedObjectCount() != 1 )
950 : {
951 0 : rSet.DisableItem( nWhich );
952 : }
953 :
954 : }
955 0 : break;
956 :
957 : default:
958 : /* do nothing */;
959 0 : break;
960 : }
961 0 : nWhich = aIter.NextWhich();
962 0 : }
963 : }
964 0 : }
965 :
966 0 : SwFrameShell::SwFrameShell(SwView &_rView) :
967 0 : SwBaseShell( _rView )
968 : {
969 0 : SetName(OUString("Frame"));
970 0 : SetHelpId(SW_FRAMESHELL);
971 :
972 : // #96392# Use this to announce it is the frame shell who creates the selection.
973 0 : SwTransferable::CreateSelection( _rView.GetWrtShell(), (SwViewShell *) this );
974 :
975 0 : SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Frame));
976 0 : }
977 :
978 0 : SwFrameShell::~SwFrameShell()
979 : {
980 : // #96392# Only clear the selection if it was this frame shell who created it.
981 0 : SwTransferable::ClearSelection( GetShell(), (SwViewShell *) this );
982 0 : }
983 :
984 0 : void SwFrameShell::ExecFrameStyle(SfxRequest& rReq)
985 : {
986 0 : SwWrtShell &rSh = GetShell();
987 0 : bool bDefault = false;
988 0 : if (!rSh.IsFrmSelected())
989 0 : return;
990 : // At first pick the default BoxItem out of the pool.
991 : // If unequal to regular box item, then it has already
992 : // been changed (New one is no default).
993 0 : const SvxBoxItem* pPoolBoxItem = (const SvxBoxItem*)::GetDfltAttr(RES_BOX);
994 :
995 0 : const SfxItemSet *pArgs = rReq.GetArgs();
996 0 : SfxItemSet aFrameSet(rSh.GetAttrPool(), RES_BOX, RES_BOX);
997 :
998 0 : rSh.GetFlyFrmAttr( aFrameSet );
999 0 : const SvxBoxItem& rBoxItem = (const SvxBoxItem&)aFrameSet.Get(RES_BOX);
1000 :
1001 0 : if (pPoolBoxItem == &rBoxItem)
1002 0 : bDefault = true;
1003 :
1004 0 : SvxBoxItem aBoxItem(rBoxItem);
1005 :
1006 0 : SvxBorderLine aBorderLine;
1007 0 : const SfxPoolItem *pItem = 0;
1008 :
1009 0 : if(pArgs) // Any controller can sometimes deliver nothing #48169#
1010 : {
1011 0 : switch (rReq.GetSlot())
1012 : {
1013 : case SID_ATTR_BORDER:
1014 : {
1015 0 : if (pArgs->GetItemState(RES_BOX, true, &pItem) == SfxItemState::SET)
1016 : {
1017 0 : SvxBoxItem aNewBox(*((SvxBoxItem *)pItem));
1018 : const SvxBorderLine* pBorderLine;
1019 :
1020 0 : if ((pBorderLine = aBoxItem.GetTop()) != NULL)
1021 0 : lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
1022 0 : if ((pBorderLine = aBoxItem.GetBottom()) != NULL)
1023 0 : lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
1024 0 : if ((pBorderLine = aBoxItem.GetLeft()) != NULL)
1025 0 : lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
1026 0 : if ((pBorderLine = aBoxItem.GetRight()) != NULL)
1027 0 : lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
1028 :
1029 0 : if(aBorderLine.GetOutWidth() == 0)
1030 : {
1031 : aBorderLine.SetBorderLineStyle(
1032 0 : table::BorderLineStyle::SOLID);
1033 0 : aBorderLine.SetWidth( DEF_LINE_WIDTH_0 );
1034 : }
1035 : //Set distance only if the request is received from the controller.
1036 :
1037 : #if HAVE_FEATURE_SCRIPTING
1038 0 : if(!StarBASIC::IsRunning())
1039 : #endif
1040 : {
1041 0 : aNewBox.SetDistance( rBoxItem.GetDistance() );
1042 : }
1043 :
1044 0 : aBoxItem = aNewBox;
1045 0 : SvxBorderLine aDestBorderLine;
1046 :
1047 0 : if( aBoxItem.GetTop() != NULL )
1048 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
1049 0 : if( aBoxItem.GetBottom() != NULL )
1050 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
1051 0 : if( aBoxItem.GetLeft() != NULL )
1052 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
1053 0 : if( aBoxItem.GetRight() != NULL )
1054 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
1055 : }
1056 : }
1057 0 : break;
1058 :
1059 : case SID_FRAME_LINESTYLE:
1060 : {
1061 0 : if (pArgs->GetItemState(SID_FRAME_LINESTYLE, false, &pItem) == SfxItemState::SET)
1062 : {
1063 : const SvxLineItem* pLineItem =
1064 0 : (const SvxLineItem*)pItem;
1065 :
1066 0 : if ( pLineItem->GetLine() )
1067 : {
1068 0 : aBorderLine = *(pLineItem->GetLine());
1069 :
1070 0 : if (!aBoxItem.GetTop() && !aBoxItem.GetBottom() &&
1071 0 : !aBoxItem.GetLeft() && !aBoxItem.GetRight())
1072 : {
1073 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
1074 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
1075 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
1076 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
1077 : }
1078 : else
1079 : {
1080 0 : if( aBoxItem.GetTop() )
1081 : {
1082 0 : aBorderLine.SetColor( aBoxItem.GetTop()->GetColor() );
1083 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
1084 : }
1085 0 : if( aBoxItem.GetBottom() )
1086 : {
1087 0 : aBorderLine.SetColor( aBoxItem.GetBottom()->GetColor());
1088 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
1089 : }
1090 0 : if( aBoxItem.GetLeft() )
1091 : {
1092 0 : aBorderLine.SetColor( aBoxItem.GetLeft()->GetColor());
1093 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
1094 : }
1095 0 : if( aBoxItem.GetRight() )
1096 : {
1097 0 : aBorderLine.SetColor(aBoxItem.GetRight()->GetColor());
1098 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
1099 : }
1100 : }
1101 : }
1102 : else
1103 : {
1104 0 : aBoxItem.SetLine(0, BOX_LINE_TOP);
1105 0 : aBoxItem.SetLine(0, BOX_LINE_BOTTOM);
1106 0 : aBoxItem.SetLine(0, BOX_LINE_LEFT);
1107 0 : aBoxItem.SetLine(0, BOX_LINE_RIGHT);
1108 : }
1109 : }
1110 : }
1111 0 : break;
1112 :
1113 : case SID_FRAME_LINECOLOR:
1114 : {
1115 0 : if (pArgs->GetItemState(SID_FRAME_LINECOLOR, false, &pItem) == SfxItemState::SET)
1116 : {
1117 0 : const Color& rNewColor = ((const SvxColorItem*)pItem)->GetValue();
1118 :
1119 0 : if (!aBoxItem.GetTop() && !aBoxItem.GetBottom() &&
1120 0 : !aBoxItem.GetLeft() && !aBoxItem.GetRight())
1121 : {
1122 0 : aBorderLine.SetColor( rNewColor );
1123 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
1124 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
1125 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
1126 0 : aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
1127 : }
1128 : else
1129 : {
1130 0 : if ( aBoxItem.GetTop() )
1131 0 : ((SvxBorderLine*)aBoxItem.GetTop())->SetColor( rNewColor );
1132 0 : if ( aBoxItem.GetBottom() )
1133 0 : ((SvxBorderLine*)aBoxItem.GetBottom())->SetColor( rNewColor );
1134 0 : if ( aBoxItem.GetLeft() )
1135 0 : ((SvxBorderLine*)aBoxItem.GetLeft())->SetColor( rNewColor );
1136 0 : if ( aBoxItem.GetRight() )
1137 0 : ((SvxBorderLine*)aBoxItem.GetRight())->SetColor( rNewColor );
1138 : }
1139 : }
1140 : }
1141 0 : break;
1142 : }
1143 : }
1144 0 : if (bDefault && (aBoxItem.GetTop() || aBoxItem.GetBottom() ||
1145 0 : aBoxItem.GetLeft() || aBoxItem.GetRight()))
1146 : {
1147 0 : aBoxItem.SetDistance(MIN_BORDER_DIST);
1148 : }
1149 0 : aFrameSet.Put( aBoxItem );
1150 : // Template AutoUpdate
1151 0 : SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
1152 0 : if(pFmt && pFmt->IsAutoUpdateFmt())
1153 : {
1154 0 : rSh.AutoUpdateFrame(pFmt, aFrameSet);
1155 : }
1156 : else
1157 0 : rSh.SetFlyFrmAttr( aFrameSet );
1158 :
1159 : }
1160 :
1161 0 : static void lcl_FrmGetMaxLineWidth(const SvxBorderLine* pBorderLine, SvxBorderLine& rBorderLine)
1162 : {
1163 0 : if(pBorderLine->GetWidth() > rBorderLine.GetWidth())
1164 0 : rBorderLine.SetWidth(pBorderLine->GetWidth());
1165 :
1166 0 : rBorderLine.SetBorderLineStyle(pBorderLine->GetBorderLineStyle());
1167 0 : rBorderLine.SetColor(pBorderLine->GetColor());
1168 0 : }
1169 :
1170 0 : void SwFrameShell::GetLineStyleState(SfxItemSet &rSet)
1171 : {
1172 0 : SwWrtShell &rSh = GetShell();
1173 0 : bool bParentCntProt = rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
1174 :
1175 0 : if (bParentCntProt)
1176 : {
1177 0 : if (rSh.IsFrmSelected())
1178 0 : rSet.DisableItem( SID_FRAME_LINECOLOR );
1179 :
1180 0 : rSet.DisableItem( SID_ATTR_BORDER );
1181 0 : rSet.DisableItem( SID_FRAME_LINESTYLE );
1182 : }
1183 : else
1184 : {
1185 0 : if (rSh.IsFrmSelected())
1186 : {
1187 0 : SfxItemSet aFrameSet( rSh.GetAttrPool(), RES_BOX, RES_BOX );
1188 :
1189 0 : rSh.GetFlyFrmAttr(aFrameSet);
1190 :
1191 0 : const SvxBorderLine* pLine = ((const SvxBoxItem&)aFrameSet.Get(RES_BOX)).GetTop();
1192 0 : rSet.Put(SvxColorItem(pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR));
1193 : }
1194 : }
1195 0 : }
1196 :
1197 0 : void SwFrameShell::StateInsert(SfxItemSet &rSet)
1198 : {
1199 0 : const int nSel = GetShell().GetSelectionType();
1200 0 : if ( (nSel & nsSelectionType::SEL_GRF)
1201 0 : || (nSel & nsSelectionType::SEL_OLE) )
1202 : {
1203 0 : rSet.DisableItem(FN_INSERT_FRAME);
1204 : }
1205 0 : else if ( GetShell().CrsrInsideInputFld() )
1206 : {
1207 0 : rSet.DisableItem(FN_INSERT_FRAME);
1208 : }
1209 0 : }
1210 :
1211 : //UUUU
1212 0 : void SwFrameShell::GetDrawAttrStateTextFrame(SfxItemSet &rSet)
1213 : {
1214 0 : SwWrtShell &rSh = GetShell();
1215 :
1216 0 : if(rSh.IsFrmSelected())
1217 : {
1218 0 : rSh.GetFlyFrmAttr(rSet);
1219 : }
1220 : else
1221 : {
1222 0 : SdrView* pSdrView = rSh.GetDrawViewWithValidMarkList();
1223 :
1224 0 : if(pSdrView)
1225 : {
1226 0 : rSet.Put(pSdrView->GetDefaultAttr());
1227 : }
1228 : }
1229 0 : }
1230 :
1231 : //UUUU
1232 0 : void SwFrameShell::ExecDrawAttrArgsTextFrame(SfxRequest& rReq)
1233 : {
1234 0 : const SfxItemSet* pArgs = rReq.GetArgs();
1235 0 : SwWrtShell& rSh = GetShell();
1236 :
1237 0 : if(pArgs)
1238 : {
1239 0 : if(rSh.IsFrmSelected())
1240 : {
1241 0 : rSh.SetFlyFrmAttr(const_cast< SfxItemSet& >(*pArgs));
1242 : }
1243 : else
1244 : {
1245 0 : SdrView* pSdrView = rSh.GetDrawViewWithValidMarkList();
1246 :
1247 0 : if(pSdrView)
1248 : {
1249 0 : pSdrView->SetDefaultAttr(*pArgs, false);
1250 : }
1251 : }
1252 : }
1253 : else
1254 : {
1255 0 : SfxDispatcher* pDis = rSh.GetView().GetViewFrame()->GetDispatcher();
1256 :
1257 0 : switch(rReq.GetSlot())
1258 : {
1259 : case SID_ATTR_FILL_STYLE:
1260 : case SID_ATTR_FILL_COLOR:
1261 : case SID_ATTR_FILL_GRADIENT:
1262 : case SID_ATTR_FILL_HATCH:
1263 : case SID_ATTR_FILL_BITMAP:
1264 : case SID_ATTR_FILL_TRANSPARENCE:
1265 : case SID_ATTR_FILL_FLOATTRANSPARENCE:
1266 : {
1267 0 : pDis->Execute(SID_ATTRIBUTES_AREA);
1268 0 : break;
1269 : }
1270 : }
1271 : }
1272 0 : }
1273 :
1274 : //UUUU
1275 0 : void SwFrameShell::ExecDrawDlgTextFrame(SfxRequest& rReq)
1276 : {
1277 0 : switch(rReq.GetSlot())
1278 : {
1279 : case SID_ATTRIBUTES_AREA:
1280 : {
1281 0 : SwWrtShell& rSh = GetShell();
1282 :
1283 0 : if(rSh.IsFrmSelected())
1284 : {
1285 0 : SdrView* pView = rSh.GetDrawView();
1286 0 : SdrModel* pDoc = pView->GetModel();
1287 0 : SfxItemSet aNewAttr(pDoc->GetItemPool());
1288 :
1289 : // get attributes from FlyFrame
1290 0 : rSh.GetFlyFrmAttr(aNewAttr);
1291 :
1292 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1293 : DBG_ASSERT(pFact, "Dialog creation failed!");
1294 : boost::scoped_ptr<AbstractSvxAreaTabDialog> pDlg(pFact->CreateSvxAreaTabDialog(
1295 : NULL,
1296 : &aNewAttr,
1297 : pDoc,
1298 0 : false));
1299 : DBG_ASSERT(pDlg, "Dialog creation failed!");
1300 :
1301 0 : if(RET_OK == pDlg->Execute())
1302 : {
1303 : // set attributes at FlyFrame
1304 0 : rSh.SetFlyFrmAttr(const_cast< SfxItemSet& >(*pDlg->GetOutputItemSet()));
1305 :
1306 : static sal_uInt16 aInval[] =
1307 : {
1308 : SID_ATTR_FILL_STYLE,
1309 : SID_ATTR_FILL_COLOR,
1310 : SID_ATTR_FILL_TRANSPARENCE,
1311 : SID_ATTR_FILL_FLOATTRANSPARENCE,
1312 : 0
1313 : };
1314 :
1315 0 : SfxBindings &rBnd = GetView().GetViewFrame()->GetBindings();
1316 :
1317 0 : rBnd.Invalidate(aInval);
1318 0 : rBnd.Update(SID_ATTR_FILL_STYLE);
1319 0 : rBnd.Update(SID_ATTR_FILL_COLOR);
1320 0 : rBnd.Update(SID_ATTR_FILL_TRANSPARENCE);
1321 0 : rBnd.Update(SID_ATTR_FILL_FLOATTRANSPARENCE);
1322 0 : }
1323 : }
1324 :
1325 0 : break;
1326 : }
1327 : }
1328 0 : }
1329 :
1330 : //UUUU
1331 0 : void SwFrameShell::DisableStateTextFrame(SfxItemSet &rSet)
1332 : {
1333 0 : SfxWhichIter aIter(rSet);
1334 0 : sal_uInt16 nWhich(aIter.FirstWhich());
1335 :
1336 0 : while(nWhich)
1337 : {
1338 0 : switch(nWhich)
1339 : {
1340 : case SID_ATTRIBUTES_AREA:
1341 : {
1342 0 : SwWrtShell& rSh = GetShell();
1343 :
1344 0 : if(!rSh.IsFrmSelected())
1345 : {
1346 0 : rSet.DisableItem(nWhich);
1347 : }
1348 :
1349 0 : break;
1350 : }
1351 : default:
1352 : {
1353 0 : rSet.DisableItem(nWhich);
1354 0 : break;
1355 : }
1356 : }
1357 :
1358 0 : nWhich = aIter.NextWhich();
1359 0 : }
1360 270 : }
1361 :
1362 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|