xref: /AOO41X/main/sw/source/ui/fldui/fldedt.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sw.hxx"
30*cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION
31*cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION
32*cdf0e10cSrcweir #endif
33*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
34*cdf0e10cSrcweir #include <sfx2/basedlgs.hxx>
35*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
36*cdf0e10cSrcweir #include <sfx2/request.hxx>
37*cdf0e10cSrcweir #include <sfx2/app.hxx>
38*cdf0e10cSrcweir #include <svx/optgenrl.hxx>
39*cdf0e10cSrcweir #include <docufld.hxx>
40*cdf0e10cSrcweir #ifndef _VIEW_HXX
41*cdf0e10cSrcweir #include <view.hxx>
42*cdf0e10cSrcweir #endif
43*cdf0e10cSrcweir #include <dbfld.hxx>
44*cdf0e10cSrcweir #include <wrtsh.hxx>
45*cdf0e10cSrcweir #ifndef _FLDDB_HXX
46*cdf0e10cSrcweir #include <flddb.hxx>
47*cdf0e10cSrcweir #endif
48*cdf0e10cSrcweir #ifndef _FLDDINF_HXX
49*cdf0e10cSrcweir #include <flddinf.hxx>
50*cdf0e10cSrcweir #endif
51*cdf0e10cSrcweir #ifndef _FLDVAR_HXX
52*cdf0e10cSrcweir #include <fldvar.hxx>
53*cdf0e10cSrcweir #endif
54*cdf0e10cSrcweir #ifndef _FLDDOK_HXX
55*cdf0e10cSrcweir #include <flddok.hxx>
56*cdf0e10cSrcweir #endif
57*cdf0e10cSrcweir #ifndef _FLDFUNC_HXX
58*cdf0e10cSrcweir #include <fldfunc.hxx>
59*cdf0e10cSrcweir #endif
60*cdf0e10cSrcweir #ifndef _FLDREF_HXX
61*cdf0e10cSrcweir #include <fldref.hxx>
62*cdf0e10cSrcweir #endif
63*cdf0e10cSrcweir #include <fldedt.hxx>
64*cdf0e10cSrcweir #include <crsskip.hxx>
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir #ifndef _CMDID_H
68*cdf0e10cSrcweir #include <cmdid.h>
69*cdf0e10cSrcweir #endif
70*cdf0e10cSrcweir #ifndef _HELPID_H
71*cdf0e10cSrcweir #include <helpid.h>
72*cdf0e10cSrcweir #endif
73*cdf0e10cSrcweir #ifndef _GLOBALS_HRC
74*cdf0e10cSrcweir #include <globals.hrc>
75*cdf0e10cSrcweir #endif
76*cdf0e10cSrcweir #ifndef _FLDUI_HRC
77*cdf0e10cSrcweir #include <fldui.hrc>
78*cdf0e10cSrcweir #endif
79*cdf0e10cSrcweir #include "swabstdlg.hxx"
80*cdf0e10cSrcweir #include "dialog.hrc"
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir #include <com/sun/star/document/XDocumentProperties.hpp>
83*cdf0e10cSrcweir #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir namespace swui
87*cdf0e10cSrcweir {
88*cdf0e10cSrcweir 	SwAbstractDialogFactory * GetFactory();
89*cdf0e10cSrcweir }
90*cdf0e10cSrcweir 
91*cdf0e10cSrcweir /*--------------------------------------------------------------------
92*cdf0e10cSrcweir 	Beschreibung:
93*cdf0e10cSrcweir  --------------------------------------------------------------------*/
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir SwFldEditDlg::SwFldEditDlg(SwView& rVw) :
96*cdf0e10cSrcweir 	SfxSingleTabDialog(&rVw.GetViewFrame()->GetWindow(), 0, 0),
97*cdf0e10cSrcweir 	pSh			(rVw.GetWrtShellPtr()),
98*cdf0e10cSrcweir 	aPrevBT		(this, SW_RES(BTN_FLDEDT_PREV)),
99*cdf0e10cSrcweir     aNextBT     (this, SW_RES(BTN_FLDEDT_NEXT)),
100*cdf0e10cSrcweir     aAddressBT  (this, SW_RES(PB_FLDEDT_ADDRESS))
101*cdf0e10cSrcweir {
102*cdf0e10cSrcweir 	SwFldMgr aMgr(pSh);
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir 	SwField *pCurFld = aMgr.GetCurFld();
105*cdf0e10cSrcweir 	if(!pCurFld)
106*cdf0e10cSrcweir 		return;
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir 	pSh->SetCareWin(this);
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir     /* #108536# Only create selection if there is none
111*cdf0e10cSrcweir         already. Normalize PaM instead of swapping. */
112*cdf0e10cSrcweir     if ( ! pSh->HasSelection() )
113*cdf0e10cSrcweir         pSh->Right(CRSR_SKIP_CHARS, sal_True, 1, sal_False );
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir 	pSh->NormalizePam();
116*cdf0e10cSrcweir 
117*cdf0e10cSrcweir 	sal_uInt16 nGroup = aMgr.GetGroup(sal_False, pCurFld->GetTypeId(), pCurFld->GetSubType());
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir 	CreatePage(nGroup);
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir 	GetOKButton()->SetClickHdl(LINK(this, SwFldEditDlg, OKHdl));
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir 	// Buttons selbst positionieren, da sie sonst bei unterschiedlichen
124*cdf0e10cSrcweir 	// Fontgroessen im Wald stehen, und da PB im SingleTabDlg feste Pixelgroessen
125*cdf0e10cSrcweir 	// fuer seine Buttons und die Dialogbreite verwendet.
126*cdf0e10cSrcweir 	aPrevBT.SetPosPixel(Point(GetOKButton()->GetPosPixel().X(), aPrevBT.GetPosPixel().Y()));
127*cdf0e10cSrcweir     sal_uInt16 nWidth = static_cast< sal_uInt16 >(GetOKButton()->GetOutputSize().Width() / 2 - 3);
128*cdf0e10cSrcweir 	Size aNewSize(LogicToPixel(Size(nWidth, GetOKButton()->GetOutputSize().Height())));
129*cdf0e10cSrcweir 	aPrevBT.SetSizePixel(aNewSize);
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir 	aNextBT.SetSizePixel(aPrevBT.GetSizePixel());
132*cdf0e10cSrcweir 
133*cdf0e10cSrcweir 	long nXPos = GetOKButton()->GetPosPixel().X() + GetOKButton()->GetSizePixel().Width()
134*cdf0e10cSrcweir 					- aNextBT.GetSizePixel().Width() - 1;
135*cdf0e10cSrcweir 	aNextBT.SetPosPixel(Point(nXPos, aNextBT.GetPosPixel().Y()));
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir 	aAddressBT.SetPosPixel(Point(GetOKButton()->GetPosPixel().X(), aAddressBT.GetPosPixel().Y()));
138*cdf0e10cSrcweir 	aAddressBT.SetSizePixel(GetOKButton()->GetSizePixel());
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir 	aPrevBT.SetClickHdl(LINK(this, SwFldEditDlg, NextPrevHdl));
141*cdf0e10cSrcweir 	aNextBT.SetClickHdl(LINK(this, SwFldEditDlg, NextPrevHdl));
142*cdf0e10cSrcweir 
143*cdf0e10cSrcweir 	aAddressBT.SetClickHdl(LINK(this, SwFldEditDlg, AddressHdl));
144*cdf0e10cSrcweir 	aAddressBT.SetHelpId(HID_FLDEDT_ADDRESS);
145*cdf0e10cSrcweir 
146*cdf0e10cSrcweir 	Init();
147*cdf0e10cSrcweir }
148*cdf0e10cSrcweir 
149*cdf0e10cSrcweir /*--------------------------------------------------------------------
150*cdf0e10cSrcweir 	Beschreibung: Controlls initialisieren
151*cdf0e10cSrcweir  --------------------------------------------------------------------*/
152*cdf0e10cSrcweir 
153*cdf0e10cSrcweir void SwFldEditDlg::Init()
154*cdf0e10cSrcweir {
155*cdf0e10cSrcweir     SwFldPage* pTabPage = (SwFldPage*)GetTabPage();
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir     if( pTabPage )
158*cdf0e10cSrcweir 	{
159*cdf0e10cSrcweir         SwFldMgr& rMgr = pTabPage->GetFldMgr();
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir 		SwField *pCurFld = rMgr.GetCurFld();
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir 		if(!pCurFld)
164*cdf0e10cSrcweir 			return;
165*cdf0e10cSrcweir 
166*cdf0e10cSrcweir 		// Traveling nur bei mehr als einem Feld
167*cdf0e10cSrcweir 		pSh->StartAction();
168*cdf0e10cSrcweir 		pSh->CreateCrsr();
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir 		sal_Bool bMove = rMgr.GoNext();
171*cdf0e10cSrcweir 		if( bMove )
172*cdf0e10cSrcweir 			rMgr.GoPrev();
173*cdf0e10cSrcweir 		aNextBT.Enable(bMove);
174*cdf0e10cSrcweir 
175*cdf0e10cSrcweir 		if( 0 != ( bMove = rMgr.GoPrev() ) )
176*cdf0e10cSrcweir 			rMgr.GoNext();
177*cdf0e10cSrcweir 		aPrevBT.Enable( bMove );
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir 		if (pCurFld->GetTypeId() == TYP_EXTUSERFLD)
180*cdf0e10cSrcweir 			aAddressBT.Show();
181*cdf0e10cSrcweir 
182*cdf0e10cSrcweir 		pSh->DestroyCrsr();
183*cdf0e10cSrcweir 		pSh->EndAction();
184*cdf0e10cSrcweir 	}
185*cdf0e10cSrcweir 
186*cdf0e10cSrcweir 	GetOKButton()->Enable( !pSh->IsReadOnlyAvailable() ||
187*cdf0e10cSrcweir 						   !pSh->HasReadonlySel() );
188*cdf0e10cSrcweir }
189*cdf0e10cSrcweir 
190*cdf0e10cSrcweir /*--------------------------------------------------------------------
191*cdf0e10cSrcweir 	Beschreibung:
192*cdf0e10cSrcweir  --------------------------------------------------------------------*/
193*cdf0e10cSrcweir 
194*cdf0e10cSrcweir SfxTabPage* SwFldEditDlg::CreatePage(sal_uInt16 nGroup)
195*cdf0e10cSrcweir {
196*cdf0e10cSrcweir 	// TabPage erzeugen
197*cdf0e10cSrcweir     SfxTabPage* pTabPage = 0;
198*cdf0e10cSrcweir 	const char* pHelpId = 0;
199*cdf0e10cSrcweir 
200*cdf0e10cSrcweir 	switch (nGroup)
201*cdf0e10cSrcweir 	{
202*cdf0e10cSrcweir 		case GRP_DOC:
203*cdf0e10cSrcweir             pTabPage = SwFldDokPage::Create(this, *(SfxItemSet*)0);
204*cdf0e10cSrcweir 			pHelpId = HID_EDIT_FLD_DOK;
205*cdf0e10cSrcweir 			break;
206*cdf0e10cSrcweir 		case GRP_FKT:
207*cdf0e10cSrcweir             pTabPage = SwFldFuncPage::Create(this, *(SfxItemSet*)0);
208*cdf0e10cSrcweir 			pHelpId = HID_EDIT_FLD_FUNC;
209*cdf0e10cSrcweir 			break;
210*cdf0e10cSrcweir 		case GRP_REF:
211*cdf0e10cSrcweir             pTabPage = SwFldRefPage::Create(this, *(SfxItemSet*)0);
212*cdf0e10cSrcweir 			pHelpId = HID_EDIT_FLD_REF;
213*cdf0e10cSrcweir 			break;
214*cdf0e10cSrcweir 		case GRP_REG:
215*cdf0e10cSrcweir 			{
216*cdf0e10cSrcweir 				SfxObjectShell* pDocSh = SfxObjectShell::Current();
217*cdf0e10cSrcweir 				SfxItemSet* pSet = new SfxItemSet( pDocSh->GetPool(), SID_DOCINFO, SID_DOCINFO );
218*cdf0e10cSrcweir                 using namespace ::com::sun::star;
219*cdf0e10cSrcweir                 uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
220*cdf0e10cSrcweir                     pDocSh->GetModel(), uno::UNO_QUERY_THROW);
221*cdf0e10cSrcweir                 uno::Reference<document::XDocumentProperties> xDocProps
222*cdf0e10cSrcweir                     = xDPS->getDocumentProperties();
223*cdf0e10cSrcweir                 uno::Reference< beans::XPropertySet > xUDProps(
224*cdf0e10cSrcweir                     xDocProps->getUserDefinedProperties(),
225*cdf0e10cSrcweir                     uno::UNO_QUERY_THROW);
226*cdf0e10cSrcweir //                uno::Reference< beans::XPropertySetInfo > xSetInfo
227*cdf0e10cSrcweir //                    = xUDProps->getPropertySetInfo();
228*cdf0e10cSrcweir //                const uno::Sequence< beans::Property > props
229*cdf0e10cSrcweir //                    = xSetInfo->getProperties();
230*cdf0e10cSrcweir //                uno::Sequence< ::rtl::OUString > names(props.getLength());
231*cdf0e10cSrcweir //                for (sal_Int32 i = 0; i < props.getLength(); ++i) {
232*cdf0e10cSrcweir //                    names[i] = props[i].Name;
233*cdf0e10cSrcweir //                }
234*cdf0e10cSrcweir                 pSet->Put( SfxUnoAnyItem( SID_DOCINFO, uno::makeAny(xUDProps) ) );
235*cdf0e10cSrcweir 		        pTabPage = SwFldDokInfPage::Create(this, *pSet);
236*cdf0e10cSrcweir 				pHelpId = HID_EDIT_FLD_DOKINF;
237*cdf0e10cSrcweir 				break;
238*cdf0e10cSrcweir 			}
239*cdf0e10cSrcweir 		case GRP_DB:
240*cdf0e10cSrcweir             pTabPage = SwFldDBPage::Create(this, *(SfxItemSet*)0);
241*cdf0e10cSrcweir             static_cast<SwFldDBPage*>(pTabPage)->SetWrtShell(*pSh);
242*cdf0e10cSrcweir 			pHelpId = HID_EDIT_FLD_DB;
243*cdf0e10cSrcweir 			break;
244*cdf0e10cSrcweir 		case GRP_VAR:
245*cdf0e10cSrcweir             pTabPage = SwFldVarPage::Create(this, *(SfxItemSet*)0);
246*cdf0e10cSrcweir 			pHelpId = HID_EDIT_FLD_VAR;
247*cdf0e10cSrcweir 			break;
248*cdf0e10cSrcweir 
249*cdf0e10cSrcweir 	}
250*cdf0e10cSrcweir 
251*cdf0e10cSrcweir     pTabPage->SetHelpId(pHelpId);
252*cdf0e10cSrcweir     static_cast<SwFldPage*>(pTabPage)->SetWrtShell(pSh);
253*cdf0e10cSrcweir 
254*cdf0e10cSrcweir     SetTabPage(pTabPage);
255*cdf0e10cSrcweir 
256*cdf0e10cSrcweir 	String sTitle(GetText());
257*cdf0e10cSrcweir 	sTitle.Insert(String::CreateFromAscii(": "), 0);
258*cdf0e10cSrcweir 	sTitle.Insert(SW_RESSTR(STR_FLD_EDIT_DLG), 0);
259*cdf0e10cSrcweir 	SetText(sTitle);
260*cdf0e10cSrcweir 
261*cdf0e10cSrcweir     return pTabPage;
262*cdf0e10cSrcweir }
263*cdf0e10cSrcweir 
264*cdf0e10cSrcweir /*--------------------------------------------------------------------
265*cdf0e10cSrcweir 	Beschreibung:
266*cdf0e10cSrcweir  --------------------------------------------------------------------*/
267*cdf0e10cSrcweir 
268*cdf0e10cSrcweir SwFldEditDlg::~SwFldEditDlg()
269*cdf0e10cSrcweir {
270*cdf0e10cSrcweir 	pSh->SetCareWin(NULL);
271*cdf0e10cSrcweir 	pSh->EnterStdMode();
272*cdf0e10cSrcweir }
273*cdf0e10cSrcweir 
274*cdf0e10cSrcweir /*--------------------------------------------------------------------
275*cdf0e10cSrcweir 	Beschreibung:
276*cdf0e10cSrcweir  --------------------------------------------------------------------*/
277*cdf0e10cSrcweir 
278*cdf0e10cSrcweir void SwFldEditDlg::EnableInsert(sal_Bool bEnable)
279*cdf0e10cSrcweir {
280*cdf0e10cSrcweir 	if( bEnable && pSh->IsReadOnlyAvailable() && pSh->HasReadonlySel() )
281*cdf0e10cSrcweir 		bEnable = sal_False;
282*cdf0e10cSrcweir 	GetOKButton()->Enable( bEnable );
283*cdf0e10cSrcweir }
284*cdf0e10cSrcweir 
285*cdf0e10cSrcweir /*--------------------------------------------------------------------
286*cdf0e10cSrcweir 	Beschreibung:
287*cdf0e10cSrcweir  --------------------------------------------------------------------*/
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir void SwFldEditDlg::InsertHdl()
290*cdf0e10cSrcweir {
291*cdf0e10cSrcweir 	GetOKButton()->Click();
292*cdf0e10cSrcweir }
293*cdf0e10cSrcweir 
294*cdf0e10cSrcweir /*--------------------------------------------------------------------
295*cdf0e10cSrcweir 	 Beschreibung: Aendern des Feldes anstossen
296*cdf0e10cSrcweir  --------------------------------------------------------------------*/
297*cdf0e10cSrcweir 
298*cdf0e10cSrcweir IMPL_LINK( SwFldEditDlg, OKHdl, Button *, EMPTYARG )
299*cdf0e10cSrcweir {
300*cdf0e10cSrcweir 	if (GetOKButton()->IsEnabled())
301*cdf0e10cSrcweir 	{
302*cdf0e10cSrcweir         SfxTabPage* pTabPage = GetTabPage();
303*cdf0e10cSrcweir         if (pTabPage)
304*cdf0e10cSrcweir 		{
305*cdf0e10cSrcweir             pTabPage->FillItemSet(*(SfxItemSet*)0);
306*cdf0e10cSrcweir 
307*cdf0e10cSrcweir 		}
308*cdf0e10cSrcweir 		EndDialog( RET_OK );
309*cdf0e10cSrcweir 	}
310*cdf0e10cSrcweir 
311*cdf0e10cSrcweir 	return 0;
312*cdf0e10cSrcweir }
313*cdf0e10cSrcweir 
314*cdf0e10cSrcweir /*--------------------------------------------------------------------
315*cdf0e10cSrcweir 	Beschreibung:
316*cdf0e10cSrcweir  --------------------------------------------------------------------*/
317*cdf0e10cSrcweir 
318*cdf0e10cSrcweir short SwFldEditDlg::Execute()
319*cdf0e10cSrcweir {
320*cdf0e10cSrcweir 	// Ohne TabPage kein Dialog
321*cdf0e10cSrcweir 	return GetTabPage() ? Dialog::Execute() : RET_CANCEL;
322*cdf0e10cSrcweir }
323*cdf0e10cSrcweir 
324*cdf0e10cSrcweir /*--------------------------------------------------------------------
325*cdf0e10cSrcweir 	Beschreibung: Traveling zwishen Feldern gleichen Typs
326*cdf0e10cSrcweir  --------------------------------------------------------------------*/
327*cdf0e10cSrcweir 
328*cdf0e10cSrcweir IMPL_LINK( SwFldEditDlg, NextPrevHdl, Button *, pButton )
329*cdf0e10cSrcweir {
330*cdf0e10cSrcweir 	sal_Bool bNext = pButton == &aNextBT;
331*cdf0e10cSrcweir 
332*cdf0e10cSrcweir 	pSh->EnterStdMode();
333*cdf0e10cSrcweir 
334*cdf0e10cSrcweir 	SwFieldType *pOldTyp = 0;
335*cdf0e10cSrcweir     SwFldPage* pTabPage = (SwFldPage*)GetTabPage();
336*cdf0e10cSrcweir 
337*cdf0e10cSrcweir 	//#112462# FillItemSet may delete the current field
338*cdf0e10cSrcweir 	//that's why it has to be called before accessing the current field
339*cdf0e10cSrcweir 	if( GetOKButton()->IsEnabled() )
340*cdf0e10cSrcweir         pTabPage->FillItemSet(*(SfxItemSet*)0);
341*cdf0e10cSrcweir 
342*cdf0e10cSrcweir     SwFldMgr& rMgr = pTabPage->GetFldMgr();
343*cdf0e10cSrcweir 	SwField *pCurFld = rMgr.GetCurFld();
344*cdf0e10cSrcweir 	if (pCurFld->GetTypeId() == TYP_DBFLD)
345*cdf0e10cSrcweir 		pOldTyp = (SwDBFieldType*)pCurFld->GetTyp();
346*cdf0e10cSrcweir 
347*cdf0e10cSrcweir 	rMgr.GoNextPrev( bNext, pOldTyp );
348*cdf0e10cSrcweir 	pCurFld = rMgr.GetCurFld();
349*cdf0e10cSrcweir 
350*cdf0e10cSrcweir     /* #108536# Only create selection if there is none
351*cdf0e10cSrcweir         already. Normalize PaM instead of swapping. */
352*cdf0e10cSrcweir     if ( ! pSh->HasSelection() )
353*cdf0e10cSrcweir         pSh->Right(CRSR_SKIP_CHARS, sal_True, 1, sal_False );
354*cdf0e10cSrcweir 
355*cdf0e10cSrcweir 	pSh->NormalizePam();
356*cdf0e10cSrcweir 
357*cdf0e10cSrcweir 	sal_uInt16 nGroup = rMgr.GetGroup(sal_False, pCurFld->GetTypeId(), pCurFld->GetSubType());
358*cdf0e10cSrcweir 
359*cdf0e10cSrcweir     if (nGroup != pTabPage->GetGroup())
360*cdf0e10cSrcweir         pTabPage = (SwFldPage*)CreatePage(nGroup);
361*cdf0e10cSrcweir 
362*cdf0e10cSrcweir     pTabPage->EditNewField();
363*cdf0e10cSrcweir 
364*cdf0e10cSrcweir 	Init();
365*cdf0e10cSrcweir 
366*cdf0e10cSrcweir 	return 0;
367*cdf0e10cSrcweir }
368*cdf0e10cSrcweir 
369*cdf0e10cSrcweir /*--------------------------------------------------------------------
370*cdf0e10cSrcweir 	Beschreibung:
371*cdf0e10cSrcweir  --------------------------------------------------------------------*/
372*cdf0e10cSrcweir 
373*cdf0e10cSrcweir IMPL_LINK( SwFldEditDlg, AddressHdl, PushButton *, EMPTYARG )
374*cdf0e10cSrcweir {
375*cdf0e10cSrcweir     SwFldPage* pTabPage = (SwFldPage*)GetTabPage();
376*cdf0e10cSrcweir     SwFldMgr& rMgr = pTabPage->GetFldMgr();
377*cdf0e10cSrcweir 	SwField *pCurFld = rMgr.GetCurFld();
378*cdf0e10cSrcweir 
379*cdf0e10cSrcweir 	SfxItemSet aSet( pSh->GetAttrPool(),
380*cdf0e10cSrcweir 						SID_FIELD_GRABFOCUS, SID_FIELD_GRABFOCUS,
381*cdf0e10cSrcweir 						0L );
382*cdf0e10cSrcweir 
383*cdf0e10cSrcweir 	sal_uInt16 nEditPos = UNKNOWN_EDIT;
384*cdf0e10cSrcweir 
385*cdf0e10cSrcweir 	switch(pCurFld->GetSubType())
386*cdf0e10cSrcweir 	{
387*cdf0e10cSrcweir 		case EU_FIRSTNAME:	nEditPos = FIRSTNAME_EDIT;	break;
388*cdf0e10cSrcweir 		case EU_NAME:   	nEditPos = LASTNAME_EDIT;	break;
389*cdf0e10cSrcweir 		case EU_SHORTCUT: 	nEditPos = SHORTNAME_EDIT;	break;
390*cdf0e10cSrcweir 		case EU_COMPANY:  	nEditPos = COMPANY_EDIT;	break;
391*cdf0e10cSrcweir 		case EU_STREET:		nEditPos = STREET_EDIT;		break;
392*cdf0e10cSrcweir 		case EU_TITLE:  	nEditPos = TITLE_EDIT;		break;
393*cdf0e10cSrcweir 		case EU_POSITION: 	nEditPos = POSITION_EDIT;	break;
394*cdf0e10cSrcweir 		case EU_PHONE_PRIVATE:nEditPos = TELPRIV_EDIT;	break;
395*cdf0e10cSrcweir 		case EU_PHONE_COMPANY:nEditPos = TELCOMPANY_EDIT;	break;
396*cdf0e10cSrcweir 		case EU_FAX:		nEditPos = FAX_EDIT;		break;
397*cdf0e10cSrcweir 		case EU_EMAIL:		nEditPos = EMAIL_EDIT;		break;
398*cdf0e10cSrcweir 		case EU_COUNTRY:	nEditPos = COUNTRY_EDIT;	break;
399*cdf0e10cSrcweir 		case EU_ZIP:		nEditPos = PLZ_EDIT;		break;
400*cdf0e10cSrcweir 		case EU_CITY:		nEditPos = CITY_EDIT;		break;
401*cdf0e10cSrcweir 		case EU_STATE:		nEditPos = STATE_EDIT;		break;
402*cdf0e10cSrcweir 
403*cdf0e10cSrcweir 		default:			nEditPos = UNKNOWN_EDIT;	break;
404*cdf0e10cSrcweir 
405*cdf0e10cSrcweir 	}
406*cdf0e10cSrcweir 	aSet.Put(SfxUInt16Item(SID_FIELD_GRABFOCUS, nEditPos));
407*cdf0e10cSrcweir     SwAbstractDialogFactory* pFact = swui::GetFactory();
408*cdf0e10cSrcweir     DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
409*cdf0e10cSrcweir 
410*cdf0e10cSrcweir     SfxAbstractDialog* pDlg = pFact->CreateSfxDialog( this, aSet,
411*cdf0e10cSrcweir 		pSh->GetView().GetViewFrame()->GetFrame().GetFrameInterface(),
412*cdf0e10cSrcweir 		RC_DLG_ADDR );
413*cdf0e10cSrcweir     DBG_ASSERT(pDlg, "Dialogdiet fail!");
414*cdf0e10cSrcweir 	if(RET_OK == pDlg->Execute())
415*cdf0e10cSrcweir     {
416*cdf0e10cSrcweir     	pSh->UpdateFlds( *pCurFld );
417*cdf0e10cSrcweir     }
418*cdf0e10cSrcweir     delete pDlg;
419*cdf0e10cSrcweir 	return 0;
420*cdf0e10cSrcweir }
421*cdf0e10cSrcweir 
422*cdf0e10cSrcweir 
423