xref: /AOO41X/main/sc/source/ui/dbgui/filtdlg.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_sc.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir // System - Includes ---------------------------------------------------------
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir // INCLUDE -------------------------------------------------------------------
36*cdf0e10cSrcweir #include <rangelst.hxx>
37*cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
38*cdf0e10cSrcweir #include <vcl/waitobj.hxx>
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #include "uiitems.hxx"
41*cdf0e10cSrcweir #include "dbcolect.hxx"
42*cdf0e10cSrcweir #include "reffact.hxx"
43*cdf0e10cSrcweir #include "viewdata.hxx"
44*cdf0e10cSrcweir #include "document.hxx"
45*cdf0e10cSrcweir #include "docsh.hxx"
46*cdf0e10cSrcweir #include "scresid.hxx"
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir #include "foptmgr.hxx"
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir #include "globstr.hrc"
51*cdf0e10cSrcweir #include "filter.hrc"
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir #define _FILTDLG_CXX
54*cdf0e10cSrcweir #include "filtdlg.hxx"
55*cdf0e10cSrcweir #undef _FILTDLG_CXX
56*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir // DEFINE --------------------------------------------------------------------
59*cdf0e10cSrcweir 
60*cdf0e10cSrcweir #define ERRORBOX(rid)	ErrorBox( this, WinBits( WB_OK|WB_DEF_OK), \
61*cdf0e10cSrcweir 				 				  ScGlobal::GetRscString(rid) ).Execute()
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir //============================================================================
65*cdf0e10cSrcweir //	class ScFilterDlg
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir //----------------------------------------------------------------------------
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir ScFilterDlg::ScFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
70*cdf0e10cSrcweir 						  const SfxItemSet&	rArgSet )
71*cdf0e10cSrcweir 
72*cdf0e10cSrcweir 	:	ScAnyRefDlg	( pB, pCW, pParent, RID_SCDLG_FILTER ),
73*cdf0e10cSrcweir 		//
74*cdf0e10cSrcweir         aFlCriteria     ( this, ScResId( FL_CRITERIA ) ),
75*cdf0e10cSrcweir 		aLbConnect1		( this, ScResId( LB_OP1 ) ),
76*cdf0e10cSrcweir 		aLbField1		( this, ScResId( LB_FIELD1 ) ),
77*cdf0e10cSrcweir 		aLbCond1		( this, ScResId( LB_COND1 ) ),
78*cdf0e10cSrcweir 		aEdVal1			( this, ScResId( ED_VAL1 ) ),
79*cdf0e10cSrcweir 		aLbConnect2		( this, ScResId( LB_OP2 ) ),
80*cdf0e10cSrcweir 		aLbField2		( this, ScResId( LB_FIELD2 ) ),
81*cdf0e10cSrcweir 		aLbCond2		( this, ScResId( LB_COND2 ) ),
82*cdf0e10cSrcweir 		aEdVal2			( this, ScResId( ED_VAL2 ) ),
83*cdf0e10cSrcweir 		aLbConnect3		( this, ScResId( LB_OP3 ) ),
84*cdf0e10cSrcweir 		aLbField3		( this, ScResId( LB_FIELD3 ) ),
85*cdf0e10cSrcweir 		aLbCond3		( this, ScResId( LB_COND3 ) ),
86*cdf0e10cSrcweir 		aEdVal3			( this, ScResId( ED_VAL3 ) ),
87*cdf0e10cSrcweir 		aLbConnect4		( this, ScResId( LB_OP4 ) ),
88*cdf0e10cSrcweir 		aLbField4		( this, ScResId( LB_FIELD4 ) ),
89*cdf0e10cSrcweir 		aLbCond4		( this, ScResId( LB_COND4 ) ),
90*cdf0e10cSrcweir 		aEdVal4			( this, ScResId( ED_VAL4 ) ),
91*cdf0e10cSrcweir 		aFtConnect		( this, ScResId( FT_OP ) ),
92*cdf0e10cSrcweir 		aFtField		( this, ScResId( FT_FIELD ) ),
93*cdf0e10cSrcweir 		aFtCond			( this, ScResId( FT_COND ) ),
94*cdf0e10cSrcweir 		aFtVal			( this, ScResId( FT_VAL ) ),
95*cdf0e10cSrcweir 		aFlSeparator    ( this, ScResId( FL_SEPARATOR ) ),
96*cdf0e10cSrcweir 		aScrollBar      ( this, ScResId( LB_SCROLL ) ),
97*cdf0e10cSrcweir         aFlOptions      ( this, ScResId( FL_OPTIONS ) ),
98*cdf0e10cSrcweir         aBtnMore        ( this, ScResId( BTN_MORE ) ),
99*cdf0e10cSrcweir         aBtnHelp        ( this, ScResId( BTN_HELP ) ),
100*cdf0e10cSrcweir         aBtnOk          ( this, ScResId( BTN_OK ) ),
101*cdf0e10cSrcweir         aBtnCancel      ( this, ScResId( BTN_CANCEL ) ),
102*cdf0e10cSrcweir 		_INIT_COMMON_FILTER_RSCOBJS
103*cdf0e10cSrcweir 		aStrEmpty		( ScResId( SCSTR_EMPTY ) ),
104*cdf0e10cSrcweir 		aStrNotEmpty	( ScResId( SCSTR_NOTEMPTY ) ),
105*cdf0e10cSrcweir 		aStrRow			( ScResId( SCSTR_ROW ) ),
106*cdf0e10cSrcweir 		aStrColumn		( ScResId( SCSTR_COLUMN ) ),
107*cdf0e10cSrcweir 		//
108*cdf0e10cSrcweir 		pOptionsMgr		( NULL ),
109*cdf0e10cSrcweir 		nWhichQuery		( rArgSet.GetPool()->GetWhich( SID_QUERY ) ),
110*cdf0e10cSrcweir 		theQueryData	( ((const ScQueryItem&)
111*cdf0e10cSrcweir 						   rArgSet.Get( nWhichQuery )).GetQueryData() ),
112*cdf0e10cSrcweir 		pOutItem		( NULL ),
113*cdf0e10cSrcweir 		pViewData		( NULL ),
114*cdf0e10cSrcweir 		pDoc			( NULL ),
115*cdf0e10cSrcweir 		nSrcTab			( 0 ),
116*cdf0e10cSrcweir 		nFieldCount		( 0 ),
117*cdf0e10cSrcweir 		bRefInputMode	( sal_False ),
118*cdf0e10cSrcweir 		pTimer			( NULL )
119*cdf0e10cSrcweir {
120*cdf0e10cSrcweir 	for (sal_uInt16 i=0; i<=MAXCOL; i++)
121*cdf0e10cSrcweir 		pEntryLists[i] = NULL;
122*cdf0e10cSrcweir 	for (SCSIZE i=0;i<MAXQUERY;i++)
123*cdf0e10cSrcweir 	{
124*cdf0e10cSrcweir 		 bRefreshExceptQuery[i]=sal_False;
125*cdf0e10cSrcweir 	}
126*cdf0e10cSrcweir 	aBtnMore.SetMoreText( String(ScResId( SCSTR_MOREBTN_MOREOPTIONS )) );
127*cdf0e10cSrcweir 	aBtnMore.SetLessText( String(ScResId( SCSTR_MOREBTN_FEWEROPTIONS )) );
128*cdf0e10cSrcweir 	Init( rArgSet );
129*cdf0e10cSrcweir 	FreeResource();
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir 	// Hack: RefInput-Kontrolle
132*cdf0e10cSrcweir 	pTimer = new Timer;
133*cdf0e10cSrcweir 	pTimer->SetTimeout( 50 ); // 50ms warten
134*cdf0e10cSrcweir 	pTimer->SetTimeoutHdl( LINK( this, ScFilterDlg, TimeOutHdl ) );
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir 	String sAccName (ScResId(RID_FILTER_OPERATOR));
137*cdf0e10cSrcweir 	String sIndexName(sAccName);
138*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
139*cdf0e10cSrcweir 	aLbConnect1.SetAccessibleName(sIndexName);
140*cdf0e10cSrcweir 	sIndexName = sAccName;
141*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
142*cdf0e10cSrcweir 	aLbConnect2.SetAccessibleName(sIndexName);
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir 	sAccName = String(ScResId(RID_FILTER_FIELDNAME));
145*cdf0e10cSrcweir 	sIndexName = sAccName;
146*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
147*cdf0e10cSrcweir 	aLbField1.SetAccessibleName(sIndexName);
148*cdf0e10cSrcweir 	sIndexName = sAccName;
149*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
150*cdf0e10cSrcweir 	aLbField2.SetAccessibleName(sIndexName);
151*cdf0e10cSrcweir 	sIndexName = sAccName;
152*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
153*cdf0e10cSrcweir 	aLbField3.SetAccessibleName(sIndexName);
154*cdf0e10cSrcweir 
155*cdf0e10cSrcweir 
156*cdf0e10cSrcweir 	sAccName = String(ScResId(RID_FILTER_CONDITION));
157*cdf0e10cSrcweir 	sIndexName = sAccName;
158*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
159*cdf0e10cSrcweir 	aLbCond1.SetAccessibleName(sIndexName);
160*cdf0e10cSrcweir 	sIndexName = sAccName;
161*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
162*cdf0e10cSrcweir 	aLbCond2.SetAccessibleName(sIndexName);
163*cdf0e10cSrcweir 	sIndexName = sAccName;
164*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
165*cdf0e10cSrcweir 	aLbCond3.SetAccessibleName(sIndexName);
166*cdf0e10cSrcweir 
167*cdf0e10cSrcweir 	sAccName = String(ScResId(RID_FILTER_VALUE));
168*cdf0e10cSrcweir 	sIndexName = sAccName;
169*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1"));
170*cdf0e10cSrcweir 	aEdVal1.SetAccessibleName(sIndexName);
171*cdf0e10cSrcweir 	sIndexName = sAccName;
172*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2"));
173*cdf0e10cSrcweir 	aEdVal2.SetAccessibleName(sIndexName);
174*cdf0e10cSrcweir 	sIndexName = sAccName;
175*cdf0e10cSrcweir 	sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3"));
176*cdf0e10cSrcweir 	aEdVal3.SetAccessibleName(sIndexName);
177*cdf0e10cSrcweir 
178*cdf0e10cSrcweir 	aLbCopyArea.SetAccessibleName(ScResId(STR_COPY_AREA_TO));
179*cdf0e10cSrcweir 	aEdCopyArea.SetAccessibleName(ScResId(STR_COPY_AREA_TO));
180*cdf0e10cSrcweir 	aLbCopyArea.SetAccessibleRelationLabeledBy(&aBtnCopyResult);
181*cdf0e10cSrcweir 	aEdCopyArea.SetAccessibleRelationLabeledBy(&aBtnCopyResult);
182*cdf0e10cSrcweir 
183*cdf0e10cSrcweir 	aLbConnect1.SetAccessibleRelationLabeledBy(&aFtConnect);
184*cdf0e10cSrcweir 	aLbConnect2.SetAccessibleRelationLabeledBy(&aFtConnect);
185*cdf0e10cSrcweir 	aLbField1.SetAccessibleRelationLabeledBy(&aFtField);
186*cdf0e10cSrcweir 	aLbField2.SetAccessibleRelationLabeledBy(&aFtField);
187*cdf0e10cSrcweir 	aLbField3.SetAccessibleRelationLabeledBy(&aFtField);
188*cdf0e10cSrcweir 	aLbCond1.SetAccessibleRelationLabeledBy(&aFtCond);
189*cdf0e10cSrcweir 	aLbCond2.SetAccessibleRelationLabeledBy(&aFtCond);
190*cdf0e10cSrcweir 	aLbCond3.SetAccessibleRelationLabeledBy(&aFtCond);
191*cdf0e10cSrcweir 	aEdVal1.SetAccessibleRelationLabeledBy(&aFtVal);
192*cdf0e10cSrcweir 	aEdVal2.SetAccessibleRelationLabeledBy(&aFtVal);
193*cdf0e10cSrcweir 	aEdVal3.SetAccessibleRelationLabeledBy(&aFtVal);
194*cdf0e10cSrcweir }
195*cdf0e10cSrcweir 
196*cdf0e10cSrcweir 
197*cdf0e10cSrcweir //----------------------------------------------------------------------------
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir __EXPORT ScFilterDlg::~ScFilterDlg()
200*cdf0e10cSrcweir {
201*cdf0e10cSrcweir 	for (sal_uInt16 i=0; i<=MAXCOL; i++)
202*cdf0e10cSrcweir 		delete pEntryLists[i];
203*cdf0e10cSrcweir 
204*cdf0e10cSrcweir 	delete pOptionsMgr;
205*cdf0e10cSrcweir 	delete pOutItem;
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir 	// Hack: RefInput-Kontrolle
208*cdf0e10cSrcweir 	pTimer->Stop();
209*cdf0e10cSrcweir 	delete pTimer;
210*cdf0e10cSrcweir }
211*cdf0e10cSrcweir 
212*cdf0e10cSrcweir 
213*cdf0e10cSrcweir //----------------------------------------------------------------------------
214*cdf0e10cSrcweir 
215*cdf0e10cSrcweir void __EXPORT ScFilterDlg::Init( const SfxItemSet& rArgSet )
216*cdf0e10cSrcweir {
217*cdf0e10cSrcweir 	const ScQueryItem& rQueryItem = (const ScQueryItem&)
218*cdf0e10cSrcweir 									rArgSet.Get( nWhichQuery );
219*cdf0e10cSrcweir 
220*cdf0e10cSrcweir 	aBtnOk.SetClickHdl		( LINK( this, ScFilterDlg, EndDlgHdl ) );
221*cdf0e10cSrcweir 	aBtnCancel.SetClickHdl	( LINK( this, ScFilterDlg, EndDlgHdl ) );
222*cdf0e10cSrcweir 	aBtnMore.SetClickHdl	( LINK( this, ScFilterDlg, MoreClickHdl ) );
223*cdf0e10cSrcweir 	aBtnHeader.SetClickHdl	( LINK( this, ScFilterDlg, CheckBoxHdl ) );
224*cdf0e10cSrcweir 	aBtnCase.SetClickHdl	( LINK( this, ScFilterDlg, CheckBoxHdl ) );
225*cdf0e10cSrcweir 	//
226*cdf0e10cSrcweir 	aLbField1.SetSelectHdl	( LINK( this, ScFilterDlg, LbSelectHdl ) );
227*cdf0e10cSrcweir 	aLbField2.SetSelectHdl	( LINK( this, ScFilterDlg, LbSelectHdl ) );
228*cdf0e10cSrcweir 	aLbField3.SetSelectHdl	( LINK( this, ScFilterDlg, LbSelectHdl ) );
229*cdf0e10cSrcweir 	aLbField4.SetSelectHdl	( LINK( this, ScFilterDlg, LbSelectHdl ) );
230*cdf0e10cSrcweir 	aLbConnect1.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
231*cdf0e10cSrcweir 	aLbConnect2.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
232*cdf0e10cSrcweir 	aLbConnect3.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
233*cdf0e10cSrcweir 	aLbConnect4.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
234*cdf0e10cSrcweir 
235*cdf0e10cSrcweir 	aLbCond1.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
236*cdf0e10cSrcweir 	aLbCond2.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
237*cdf0e10cSrcweir 	aLbCond3.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
238*cdf0e10cSrcweir 	aLbCond4.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir 	pViewData 	= rQueryItem.GetViewData();
241*cdf0e10cSrcweir 	pDoc	  	= pViewData ? pViewData->GetDocument() : NULL;
242*cdf0e10cSrcweir 	nSrcTab		= pViewData ? pViewData->GetTabNo() : static_cast<SCTAB>(0);
243*cdf0e10cSrcweir 
244*cdf0e10cSrcweir 	// fuer leichteren Zugriff:
245*cdf0e10cSrcweir 	aFieldLbArr	 [0] = &aLbField1;
246*cdf0e10cSrcweir 	aFieldLbArr	 [1] = &aLbField2;
247*cdf0e10cSrcweir 	aFieldLbArr	 [2] = &aLbField3;
248*cdf0e10cSrcweir 	aFieldLbArr	 [3] = &aLbField4;
249*cdf0e10cSrcweir 	aValueEdArr	 [0] = &aEdVal1;
250*cdf0e10cSrcweir 	aValueEdArr	 [1] = &aEdVal2;
251*cdf0e10cSrcweir 	aValueEdArr	 [2] = &aEdVal3;
252*cdf0e10cSrcweir 	aValueEdArr	 [3] = &aEdVal4;
253*cdf0e10cSrcweir 	aCondLbArr	 [0] = &aLbCond1;
254*cdf0e10cSrcweir 	aCondLbArr	 [1] = &aLbCond2;
255*cdf0e10cSrcweir 	aCondLbArr 	 [2] = &aLbCond3;
256*cdf0e10cSrcweir 	aCondLbArr 	 [3] = &aLbCond4;
257*cdf0e10cSrcweir 	aConnLbArr   [0] = &aLbConnect1;
258*cdf0e10cSrcweir 	aConnLbArr   [1] = &aLbConnect2;
259*cdf0e10cSrcweir 	aConnLbArr   [2] = &aLbConnect3;
260*cdf0e10cSrcweir 	aConnLbArr   [3] = &aLbConnect4;
261*cdf0e10cSrcweir 
262*cdf0e10cSrcweir 	// Optionen initialisieren lassen:
263*cdf0e10cSrcweir 
264*cdf0e10cSrcweir 	pOptionsMgr	 = new ScFilterOptionsMgr(
265*cdf0e10cSrcweir 							this,
266*cdf0e10cSrcweir 							pViewData,
267*cdf0e10cSrcweir 							theQueryData,
268*cdf0e10cSrcweir 							aBtnMore,
269*cdf0e10cSrcweir 							aBtnCase,
270*cdf0e10cSrcweir 							aBtnRegExp,
271*cdf0e10cSrcweir 							aBtnHeader,
272*cdf0e10cSrcweir 							aBtnUnique,
273*cdf0e10cSrcweir 							aBtnCopyResult,
274*cdf0e10cSrcweir 							aBtnDestPers,
275*cdf0e10cSrcweir 							aLbCopyArea,
276*cdf0e10cSrcweir 							aEdCopyArea,
277*cdf0e10cSrcweir 							aRbCopyArea,
278*cdf0e10cSrcweir 							aFtDbAreaLabel,
279*cdf0e10cSrcweir 							aFtDbArea,
280*cdf0e10cSrcweir                             aFlOptions,
281*cdf0e10cSrcweir 							aStrNoName,
282*cdf0e10cSrcweir 							aStrUndefined );
283*cdf0e10cSrcweir 
284*cdf0e10cSrcweir 	// Feldlisten einlesen und Eintraege selektieren:
285*cdf0e10cSrcweir 
286*cdf0e10cSrcweir 	FillFieldLists();
287*cdf0e10cSrcweir 
288*cdf0e10cSrcweir 	for ( SCSIZE i=0; i<4; i++ )
289*cdf0e10cSrcweir 	{
290*cdf0e10cSrcweir 		String	aValStr;
291*cdf0e10cSrcweir 		sal_uInt16	nCondPos	 = 0;
292*cdf0e10cSrcweir 		sal_uInt16	nFieldSelPos = 0;
293*cdf0e10cSrcweir 
294*cdf0e10cSrcweir 		ScQueryEntry& rEntry = theQueryData.GetEntry(i);
295*cdf0e10cSrcweir 		if ( rEntry.bDoQuery )
296*cdf0e10cSrcweir 		{
297*cdf0e10cSrcweir 			nCondPos	 = (sal_uInt16)rEntry.eOp;
298*cdf0e10cSrcweir 			nFieldSelPos = GetFieldSelPos( static_cast<SCCOL>(rEntry.nField) );
299*cdf0e10cSrcweir 			if ( rEntry.nVal == SC_EMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING )
300*cdf0e10cSrcweir 			{
301*cdf0e10cSrcweir 				aValStr = aStrEmpty;
302*cdf0e10cSrcweir 				aCondLbArr[i]->Disable();
303*cdf0e10cSrcweir 			}
304*cdf0e10cSrcweir 			else if ( rEntry.nVal == SC_NONEMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING )
305*cdf0e10cSrcweir 			{
306*cdf0e10cSrcweir 				aValStr = aStrNotEmpty;
307*cdf0e10cSrcweir 				aCondLbArr[i]->Disable();
308*cdf0e10cSrcweir 			}
309*cdf0e10cSrcweir 			else
310*cdf0e10cSrcweir 				aValStr = *rEntry.pStr;
311*cdf0e10cSrcweir 		}
312*cdf0e10cSrcweir 		else if ( i == 0 )
313*cdf0e10cSrcweir 		{
314*cdf0e10cSrcweir 			nFieldSelPos = GetFieldSelPos( pViewData->GetCurX() );
315*cdf0e10cSrcweir 			rEntry.nField = nFieldSelPos ? (theQueryData.nCol1 +
316*cdf0e10cSrcweir 				static_cast<SCCOL>(nFieldSelPos) - 1) : static_cast<SCCOL>(0);
317*cdf0e10cSrcweir 			rEntry.bDoQuery=sal_True;
318*cdf0e10cSrcweir 			bRefreshExceptQuery[i]=sal_True;
319*cdf0e10cSrcweir 
320*cdf0e10cSrcweir 		}
321*cdf0e10cSrcweir 		aFieldLbArr[i]->SelectEntryPos( nFieldSelPos );
322*cdf0e10cSrcweir 		aCondLbArr [i]->SelectEntryPos( nCondPos );
323*cdf0e10cSrcweir 		aValueEdArr[i]->SetText( aValStr );
324*cdf0e10cSrcweir 		aValueEdArr[i]->SetModifyHdl( LINK( this, ScFilterDlg, ValModifyHdl ) );
325*cdf0e10cSrcweir 		UpdateValueList( static_cast<sal_uInt16>(i+1) );
326*cdf0e10cSrcweir 	}
327*cdf0e10cSrcweir 
328*cdf0e10cSrcweir 	aScrollBar.SetEndScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) );
329*cdf0e10cSrcweir 	aScrollBar.SetScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) );
330*cdf0e10cSrcweir 
331*cdf0e10cSrcweir 	aScrollBar.SetRange( Range( 0, 4 ) );
332*cdf0e10cSrcweir 	aScrollBar.SetLineSize( 1 );
333*cdf0e10cSrcweir 	aLbConnect1.Hide();
334*cdf0e10cSrcweir 	// Disable/Enable Logik:
335*cdf0e10cSrcweir 
336*cdf0e10cSrcweir 	   (aLbField1.GetSelectEntryPos() != 0)
337*cdf0e10cSrcweir 	&& (aLbField2.GetSelectEntryPos() != 0)
338*cdf0e10cSrcweir 		? aLbConnect2.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(1).eConnect )
339*cdf0e10cSrcweir 		: aLbConnect2.SetNoSelection();
340*cdf0e10cSrcweir 
341*cdf0e10cSrcweir 	   (aLbField2.GetSelectEntryPos() != 0)
342*cdf0e10cSrcweir 	&& (aLbField3.GetSelectEntryPos() != 0)
343*cdf0e10cSrcweir 		? aLbConnect3.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(2).eConnect )
344*cdf0e10cSrcweir 		: aLbConnect3.SetNoSelection();
345*cdf0e10cSrcweir 
346*cdf0e10cSrcweir 	   (aLbField3.GetSelectEntryPos() != 0)
347*cdf0e10cSrcweir 	&& (aLbField4.GetSelectEntryPos() != 0)
348*cdf0e10cSrcweir 		? aLbConnect4.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(3).eConnect )
349*cdf0e10cSrcweir 		: aLbConnect4.SetNoSelection();
350*cdf0e10cSrcweir 	if ( aLbField1.GetSelectEntryPos() == 0 )
351*cdf0e10cSrcweir 	{
352*cdf0e10cSrcweir 		aLbConnect2.Disable();
353*cdf0e10cSrcweir 		aLbField2.Disable();
354*cdf0e10cSrcweir 		aLbCond2.Disable();
355*cdf0e10cSrcweir 		aEdVal2.Disable();
356*cdf0e10cSrcweir 	}
357*cdf0e10cSrcweir 	else if ( aLbConnect2.GetSelectEntryCount() == 0 )
358*cdf0e10cSrcweir 	{
359*cdf0e10cSrcweir 		aLbField2.Disable();
360*cdf0e10cSrcweir 		aLbCond2.Disable();
361*cdf0e10cSrcweir 		aEdVal2.Disable();
362*cdf0e10cSrcweir 	}
363*cdf0e10cSrcweir 
364*cdf0e10cSrcweir 	if ( aLbField2.GetSelectEntryPos() == 0 )
365*cdf0e10cSrcweir 	{
366*cdf0e10cSrcweir 		aLbConnect3.Disable();
367*cdf0e10cSrcweir 		aLbField3.Disable();
368*cdf0e10cSrcweir 		aLbCond3.Disable();
369*cdf0e10cSrcweir 		aEdVal3.Disable();
370*cdf0e10cSrcweir 	}
371*cdf0e10cSrcweir 	else if ( aLbConnect3.GetSelectEntryCount() == 0 )
372*cdf0e10cSrcweir 	{
373*cdf0e10cSrcweir 		aLbField3.Disable();
374*cdf0e10cSrcweir 		aLbCond3.Disable();
375*cdf0e10cSrcweir 		aEdVal3.Disable();
376*cdf0e10cSrcweir 	}
377*cdf0e10cSrcweir 	if ( aLbField3.GetSelectEntryPos() == 0 )
378*cdf0e10cSrcweir 	{
379*cdf0e10cSrcweir 		aLbConnect4.Disable();
380*cdf0e10cSrcweir 		aLbField4.Disable();
381*cdf0e10cSrcweir 		aLbCond4.Disable();
382*cdf0e10cSrcweir 		aEdVal4.Disable();
383*cdf0e10cSrcweir 	}
384*cdf0e10cSrcweir 	else if ( aLbConnect4.GetSelectEntryCount() == 0 )
385*cdf0e10cSrcweir 	{
386*cdf0e10cSrcweir 		aLbField4.Disable();
387*cdf0e10cSrcweir 		aLbCond4.Disable();
388*cdf0e10cSrcweir 		aEdVal4.Disable();
389*cdf0e10cSrcweir 	}
390*cdf0e10cSrcweir 
391*cdf0e10cSrcweir 	if(pDoc!=NULL &&
392*cdf0e10cSrcweir 		pDoc->GetChangeTrack()!=NULL) aBtnCopyResult.Disable();
393*cdf0e10cSrcweir 	// Modal-Modus einschalten
394*cdf0e10cSrcweir //	SetDispatcherLock( sal_True );
395*cdf0e10cSrcweir 	//@BugID 54702 Enablen/Disablen nur noch in Basisklasse
396*cdf0e10cSrcweir //	SFX_APPWINDOW->Disable(sal_False);		//! allgemeine Methode im ScAnyRefDlg
397*cdf0e10cSrcweir }
398*cdf0e10cSrcweir 
399*cdf0e10cSrcweir 
400*cdf0e10cSrcweir //----------------------------------------------------------------------------
401*cdf0e10cSrcweir 
402*cdf0e10cSrcweir sal_Bool __EXPORT ScFilterDlg::Close()
403*cdf0e10cSrcweir {
404*cdf0e10cSrcweir     if (pViewData)
405*cdf0e10cSrcweir         pViewData->GetDocShell()->CancelAutoDBRange();
406*cdf0e10cSrcweir 
407*cdf0e10cSrcweir 	return DoClose( ScFilterDlgWrapper::GetChildWindowId() );
408*cdf0e10cSrcweir }
409*cdf0e10cSrcweir 
410*cdf0e10cSrcweir 
411*cdf0e10cSrcweir //----------------------------------------------------------------------------
412*cdf0e10cSrcweir // Uebergabe eines mit der Maus selektierten Tabellenbereiches, der dann als
413*cdf0e10cSrcweir // neue Selektion im Referenz-Edit angezeigt wird.
414*cdf0e10cSrcweir 
415*cdf0e10cSrcweir void ScFilterDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
416*cdf0e10cSrcweir {
417*cdf0e10cSrcweir 	if ( bRefInputMode )	// Nur moeglich, wenn im Referenz-Editmodus
418*cdf0e10cSrcweir 	{
419*cdf0e10cSrcweir 		if ( rRef.aStart != rRef.aEnd )
420*cdf0e10cSrcweir 			RefInputStart( &aEdCopyArea );
421*cdf0e10cSrcweir 		String aRefStr;
422*cdf0e10cSrcweir         rRef.aStart.Format( aRefStr, SCA_ABS_3D, pDocP, pDocP->GetAddressConvention() );
423*cdf0e10cSrcweir 		aEdCopyArea.SetRefString( aRefStr );
424*cdf0e10cSrcweir 	}
425*cdf0e10cSrcweir }
426*cdf0e10cSrcweir 
427*cdf0e10cSrcweir 
428*cdf0e10cSrcweir //----------------------------------------------------------------------------
429*cdf0e10cSrcweir 
430*cdf0e10cSrcweir void ScFilterDlg::SetActive()
431*cdf0e10cSrcweir {
432*cdf0e10cSrcweir 	if ( bRefInputMode )
433*cdf0e10cSrcweir 	{
434*cdf0e10cSrcweir 		aEdCopyArea.GrabFocus();
435*cdf0e10cSrcweir 		if ( aEdCopyArea.GetModifyHdl().IsSet() )
436*cdf0e10cSrcweir 			((Link&)aEdCopyArea.GetModifyHdl()).Call( &aEdCopyArea );
437*cdf0e10cSrcweir 	}
438*cdf0e10cSrcweir 	else
439*cdf0e10cSrcweir 		GrabFocus();
440*cdf0e10cSrcweir 
441*cdf0e10cSrcweir 	RefInputDone();
442*cdf0e10cSrcweir }
443*cdf0e10cSrcweir 
444*cdf0e10cSrcweir //----------------------------------------------------------------------------
445*cdf0e10cSrcweir 
446*cdf0e10cSrcweir void ScFilterDlg::FillFieldLists()
447*cdf0e10cSrcweir {
448*cdf0e10cSrcweir 	aLbField1.Clear();
449*cdf0e10cSrcweir 	aLbField2.Clear();
450*cdf0e10cSrcweir 	aLbField3.Clear();
451*cdf0e10cSrcweir 	aLbField4.Clear();
452*cdf0e10cSrcweir 	aLbField1.InsertEntry( aStrNone, 0 );
453*cdf0e10cSrcweir 	aLbField2.InsertEntry( aStrNone, 0 );
454*cdf0e10cSrcweir 	aLbField3.InsertEntry( aStrNone, 0 );
455*cdf0e10cSrcweir 	aLbField4.InsertEntry( aStrNone, 0 );
456*cdf0e10cSrcweir 
457*cdf0e10cSrcweir 	if ( pDoc )
458*cdf0e10cSrcweir 	{
459*cdf0e10cSrcweir 		String	aFieldName;
460*cdf0e10cSrcweir 		SCTAB	nTab		= nSrcTab;
461*cdf0e10cSrcweir 		SCCOL	nFirstCol	= theQueryData.nCol1;
462*cdf0e10cSrcweir 		SCROW	nFirstRow	= theQueryData.nRow1;
463*cdf0e10cSrcweir 		SCCOL	nMaxCol		= theQueryData.nCol2;
464*cdf0e10cSrcweir 		SCCOL	col = 0;
465*cdf0e10cSrcweir 		sal_uInt16	i=1;
466*cdf0e10cSrcweir 
467*cdf0e10cSrcweir 		for ( col=nFirstCol; col<=nMaxCol; col++ )
468*cdf0e10cSrcweir 		{
469*cdf0e10cSrcweir 			pDoc->GetString( col, nFirstRow, nTab, aFieldName );
470*cdf0e10cSrcweir 			if ( !aBtnHeader.IsChecked() || (aFieldName.Len() == 0) )
471*cdf0e10cSrcweir 			{
472*cdf0e10cSrcweir 				aFieldName  = aStrColumn;
473*cdf0e10cSrcweir 				aFieldName += ' ';
474*cdf0e10cSrcweir                 aFieldName += ScColToAlpha( col );
475*cdf0e10cSrcweir 			}
476*cdf0e10cSrcweir 			aLbField1.InsertEntry( aFieldName, i );
477*cdf0e10cSrcweir 			aLbField2.InsertEntry( aFieldName, i );
478*cdf0e10cSrcweir 			aLbField3.InsertEntry( aFieldName, i );
479*cdf0e10cSrcweir 			aLbField4.InsertEntry( aFieldName, i );
480*cdf0e10cSrcweir 			i++;
481*cdf0e10cSrcweir 		}
482*cdf0e10cSrcweir 		nFieldCount = i;
483*cdf0e10cSrcweir 	}
484*cdf0e10cSrcweir }
485*cdf0e10cSrcweir 
486*cdf0e10cSrcweir 
487*cdf0e10cSrcweir //----------------------------------------------------------------------------
488*cdf0e10cSrcweir 
489*cdf0e10cSrcweir void ScFilterDlg::UpdateValueList( sal_uInt16 nList )
490*cdf0e10cSrcweir {
491*cdf0e10cSrcweir 	if ( pDoc && nList>0 && nList<=4 )
492*cdf0e10cSrcweir 	{
493*cdf0e10cSrcweir 		ComboBox*	pValList		= aValueEdArr[nList-1];
494*cdf0e10cSrcweir 		sal_uInt16		nFieldSelPos	= aFieldLbArr[nList-1]->GetSelectEntryPos();
495*cdf0e10cSrcweir 		sal_uInt16		nListPos		= 0;
496*cdf0e10cSrcweir 		String		aCurValue  		= pValList->GetText();
497*cdf0e10cSrcweir 
498*cdf0e10cSrcweir 		pValList->Clear();
499*cdf0e10cSrcweir 		pValList->InsertEntry( aStrNotEmpty, 0 );
500*cdf0e10cSrcweir 		pValList->InsertEntry( aStrEmpty, 1 );
501*cdf0e10cSrcweir 		nListPos = 2;
502*cdf0e10cSrcweir 
503*cdf0e10cSrcweir 		if ( nFieldSelPos )
504*cdf0e10cSrcweir 		{
505*cdf0e10cSrcweir 			WaitObject aWaiter( this );		// auch wenn nur die ListBox gefuellt wird
506*cdf0e10cSrcweir 
507*cdf0e10cSrcweir 			SCCOL nColumn = theQueryData.nCol1 + static_cast<SCCOL>(nFieldSelPos) - 1;
508*cdf0e10cSrcweir 			if (!pEntryLists[nColumn])
509*cdf0e10cSrcweir 			{
510*cdf0e10cSrcweir                 sal_uInt16 nOffset = GetSliderPos();
511*cdf0e10cSrcweir 				SCTAB nTab		 = nSrcTab;
512*cdf0e10cSrcweir 				SCROW nFirstRow = theQueryData.nRow1;
513*cdf0e10cSrcweir 				SCROW nLastRow	 = theQueryData.nRow2;
514*cdf0e10cSrcweir                 mbHasDates[nOffset+nList-1] = false;
515*cdf0e10cSrcweir 
516*cdf0e10cSrcweir 				//	erstmal ohne die erste Zeile
517*cdf0e10cSrcweir 
518*cdf0e10cSrcweir 				pEntryLists[nColumn] = new TypedScStrCollection( 128, 128 );
519*cdf0e10cSrcweir 				pEntryLists[nColumn]->SetCaseSensitive( aBtnCase.IsChecked() );
520*cdf0e10cSrcweir 				pDoc->GetFilterEntriesArea( nColumn, nFirstRow+1, nLastRow,
521*cdf0e10cSrcweir                                             nTab, *pEntryLists[nColumn], mbHasDates[nOffset+nList-1] );
522*cdf0e10cSrcweir 
523*cdf0e10cSrcweir 				//	Eintrag fuer die erste Zeile
524*cdf0e10cSrcweir 				//!	Eintrag (pHdrEntry) ohne Collection erzeugen?
525*cdf0e10cSrcweir 
526*cdf0e10cSrcweir 				nHeaderPos[nColumn] = USHRT_MAX;
527*cdf0e10cSrcweir 				TypedScStrCollection aHdrColl( 1, 1 );
528*cdf0e10cSrcweir                 bool bDummy = false;
529*cdf0e10cSrcweir 				pDoc->GetFilterEntriesArea( nColumn, nFirstRow, nFirstRow,
530*cdf0e10cSrcweir                                             nTab, aHdrColl, bDummy );
531*cdf0e10cSrcweir 				TypedStrData* pHdrEntry = aHdrColl[0];
532*cdf0e10cSrcweir 				if ( pHdrEntry )
533*cdf0e10cSrcweir 				{
534*cdf0e10cSrcweir 					TypedStrData* pNewEntry = new TypedStrData(*pHdrEntry);
535*cdf0e10cSrcweir 					if ( pEntryLists[nColumn]->Insert( pNewEntry ) )
536*cdf0e10cSrcweir 					{
537*cdf0e10cSrcweir 						nHeaderPos[nColumn] = pEntryLists[nColumn]->IndexOf( pNewEntry );
538*cdf0e10cSrcweir 						DBG_ASSERT( nHeaderPos[nColumn] != USHRT_MAX,
539*cdf0e10cSrcweir 									"Header-Eintrag nicht wiedergefunden" );
540*cdf0e10cSrcweir 					}
541*cdf0e10cSrcweir 					else
542*cdf0e10cSrcweir 						delete pNewEntry;			// war schon drin
543*cdf0e10cSrcweir 				}
544*cdf0e10cSrcweir 			}
545*cdf0e10cSrcweir 
546*cdf0e10cSrcweir 			TypedScStrCollection* pColl = pEntryLists[nColumn];
547*cdf0e10cSrcweir 			sal_uInt16 nValueCount = pColl->GetCount();
548*cdf0e10cSrcweir 			if ( nValueCount > 0 )
549*cdf0e10cSrcweir 			{
550*cdf0e10cSrcweir 				for ( sal_uInt16 i=0; i<nValueCount; i++ )
551*cdf0e10cSrcweir 				{
552*cdf0e10cSrcweir 					pValList->InsertEntry( (*pColl)[i]->GetString(), nListPos );
553*cdf0e10cSrcweir 					nListPos++;
554*cdf0e10cSrcweir 				}
555*cdf0e10cSrcweir 			}
556*cdf0e10cSrcweir 		}
557*cdf0e10cSrcweir 		pValList->SetText( aCurValue );
558*cdf0e10cSrcweir 	}
559*cdf0e10cSrcweir 
560*cdf0e10cSrcweir 	UpdateHdrInValueList( nList );
561*cdf0e10cSrcweir }
562*cdf0e10cSrcweir 
563*cdf0e10cSrcweir void ScFilterDlg::UpdateHdrInValueList( sal_uInt16 nList )
564*cdf0e10cSrcweir {
565*cdf0e10cSrcweir 	//!	GetText / SetText ??
566*cdf0e10cSrcweir 
567*cdf0e10cSrcweir 	if ( pDoc && nList>0 && nList<=4 )
568*cdf0e10cSrcweir 	{
569*cdf0e10cSrcweir 		sal_uInt16 nFieldSelPos = aFieldLbArr[nList-1]->GetSelectEntryPos();
570*cdf0e10cSrcweir 		if ( nFieldSelPos )
571*cdf0e10cSrcweir 		{
572*cdf0e10cSrcweir 			SCCOL nColumn = theQueryData.nCol1 + static_cast<SCCOL>(nFieldSelPos) - 1;
573*cdf0e10cSrcweir 			if ( pEntryLists[nColumn] )
574*cdf0e10cSrcweir 			{
575*cdf0e10cSrcweir 				sal_uInt16 nPos = nHeaderPos[nColumn];
576*cdf0e10cSrcweir 				if ( nPos != USHRT_MAX )
577*cdf0e10cSrcweir 				{
578*cdf0e10cSrcweir 					ComboBox* pValList = aValueEdArr[nList-1];
579*cdf0e10cSrcweir 					sal_uInt16 nListPos = nPos + 2;					// nach "leer" und "nicht leer"
580*cdf0e10cSrcweir 
581*cdf0e10cSrcweir 					TypedStrData* pHdrEntry = (*pEntryLists[nColumn])[nPos];
582*cdf0e10cSrcweir 					if ( pHdrEntry )
583*cdf0e10cSrcweir 					{
584*cdf0e10cSrcweir 						String aHdrStr = pHdrEntry->GetString();
585*cdf0e10cSrcweir 						sal_Bool bWasThere = ( pValList->GetEntry(nListPos) == aHdrStr );
586*cdf0e10cSrcweir 						sal_Bool bInclude = !aBtnHeader.IsChecked();
587*cdf0e10cSrcweir 
588*cdf0e10cSrcweir 						if (bInclude)			// Eintrag aufnehmen
589*cdf0e10cSrcweir 						{
590*cdf0e10cSrcweir 							if (!bWasThere)
591*cdf0e10cSrcweir 								pValList->InsertEntry(aHdrStr, nListPos);
592*cdf0e10cSrcweir 						}
593*cdf0e10cSrcweir 						else					// Eintrag weglassen
594*cdf0e10cSrcweir 						{
595*cdf0e10cSrcweir 							if (bWasThere)
596*cdf0e10cSrcweir 								pValList->RemoveEntry(nListPos);
597*cdf0e10cSrcweir 						}
598*cdf0e10cSrcweir 					}
599*cdf0e10cSrcweir 					else
600*cdf0e10cSrcweir 					{
601*cdf0e10cSrcweir 						DBG_ERROR("Eintag in Liste nicht gefunden");
602*cdf0e10cSrcweir 					}
603*cdf0e10cSrcweir 				}
604*cdf0e10cSrcweir 			}
605*cdf0e10cSrcweir 			else
606*cdf0e10cSrcweir 			{
607*cdf0e10cSrcweir 				DBG_ERROR("Spalte noch nicht initialisiert");
608*cdf0e10cSrcweir 			}
609*cdf0e10cSrcweir 		}
610*cdf0e10cSrcweir 	}
611*cdf0e10cSrcweir }
612*cdf0e10cSrcweir 
613*cdf0e10cSrcweir //----------------------------------------------------------------------------
614*cdf0e10cSrcweir 
615*cdf0e10cSrcweir void ScFilterDlg::ClearValueList( sal_uInt16 nList )
616*cdf0e10cSrcweir {
617*cdf0e10cSrcweir 	if ( nList>0 && nList<=4 )
618*cdf0e10cSrcweir 	{
619*cdf0e10cSrcweir 		ComboBox* pValList = aValueEdArr[nList-1];
620*cdf0e10cSrcweir 		pValList->Clear();
621*cdf0e10cSrcweir 		pValList->InsertEntry( aStrNotEmpty, 0 );
622*cdf0e10cSrcweir 		pValList->InsertEntry( aStrEmpty, 1 );
623*cdf0e10cSrcweir 		pValList->SetText( EMPTY_STRING );
624*cdf0e10cSrcweir 	}
625*cdf0e10cSrcweir }
626*cdf0e10cSrcweir 
627*cdf0e10cSrcweir 
628*cdf0e10cSrcweir //----------------------------------------------------------------------------
629*cdf0e10cSrcweir 
630*cdf0e10cSrcweir sal_uInt16 ScFilterDlg::GetFieldSelPos( SCCOL nField )
631*cdf0e10cSrcweir {
632*cdf0e10cSrcweir 	if ( nField >= theQueryData.nCol1 && nField <= theQueryData.nCol2 )
633*cdf0e10cSrcweir 		return static_cast<sal_uInt16>(nField - theQueryData.nCol1 + 1);
634*cdf0e10cSrcweir 	else
635*cdf0e10cSrcweir 		return 0;
636*cdf0e10cSrcweir }
637*cdf0e10cSrcweir 
638*cdf0e10cSrcweir //----------------------------------------------------------------------------
639*cdf0e10cSrcweir 
640*cdf0e10cSrcweir ScQueryItem* ScFilterDlg::GetOutputItem()
641*cdf0e10cSrcweir {
642*cdf0e10cSrcweir 	ScAddress		theCopyPos;
643*cdf0e10cSrcweir 	ScQueryParam 	theParam( theQueryData );
644*cdf0e10cSrcweir     sal_Bool            bCopyPosOk = sal_False;
645*cdf0e10cSrcweir 
646*cdf0e10cSrcweir 	if ( aBtnCopyResult.IsChecked() )
647*cdf0e10cSrcweir 	{
648*cdf0e10cSrcweir 		String theCopyStr( aEdCopyArea.GetText() );
649*cdf0e10cSrcweir 		xub_StrLen nColonPos = theCopyStr.Search( ':' );
650*cdf0e10cSrcweir 
651*cdf0e10cSrcweir 		if ( STRING_NOTFOUND != nColonPos )
652*cdf0e10cSrcweir 			theCopyStr.Erase( nColonPos );
653*cdf0e10cSrcweir 
654*cdf0e10cSrcweir 		sal_uInt16 nResult = theCopyPos.Parse( theCopyStr, pDoc, pDoc->GetAddressConvention() );
655*cdf0e10cSrcweir 		bCopyPosOk = ( SCA_VALID == (nResult & SCA_VALID) );
656*cdf0e10cSrcweir 	}
657*cdf0e10cSrcweir 
658*cdf0e10cSrcweir 	if ( aBtnCopyResult.IsChecked() && bCopyPosOk )
659*cdf0e10cSrcweir 	{
660*cdf0e10cSrcweir 		theParam.bInplace   = sal_False;
661*cdf0e10cSrcweir 		theParam.nDestTab	= theCopyPos.Tab();
662*cdf0e10cSrcweir 		theParam.nDestCol	= theCopyPos.Col();
663*cdf0e10cSrcweir 		theParam.nDestRow	= theCopyPos.Row();
664*cdf0e10cSrcweir 	}
665*cdf0e10cSrcweir 	else
666*cdf0e10cSrcweir 	{
667*cdf0e10cSrcweir 		theParam.bInplace   = sal_True;
668*cdf0e10cSrcweir 		theParam.nDestTab	= 0;
669*cdf0e10cSrcweir 		theParam.nDestCol	= 0;
670*cdf0e10cSrcweir 		theParam.nDestRow	= 0;
671*cdf0e10cSrcweir 	}
672*cdf0e10cSrcweir 
673*cdf0e10cSrcweir 	theParam.bHasHeader		= aBtnHeader.IsChecked();
674*cdf0e10cSrcweir 	theParam.bByRow			= sal_True;
675*cdf0e10cSrcweir 	theParam.bDuplicate		= !aBtnUnique.IsChecked();
676*cdf0e10cSrcweir 	theParam.bCaseSens 		= aBtnCase.IsChecked();
677*cdf0e10cSrcweir 	theParam.bRegExp		= aBtnRegExp.IsChecked();
678*cdf0e10cSrcweir 	theParam.bDestPers		= aBtnDestPers.IsChecked();
679*cdf0e10cSrcweir 
680*cdf0e10cSrcweir 	//	nur die drei eingestellten - alles andere zuruecksetzen
681*cdf0e10cSrcweir 
682*cdf0e10cSrcweir 	DELETEZ( pOutItem );
683*cdf0e10cSrcweir 	pOutItem = new ScQueryItem( nWhichQuery, &theParam );
684*cdf0e10cSrcweir 
685*cdf0e10cSrcweir 	return pOutItem;
686*cdf0e10cSrcweir }
687*cdf0e10cSrcweir 
688*cdf0e10cSrcweir 
689*cdf0e10cSrcweir //----------------------------------------------------------------------------
690*cdf0e10cSrcweir 
691*cdf0e10cSrcweir sal_Bool ScFilterDlg::IsRefInputMode() const
692*cdf0e10cSrcweir {
693*cdf0e10cSrcweir 	return bRefInputMode;
694*cdf0e10cSrcweir }
695*cdf0e10cSrcweir 
696*cdf0e10cSrcweir 
697*cdf0e10cSrcweir //----------------------------------------------------------------------------
698*cdf0e10cSrcweir // Handler:
699*cdf0e10cSrcweir // ========
700*cdf0e10cSrcweir 
701*cdf0e10cSrcweir IMPL_LINK( ScFilterDlg, EndDlgHdl, Button*, pBtn )
702*cdf0e10cSrcweir {
703*cdf0e10cSrcweir 	if ( pBtn == &aBtnOk )
704*cdf0e10cSrcweir 	{
705*cdf0e10cSrcweir 		sal_Bool bAreaInputOk = sal_True;
706*cdf0e10cSrcweir 
707*cdf0e10cSrcweir 		if ( aBtnCopyResult.IsChecked() )
708*cdf0e10cSrcweir 		{
709*cdf0e10cSrcweir 			if ( !pOptionsMgr->VerifyPosStr( aEdCopyArea.GetText() ) )
710*cdf0e10cSrcweir 			{
711*cdf0e10cSrcweir 				if ( !aBtnMore.GetState() )
712*cdf0e10cSrcweir 					aBtnMore.SetState( sal_True );
713*cdf0e10cSrcweir 
714*cdf0e10cSrcweir 				ERRORBOX( STR_INVALID_TABREF );
715*cdf0e10cSrcweir 				aEdCopyArea.GrabFocus();
716*cdf0e10cSrcweir 				bAreaInputOk = sal_False;
717*cdf0e10cSrcweir 			}
718*cdf0e10cSrcweir 		}
719*cdf0e10cSrcweir 
720*cdf0e10cSrcweir 		if ( bAreaInputOk )
721*cdf0e10cSrcweir 		{
722*cdf0e10cSrcweir 			SetDispatcherLock( sal_False );
723*cdf0e10cSrcweir 			SwitchToDocument();
724*cdf0e10cSrcweir 			GetBindings().GetDispatcher()->Execute( FID_FILTER_OK,
725*cdf0e10cSrcweir 									  SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD,
726*cdf0e10cSrcweir 									  GetOutputItem(), 0L, 0L );
727*cdf0e10cSrcweir 			Close();
728*cdf0e10cSrcweir 		}
729*cdf0e10cSrcweir 	}
730*cdf0e10cSrcweir 	else if ( pBtn == &aBtnCancel )
731*cdf0e10cSrcweir 	{
732*cdf0e10cSrcweir 		Close();
733*cdf0e10cSrcweir 	}
734*cdf0e10cSrcweir 
735*cdf0e10cSrcweir 	return 0;
736*cdf0e10cSrcweir }
737*cdf0e10cSrcweir 
738*cdf0e10cSrcweir 
739*cdf0e10cSrcweir //----------------------------------------------------------------------------
740*cdf0e10cSrcweir 
741*cdf0e10cSrcweir IMPL_LINK( ScFilterDlg, MoreClickHdl, MoreButton*, EMPTYARG )
742*cdf0e10cSrcweir {
743*cdf0e10cSrcweir 	if ( aBtnMore.GetState() )
744*cdf0e10cSrcweir 		pTimer->Start();
745*cdf0e10cSrcweir 	else
746*cdf0e10cSrcweir 	{
747*cdf0e10cSrcweir 		pTimer->Stop();
748*cdf0e10cSrcweir 		bRefInputMode = sal_False;
749*cdf0e10cSrcweir 		//@BugID 54702 Enablen/Disablen nur noch in Basisklasse
750*cdf0e10cSrcweir 		//SFX_APPWINDOW->Disable(sal_False);		//! allgemeine Methode im ScAnyRefDlg
751*cdf0e10cSrcweir 	}
752*cdf0e10cSrcweir 	return 0;
753*cdf0e10cSrcweir }
754*cdf0e10cSrcweir 
755*cdf0e10cSrcweir 
756*cdf0e10cSrcweir //----------------------------------------------------------------------------
757*cdf0e10cSrcweir 
758*cdf0e10cSrcweir IMPL_LINK( ScFilterDlg, TimeOutHdl, Timer*, _pTimer )
759*cdf0e10cSrcweir {
760*cdf0e10cSrcweir     // alle 50ms nachschauen, ob RefInputMode noch stimmt
761*cdf0e10cSrcweir 
762*cdf0e10cSrcweir     if( _pTimer == pTimer && IsActive() )
763*cdf0e10cSrcweir         bRefInputMode = (aEdCopyArea.HasFocus() || aRbCopyArea.HasFocus());
764*cdf0e10cSrcweir 
765*cdf0e10cSrcweir     if ( aBtnMore.GetState() )
766*cdf0e10cSrcweir         pTimer->Start();
767*cdf0e10cSrcweir 
768*cdf0e10cSrcweir     return 0;
769*cdf0e10cSrcweir }
770*cdf0e10cSrcweir 
771*cdf0e10cSrcweir 
772*cdf0e10cSrcweir //----------------------------------------------------------------------------
773*cdf0e10cSrcweir 
774*cdf0e10cSrcweir IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox*, pLb )
775*cdf0e10cSrcweir {
776*cdf0e10cSrcweir 	/*
777*cdf0e10cSrcweir 	 * Behandlung der Enable/Disable-Logik,
778*cdf0e10cSrcweir 	 * abhaengig davon, welche ListBox angefasst wurde:
779*cdf0e10cSrcweir 	 */
780*cdf0e10cSrcweir 	sal_uInt16 nOffset = GetSliderPos();
781*cdf0e10cSrcweir 
782*cdf0e10cSrcweir 	if ( pLb == &aLbConnect1 )
783*cdf0e10cSrcweir 	{
784*cdf0e10cSrcweir 		aLbField1.Enable();
785*cdf0e10cSrcweir 		aLbCond1.Enable();
786*cdf0e10cSrcweir 		aEdVal1.Enable();
787*cdf0e10cSrcweir 
788*cdf0e10cSrcweir 		sal_uInt16 	nConnect1 = aLbConnect1.GetSelectEntryPos();
789*cdf0e10cSrcweir 		sal_uInt16 nQE = nOffset;
790*cdf0e10cSrcweir 		theQueryData.GetEntry(nQE).eConnect =(ScQueryConnect)nConnect1;
791*cdf0e10cSrcweir 		bRefreshExceptQuery[nQE]=sal_True;
792*cdf0e10cSrcweir 	}
793*cdf0e10cSrcweir 
794*cdf0e10cSrcweir 	else if ( pLb == &aLbConnect2 )
795*cdf0e10cSrcweir 	{
796*cdf0e10cSrcweir 		aLbField2.Enable();
797*cdf0e10cSrcweir 		aLbCond2.Enable();
798*cdf0e10cSrcweir 		aEdVal2.Enable();
799*cdf0e10cSrcweir 
800*cdf0e10cSrcweir 		sal_uInt16 	nConnect2 = aLbConnect2.GetSelectEntryPos();
801*cdf0e10cSrcweir 		sal_uInt16 nQE = 1+nOffset;
802*cdf0e10cSrcweir 		theQueryData.GetEntry(nQE).eConnect =(ScQueryConnect)nConnect2;
803*cdf0e10cSrcweir 		 bRefreshExceptQuery[nQE]=sal_True;
804*cdf0e10cSrcweir 	}
805*cdf0e10cSrcweir 	else if ( pLb == &aLbConnect3 )
806*cdf0e10cSrcweir 	{
807*cdf0e10cSrcweir 		aLbField3.Enable();
808*cdf0e10cSrcweir 		aLbCond3.Enable();
809*cdf0e10cSrcweir 		aEdVal3.Enable();
810*cdf0e10cSrcweir 
811*cdf0e10cSrcweir 		sal_uInt16 	nConnect3 = aLbConnect3.GetSelectEntryPos();
812*cdf0e10cSrcweir 		sal_uInt16 nQE = 2+nOffset;
813*cdf0e10cSrcweir 		theQueryData.GetEntry(nQE).eConnect = (ScQueryConnect)nConnect3;
814*cdf0e10cSrcweir 		bRefreshExceptQuery[nQE]=sal_True;
815*cdf0e10cSrcweir 
816*cdf0e10cSrcweir 	}
817*cdf0e10cSrcweir 	else if ( pLb == &aLbConnect4 )
818*cdf0e10cSrcweir 	{
819*cdf0e10cSrcweir 		aLbField4.Enable();
820*cdf0e10cSrcweir 		aLbCond4.Enable();
821*cdf0e10cSrcweir 		aEdVal4.Enable();
822*cdf0e10cSrcweir 
823*cdf0e10cSrcweir 		sal_uInt16 	nConnect4 = aLbConnect4.GetSelectEntryPos();
824*cdf0e10cSrcweir 		sal_uInt16 nQE = 3+nOffset;
825*cdf0e10cSrcweir 		theQueryData.GetEntry(nQE).eConnect = (ScQueryConnect)nConnect4;
826*cdf0e10cSrcweir 		bRefreshExceptQuery[nQE]=sal_True;
827*cdf0e10cSrcweir 
828*cdf0e10cSrcweir 	}
829*cdf0e10cSrcweir 	else if ( pLb == &aLbField1 )
830*cdf0e10cSrcweir 	{
831*cdf0e10cSrcweir 		if ( aLbField1.GetSelectEntryPos() == 0 )
832*cdf0e10cSrcweir 		{
833*cdf0e10cSrcweir 			aLbConnect2.SetNoSelection();
834*cdf0e10cSrcweir 			aLbConnect3.SetNoSelection();
835*cdf0e10cSrcweir 			aLbConnect4.SetNoSelection();
836*cdf0e10cSrcweir 			aLbField2.SelectEntryPos( 0 );
837*cdf0e10cSrcweir 			aLbField3.SelectEntryPos( 0 );
838*cdf0e10cSrcweir 			aLbField4.SelectEntryPos( 0 );
839*cdf0e10cSrcweir 			aLbCond2.SelectEntryPos( 0 );
840*cdf0e10cSrcweir 			aLbCond3.SelectEntryPos( 0 );
841*cdf0e10cSrcweir 			aLbCond4.SelectEntryPos( 0 );
842*cdf0e10cSrcweir 			ClearValueList( 1 );
843*cdf0e10cSrcweir 			ClearValueList( 2 );
844*cdf0e10cSrcweir 			ClearValueList( 3 );
845*cdf0e10cSrcweir 			ClearValueList( 4 );
846*cdf0e10cSrcweir 
847*cdf0e10cSrcweir 			aLbConnect2.Disable();
848*cdf0e10cSrcweir 			aLbConnect3.Disable();
849*cdf0e10cSrcweir 			aLbConnect4.Disable();
850*cdf0e10cSrcweir 			aLbField2.Disable();
851*cdf0e10cSrcweir 			aLbField3.Disable();
852*cdf0e10cSrcweir 			aLbField4.Disable();
853*cdf0e10cSrcweir 			aLbCond2.Disable();
854*cdf0e10cSrcweir 			aLbCond3.Disable();
855*cdf0e10cSrcweir 			aLbCond4.Disable();
856*cdf0e10cSrcweir 			aEdVal2.Disable();
857*cdf0e10cSrcweir 			aEdVal3.Disable();
858*cdf0e10cSrcweir 			aEdVal4.Disable();
859*cdf0e10cSrcweir 			for (sal_uInt16 i= nOffset; i< MAXQUERY; i++)
860*cdf0e10cSrcweir 			{
861*cdf0e10cSrcweir 				theQueryData.GetEntry(i).bDoQuery = sal_False;
862*cdf0e10cSrcweir 				bRefreshExceptQuery[i]=sal_False;
863*cdf0e10cSrcweir 				theQueryData.GetEntry(i).nField =  static_cast<SCCOL>(0);
864*cdf0e10cSrcweir 			}
865*cdf0e10cSrcweir 			bRefreshExceptQuery[nOffset] =sal_True;
866*cdf0e10cSrcweir 		}
867*cdf0e10cSrcweir 		else
868*cdf0e10cSrcweir 		{
869*cdf0e10cSrcweir 			UpdateValueList( 1 );
870*cdf0e10cSrcweir 			if ( !aLbConnect2.IsEnabled() )
871*cdf0e10cSrcweir 			{
872*cdf0e10cSrcweir 				aLbConnect2.Enable();
873*cdf0e10cSrcweir 			}
874*cdf0e10cSrcweir 			theQueryData.GetEntry(nOffset).bDoQuery = sal_True;
875*cdf0e10cSrcweir 			sal_uInt16 	nField	= pLb->GetSelectEntryPos();
876*cdf0e10cSrcweir 			theQueryData.GetEntry(nOffset).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;
877*cdf0e10cSrcweir 		}
878*cdf0e10cSrcweir 	}
879*cdf0e10cSrcweir 	else if ( pLb == &aLbField2 )
880*cdf0e10cSrcweir 	{
881*cdf0e10cSrcweir 		if ( aLbField2.GetSelectEntryPos() == 0 )
882*cdf0e10cSrcweir 		{
883*cdf0e10cSrcweir             aLbConnect3.SetNoSelection();
884*cdf0e10cSrcweir 			aLbConnect4.SetNoSelection();
885*cdf0e10cSrcweir 			aLbField3.SelectEntryPos( 0 );
886*cdf0e10cSrcweir 			aLbField4.SelectEntryPos( 0 );
887*cdf0e10cSrcweir 			aLbCond3.SelectEntryPos( 0 );
888*cdf0e10cSrcweir 			aLbCond4.SelectEntryPos( 0 );
889*cdf0e10cSrcweir 			ClearValueList( 2 );
890*cdf0e10cSrcweir 			ClearValueList( 3 );
891*cdf0e10cSrcweir 			ClearValueList( 4 );
892*cdf0e10cSrcweir 
893*cdf0e10cSrcweir 			aLbConnect3.Disable();
894*cdf0e10cSrcweir 			aLbConnect4.Disable();
895*cdf0e10cSrcweir 			aLbField3.Disable();
896*cdf0e10cSrcweir 			aLbField4.Disable();
897*cdf0e10cSrcweir 			aLbCond3.Disable();
898*cdf0e10cSrcweir 			aLbCond4.Disable();
899*cdf0e10cSrcweir 			aEdVal3.Disable();
900*cdf0e10cSrcweir 			aEdVal4.Disable();
901*cdf0e10cSrcweir 
902*cdf0e10cSrcweir 			sal_uInt16 nTemp=nOffset+1;
903*cdf0e10cSrcweir 			for (sal_uInt16 i= nTemp; i< MAXQUERY; i++)
904*cdf0e10cSrcweir 			{
905*cdf0e10cSrcweir 				theQueryData.GetEntry(i).bDoQuery = sal_False;
906*cdf0e10cSrcweir 				bRefreshExceptQuery[i]=sal_False;
907*cdf0e10cSrcweir 				theQueryData.GetEntry(i).nField =  static_cast<SCCOL>(0);
908*cdf0e10cSrcweir 			}
909*cdf0e10cSrcweir 			bRefreshExceptQuery[nTemp]=sal_True;
910*cdf0e10cSrcweir 		}
911*cdf0e10cSrcweir 		else
912*cdf0e10cSrcweir 		{
913*cdf0e10cSrcweir 			UpdateValueList( 2 );
914*cdf0e10cSrcweir 			if ( !aLbConnect3.IsEnabled() )
915*cdf0e10cSrcweir 			{
916*cdf0e10cSrcweir 				aLbConnect3.Enable();
917*cdf0e10cSrcweir 			}
918*cdf0e10cSrcweir 			sal_uInt16 	nField	= pLb->GetSelectEntryPos();
919*cdf0e10cSrcweir 			sal_uInt16 nQ=1+nOffset;
920*cdf0e10cSrcweir 			theQueryData.GetEntry(nQ).bDoQuery = sal_True;
921*cdf0e10cSrcweir 			theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;
922*cdf0e10cSrcweir 		}
923*cdf0e10cSrcweir 	}
924*cdf0e10cSrcweir 	else if ( pLb == &aLbField3 )
925*cdf0e10cSrcweir 	{
926*cdf0e10cSrcweir 		if ( aLbField3.GetSelectEntryPos() == 0 )
927*cdf0e10cSrcweir 		{
928*cdf0e10cSrcweir 			aLbConnect4.SetNoSelection();
929*cdf0e10cSrcweir 			aLbField4.SelectEntryPos( 0 );
930*cdf0e10cSrcweir 			aLbCond4.SelectEntryPos( 0 );
931*cdf0e10cSrcweir 			ClearValueList( 3 );
932*cdf0e10cSrcweir 			ClearValueList( 4 );
933*cdf0e10cSrcweir 
934*cdf0e10cSrcweir 			aLbConnect4.Disable();
935*cdf0e10cSrcweir 			aLbField4.Disable();
936*cdf0e10cSrcweir 			aLbCond4.Disable();
937*cdf0e10cSrcweir 			aEdVal4.Disable();
938*cdf0e10cSrcweir 
939*cdf0e10cSrcweir 			sal_uInt16 nTemp=nOffset+2;
940*cdf0e10cSrcweir 			for (sal_uInt16 i= nTemp; i< MAXQUERY; i++)
941*cdf0e10cSrcweir 			{
942*cdf0e10cSrcweir 				theQueryData.GetEntry(i).bDoQuery = sal_False;
943*cdf0e10cSrcweir 				bRefreshExceptQuery[i]=sal_False;
944*cdf0e10cSrcweir 				theQueryData.GetEntry(i).nField =  static_cast<SCCOL>(0);
945*cdf0e10cSrcweir 			}
946*cdf0e10cSrcweir 			bRefreshExceptQuery[nTemp]=sal_True;
947*cdf0e10cSrcweir 		}
948*cdf0e10cSrcweir 		else
949*cdf0e10cSrcweir 		{
950*cdf0e10cSrcweir 			UpdateValueList( 3 );
951*cdf0e10cSrcweir 			if ( !aLbConnect4.IsEnabled() )
952*cdf0e10cSrcweir 			{
953*cdf0e10cSrcweir 				aLbConnect4.Enable();
954*cdf0e10cSrcweir 			}
955*cdf0e10cSrcweir 
956*cdf0e10cSrcweir 			sal_uInt16 	nField	= pLb->GetSelectEntryPos();
957*cdf0e10cSrcweir 			sal_uInt16 nQ=2+nOffset;
958*cdf0e10cSrcweir 			theQueryData.GetEntry(nQ).bDoQuery = sal_True;
959*cdf0e10cSrcweir 			theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;
960*cdf0e10cSrcweir 
961*cdf0e10cSrcweir 		}
962*cdf0e10cSrcweir 	}
963*cdf0e10cSrcweir 	else if ( pLb == &aLbField4 )
964*cdf0e10cSrcweir 	{
965*cdf0e10cSrcweir 		if ( aLbField4.GetSelectEntryPos() == 0 )
966*cdf0e10cSrcweir 		{
967*cdf0e10cSrcweir 			ClearValueList( 4 );
968*cdf0e10cSrcweir 			sal_uInt16 nTemp=nOffset+3;
969*cdf0e10cSrcweir 			for (sal_uInt16 i= nTemp; i< MAXQUERY; i++)
970*cdf0e10cSrcweir 			{
971*cdf0e10cSrcweir 				theQueryData.GetEntry(i).bDoQuery = sal_False;
972*cdf0e10cSrcweir 				bRefreshExceptQuery[i]=sal_False;
973*cdf0e10cSrcweir 				theQueryData.GetEntry(i).nField =  static_cast<SCCOL>(0);
974*cdf0e10cSrcweir 			}
975*cdf0e10cSrcweir 			bRefreshExceptQuery[nTemp]=sal_True;
976*cdf0e10cSrcweir 		}
977*cdf0e10cSrcweir 		else
978*cdf0e10cSrcweir 		{
979*cdf0e10cSrcweir 			UpdateValueList( 4 );
980*cdf0e10cSrcweir 			sal_uInt16 	nField	= pLb->GetSelectEntryPos();
981*cdf0e10cSrcweir 			sal_uInt16 nQ=3+nOffset;
982*cdf0e10cSrcweir 			theQueryData.GetEntry(nQ).bDoQuery = sal_True;
983*cdf0e10cSrcweir 			theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;
984*cdf0e10cSrcweir 		}
985*cdf0e10cSrcweir 
986*cdf0e10cSrcweir 	}
987*cdf0e10cSrcweir 	else if ( pLb == &aLbCond1)
988*cdf0e10cSrcweir 	{
989*cdf0e10cSrcweir 		theQueryData.GetEntry(nOffset).eOp=(ScQueryOp)pLb->GetSelectEntryPos();
990*cdf0e10cSrcweir 	}
991*cdf0e10cSrcweir 	else if ( pLb == &aLbCond2)
992*cdf0e10cSrcweir 	{
993*cdf0e10cSrcweir 		sal_uInt16 nQ=1+nOffset;
994*cdf0e10cSrcweir 		theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos();
995*cdf0e10cSrcweir 	}
996*cdf0e10cSrcweir 	else if ( pLb == &aLbCond3)
997*cdf0e10cSrcweir 	{
998*cdf0e10cSrcweir 		sal_uInt16 nQ=2+nOffset;
999*cdf0e10cSrcweir 		theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos();
1000*cdf0e10cSrcweir 	}
1001*cdf0e10cSrcweir 	else
1002*cdf0e10cSrcweir 	{
1003*cdf0e10cSrcweir 		sal_uInt16 nQ=3+nOffset;
1004*cdf0e10cSrcweir 		theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos();
1005*cdf0e10cSrcweir 	}
1006*cdf0e10cSrcweir 
1007*cdf0e10cSrcweir 	return 0;
1008*cdf0e10cSrcweir }
1009*cdf0e10cSrcweir 
1010*cdf0e10cSrcweir 
1011*cdf0e10cSrcweir //----------------------------------------------------------------------------
1012*cdf0e10cSrcweir 
1013*cdf0e10cSrcweir IMPL_LINK( ScFilterDlg, CheckBoxHdl, CheckBox*, pBox )
1014*cdf0e10cSrcweir {
1015*cdf0e10cSrcweir 	//	Spaltenkoepfe:
1016*cdf0e10cSrcweir 	//		FeldListen: Spaltexx <-> Spaltenkopf-String
1017*cdf0e10cSrcweir 	//		WertListen: Spaltenkopf-Wert entfaellt.
1018*cdf0e10cSrcweir 	//	Gross-/Kleinschreibung:
1019*cdf0e10cSrcweir 	//		WertListen: komplett neu
1020*cdf0e10cSrcweir 
1021*cdf0e10cSrcweir 	if ( pBox == &aBtnHeader )				// Feldlisten und Wertlisten
1022*cdf0e10cSrcweir 	{
1023*cdf0e10cSrcweir 		sal_uInt16 nCurSel1 = aLbField1.GetSelectEntryPos();
1024*cdf0e10cSrcweir 		sal_uInt16 nCurSel2 = aLbField2.GetSelectEntryPos();
1025*cdf0e10cSrcweir 		sal_uInt16 nCurSel3 = aLbField3.GetSelectEntryPos();
1026*cdf0e10cSrcweir 		sal_uInt16 nCurSel4 = aLbField4.GetSelectEntryPos();
1027*cdf0e10cSrcweir 		FillFieldLists();
1028*cdf0e10cSrcweir 		aLbField1.SelectEntryPos( nCurSel1 );
1029*cdf0e10cSrcweir 		aLbField2.SelectEntryPos( nCurSel2 );
1030*cdf0e10cSrcweir 		aLbField3.SelectEntryPos( nCurSel3 );
1031*cdf0e10cSrcweir 		aLbField4.SelectEntryPos( nCurSel4 );
1032*cdf0e10cSrcweir 
1033*cdf0e10cSrcweir 		UpdateHdrInValueList( 1 );
1034*cdf0e10cSrcweir 		UpdateHdrInValueList( 2 );
1035*cdf0e10cSrcweir 		UpdateHdrInValueList( 3 );
1036*cdf0e10cSrcweir 		UpdateHdrInValueList( 4 );
1037*cdf0e10cSrcweir 	}
1038*cdf0e10cSrcweir 
1039*cdf0e10cSrcweir 	if ( pBox == &aBtnCase )			// Wertlisten komplett
1040*cdf0e10cSrcweir 	{
1041*cdf0e10cSrcweir 		for (sal_uInt16 i=0; i<=MAXCOL; i++)
1042*cdf0e10cSrcweir 			DELETEZ( pEntryLists[i] );
1043*cdf0e10cSrcweir 
1044*cdf0e10cSrcweir 		UpdateValueList( 1 );		// aktueller Text wird gemerkt
1045*cdf0e10cSrcweir 		UpdateValueList( 2 );
1046*cdf0e10cSrcweir 		UpdateValueList( 3 );
1047*cdf0e10cSrcweir 		UpdateValueList( 4 );
1048*cdf0e10cSrcweir 	}
1049*cdf0e10cSrcweir 
1050*cdf0e10cSrcweir 	return 0;
1051*cdf0e10cSrcweir }
1052*cdf0e10cSrcweir 
1053*cdf0e10cSrcweir 
1054*cdf0e10cSrcweir //----------------------------------------------------------------------------
1055*cdf0e10cSrcweir 
1056*cdf0e10cSrcweir IMPL_LINK( ScFilterDlg, ValModifyHdl, ComboBox*, pEd )
1057*cdf0e10cSrcweir {
1058*cdf0e10cSrcweir 	sal_uInt16   nOffset = GetSliderPos();
1059*cdf0e10cSrcweir 	sal_uInt16   i=0;
1060*cdf0e10cSrcweir 	sal_uInt16   nQE =i + nOffset;
1061*cdf0e10cSrcweir 	if ( pEd )
1062*cdf0e10cSrcweir 	{
1063*cdf0e10cSrcweir 		String    aStrVal	= pEd->GetText();
1064*cdf0e10cSrcweir 		ListBox*  pLbCond	= &aLbCond1;
1065*cdf0e10cSrcweir 		ListBox*  pLbField	= &aLbField1;
1066*cdf0e10cSrcweir 		if ( pEd == &aEdVal2 )
1067*cdf0e10cSrcweir 		{
1068*cdf0e10cSrcweir 			pLbCond  = &aLbCond2;
1069*cdf0e10cSrcweir 			pLbField = &aLbField2;
1070*cdf0e10cSrcweir 			i=1;
1071*cdf0e10cSrcweir 			nQE=i+nOffset;
1072*cdf0e10cSrcweir 		}
1073*cdf0e10cSrcweir 		if ( pEd == &aEdVal3 )
1074*cdf0e10cSrcweir 		{
1075*cdf0e10cSrcweir 			pLbCond = &aLbCond3;
1076*cdf0e10cSrcweir 			pLbField = &aLbField3;
1077*cdf0e10cSrcweir 			i=2;
1078*cdf0e10cSrcweir 			nQE=i+nOffset;
1079*cdf0e10cSrcweir 		}
1080*cdf0e10cSrcweir 		if ( pEd == &aEdVal4 )
1081*cdf0e10cSrcweir 		{
1082*cdf0e10cSrcweir 			pLbCond = &aLbCond4;
1083*cdf0e10cSrcweir 			pLbField = &aLbField4;
1084*cdf0e10cSrcweir 			i=3;
1085*cdf0e10cSrcweir 			nQE=i+nOffset;
1086*cdf0e10cSrcweir 		}
1087*cdf0e10cSrcweir 
1088*cdf0e10cSrcweir 		if ( aStrEmpty == aStrVal || aStrNotEmpty == aStrVal )
1089*cdf0e10cSrcweir 		{
1090*cdf0e10cSrcweir 			pLbCond->SelectEntry( '=' );
1091*cdf0e10cSrcweir 			pLbCond->Disable();
1092*cdf0e10cSrcweir 		}
1093*cdf0e10cSrcweir 		else
1094*cdf0e10cSrcweir 			pLbCond->Enable();
1095*cdf0e10cSrcweir 
1096*cdf0e10cSrcweir 		ScQueryEntry& rEntry = theQueryData.GetEntry( nQE );
1097*cdf0e10cSrcweir 		sal_Bool bDoThis = (pLbField->GetSelectEntryPos() != 0);
1098*cdf0e10cSrcweir 		rEntry.bDoQuery = bDoThis;
1099*cdf0e10cSrcweir 
1100*cdf0e10cSrcweir 		if ( rEntry.bDoQuery || bRefreshExceptQuery[nQE] )
1101*cdf0e10cSrcweir 		{
1102*cdf0e10cSrcweir 			if ( aStrVal == aStrEmpty )
1103*cdf0e10cSrcweir 			{
1104*cdf0e10cSrcweir 				rEntry.pStr->Erase();
1105*cdf0e10cSrcweir 				rEntry.nVal = SC_EMPTYFIELDS;
1106*cdf0e10cSrcweir 				rEntry.bQueryByString = sal_False;
1107*cdf0e10cSrcweir 			}
1108*cdf0e10cSrcweir 			else if ( aStrVal == aStrNotEmpty )
1109*cdf0e10cSrcweir 			{
1110*cdf0e10cSrcweir 				rEntry.pStr->Erase();
1111*cdf0e10cSrcweir 				rEntry.nVal = SC_NONEMPTYFIELDS;
1112*cdf0e10cSrcweir 				rEntry.bQueryByString = sal_False;
1113*cdf0e10cSrcweir 			}
1114*cdf0e10cSrcweir 			else
1115*cdf0e10cSrcweir 			{
1116*cdf0e10cSrcweir 				*rEntry.pStr		  = aStrVal;
1117*cdf0e10cSrcweir 				rEntry.nVal			  = 0;
1118*cdf0e10cSrcweir 				rEntry.bQueryByString = sal_True;
1119*cdf0e10cSrcweir 			}
1120*cdf0e10cSrcweir 
1121*cdf0e10cSrcweir 			sal_uInt16 	nField	= pLbField->GetSelectEntryPos();
1122*cdf0e10cSrcweir 			rEntry.nField = nField ? (theQueryData.nCol1 +
1123*cdf0e10cSrcweir 				static_cast<SCCOL>(nField) - 1) : static_cast<SCCOL>(0);
1124*cdf0e10cSrcweir 
1125*cdf0e10cSrcweir 			ScQueryOp eOp  = (ScQueryOp)pLbCond->GetSelectEntryPos();
1126*cdf0e10cSrcweir             rEntry.eOp	   = eOp;
1127*cdf0e10cSrcweir             rEntry.bQueryByDate = mbHasDates[nQE];
1128*cdf0e10cSrcweir 
1129*cdf0e10cSrcweir 		}
1130*cdf0e10cSrcweir 	}
1131*cdf0e10cSrcweir 	return 0;
1132*cdf0e10cSrcweir }
1133*cdf0e10cSrcweir 
1134*cdf0e10cSrcweir //----------------------------------------------------------------------------
1135*cdf0e10cSrcweir IMPL_LINK( ScFilterDlg, ScrollHdl, ScrollBar*, EMPTYARG )
1136*cdf0e10cSrcweir {
1137*cdf0e10cSrcweir 	SliderMoved();
1138*cdf0e10cSrcweir 	return 0;
1139*cdf0e10cSrcweir }
1140*cdf0e10cSrcweir 
1141*cdf0e10cSrcweir void ScFilterDlg::SliderMoved()
1142*cdf0e10cSrcweir {
1143*cdf0e10cSrcweir 	sal_uInt16 nOffset = GetSliderPos();
1144*cdf0e10cSrcweir 	RefreshEditRow( nOffset);
1145*cdf0e10cSrcweir }
1146*cdf0e10cSrcweir sal_uInt16 ScFilterDlg::GetSliderPos()
1147*cdf0e10cSrcweir {
1148*cdf0e10cSrcweir 	return (sal_uInt16) aScrollBar.GetThumbPos();
1149*cdf0e10cSrcweir }
1150*cdf0e10cSrcweir void ScFilterDlg::RefreshEditRow( sal_uInt16 nOffset )
1151*cdf0e10cSrcweir {
1152*cdf0e10cSrcweir 	if (nOffset==0)
1153*cdf0e10cSrcweir 		aConnLbArr[0]->Hide();
1154*cdf0e10cSrcweir 	else
1155*cdf0e10cSrcweir 		aConnLbArr[0]->Show();
1156*cdf0e10cSrcweir 
1157*cdf0e10cSrcweir 	for ( sal_uInt16 i=0; i<4; i++ )
1158*cdf0e10cSrcweir 	{
1159*cdf0e10cSrcweir 		String	aValStr;
1160*cdf0e10cSrcweir 		sal_uInt16	nCondPos	 = 0;
1161*cdf0e10cSrcweir 		sal_uInt16	nFieldSelPos = 0;
1162*cdf0e10cSrcweir 		sal_uInt16  nQE = i+nOffset;
1163*cdf0e10cSrcweir 
1164*cdf0e10cSrcweir 		ScQueryEntry& rEntry = theQueryData.GetEntry( nQE);
1165*cdf0e10cSrcweir 		if ( rEntry.bDoQuery || bRefreshExceptQuery[nQE] )
1166*cdf0e10cSrcweir 		{
1167*cdf0e10cSrcweir 			nCondPos	 = (sal_uInt16)rEntry.eOp;
1168*cdf0e10cSrcweir 			if(rEntry.bDoQuery)
1169*cdf0e10cSrcweir 			   nFieldSelPos = GetFieldSelPos( static_cast<SCCOL>(rEntry.nField) );
1170*cdf0e10cSrcweir 
1171*cdf0e10cSrcweir 			if ( rEntry.nVal == SC_EMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING )
1172*cdf0e10cSrcweir 			{
1173*cdf0e10cSrcweir 				aValStr = aStrEmpty;
1174*cdf0e10cSrcweir 				aCondLbArr[i]->Disable();
1175*cdf0e10cSrcweir 			}
1176*cdf0e10cSrcweir 			else if ( rEntry.nVal == SC_NONEMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING )
1177*cdf0e10cSrcweir 			{
1178*cdf0e10cSrcweir 				aValStr = aStrNotEmpty;
1179*cdf0e10cSrcweir 				aCondLbArr[i]->Disable();
1180*cdf0e10cSrcweir 			}
1181*cdf0e10cSrcweir 			else
1182*cdf0e10cSrcweir 			{
1183*cdf0e10cSrcweir 				aValStr = *rEntry.pStr;
1184*cdf0e10cSrcweir 				aCondLbArr[i]->Enable();
1185*cdf0e10cSrcweir 			}
1186*cdf0e10cSrcweir 			aFieldLbArr[i]->Enable();
1187*cdf0e10cSrcweir 			aValueEdArr[i]->Enable();
1188*cdf0e10cSrcweir 
1189*cdf0e10cSrcweir 			if (nOffset==0)
1190*cdf0e10cSrcweir 			{
1191*cdf0e10cSrcweir 				if (i<3)
1192*cdf0e10cSrcweir 				{
1193*cdf0e10cSrcweir 					if(rEntry.bDoQuery)
1194*cdf0e10cSrcweir 						aConnLbArr[i+1]->Enable();
1195*cdf0e10cSrcweir 					else
1196*cdf0e10cSrcweir 						aConnLbArr[i+1]->Disable();
1197*cdf0e10cSrcweir 					sal_uInt16 nQENext = nQE+1;
1198*cdf0e10cSrcweir 					if(theQueryData.GetEntry(nQENext).bDoQuery || bRefreshExceptQuery[nQENext])
1199*cdf0e10cSrcweir 						aConnLbArr[i+1]->SelectEntryPos( (sal_uInt16) theQueryData.GetEntry(nQENext).eConnect );
1200*cdf0e10cSrcweir 					else
1201*cdf0e10cSrcweir 						aConnLbArr[i+1]->SetNoSelection();
1202*cdf0e10cSrcweir 				}
1203*cdf0e10cSrcweir 			}
1204*cdf0e10cSrcweir 			else
1205*cdf0e10cSrcweir 			{
1206*cdf0e10cSrcweir 				if(theQueryData.GetEntry( nQE-1).bDoQuery)
1207*cdf0e10cSrcweir 					aConnLbArr[i]->Enable();
1208*cdf0e10cSrcweir 				else
1209*cdf0e10cSrcweir 					aConnLbArr[i]->Disable();
1210*cdf0e10cSrcweir 
1211*cdf0e10cSrcweir 				if(rEntry.bDoQuery || bRefreshExceptQuery[nQE])
1212*cdf0e10cSrcweir 					aConnLbArr[i]->SelectEntryPos( (sal_uInt16) rEntry.eConnect );
1213*cdf0e10cSrcweir 				else
1214*cdf0e10cSrcweir 					aConnLbArr[i]->SetNoSelection();
1215*cdf0e10cSrcweir 			}
1216*cdf0e10cSrcweir 
1217*cdf0e10cSrcweir 		}
1218*cdf0e10cSrcweir 		else
1219*cdf0e10cSrcweir 		{
1220*cdf0e10cSrcweir 			if (nOffset==0)
1221*cdf0e10cSrcweir 			{
1222*cdf0e10cSrcweir 				if(i<3)
1223*cdf0e10cSrcweir 				{
1224*cdf0e10cSrcweir 					aConnLbArr[i+1]->SetNoSelection();
1225*cdf0e10cSrcweir 					aConnLbArr[i+1]->Disable();
1226*cdf0e10cSrcweir 				}
1227*cdf0e10cSrcweir 			}
1228*cdf0e10cSrcweir 			else
1229*cdf0e10cSrcweir 			{
1230*cdf0e10cSrcweir 				if(theQueryData.GetEntry( nQE-1).bDoQuery)
1231*cdf0e10cSrcweir 					aConnLbArr[i]->Enable();
1232*cdf0e10cSrcweir 				else
1233*cdf0e10cSrcweir 					aConnLbArr[i]->Disable();
1234*cdf0e10cSrcweir 				aConnLbArr[i]->SetNoSelection();
1235*cdf0e10cSrcweir 			}
1236*cdf0e10cSrcweir 			aFieldLbArr[i]->Disable();
1237*cdf0e10cSrcweir 			aCondLbArr[i]->Disable();
1238*cdf0e10cSrcweir 			aValueEdArr[i]->Disable();
1239*cdf0e10cSrcweir 		}
1240*cdf0e10cSrcweir 		aFieldLbArr[i]->SelectEntryPos( nFieldSelPos );
1241*cdf0e10cSrcweir 		aCondLbArr [i]->SelectEntryPos( nCondPos );
1242*cdf0e10cSrcweir 		aValueEdArr[i]->SetText( aValStr );
1243*cdf0e10cSrcweir 		UpdateValueList( static_cast<sal_uInt16>(i+1) );
1244*cdf0e10cSrcweir 	}
1245*cdf0e10cSrcweir }
1246