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