Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #undef SC_DLLIMPLEMENTATION
22 :
23 :
24 :
25 : #include <vcl/waitobj.hxx>
26 :
27 : #include "viewdata.hxx"
28 : #include "document.hxx"
29 : #include "uiitems.hxx"
30 : #include "global.hxx"
31 : #include "globalnames.hxx"
32 : #include "dbdata.hxx"
33 : #include "scresid.hxx"
34 : #include "queryentry.hxx"
35 : #include "typedstrdata.hxx"
36 :
37 : #include "sc.hrc"
38 : #include "filter.hrc"
39 : #include "globstr.hrc"
40 :
41 : #define _PFILTDLG_CXX
42 : #include "pfiltdlg.hxx"
43 : #undef _PFILTDLG_CXX
44 : #include <svl/zforlist.hxx>
45 :
46 : //==================================================================
47 :
48 0 : ScPivotFilterDlg::ScPivotFilterDlg( Window* pParent,
49 : const SfxItemSet& rArgSet,
50 : SCTAB nSourceTab )
51 :
52 : : ModalDialog ( pParent, ScResId( RID_SCDLG_PIVOTFILTER ) ),
53 : //
54 : aFlCriteria ( this, ScResId( FL_CRITERIA ) ),
55 : aLbField1 ( this, ScResId( LB_FIELD1 ) ),
56 : aLbCond1 ( this, ScResId( LB_COND1 ) ),
57 : aEdVal1 ( this, ScResId( ED_VAL1 ) ),
58 : aLbConnect1 ( this, ScResId( LB_OP1 ) ),
59 : aLbField2 ( this, ScResId( LB_FIELD2 ) ),
60 : aLbCond2 ( this, ScResId( LB_COND2 ) ),
61 : aEdVal2 ( this, ScResId( ED_VAL2 ) ),
62 : aLbConnect2 ( this, ScResId( LB_OP2 ) ),
63 : aLbField3 ( this, ScResId( LB_FIELD3 ) ),
64 : aLbCond3 ( this, ScResId( LB_COND3 ) ),
65 : aEdVal3 ( this, ScResId( ED_VAL3 ) ),
66 : aFtConnect ( this, ScResId( FT_OP ) ),
67 : aFtField ( this, ScResId( FT_FIELD ) ),
68 : aFtCond ( this, ScResId( FT_COND ) ),
69 : aFtVal ( this, ScResId( FT_VAL ) ),
70 : aFlOptions ( this, ScResId( FL_OPTIONS ) ),
71 : aBtnCase ( this, ScResId( BTN_CASE ) ),
72 : aBtnRegExp ( this, ScResId( BTN_REGEXP ) ),
73 : aBtnUnique ( this, ScResId( BTN_UNIQUE ) ),
74 : aFtDbAreaLabel ( this, ScResId( FT_DBAREA_LABEL ) ),
75 : aFtDbArea ( this, ScResId( FT_DBAREA ) ),
76 : aBtnOk ( this, ScResId( BTN_OK ) ),
77 : aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
78 : aBtnHelp ( this, ScResId( BTN_HELP ) ),
79 : aBtnMore ( this, ScResId( BTN_MORE ) ),
80 : aStrUndefined ( SC_RESSTR(SCSTR_UNDEFINED) ),
81 : aStrNone ( SC_RESSTR(SCSTR_NONE) ),
82 : aStrEmpty ( SC_RESSTR(SCSTR_FILTER_EMPTY) ),
83 : aStrNotEmpty ( SC_RESSTR(SCSTR_FILTER_NOTEMPTY) ),
84 : aStrRow ( SC_RESSTR(SCSTR_ROW) ),
85 : aStrColumn ( SC_RESSTR(SCSTR_COLUMN) ),
86 : //
87 0 : nWhichQuery ( rArgSet.GetPool()->GetWhich( SID_QUERY ) ),
88 : theQueryData ( ((const ScQueryItem&)
89 0 : rArgSet.Get( nWhichQuery )).GetQueryData() ),
90 : pOutItem ( NULL ),
91 : pViewData ( NULL ),
92 : pDoc ( NULL ),
93 : nSrcTab ( nSourceTab ), // ist nicht im QueryParam
94 0 : nFieldCount ( 0 )
95 : {
96 0 : for (sal_uInt16 i=0; i<=MAXCOL; i++)
97 0 : pEntryLists[i] = NULL;
98 :
99 0 : Init( rArgSet );
100 0 : FreeResource();
101 0 : }
102 :
103 : //------------------------------------------------------------------------
104 :
105 0 : ScPivotFilterDlg::~ScPivotFilterDlg()
106 : {
107 0 : for (sal_uInt16 i=0; i<=MAXCOL; i++)
108 0 : delete pEntryLists[i];
109 :
110 0 : if ( pOutItem )
111 0 : delete pOutItem;
112 0 : }
113 :
114 : //------------------------------------------------------------------------
115 :
116 0 : void ScPivotFilterDlg::Init( const SfxItemSet& rArgSet )
117 : {
118 : const ScQueryItem& rQueryItem = (const ScQueryItem&)
119 0 : rArgSet.Get( nWhichQuery );
120 :
121 0 : aBtnCase.SetClickHdl ( LINK( this, ScPivotFilterDlg, CheckBoxHdl ) );
122 :
123 0 : aLbField1.SetSelectHdl ( LINK( this, ScPivotFilterDlg, LbSelectHdl ) );
124 0 : aLbField2.SetSelectHdl ( LINK( this, ScPivotFilterDlg, LbSelectHdl ) );
125 0 : aLbField3.SetSelectHdl ( LINK( this, ScPivotFilterDlg, LbSelectHdl ) );
126 0 : aLbConnect1.SetSelectHdl( LINK( this, ScPivotFilterDlg, LbSelectHdl ) );
127 0 : aLbConnect2.SetSelectHdl( LINK( this, ScPivotFilterDlg, LbSelectHdl ) );
128 :
129 0 : aBtnMore.AddWindow( &aBtnCase );
130 0 : aBtnMore.AddWindow( &aBtnRegExp );
131 0 : aBtnMore.AddWindow( &aBtnUnique );
132 0 : aBtnMore.AddWindow( &aFtDbAreaLabel );
133 0 : aBtnMore.AddWindow( &aFtDbArea );
134 0 : aBtnMore.AddWindow( &aFlOptions );
135 :
136 0 : aBtnCase .Check( theQueryData.bCaseSens );
137 0 : aBtnRegExp .Check( theQueryData.bRegExp );
138 0 : aBtnUnique .Check( !theQueryData.bDuplicate );
139 :
140 0 : pViewData = rQueryItem.GetViewData();
141 0 : pDoc = pViewData ? pViewData->GetDocument() : NULL;
142 :
143 : // fuer leichteren Zugriff:
144 0 : aFieldLbArr [0] = &aLbField1;
145 0 : aFieldLbArr [1] = &aLbField2;
146 0 : aFieldLbArr [2] = &aLbField3;
147 0 : aValueEdArr [0] = &aEdVal1;
148 0 : aValueEdArr [1] = &aEdVal2;
149 0 : aValueEdArr [2] = &aEdVal3;
150 0 : aCondLbArr [0] = &aLbCond1;
151 0 : aCondLbArr [1] = &aLbCond2;
152 0 : aCondLbArr [2] = &aLbCond3;
153 :
154 0 : if ( pViewData && pDoc )
155 : {
156 0 : rtl::OUString theAreaStr;
157 : ScRange theCurArea ( ScAddress( theQueryData.nCol1,
158 : theQueryData.nRow1,
159 : nSrcTab ),
160 : ScAddress( theQueryData.nCol2,
161 : theQueryData.nRow2,
162 0 : nSrcTab ) );
163 0 : ScDBCollection* pDBColl = pDoc->GetDBCollection();
164 0 : ::rtl::OUString theDbName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_DB_LOCAL_NONAME));
165 :
166 : /*
167 : * Ueberpruefen, ob es sich bei dem uebergebenen
168 : * Bereich um einen Datenbankbereich handelt:
169 : */
170 :
171 0 : theCurArea.Format( theAreaStr, SCR_ABS_3D, pDoc, pDoc->GetAddressConvention() );
172 :
173 0 : if ( pDBColl )
174 : {
175 0 : ScAddress& rStart = theCurArea.aStart;
176 0 : ScAddress& rEnd = theCurArea.aEnd;
177 0 : ScDBData* pDBData = pDBColl->GetDBAtArea( rStart.Tab(),
178 0 : rStart.Col(), rStart.Row(),
179 0 : rEnd.Col(), rEnd.Row() );
180 0 : if ( pDBData )
181 0 : theDbName = pDBData->GetName();
182 : }
183 :
184 0 : ::rtl::OUStringBuffer aBuf;
185 0 : aBuf.appendAscii(" (");
186 0 : aBuf.append(theDbName);
187 0 : aBuf.append(sal_Unicode(')'));
188 0 : aFtDbArea.SetText(aBuf.makeStringAndClear());
189 : }
190 : else
191 : {
192 0 : aFtDbArea.SetText( EMPTY_STRING );
193 : }
194 :
195 : // Feldlisten einlesen und Eintraege selektieren:
196 :
197 0 : FillFieldLists();
198 :
199 0 : for ( SCSIZE i=0; i<3; i++ )
200 : {
201 0 : if ( theQueryData.GetEntry(i).bDoQuery )
202 : {
203 0 : const ScQueryEntry& rEntry = theQueryData.GetEntry(i);
204 0 : const ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
205 0 : rtl::OUString aValStr = rItem.maString;
206 0 : if (rEntry.IsQueryByEmpty())
207 0 : aValStr = aStrEmpty;
208 0 : else if (rEntry.IsQueryByNonEmpty())
209 0 : aValStr = aStrNotEmpty;
210 0 : sal_uInt16 nCondPos = (sal_uInt16)rEntry.eOp;
211 0 : sal_uInt16 nFieldSelPos = GetFieldSelPos( static_cast<SCCOL>(rEntry.nField) );
212 :
213 0 : aFieldLbArr[i]->SelectEntryPos( nFieldSelPos );
214 0 : aCondLbArr [i]->SelectEntryPos( nCondPos );
215 0 : UpdateValueList( static_cast<sal_uInt16>(i+1) );
216 0 : aValueEdArr[i]->SetText( aValStr );
217 0 : if (aValStr.equals(aStrEmpty) || aValStr.equals(aStrNotEmpty))
218 0 : aCondLbArr[i]->Disable();
219 : }
220 : else
221 : {
222 0 : aFieldLbArr[i]->SelectEntryPos( 0 ); // "keiner" selektieren
223 0 : aCondLbArr [i]->SelectEntryPos( 0 ); // "=" selektieren
224 0 : UpdateValueList( static_cast<sal_uInt16>(i) );
225 0 : aValueEdArr[i]->SetText( EMPTY_STRING );
226 : }
227 0 : aValueEdArr[i]->SetModifyHdl( LINK( this, ScPivotFilterDlg, ValModifyHdl ) );
228 : }
229 :
230 : // Disable/Enable Logik:
231 :
232 0 : (aLbField1.GetSelectEntryPos() != 0)
233 0 : && (aLbField2.GetSelectEntryPos() != 0)
234 0 : ? aLbConnect1.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(1).eConnect )
235 0 : : aLbConnect1.SetNoSelection();
236 :
237 0 : (aLbField2.GetSelectEntryPos() != 0)
238 0 : && (aLbField3.GetSelectEntryPos() != 0)
239 0 : ? aLbConnect2.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(2).eConnect )
240 0 : : aLbConnect2.SetNoSelection();
241 :
242 0 : if ( aLbField1.GetSelectEntryPos() == 0 )
243 : {
244 0 : aLbConnect1.Disable();
245 0 : aLbField2.Disable();
246 0 : aLbCond2.Disable();
247 0 : aEdVal2.Disable();
248 : }
249 0 : else if ( aLbConnect1.GetSelectEntryCount() == 0 )
250 : {
251 0 : aLbField2.Disable();
252 0 : aLbCond2.Disable();
253 0 : aEdVal2.Disable();
254 : }
255 :
256 0 : if ( aLbField2.GetSelectEntryPos() == 0 )
257 : {
258 0 : aLbConnect2.Disable();
259 0 : aLbField3.Disable();
260 0 : aLbCond3.Disable();
261 0 : aEdVal3.Disable();
262 : }
263 0 : else if ( aLbConnect2.GetSelectEntryCount() == 0 )
264 : {
265 0 : aLbField3.Disable();
266 0 : aLbCond3.Disable();
267 0 : aEdVal3.Disable();
268 : }
269 0 : }
270 :
271 : //------------------------------------------------------------------------
272 :
273 0 : void ScPivotFilterDlg::FillFieldLists()
274 : {
275 0 : aLbField1.Clear();
276 0 : aLbField2.Clear();
277 0 : aLbField3.Clear();
278 0 : aLbField1.InsertEntry( aStrNone, 0 );
279 0 : aLbField2.InsertEntry( aStrNone, 0 );
280 0 : aLbField3.InsertEntry( aStrNone, 0 );
281 :
282 0 : if ( pDoc )
283 : {
284 0 : rtl::OUString aFieldName;
285 0 : SCTAB nTab = nSrcTab;
286 0 : SCCOL nFirstCol = theQueryData.nCol1;
287 0 : SCROW nFirstRow = theQueryData.nRow1;
288 0 : SCCOL nMaxCol = theQueryData.nCol2;
289 0 : SCCOL col = 0;
290 0 : sal_uInt16 i=1;
291 :
292 0 : for ( col=nFirstCol; col<=nMaxCol; col++ )
293 : {
294 0 : pDoc->GetString( col, nFirstRow, nTab, aFieldName );
295 0 : if ( aFieldName.isEmpty() )
296 : {
297 0 : rtl::OUStringBuffer aBuf;
298 0 : aBuf.append(aStrColumn);
299 0 : aFieldName = aBuf.makeStringAndClear().replaceAll("%1", ScColToAlpha( col ));
300 : }
301 0 : aLbField1.InsertEntry( aFieldName, i );
302 0 : aLbField2.InsertEntry( aFieldName, i );
303 0 : aLbField3.InsertEntry( aFieldName, i );
304 0 : i++;
305 : }
306 0 : nFieldCount = i;
307 : }
308 0 : }
309 :
310 : //------------------------------------------------------------------------
311 :
312 0 : void ScPivotFilterDlg::UpdateValueList( sal_uInt16 nList )
313 : {
314 0 : if ( pDoc && nList>0 && nList<=3 )
315 : {
316 0 : ComboBox* pValList = aValueEdArr[nList-1];
317 0 : sal_uInt16 nFieldSelPos = aFieldLbArr[nList-1]->GetSelectEntryPos();
318 0 : sal_uInt16 nListPos = 0;
319 0 : rtl::OUString aCurValue = pValList->GetText();
320 :
321 0 : pValList->Clear();
322 0 : pValList->InsertEntry( aStrNotEmpty, 0 );
323 0 : pValList->InsertEntry( aStrEmpty, 1 );
324 0 : nListPos = 2;
325 :
326 0 : if ( pDoc && nFieldSelPos )
327 : {
328 0 : SCCOL nColumn = theQueryData.nCol1 + static_cast<SCCOL>(nFieldSelPos) - 1;
329 0 : if (!pEntryLists[nColumn])
330 : {
331 0 : WaitObject aWaiter( this );
332 :
333 0 : SCTAB nTab = nSrcTab;
334 0 : SCROW nFirstRow = theQueryData.nRow1;
335 0 : SCROW nLastRow = theQueryData.nRow2;
336 0 : nFirstRow++;
337 0 : bool bHasDates = false;
338 0 : bool bCaseSens = aBtnCase.IsChecked();
339 0 : pEntryLists[nColumn] = new std::vector<ScTypedStrData>;
340 : pDoc->GetFilterEntriesArea(
341 0 : nColumn, nFirstRow, nLastRow, nTab, bCaseSens, *pEntryLists[nColumn], bHasDates);
342 : }
343 :
344 0 : std::vector<ScTypedStrData>* pColl = pEntryLists[nColumn];
345 0 : std::vector<ScTypedStrData>::const_iterator it = pColl->begin(), itEnd = pColl->end();
346 0 : for (; it != itEnd; ++it)
347 : {
348 0 : pValList->InsertEntry(it->GetString(), nListPos);
349 0 : nListPos++;
350 : }
351 : }
352 0 : pValList->SetText( aCurValue );
353 : }
354 0 : }
355 :
356 : //------------------------------------------------------------------------
357 :
358 0 : void ScPivotFilterDlg::ClearValueList( sal_uInt16 nList )
359 : {
360 0 : if ( nList>0 && nList<=3 )
361 : {
362 0 : ComboBox* pValList = aValueEdArr[nList-1];
363 0 : pValList->Clear();
364 0 : pValList->InsertEntry( aStrNotEmpty, 0 );
365 0 : pValList->InsertEntry( aStrEmpty, 1 );
366 0 : pValList->SetText( EMPTY_STRING );
367 : }
368 0 : }
369 :
370 : //------------------------------------------------------------------------
371 :
372 0 : sal_uInt16 ScPivotFilterDlg::GetFieldSelPos( SCCOL nField )
373 : {
374 0 : if ( nField >= theQueryData.nCol1 && nField <= theQueryData.nCol2 )
375 0 : return static_cast<sal_uInt16>(nField - theQueryData.nCol1 + 1);
376 : else
377 0 : return 0;
378 : }
379 :
380 : //------------------------------------------------------------------------
381 :
382 0 : const ScQueryItem& ScPivotFilterDlg::GetOutputItem()
383 : {
384 0 : ScQueryParam theParam( theQueryData );
385 0 : sal_uInt16 nConnect1 = aLbConnect1.GetSelectEntryPos();
386 0 : sal_uInt16 nConnect2 = aLbConnect2.GetSelectEntryPos();
387 :
388 0 : for ( SCSIZE i=0; i<3; i++ )
389 : {
390 0 : sal_uInt16 nField = aFieldLbArr[i]->GetSelectEntryPos();
391 0 : ScQueryOp eOp = (ScQueryOp)aCondLbArr[i]->GetSelectEntryPos();
392 :
393 0 : sal_Bool bDoThis = (aFieldLbArr[i]->GetSelectEntryPos() != 0);
394 0 : theParam.GetEntry(i).bDoQuery = bDoThis;
395 :
396 0 : if ( bDoThis )
397 : {
398 0 : ScQueryEntry& rEntry = theParam.GetEntry(i);
399 0 : ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
400 :
401 0 : rtl::OUString aStrVal = aValueEdArr[i]->GetText();
402 :
403 : /*
404 : * Dialog liefert die ausgezeichneten Feldwerte "leer"/"nicht leer"
405 : * als Konstanten in nVal in Verbindung mit dem Schalter
406 : * bQueryByString auf FALSE.
407 : */
408 0 : if ( aStrVal.equals(aStrEmpty) )
409 : {
410 : OSL_ASSERT(eOp == SC_EQUAL);
411 0 : rEntry.SetQueryByEmpty();
412 : }
413 0 : else if ( aStrVal.equals(aStrNotEmpty) )
414 : {
415 : OSL_ASSERT(eOp == SC_EQUAL);
416 0 : rEntry.SetQueryByNonEmpty();
417 : }
418 : else
419 : {
420 0 : rItem.maString = aStrVal;
421 0 : rItem.mfVal = 0.0;
422 0 : rItem.meType = ScQueryEntry::ByString;
423 : }
424 :
425 : rEntry.nField = nField ? (theQueryData.nCol1 +
426 0 : static_cast<SCCOL>(nField) - 1) : static_cast<SCCOL>(0);
427 0 : rEntry.eOp = eOp;
428 : }
429 : }
430 :
431 0 : theParam.GetEntry(1).eConnect = (nConnect1 != LISTBOX_ENTRY_NOTFOUND)
432 : ? (ScQueryConnect)nConnect1
433 0 : : SC_AND;
434 0 : theParam.GetEntry(2).eConnect = (nConnect2 != LISTBOX_ENTRY_NOTFOUND)
435 : ? (ScQueryConnect)nConnect2
436 0 : : SC_AND;
437 :
438 0 : theParam.bInplace = false;
439 0 : theParam.nDestTab = 0; // Woher kommen diese Werte?
440 0 : theParam.nDestCol = 0;
441 0 : theParam.nDestRow = 0;
442 :
443 0 : theParam.bDuplicate = !aBtnUnique.IsChecked();
444 0 : theParam.bCaseSens = aBtnCase.IsChecked();
445 0 : theParam.bRegExp = aBtnRegExp.IsChecked();
446 :
447 0 : if ( pOutItem ) DELETEZ( pOutItem );
448 0 : pOutItem = new ScQueryItem( nWhichQuery, &theParam );
449 :
450 0 : return *pOutItem;
451 : }
452 :
453 : //------------------------------------------------------------------------
454 : // Handler:
455 : //------------------------------------------------------------------------
456 :
457 0 : IMPL_LINK( ScPivotFilterDlg, LbSelectHdl, ListBox*, pLb )
458 : {
459 : /*
460 : * Behandlung der Enable/Disable-Logik,
461 : * abhaengig davon, welche ListBox angefasst wurde:
462 : */
463 :
464 0 : if ( pLb == &aLbConnect1 )
465 : {
466 0 : if ( !aLbField2.IsEnabled() )
467 : {
468 0 : aLbField2.Enable();
469 0 : aLbCond2.Enable();
470 0 : aEdVal2.Enable();
471 : }
472 : }
473 0 : else if ( pLb == &aLbConnect2 )
474 : {
475 0 : if ( !aLbField3.IsEnabled() )
476 : {
477 0 : aLbField3.Enable();
478 0 : aLbCond3.Enable();
479 0 : aEdVal3.Enable();
480 : }
481 : }
482 0 : else if ( pLb == &aLbField1 )
483 : {
484 0 : if ( aLbField1.GetSelectEntryPos() == 0 )
485 : {
486 0 : aLbConnect1.SetNoSelection();
487 0 : aLbConnect2.SetNoSelection();
488 0 : aLbField2.SelectEntryPos( 0 );
489 0 : aLbField3.SelectEntryPos( 0 );
490 0 : aLbCond2.SelectEntryPos( 0 );
491 0 : aLbCond3.SelectEntryPos( 0 );
492 0 : ClearValueList( 1 );
493 0 : ClearValueList( 2 );
494 0 : ClearValueList( 3 );
495 :
496 0 : aLbConnect1.Disable();
497 0 : aLbConnect2.Disable();
498 0 : aLbField2.Disable();
499 0 : aLbField3.Disable();
500 0 : aLbCond2.Disable();
501 0 : aLbCond3.Disable();
502 0 : aEdVal2.Disable();
503 0 : aEdVal3.Disable();
504 : }
505 : else
506 : {
507 0 : UpdateValueList( 1 );
508 0 : if ( !aLbConnect1.IsEnabled() )
509 : {
510 0 : aLbConnect1.Enable();
511 : }
512 : }
513 : }
514 0 : else if ( pLb == &aLbField2 )
515 : {
516 0 : if ( aLbField2.GetSelectEntryPos() == 0 )
517 : {
518 0 : aLbConnect2.SetNoSelection();
519 0 : aLbField3.SelectEntryPos( 0 );
520 0 : aLbCond3.SelectEntryPos( 0 );
521 0 : ClearValueList( 2 );
522 0 : ClearValueList( 3 );
523 :
524 0 : aLbConnect2.Disable();
525 0 : aLbField3.Disable();
526 0 : aLbCond3.Disable();
527 0 : aEdVal3.Disable();
528 : }
529 : else
530 : {
531 0 : UpdateValueList( 2 );
532 0 : if ( !aLbConnect2.IsEnabled() )
533 : {
534 0 : aLbConnect2.Enable();
535 : }
536 : }
537 : }
538 0 : else if ( pLb == &aLbField3 )
539 : {
540 0 : ( aLbField3.GetSelectEntryPos() == 0 )
541 0 : ? ClearValueList( 3 )
542 0 : : UpdateValueList( 3 );
543 : }
544 :
545 0 : return 0;
546 : }
547 :
548 : //----------------------------------------------------------------------------
549 :
550 0 : IMPL_LINK( ScPivotFilterDlg, CheckBoxHdl, CheckBox*, pBox )
551 : {
552 : // bei Gross-/Kleinschreibung die Werte-Listen aktualisieren
553 :
554 0 : if ( pBox == &aBtnCase ) // Wertlisten
555 : {
556 0 : for (sal_uInt16 i=0; i<=MAXCOL; i++)
557 0 : DELETEZ( pEntryLists[i] );
558 :
559 0 : rtl::OUString aCurVal1 = aEdVal1.GetText();
560 0 : rtl::OUString aCurVal2 = aEdVal2.GetText();
561 0 : rtl::OUString aCurVal3 = aEdVal3.GetText();
562 0 : UpdateValueList( 1 );
563 0 : UpdateValueList( 2 );
564 0 : UpdateValueList( 3 );
565 0 : aEdVal1.SetText( aCurVal1 );
566 0 : aEdVal2.SetText( aCurVal2 );
567 0 : aEdVal3.SetText( aCurVal3 );
568 : }
569 :
570 0 : return 0;
571 : }
572 :
573 : //------------------------------------------------------------------------
574 :
575 0 : IMPL_LINK( ScPivotFilterDlg, ValModifyHdl, ComboBox*, pEd )
576 : {
577 0 : if ( pEd )
578 : {
579 0 : rtl::OUString aStrVal = pEd->GetText();
580 0 : ListBox* pLb = &aLbCond1;
581 :
582 0 : if ( pEd == &aEdVal2 ) pLb = &aLbCond2;
583 0 : else if ( pEd == &aEdVal3 ) pLb = &aLbCond3;
584 :
585 : // wenn einer der Sonderwerte leer/nicht-leer
586 : // gewaehlt wird, so macht nur der =-Operator Sinn:
587 :
588 0 : if ( aStrEmpty.equals(aStrVal) || aStrNotEmpty.equals(aStrVal) )
589 : {
590 0 : pLb->SelectEntry(rtl::OUString('='));
591 0 : pLb->Disable();
592 : }
593 : else
594 0 : pLb->Enable();
595 : }
596 :
597 0 : return 0;
598 0 : }
599 :
600 :
601 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|