LCOV - code coverage report
Current view: top level - libreoffice/sc/source/ui/dbgui - pfiltdlg.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 295 0.0 %
Date: 2012-12-27 Functions: 0 17 0.0 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.10