| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sc.hxx" |
| |
| // System - Includes --------------------------------------------------------- |
| |
| |
| |
| // INCLUDE ------------------------------------------------------------------- |
| #include <rangelst.hxx> |
| #include <sfx2/dispatch.hxx> |
| #include <vcl/waitobj.hxx> |
| |
| #include "uiitems.hxx" |
| #include "dbcolect.hxx" |
| #include "reffact.hxx" |
| #include "viewdata.hxx" |
| #include "document.hxx" |
| #include "docsh.hxx" |
| #include "scresid.hxx" |
| |
| #include "foptmgr.hxx" |
| |
| #include "globstr.hrc" |
| #include "filter.hrc" |
| |
| #define _FILTDLG_CXX |
| #include "filtdlg.hxx" |
| #undef _FILTDLG_CXX |
| #include <vcl/msgbox.hxx> |
| |
| // DEFINE -------------------------------------------------------------------- |
| |
| #define ERRORBOX(rid) ErrorBox( this, WinBits( WB_OK|WB_DEF_OK), \ |
| ScGlobal::GetRscString(rid) ).Execute() |
| |
| |
| //============================================================================ |
| // class ScFilterDlg |
| |
| //---------------------------------------------------------------------------- |
| |
| ScFilterDlg::ScFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent, |
| const SfxItemSet& rArgSet ) |
| |
| : ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_FILTER ), |
| // |
| aFlCriteria ( this, ScResId( FL_CRITERIA ) ), |
| aLbConnect1 ( this, ScResId( LB_OP1 ) ), |
| aLbField1 ( this, ScResId( LB_FIELD1 ) ), |
| aLbCond1 ( this, ScResId( LB_COND1 ) ), |
| aEdVal1 ( this, ScResId( ED_VAL1 ) ), |
| aLbConnect2 ( this, ScResId( LB_OP2 ) ), |
| aLbField2 ( this, ScResId( LB_FIELD2 ) ), |
| aLbCond2 ( this, ScResId( LB_COND2 ) ), |
| aEdVal2 ( this, ScResId( ED_VAL2 ) ), |
| aLbConnect3 ( this, ScResId( LB_OP3 ) ), |
| aLbField3 ( this, ScResId( LB_FIELD3 ) ), |
| aLbCond3 ( this, ScResId( LB_COND3 ) ), |
| aEdVal3 ( this, ScResId( ED_VAL3 ) ), |
| aLbConnect4 ( this, ScResId( LB_OP4 ) ), |
| aLbField4 ( this, ScResId( LB_FIELD4 ) ), |
| aLbCond4 ( this, ScResId( LB_COND4 ) ), |
| aEdVal4 ( this, ScResId( ED_VAL4 ) ), |
| aFtConnect ( this, ScResId( FT_OP ) ), |
| aFtField ( this, ScResId( FT_FIELD ) ), |
| aFtCond ( this, ScResId( FT_COND ) ), |
| aFtVal ( this, ScResId( FT_VAL ) ), |
| aFlSeparator ( this, ScResId( FL_SEPARATOR ) ), |
| aScrollBar ( this, ScResId( LB_SCROLL ) ), |
| aFlOptions ( this, ScResId( FL_OPTIONS ) ), |
| aBtnMore ( this, ScResId( BTN_MORE ) ), |
| aBtnHelp ( this, ScResId( BTN_HELP ) ), |
| aBtnOk ( this, ScResId( BTN_OK ) ), |
| aBtnCancel ( this, ScResId( BTN_CANCEL ) ), |
| _INIT_COMMON_FILTER_RSCOBJS |
| aStrEmpty ( ScResId( SCSTR_EMPTY ) ), |
| aStrNotEmpty ( ScResId( SCSTR_NOTEMPTY ) ), |
| aStrRow ( ScResId( SCSTR_ROW ) ), |
| aStrColumn ( ScResId( SCSTR_COLUMN ) ), |
| // |
| pOptionsMgr ( NULL ), |
| nWhichQuery ( rArgSet.GetPool()->GetWhich( SID_QUERY ) ), |
| theQueryData ( ((const ScQueryItem&) |
| rArgSet.Get( nWhichQuery )).GetQueryData() ), |
| pOutItem ( NULL ), |
| pViewData ( NULL ), |
| pDoc ( NULL ), |
| nSrcTab ( 0 ), |
| nFieldCount ( 0 ), |
| bRefInputMode ( sal_False ), |
| pTimer ( NULL ) |
| { |
| for (sal_uInt16 i=0; i<=MAXCOL; i++) |
| pEntryLists[i] = NULL; |
| for (SCSIZE i=0;i<MAXQUERY;i++) |
| { |
| bRefreshExceptQuery[i]=sal_False; |
| } |
| aBtnMore.SetMoreText( String(ScResId( SCSTR_MOREBTN_MOREOPTIONS )) ); |
| aBtnMore.SetLessText( String(ScResId( SCSTR_MOREBTN_FEWEROPTIONS )) ); |
| Init( rArgSet ); |
| FreeResource(); |
| |
| // Hack: RefInput-Kontrolle |
| pTimer = new Timer; |
| pTimer->SetTimeout( 50 ); // 50ms warten |
| pTimer->SetTimeoutHdl( LINK( this, ScFilterDlg, TimeOutHdl ) ); |
| |
| String sAccName (ScResId(RID_FILTER_OPERATOR)); |
| String sIndexName(sAccName); |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1")); |
| aLbConnect1.SetAccessibleName(sIndexName); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2")); |
| aLbConnect2.SetAccessibleName(sIndexName); |
| |
| sAccName = String(ScResId(RID_FILTER_FIELDNAME)); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1")); |
| aLbField1.SetAccessibleName(sIndexName); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2")); |
| aLbField2.SetAccessibleName(sIndexName); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3")); |
| aLbField3.SetAccessibleName(sIndexName); |
| |
| |
| sAccName = String(ScResId(RID_FILTER_CONDITION)); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1")); |
| aLbCond1.SetAccessibleName(sIndexName); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2")); |
| aLbCond2.SetAccessibleName(sIndexName); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3")); |
| aLbCond3.SetAccessibleName(sIndexName); |
| |
| sAccName = String(ScResId(RID_FILTER_VALUE)); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 1")); |
| aEdVal1.SetAccessibleName(sIndexName); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 2")); |
| aEdVal2.SetAccessibleName(sIndexName); |
| sIndexName = sAccName; |
| sIndexName.AppendAscii (RTL_CONSTASCII_STRINGPARAM (" 3")); |
| aEdVal3.SetAccessibleName(sIndexName); |
| |
| aLbCopyArea.SetAccessibleName(ScResId(STR_COPY_AREA_TO)); |
| aEdCopyArea.SetAccessibleName(ScResId(STR_COPY_AREA_TO)); |
| aLbCopyArea.SetAccessibleRelationLabeledBy(&aBtnCopyResult); |
| aEdCopyArea.SetAccessibleRelationLabeledBy(&aBtnCopyResult); |
| |
| aLbConnect1.SetAccessibleRelationLabeledBy(&aFtConnect); |
| aLbConnect2.SetAccessibleRelationLabeledBy(&aFtConnect); |
| aLbField1.SetAccessibleRelationLabeledBy(&aFtField); |
| aLbField2.SetAccessibleRelationLabeledBy(&aFtField); |
| aLbField3.SetAccessibleRelationLabeledBy(&aFtField); |
| aLbCond1.SetAccessibleRelationLabeledBy(&aFtCond); |
| aLbCond2.SetAccessibleRelationLabeledBy(&aFtCond); |
| aLbCond3.SetAccessibleRelationLabeledBy(&aFtCond); |
| aEdVal1.SetAccessibleRelationLabeledBy(&aFtVal); |
| aEdVal2.SetAccessibleRelationLabeledBy(&aFtVal); |
| aEdVal3.SetAccessibleRelationLabeledBy(&aFtVal); |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| __EXPORT ScFilterDlg::~ScFilterDlg() |
| { |
| for (sal_uInt16 i=0; i<=MAXCOL; i++) |
| delete pEntryLists[i]; |
| |
| delete pOptionsMgr; |
| delete pOutItem; |
| |
| // Hack: RefInput-Kontrolle |
| pTimer->Stop(); |
| delete pTimer; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| void __EXPORT ScFilterDlg::Init( const SfxItemSet& rArgSet ) |
| { |
| const ScQueryItem& rQueryItem = (const ScQueryItem&) |
| rArgSet.Get( nWhichQuery ); |
| |
| aBtnOk.SetClickHdl ( LINK( this, ScFilterDlg, EndDlgHdl ) ); |
| aBtnCancel.SetClickHdl ( LINK( this, ScFilterDlg, EndDlgHdl ) ); |
| aBtnMore.SetClickHdl ( LINK( this, ScFilterDlg, MoreClickHdl ) ); |
| aBtnHeader.SetClickHdl ( LINK( this, ScFilterDlg, CheckBoxHdl ) ); |
| aBtnCase.SetClickHdl ( LINK( this, ScFilterDlg, CheckBoxHdl ) ); |
| // |
| aLbField1.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbField2.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbField3.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbField4.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbConnect1.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbConnect2.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbConnect3.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbConnect4.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| |
| aLbCond1.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbCond2.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbCond3.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| aLbCond4.SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) ); |
| |
| pViewData = rQueryItem.GetViewData(); |
| pDoc = pViewData ? pViewData->GetDocument() : NULL; |
| nSrcTab = pViewData ? pViewData->GetTabNo() : static_cast<SCTAB>(0); |
| |
| // fuer leichteren Zugriff: |
| aFieldLbArr [0] = &aLbField1; |
| aFieldLbArr [1] = &aLbField2; |
| aFieldLbArr [2] = &aLbField3; |
| aFieldLbArr [3] = &aLbField4; |
| aValueEdArr [0] = &aEdVal1; |
| aValueEdArr [1] = &aEdVal2; |
| aValueEdArr [2] = &aEdVal3; |
| aValueEdArr [3] = &aEdVal4; |
| aCondLbArr [0] = &aLbCond1; |
| aCondLbArr [1] = &aLbCond2; |
| aCondLbArr [2] = &aLbCond3; |
| aCondLbArr [3] = &aLbCond4; |
| aConnLbArr [0] = &aLbConnect1; |
| aConnLbArr [1] = &aLbConnect2; |
| aConnLbArr [2] = &aLbConnect3; |
| aConnLbArr [3] = &aLbConnect4; |
| |
| // Optionen initialisieren lassen: |
| |
| pOptionsMgr = new ScFilterOptionsMgr( |
| this, |
| pViewData, |
| theQueryData, |
| aBtnMore, |
| aBtnCase, |
| aBtnRegExp, |
| aBtnHeader, |
| aBtnUnique, |
| aBtnCopyResult, |
| aBtnDestPers, |
| aLbCopyArea, |
| aEdCopyArea, |
| aRbCopyArea, |
| aFtDbAreaLabel, |
| aFtDbArea, |
| aFlOptions, |
| aStrNoName, |
| aStrUndefined ); |
| |
| // Feldlisten einlesen und Eintraege selektieren: |
| |
| FillFieldLists(); |
| |
| for ( SCSIZE i=0; i<4; i++ ) |
| { |
| String aValStr; |
| sal_uInt16 nCondPos = 0; |
| sal_uInt16 nFieldSelPos = 0; |
| |
| ScQueryEntry& rEntry = theQueryData.GetEntry(i); |
| if ( rEntry.bDoQuery ) |
| { |
| nCondPos = (sal_uInt16)rEntry.eOp; |
| nFieldSelPos = GetFieldSelPos( static_cast<SCCOL>(rEntry.nField) ); |
| if ( rEntry.nVal == SC_EMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING ) |
| { |
| aValStr = aStrEmpty; |
| aCondLbArr[i]->Disable(); |
| } |
| else if ( rEntry.nVal == SC_NONEMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING ) |
| { |
| aValStr = aStrNotEmpty; |
| aCondLbArr[i]->Disable(); |
| } |
| else |
| aValStr = *rEntry.pStr; |
| } |
| else if ( i == 0 ) |
| { |
| nFieldSelPos = GetFieldSelPos( pViewData->GetCurX() ); |
| rEntry.nField = nFieldSelPos ? (theQueryData.nCol1 + |
| static_cast<SCCOL>(nFieldSelPos) - 1) : static_cast<SCCOL>(0); |
| rEntry.bDoQuery=sal_True; |
| bRefreshExceptQuery[i]=sal_True; |
| |
| } |
| aFieldLbArr[i]->SelectEntryPos( nFieldSelPos ); |
| aCondLbArr [i]->SelectEntryPos( nCondPos ); |
| aValueEdArr[i]->SetText( aValStr ); |
| aValueEdArr[i]->SetModifyHdl( LINK( this, ScFilterDlg, ValModifyHdl ) ); |
| UpdateValueList( static_cast<sal_uInt16>(i+1) ); |
| } |
| |
| aScrollBar.SetEndScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) ); |
| aScrollBar.SetScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) ); |
| |
| aScrollBar.SetRange( Range( 0, 4 ) ); |
| aScrollBar.SetLineSize( 1 ); |
| aLbConnect1.Hide(); |
| // Disable/Enable Logik: |
| |
| (aLbField1.GetSelectEntryPos() != 0) |
| && (aLbField2.GetSelectEntryPos() != 0) |
| ? aLbConnect2.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(1).eConnect ) |
| : aLbConnect2.SetNoSelection(); |
| |
| (aLbField2.GetSelectEntryPos() != 0) |
| && (aLbField3.GetSelectEntryPos() != 0) |
| ? aLbConnect3.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(2).eConnect ) |
| : aLbConnect3.SetNoSelection(); |
| |
| (aLbField3.GetSelectEntryPos() != 0) |
| && (aLbField4.GetSelectEntryPos() != 0) |
| ? aLbConnect4.SelectEntryPos( (sal_uInt16)theQueryData.GetEntry(3).eConnect ) |
| : aLbConnect4.SetNoSelection(); |
| if ( aLbField1.GetSelectEntryPos() == 0 ) |
| { |
| aLbConnect2.Disable(); |
| aLbField2.Disable(); |
| aLbCond2.Disable(); |
| aEdVal2.Disable(); |
| } |
| else if ( aLbConnect2.GetSelectEntryCount() == 0 ) |
| { |
| aLbField2.Disable(); |
| aLbCond2.Disable(); |
| aEdVal2.Disable(); |
| } |
| |
| if ( aLbField2.GetSelectEntryPos() == 0 ) |
| { |
| aLbConnect3.Disable(); |
| aLbField3.Disable(); |
| aLbCond3.Disable(); |
| aEdVal3.Disable(); |
| } |
| else if ( aLbConnect3.GetSelectEntryCount() == 0 ) |
| { |
| aLbField3.Disable(); |
| aLbCond3.Disable(); |
| aEdVal3.Disable(); |
| } |
| if ( aLbField3.GetSelectEntryPos() == 0 ) |
| { |
| aLbConnect4.Disable(); |
| aLbField4.Disable(); |
| aLbCond4.Disable(); |
| aEdVal4.Disable(); |
| } |
| else if ( aLbConnect4.GetSelectEntryCount() == 0 ) |
| { |
| aLbField4.Disable(); |
| aLbCond4.Disable(); |
| aEdVal4.Disable(); |
| } |
| |
| if(pDoc!=NULL && |
| pDoc->GetChangeTrack()!=NULL) aBtnCopyResult.Disable(); |
| // Modal-Modus einschalten |
| // SetDispatcherLock( sal_True ); |
| //@BugID 54702 Enablen/Disablen nur noch in Basisklasse |
| // SFX_APPWINDOW->Disable(sal_False); //! allgemeine Methode im ScAnyRefDlg |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| sal_Bool __EXPORT ScFilterDlg::Close() |
| { |
| if (pViewData) |
| pViewData->GetDocShell()->CancelAutoDBRange(); |
| |
| return DoClose( ScFilterDlgWrapper::GetChildWindowId() ); |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| // Uebergabe eines mit der Maus selektierten Tabellenbereiches, der dann als |
| // neue Selektion im Referenz-Edit angezeigt wird. |
| |
| void ScFilterDlg::SetReference( const ScRange& rRef, ScDocument* pDocP ) |
| { |
| if ( bRefInputMode ) // Nur moeglich, wenn im Referenz-Editmodus |
| { |
| if ( rRef.aStart != rRef.aEnd ) |
| RefInputStart( &aEdCopyArea ); |
| String aRefStr; |
| rRef.aStart.Format( aRefStr, SCA_ABS_3D, pDocP, pDocP->GetAddressConvention() ); |
| aEdCopyArea.SetRefString( aRefStr ); |
| } |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| void ScFilterDlg::SetActive() |
| { |
| if ( bRefInputMode ) |
| { |
| aEdCopyArea.GrabFocus(); |
| if ( aEdCopyArea.GetModifyHdl().IsSet() ) |
| ((Link&)aEdCopyArea.GetModifyHdl()).Call( &aEdCopyArea ); |
| } |
| else |
| GrabFocus(); |
| |
| RefInputDone(); |
| } |
| |
| //---------------------------------------------------------------------------- |
| |
| void ScFilterDlg::FillFieldLists() |
| { |
| aLbField1.Clear(); |
| aLbField2.Clear(); |
| aLbField3.Clear(); |
| aLbField4.Clear(); |
| aLbField1.InsertEntry( aStrNone, 0 ); |
| aLbField2.InsertEntry( aStrNone, 0 ); |
| aLbField3.InsertEntry( aStrNone, 0 ); |
| aLbField4.InsertEntry( aStrNone, 0 ); |
| |
| if ( pDoc ) |
| { |
| String aFieldName; |
| SCTAB nTab = nSrcTab; |
| SCCOL nFirstCol = theQueryData.nCol1; |
| SCROW nFirstRow = theQueryData.nRow1; |
| SCCOL nMaxCol = theQueryData.nCol2; |
| SCCOL col = 0; |
| sal_uInt16 i=1; |
| |
| for ( col=nFirstCol; col<=nMaxCol; col++ ) |
| { |
| pDoc->GetString( col, nFirstRow, nTab, aFieldName ); |
| if ( !aBtnHeader.IsChecked() || (aFieldName.Len() == 0) ) |
| { |
| aFieldName = aStrColumn; |
| aFieldName += ' '; |
| aFieldName += ScColToAlpha( col ); |
| } |
| aLbField1.InsertEntry( aFieldName, i ); |
| aLbField2.InsertEntry( aFieldName, i ); |
| aLbField3.InsertEntry( aFieldName, i ); |
| aLbField4.InsertEntry( aFieldName, i ); |
| i++; |
| } |
| nFieldCount = i; |
| } |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| void ScFilterDlg::UpdateValueList( sal_uInt16 nList ) |
| { |
| if ( pDoc && nList>0 && nList<=4 ) |
| { |
| ComboBox* pValList = aValueEdArr[nList-1]; |
| sal_uInt16 nFieldSelPos = aFieldLbArr[nList-1]->GetSelectEntryPos(); |
| sal_uInt16 nListPos = 0; |
| String aCurValue = pValList->GetText(); |
| |
| pValList->Clear(); |
| pValList->InsertEntry( aStrNotEmpty, 0 ); |
| pValList->InsertEntry( aStrEmpty, 1 ); |
| nListPos = 2; |
| |
| if ( nFieldSelPos ) |
| { |
| WaitObject aWaiter( this ); // auch wenn nur die ListBox gefuellt wird |
| |
| SCCOL nColumn = theQueryData.nCol1 + static_cast<SCCOL>(nFieldSelPos) - 1; |
| if (!pEntryLists[nColumn]) |
| { |
| sal_uInt16 nOffset = GetSliderPos(); |
| SCTAB nTab = nSrcTab; |
| SCROW nFirstRow = theQueryData.nRow1; |
| SCROW nLastRow = theQueryData.nRow2; |
| mbHasDates[nOffset+nList-1] = false; |
| |
| // erstmal ohne die erste Zeile |
| |
| pEntryLists[nColumn] = new TypedScStrCollection( 128, 128 ); |
| pEntryLists[nColumn]->SetCaseSensitive( aBtnCase.IsChecked() ); |
| pDoc->GetFilterEntriesArea( nColumn, nFirstRow+1, nLastRow, |
| nTab, *pEntryLists[nColumn], mbHasDates[nOffset+nList-1] ); |
| |
| // Eintrag fuer die erste Zeile |
| //! Eintrag (pHdrEntry) ohne Collection erzeugen? |
| |
| nHeaderPos[nColumn] = USHRT_MAX; |
| TypedScStrCollection aHdrColl( 1, 1 ); |
| bool bDummy = false; |
| pDoc->GetFilterEntriesArea( nColumn, nFirstRow, nFirstRow, |
| nTab, aHdrColl, bDummy ); |
| TypedStrData* pHdrEntry = aHdrColl[0]; |
| if ( pHdrEntry ) |
| { |
| TypedStrData* pNewEntry = new TypedStrData(*pHdrEntry); |
| if ( pEntryLists[nColumn]->Insert( pNewEntry ) ) |
| { |
| nHeaderPos[nColumn] = pEntryLists[nColumn]->IndexOf( pNewEntry ); |
| DBG_ASSERT( nHeaderPos[nColumn] != USHRT_MAX, |
| "Header-Eintrag nicht wiedergefunden" ); |
| } |
| else |
| delete pNewEntry; // war schon drin |
| } |
| } |
| |
| TypedScStrCollection* pColl = pEntryLists[nColumn]; |
| sal_uInt16 nValueCount = pColl->GetCount(); |
| if ( nValueCount > 0 ) |
| { |
| for ( sal_uInt16 i=0; i<nValueCount; i++ ) |
| { |
| pValList->InsertEntry( (*pColl)[i]->GetString(), nListPos ); |
| nListPos++; |
| } |
| } |
| } |
| pValList->SetText( aCurValue ); |
| } |
| |
| UpdateHdrInValueList( nList ); |
| } |
| |
| void ScFilterDlg::UpdateHdrInValueList( sal_uInt16 nList ) |
| { |
| //! GetText / SetText ?? |
| |
| if ( pDoc && nList>0 && nList<=4 ) |
| { |
| sal_uInt16 nFieldSelPos = aFieldLbArr[nList-1]->GetSelectEntryPos(); |
| if ( nFieldSelPos ) |
| { |
| SCCOL nColumn = theQueryData.nCol1 + static_cast<SCCOL>(nFieldSelPos) - 1; |
| if ( pEntryLists[nColumn] ) |
| { |
| sal_uInt16 nPos = nHeaderPos[nColumn]; |
| if ( nPos != USHRT_MAX ) |
| { |
| ComboBox* pValList = aValueEdArr[nList-1]; |
| sal_uInt16 nListPos = nPos + 2; // nach "leer" und "nicht leer" |
| |
| TypedStrData* pHdrEntry = (*pEntryLists[nColumn])[nPos]; |
| if ( pHdrEntry ) |
| { |
| String aHdrStr = pHdrEntry->GetString(); |
| sal_Bool bWasThere = ( pValList->GetEntry(nListPos) == aHdrStr ); |
| sal_Bool bInclude = !aBtnHeader.IsChecked(); |
| |
| if (bInclude) // Eintrag aufnehmen |
| { |
| if (!bWasThere) |
| pValList->InsertEntry(aHdrStr, nListPos); |
| } |
| else // Eintrag weglassen |
| { |
| if (bWasThere) |
| pValList->RemoveEntry(nListPos); |
| } |
| } |
| else |
| { |
| DBG_ERROR("Eintag in Liste nicht gefunden"); |
| } |
| } |
| } |
| else |
| { |
| DBG_ERROR("Spalte noch nicht initialisiert"); |
| } |
| } |
| } |
| } |
| |
| //---------------------------------------------------------------------------- |
| |
| void ScFilterDlg::ClearValueList( sal_uInt16 nList ) |
| { |
| if ( nList>0 && nList<=4 ) |
| { |
| ComboBox* pValList = aValueEdArr[nList-1]; |
| pValList->Clear(); |
| pValList->InsertEntry( aStrNotEmpty, 0 ); |
| pValList->InsertEntry( aStrEmpty, 1 ); |
| pValList->SetText( EMPTY_STRING ); |
| } |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| sal_uInt16 ScFilterDlg::GetFieldSelPos( SCCOL nField ) |
| { |
| if ( nField >= theQueryData.nCol1 && nField <= theQueryData.nCol2 ) |
| return static_cast<sal_uInt16>(nField - theQueryData.nCol1 + 1); |
| else |
| return 0; |
| } |
| |
| //---------------------------------------------------------------------------- |
| |
| ScQueryItem* ScFilterDlg::GetOutputItem() |
| { |
| ScAddress theCopyPos; |
| ScQueryParam theParam( theQueryData ); |
| sal_Bool bCopyPosOk = sal_False; |
| |
| if ( aBtnCopyResult.IsChecked() ) |
| { |
| String theCopyStr( aEdCopyArea.GetText() ); |
| xub_StrLen nColonPos = theCopyStr.Search( ':' ); |
| |
| if ( STRING_NOTFOUND != nColonPos ) |
| theCopyStr.Erase( nColonPos ); |
| |
| sal_uInt16 nResult = theCopyPos.Parse( theCopyStr, pDoc, pDoc->GetAddressConvention() ); |
| bCopyPosOk = ( SCA_VALID == (nResult & SCA_VALID) ); |
| } |
| |
| if ( aBtnCopyResult.IsChecked() && bCopyPosOk ) |
| { |
| theParam.bInplace = sal_False; |
| theParam.nDestTab = theCopyPos.Tab(); |
| theParam.nDestCol = theCopyPos.Col(); |
| theParam.nDestRow = theCopyPos.Row(); |
| } |
| else |
| { |
| theParam.bInplace = sal_True; |
| theParam.nDestTab = 0; |
| theParam.nDestCol = 0; |
| theParam.nDestRow = 0; |
| } |
| |
| theParam.bHasHeader = aBtnHeader.IsChecked(); |
| theParam.bByRow = sal_True; |
| theParam.bDuplicate = !aBtnUnique.IsChecked(); |
| theParam.bCaseSens = aBtnCase.IsChecked(); |
| theParam.bRegExp = aBtnRegExp.IsChecked(); |
| theParam.bDestPers = aBtnDestPers.IsChecked(); |
| |
| // nur die drei eingestellten - alles andere zuruecksetzen |
| |
| DELETEZ( pOutItem ); |
| pOutItem = new ScQueryItem( nWhichQuery, &theParam ); |
| |
| return pOutItem; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| sal_Bool ScFilterDlg::IsRefInputMode() const |
| { |
| return bRefInputMode; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| // Handler: |
| // ======== |
| |
| IMPL_LINK( ScFilterDlg, EndDlgHdl, Button*, pBtn ) |
| { |
| if ( pBtn == &aBtnOk ) |
| { |
| sal_Bool bAreaInputOk = sal_True; |
| |
| if ( aBtnCopyResult.IsChecked() ) |
| { |
| if ( !pOptionsMgr->VerifyPosStr( aEdCopyArea.GetText() ) ) |
| { |
| if ( !aBtnMore.GetState() ) |
| aBtnMore.SetState( sal_True ); |
| |
| ERRORBOX( STR_INVALID_TABREF ); |
| aEdCopyArea.GrabFocus(); |
| bAreaInputOk = sal_False; |
| } |
| } |
| |
| if ( bAreaInputOk ) |
| { |
| SetDispatcherLock( sal_False ); |
| SwitchToDocument(); |
| GetBindings().GetDispatcher()->Execute( FID_FILTER_OK, |
| SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD, |
| GetOutputItem(), 0L, 0L ); |
| Close(); |
| } |
| } |
| else if ( pBtn == &aBtnCancel ) |
| { |
| Close(); |
| } |
| |
| return 0; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| IMPL_LINK( ScFilterDlg, MoreClickHdl, MoreButton*, EMPTYARG ) |
| { |
| if ( aBtnMore.GetState() ) |
| pTimer->Start(); |
| else |
| { |
| pTimer->Stop(); |
| bRefInputMode = sal_False; |
| //@BugID 54702 Enablen/Disablen nur noch in Basisklasse |
| //SFX_APPWINDOW->Disable(sal_False); //! allgemeine Methode im ScAnyRefDlg |
| } |
| return 0; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| IMPL_LINK( ScFilterDlg, TimeOutHdl, Timer*, _pTimer ) |
| { |
| // alle 50ms nachschauen, ob RefInputMode noch stimmt |
| |
| if( _pTimer == pTimer && IsActive() ) |
| bRefInputMode = (aEdCopyArea.HasFocus() || aRbCopyArea.HasFocus()); |
| |
| if ( aBtnMore.GetState() ) |
| pTimer->Start(); |
| |
| return 0; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox*, pLb ) |
| { |
| /* |
| * Behandlung der Enable/Disable-Logik, |
| * abhaengig davon, welche ListBox angefasst wurde: |
| */ |
| sal_uInt16 nOffset = GetSliderPos(); |
| |
| if ( pLb == &aLbConnect1 ) |
| { |
| aLbField1.Enable(); |
| aLbCond1.Enable(); |
| aEdVal1.Enable(); |
| |
| sal_uInt16 nConnect1 = aLbConnect1.GetSelectEntryPos(); |
| sal_uInt16 nQE = nOffset; |
| theQueryData.GetEntry(nQE).eConnect =(ScQueryConnect)nConnect1; |
| bRefreshExceptQuery[nQE]=sal_True; |
| } |
| |
| else if ( pLb == &aLbConnect2 ) |
| { |
| aLbField2.Enable(); |
| aLbCond2.Enable(); |
| aEdVal2.Enable(); |
| |
| sal_uInt16 nConnect2 = aLbConnect2.GetSelectEntryPos(); |
| sal_uInt16 nQE = 1+nOffset; |
| theQueryData.GetEntry(nQE).eConnect =(ScQueryConnect)nConnect2; |
| bRefreshExceptQuery[nQE]=sal_True; |
| } |
| else if ( pLb == &aLbConnect3 ) |
| { |
| aLbField3.Enable(); |
| aLbCond3.Enable(); |
| aEdVal3.Enable(); |
| |
| sal_uInt16 nConnect3 = aLbConnect3.GetSelectEntryPos(); |
| sal_uInt16 nQE = 2+nOffset; |
| theQueryData.GetEntry(nQE).eConnect = (ScQueryConnect)nConnect3; |
| bRefreshExceptQuery[nQE]=sal_True; |
| |
| } |
| else if ( pLb == &aLbConnect4 ) |
| { |
| aLbField4.Enable(); |
| aLbCond4.Enable(); |
| aEdVal4.Enable(); |
| |
| sal_uInt16 nConnect4 = aLbConnect4.GetSelectEntryPos(); |
| sal_uInt16 nQE = 3+nOffset; |
| theQueryData.GetEntry(nQE).eConnect = (ScQueryConnect)nConnect4; |
| bRefreshExceptQuery[nQE]=sal_True; |
| |
| } |
| else if ( pLb == &aLbField1 ) |
| { |
| if ( aLbField1.GetSelectEntryPos() == 0 ) |
| { |
| aLbConnect2.SetNoSelection(); |
| aLbConnect3.SetNoSelection(); |
| aLbConnect4.SetNoSelection(); |
| aLbField2.SelectEntryPos( 0 ); |
| aLbField3.SelectEntryPos( 0 ); |
| aLbField4.SelectEntryPos( 0 ); |
| aLbCond2.SelectEntryPos( 0 ); |
| aLbCond3.SelectEntryPos( 0 ); |
| aLbCond4.SelectEntryPos( 0 ); |
| ClearValueList( 1 ); |
| ClearValueList( 2 ); |
| ClearValueList( 3 ); |
| ClearValueList( 4 ); |
| |
| aLbConnect2.Disable(); |
| aLbConnect3.Disable(); |
| aLbConnect4.Disable(); |
| aLbField2.Disable(); |
| aLbField3.Disable(); |
| aLbField4.Disable(); |
| aLbCond2.Disable(); |
| aLbCond3.Disable(); |
| aLbCond4.Disable(); |
| aEdVal2.Disable(); |
| aEdVal3.Disable(); |
| aEdVal4.Disable(); |
| for (sal_uInt16 i= nOffset; i< MAXQUERY; i++) |
| { |
| theQueryData.GetEntry(i).bDoQuery = sal_False; |
| bRefreshExceptQuery[i]=sal_False; |
| theQueryData.GetEntry(i).nField = static_cast<SCCOL>(0); |
| } |
| bRefreshExceptQuery[nOffset] =sal_True; |
| } |
| else |
| { |
| UpdateValueList( 1 ); |
| if ( !aLbConnect2.IsEnabled() ) |
| { |
| aLbConnect2.Enable(); |
| } |
| theQueryData.GetEntry(nOffset).bDoQuery = sal_True; |
| sal_uInt16 nField = pLb->GetSelectEntryPos(); |
| theQueryData.GetEntry(nOffset).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ; |
| } |
| } |
| else if ( pLb == &aLbField2 ) |
| { |
| if ( aLbField2.GetSelectEntryPos() == 0 ) |
| { |
| aLbConnect3.SetNoSelection(); |
| aLbConnect4.SetNoSelection(); |
| aLbField3.SelectEntryPos( 0 ); |
| aLbField4.SelectEntryPos( 0 ); |
| aLbCond3.SelectEntryPos( 0 ); |
| aLbCond4.SelectEntryPos( 0 ); |
| ClearValueList( 2 ); |
| ClearValueList( 3 ); |
| ClearValueList( 4 ); |
| |
| aLbConnect3.Disable(); |
| aLbConnect4.Disable(); |
| aLbField3.Disable(); |
| aLbField4.Disable(); |
| aLbCond3.Disable(); |
| aLbCond4.Disable(); |
| aEdVal3.Disable(); |
| aEdVal4.Disable(); |
| |
| sal_uInt16 nTemp=nOffset+1; |
| for (sal_uInt16 i= nTemp; i< MAXQUERY; i++) |
| { |
| theQueryData.GetEntry(i).bDoQuery = sal_False; |
| bRefreshExceptQuery[i]=sal_False; |
| theQueryData.GetEntry(i).nField = static_cast<SCCOL>(0); |
| } |
| bRefreshExceptQuery[nTemp]=sal_True; |
| } |
| else |
| { |
| UpdateValueList( 2 ); |
| if ( !aLbConnect3.IsEnabled() ) |
| { |
| aLbConnect3.Enable(); |
| } |
| sal_uInt16 nField = pLb->GetSelectEntryPos(); |
| sal_uInt16 nQ=1+nOffset; |
| theQueryData.GetEntry(nQ).bDoQuery = sal_True; |
| theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ; |
| } |
| } |
| else if ( pLb == &aLbField3 ) |
| { |
| if ( aLbField3.GetSelectEntryPos() == 0 ) |
| { |
| aLbConnect4.SetNoSelection(); |
| aLbField4.SelectEntryPos( 0 ); |
| aLbCond4.SelectEntryPos( 0 ); |
| ClearValueList( 3 ); |
| ClearValueList( 4 ); |
| |
| aLbConnect4.Disable(); |
| aLbField4.Disable(); |
| aLbCond4.Disable(); |
| aEdVal4.Disable(); |
| |
| sal_uInt16 nTemp=nOffset+2; |
| for (sal_uInt16 i= nTemp; i< MAXQUERY; i++) |
| { |
| theQueryData.GetEntry(i).bDoQuery = sal_False; |
| bRefreshExceptQuery[i]=sal_False; |
| theQueryData.GetEntry(i).nField = static_cast<SCCOL>(0); |
| } |
| bRefreshExceptQuery[nTemp]=sal_True; |
| } |
| else |
| { |
| UpdateValueList( 3 ); |
| if ( !aLbConnect4.IsEnabled() ) |
| { |
| aLbConnect4.Enable(); |
| } |
| |
| sal_uInt16 nField = pLb->GetSelectEntryPos(); |
| sal_uInt16 nQ=2+nOffset; |
| theQueryData.GetEntry(nQ).bDoQuery = sal_True; |
| theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ; |
| |
| } |
| } |
| else if ( pLb == &aLbField4 ) |
| { |
| if ( aLbField4.GetSelectEntryPos() == 0 ) |
| { |
| ClearValueList( 4 ); |
| sal_uInt16 nTemp=nOffset+3; |
| for (sal_uInt16 i= nTemp; i< MAXQUERY; i++) |
| { |
| theQueryData.GetEntry(i).bDoQuery = sal_False; |
| bRefreshExceptQuery[i]=sal_False; |
| theQueryData.GetEntry(i).nField = static_cast<SCCOL>(0); |
| } |
| bRefreshExceptQuery[nTemp]=sal_True; |
| } |
| else |
| { |
| UpdateValueList( 4 ); |
| sal_uInt16 nField = pLb->GetSelectEntryPos(); |
| sal_uInt16 nQ=3+nOffset; |
| theQueryData.GetEntry(nQ).bDoQuery = sal_True; |
| theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ; |
| } |
| |
| } |
| else if ( pLb == &aLbCond1) |
| { |
| theQueryData.GetEntry(nOffset).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); |
| } |
| else if ( pLb == &aLbCond2) |
| { |
| sal_uInt16 nQ=1+nOffset; |
| theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); |
| } |
| else if ( pLb == &aLbCond3) |
| { |
| sal_uInt16 nQ=2+nOffset; |
| theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); |
| } |
| else |
| { |
| sal_uInt16 nQ=3+nOffset; |
| theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); |
| } |
| |
| return 0; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| IMPL_LINK( ScFilterDlg, CheckBoxHdl, CheckBox*, pBox ) |
| { |
| // Spaltenkoepfe: |
| // FeldListen: Spaltexx <-> Spaltenkopf-String |
| // WertListen: Spaltenkopf-Wert entfaellt. |
| // Gross-/Kleinschreibung: |
| // WertListen: komplett neu |
| |
| if ( pBox == &aBtnHeader ) // Feldlisten und Wertlisten |
| { |
| sal_uInt16 nCurSel1 = aLbField1.GetSelectEntryPos(); |
| sal_uInt16 nCurSel2 = aLbField2.GetSelectEntryPos(); |
| sal_uInt16 nCurSel3 = aLbField3.GetSelectEntryPos(); |
| sal_uInt16 nCurSel4 = aLbField4.GetSelectEntryPos(); |
| FillFieldLists(); |
| aLbField1.SelectEntryPos( nCurSel1 ); |
| aLbField2.SelectEntryPos( nCurSel2 ); |
| aLbField3.SelectEntryPos( nCurSel3 ); |
| aLbField4.SelectEntryPos( nCurSel4 ); |
| |
| UpdateHdrInValueList( 1 ); |
| UpdateHdrInValueList( 2 ); |
| UpdateHdrInValueList( 3 ); |
| UpdateHdrInValueList( 4 ); |
| } |
| |
| if ( pBox == &aBtnCase ) // Wertlisten komplett |
| { |
| for (sal_uInt16 i=0; i<=MAXCOL; i++) |
| DELETEZ( pEntryLists[i] ); |
| |
| UpdateValueList( 1 ); // aktueller Text wird gemerkt |
| UpdateValueList( 2 ); |
| UpdateValueList( 3 ); |
| UpdateValueList( 4 ); |
| } |
| |
| return 0; |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| IMPL_LINK( ScFilterDlg, ValModifyHdl, ComboBox*, pEd ) |
| { |
| sal_uInt16 nOffset = GetSliderPos(); |
| sal_uInt16 i=0; |
| sal_uInt16 nQE =i + nOffset; |
| if ( pEd ) |
| { |
| String aStrVal = pEd->GetText(); |
| ListBox* pLbCond = &aLbCond1; |
| ListBox* pLbField = &aLbField1; |
| if ( pEd == &aEdVal2 ) |
| { |
| pLbCond = &aLbCond2; |
| pLbField = &aLbField2; |
| i=1; |
| nQE=i+nOffset; |
| } |
| if ( pEd == &aEdVal3 ) |
| { |
| pLbCond = &aLbCond3; |
| pLbField = &aLbField3; |
| i=2; |
| nQE=i+nOffset; |
| } |
| if ( pEd == &aEdVal4 ) |
| { |
| pLbCond = &aLbCond4; |
| pLbField = &aLbField4; |
| i=3; |
| nQE=i+nOffset; |
| } |
| |
| if ( aStrEmpty == aStrVal || aStrNotEmpty == aStrVal ) |
| { |
| pLbCond->SelectEntry( '=' ); |
| pLbCond->Disable(); |
| } |
| else |
| pLbCond->Enable(); |
| |
| ScQueryEntry& rEntry = theQueryData.GetEntry( nQE ); |
| sal_Bool bDoThis = (pLbField->GetSelectEntryPos() != 0); |
| rEntry.bDoQuery = bDoThis; |
| |
| if ( rEntry.bDoQuery || bRefreshExceptQuery[nQE] ) |
| { |
| if ( aStrVal == aStrEmpty ) |
| { |
| rEntry.pStr->Erase(); |
| rEntry.nVal = SC_EMPTYFIELDS; |
| rEntry.bQueryByString = sal_False; |
| } |
| else if ( aStrVal == aStrNotEmpty ) |
| { |
| rEntry.pStr->Erase(); |
| rEntry.nVal = SC_NONEMPTYFIELDS; |
| rEntry.bQueryByString = sal_False; |
| } |
| else |
| { |
| *rEntry.pStr = aStrVal; |
| rEntry.nVal = 0; |
| rEntry.bQueryByString = sal_True; |
| } |
| |
| sal_uInt16 nField = pLbField->GetSelectEntryPos(); |
| rEntry.nField = nField ? (theQueryData.nCol1 + |
| static_cast<SCCOL>(nField) - 1) : static_cast<SCCOL>(0); |
| |
| ScQueryOp eOp = (ScQueryOp)pLbCond->GetSelectEntryPos(); |
| rEntry.eOp = eOp; |
| rEntry.bQueryByDate = mbHasDates[nQE]; |
| |
| } |
| } |
| return 0; |
| } |
| |
| //---------------------------------------------------------------------------- |
| IMPL_LINK( ScFilterDlg, ScrollHdl, ScrollBar*, EMPTYARG ) |
| { |
| SliderMoved(); |
| return 0; |
| } |
| |
| void ScFilterDlg::SliderMoved() |
| { |
| sal_uInt16 nOffset = GetSliderPos(); |
| RefreshEditRow( nOffset); |
| } |
| sal_uInt16 ScFilterDlg::GetSliderPos() |
| { |
| return (sal_uInt16) aScrollBar.GetThumbPos(); |
| } |
| void ScFilterDlg::RefreshEditRow( sal_uInt16 nOffset ) |
| { |
| if (nOffset==0) |
| aConnLbArr[0]->Hide(); |
| else |
| aConnLbArr[0]->Show(); |
| |
| for ( sal_uInt16 i=0; i<4; i++ ) |
| { |
| String aValStr; |
| sal_uInt16 nCondPos = 0; |
| sal_uInt16 nFieldSelPos = 0; |
| sal_uInt16 nQE = i+nOffset; |
| |
| ScQueryEntry& rEntry = theQueryData.GetEntry( nQE); |
| if ( rEntry.bDoQuery || bRefreshExceptQuery[nQE] ) |
| { |
| nCondPos = (sal_uInt16)rEntry.eOp; |
| if(rEntry.bDoQuery) |
| nFieldSelPos = GetFieldSelPos( static_cast<SCCOL>(rEntry.nField) ); |
| |
| if ( rEntry.nVal == SC_EMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING ) |
| { |
| aValStr = aStrEmpty; |
| aCondLbArr[i]->Disable(); |
| } |
| else if ( rEntry.nVal == SC_NONEMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING ) |
| { |
| aValStr = aStrNotEmpty; |
| aCondLbArr[i]->Disable(); |
| } |
| else |
| { |
| aValStr = *rEntry.pStr; |
| aCondLbArr[i]->Enable(); |
| } |
| aFieldLbArr[i]->Enable(); |
| aValueEdArr[i]->Enable(); |
| |
| if (nOffset==0) |
| { |
| if (i<3) |
| { |
| if(rEntry.bDoQuery) |
| aConnLbArr[i+1]->Enable(); |
| else |
| aConnLbArr[i+1]->Disable(); |
| sal_uInt16 nQENext = nQE+1; |
| if(theQueryData.GetEntry(nQENext).bDoQuery || bRefreshExceptQuery[nQENext]) |
| aConnLbArr[i+1]->SelectEntryPos( (sal_uInt16) theQueryData.GetEntry(nQENext).eConnect ); |
| else |
| aConnLbArr[i+1]->SetNoSelection(); |
| } |
| } |
| else |
| { |
| if(theQueryData.GetEntry( nQE-1).bDoQuery) |
| aConnLbArr[i]->Enable(); |
| else |
| aConnLbArr[i]->Disable(); |
| |
| if(rEntry.bDoQuery || bRefreshExceptQuery[nQE]) |
| aConnLbArr[i]->SelectEntryPos( (sal_uInt16) rEntry.eConnect ); |
| else |
| aConnLbArr[i]->SetNoSelection(); |
| } |
| |
| } |
| else |
| { |
| if (nOffset==0) |
| { |
| if(i<3) |
| { |
| aConnLbArr[i+1]->SetNoSelection(); |
| aConnLbArr[i+1]->Disable(); |
| } |
| } |
| else |
| { |
| if(theQueryData.GetEntry( nQE-1).bDoQuery) |
| aConnLbArr[i]->Enable(); |
| else |
| aConnLbArr[i]->Disable(); |
| aConnLbArr[i]->SetNoSelection(); |
| } |
| aFieldLbArr[i]->Disable(); |
| aCondLbArr[i]->Disable(); |
| aValueEdArr[i]->Disable(); |
| } |
| aFieldLbArr[i]->SelectEntryPos( nFieldSelPos ); |
| aCondLbArr [i]->SelectEntryPos( nCondPos ); |
| aValueEdArr[i]->SetText( aValStr ); |
| UpdateValueList( static_cast<sal_uInt16>(i+1) ); |
| } |
| } |