1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 27 28 #include <sfx2/request.hxx> 29 #include <sfx2/viewfrm.hxx> 30 #include <sfx2/objface.hxx> 31 32 #include <fldmgr.hxx> 33 #include <expfld.hxx> 34 #include <modcfg.hxx> 35 36 #include <tools/shl.hxx> 37 38 #include "swmodule.hxx" 39 #include "view.hxx" 40 #include "wview.hxx" 41 #include "wrtsh.hxx" 42 #include "cmdid.h" 43 #include "caption.hxx" 44 #include "poolfmt.hxx" 45 #include "edtwin.hxx" 46 #include <SwStyleNameMapper.hxx> 47 48 #include "swabstdlg.hxx" 49 #include "frmui.hrc" 50 #include "misc.hrc" 51 52 #include "view.hrc" 53 54 extern String* pOldGrfCat; 55 extern String* pOldTabCat; 56 extern String* pOldFrmCat; 57 extern String* pOldDrwCat; 58 59 /* -----------------06.11.98 13:45------------------- 60 * 61 * --------------------------------------------------*/ 62 63 void SwView::ExecDlgExt(SfxRequest &rReq) 64 { 65 Window *pMDI = &GetViewFrame()->GetWindow(); 66 67 switch ( rReq.GetSlot() ) 68 { 69 case FN_INSERT_CAPTION: 70 { 71 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); 72 DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!"); 73 74 VclAbstractDialog* pDialog = pFact->CreateSwCaptionDialog( pMDI, *this, DLG_CAPTION ); 75 DBG_ASSERT(pDialog, "Dialogdiet fail!"); 76 if ( pDialog ) 77 { 78 pDialog->Execute(); 79 delete pDialog; 80 } 81 break; 82 } 83 case FN_EDIT_FOOTNOTE: 84 { 85 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); 86 DBG_ASSERT(pFact, "Dialogdiet fail!"); 87 AbstractInsFootNoteDlg* pDlg = pFact->CreateInsFootNoteDlg( DLG_INS_FOOTNOTE, 88 pMDI, *pWrtShell, sal_True ); 89 DBG_ASSERT(pDlg, "Dialogdiet fail!"); 90 91 pDlg->SetHelpId(GetStaticInterface()->GetSlot(FN_EDIT_FOOTNOTE)->GetCommand()); 92 pDlg->SetText( SW_RESSTR(STR_EDIT_FOOTNOTE) ); 93 pDlg->Execute(); 94 delete pDlg; 95 break; 96 } 97 } 98 } 99 100 /* -----------------06.11.98 14:53------------------- 101 * 102 * --------------------------------------------------*/ 103 104 void SwView::AutoCaption(const sal_uInt16 nType, const SvGlobalName *pOleId) 105 { 106 SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig(); 107 108 sal_Bool bWeb = 0 != PTR_CAST(SwWebView, this); 109 if (pModOpt->IsInsWithCaption(bWeb)) 110 { 111 const InsCaptionOpt *pOpt = pModOpt->GetCapOption(bWeb, (SwCapObjType)nType, pOleId); 112 if (pOpt && pOpt->UseCaption() == sal_True) 113 InsertCaption(pOpt); 114 } 115 } 116 117 /* -----------------06.11.98 12:58------------------- 118 * 119 * --------------------------------------------------*/ 120 121 void SwView::InsertCaption(const InsCaptionOpt *pOpt) 122 { 123 if (!pOpt) 124 return; 125 126 const String &rName = pOpt->GetCategory(); 127 128 // Existiert Pool-Vorlage gleichen Namens? 129 SwWrtShell &rSh = GetWrtShell(); 130 if(rName.Len()) 131 { 132 sal_uInt16 nPoolId = SwStyleNameMapper::GetPoolIdFromUIName(rName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL); 133 if( USHRT_MAX != nPoolId ) 134 rSh.GetTxtCollFromPool(nPoolId); 135 // Pool-Vorlage existiert nicht: Existiert sie am Dokument? 136 else if( !rSh.GetParaStyle(rName) ) 137 { 138 // Sie existiert auch nicht am Dokument: erzeugen 139 SwTxtFmtColl* pDerivedFrom = rSh.GetTxtCollFromPool(RES_POOLCOLL_LABEL); 140 rSh.MakeTxtFmtColl(rName, pDerivedFrom); 141 } 142 } 143 144 SelectionType eType = rSh.GetSelectionType(); 145 if (eType & nsSelectionType::SEL_OLE) 146 eType = nsSelectionType::SEL_GRF; 147 148 // SwLabelType 149 const SwLabelType eT = eType & nsSelectionType::SEL_TBL ? LTYPE_TABLE : 150 eType & nsSelectionType::SEL_FRM ? LTYPE_FLY : 151 eType == nsSelectionType::SEL_TXT ? LTYPE_FLY : 152 eType & nsSelectionType::SEL_DRW ? LTYPE_DRAW : 153 LTYPE_OBJECT; 154 155 SwFldMgr aMgr(&rSh); 156 SwSetExpFieldType* pFldType = 157 (SwSetExpFieldType*)aMgr.GetFldType(RES_SETEXPFLD, rName); 158 if (!pFldType && rName.Len() ) 159 { 160 // Neuen Feldtypen erzeugen 161 SwSetExpFieldType aSwSetExpFieldType(rSh.GetDoc(), rName, nsSwGetSetExpType::GSE_SEQ); 162 aMgr.InsertFldType(aSwSetExpFieldType); 163 pFldType = (SwSetExpFieldType*)aMgr.GetFldType(RES_SETEXPFLD, rName); 164 } 165 166 if (!pOpt->IgnoreSeqOpts()) 167 { 168 if (pFldType) 169 { 170 pFldType->SetDelimiter(pOpt->GetSeparator()); 171 pFldType->SetOutlineLvl( static_cast< sal_uInt8 >(pOpt->GetLevel()) ); 172 } 173 } 174 175 sal_uInt16 nID = USHRT_MAX; 176 SwFieldType* pType = 0; 177 const sal_uInt16 nCount = aMgr.GetFldTypeCount(); 178 if( rName.Len() ) 179 { 180 for (sal_uInt16 i = 0; i < nCount; ++i) 181 { 182 pType = aMgr.GetFldType(USHRT_MAX, i); 183 String aTmpName( pType->GetName() ); 184 if (aTmpName == rName && pType->Which() == RES_SETEXPFLD) 185 { 186 nID = i; 187 break; 188 } 189 } 190 } 191 rSh.StartAllAction(); 192 193 GetWrtShell().InsertLabel( eT, 194 pOpt->GetCaption(), 195 !pOpt->IgnoreSeqOpts() ? aEmptyStr : pOpt->GetSeparator(), 196 pOpt->GetNumSeparator(), 197 !pOpt->GetPos(), 198 nID, 199 pOpt->GetCharacterStyle(), 200 pOpt->CopyAttributes() ); 201 // Nummernformat setzen 202 if(pType) 203 ((SwSetExpFieldType*)pType)->SetSeqFormat(pOpt->GetNumType()); 204 205 rSh.UpdateExpFlds( sal_True ); 206 207 rSh.EndAllAction(); 208 209 if ( rSh.IsFrmSelected() ) 210 { 211 GetEditWin().StopInsFrm(); 212 rSh.EnterSelFrmMode(); 213 } 214 215 // Kategorie merken 216 String** ppStr = 0; 217 if (eType & nsSelectionType::SEL_GRF) 218 ppStr = &pOldGrfCat; 219 else if( eType & nsSelectionType::SEL_TBL) 220 ppStr = &pOldTabCat; 221 else if( eType & nsSelectionType::SEL_FRM) 222 ppStr = &pOldFrmCat; 223 else if( eType == nsSelectionType::SEL_TXT) 224 ppStr = &pOldFrmCat; 225 else if( eType & nsSelectionType::SEL_DRW) 226 ppStr = &pOldDrwCat; 227 228 if( ppStr ) 229 { 230 if( !*ppStr ) 231 *ppStr = new String( rName ); 232 else 233 **ppStr = rName; 234 } 235 } 236 237 238