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