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