summaryrefslogtreecommitdiff
path: root/sw/source/ui/shells/frmsh.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/shells/frmsh.cxx')
-rw-r--r--sw/source/ui/shells/frmsh.cxx1148
1 files changed, 1148 insertions, 0 deletions
diff --git a/sw/source/ui/shells/frmsh.cxx b/sw/source/ui/shells/frmsh.cxx
new file mode 100644
index 000000000000..5d972af52f72
--- /dev/null
+++ b/sw/source/ui/shells/frmsh.cxx
@@ -0,0 +1,1148 @@
+ /*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+
+#include <hintids.hxx>
+#include <svl/whiter.hxx>
+#include <svtools/imapobj.hxx>
+#include <svl/srchitem.hxx>
+#include <svtools/imap.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <basic/sbstar.hxx>
+#include <svl/rectitem.hxx>
+#include <svl/ptitem.hxx>
+#include <svl/stritem.hxx>
+#include <editeng/colritem.hxx>
+#include <editeng/bolnitem.hxx>
+#include <editeng/boxitem.hxx>
+#include <editeng/protitem.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/request.hxx>
+#include <sfx2/objface.hxx>
+#include <svx/hlnkitem.hxx>
+// --> OD 2009-07-07 #i73249#
+#include <svx/svdview.hxx>
+#include <vcl/msgbox.hxx>
+// <--
+
+
+#include <fmturl.hxx>
+#include <fmtclds.hxx>
+#include <fmtcnct.hxx>
+#include <swmodule.hxx>
+#include <wrtsh.hxx>
+#include <wview.hxx>
+#include <frmatr.hxx>
+#include <uitool.hxx>
+#include <frmfmt.hxx>
+#include <frmsh.hxx>
+#include <frmmgr.hxx>
+#include <frmdlg.hxx>
+#include <swevent.hxx>
+#include <usrpref.hxx>
+#include <edtwin.hxx>
+#include <swdtflvr.hxx>
+#include <swwait.hxx>
+#include <docstat.hxx>
+#include <IDocumentStatistics.hxx>
+
+#include <comphelper/processfactory.hxx>
+#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
+
+#include <helpid.h>
+#include <cmdid.h>
+#include <globals.hrc>
+#include <popup.hrc>
+#include <shells.hrc>
+#include "swabstdlg.hxx"
+#include "misc.hrc"
+// --> OD 2009-07-14 #i73249#
+#include <svx/dialogs.hrc>
+// <--
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+
+// Prototypen ------------------------------------------------------------
+
+void lcl_FrmGetMaxLineWidth(const SvxBorderLine* pBorderLine, SvxBorderLine& rBorderLine);
+const SwFrmFmt* lcl_GetFrmFmtByName(SwWrtShell& rSh, const String& rName)
+{
+ sal_uInt16 nCount = rSh.GetFlyCount(FLYCNTTYPE_FRM);
+ for( sal_uInt16 i = 0; i < nCount; i++)
+ {
+ const SwFrmFmt* pFmt = rSh.GetFlyNum(i, FLYCNTTYPE_FRM);
+ if(pFmt->GetName() == rName)
+ return pFmt;
+ }
+ return 0;
+}
+
+#define SwFrameShell
+#include <sfx2/msg.hxx>
+#include "swslots.hxx"
+
+SFX_IMPL_INTERFACE(SwFrameShell, SwBaseShell, SW_RES(STR_SHELLNAME_FRAME))
+{
+ SFX_POPUPMENU_REGISTRATION(SW_RES(MN_FRM_POPUPMENU));
+ SFX_OBJECTBAR_REGISTRATION(SFX_OBJECTBAR_OBJECT, SW_RES(RID_FRAME_TOOLBOX));
+}
+
+
+
+void SwFrameShell::Execute(SfxRequest &rReq)
+{
+ //Erstmal die, die keinen FrmMgr benoetigen.
+ SwWrtShell &rSh = GetShell();
+ BOOL bMore = FALSE;
+ const SfxItemSet* pArgs = rReq.GetArgs();
+ const SfxPoolItem* pItem;
+ USHORT nSlot = rReq.GetSlot();
+
+ switch ( nSlot )
+ {
+ case FN_FRAME_TO_ANCHOR:
+ if ( rSh.IsFrmSelected() )
+ {
+ rSh.GotoFlyAnchor();
+ rSh.EnterStdMode();
+ rSh.CallChgLnk();
+ }
+ break;
+ case SID_FRAME_TO_TOP:
+ rSh.SelectionToTop();
+ break;
+
+ case SID_FRAME_TO_BOTTOM:
+ rSh.SelectionToBottom();
+ break;
+
+ case FN_FRAME_UP:
+ rSh.SelectionToTop( FALSE );
+ break;
+
+ case FN_FRAME_DOWN:
+ rSh.SelectionToBottom( FALSE );
+ break;
+ case FN_INSERT_FRAME:
+ if (!pArgs)
+ {
+ // Rahmen existiert bereits, Rahmendialog zur Bearbeitung oeffnen
+ SfxUInt16Item aDefPage(FN_FORMAT_FRAME_DLG, TP_COLUMN);
+ rSh.GetView().GetViewFrame()->GetDispatcher()->Execute( FN_FORMAT_FRAME_DLG,
+ SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD,
+ &aDefPage, 0L );
+
+ }
+ else
+ {
+ // Rahmen existiert bereits, nur Spaltenanzahl wird geaendert
+ USHORT nCols = 1;
+ if(pArgs->GetItemState(SID_ATTR_COLUMNS, FALSE, &pItem) == SFX_ITEM_SET)
+ nCols = ((SfxUInt16Item *)pItem)->GetValue();
+
+ SfxItemSet aSet(GetPool(),RES_COL,RES_COL);
+ rSh.GetFlyFrmAttr( aSet );
+ SwFmtCol aCol((const SwFmtCol&)aSet.Get(RES_COL));
+ // GutterWidth wird nicht immer uebergeben, daher erst besorgen (siehe view2: Execute auf diesen Slot)
+ USHORT nGutterWidth = aCol.GetGutterWidth();
+ if(!nCols )
+ nCols++;
+ aCol.Init(nCols, nGutterWidth, aCol.GetWishWidth());
+ aSet.Put(aCol);
+ // Vorlagen-AutoUpdate
+ SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
+ if(pFmt && pFmt->IsAutoUpdateFmt())
+ {
+ rSh.AutoUpdateFrame(pFmt, aSet);
+ }
+ else
+ {
+ rSh.StartAllAction();
+ rSh.SetFlyFrmAttr( aSet );
+ rSh.SetModified();
+ rSh.EndAllAction();
+ }
+
+ }
+ return;
+
+ case SID_HYPERLINK_SETLINK:
+ {
+ if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_HYPERLINK_SETLINK, FALSE, &pItem))
+ {
+ const SvxHyperlinkItem& rHLinkItem = *(const SvxHyperlinkItem *)pItem;
+ const String& rURL = rHLinkItem.GetURL();
+ const String& rTarget = rHLinkItem.GetTargetFrame();
+
+ SfxItemSet aSet( rSh.GetAttrPool(), RES_URL, RES_URL );
+ rSh.GetFlyFrmAttr( aSet );
+ SwFmtURL aURL( (SwFmtURL&)aSet.Get( RES_URL ) );
+
+ String sOldName(rHLinkItem.GetName());
+ String sFlyName(rSh.GetFlyName());
+ if (sOldName.ToUpperAscii() != sFlyName.ToUpperAscii())
+ {
+ String sName(sOldName);
+ USHORT i = 1;
+ while (rSh.FindFlyByName(sName))
+ {
+ sName = sOldName;
+ sName += '_';
+ sName += String::CreateFromInt32(i++);
+ }
+ rSh.SetFlyName(sName);
+ }
+ aURL.SetURL( rURL, FALSE );
+ aURL.SetTargetFrameName(rTarget);
+
+ aSet.Put( aURL );
+ rSh.SetFlyFrmAttr( aSet );
+ }
+ }
+ break;
+
+ case FN_FRAME_CHAIN:
+ rSh.GetView().GetEditWin().SetChainMode( !rSh.GetView().GetEditWin().IsChainMode() );
+ break;
+
+ case FN_FRAME_UNCHAIN:
+ rSh.Unchain( (SwFrmFmt&)*rSh.GetFlyFrmFmt() );
+ GetView().GetViewFrame()->GetBindings().Invalidate(FN_FRAME_CHAIN);
+ break;
+ case FN_FORMAT_FOOTNOTE_DLG:
+ {
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
+
+ VclAbstractDialog* pDlg = pFact->CreateSwFootNoteOptionDlg( GetView().GetWindow(), GetView().GetWrtShell(), DLG_DOC_FOOTNOTE );
+ DBG_ASSERT(pDlg, "Dialogdiet fail!");
+ pDlg->Execute();
+ delete pDlg;
+ break;
+ }
+ case FN_NUMBERING_OUTLINE_DLG:
+ {
+ SfxItemSet aTmp(GetPool(), FN_PARAM_1, FN_PARAM_1);
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ DBG_ASSERT(pFact, "Dialogdiet fail!");
+ SfxAbstractTabDialog* pDlg = pFact->CreateSwTabDialog( DLG_TAB_OUTLINE,
+ GetView().GetWindow(), &aTmp, GetView().GetWrtShell());
+ DBG_ASSERT(pDlg, "Dialogdiet fail!");
+ pDlg->Execute();
+ delete pDlg;
+ rReq.Done();
+ break;
+ }
+ case SID_OPEN_XML_FILTERSETTINGS:
+ {
+ try
+ {
+ uno::Reference < ui::dialogs::XExecutableDialog > xDialog(::comphelper::getProcessServiceFactory()->createInstance(rtl::OUString::createFromAscii("com.sun.star.comp.ui.XSLTFilterDialog")), uno::UNO_QUERY);
+ if( xDialog.is() )
+ {
+ xDialog->execute();
+ }
+ }
+ catch( uno::Exception& )
+ {
+ }
+ rReq.Ignore ();
+ }
+ break;
+ case FN_WORDCOUNT_DIALOG:
+ {
+ SwDocStat aCurr;
+ SwDocStat aDocStat( rSh.getIDocumentStatistics()->GetDocStat() );
+ {
+ SwWait aWait( *GetView().GetDocShell(), TRUE );
+ rSh.StartAction();
+ rSh.CountWords( aCurr );
+ rSh.UpdateDocStat( aDocStat );
+ rSh.EndAction();
+ }
+
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ DBG_ASSERT(pFact, "Dialogdiet fail!");
+ AbstractSwWordCountDialog* pDialog = pFact->CreateSwWordCountDialog( GetView().GetWindow() );
+ pDialog->SetValues(aCurr, aDocStat );
+ pDialog->Execute();
+ delete pDialog;
+ }
+ break;
+ default: bMore = TRUE;
+ }
+
+ if ( !bMore )
+ {
+ return;
+ }
+
+ SwFlyFrmAttrMgr aMgr( FALSE, &rSh, FRMMGR_TYPE_NONE );
+ BOOL bUpdateMgr = TRUE;
+ BOOL bCopyToFmt = FALSE;
+ switch ( nSlot )
+ {
+ case SID_OBJECT_ALIGN_MIDDLE:
+ case FN_FRAME_ALIGN_VERT_CENTER:
+ aMgr.SetVertOrientation( text::VertOrientation::CENTER );
+ break;
+ case SID_OBJECT_ALIGN_DOWN :
+ case FN_FRAME_ALIGN_VERT_BOTTOM:
+ aMgr.SetVertOrientation( text::VertOrientation::BOTTOM );
+ break;
+ case SID_OBJECT_ALIGN_UP :
+ case FN_FRAME_ALIGN_VERT_TOP:
+ aMgr.SetVertOrientation( text::VertOrientation::TOP );
+ break;
+
+ case FN_FRAME_ALIGN_VERT_CHAR_CENTER:
+ aMgr.SetVertOrientation( text::VertOrientation::CHAR_CENTER );
+ break;
+
+ case FN_FRAME_ALIGN_VERT_CHAR_BOTTOM:
+ aMgr.SetVertOrientation( text::VertOrientation::CHAR_BOTTOM );
+ break;
+
+ case FN_FRAME_ALIGN_VERT_CHAR_TOP:
+ aMgr.SetVertOrientation( text::VertOrientation::CHAR_TOP );
+ break;
+
+ case FN_FRAME_ALIGN_VERT_ROW_CENTER:
+ aMgr.SetVertOrientation( text::VertOrientation::LINE_CENTER );
+ break;
+
+ case FN_FRAME_ALIGN_VERT_ROW_BOTTOM:
+ aMgr.SetVertOrientation( text::VertOrientation::LINE_BOTTOM );
+ break;
+
+ case FN_FRAME_ALIGN_VERT_ROW_TOP:
+ aMgr.SetVertOrientation( text::VertOrientation::LINE_TOP );
+ break;
+ case SID_OBJECT_ALIGN_CENTER :
+ case FN_FRAME_ALIGN_HORZ_CENTER:
+ aMgr.SetHorzOrientation( text::HoriOrientation::CENTER );
+ break;
+ case SID_OBJECT_ALIGN_RIGHT:
+ case FN_FRAME_ALIGN_HORZ_RIGHT:
+ aMgr.SetHorzOrientation( text::HoriOrientation::RIGHT );
+ break;
+ case SID_OBJECT_ALIGN_LEFT:
+ case FN_FRAME_ALIGN_HORZ_LEFT:
+ aMgr.SetHorzOrientation( text::HoriOrientation::LEFT );
+ break;
+
+ case FN_SET_FRM_POSITION:
+ {
+ aMgr.SetAbsPos(((SfxPointItem &)pArgs->Get
+ (FN_SET_FRM_POSITION)).GetValue());
+ }
+ break;
+ case SID_ATTR_BRUSH:
+ {
+ if(pArgs)
+ {
+ aMgr.SetAttrSet( *pArgs );
+ bCopyToFmt = TRUE;
+ }
+ }
+ break;
+ case SID_ATTR_ULSPACE:
+ case SID_ATTR_LRSPACE:
+ {
+ if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(GetPool().GetWhich(nSlot), FALSE, &pItem))
+ {
+ aMgr.SetAttrSet( *pArgs );
+ if(SID_ATTR_ULSPACE == nSlot && SID_ATTR_ULSPACE == nSlot)
+ bCopyToFmt = TRUE;
+ }
+ }
+ break;
+ case FN_FORMAT_FRAME_DLG:
+ {
+ const int nSel = rSh.GetSelectionType();
+ if (nSel & nsSelectionType::SEL_GRF)
+ {
+ rSh.GetView().GetViewFrame()->GetDispatcher()->Execute(FN_FORMAT_GRAFIC_DLG);
+ bUpdateMgr = FALSE;
+ }
+ else
+ {
+ SfxItemSet aSet(GetPool(), RES_FRMATR_BEGIN, RES_FRMATR_END-1,
+ SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
+ FN_GET_PRINT_AREA, FN_GET_PRINT_AREA,
+ SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
+ SID_ATTR_BRUSH, SID_ATTR_BRUSH,
+ SID_ATTR_LRSPACE, SID_ATTR_ULSPACE,
+ FN_SURROUND, FN_HORI_ORIENT,
+ FN_SET_FRM_NAME, FN_SET_FRM_NAME,
+ FN_KEEP_ASPECT_RATIO, FN_KEEP_ASPECT_RATIO,
+ SID_DOCFRAME, SID_DOCFRAME,
+ SID_HTML_MODE, SID_HTML_MODE,
+ FN_SET_FRM_ALT_NAME, FN_SET_FRM_ALT_NAME,
+ FN_PARAM_CHAIN_PREVIOUS, FN_PARAM_CHAIN_NEXT,
+ 0);
+
+ const SwViewOption* pVOpt = rSh.GetViewOptions();
+ if(nSel & nsSelectionType::SEL_OLE)
+ {
+ aSet.Put(SfxBoolItem(FN_KEEP_ASPECT_RATIO,
+ pVOpt->IsKeepRatio()));
+ }
+ aSet.Put(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(GetView().GetDocShell())));
+ aSet.Put(SfxStringItem(FN_SET_FRM_NAME, rSh.GetFlyName()));
+ if( nSel & nsSelectionType::SEL_OLE )
+ {
+ // --> OD 2009-07-13 #i73249#
+// aSet.Put(SfxStringItem(FN_SET_FRM_ALT_NAME, rSh.GetAlternateText()));
+ aSet.Put( SfxStringItem( FN_SET_FRM_ALT_NAME, rSh.GetObjTitle() ) );
+ // <--
+ }
+
+ const SwRect &rPg = rSh.GetAnyCurRect(RECT_PAGE);
+ SwFmtFrmSize aFrmSize(ATT_VAR_SIZE, rPg.Width(), rPg.Height());
+ aFrmSize.SetWhich(GetPool().GetWhich(SID_ATTR_PAGE_SIZE));
+ aSet.Put(aFrmSize);
+
+ const SwRect &rPr = rSh.GetAnyCurRect(RECT_PAGE_PRT);
+ SwFmtFrmSize aPrtSize(ATT_VAR_SIZE, rPr.Width(), rPr.Height());
+ aPrtSize.SetWhich(GetPool().GetWhich(FN_GET_PRINT_AREA));
+ aSet.Put(aPrtSize);
+
+ aSet.Put(aMgr.GetAttrSet());
+ aSet.SetParent( aMgr.GetAttrSet().GetParent() );
+
+ // Bei %-Werten Groesse initialisieren
+ SwFmtFrmSize& rSize = (SwFmtFrmSize&)aSet.Get(RES_FRM_SIZE);
+ if (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff)
+ rSize.SetWidth(rSh.GetAnyCurRect(RECT_FLY_EMBEDDED).Width());
+ if (rSize.GetHeightPercent() && rSize.GetHeightPercent() != 0xff)
+ rSize.SetHeight(rSh.GetAnyCurRect(RECT_FLY_EMBEDDED).Height());
+
+ UINT16 nDefPage = 0;
+ if(pArgs && pArgs->GetItemState(FN_FORMAT_FRAME_DLG, FALSE, &pItem) == SFX_ITEM_SET)
+ nDefPage = ((SfxUInt16Item *)pItem)->GetValue();
+
+ aSet.Put(SfxFrameItem( SID_DOCFRAME, &GetView().GetViewFrame()->GetTopFrame()));
+ FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, &GetView()));
+ SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< UINT16 >(eMetric) ));
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ DBG_ASSERT(pFact, "Dialogdiet fail!");
+ SfxAbstractTabDialog* pDlg = pFact->CreateFrmTabDialog( DLG_FRM_STD,
+ GetView().GetViewFrame(),
+ GetView().GetWindow(),
+ aSet, FALSE,
+ nSel & nsSelectionType::SEL_GRF ? DLG_FRM_GRF :
+ nSel & nsSelectionType::SEL_OLE ? DLG_FRM_OLE :
+ DLG_FRM_STD,
+ FALSE,
+ nDefPage);
+ DBG_ASSERT(pDlg, "Dialogdiet fail!");
+
+ if ( pDlg->Execute() )
+ {
+ const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
+ if(pOutSet)
+ {
+ rReq.Done(*pOutSet);
+ if(nSel & nsSelectionType::SEL_OLE &&
+ SFX_ITEM_SET == pOutSet->GetItemState(FN_KEEP_ASPECT_RATIO, TRUE, &pItem))
+ {
+ SwViewOption aUsrPref( *pVOpt );
+ aUsrPref.SetKeepRatio(((const SfxBoolItem*)pItem)->GetValue());
+ SW_MOD()->ApplyUsrPref(aUsrPref, &GetView());
+ }
+ if (SFX_ITEM_SET == pOutSet->GetItemState(FN_SET_FRM_ALT_NAME, TRUE, &pItem))
+ {
+ // --> OD 2009-07-13 #i73249#
+// rSh.SetAlternateText(((const SfxStringItem*)pItem)->GetValue());
+ rSh.SetObjTitle(((const SfxStringItem*)pItem)->GetValue());
+ // <--
+ }
+ // Vorlagen-AutoUpdate
+ SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
+ if(pFmt && pFmt->IsAutoUpdateFmt())
+ {
+ rSh.AutoUpdateFrame(pFmt, *pOutSet);
+ // alles, dass das Format nicht kann, muss hart
+ // gesetzt werden
+ if(SFX_ITEM_SET == pOutSet->GetItemState(FN_SET_FRM_NAME, FALSE, &pItem))
+ rSh.SetFlyName(((SfxStringItem*)pItem)->GetValue());
+ SfxItemSet aShellSet(GetPool(), RES_FRM_SIZE, RES_FRM_SIZE,
+ RES_SURROUND, RES_SURROUND,
+ RES_ANCHOR, RES_ANCHOR,
+ RES_VERT_ORIENT,RES_HORI_ORIENT,
+ 0);
+ aShellSet.Put(*pOutSet);
+ aMgr.SetAttrSet(aShellSet);
+ if(SFX_ITEM_SET == pOutSet->GetItemState(FN_SET_FRM_NAME, FALSE, &pItem))
+ rSh.SetFlyName(((SfxStringItem*)pItem)->GetValue());
+ }
+ else
+ aMgr.SetAttrSet( *pOutSet );
+
+ const SwFrmFmt* pCurrFlyFmt = rSh.GetFlyFrmFmt();
+ if(SFX_ITEM_SET ==
+ pOutSet->GetItemState(FN_PARAM_CHAIN_PREVIOUS,
+ FALSE, &pItem))
+ {
+ rSh.HideChainMarker();
+
+ String sPrevName =
+ ((const SfxStringItem*)pItem)->GetValue();
+ const SwFmtChain &rChain = pCurrFlyFmt->GetChain();
+ //needs cast - no non-const method available
+ SwFlyFrmFmt* pFlyFmt =
+ (SwFlyFrmFmt*)rChain.GetPrev();
+ if(pFlyFmt)
+ {
+ if (pFlyFmt->GetName() != sPrevName)
+ {
+ rSh.Unchain(*pFlyFmt);
+ }
+ else
+ sPrevName.Erase();
+ }
+
+ if(sPrevName.Len())
+ {
+ //needs cast - no non-const method available
+ SwFrmFmt* pPrevFmt = (SwFrmFmt*)
+ lcl_GetFrmFmtByName(rSh, sPrevName);
+ DBG_ASSERT(pPrevFmt, "No frame found!");
+ if(pPrevFmt)
+ {
+ rSh.Chain(*pPrevFmt, *pCurrFlyFmt);
+ }
+ }
+ rSh.SetChainMarker();
+ }
+ if(SFX_ITEM_SET ==
+ pOutSet->GetItemState(FN_PARAM_CHAIN_NEXT, FALSE,
+ &pItem))
+ {
+ rSh.HideChainMarker();
+ String sNextName =
+ ((const SfxStringItem*)pItem)->GetValue();
+ const SwFmtChain &rChain = pCurrFlyFmt->GetChain();
+ //needs cast - no non-const method available
+ SwFlyFrmFmt* pFlyFmt =
+ (SwFlyFrmFmt*)rChain.GetNext();
+ if(pFlyFmt)
+ {
+ if (pFlyFmt->GetName() != sNextName)
+ {
+ rSh.Unchain(*((SwFlyFrmFmt*) pCurrFlyFmt));
+ }
+ else
+ sNextName.Erase();
+ }
+
+ if(sNextName.Len())
+ {
+ //needs cast - no non-const method available
+ SwFrmFmt* pNextFmt = (SwFrmFmt*)
+ lcl_GetFrmFmtByName(rSh, sNextName);
+ DBG_ASSERT(pNextFmt, "No frame found!");
+ if(pNextFmt)
+ {
+ rSh.Chain(*(SwFrmFmt*)
+ pCurrFlyFmt, *pNextFmt);
+ }
+ }
+ rSh.SetChainMarker();
+ }
+ }
+ }
+ else
+ bUpdateMgr = FALSE;
+ delete pDlg;
+ }
+ }
+ break;
+ case FN_FRAME_MIRROR_ON_EVEN_PAGES:
+ {
+ SwFmtHoriOrient aHori(aMgr.GetHoriOrient());
+ BOOL bMirror = !aHori.IsPosToggle();
+ aHori.SetPosToggle(bMirror);
+ SfxItemSet aSet(GetPool(), RES_HORI_ORIENT, RES_HORI_ORIENT);
+ aSet.Put(aHori);
+ aMgr.SetAttrSet(aSet);
+ bCopyToFmt = TRUE;
+ rReq.SetReturnValue(SfxBoolItem(nSlot, bMirror));
+ }
+ break;
+ // --> OD 2009-07-14 #i73249#
+ case FN_TITLE_DESCRIPTION_SHAPE:
+ {
+ bUpdateMgr = FALSE;
+ SdrView* pSdrView = rSh.GetDrawViewWithValidMarkList();
+ if ( pSdrView &&
+ pSdrView->GetMarkedObjectCount() == 1 )
+ {
+ String aDescription(rSh.GetObjDescription());
+ String aTitle(rSh.GetObjTitle());
+
+ SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
+ OSL_ENSURE(pFact, "Dialogdiet fail!");
+ AbstractSvxObjectTitleDescDialog* pDlg =
+ pFact->CreateSvxObjectTitleDescDialog( NULL,
+ aTitle,
+ aDescription );
+ OSL_ENSURE(pDlg, "Dialogdiet fail!");
+
+ if ( pDlg->Execute() == RET_OK )
+ {
+ pDlg->GetDescription(aDescription);
+ pDlg->GetTitle(aTitle);
+
+ rSh.SetObjDescription(aDescription);
+ rSh.SetObjTitle(aTitle);
+ }
+
+ delete pDlg;
+ }
+ }
+ break;
+ // <--
+ default:
+ ASSERT( !this, "falscher Dispatcher" );
+ return;
+ }
+ // Vorlagen-AutoUpdate
+ SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
+ if ( bUpdateMgr )
+ {
+ if(bCopyToFmt && pFmt && pFmt->IsAutoUpdateFmt())
+ {
+ rSh.AutoUpdateFrame(pFmt, aMgr.GetAttrSet());
+ }
+ else
+ aMgr.UpdateFlyFrm();
+ }
+
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+void SwFrameShell::GetState(SfxItemSet& rSet)
+{
+ SwWrtShell &rSh = GetShell();
+ BOOL bHtmlMode = 0 != ::GetHtmlMode(rSh.GetView().GetDocShell());
+ if (rSh.IsFrmSelected())
+ {
+ SfxItemSet aSet( rSh.GetAttrPool(),
+ RES_LR_SPACE, RES_UL_SPACE,
+ RES_PROTECT, RES_HORI_ORIENT,
+ RES_OPAQUE, RES_OPAQUE,
+ RES_PRINT, RES_OPAQUE,
+ 0 );
+ rSh.GetFlyFrmAttr( aSet );
+
+ BOOL bProtect = rSh.IsSelObjProtected(FLYPROTECT_POS);
+ BOOL bParentCntProt = rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
+
+ bProtect |= bParentCntProt;
+
+ const USHORT eFrmType = rSh.GetFrmType(0,TRUE);
+ SwFlyFrmAttrMgr aMgr( FALSE, &rSh, FRMMGR_TYPE_NONE );
+
+ SfxWhichIter aIter( rSet );
+ USHORT nWhich = aIter.FirstWhich();
+ while ( nWhich )
+ {
+ switch ( nWhich )
+ {
+ case RES_FRM_SIZE:
+ {
+ SwFmtFrmSize aSz(aMgr.GetFrmSize());
+ rSet.Put(aSz);
+ }
+ break;
+ case RES_VERT_ORIENT:
+ case RES_HORI_ORIENT:
+ case SID_ATTR_ULSPACE:
+ case SID_ATTR_LRSPACE:
+ case RES_LR_SPACE:
+ case RES_UL_SPACE:
+ case RES_PROTECT:
+ case RES_OPAQUE:
+ case RES_PRINT:
+ case RES_SURROUND:
+ {
+ rSet.Put(aSet.Get(GetPool().GetWhich(nWhich), TRUE ));
+ }
+ break;
+ case SID_OBJECT_ALIGN_LEFT :
+ case SID_OBJECT_ALIGN_CENTER :
+ case SID_OBJECT_ALIGN_RIGHT :
+ case FN_FRAME_ALIGN_HORZ_CENTER:
+ case FN_FRAME_ALIGN_HORZ_RIGHT:
+ case FN_FRAME_ALIGN_HORZ_LEFT:
+ if ( (eFrmType & FRMTYPE_FLY_INCNT) ||
+ bProtect ||
+ (nWhich == FN_FRAME_ALIGN_HORZ_CENTER || nWhich == SID_OBJECT_ALIGN_CENTER)&& bHtmlMode )
+ rSet.DisableItem( nWhich );
+ break;
+ case FN_FRAME_ALIGN_VERT_ROW_TOP:
+ case FN_FRAME_ALIGN_VERT_ROW_CENTER:
+ case FN_FRAME_ALIGN_VERT_ROW_BOTTOM:
+ case FN_FRAME_ALIGN_VERT_CHAR_TOP:
+ case FN_FRAME_ALIGN_VERT_CHAR_CENTER:
+ case FN_FRAME_ALIGN_VERT_CHAR_BOTTOM:
+ if ( !(eFrmType & FRMTYPE_FLY_INCNT) || bProtect
+ || bHtmlMode && FN_FRAME_ALIGN_VERT_CHAR_BOTTOM == nWhich )
+ rSet.DisableItem( nWhich );
+ break;
+
+ case SID_OBJECT_ALIGN_UP :
+ case SID_OBJECT_ALIGN_MIDDLE :
+ case SID_OBJECT_ALIGN_DOWN :
+
+ case FN_FRAME_ALIGN_VERT_TOP:
+ case FN_FRAME_ALIGN_VERT_CENTER:
+ case FN_FRAME_ALIGN_VERT_BOTTOM:
+ if ( bProtect || bHtmlMode && eFrmType & FRMTYPE_FLY_ATCNT)
+ rSet.DisableItem( nWhich );
+ else
+ {
+ USHORT nId = 0;
+ if (eFrmType & FRMTYPE_FLY_INCNT)
+ {
+ switch (nWhich)
+ {
+ case SID_OBJECT_ALIGN_UP :
+ case FN_FRAME_ALIGN_VERT_TOP:
+ nId = STR_TOP_BASE; break;
+ case SID_OBJECT_ALIGN_MIDDLE :
+ case FN_FRAME_ALIGN_VERT_CENTER:
+ nId = STR_CENTER_BASE; break;
+ case SID_OBJECT_ALIGN_DOWN :
+ case FN_FRAME_ALIGN_VERT_BOTTOM:
+ if(!bHtmlMode)
+ nId = STR_BOTTOM_BASE;
+ else
+ rSet.DisableItem( nWhich );
+ break;
+ }
+ }
+ else
+ {
+ if (nWhich != FN_FRAME_ALIGN_VERT_TOP &&
+ nWhich != SID_OBJECT_ALIGN_UP )
+ {
+ if (aMgr.GetAnchor() == FLY_AT_FLY)
+ {
+ const SwFrmFmt* pFmt = rSh.IsFlyInFly();
+ if (pFmt)
+ {
+ const SwFmtFrmSize& rFrmSz = pFmt->GetFrmSize();
+ if (rFrmSz.GetHeightSizeType() != ATT_FIX_SIZE)
+ {
+ rSet.DisableItem( nWhich );
+ break;
+ }
+ }
+ }
+ }
+ switch (nWhich)
+ {
+ case SID_OBJECT_ALIGN_UP :
+ case FN_FRAME_ALIGN_VERT_TOP:
+ nId = STR_TOP; break;
+ case SID_OBJECT_ALIGN_MIDDLE:
+ case FN_FRAME_ALIGN_VERT_CENTER:
+ nId = STR_CENTER_VERT; break;
+ case SID_OBJECT_ALIGN_DOWN:
+ case FN_FRAME_ALIGN_VERT_BOTTOM:
+ nId = STR_BOTTOM; break;
+ }
+ }
+ if ( nId )
+ rSet.Put( SfxStringItem( nWhich, SW_RES(nId) ));
+ }
+ break;
+ case SID_HYPERLINK_GETLINK:
+ {
+ String sURL;
+ SvxHyperlinkItem aHLinkItem;
+ const SfxPoolItem* pItem;
+
+ SfxItemSet aURLSet(GetPool(), RES_URL, RES_URL);
+ rSh.GetFlyFrmAttr( aURLSet );
+
+ if(SFX_ITEM_SET == aURLSet.GetItemState(RES_URL, TRUE, &pItem))
+ {
+ const SwFmtURL* pFmtURL = (const SwFmtURL*)pItem;
+ aHLinkItem.SetURL(pFmtURL->GetURL());
+ aHLinkItem.SetTargetFrame(pFmtURL->GetTargetFrameName());
+ aHLinkItem.SetName(rSh.GetFlyName());
+ }
+
+ aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() |
+ (bHtmlMode ? HLINK_HTMLMODE : 0)));
+
+ rSet.Put(aHLinkItem);
+ }
+ break;
+
+ case FN_FRAME_CHAIN:
+ {
+ const int nSel = rSh.GetSelectionType();
+ if (nSel & nsSelectionType::SEL_GRF || nSel & nsSelectionType::SEL_OLE)
+ rSet.DisableItem( FN_FRAME_CHAIN );
+ else
+ {
+ const SwFrmFmt *pFmt = rSh.GetFlyFrmFmt();
+ if ( bParentCntProt || rSh.GetView().GetEditWin().GetApplyTemplate() ||
+ !pFmt || pFmt->GetChain().GetNext() )
+ {
+ rSet.DisableItem( FN_FRAME_CHAIN );
+ }
+ else
+ {
+ BOOL bChainMode = rSh.GetView().GetEditWin().IsChainMode();
+ rSet.Put( SfxBoolItem( FN_FRAME_CHAIN, bChainMode ) );
+ }
+ }
+ }
+ break;
+ case FN_FRAME_UNCHAIN:
+ {
+ const int nSel = rSh.GetSelectionType();
+ if (nSel & nsSelectionType::SEL_GRF || nSel & nsSelectionType::SEL_OLE)
+ rSet.DisableItem( FN_FRAME_UNCHAIN );
+ else
+ {
+ const SwFrmFmt *pFmt = rSh.GetFlyFrmFmt();
+ if ( bParentCntProt || rSh.GetView().GetEditWin().GetApplyTemplate() ||
+ !pFmt || !pFmt->GetChain().GetNext() )
+ {
+ rSet.DisableItem( FN_FRAME_UNCHAIN );
+ }
+ }
+ }
+ break;
+ case SID_FRAME_TO_TOP:
+ case SID_FRAME_TO_BOTTOM:
+ case FN_FRAME_UP:
+ case FN_FRAME_DOWN:
+ if ( bParentCntProt )
+ rSet.DisableItem( nWhich );
+ break;
+ case FN_FORMAT_FRAME_DLG:
+ {
+ const int nSel = rSh.GetSelectionType();
+ if ( bParentCntProt || nSel & nsSelectionType::SEL_GRF)
+ rSet.DisableItem( nWhich );
+ }
+ break;
+ // --> OD 2009-07-07 #i73249#
+ case FN_TITLE_DESCRIPTION_SHAPE:
+ {
+ SwWrtShell &rWrtSh = GetShell();
+ SdrView* pSdrView = rWrtSh.GetDrawViewWithValidMarkList();
+ if ( !pSdrView ||
+ pSdrView->GetMarkedObjectCount() != 1 )
+ {
+ rSet.DisableItem( nWhich );
+ }
+
+ }
+ break;
+ // <--
+ default:
+ /* do nothing */;
+ break;
+ }
+ nWhich = aIter.NextWhich();
+ }
+ }
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Ctor fuer FrameShell
+ --------------------------------------------------------------------*/
+
+
+SwFrameShell::SwFrameShell(SwView &_rView) :
+ SwBaseShell( _rView )
+{
+ SetName(String::CreateFromAscii("Frame"));
+ SetHelpId(SW_FRAMESHELL);
+
+ /* #96392# Use this to announce it is the frame shell who creates the
+ selection. */
+ SwTransferable::CreateSelection( _rView.GetWrtShell(), (ViewShell *) this );
+}
+
+SwFrameShell::~SwFrameShell()
+{
+ /* #96392# Only clear the selection if it was this frame shell who created
+ it. */
+ SwTransferable::ClearSelection( GetShell(), (ViewShell *) this );
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+
+void SwFrameShell::ExecFrameStyle(SfxRequest& rReq)
+{
+ SwWrtShell &rSh = GetShell();
+ BOOL bDefault = FALSE;
+ if (!rSh.IsFrmSelected())
+ return;
+
+ // Erst Default-BoxItem aus Pool holen. Wenn ungleich normalem Boxitem,
+ // dann ist es bereits geaendert worden (neues ist kein Default).
+ const SvxBoxItem* pPoolBoxItem = (const SvxBoxItem*)::GetDfltAttr(RES_BOX);
+
+ const SfxItemSet *pArgs = rReq.GetArgs();
+ SfxItemSet aFrameSet(rSh.GetAttrPool(), RES_BOX, RES_BOX);
+
+ rSh.GetFlyFrmAttr( aFrameSet );
+ const SvxBoxItem& rBoxItem = (const SvxBoxItem&)aFrameSet.Get(RES_BOX);
+
+ if (pPoolBoxItem == &rBoxItem)
+ bDefault = TRUE;
+
+ SvxBoxItem aBoxItem(rBoxItem);
+
+ SvxBorderLine aBorderLine;
+ const SfxPoolItem *pItem = 0;
+
+ if(pArgs) //irgendein Controller kann auch mal nichts liefern #48169#
+ {
+ switch (rReq.GetSlot())
+ {
+ case SID_ATTR_BORDER:
+ {
+ if (pArgs->GetItemState(RES_BOX, TRUE, &pItem) == SFX_ITEM_SET)
+ {
+ SvxBoxItem aNewBox(*((SvxBoxItem *)pItem));
+ const SvxBorderLine* pBorderLine;
+
+ if ((pBorderLine = aBoxItem.GetTop()) != NULL)
+ lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
+ if ((pBorderLine = aBoxItem.GetBottom()) != NULL)
+ lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
+ if ((pBorderLine = aBoxItem.GetLeft()) != NULL)
+ lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
+ if ((pBorderLine = aBoxItem.GetRight()) != NULL)
+ lcl_FrmGetMaxLineWidth(pBorderLine, aBorderLine);
+
+ if(aBorderLine.GetOutWidth() == 0)
+ {
+ aBorderLine.SetInWidth(0);
+ aBorderLine.SetOutWidth(DEF_LINE_WIDTH_0);
+ aBorderLine.SetDistance(0);
+ }
+ //Distance nur setzen, wenn der Request vom Controller kommt
+
+ if(!StarBASIC::IsRunning())
+ {
+ aNewBox.SetDistance( rBoxItem.GetDistance() );
+ }
+
+ aBoxItem = aNewBox;
+ SvxBorderLine aDestBorderLine;
+
+ if ((pBorderLine = aBoxItem.GetTop()) != NULL)
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
+ if ((pBorderLine = aBoxItem.GetBottom()) != NULL)
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
+ if ((pBorderLine = aBoxItem.GetLeft()) != NULL)
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
+ if ((pBorderLine = aBoxItem.GetRight()) != NULL)
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
+ }
+ }
+ break;
+
+ case SID_FRAME_LINESTYLE:
+ {
+ if (pArgs->GetItemState(SID_FRAME_LINESTYLE, FALSE, &pItem) == SFX_ITEM_SET)
+ {
+ const SvxLineItem* pLineItem =
+ (const SvxLineItem*)pItem;
+
+ if ( pLineItem->GetLine() )
+ {
+ aBorderLine = *(pLineItem->GetLine());
+
+ if (!aBoxItem.GetTop() && !aBoxItem.GetBottom() &&
+ !aBoxItem.GetLeft() && !aBoxItem.GetRight())
+ {
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
+ }
+ else
+ {
+ if( aBoxItem.GetTop() )
+ {
+ aBorderLine.SetColor( aBoxItem.GetTop()->GetColor() );
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
+ }
+ if( aBoxItem.GetBottom() )
+ {
+ aBorderLine.SetColor( aBoxItem.GetBottom()->GetColor());
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
+ }
+ if( aBoxItem.GetLeft() )
+ {
+ aBorderLine.SetColor( aBoxItem.GetLeft()->GetColor());
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
+ }
+ if( aBoxItem.GetRight() )
+ {
+ aBorderLine.SetColor(aBoxItem.GetRight()->GetColor());
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
+ }
+ }
+ }
+ else
+ {
+ aBoxItem.SetLine(0, BOX_LINE_TOP);
+ aBoxItem.SetLine(0, BOX_LINE_BOTTOM);
+ aBoxItem.SetLine(0, BOX_LINE_LEFT);
+ aBoxItem.SetLine(0, BOX_LINE_RIGHT);
+ }
+ }
+ }
+ break;
+
+ case SID_FRAME_LINECOLOR:
+ {
+ if (pArgs->GetItemState(SID_FRAME_LINECOLOR, FALSE, &pItem) == SFX_ITEM_SET)
+ {
+ const Color& rNewColor = ((const SvxColorItem*)pItem)->GetValue();
+
+ if (!aBoxItem.GetTop() && !aBoxItem.GetBottom() &&
+ !aBoxItem.GetLeft() && !aBoxItem.GetRight())
+ {
+ aBorderLine.SetColor( rNewColor );
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_TOP);
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_BOTTOM);
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_LEFT);
+ aBoxItem.SetLine(&aBorderLine, BOX_LINE_RIGHT);
+ }
+ else
+ {
+ if ( aBoxItem.GetTop() )
+ ((SvxBorderLine*)aBoxItem.GetTop())->SetColor( rNewColor );
+ if ( aBoxItem.GetBottom() )
+ ((SvxBorderLine*)aBoxItem.GetBottom())->SetColor( rNewColor );
+ if ( aBoxItem.GetLeft() )
+ ((SvxBorderLine*)aBoxItem.GetLeft())->SetColor( rNewColor );
+ if ( aBoxItem.GetRight() )
+ ((SvxBorderLine*)aBoxItem.GetRight())->SetColor( rNewColor );
+ }
+ }
+ }
+ break;
+ }
+ }
+ if (bDefault && (aBoxItem.GetTop() || aBoxItem.GetBottom() ||
+ aBoxItem.GetLeft() || aBoxItem.GetRight()))
+ {
+ aBoxItem.SetDistance(MIN_BORDER_DIST);
+ }
+ aFrameSet.Put( aBoxItem );
+ // Vorlagen-AutoUpdate
+ SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
+ if(pFmt && pFmt->IsAutoUpdateFmt())
+ {
+ rSh.AutoUpdateFrame(pFmt, aFrameSet);
+ }
+ else
+ rSh.SetFlyFrmAttr( aFrameSet );
+
+}
+
+
+
+void lcl_FrmGetMaxLineWidth(const SvxBorderLine* pBorderLine, SvxBorderLine& rBorderLine)
+{
+ if(pBorderLine->GetInWidth() > rBorderLine.GetInWidth())
+ rBorderLine.SetInWidth(pBorderLine->GetInWidth());
+
+ if(pBorderLine->GetOutWidth() > rBorderLine.GetOutWidth())
+ rBorderLine.SetOutWidth(pBorderLine->GetOutWidth());
+
+ if(pBorderLine->GetDistance() > rBorderLine.GetDistance())
+ rBorderLine.SetDistance(pBorderLine->GetDistance());
+
+ rBorderLine.SetColor(pBorderLine->GetColor());
+}
+
+
+
+void SwFrameShell::GetLineStyleState(SfxItemSet &rSet)
+{
+ SwWrtShell &rSh = GetShell();
+ BOOL bParentCntProt = rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0;
+
+ if (bParentCntProt)
+ {
+ if (rSh.IsFrmSelected())
+ rSet.DisableItem( SID_FRAME_LINECOLOR );
+
+ rSet.DisableItem( SID_ATTR_BORDER );
+ rSet.DisableItem( SID_FRAME_LINESTYLE );
+ }
+ else
+ {
+ if (rSh.IsFrmSelected())
+ {
+ SfxItemSet aFrameSet( rSh.GetAttrPool(), RES_BOX, RES_BOX );
+
+ rSh.GetFlyFrmAttr(aFrameSet);
+
+ const SvxBorderLine* pLine = ((const SvxBoxItem&)aFrameSet.Get(RES_BOX)).GetTop();
+ rSet.Put(SvxColorItem(pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR));
+ }
+ }
+}
+
+void SwFrameShell::StateInsert(SfxItemSet &rSet)
+{
+ const int nSel = GetShell().GetSelectionType();
+
+ if ((nSel & nsSelectionType::SEL_GRF) || (nSel & nsSelectionType::SEL_OLE))
+ rSet.DisableItem(FN_INSERT_FRAME);
+}