xref: /aoo41x/main/sw/source/ui/fldui/flddb.cxx (revision 768779ec)
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 #ifdef SW_DLLIMPLEMENTATION
27cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION
28cdf0e10cSrcweir #endif
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <swmodule.hxx>
32cdf0e10cSrcweir #ifndef _VIEW_HXX
33cdf0e10cSrcweir #include <view.hxx>
34cdf0e10cSrcweir #endif
35cdf0e10cSrcweir #include <wrtsh.hxx>
36cdf0e10cSrcweir #ifndef _GLOBALS_HRC
37cdf0e10cSrcweir #include <globals.hrc>
38cdf0e10cSrcweir #endif
39cdf0e10cSrcweir #include <dbfld.hxx>
40cdf0e10cSrcweir #ifndef _FLDTDLG_HXX
41cdf0e10cSrcweir #include <fldtdlg.hxx>
42cdf0e10cSrcweir #endif
43cdf0e10cSrcweir #include <numrule.hxx>
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #ifndef _FLDTDLG_HRC
46cdf0e10cSrcweir #include <fldtdlg.hrc>
47cdf0e10cSrcweir #endif
48cdf0e10cSrcweir #ifndef _FLDUI_HRC
49cdf0e10cSrcweir #include <fldui.hrc>
50cdf0e10cSrcweir #endif
51cdf0e10cSrcweir #ifndef _FLDDB_HXX
52cdf0e10cSrcweir #include <flddb.hxx>
53cdf0e10cSrcweir #endif
54cdf0e10cSrcweir #include <dbconfig.hxx>
55cdf0e10cSrcweir #ifndef _DBMGR_HXX
56cdf0e10cSrcweir #include <dbmgr.hxx>
57cdf0e10cSrcweir #endif
58cdf0e10cSrcweir 
59cdf0e10cSrcweir #define USER_DATA_VERSION_1 	"1"
60cdf0e10cSrcweir #define USER_DATA_VERSION USER_DATA_VERSION_1
61cdf0e10cSrcweir /*--------------------------------------------------------------------
62cdf0e10cSrcweir 	Beschreibung:
63cdf0e10cSrcweir  --------------------------------------------------------------------*/
64cdf0e10cSrcweir 
SwFldDBPage(Window * pParent,const SfxItemSet & rCoreSet)65cdf0e10cSrcweir SwFldDBPage::SwFldDBPage(Window* pParent, const SfxItemSet& rCoreSet ) :
66cdf0e10cSrcweir 	SwFldPage( pParent, SW_RES( TP_FLD_DB ), rCoreSet ),
67cdf0e10cSrcweir 	aTypeFT		(this, SW_RES(FT_DBTYPE)),
68cdf0e10cSrcweir 	aTypeLB		(this, SW_RES(LB_DBTYPE)),
69cdf0e10cSrcweir 	aSelectionFT(this, SW_RES(FT_DBSELECTION)),
70cdf0e10cSrcweir     aDatabaseTLB(this, SW_RES(TLB_DBLIST), 0, aEmptyStr, sal_False),
71cdf0e10cSrcweir     aAddDBFT(this,      SW_RES(FT_ADDDB)),
72cdf0e10cSrcweir     aAddDBPB(this,      SW_RES(PB_ADDDB)),
73cdf0e10cSrcweir 	aConditionFT(this, SW_RES(FT_DBCONDITION)),
74cdf0e10cSrcweir 	aConditionED(this, SW_RES(ED_DBCONDITION)),
75cdf0e10cSrcweir 	aValueFT	(this, SW_RES(FT_DBSETNUMBER)),
76cdf0e10cSrcweir 	aValueED	(this, SW_RES(ED_DBSETNUMBER)),
77cdf0e10cSrcweir 	aDBFormatRB	(this, SW_RES(RB_DBOWNFORMAT)),
78cdf0e10cSrcweir 	aNewFormatRB(this, SW_RES(RB_DBFORMAT)),
79cdf0e10cSrcweir 	aNumFormatLB(this, SW_RES(LB_DBNUMFORMAT)),
80cdf0e10cSrcweir 	aFormatLB	(this, SW_RES(LB_DBFORMAT)),
81cdf0e10cSrcweir     aFormatFL   (this, SW_RES(FL_DBFORMAT)),
82cdf0e10cSrcweir     aFormatVertFL   (this, SW_RES(FL_DBFORMAT_VERT))
83cdf0e10cSrcweir {
84cdf0e10cSrcweir 	FreeResource();
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 	aOldNumSelectHdl = aNumFormatLB.GetSelectHdl();
87cdf0e10cSrcweir 
88cdf0e10cSrcweir 	aNumFormatLB.SetSelectHdl(LINK(this, SwFldDBPage, NumSelectHdl));
89cdf0e10cSrcweir 	aDatabaseTLB.SetSelectHdl(LINK(this, SwFldDBPage, TreeSelectHdl));
90cdf0e10cSrcweir 	aDatabaseTLB.SetDoubleClickHdl(LINK(this, SwFldDBPage, InsertHdl));
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 	aValueED.SetModifyHdl(LINK(this, SwFldDBPage, ModifyHdl));
93cdf0e10cSrcweir     aAddDBPB.SetClickHdl(LINK(this, SwFldDBPage, AddDBHdl));
94cdf0e10cSrcweir }
95cdf0e10cSrcweir 
96cdf0e10cSrcweir /*--------------------------------------------------------------------
97cdf0e10cSrcweir 	Beschreibung:
98cdf0e10cSrcweir  --------------------------------------------------------------------*/
99cdf0e10cSrcweir 
~SwFldDBPage()100cdf0e10cSrcweir __EXPORT SwFldDBPage::~SwFldDBPage()
101cdf0e10cSrcweir {
102cdf0e10cSrcweir }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir /*--------------------------------------------------------------------
105cdf0e10cSrcweir 	Beschreibung: TabPage initialisieren
106cdf0e10cSrcweir  --------------------------------------------------------------------*/
107cdf0e10cSrcweir 
Reset(const SfxItemSet &)108cdf0e10cSrcweir void __EXPORT SwFldDBPage::Reset(const SfxItemSet&)
109cdf0e10cSrcweir {
110cdf0e10cSrcweir 	Init();	// Allgemeine initialisierung
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 	aTypeLB.SetUpdateMode(sal_False);
113cdf0e10cSrcweir 	sal_uInt16 nOldPos = aTypeLB.GetSelectEntryPos();
114cdf0e10cSrcweir 	sOldDBName = aDatabaseTLB.GetDBName(sOldTableName, sOldColumnName);
115cdf0e10cSrcweir 
116cdf0e10cSrcweir 	aTypeLB.Clear();
117cdf0e10cSrcweir 
118cdf0e10cSrcweir 	sal_uInt16 nPos, nTypeId, i;
119cdf0e10cSrcweir 
120cdf0e10cSrcweir 	if (!IsFldEdit())
121cdf0e10cSrcweir 	{
122cdf0e10cSrcweir 		// TypeListBox initialisieren
123cdf0e10cSrcweir 		const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup());
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 		for(i = rRg.nStart; i < rRg.nEnd; ++i)
126cdf0e10cSrcweir 		{
127cdf0e10cSrcweir 			nTypeId = GetFldMgr().GetTypeId(i);
128cdf0e10cSrcweir 			nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(i));
129cdf0e10cSrcweir             aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
130cdf0e10cSrcweir 		}
131cdf0e10cSrcweir 	}
132cdf0e10cSrcweir 	else
133cdf0e10cSrcweir 	{
134cdf0e10cSrcweir 		nTypeId = GetCurField()->GetTypeId();
135cdf0e10cSrcweir 		nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(GetFldMgr().GetPos(nTypeId)));
136cdf0e10cSrcweir         aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
137cdf0e10cSrcweir 	}
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 	// alte Pos selektieren
140cdf0e10cSrcweir 	if (GetTypeSel() != LISTBOX_ENTRY_NOTFOUND)
141cdf0e10cSrcweir 		aTypeLB.SelectEntryPos(GetTypeSel());
142cdf0e10cSrcweir 
143cdf0e10cSrcweir 	aFormatLB.Clear();
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 	sal_uInt16 nSize = GetFldMgr().GetFormatCount(TYP_DBSETNUMBERFLD, sal_False, IsFldDlgHtmlMode());
146cdf0e10cSrcweir 	for( i = 0; i < nSize; ++i )
147cdf0e10cSrcweir 	{
148cdf0e10cSrcweir         sal_uInt16 nEntryPos = aFormatLB.InsertEntry(GetFldMgr().GetFormatStr(TYP_DBSETNUMBERFLD, i));
149cdf0e10cSrcweir 		sal_uInt16 nFmtId = GetFldMgr().GetFormatId( TYP_DBSETNUMBERFLD, i );
150cdf0e10cSrcweir         aFormatLB.SetEntryData( nEntryPos, reinterpret_cast<void*>(nFmtId) );
151cdf0e10cSrcweir 		if( SVX_NUM_ARABIC == nFmtId )
152cdf0e10cSrcweir             aFormatLB.SelectEntryPos( nEntryPos );
153cdf0e10cSrcweir 	}
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 	if (!IsFldEdit())
156cdf0e10cSrcweir 	{
157cdf0e10cSrcweir 		if (nOldPos != LISTBOX_ENTRY_NOTFOUND)
158cdf0e10cSrcweir 			aTypeLB.SelectEntryPos(nOldPos);
159cdf0e10cSrcweir 
160cdf0e10cSrcweir 		if (sOldDBName.Len())
161cdf0e10cSrcweir 		{
162cdf0e10cSrcweir 			aDatabaseTLB.Select(sOldDBName, sOldTableName, sOldColumnName);
163cdf0e10cSrcweir 		}
164cdf0e10cSrcweir 		else
165cdf0e10cSrcweir 		{
166cdf0e10cSrcweir             SwWrtShell *pSh = GetWrtShell();
167cdf0e10cSrcweir             if(!pSh)
168cdf0e10cSrcweir                 pSh = ::GetActiveWrtShell();
169cdf0e10cSrcweir             if(pSh)
170cdf0e10cSrcweir             {
171cdf0e10cSrcweir                 SwDBData aTmp(pSh->GetDBData());
172cdf0e10cSrcweir                 aDatabaseTLB.Select(aTmp.sDataSource, aTmp.sCommand, aEmptyStr);
173cdf0e10cSrcweir             }
174cdf0e10cSrcweir 		}
175cdf0e10cSrcweir 	}
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 	if( !IsRefresh() )
178cdf0e10cSrcweir 	{
179cdf0e10cSrcweir 		String sUserData = GetUserData();
180cdf0e10cSrcweir 		if(sUserData.GetToken(0, ';').EqualsIgnoreCaseAscii(USER_DATA_VERSION_1))
181cdf0e10cSrcweir 		{
182cdf0e10cSrcweir 			String sVal = sUserData.GetToken(1, ';');
183cdf0e10cSrcweir 			sal_uInt16 nVal = (sal_uInt16)sVal.ToInt32();
184cdf0e10cSrcweir 			if(nVal != USHRT_MAX)
185cdf0e10cSrcweir 			{
186cdf0e10cSrcweir                 for(i = 0; i < aTypeLB.GetEntryCount(); i++)
187cdf0e10cSrcweir 					if(nVal == (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(i))
188cdf0e10cSrcweir 					{
189cdf0e10cSrcweir 						aTypeLB.SelectEntryPos(i);
190cdf0e10cSrcweir 						break;
191cdf0e10cSrcweir 					}
192cdf0e10cSrcweir 			}
193cdf0e10cSrcweir 		}
194cdf0e10cSrcweir 	}
195cdf0e10cSrcweir 	TypeHdl(0);
196cdf0e10cSrcweir 
197cdf0e10cSrcweir 	aTypeLB.SetUpdateMode(sal_True);
198cdf0e10cSrcweir 	aTypeLB.SetSelectHdl(LINK(this, SwFldDBPage, TypeHdl));
199cdf0e10cSrcweir 	aTypeLB.SetDoubleClickHdl(LINK(this, SwFldDBPage, InsertHdl));
200cdf0e10cSrcweir 
201cdf0e10cSrcweir 	if (IsFldEdit())
202cdf0e10cSrcweir 	{
203cdf0e10cSrcweir 		aConditionED.SaveValue();
204cdf0e10cSrcweir 		aValueED.SaveValue();
205cdf0e10cSrcweir 		sOldDBName = aDatabaseTLB.GetDBName(sOldTableName, sOldColumnName);
206cdf0e10cSrcweir 		nOldFormat = GetCurField()->GetFormat();
207cdf0e10cSrcweir 		nOldSubType = GetCurField()->GetSubType();
208cdf0e10cSrcweir 	}
209cdf0e10cSrcweir }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir /*--------------------------------------------------------------------
212cdf0e10cSrcweir 	Beschreibung:
213cdf0e10cSrcweir  --------------------------------------------------------------------*/
214cdf0e10cSrcweir 
FillItemSet(SfxItemSet &)215cdf0e10cSrcweir sal_Bool __EXPORT SwFldDBPage::FillItemSet(SfxItemSet& )
216cdf0e10cSrcweir {
217cdf0e10cSrcweir 	String sTableName, sColumnName;
218cdf0e10cSrcweir 	SwDBData aData;
219cdf0e10cSrcweir     sal_Bool bIsTable;
220cdf0e10cSrcweir 	aData.sDataSource = aDatabaseTLB.GetDBName(sTableName, sColumnName, &bIsTable);
221cdf0e10cSrcweir 	aData.sCommand = sTableName;
222cdf0e10cSrcweir     aData.nCommandType = bIsTable ? 0 : 1;
223cdf0e10cSrcweir     SwWrtShell *pSh = GetWrtShell();
224cdf0e10cSrcweir     if(!pSh)
225cdf0e10cSrcweir         pSh = ::GetActiveWrtShell();
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 	if (!aData.sDataSource.getLength())
228cdf0e10cSrcweir 		aData = pSh->GetDBData();
229cdf0e10cSrcweir 
230cdf0e10cSrcweir 	if(aData.sDataSource.getLength())		// Ohne Datenbank kein neuer Feldbefehl
231cdf0e10cSrcweir 	{
232cdf0e10cSrcweir 		sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
233cdf0e10cSrcweir 		String aVal(aValueED.GetText());
234cdf0e10cSrcweir 		String aName(aConditionED.GetText());
235cdf0e10cSrcweir 		sal_uLong nFormat = 0;
236cdf0e10cSrcweir 		sal_uInt16 nSubType = 0;
237cdf0e10cSrcweir 
238cdf0e10cSrcweir 		String sDBName = aData.sDataSource;
239cdf0e10cSrcweir 		sDBName += DB_DELIM;
240cdf0e10cSrcweir 		sDBName += (String)aData.sCommand;
241cdf0e10cSrcweir 		sDBName += DB_DELIM;
242cdf0e10cSrcweir         sDBName += String::CreateFromInt32(aData.nCommandType);
243cdf0e10cSrcweir 		sDBName += DB_DELIM;
244cdf0e10cSrcweir         if(sColumnName.Len())
245cdf0e10cSrcweir 		{
246cdf0e10cSrcweir 			sDBName += sColumnName;
247cdf0e10cSrcweir 			sDBName += DB_DELIM;
248cdf0e10cSrcweir 		}
249cdf0e10cSrcweir 		aName.Insert(sDBName, 0);
250cdf0e10cSrcweir 
251cdf0e10cSrcweir 		switch (nTypeId)
252cdf0e10cSrcweir 		{
253cdf0e10cSrcweir 		case TYP_DBFLD:
254cdf0e10cSrcweir 			nFormat = aNumFormatLB.GetFormat();
255cdf0e10cSrcweir 			if (aNewFormatRB.IsEnabled() && aNewFormatRB.IsChecked())
256cdf0e10cSrcweir 				nSubType = nsSwExtendedSubType::SUB_OWN_FMT;
257cdf0e10cSrcweir 			aName = sDBName;
258cdf0e10cSrcweir 			break;
259cdf0e10cSrcweir 
260cdf0e10cSrcweir 		case TYP_DBSETNUMBERFLD:
261cdf0e10cSrcweir 			nFormat = (sal_uInt16)(sal_uLong)aFormatLB.GetEntryData(
262cdf0e10cSrcweir 								aFormatLB.GetSelectEntryPos() );
263cdf0e10cSrcweir 			break;
264cdf0e10cSrcweir 		}
265cdf0e10cSrcweir 
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 		String sTempDBName, sTempTableName, sTempColumnName;
268cdf0e10cSrcweir 		sTempDBName = aDatabaseTLB.GetDBName(sTempTableName, sTempColumnName);
269cdf0e10cSrcweir 		sal_Bool bDBListBoxChanged = sOldDBName != sTempDBName ||
270cdf0e10cSrcweir 			sOldTableName != sTempTableName || sOldColumnName != sTempColumnName;
271cdf0e10cSrcweir 		if (!IsFldEdit() ||
272cdf0e10cSrcweir 			aConditionED.GetSavedValue() != aConditionED.GetText() ||
273cdf0e10cSrcweir 			 aValueED.GetSavedValue() != aValueED.GetText() ||
274cdf0e10cSrcweir 			 bDBListBoxChanged ||
275cdf0e10cSrcweir 			 nOldFormat != nFormat || nOldSubType != nSubType)
276cdf0e10cSrcweir 		{
277cdf0e10cSrcweir 			InsertFld( nTypeId, nSubType, aName, aVal, nFormat);
278cdf0e10cSrcweir 		}
279cdf0e10cSrcweir 	}
280cdf0e10cSrcweir 
281cdf0e10cSrcweir 	return sal_False;
282cdf0e10cSrcweir }
283cdf0e10cSrcweir 
284cdf0e10cSrcweir /*--------------------------------------------------------------------
285cdf0e10cSrcweir 	Beschreibung:
286cdf0e10cSrcweir  --------------------------------------------------------------------*/
287cdf0e10cSrcweir 
Create(Window * pParent,const SfxItemSet & rAttrSet)288cdf0e10cSrcweir SfxTabPage* __EXPORT SwFldDBPage::Create( 	Window* pParent,
289cdf0e10cSrcweir 						const SfxItemSet& rAttrSet )
290cdf0e10cSrcweir {
291cdf0e10cSrcweir 	return ( new SwFldDBPage( pParent, rAttrSet ) );
292cdf0e10cSrcweir }
293cdf0e10cSrcweir 
294cdf0e10cSrcweir /*--------------------------------------------------------------------
295cdf0e10cSrcweir 	Beschreibung:
296cdf0e10cSrcweir  --------------------------------------------------------------------*/
297cdf0e10cSrcweir 
GetGroup()298cdf0e10cSrcweir sal_uInt16 SwFldDBPage::GetGroup()
299cdf0e10cSrcweir {
300cdf0e10cSrcweir 	return GRP_DB;
301cdf0e10cSrcweir }
302cdf0e10cSrcweir 
303cdf0e10cSrcweir /*--------------------------------------------------------------------
304cdf0e10cSrcweir 	Beschreibung:
305cdf0e10cSrcweir  --------------------------------------------------------------------*/
306cdf0e10cSrcweir 
IMPL_LINK(SwFldDBPage,TypeHdl,ListBox *,pBox)307cdf0e10cSrcweir IMPL_LINK( SwFldDBPage, TypeHdl, ListBox *, pBox )
308cdf0e10cSrcweir {
309cdf0e10cSrcweir 	// Alte ListBoxPos sichern
310cdf0e10cSrcweir 	const sal_uInt16 nOld = GetTypeSel();
311cdf0e10cSrcweir 
312cdf0e10cSrcweir 	// Aktuelle ListBoxPos
313cdf0e10cSrcweir 	SetTypeSel(aTypeLB.GetSelectEntryPos());
314cdf0e10cSrcweir 
315cdf0e10cSrcweir 	if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND)
316cdf0e10cSrcweir 	{
317cdf0e10cSrcweir 		SetTypeSel(0);
318cdf0e10cSrcweir 		aTypeLB.SelectEntryPos(0);
319cdf0e10cSrcweir 	}
320cdf0e10cSrcweir 
321cdf0e10cSrcweir 	if (nOld != GetTypeSel())
322cdf0e10cSrcweir 	{
323cdf0e10cSrcweir         SwWrtShell *pSh = GetWrtShell();
324cdf0e10cSrcweir         if(!pSh)
325cdf0e10cSrcweir             pSh = ::GetActiveWrtShell();
326cdf0e10cSrcweir 		sal_Bool bCond = sal_False, bSetNo = sal_False, bFormat = sal_False, bDBFormat = sal_False;
327cdf0e10cSrcweir 		sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
328cdf0e10cSrcweir 
329cdf0e10cSrcweir 		aDatabaseTLB.ShowColumns(nTypeId == TYP_DBFLD);
330cdf0e10cSrcweir 
331cdf0e10cSrcweir 		if (IsFldEdit())
332cdf0e10cSrcweir 		{
333cdf0e10cSrcweir 			SwDBData aData;
334cdf0e10cSrcweir 			String sColumnName;
335cdf0e10cSrcweir 			if (nTypeId == TYP_DBFLD)
336cdf0e10cSrcweir 			{
337cdf0e10cSrcweir 				aData = ((SwDBField*)GetCurField())->GetDBData();
338cdf0e10cSrcweir 				sColumnName = ((SwDBFieldType*)GetCurField()->GetTyp())->GetColumnName();
339cdf0e10cSrcweir 			}
340cdf0e10cSrcweir 			else
341cdf0e10cSrcweir 			{
342cdf0e10cSrcweir 				aData = ((SwDBNameInfField*)GetCurField())->GetDBData(pSh->GetDoc());
343cdf0e10cSrcweir 			}
344cdf0e10cSrcweir 			aDatabaseTLB.Select(aData.sDataSource, aData.sCommand, sColumnName);
345cdf0e10cSrcweir 		}
346cdf0e10cSrcweir 
347cdf0e10cSrcweir 		switch (nTypeId)
348cdf0e10cSrcweir 		{
349cdf0e10cSrcweir 			case TYP_DBFLD:
350cdf0e10cSrcweir 				bFormat = sal_True;
351cdf0e10cSrcweir 				bDBFormat = sal_True;
352cdf0e10cSrcweir 				aNumFormatLB.Show();
353cdf0e10cSrcweir 				aFormatLB.Hide();
354cdf0e10cSrcweir 
355cdf0e10cSrcweir 				if (pBox)	// Typ wurde vom User geaendert
356cdf0e10cSrcweir 					aDBFormatRB.Check();
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 				if (IsFldEdit())
359cdf0e10cSrcweir 				{
360cdf0e10cSrcweir                     if (GetCurField()->GetFormat() != 0 && GetCurField()->GetFormat() != SAL_MAX_UINT32)
361cdf0e10cSrcweir 						aNumFormatLB.SetDefFormat(GetCurField()->GetFormat());
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 					if (GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_OWN_FMT)
364cdf0e10cSrcweir 						aNewFormatRB.Check();
365cdf0e10cSrcweir 					else
366cdf0e10cSrcweir 						aDBFormatRB.Check();
367cdf0e10cSrcweir 				}
368cdf0e10cSrcweir 				break;
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 			case TYP_DBNUMSETFLD:
371cdf0e10cSrcweir 				bSetNo = sal_True;
372cdf0e10cSrcweir 				// kein break!
373cdf0e10cSrcweir 			case TYP_DBNEXTSETFLD:
374cdf0e10cSrcweir 				bCond = sal_True;
375cdf0e10cSrcweir 				if (IsFldEdit())
376cdf0e10cSrcweir 				{
377cdf0e10cSrcweir 					aConditionED.SetText(GetCurField()->GetPar1());
378cdf0e10cSrcweir 					aValueED.SetText(GetCurField()->GetPar2());
379cdf0e10cSrcweir 				}
380cdf0e10cSrcweir 				break;
381cdf0e10cSrcweir 
382cdf0e10cSrcweir 			case TYP_DBNAMEFLD:
383cdf0e10cSrcweir 				break;
384cdf0e10cSrcweir 
385cdf0e10cSrcweir 			case TYP_DBSETNUMBERFLD:
386cdf0e10cSrcweir 				bFormat = sal_True;
387cdf0e10cSrcweir 				aNewFormatRB.Check();
388cdf0e10cSrcweir 				aNumFormatLB.Hide();
389cdf0e10cSrcweir 				aFormatLB.Show();
390cdf0e10cSrcweir 				if( IsFldEdit() )
391cdf0e10cSrcweir 				{
392cdf0e10cSrcweir 					for( sal_uInt16 nI = aFormatLB.GetEntryCount(); nI; )
393cdf0e10cSrcweir 						if( GetCurField()->GetFormat() == (sal_uInt16)(sal_uLong)
394cdf0e10cSrcweir 							aFormatLB.GetEntryData( --nI ))
395cdf0e10cSrcweir 						{
396cdf0e10cSrcweir 							aFormatLB.SelectEntryPos( nI );
397cdf0e10cSrcweir 							break;
398cdf0e10cSrcweir 						}
399cdf0e10cSrcweir 				}
400cdf0e10cSrcweir 				break;
401cdf0e10cSrcweir 		}
402cdf0e10cSrcweir 
403cdf0e10cSrcweir 		aConditionFT.Enable(bCond);
404cdf0e10cSrcweir 		aConditionED.Enable(bCond);
405cdf0e10cSrcweir 		aValueFT.Enable(bSetNo);
406cdf0e10cSrcweir 		aValueED.Enable(bSetNo);
407cdf0e10cSrcweir 		if (nTypeId != TYP_DBFLD)
408cdf0e10cSrcweir 		{
409cdf0e10cSrcweir 			aDBFormatRB.Enable(bDBFormat);
410cdf0e10cSrcweir 			aNewFormatRB.Enable(bDBFormat|bFormat);
411cdf0e10cSrcweir 			aNumFormatLB.Enable(bDBFormat);
412cdf0e10cSrcweir 			aFormatLB.Enable(bFormat);
413cdf0e10cSrcweir 		}
414cdf0e10cSrcweir         aFormatFL.Enable(bDBFormat|bFormat);
415cdf0e10cSrcweir 
416cdf0e10cSrcweir 		if (!IsFldEdit())
417cdf0e10cSrcweir 		{
418cdf0e10cSrcweir 			aValueED.SetText(aEmptyStr);
419cdf0e10cSrcweir 			if (bCond)
420cdf0e10cSrcweir 				aConditionED.SetText( String::CreateFromAscii(
421*768779ecSAriel Constenla-Haile 						RTL_CONSTASCII_STRINGPARAM( "TRUE" )));
422cdf0e10cSrcweir 			else
423cdf0e10cSrcweir 				aConditionED.SetText(aEmptyStr);
424cdf0e10cSrcweir 		}
425cdf0e10cSrcweir 
426cdf0e10cSrcweir 		CheckInsert();
427cdf0e10cSrcweir 	}
428cdf0e10cSrcweir 
429cdf0e10cSrcweir 	return 0;
430cdf0e10cSrcweir }
431cdf0e10cSrcweir 
432cdf0e10cSrcweir /*--------------------------------------------------------------------
433cdf0e10cSrcweir 	Beschreibung:
434cdf0e10cSrcweir  --------------------------------------------------------------------*/
435cdf0e10cSrcweir 
IMPL_LINK(SwFldDBPage,NumSelectHdl,NumFormatListBox *,pLB)436cdf0e10cSrcweir IMPL_LINK( SwFldDBPage, NumSelectHdl, NumFormatListBox *, pLB )
437cdf0e10cSrcweir {
438cdf0e10cSrcweir 	aNewFormatRB.Check();
439cdf0e10cSrcweir 	aOldNumSelectHdl.Call(pLB);
440cdf0e10cSrcweir 
441cdf0e10cSrcweir 	return 0;
442cdf0e10cSrcweir }
443cdf0e10cSrcweir 
444cdf0e10cSrcweir /*---------------------------------------------------------------------
445cdf0e10cSrcweir 	Beschreibung:
446cdf0e10cSrcweir ---------------------------------------------------------------------*/
447cdf0e10cSrcweir 
CheckInsert()448cdf0e10cSrcweir void SwFldDBPage::CheckInsert()
449cdf0e10cSrcweir {
450cdf0e10cSrcweir 	sal_Bool bInsert = sal_True;
451cdf0e10cSrcweir 	sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
452cdf0e10cSrcweir 
453cdf0e10cSrcweir 	SvLBoxEntry* pEntry = aDatabaseTLB.GetCurEntry();
454cdf0e10cSrcweir 
455cdf0e10cSrcweir 	if (pEntry)
456cdf0e10cSrcweir 	{
457cdf0e10cSrcweir 		pEntry = aDatabaseTLB.GetParent(pEntry);
458cdf0e10cSrcweir 
459cdf0e10cSrcweir 		if (nTypeId == TYP_DBFLD && pEntry)
460cdf0e10cSrcweir 			pEntry = aDatabaseTLB.GetParent(pEntry);
461cdf0e10cSrcweir 
462cdf0e10cSrcweir 		bInsert &= pEntry != 0;
463cdf0e10cSrcweir 	}
464cdf0e10cSrcweir 	else
465cdf0e10cSrcweir 		bInsert = sal_False;
466cdf0e10cSrcweir 
467cdf0e10cSrcweir 	if (nTypeId == TYP_DBNUMSETFLD)
468cdf0e10cSrcweir 	{
469cdf0e10cSrcweir 		sal_Bool bHasValue = aValueED.GetText().Len() != 0;
470cdf0e10cSrcweir 
471cdf0e10cSrcweir 		bInsert &= bHasValue;
472cdf0e10cSrcweir 	}
473cdf0e10cSrcweir 
474cdf0e10cSrcweir 	EnableInsert(bInsert);
475cdf0e10cSrcweir }
476cdf0e10cSrcweir 
477cdf0e10cSrcweir /*---------------------------------------------------------------------
478cdf0e10cSrcweir 	Beschreibung:
479cdf0e10cSrcweir ---------------------------------------------------------------------*/
480cdf0e10cSrcweir 
IMPL_LINK(SwFldDBPage,TreeSelectHdl,SvTreeListBox *,pBox)481cdf0e10cSrcweir IMPL_LINK( SwFldDBPage, TreeSelectHdl, SvTreeListBox *, pBox )
482cdf0e10cSrcweir {
483cdf0e10cSrcweir 	SvLBoxEntry* pColEntry;
484cdf0e10cSrcweir 	SvLBoxEntry* pEntry = pColEntry = pBox->GetCurEntry();
485cdf0e10cSrcweir 	if (pEntry)
486cdf0e10cSrcweir 	{
487cdf0e10cSrcweir 		sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
488cdf0e10cSrcweir 
489cdf0e10cSrcweir 		pEntry = aDatabaseTLB.GetParent(pEntry);
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 		if (nTypeId == TYP_DBFLD && pEntry)
492cdf0e10cSrcweir 			pEntry = aDatabaseTLB.GetParent(pEntry);
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 		CheckInsert();
495cdf0e10cSrcweir 
496cdf0e10cSrcweir 		if (nTypeId == TYP_DBFLD)
497cdf0e10cSrcweir 		{
498cdf0e10cSrcweir 			sal_Bool bNumFormat = sal_False;
499cdf0e10cSrcweir 
500cdf0e10cSrcweir 			if (pEntry != 0)
501cdf0e10cSrcweir 			{
502cdf0e10cSrcweir 				String sTableName;
503cdf0e10cSrcweir 				String sColumnName;
504cdf0e10cSrcweir 				sal_Bool bIsTable;
505cdf0e10cSrcweir 				String sDBName = aDatabaseTLB.GetDBName(sTableName, sColumnName, &bIsTable);
506cdf0e10cSrcweir 				bNumFormat = GetFldMgr().IsDBNumeric(sDBName,
507cdf0e10cSrcweir 							sTableName,
508cdf0e10cSrcweir 							bIsTable,
509cdf0e10cSrcweir 							sColumnName);
510cdf0e10cSrcweir 				if (!IsFldEdit())
511cdf0e10cSrcweir 					aDBFormatRB.Check();
512cdf0e10cSrcweir 			}
513cdf0e10cSrcweir 
514cdf0e10cSrcweir 			aDBFormatRB.Enable(bNumFormat);
515cdf0e10cSrcweir 			aNewFormatRB.Enable(bNumFormat);
516cdf0e10cSrcweir 			aNumFormatLB.Enable(bNumFormat);
517cdf0e10cSrcweir             aFormatFL.Enable(bNumFormat);
518cdf0e10cSrcweir 		}
519cdf0e10cSrcweir 	}
520cdf0e10cSrcweir 	return 0;
521cdf0e10cSrcweir }
522cdf0e10cSrcweir /*-- 27.05.2004 09:14:01---------------------------------------------------
523cdf0e10cSrcweir 
524cdf0e10cSrcweir   -----------------------------------------------------------------------*/
IMPL_LINK(SwFldDBPage,AddDBHdl,PushButton *,EMPTYARG)525cdf0e10cSrcweir IMPL_LINK( SwFldDBPage, AddDBHdl, PushButton *, EMPTYARG )
526cdf0e10cSrcweir {
527cdf0e10cSrcweir     String sNewDB = SwNewDBMgr::LoadAndRegisterDataSource();
528cdf0e10cSrcweir     if(sNewDB.Len())
529cdf0e10cSrcweir     {
530cdf0e10cSrcweir         aDatabaseTLB.AddDataSource(sNewDB);
531cdf0e10cSrcweir     }
532cdf0e10cSrcweir     return 0;
533cdf0e10cSrcweir }
534cdf0e10cSrcweir 
535cdf0e10cSrcweir /*--------------------------------------------------------------------
536cdf0e10cSrcweir 	Beschreibung: Modify
537cdf0e10cSrcweir  --------------------------------------------------------------------*/
538cdf0e10cSrcweir 
IMPL_LINK(SwFldDBPage,ModifyHdl,Edit *,EMPTYARG)539cdf0e10cSrcweir IMPL_LINK( SwFldDBPage, ModifyHdl, Edit *, EMPTYARG )
540cdf0e10cSrcweir {
541cdf0e10cSrcweir 	CheckInsert();
542cdf0e10cSrcweir 	return 0;
543cdf0e10cSrcweir }
544cdf0e10cSrcweir 
545cdf0e10cSrcweir /* -----------------12.01.99 11:21-------------------
546cdf0e10cSrcweir  *
547cdf0e10cSrcweir  * --------------------------------------------------*/
FillUserData()548cdf0e10cSrcweir void	SwFldDBPage::FillUserData()
549cdf0e10cSrcweir {
550cdf0e10cSrcweir 	String sData( String::CreateFromAscii(
551cdf0e10cSrcweir 						RTL_CONSTASCII_STRINGPARAM( USER_DATA_VERSION )));
552cdf0e10cSrcweir 	sData += ';';
553cdf0e10cSrcweir 	sal_uInt16 nTypeSel = aTypeLB.GetSelectEntryPos();
554cdf0e10cSrcweir 
555cdf0e10cSrcweir 	if( LISTBOX_ENTRY_NOTFOUND == nTypeSel )
556cdf0e10cSrcweir 		nTypeSel = USHRT_MAX;
557cdf0e10cSrcweir 	else
558cdf0e10cSrcweir 		nTypeSel = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData( nTypeSel );
559cdf0e10cSrcweir 	sData += String::CreateFromInt32( nTypeSel );
560cdf0e10cSrcweir 	SetUserData(sData);
561cdf0e10cSrcweir }
562cdf0e10cSrcweir /* -----------------12.12.2002 11:33-----------------
563cdf0e10cSrcweir  *
564cdf0e10cSrcweir  * --------------------------------------------------*/
ActivateMailMergeAddress()565cdf0e10cSrcweir void SwFldDBPage::ActivateMailMergeAddress()
566cdf0e10cSrcweir {
567cdf0e10cSrcweir     sal_uLong nData = TYP_DBFLD;
568cdf0e10cSrcweir     aTypeLB.SelectEntryPos(aTypeLB.GetEntryPos( (const void*) nData ));
569cdf0e10cSrcweir     aTypeLB.GetSelectHdl().Call(&aTypeLB);
570cdf0e10cSrcweir     const SwDBData& rData = SW_MOD()->GetDBConfig()->GetAddressSource();
571cdf0e10cSrcweir 	aDatabaseTLB.Select(rData.sDataSource, rData.sCommand, aEmptyStr);
572cdf0e10cSrcweir }
573cdf0e10cSrcweir /*-- 07.10.2003 13:59:04---------------------------------------------------
574cdf0e10cSrcweir 
575cdf0e10cSrcweir   -----------------------------------------------------------------------*/
SetWrtShell(SwWrtShell & rSh)576cdf0e10cSrcweir void SwFldDBPage::SetWrtShell(SwWrtShell& rSh)
577cdf0e10cSrcweir {
578cdf0e10cSrcweir     aDatabaseTLB.SetWrtShell(rSh);
579cdf0e10cSrcweir }
580