diff -uPr old/sc/inc/sc.hrc new/sc/inc/sc.hrc --- old/sc/inc/sc.hrc 2008-12-25 10:17:59.203125000 +0800 +++ new/sc/inc/sc.hrc 2009-01-07 13:36:05.781250000 +0800 @@ -1304,6 +1304,8 @@ #define SCSTR_DPFUNCLISTBOX (STR_START + 92) #define STR_PRINT_NOTHING (STR_START + 93) #define SCSTR_ALLFILTER (STR_START + 94) +#define SCSTR_MOREBTN_MOREOPTIONS (STR_START + 95) +#define SCSTR_MOREBTN_LESSOPTIONS (STR_START + 96) // Items diff -uPr old/sc/source/ui/dbgui/filtdlg.cxx new/sc/source/ui/dbgui/filtdlg.cxx --- old/sc/source/ui/dbgui/filtdlg.cxx 2008-12-25 10:14:14.000000000 +0800 +++ new/sc/source/ui/dbgui/filtdlg.cxx 2009-01-07 13:31:15.187500000 +0800 @@ -75,21 +75,28 @@ : 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 ) ), - aLbConnect1 ( this, ScResId( LB_OP1 ) ), + aLbConnect2 ( this, ScResId( LB_OP2 ) ), aLbField2 ( this, ScResId( LB_FIELD2 ) ), aLbCond2 ( this, ScResId( LB_COND2 ) ), aEdVal2 ( this, ScResId( ED_VAL2 ) ), - aLbConnect2 ( this, ScResId( LB_OP2 ) ), + 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 ) ), _INIT_COMMON_FILTER_RSCOBJS aStrEmpty ( ScResId( SCSTR_EMPTY ) ), aStrNotEmpty ( ScResId( SCSTR_NOTEMPTY ) ), @@ -110,7 +117,12 @@ { for (USHORT i=0; i<=MAXCOL; i++) pEntryLists[i] = NULL; - + for (SCSIZE i=0;iGetDocument() : NULL; @@ -164,12 +184,19 @@ 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: @@ -197,7 +224,7 @@ FillFieldLists(); - for ( SCSIZE i=0; i<3; i++ ) + for ( SCSIZE i=0; i<4; i++ ) { String aValStr; USHORT nCondPos = 0; @@ -208,7 +235,6 @@ { nCondPos = (USHORT)rEntry.eOp; nFieldSelPos = GetFieldSelPos( static_cast(rEntry.nField) ); - if ( rEntry.nVal == SC_EMPTYFIELDS && !rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING ) { aValStr = aStrEmpty; @@ -223,8 +249,14 @@ aValStr = *rEntry.pStr; } else if ( i == 0 ) + { nFieldSelPos = GetFieldSelPos( pViewData->GetCurX() ); + rEntry.nField = nFieldSelPos ? (theQueryData.nCol1 + + static_cast(nFieldSelPos) - 1) : static_cast(0); + rEntry.bDoQuery=TRUE; + bRefreshExceptQuery[i]=TRUE; + } aFieldLbArr[i]->SelectEntryPos( nFieldSelPos ); aCondLbArr [i]->SelectEntryPos( nCondPos ); aValueEdArr[i]->SetText( aValStr ); @@ -232,26 +264,36 @@ UpdateValueList( static_cast(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) - ? aLbConnect1.SelectEntryPos( (USHORT)theQueryData.GetEntry(1).eConnect ) - : aLbConnect1.SetNoSelection(); + ? aLbConnect2.SelectEntryPos( (USHORT)theQueryData.GetEntry(1).eConnect ) + : aLbConnect2.SetNoSelection(); (aLbField2.GetSelectEntryPos() != 0) && (aLbField3.GetSelectEntryPos() != 0) - ? aLbConnect2.SelectEntryPos( (USHORT)theQueryData.GetEntry(2).eConnect ) - : aLbConnect2.SetNoSelection(); + ? aLbConnect3.SelectEntryPos( (USHORT)theQueryData.GetEntry(2).eConnect ) + : aLbConnect3.SetNoSelection(); + (aLbField3.GetSelectEntryPos() != 0) + && (aLbField4.GetSelectEntryPos() != 0) + ? aLbConnect4.SelectEntryPos( (USHORT)theQueryData.GetEntry(3).eConnect ) + : aLbConnect4.SetNoSelection(); if ( aLbField1.GetSelectEntryPos() == 0 ) { - aLbConnect1.Disable(); + aLbConnect2.Disable(); aLbField2.Disable(); aLbCond2.Disable(); aEdVal2.Disable(); } - else if ( aLbConnect1.GetSelectEntryCount() == 0 ) + else if ( aLbConnect2.GetSelectEntryCount() == 0 ) { aLbField2.Disable(); aLbCond2.Disable(); @@ -260,17 +302,30 @@ if ( aLbField2.GetSelectEntryPos() == 0 ) { - aLbConnect2.Disable(); + aLbConnect3.Disable(); aLbField3.Disable(); aLbCond3.Disable(); aEdVal3.Disable(); } - else if ( aLbConnect2.GetSelectEntryCount() == 0 ) + 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(); @@ -332,9 +387,11 @@ 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 ) { @@ -358,6 +415,7 @@ aLbField1.InsertEntry( aFieldName, i ); aLbField2.InsertEntry( aFieldName, i ); aLbField3.InsertEntry( aFieldName, i ); + aLbField4.InsertEntry( aFieldName, i ); i++; } nFieldCount = i; @@ -369,7 +427,7 @@ void ScFilterDlg::UpdateValueList( USHORT nList ) { - if ( pDoc && nList>0 && nList<=3 ) + if ( pDoc && nList>0 && nList<=4 ) { ComboBox* pValList = aValueEdArr[nList-1]; USHORT nFieldSelPos = aFieldLbArr[nList-1]->GetSelectEntryPos(); @@ -442,7 +500,7 @@ { //! GetText / SetText ?? - if ( pDoc && nList>0 && nList<=3 ) + if ( pDoc && nList>0 && nList<=4 ) { USHORT nFieldSelPos = aFieldLbArr[nList-1]->GetSelectEntryPos(); if ( nFieldSelPos ) @@ -492,7 +550,7 @@ void ScFilterDlg::ClearValueList( USHORT nList ) { - if ( nList>0 && nList<=3 ) + if ( nList>0 && nList<=4 ) { ComboBox* pValList = aValueEdArr[nList-1]; pValList->Clear(); @@ -519,10 +577,7 @@ { ScAddress theCopyPos; ScQueryParam theParam( theQueryData ); - USHORT nConnect1 = aLbConnect1.GetSelectEntryPos(); - USHORT nConnect2 = aLbConnect2.GetSelectEntryPos(); BOOL bCopyPosOk = FALSE; - SCSIZE i; if ( aBtnCopyResult.IsChecked() ) { @@ -536,57 +591,6 @@ bCopyPosOk = ( SCA_VALID == (nResult & SCA_VALID) ); } - for ( i = 0; i < 3; i++ ) - { - USHORT nField = aFieldLbArr[i]->GetSelectEntryPos(); - ScQueryOp eOp = (ScQueryOp)aCondLbArr[i]->GetSelectEntryPos(); - - BOOL bDoThis = (aFieldLbArr[i]->GetSelectEntryPos() != 0); - theParam.GetEntry(i).bDoQuery = bDoThis; - - if ( bDoThis ) - { - ScQueryEntry& rEntry = theParam.GetEntry(i); - - String aStrVal( aValueEdArr[i]->GetText() ); - - /* - * Dialog liefert die ausgezeichneten Feldwerte "leer"/"nicht leer" - * als Konstanten in nVal in Verbindung mit dem Schalter - * bQueryByString auf FALSE. - */ - if ( aStrVal == aStrEmpty ) - { - rEntry.pStr->Erase(); - rEntry.nVal = SC_EMPTYFIELDS; - rEntry.bQueryByString = FALSE; - } - else if ( aStrVal == aStrNotEmpty ) - { - rEntry.pStr->Erase(); - rEntry.nVal = SC_NONEMPTYFIELDS; - rEntry.bQueryByString = FALSE; - } - else - { - *rEntry.pStr = aStrVal; - rEntry.nVal = 0; - rEntry.bQueryByString = TRUE; - } - - rEntry.nField = nField ? (theQueryData.nCol1 + - static_cast(nField) - 1) : static_cast(0); - rEntry.eOp = eOp; - } - } - - theParam.GetEntry(1).eConnect = (nConnect1 != LISTBOX_ENTRY_NOTFOUND) - ? (ScQueryConnect)nConnect1 - : SC_AND; - theParam.GetEntry(2).eConnect = (nConnect2 != LISTBOX_ENTRY_NOTFOUND) - ? (ScQueryConnect)nConnect2 - : SC_AND; - if ( aBtnCopyResult.IsChecked() && bCopyPosOk ) { theParam.bInplace = FALSE; @@ -611,10 +615,6 @@ // nur die drei eingestellten - alles andere zuruecksetzen - SCSIZE nEC = theParam.GetEntryCount(); - for (i=3; i(0); + } + bRefreshExceptQuery[nOffset] =TRUE; } else { UpdateValueList( 1 ); - if ( !aLbConnect1.IsEnabled() ) + if ( !aLbConnect2.IsEnabled() ) { - aLbConnect1.Enable(); + aLbConnect2.Enable(); } + theQueryData.GetEntry(nOffset).bDoQuery = TRUE; + USHORT nField = pLb->GetSelectEntryPos(); + theQueryData.GetEntry(nOffset).nField = theQueryData.nCol1 + static_cast(nField) - 1 ; } } else if ( pLb == &aLbField2 ) { if ( aLbField2.GetSelectEntryPos() == 0 ) { - aLbConnect2.SetNoSelection(); + aLbConnect3.SetNoSelection(); + aLbConnect4.SetNoSelection(); aLbField3.SelectEntryPos( 0 ); + aLbField4.SelectEntryPos( 0 ); aLbCond3.SelectEntryPos( 0 ); + aLbCond4.SelectEntryPos( 0 ); ClearValueList( 2 ); ClearValueList( 3 ); + ClearValueList( 4 ); - aLbConnect2.Disable(); + aLbConnect3.Disable(); + aLbConnect4.Disable(); aLbField3.Disable(); + aLbField4.Disable(); aLbCond3.Disable(); + aLbCond4.Disable(); aEdVal3.Disable(); + aEdVal4.Disable(); + + USHORT nTemp=nOffset+1; + for (USHORT i= nTemp; i< MAXQUERY; i++) + { + theQueryData.GetEntry(i).bDoQuery = FALSE; + bRefreshExceptQuery[i]=FALSE; + theQueryData.GetEntry(i).nField = static_cast(0); + } + bRefreshExceptQuery[nTemp]=TRUE; } else { UpdateValueList( 2 ); - if ( !aLbConnect2.IsEnabled() ) + if ( !aLbConnect3.IsEnabled() ) { - aLbConnect2.Enable(); + aLbConnect3.Enable(); } + USHORT nField = pLb->GetSelectEntryPos(); + USHORT nQ=1+nOffset; + theQueryData.GetEntry(nQ).bDoQuery = TRUE; + theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast(nField) - 1 ; } } else if ( pLb == &aLbField3 ) { - ( aLbField3.GetSelectEntryPos() == 0 ) - ? ClearValueList( 3 ) - : UpdateValueList( 3 ); + if ( aLbField3.GetSelectEntryPos() == 0 ) + { + aLbConnect4.SetNoSelection(); + aLbField4.SelectEntryPos( 0 ); + aLbCond4.SelectEntryPos( 0 ); + ClearValueList( 3 ); + ClearValueList( 4 ); + + aLbConnect4.Disable(); + aLbField4.Disable(); + aLbCond4.Disable(); + aEdVal4.Disable(); + + USHORT nTemp=nOffset+2; + for (USHORT i= nTemp; i< MAXQUERY; i++) + { + theQueryData.GetEntry(i).bDoQuery = FALSE; + bRefreshExceptQuery[i]=FALSE; + theQueryData.GetEntry(i).nField = static_cast(0); + } + bRefreshExceptQuery[nTemp]=TRUE; + } + else + { + UpdateValueList( 3 ); + if ( !aLbConnect4.IsEnabled() ) + { + aLbConnect4.Enable(); + } + + USHORT nField = pLb->GetSelectEntryPos(); + USHORT nQ=2+nOffset; + theQueryData.GetEntry(nQ).bDoQuery = TRUE; + theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast(nField) - 1 ; + + } + } + else if ( pLb == &aLbField4 ) + { + if ( aLbField4.GetSelectEntryPos() == 0 ) + { + ClearValueList( 4 ); + USHORT nTemp=nOffset+3; + for (USHORT i= nTemp; i< MAXQUERY; i++) + { + theQueryData.GetEntry(i).bDoQuery = FALSE; + bRefreshExceptQuery[i]=FALSE; + theQueryData.GetEntry(i).nField = static_cast(0); + } + bRefreshExceptQuery[nTemp]=TRUE; + } + else + { + UpdateValueList( 4 ); + USHORT nField = pLb->GetSelectEntryPos(); + USHORT nQ=3+nOffset; + theQueryData.GetEntry(nQ).bDoQuery = TRUE; + theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast(nField) - 1 ; + } + + } + else if ( pLb == &aLbCond1) + { + theQueryData.GetEntry(nOffset).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); + } + else if ( pLb == &aLbCond2) + { + USHORT nQ=1+nOffset; + theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); + } + else if ( pLb == &aLbCond3) + { + USHORT nQ=2+nOffset; + theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); + } + else + { + USHORT nQ=3+nOffset; + theQueryData.GetEntry(nQ).eOp=(ScQueryOp)pLb->GetSelectEntryPos(); } return 0; @@ -814,14 +959,17 @@ USHORT nCurSel1 = aLbField1.GetSelectEntryPos(); USHORT nCurSel2 = aLbField2.GetSelectEntryPos(); USHORT nCurSel3 = aLbField3.GetSelectEntryPos(); + USHORT 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 @@ -832,6 +980,7 @@ UpdateValueList( 1 ); // aktueller Text wird gemerkt UpdateValueList( 2 ); UpdateValueList( 3 ); + UpdateValueList( 4 ); } return 0; @@ -842,27 +991,191 @@ IMPL_LINK( ScFilterDlg, ValModifyHdl, ComboBox*, pEd ) { + USHORT nOffset = GetSliderPos(); + USHORT i=0; + USHORT nQE =i + nOffset; if ( pEd ) { - String aStrVal = pEd->GetText(); - ListBox* pLb = &aLbCond1; - - if ( pEd == &aEdVal2 ) pLb = &aLbCond2; - else if ( pEd == &aEdVal3 ) pLb = &aLbCond3; - - // wenn einer der Sonderwerte leer/nicht-leer - // gewaehlt wird, so macht nur der =-Operator Sinn: + String aStrVal = pEd->GetText(); + ListBox* pLbCond = &aLbCond1; + ListBox* pLbField = &aLbField1; + ScQueryOp eOp = (ScQueryOp)pLbCond->GetSelectEntryPos(); + 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 ) { - pLb->SelectEntry( '=' ); - pLb->Disable(); + pLbCond->SelectEntry( '=' ); + pLbCond->Disable(); } else - pLb->Enable(); - } + pLbCond->Enable(); + ScQueryEntry& rEntry = theQueryData.GetEntry( nQE ); + 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 = FALSE; + } + else if ( aStrVal == aStrNotEmpty ) + { + rEntry.pStr->Erase(); + rEntry.nVal = SC_NONEMPTYFIELDS; + rEntry.bQueryByString = FALSE; + } + else + { + *rEntry.pStr = aStrVal; + rEntry.nVal = 0; + rEntry.bQueryByString = TRUE; + } + + USHORT nField = pLbField->GetSelectEntryPos(); + rEntry.nField = nField ? (theQueryData.nCol1 + + static_cast(nField) - 1) : static_cast(0); + + ScQueryOp eOp = (ScQueryOp)pLbCond->GetSelectEntryPos(); + rEntry.eOp = eOp; + + } + } return 0; } +//---------------------------------------------------------------------------- +IMPL_LINK( ScFilterDlg, ScrollHdl, ScrollBar*, EMPTYARG ) +{ + SliderMoved(); + return 0; +} + +void ScFilterDlg::SliderMoved() +{ + USHORT nOffset = GetSliderPos(); + RefreshEditRow( nOffset); +} +USHORT ScFilterDlg::GetSliderPos() +{ + return (USHORT) aScrollBar.GetThumbPos(); +} +void ScFilterDlg::RefreshEditRow( USHORT nOffset ) +{ + if (nOffset==0) + aConnLbArr[0]->Hide(); + else + aConnLbArr[0]->Show(); + + for ( USHORT i=0; i<4; i++ ) + { + String aValStr; + USHORT nCondPos = 0; + USHORT nFieldSelPos = 0; + USHORT nQE = i+nOffset; + + ScQueryEntry& rEntry = theQueryData.GetEntry( nQE); + if ( rEntry.bDoQuery || bRefreshExceptQuery[nQE] ) + { + nCondPos = (USHORT)rEntry.eOp; + if(rEntry.bDoQuery) + nFieldSelPos = GetFieldSelPos( static_cast(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(); + USHORT nQENext = nQE+1; + if(theQueryData.GetEntry(nQENext).bDoQuery || bRefreshExceptQuery[nQENext]) + aConnLbArr[i+1]->SelectEntryPos( 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( 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(i+1) ); + } +} diff -uPr old/sc/source/ui/inc/filtdlg.hxx new/sc/source/ui/inc/filtdlg.hxx --- old/sc/source/ui/inc/filtdlg.hxx 2008-12-25 10:16:50.000000000 +0800 +++ new/sc/source/ui/inc/filtdlg.hxx 2009-01-07 12:08:39.921875000 +0800 @@ -116,28 +116,40 @@ virtual void SetActive(); virtual BOOL Close(); + void SliderMoved(); + USHORT GetSliderPos(); + void RefreshEditRow( USHORT nOffset ); private: FixedLine aFlCriteria; //---------------------------- + ListBox aLbConnect1; ListBox aLbField1; ListBox aLbCond1; ComboBox aEdVal1; //---------------------------- - ListBox aLbConnect1; + ListBox aLbConnect2; ListBox aLbField2; ListBox aLbCond2; ComboBox aEdVal2; //---------------------------- - ListBox aLbConnect2; + ListBox aLbConnect3; ListBox aLbField3; ListBox aLbCond3; ComboBox aEdVal3; //---------------------------- + ListBox aLbConnect4; + ListBox aLbField4; + ListBox aLbCond4; + ComboBox aEdVal4; + //---------------------------- FixedText aFtConnect; FixedText aFtField; FixedText aFtCond; FixedText aFtVal; + FixedLine aFlSeparator; + + ScrollBar aScrollBar; _COMMON_FILTER_RSCOBJS @@ -155,9 +167,11 @@ ScDocument* pDoc; SCTAB nSrcTab; - ComboBox* aValueEdArr[3]; - ListBox* aFieldLbArr[3]; - ListBox* aCondLbArr[3]; + ComboBox* aValueEdArr[4]; + ListBox* aFieldLbArr[4]; + ListBox* aCondLbArr[4]; + ListBox* aConnLbArr[4]; + BOOL bRefreshExceptQuery[MAXQUERY]; USHORT nFieldCount; BOOL bRefInputMode; @@ -184,6 +198,7 @@ DECL_LINK( CheckBoxHdl, CheckBox* ); DECL_LINK( EndDlgHdl, Button* ); DECL_LINK( MoreClickHdl, MoreButton* ); + DECL_LINK( ScrollHdl, ScrollBar* ); // Hack: RefInput-Kontrolle DECL_LINK( TimeOutHdl, Timer* ); @@ -238,6 +253,7 @@ DECL_LINK( FilterAreaSelHdl, ListBox* ); DECL_LINK( FilterAreaModHdl, ScRefEdit* ); DECL_LINK( EndDlgHdl, Button* ); + DECL_LINK( ScrollHdl, ScrollBar* ); // Hack: RefInput-Kontrolle DECL_LINK( TimeOutHdl, Timer* ); diff -uPr old/sc/source/ui/inc/filter.hrc new/sc/source/ui/inc/filter.hrc --- old/sc/source/ui/inc/filter.hrc 2008-12-25 10:16:50.000000000 +0800 +++ new/sc/source/ui/inc/filter.hrc 2009-01-04 10:13:56.015625000 +0800 @@ -68,6 +68,13 @@ #define ED_VAL2 33 #define ED_VAL3 34 #define FL_CRITERIA 35 +#define FL_SEPARATOR 36 +#define LB_OP3 37 +#define LB_FIELD4 38 +#define LB_COND4 39 +#define ED_VAL4 40 +#define LB_SCROLL 41 +#define LB_OP4 42 // Spezialfilter diff -uPr old/sc/source/ui/src/filter.src new/sc/source/ui/src/filter.src --- old/sc/source/ui/src/filter.src 2008-12-25 10:13:50.000000000 +0800 +++ new/sc/source/ui/src/filter.src 2009-01-07 14:26:59.031250000 +0800 @@ -34,7 +34,7 @@ HelpId = SID_FILTER ; Hide = TRUE ; SVLook = TRUE ; - Size = MAP_APPFONT ( 298 , 83 ) ; + Size = MAP_APPFONT ( 278 , 121 ) ; Text [ en-US ] = "Standard Filter" ; Moveable = TRUE ; Closeable = FALSE ; @@ -53,19 +53,19 @@ FixedText FT_COND { Pos = MAP_APPFONT ( 122 , 14 ) ; - Size = MAP_APPFONT ( 47 , 8 ) ; + Size = MAP_APPFONT ( 75 , 8 ) ; Text [ en-US ] = "Condition" ; }; FixedText FT_VAL { - Pos = MAP_APPFONT ( 173 , 14 ) ; + Pos = MAP_APPFONT ( 201 , 14 ) ; Size = MAP_APPFONT ( 60 , 8 ) ; Text [ en-US ] = "Value" ; }; ListBox LB_OP1 { Border = TRUE ; - Pos = MAP_APPFONT ( 12 , 41 ) ; + Pos = MAP_APPFONT ( 12 , 25 ) ; Size = MAP_APPFONT ( 40 , 46 ) ; TabStop = TRUE ; DropDown = TRUE ; @@ -78,6 +78,19 @@ ListBox LB_OP2 { Border = TRUE ; + Pos = MAP_APPFONT ( 12 , 41 ) ; + Size = MAP_APPFONT ( 40 , 46 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + StringList [ en-US ] = + { + < "AND" ; Default ; > ; + < "OR" ; Default ; > ; + }; + }; + ListBox LB_OP3 + { + Border = TRUE ; Pos = MAP_APPFONT ( 12 , 57 ) ; Size = MAP_APPFONT ( 40 , 46 ) ; TabStop = TRUE ; @@ -88,6 +101,19 @@ < "OR" ; Default ; > ; }; }; + ListBox LB_OP4 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 12 , 73 ) ; + Size = MAP_APPFONT ( 40 , 46 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + StringList [ en-US ] = + { + < "AND" ; Default ; > ; + < "OR" ; Default ; > ; + }; + }; ListBox LB_FIELD1 { Border = TRUE ; @@ -112,11 +138,19 @@ TabStop = TRUE ; DropDown = TRUE ; }; + ListBox LB_FIELD4 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 58 , 73 ) ; + Size = MAP_APPFONT ( 60 , 90 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; ListBox LB_COND1 { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 25 ) ; - Size = MAP_APPFONT ( 47 , 105 ) ; + Size = MAP_APPFONT ( 75 , 145 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = @@ -137,7 +171,7 @@ { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 41 ) ; - Size = MAP_APPFONT ( 47 , 105 ) ; + Size = MAP_APPFONT ( 75 , 145 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = @@ -158,7 +192,28 @@ { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 57 ) ; - Size = MAP_APPFONT ( 47 , 105 ) ; + Size = MAP_APPFONT ( 75 , 145 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + stringlist [ en-US ] = + { + < "=" ; Default ; > ; + < "<" ; Default ; > ; + < ">" ; Default ; > ; + < "<=" ; Default ; > ; + < ">=" ; Default ; > ; + < "<>" ; Default ; > ; + < "Largest" ; Default ; > ; + < "Smallest" ; Default ; > ; + < "Largest %" ; Default ; > ; + < "Smallest %" ; Default ; > ; + }; + }; + ListBox LB_COND4 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 122 , 73 ) ; + Size = MAP_APPFONT ( 75 , 145 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = @@ -177,35 +232,50 @@ }; ComboBox ED_VAL1 { - Pos = MAP_APPFONT ( 173 , 25 ) ; + Pos = MAP_APPFONT ( 201 , 25 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; ComboBox ED_VAL2 { - Pos = MAP_APPFONT ( 173 , 41 ) ; + Pos = MAP_APPFONT ( 201 , 41 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; ComboBox ED_VAL3 { - Pos = MAP_APPFONT ( 173 , 57 ) ; + Pos = MAP_APPFONT ( 201 , 57 ) ; + Size = MAP_APPFONT ( 60 , 90 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + ComboBox ED_VAL4 + { + Pos = MAP_APPFONT ( 201 , 73 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; + ScrollBar LB_SCROLL + { + Pos = MAP_APPFONT ( 265, 25 ) ; + Size = MAP_APPFONT ( 8 , 60 ) ; + TabStop = TRUE ; + VScroll = TRUE ; + }; + FixedLine FL_CRITERIA { Pos = MAP_APPFONT ( 6 , 3 ) ; - Size = MAP_APPFONT ( 230 , 8 ) ; + Size = MAP_APPFONT ( 275 , 8 ) ; Text [ en-US ] = "Filter criteria"; }; CheckBox BTN_CASE { Hide = TRUE ; - Pos = MAP_APPFONT ( 12 , 86 ) ; + Pos = MAP_APPFONT ( 12 , 132 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Case ~sensitive" ; @@ -213,7 +283,7 @@ CheckBox BTN_REGEXP { Hide = TRUE ; - Pos = MAP_APPFONT ( 142 , 86 ) ; + Pos = MAP_APPFONT ( 142 , 132 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Regular ~expression" ; @@ -221,7 +291,7 @@ CheckBox BTN_HEADER { Hide = TRUE ; - Pos = MAP_APPFONT ( 12 , 100 ) ; + Pos = MAP_APPFONT ( 12 , 146 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Range contains ~column labels" ; @@ -229,7 +299,7 @@ CheckBox BTN_UNIQUE { Hide = TRUE ; - Pos = MAP_APPFONT ( 142 , 100 ) ; + Pos = MAP_APPFONT ( 142 , 146 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "~No duplication" ; @@ -237,7 +307,7 @@ CheckBox BTN_COPY_RESULT { Hide = TRUE ; - Pos = MAP_APPFONT ( 12 , 114 ) ; + Pos = MAP_APPFONT ( 12 , 160 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Copy ~results to..." ; @@ -245,7 +315,7 @@ CheckBox BTN_DEST_PERS { Hide = TRUE ; - Pos = MAP_APPFONT ( 142 , 114 ) ; + Pos = MAP_APPFONT ( 142 , 160 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "~Keep filter criteria" ; @@ -254,8 +324,8 @@ { Border = TRUE ; Hide = TRUE ; - Pos = MAP_APPFONT ( 21 , 126 ) ; - Size = MAP_APPFONT ( 90 , 90 ) ; + Pos = MAP_APPFONT ( 21 , 172 ) ; + Size = MAP_APPFONT ( 110 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; @@ -263,13 +333,13 @@ { Border = TRUE ; Hide = TRUE ; - Pos = MAP_APPFONT ( 115 , 126 ) ; - Size = MAP_APPFONT ( 104 , 12 ) ; + Pos = MAP_APPFONT ( 136 , 172 ) ; + Size = MAP_APPFONT ( 110 , 12 ) ; TabStop = TRUE ; }; ImageButton RB_COPY_AREA { - Pos = MAP_APPFONT ( 221 , 125 ) ; + Pos = MAP_APPFONT ( 248 , 171 ) ; Size = MAP_APPFONT ( 13 , 15 ) ; TabStop = FALSE ; QuickHelpText [ en-US ] = "Shrink" ; @@ -277,14 +347,14 @@ FixedLine FL_OPTIONS { Hide = TRUE ; - Pos = MAP_APPFONT ( 6 , 75 ) ; - Size = MAP_APPFONT ( 230 , 8 ) ; + Pos = MAP_APPFONT ( 6 , 120 ) ; + Size = MAP_APPFONT ( 275 , 8 ) ; Text [ en-US ] = "Options" ; }; FixedText FT_DBAREA { Hide = TRUE ; - Pos = MAP_APPFONT ( 66 , 144 ) ; + Pos = MAP_APPFONT ( 66 , 190 ) ; Size = MAP_APPFONT ( 167 , 8 ) ; Left = TRUE ; Text [ en-US ] = "dummy" ; @@ -292,36 +362,41 @@ FixedText FT_DBAREA_LABEL { Hide = TRUE ; - Pos = MAP_APPFONT ( 6 , 144 ) ; + Pos = MAP_APPFONT ( 6 , 190 ) ; Size = MAP_APPFONT ( 58 , 8 ) ; Text [ en-US ] = "Data range:" ; }; OKButton BTN_OK { - Pos = MAP_APPFONT ( 242 , 6 ) ; + Pos = MAP_APPFONT ( 172 , 101 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; DefButton = TRUE ; }; CancelButton BTN_CANCEL { - Pos = MAP_APPFONT ( 242 , 23 ) ; + Pos = MAP_APPFONT ( 226 , 101 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; HelpButton BTN_HELP { - Pos = MAP_APPFONT ( 242 , 43 ) ; + Pos = MAP_APPFONT ( 60 , 101 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; MoreButton BTN_MORE { - Pos = MAP_APPFONT ( 242 , 63 ) ; + Pos = MAP_APPFONT ( 6 , 101 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; MapUnit = MAP_APPFONT ; - Delta = 75 ; + Delta = 81 ; + }; + FixedLine FL_SEPARATOR + { + Pos = MAP_APPFONT ( 0 , 91 ) ; + Size = MAP_APPFONT ( 277 , 6 ) ; }; }; //============================================================================ diff -uPr old/sc/source/ui/src/scstring.src new/sc/source/ui/src/scstring.src --- old/sc/source/ui/src/scstring.src 2008-12-25 10:13:48.609375000 +0800 +++ new/sc/source/ui/src/scstring.src 2009-01-07 13:39:58.687500000 +0800 @@ -728,3 +728,13 @@ Text [ en-US ] = "Mouse button pressed"; }; +String SCSTR_MOREBTN_MOREOPTIONS +{ + Text [ en-US ] = "More ~Options"; +}; + +String SCSTR_MOREBTN_LESSOPTIONS +{ + Text [ en-US ] = "Less ~Options"; +}; +