diff options
Diffstat (limited to 'sw/source/uibase/uiview/viewdlg2.cxx')
-rw-r--r-- | sw/source/uibase/uiview/viewdlg2.cxx | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/sw/source/uibase/uiview/viewdlg2.cxx b/sw/source/uibase/uiview/viewdlg2.cxx new file mode 100644 index 000000000000..416f9447ae33 --- /dev/null +++ b/sw/source/uibase/uiview/viewdlg2.cxx @@ -0,0 +1,202 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sfx2/request.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/objface.hxx> +#include <fldmgr.hxx> +#include <expfld.hxx> +#include <modcfg.hxx> + +#include <tools/shl.hxx> + +#include "swmodule.hxx" +#include "view.hxx" +#include "wview.hxx" +#include "wrtsh.hxx" +#include "cmdid.h" +#include "caption.hxx" +#include "poolfmt.hxx" +#include "edtwin.hxx" +#include <SwStyleNameMapper.hxx> + +#include "initui.hxx" +#include "swabstdlg.hxx" +#include "frmui.hrc" +#include "misc.hrc" + +#include "view.hrc" + +#include <boost/scoped_ptr.hpp> + +void SwView::ExecDlgExt(SfxRequest &rReq) +{ + Window *pMDI = &GetViewFrame()->GetWindow(); + + switch ( rReq.GetSlot() ) + { + case FN_INSERT_CAPTION: + { + SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); + OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!"); + + boost::scoped_ptr<VclAbstractDialog> pDialog(pFact->CreateSwCaptionDialog( pMDI, *this, DLG_CAPTION )); + OSL_ENSURE(pDialog, "Dialogdiet fail!"); + if ( pDialog ) + { + pDialog->Execute(); + } + break; + } + case FN_EDIT_FOOTNOTE: + { + SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); + OSL_ENSURE(pFact, "Dialogdiet fail!"); + boost::scoped_ptr<AbstractInsFootNoteDlg> pDlg(pFact->CreateInsFootNoteDlg( + pMDI, *m_pWrtShell, true)); + OSL_ENSURE(pDlg, "Dialogdiet fail!"); + + pDlg->SetHelpId(GetStaticInterface()->GetSlot(FN_EDIT_FOOTNOTE)->GetCommand()); + pDlg->SetText( SW_RESSTR(STR_EDIT_FOOTNOTE) ); + pDlg->Execute(); + break; + } + } +} + +void SwView::AutoCaption(const sal_uInt16 nType, const SvGlobalName *pOleId) +{ + SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig(); + + bool bWeb = 0 != PTR_CAST(SwWebView, this); + if (pModOpt->IsInsWithCaption(bWeb)) + { + const InsCaptionOpt *pOpt = pModOpt->GetCapOption(bWeb, (SwCapObjType)nType, pOleId); + if (pOpt && pOpt->UseCaption()) + InsertCaption(pOpt); + } +} + +void SwView::InsertCaption(const InsCaptionOpt *pOpt) +{ + if (!pOpt) + return; + + const OUString &rName = pOpt->GetCategory(); + + // Is there a pool template with the same name? + SwWrtShell &rSh = GetWrtShell(); + if(!rName.isEmpty()) + { + sal_uInt16 nPoolId = SwStyleNameMapper::GetPoolIdFromUIName(rName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL); + if( USHRT_MAX != nPoolId ) + rSh.GetTxtCollFromPool(nPoolId); + // Pool template does not exist: Does it exist on the document? + else if( !rSh.GetParaStyle(rName) ) + { + // It also does not exist in the document: generate + SwTxtFmtColl* pDerivedFrom = rSh.GetTxtCollFromPool(RES_POOLCOLL_LABEL); + rSh.MakeTxtFmtColl(rName, pDerivedFrom); + } + } + + SelectionType eType = rSh.GetSelectionType(); + if (eType & nsSelectionType::SEL_OLE) + eType = nsSelectionType::SEL_GRF; + + const SwLabelType eT = eType & nsSelectionType::SEL_TBL ? LTYPE_TABLE : + eType & nsSelectionType::SEL_FRM ? LTYPE_FLY : + eType == nsSelectionType::SEL_TXT ? LTYPE_FLY : + eType & nsSelectionType::SEL_DRW ? LTYPE_DRAW : + LTYPE_OBJECT; + + SwFldMgr aMgr(&rSh); + SwSetExpFieldType* pFldType = + (SwSetExpFieldType*)aMgr.GetFldType(RES_SETEXPFLD, rName); + if (!pFldType && !rName.isEmpty() ) + { + // Create new field types + SwSetExpFieldType aSwSetExpFieldType(rSh.GetDoc(), rName, nsSwGetSetExpType::GSE_SEQ); + aMgr.InsertFldType(aSwSetExpFieldType); + pFldType = (SwSetExpFieldType*)aMgr.GetFldType(RES_SETEXPFLD, rName); + } + + if (!pOpt->IgnoreSeqOpts()) + { + if (pFldType) + { + pFldType->SetDelimiter(pOpt->GetSeparator()); + pFldType->SetOutlineLvl( static_cast< sal_uInt8 >(pOpt->GetLevel()) ); + } + } + + sal_uInt16 nID = USHRT_MAX; + SwFieldType* pType = 0; + const sal_uInt16 nCount = aMgr.GetFldTypeCount(); + if( !rName.isEmpty() ) + { + for (sal_uInt16 i = 0; i < nCount; ++i) + { + pType = aMgr.GetFldType(USHRT_MAX, i); + OUString aTmpName( pType->GetName() ); + if (aTmpName == rName && pType->Which() == RES_SETEXPFLD) + { + nID = i; + break; + } + } + } + rSh.StartAllAction(); + + GetWrtShell().InsertLabel( eT, + pOpt->GetCaption(), + !pOpt->IgnoreSeqOpts() ? OUString() : pOpt->GetSeparator(), + pOpt->GetNumSeparator(), + !pOpt->GetPos(), + nID, + pOpt->GetCharacterStyle(), + pOpt->CopyAttributes() ); + // Set Number Format + if(pType) + ((SwSetExpFieldType*)pType)->SetSeqFormat(pOpt->GetNumType()); + + rSh.UpdateExpFlds( true ); + + rSh.EndAllAction(); + + if ( rSh.IsFrmSelected() ) + { + GetEditWin().StopInsFrm(); + rSh.EnterSelFrmMode(); + } + + // rember category + if (eType & nsSelectionType::SEL_GRF) + SetOldGrfCat(rName); + else if( eType & nsSelectionType::SEL_TBL) + SetOldTabCat(rName); + else if( eType & nsSelectionType::SEL_FRM) + SetOldFrmCat(rName); + else if( eType == nsSelectionType::SEL_TXT) + SetOldFrmCat(rName); + else if( eType & nsSelectionType::SEL_DRW) + SetOldDrwCat(rName); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |