1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10efeef26fSAndrew Rist *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19efeef26fSAndrew Rist *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir #include <unotools/charclass.hxx>
29cdf0e10cSrcweir #include <editsh.hxx>
30cdf0e10cSrcweir #include <fldbas.hxx>
31cdf0e10cSrcweir #include <doc.hxx>
32cdf0e10cSrcweir #include <docary.hxx>
33cdf0e10cSrcweir #include <fmtfld.hxx>
34cdf0e10cSrcweir #include <txtfld.hxx>
35cdf0e10cSrcweir #include <edimp.hxx>
36cdf0e10cSrcweir #include <dbfld.hxx>
37cdf0e10cSrcweir #include <expfld.hxx>
38cdf0e10cSrcweir #include <flddat.hxx>
39cdf0e10cSrcweir #include <swundo.hxx>
40cdf0e10cSrcweir #include <dbmgr.hxx>
41cdf0e10cSrcweir #include <swddetbl.hxx>
42cdf0e10cSrcweir #include <hints.hxx>
43cdf0e10cSrcweir #include <switerator.hxx>
44cdf0e10cSrcweir #include <fieldhint.hxx>
45cdf0e10cSrcweir
46cdf0e10cSrcweir /*--------------------------------------------------------------------
47cdf0e10cSrcweir Beschreibung: Feldtypen zu einer ResId zaehlen
48cdf0e10cSrcweir wenn 0 alle zaehlen
49cdf0e10cSrcweir --------------------------------------------------------------------*/
50cdf0e10cSrcweir
GetFldTypeCount(sal_uInt16 nResId,sal_Bool bUsed) const51cdf0e10cSrcweir sal_uInt16 SwEditShell::GetFldTypeCount(sal_uInt16 nResId, sal_Bool bUsed ) const
52cdf0e10cSrcweir {
53cdf0e10cSrcweir const SwFldTypes* pFldTypes = GetDoc()->GetFldTypes();
54cdf0e10cSrcweir const sal_uInt16 nSize = pFldTypes->Count();
55cdf0e10cSrcweir
56cdf0e10cSrcweir if(nResId == USHRT_MAX)
57cdf0e10cSrcweir {
58cdf0e10cSrcweir if(!bUsed)
59cdf0e10cSrcweir return nSize;
60cdf0e10cSrcweir else
61cdf0e10cSrcweir {
62cdf0e10cSrcweir sal_uInt16 nUsed = 0;
63cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nSize; i++ )
64cdf0e10cSrcweir {
65cdf0e10cSrcweir if(IsUsed(*(*pFldTypes)[i]))
66cdf0e10cSrcweir nUsed++;
67cdf0e10cSrcweir }
68cdf0e10cSrcweir return nUsed;
69cdf0e10cSrcweir }
70cdf0e10cSrcweir }
71cdf0e10cSrcweir
72cdf0e10cSrcweir // Alle Typen mit gleicher ResId
73cdf0e10cSrcweir sal_uInt16 nIdx = 0;
74cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nSize; ++i)
75cdf0e10cSrcweir { // Gleiche ResId -> Index erhoehen
76cdf0e10cSrcweir SwFieldType& rFldType = *((*pFldTypes)[i]);
77cdf0e10cSrcweir if(rFldType.Which() == nResId)
78cdf0e10cSrcweir nIdx++;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir return nIdx;
81cdf0e10cSrcweir }
82cdf0e10cSrcweir
83cdf0e10cSrcweir /*--------------------------------------------------------------------
84cdf0e10cSrcweir Beschreibung: Feldtypen zu einer ResId finden
85cdf0e10cSrcweir wenn 0 alle finden
86cdf0e10cSrcweir --------------------------------------------------------------------*/
GetFldType(sal_uInt16 nFld,sal_uInt16 nResId,sal_Bool bUsed) const87cdf0e10cSrcweir SwFieldType* SwEditShell::GetFldType(sal_uInt16 nFld, sal_uInt16 nResId, sal_Bool bUsed ) const
88cdf0e10cSrcweir {
89cdf0e10cSrcweir const SwFldTypes* pFldTypes = GetDoc()->GetFldTypes();
90cdf0e10cSrcweir const sal_uInt16 nSize = pFldTypes->Count();
91cdf0e10cSrcweir
92cdf0e10cSrcweir if(nResId == USHRT_MAX && nFld < nSize)
93cdf0e10cSrcweir {
94cdf0e10cSrcweir if(!bUsed)
95cdf0e10cSrcweir return (*pFldTypes)[nFld];
96cdf0e10cSrcweir else
97cdf0e10cSrcweir {
98cdf0e10cSrcweir sal_uInt16 i, nUsed = 0;
99cdf0e10cSrcweir for ( i = 0; i < nSize; i++ )
100cdf0e10cSrcweir {
101cdf0e10cSrcweir if(IsUsed(*(*pFldTypes)[i]))
102cdf0e10cSrcweir {
103cdf0e10cSrcweir if(nUsed == nFld)
104cdf0e10cSrcweir break;
105cdf0e10cSrcweir nUsed++;
106cdf0e10cSrcweir }
107cdf0e10cSrcweir }
108cdf0e10cSrcweir return i < nSize ? (*pFldTypes)[i] : 0;
109cdf0e10cSrcweir }
110cdf0e10cSrcweir }
111cdf0e10cSrcweir
112cdf0e10cSrcweir sal_uInt16 nIdx = 0;
113cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nSize; ++i)
114cdf0e10cSrcweir { // Gleiche ResId -> Index erhoehen
115cdf0e10cSrcweir SwFieldType* pFldType = (*pFldTypes)[i];
116cdf0e10cSrcweir if(pFldType->Which() == nResId)
117cdf0e10cSrcweir {
118cdf0e10cSrcweir if (!bUsed || IsUsed(*pFldType))
119cdf0e10cSrcweir {
120cdf0e10cSrcweir if(nIdx == nFld)
121cdf0e10cSrcweir return pFldType;
122cdf0e10cSrcweir nIdx++;
123cdf0e10cSrcweir }
124cdf0e10cSrcweir }
125cdf0e10cSrcweir }
126cdf0e10cSrcweir return 0;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
129cdf0e10cSrcweir /*--------------------------------------------------------------------
130cdf0e10cSrcweir Beschreibung: Den ersten Typen mit ResId und Namen finden
131cdf0e10cSrcweir --------------------------------------------------------------------*/
GetFldType(sal_uInt16 nResId,const String & rName) const132cdf0e10cSrcweir SwFieldType* SwEditShell::GetFldType(sal_uInt16 nResId, const String& rName) const
133cdf0e10cSrcweir {
134cdf0e10cSrcweir return GetDoc()->GetFldType( nResId, rName, false );
135cdf0e10cSrcweir }
136cdf0e10cSrcweir
137cdf0e10cSrcweir /*--------------------------------------------------------------------
138cdf0e10cSrcweir Beschreibung: Feldtypen loeschen
139cdf0e10cSrcweir --------------------------------------------------------------------*/
RemoveFldType(sal_uInt16 nFld,sal_uInt16 nResId)140cdf0e10cSrcweir void SwEditShell::RemoveFldType(sal_uInt16 nFld, sal_uInt16 nResId)
141cdf0e10cSrcweir {
142cdf0e10cSrcweir if( USHRT_MAX == nResId )
143cdf0e10cSrcweir {
144cdf0e10cSrcweir GetDoc()->RemoveFldType(nFld);
145cdf0e10cSrcweir return;
146cdf0e10cSrcweir }
147cdf0e10cSrcweir
148cdf0e10cSrcweir const SwFldTypes* pFldTypes = GetDoc()->GetFldTypes();
149cdf0e10cSrcweir const sal_uInt16 nSize = pFldTypes->Count();
150cdf0e10cSrcweir sal_uInt16 nIdx = 0;
151cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nSize; ++i )
152cdf0e10cSrcweir // Gleiche ResId -> Index erhoehen
153cdf0e10cSrcweir if( (*pFldTypes)[i]->Which() == nResId &&
154cdf0e10cSrcweir nIdx++ == nFld )
155cdf0e10cSrcweir {
156cdf0e10cSrcweir GetDoc()->RemoveFldType( i );
157cdf0e10cSrcweir return;
158cdf0e10cSrcweir }
159cdf0e10cSrcweir }
160cdf0e10cSrcweir
161cdf0e10cSrcweir /*--------------------------------------------------------------------
162cdf0e10cSrcweir Beschreibung: FieldType ueber Name loeschen
163cdf0e10cSrcweir --------------------------------------------------------------------*/
RemoveFldType(sal_uInt16 nResId,const String & rStr)164cdf0e10cSrcweir void SwEditShell::RemoveFldType(sal_uInt16 nResId, const String& rStr)
165cdf0e10cSrcweir {
166cdf0e10cSrcweir const SwFldTypes* pFldTypes = GetDoc()->GetFldTypes();
167cdf0e10cSrcweir const sal_uInt16 nSize = pFldTypes->Count();
168cdf0e10cSrcweir const CharClass& rCC = GetAppCharClass();
169cdf0e10cSrcweir
170cdf0e10cSrcweir String aTmp( rCC.lower( rStr ));
171cdf0e10cSrcweir
172cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nSize; ++i)
173cdf0e10cSrcweir {
174cdf0e10cSrcweir // Gleiche ResId -> Index erhoehen
175cdf0e10cSrcweir SwFieldType* pFldType = (*pFldTypes)[i];
176cdf0e10cSrcweir if( pFldType->Which() == nResId )
177cdf0e10cSrcweir {
178cdf0e10cSrcweir if( aTmp.Equals( rCC.lower( pFldType->GetName() ) ))
179cdf0e10cSrcweir {
180cdf0e10cSrcweir GetDoc()->RemoveFldType(i);
181cdf0e10cSrcweir return;
182cdf0e10cSrcweir }
183cdf0e10cSrcweir }
184cdf0e10cSrcweir }
185cdf0e10cSrcweir }
186cdf0e10cSrcweir
187cdf0e10cSrcweir
FieldToText(SwFieldType * pType)188cdf0e10cSrcweir void SwEditShell::FieldToText( SwFieldType* pType )
189cdf0e10cSrcweir {
190cdf0e10cSrcweir if( !pType->GetDepends() )
191cdf0e10cSrcweir return;
192cdf0e10cSrcweir
193cdf0e10cSrcweir SET_CURR_SHELL( this );
194cdf0e10cSrcweir StartAllAction();
195cdf0e10cSrcweir StartUndo( UNDO_DELETE );
196cdf0e10cSrcweir Push();
197cdf0e10cSrcweir SwPaM* pPaM = GetCrsr();
198cdf0e10cSrcweir
199cdf0e10cSrcweir SwFieldHint aHint( pPaM );
200cdf0e10cSrcweir SwClientIter aIter( *pType );
2012f121198SMathias Bauer for ( SwClient* pClient = aIter.GoStart(); pClient; pClient = ++aIter )
202cdf0e10cSrcweir {
203cdf0e10cSrcweir pPaM->DeleteMark();
204cdf0e10cSrcweir pClient->SwClientNotifyCall( *pType, aHint );
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
207cdf0e10cSrcweir Pop( sal_False );
208cdf0e10cSrcweir EndAllAction();
209cdf0e10cSrcweir EndUndo( UNDO_DELETE );
210cdf0e10cSrcweir }
211cdf0e10cSrcweir
212cdf0e10cSrcweir /*************************************************************************
213cdf0e10cSrcweir |*
214cdf0e10cSrcweir |* SwEditShell::Insert( SwField )
215cdf0e10cSrcweir |*
216cdf0e10cSrcweir |* Beschreibung an der Cursorposition ein Feld einfuegen
217cdf0e10cSrcweir |* Quelle: vgl. SwEditShell::Insert( String )
218cdf0e10cSrcweir |*
219cdf0e10cSrcweir *************************************************************************/
Insert2(SwField & rFld,const bool bForceExpandHints)220cdf0e10cSrcweir void SwEditShell::Insert2(SwField& rFld, const bool bForceExpandHints)
221cdf0e10cSrcweir {
22269a74367SOliver-Rainer Wittmann SET_CURR_SHELL( this );
22369a74367SOliver-Rainer Wittmann StartAllAction();
22469a74367SOliver-Rainer Wittmann SwFmtFld aFld( rFld );
225cdf0e10cSrcweir
226cdf0e10cSrcweir const SetAttrMode nInsertFlags = (bForceExpandHints)
227cdf0e10cSrcweir ? nsSetAttrMode::SETATTR_FORCEHINTEXPAND
228cdf0e10cSrcweir : nsSetAttrMode::SETATTR_DEFAULT;
229cdf0e10cSrcweir
23069a74367SOliver-Rainer Wittmann FOREACHPAM_START(this)
23169a74367SOliver-Rainer Wittmann const bool bSuccess(GetDoc()->InsertPoolItem(*PCURCRSR, aFld, nInsertFlags));
232cdf0e10cSrcweir ASSERT( bSuccess, "Doc->Insert(Field) failed");
233cdf0e10cSrcweir (void) bSuccess;
23469a74367SOliver-Rainer Wittmann FOREACHPAM_END()
235cdf0e10cSrcweir
23669a74367SOliver-Rainer Wittmann EndAllAction();
237cdf0e10cSrcweir }
238cdf0e10cSrcweir
239cdf0e10cSrcweir
240cdf0e10cSrcweir
241cdf0e10cSrcweir /*************************************************************************
242cdf0e10cSrcweir |*
243cdf0e10cSrcweir |* SwEditShell::UpdateFlds()
244cdf0e10cSrcweir |*
245cdf0e10cSrcweir |* Beschreibung Stehen die PaMs auf Feldern ?
246cdf0e10cSrcweir |* BP 12.05.92
247cdf0e10cSrcweir |*
248cdf0e10cSrcweir *************************************************************************/
lcl_FindInputFld(SwDoc * pDoc,SwField & rFld)249cdf0e10cSrcweir SwTxtFld* lcl_FindInputFld( SwDoc* pDoc, SwField& rFld )
250cdf0e10cSrcweir {
25169a74367SOliver-Rainer Wittmann SwTxtFld* pTFld = 0;
25269a74367SOliver-Rainer Wittmann if( RES_INPUTFLD == rFld.Which() )
25369a74367SOliver-Rainer Wittmann {
25469a74367SOliver-Rainer Wittmann const SfxPoolItem* pItem = NULL;
25569a74367SOliver-Rainer Wittmann const sal_uInt32 nMaxItems =
25669a74367SOliver-Rainer Wittmann pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_INPUTFIELD );
25769a74367SOliver-Rainer Wittmann for( sal_uInt32 n = 0; n < nMaxItems; ++n )
25869a74367SOliver-Rainer Wittmann if( 0 != (pItem = pDoc->GetAttrPool().GetItem2( RES_TXTATR_INPUTFIELD, n ) )
25969a74367SOliver-Rainer Wittmann && ((SwFmtFld*)pItem)->GetField() == &rFld )
26069a74367SOliver-Rainer Wittmann {
26169a74367SOliver-Rainer Wittmann pTFld = ((SwFmtFld*)pItem)->GetTxtFld();
26269a74367SOliver-Rainer Wittmann break;
26369a74367SOliver-Rainer Wittmann }
26469a74367SOliver-Rainer Wittmann }
26569a74367SOliver-Rainer Wittmann else if( RES_SETEXPFLD == rFld.Which()
26669a74367SOliver-Rainer Wittmann && ((SwSetExpField&)rFld).GetInputFlag() )
26769a74367SOliver-Rainer Wittmann {
26869a74367SOliver-Rainer Wittmann const SfxPoolItem* pItem = NULL;
26969a74367SOliver-Rainer Wittmann const sal_uInt32 nMaxItems =
270cdf0e10cSrcweir pDoc->GetAttrPool().GetItemCount2( RES_TXTATR_FIELD );
27169a74367SOliver-Rainer Wittmann for( sal_uInt32 n = 0; n < nMaxItems; ++n )
27269a74367SOliver-Rainer Wittmann if( 0 != (pItem = pDoc->GetAttrPool().GetItem2( RES_TXTATR_FIELD, n ) )
27369a74367SOliver-Rainer Wittmann && ((SwFmtFld*)pItem)->GetField() == &rFld )
27469a74367SOliver-Rainer Wittmann {
27569a74367SOliver-Rainer Wittmann pTFld = ((SwFmtFld*)pItem)->GetTxtFld();
27669a74367SOliver-Rainer Wittmann break;
27769a74367SOliver-Rainer Wittmann }
27869a74367SOliver-Rainer Wittmann }
27969a74367SOliver-Rainer Wittmann return pTFld;
280cdf0e10cSrcweir }
281cdf0e10cSrcweir
UpdateFlds(SwField & rFld)282cdf0e10cSrcweir void SwEditShell::UpdateFlds( SwField &rFld )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir SET_CURR_SHELL( this );
285cdf0e10cSrcweir StartAllAction();
286cdf0e10cSrcweir {
287cdf0e10cSrcweir SwField *pCurFld = 0;
288cdf0e10cSrcweir
289cdf0e10cSrcweir // Wenn es keine Selektionen gibt, gilt der Wert der aktuellen
290cdf0e10cSrcweir // Cursor-Position.
291cdf0e10cSrcweir SwMsgPoolItem* pMsgHnt = 0;
292cdf0e10cSrcweir SwRefMarkFldUpdate aRefMkHt( GetOut() );
293cdf0e10cSrcweir sal_uInt16 nFldWhich = rFld.GetTyp()->Which();
294cdf0e10cSrcweir if( RES_GETREFFLD == nFldWhich )
295cdf0e10cSrcweir pMsgHnt = &aRefMkHt;
296cdf0e10cSrcweir
297cdf0e10cSrcweir SwPaM* pCrsr = GetCrsr();
298cdf0e10cSrcweir SwTxtFld *pTxtFld;
299cdf0e10cSrcweir SwFmtFld *pFmtFld;
300cdf0e10cSrcweir
301cdf0e10cSrcweir if ( pCrsr->GetNext() == pCrsr && !pCrsr->HasMark())
302cdf0e10cSrcweir {
30369a74367SOliver-Rainer Wittmann pTxtFld = GetTxtFldAtPos( pCrsr->Start(), true );
304cdf0e10cSrcweir
305cdf0e10cSrcweir if (!pTxtFld) // #i30221#
306cdf0e10cSrcweir pTxtFld = lcl_FindInputFld( GetDoc(), rFld);
307cdf0e10cSrcweir
308cdf0e10cSrcweir if (pTxtFld != 0)
309cdf0e10cSrcweir GetDoc()->UpdateFld(pTxtFld, rFld, pMsgHnt, sal_True); // #111840#
310cdf0e10cSrcweir }
311cdf0e10cSrcweir
312cdf0e10cSrcweir // bOkay (statt return wg. EndAllAction) wird sal_False,
313cdf0e10cSrcweir // 1) wenn nur ein Pam mehr als ein Feld enthaelt oder
314cdf0e10cSrcweir // 2) bei gemischten Feldtypen
315cdf0e10cSrcweir sal_Bool bOkay = sal_True;
316cdf0e10cSrcweir sal_Bool bTblSelBreak = sal_False;
317cdf0e10cSrcweir
31869a74367SOliver-Rainer Wittmann SwMsgPoolItem aFldHint( RES_TXTATR_FIELD );
319*dec99bbdSOliver-Rainer Wittmann SwMsgPoolItem aAnnotationFldHint( RES_TXTATR_ANNOTATION );
32069a74367SOliver-Rainer Wittmann SwMsgPoolItem aInputFldHint( RES_TXTATR_INPUTFIELD );
321cdf0e10cSrcweir FOREACHPAM_START(this) // fuer jeden PaM
322cdf0e10cSrcweir if( PCURCRSR->HasMark() && bOkay ) // ... mit Selektion
323cdf0e10cSrcweir {
324cdf0e10cSrcweir // Kopie des PaM
325cdf0e10cSrcweir SwPaM aCurPam( *PCURCRSR->GetMark(), *PCURCRSR->GetPoint() );
326cdf0e10cSrcweir SwPaM aPam( *PCURCRSR->GetPoint() );
327cdf0e10cSrcweir
328cdf0e10cSrcweir SwPosition *pCurStt = aCurPam.Start(), *pCurEnd =
329cdf0e10cSrcweir aCurPam.End();
330cdf0e10cSrcweir /*
331cdf0e10cSrcweir * Fuer den Fall, dass zwei aneinanderliegende Felder in einem
332cdf0e10cSrcweir * PaM liegen, hangelt sich aPam portionsweise bis zum Ende.
333cdf0e10cSrcweir * aCurPam wird dabei nach jeder Schleifenrunde verkuerzt.
334cdf0e10cSrcweir * Wenn aCurPam vollstaendig durchsucht wurde, ist Start = End
335cdf0e10cSrcweir * und die Schleife terminiert.
336cdf0e10cSrcweir */
337cdf0e10cSrcweir
338cdf0e10cSrcweir // Suche nach SwTxtFld ...
339cdf0e10cSrcweir while( bOkay
340cdf0e10cSrcweir && pCurStt->nContent != pCurEnd->nContent
34169a74367SOliver-Rainer Wittmann && ( aPam.Find( aFldHint, sal_False, fnMoveForward, &aCurPam )
342*dec99bbdSOliver-Rainer Wittmann || aPam.Find( aAnnotationFldHint, sal_False, fnMoveForward, &aCurPam )
34369a74367SOliver-Rainer Wittmann || aPam.Find( aInputFldHint, sal_False, fnMoveForward, &aCurPam ) ) )
344cdf0e10cSrcweir {
345cdf0e10cSrcweir // wenn nur ein Pam mehr als ein Feld enthaelt ...
346cdf0e10cSrcweir if( aPam.Start()->nContent != pCurStt->nContent )
347cdf0e10cSrcweir bOkay = sal_False;
348cdf0e10cSrcweir
34969a74367SOliver-Rainer Wittmann if( 0 != (pTxtFld = GetTxtFldAtPos( pCurStt, true )) )
350cdf0e10cSrcweir {
351c0286415SOliver-Rainer Wittmann pFmtFld = (SwFmtFld*)&pTxtFld->GetFmtFld();
352c0286415SOliver-Rainer Wittmann pCurFld = pFmtFld->GetField();
353cdf0e10cSrcweir
354cdf0e10cSrcweir // bei gemischten Feldtypen
355cdf0e10cSrcweir if( pCurFld->GetTyp()->Which() !=
356cdf0e10cSrcweir rFld.GetTyp()->Which() )
357cdf0e10cSrcweir bOkay = sal_False;
358cdf0e10cSrcweir
359cdf0e10cSrcweir bTblSelBreak = GetDoc()->UpdateFld(pTxtFld, rFld,
360cdf0e10cSrcweir pMsgHnt, sal_False); // #111840#
361cdf0e10cSrcweir }
362cdf0e10cSrcweir // Der Suchbereich wird um den gefundenen Bereich
363cdf0e10cSrcweir // verkuerzt.
364cdf0e10cSrcweir pCurStt->nContent++;
365cdf0e10cSrcweir }
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
368cdf0e10cSrcweir if( bTblSelBreak ) // wenn Tabellen Selektion und Tabellen-
369cdf0e10cSrcweir break; // Formel aktualisiert wurde -> beenden
370cdf0e10cSrcweir
371cdf0e10cSrcweir FOREACHPAM_END() // fuer jeden PaM
372cdf0e10cSrcweir }
373cdf0e10cSrcweir GetDoc()->SetModified();
374cdf0e10cSrcweir EndAllAction();
375cdf0e10cSrcweir }
376cdf0e10cSrcweir
377cdf0e10cSrcweir /*-----------------13.05.92 10:54-------------------
378cdf0e10cSrcweir Liefert den logischen fuer die Datenbank zurueck
379cdf0e10cSrcweir --------------------------------------------------*/
380cdf0e10cSrcweir
GetDBData() const381cdf0e10cSrcweir SwDBData SwEditShell::GetDBData() const
382cdf0e10cSrcweir {
383cdf0e10cSrcweir return GetDoc()->GetDBData();
384cdf0e10cSrcweir }
385cdf0e10cSrcweir
GetDBDesc() const386cdf0e10cSrcweir const SwDBData& SwEditShell::GetDBDesc() const
387cdf0e10cSrcweir {
388cdf0e10cSrcweir return GetDoc()->GetDBDesc();
389cdf0e10cSrcweir }
390cdf0e10cSrcweir
ChgDBData(const SwDBData & rNewData)391cdf0e10cSrcweir void SwEditShell::ChgDBData(const SwDBData& rNewData)
392cdf0e10cSrcweir {
393cdf0e10cSrcweir GetDoc()->ChgDBData(rNewData);
394cdf0e10cSrcweir }
395cdf0e10cSrcweir
GetAllUsedDB(SvStringsDtor & rDBNameList,SvStringsDtor * pAllDBNames)396cdf0e10cSrcweir void SwEditShell::GetAllUsedDB( SvStringsDtor& rDBNameList,
397cdf0e10cSrcweir SvStringsDtor* pAllDBNames )
398cdf0e10cSrcweir {
399cdf0e10cSrcweir GetDoc()->GetAllUsedDB( rDBNameList, pAllDBNames );
400cdf0e10cSrcweir }
401cdf0e10cSrcweir
ChangeDBFields(const SvStringsDtor & rOldNames,const String & rNewName)402cdf0e10cSrcweir void SwEditShell::ChangeDBFields( const SvStringsDtor& rOldNames,
403cdf0e10cSrcweir const String& rNewName )
404cdf0e10cSrcweir {
405cdf0e10cSrcweir GetDoc()->ChangeDBFields( rOldNames, rNewName );
406cdf0e10cSrcweir }
407cdf0e10cSrcweir
408cdf0e10cSrcweir /*--------------------------------------------------------------------
409cdf0e10cSrcweir Beschreibung: Alle Expression-Felder erneuern
410cdf0e10cSrcweir --------------------------------------------------------------------*/
UpdateExpFlds(sal_Bool bCloseDB)411cdf0e10cSrcweir void SwEditShell::UpdateExpFlds(sal_Bool bCloseDB)
412cdf0e10cSrcweir {
413cdf0e10cSrcweir SET_CURR_SHELL( this );
414cdf0e10cSrcweir StartAllAction();
415cdf0e10cSrcweir GetDoc()->UpdateExpFlds(NULL, true);
416cdf0e10cSrcweir if (bCloseDB)
417cdf0e10cSrcweir GetDoc()->GetNewDBMgr()->CloseAll(); // Alle Datenbankverbindungen dichtmachen
418cdf0e10cSrcweir EndAllAction();
419cdf0e10cSrcweir }
420cdf0e10cSrcweir
GetNewDBMgr() const421cdf0e10cSrcweir SwNewDBMgr* SwEditShell::GetNewDBMgr() const
422cdf0e10cSrcweir {
423cdf0e10cSrcweir return GetDoc()->GetNewDBMgr();
424cdf0e10cSrcweir }
425cdf0e10cSrcweir
426cdf0e10cSrcweir /*--------------------------------------------------------------------
427cdf0e10cSrcweir Beschreibung: Feldtypen einfuegen
428cdf0e10cSrcweir --------------------------------------------------------------------*/
InsertFldType(const SwFieldType & rFldType)429cdf0e10cSrcweir SwFieldType* SwEditShell::InsertFldType(const SwFieldType& rFldType)
430cdf0e10cSrcweir {
431cdf0e10cSrcweir return GetDoc()->InsertFldType(rFldType);
432cdf0e10cSrcweir }
433cdf0e10cSrcweir
LockExpFlds()434cdf0e10cSrcweir void SwEditShell::LockExpFlds()
435cdf0e10cSrcweir {
436cdf0e10cSrcweir GetDoc()->LockExpFlds();
437cdf0e10cSrcweir }
438cdf0e10cSrcweir
UnlockExpFlds()439cdf0e10cSrcweir void SwEditShell::UnlockExpFlds()
440cdf0e10cSrcweir {
441cdf0e10cSrcweir GetDoc()->UnlockExpFlds();
442cdf0e10cSrcweir }
443cdf0e10cSrcweir
444cdf0e10cSrcweir
SetFldUpdateFlags(SwFldUpdateFlags eFlags)445cdf0e10cSrcweir void SwEditShell::SetFldUpdateFlags( SwFldUpdateFlags eFlags )
446cdf0e10cSrcweir {
447cdf0e10cSrcweir getIDocumentSettingAccess()->setFieldUpdateFlags( eFlags );
448cdf0e10cSrcweir }
449cdf0e10cSrcweir
GetFldUpdateFlags(sal_Bool bDocSettings) const450cdf0e10cSrcweir SwFldUpdateFlags SwEditShell::GetFldUpdateFlags(sal_Bool bDocSettings) const
451cdf0e10cSrcweir {
452cdf0e10cSrcweir return getIDocumentSettingAccess()->getFieldUpdateFlags( !bDocSettings );
453cdf0e10cSrcweir }
454cdf0e10cSrcweir
SetFixFields(sal_Bool bOnlyTimeDate,const DateTime * pNewDateTime)455cdf0e10cSrcweir void SwEditShell::SetFixFields( sal_Bool bOnlyTimeDate,
456cdf0e10cSrcweir const DateTime* pNewDateTime )
457cdf0e10cSrcweir {
458cdf0e10cSrcweir SET_CURR_SHELL( this );
459cdf0e10cSrcweir sal_Bool bUnLockView = !IsViewLocked();
460cdf0e10cSrcweir LockView( sal_True );
461cdf0e10cSrcweir StartAllAction();
462cdf0e10cSrcweir GetDoc()->SetFixFields( bOnlyTimeDate, pNewDateTime );
463cdf0e10cSrcweir EndAllAction();
464cdf0e10cSrcweir if( bUnLockView )
465cdf0e10cSrcweir LockView( sal_False );
466cdf0e10cSrcweir }
467cdf0e10cSrcweir
SetLabelDoc(sal_Bool bFlag)468cdf0e10cSrcweir void SwEditShell::SetLabelDoc( sal_Bool bFlag )
469cdf0e10cSrcweir {
470cdf0e10cSrcweir GetDoc()->set(IDocumentSettingAccess::LABEL_DOCUMENT, bFlag );
471cdf0e10cSrcweir }
472cdf0e10cSrcweir
IsLabelDoc() const473cdf0e10cSrcweir sal_Bool SwEditShell::IsLabelDoc() const
474cdf0e10cSrcweir {
475cdf0e10cSrcweir return getIDocumentSettingAccess()->get(IDocumentSettingAccess::LABEL_DOCUMENT);
476cdf0e10cSrcweir }
477cdf0e10cSrcweir /* -----------------------------21.12.99 12:53--------------------------------
478cdf0e10cSrcweir
479cdf0e10cSrcweir ---------------------------------------------------------------------------*/
ChangeAuthorityData(const SwAuthEntry * pNewData)480cdf0e10cSrcweir void SwEditShell::ChangeAuthorityData(const SwAuthEntry* pNewData)
481cdf0e10cSrcweir {
482cdf0e10cSrcweir GetDoc()->ChangeAuthorityData(pNewData);
483cdf0e10cSrcweir }
484cdf0e10cSrcweir /* -----------------------------03.08.2001 12:04------------------------------
485cdf0e10cSrcweir
486cdf0e10cSrcweir ---------------------------------------------------------------------------*/
IsAnyDatabaseFieldInDoc() const487cdf0e10cSrcweir sal_Bool SwEditShell::IsAnyDatabaseFieldInDoc()const
488cdf0e10cSrcweir {
489cdf0e10cSrcweir const SwFldTypes * pFldTypes = GetDoc()->GetFldTypes();
490cdf0e10cSrcweir const sal_uInt16 nSize = pFldTypes->Count();
491cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nSize; ++i)
492cdf0e10cSrcweir {
493cdf0e10cSrcweir SwFieldType& rFldType = *((*pFldTypes)[i]);
494cdf0e10cSrcweir sal_uInt16 nWhich = rFldType.Which();
495cdf0e10cSrcweir if(IsUsed(rFldType))
496cdf0e10cSrcweir {
497cdf0e10cSrcweir switch(nWhich)
498cdf0e10cSrcweir {
499cdf0e10cSrcweir case RES_DBFLD:
500cdf0e10cSrcweir case RES_DBNEXTSETFLD:
501cdf0e10cSrcweir case RES_DBNUMSETFLD:
502cdf0e10cSrcweir case RES_DBSETNUMBERFLD:
503cdf0e10cSrcweir {
504cdf0e10cSrcweir SwIterator<SwFmtFld,SwFieldType> aIter( rFldType );
505cdf0e10cSrcweir SwFmtFld* pFld = aIter.First();
506cdf0e10cSrcweir while(pFld)
507cdf0e10cSrcweir {
508cdf0e10cSrcweir if(pFld->IsFldInDoc())
509cdf0e10cSrcweir return sal_True;
510cdf0e10cSrcweir pFld = aIter.Next();
511cdf0e10cSrcweir }
512cdf0e10cSrcweir }
513cdf0e10cSrcweir break;
514cdf0e10cSrcweir }
515cdf0e10cSrcweir }
516cdf0e10cSrcweir }
517cdf0e10cSrcweir return sal_False;
518cdf0e10cSrcweir }
519