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