LCOV - code coverage report
Current view: top level - sw/source/uibase/shells - frmsh.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 6 587 1.0 %
Date: 2015-06-13 12:38:46 Functions: 5 20 25.0 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.11