diff -uPr sc.old/inc/sc.hrc sc.new/inc/sc.hrc --- sc.old/inc/sc.hrc 2008-03-11 18:43:02.000000000 +0800 +++ sc.new/inc/sc.hrc 2008-12-23 10:44:38.000000000 +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 sc.old/source/ui/dbgui/filtdlg.cxx sc.new/source/ui/dbgui/filtdlg.cxx --- sc.old/source/ui/dbgui/filtdlg.cxx 2008-01-30 21:32:24.000000000 +0800 +++ sc.new/source/ui/dbgui/filtdlg.cxx 2009-01-06 13:18:56.000000000 +0800 @@ -99,10 +99,16 @@ aLbField3 ( this, ScResId( LB_FIELD3 ) ), aLbCond3 ( this, ScResId( LB_COND3 ) ), aEdVal3 ( this, ScResId( ED_VAL3 ) ), + aLbConnect3 ( this, ScResId( LB_OP3 ) ), + aLbField4 ( this, ScResId( LB_FIELD4 ) ), + aLbCond4 ( this, ScResId( LB_COND4 ) ), + aEdVal4 ( this, ScResId( ED_VAL4 ) ), + aScrollBar ( this, ScResId( SB_SCROLL ) ), 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 ) ), _INIT_COMMON_FILTER_RSCOBJS aStrEmpty ( ScResId( SCSTR_EMPTY ) ), aStrNotEmpty ( ScResId( SCSTR_NOTEMPTY ) ), @@ -124,6 +130,34 @@ for (USHORT i=0; i<=MAXCOL; i++) pEntryLists[i] = NULL; + USHORT nOffset = GetSliderPos(); + for( USHORT n= 0; n< MAXQUERY; n++ ) + { + bConnect[n] = FALSE; + } + + aBtnMore.SetMoreText( String(ScResId( SCSTR_MOREBTN_MOREOPTIONS )) ); + aBtnMore.SetLessText( String(ScResId( SCSTR_MOREBTN_LESSOPTIONS )) ); + + mpFieldListbox[0] = &aLbField1; + mpCondListbox[0] = &aLbCond1; + mpValEdit[0] = &aEdVal1; + mpConnectListbox[0] = &aLbConnect1; + + mpFieldListbox[1] = &aLbField2; + mpCondListbox[1] = &aLbCond2; + mpValEdit[1] = &aEdVal2; + mpConnectListbox[1] = &aLbConnect2; + + mpFieldListbox[2] = &aLbField3; + mpCondListbox[2] = &aLbCond3; + mpValEdit[2] = &aEdVal3; + mpConnectListbox[2] = &aLbConnect3; + + mpFieldListbox[3] = &aLbField4; + mpCondListbox[3] = &aLbCond4; + mpValEdit[3] = &aEdVal4; + Init( rArgSet ); FreeResource(); @@ -163,11 +197,17 @@ aBtnHeader.SetClickHdl ( LINK( this, ScFilterDlg, CheckBoxHdl ) ); aBtnCase.SetClickHdl ( LINK( this, ScFilterDlg, CheckBoxHdl ) ); // + aLbCond1.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); + aLbCond2.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); + aLbCond3.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); + aLbCond4.SetSelectHdl ( LINK( this, ScFilterDlg, LbSelectHdl ) ); 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 ) ); pViewData = rQueryItem.GetViewData(); pDoc = pViewData ? pViewData->GetDocument() : NULL; @@ -177,12 +217,59 @@ 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; + aConnectLbArr [0] = &aLbConnect1; + aConnectLbArr [1] = &aLbConnect2; + aConnectLbArr [2] = &aLbConnect3; + + Link aLink = LINK( this, ScFilterDlg, GetFocusHdl ); + for ( sal_uInt16 nRow = 0; nRow < EDIT_ROW_COUNT; ++nRow ) + { + mpFieldListbox[nRow]->SetGetFocusHdl( aLink ); + mpCondListbox[nRow]->SetGetFocusHdl( aLink ); + mpValEdit[nRow]->SetGetFocusHdl( aLink ); + if( nRow == EDIT_ROW_COUNT-1 ) + { + mpConnectListbox[nRow-1]->SetGetFocusHdl( aLink ); + } + else + { + mpConnectListbox[nRow]->SetGetFocusHdl( aLink ); + } + + } + + aLink = LINK( this, ScFilterDlg, LoseFocusHdl ); + for ( sal_uInt16 nRow = 0; nRow < EDIT_ROW_COUNT; ++nRow ) + { + mpFieldListbox[nRow]->SetLoseFocusHdl( aLink ); + mpCondListbox[nRow]->SetLoseFocusHdl( aLink ); + mpValEdit[nRow]->SetLoseFocusHdl( aLink ); + if( nRow == EDIT_ROW_COUNT-1 ) + { + mpConnectListbox[nRow-1]->SetLoseFocusHdl( aLink ); + } + else + { + mpConnectListbox[nRow]->SetLoseFocusHdl( aLink ); + } + } + + aScrollBar.SetEndScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) ); + aScrollBar.SetScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) ); + + aScrollBar.SetRange( Range( 0, EDIT_ROW_COUNT ) ); + aScrollBar.SetLineSize( 1 ); + + USHORT nOffset = GetSliderPos(); // Optionen initialisieren lassen: @@ -210,7 +297,7 @@ FillFieldLists(); - for ( SCSIZE i=0; i<3; i++ ) + for ( SCSIZE i=0; i<4; i++ ) { String aValStr; USHORT nCondPos = 0; @@ -236,7 +323,12 @@ 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; + } aFieldLbArr[i]->SelectEntryPos( nFieldSelPos ); aCondLbArr [i]->SelectEntryPos( nCondPos ); @@ -257,6 +349,11 @@ ? aLbConnect2.SelectEntryPos( (USHORT)theQueryData.GetEntry(2).eConnect ) : aLbConnect2.SetNoSelection(); + (aLbField3.GetSelectEntryPos() != 0) + && (aLbField4.GetSelectEntryPos() != 0) + ? aLbConnect3.SelectEntryPos( (USHORT)theQueryData.GetEntry(3).eConnect ) + : aLbConnect3.SetNoSelection(); + if ( aLbField1.GetSelectEntryPos() == 0 ) { aLbConnect1.Disable(); @@ -284,6 +381,19 @@ aLbCond3.Disable(); aEdVal3.Disable(); } + if ( aLbField3.GetSelectEntryPos() == 0 ) + { + aLbConnect3.Disable(); + aLbField4.Disable(); + aLbCond4.Disable(); + aEdVal4.Disable(); + } + else if ( aLbConnect3.GetSelectEntryCount() == 0 ) + { + aLbField4.Disable(); + aLbCond4.Disable(); + aEdVal4.Disable(); + } if(pDoc!=NULL && pDoc->GetChangeTrack()!=NULL) aBtnCopyResult.Disable(); @@ -345,9 +455,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 ) { @@ -371,6 +483,7 @@ aLbField1.InsertEntry( aFieldName, i ); aLbField2.InsertEntry( aFieldName, i ); aLbField3.InsertEntry( aFieldName, i ); + aLbField4.InsertEntry( aFieldName, i ); i++; } nFieldCount = i; @@ -382,7 +495,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(); @@ -455,7 +568,7 @@ { //! GetText / SetText ?? - if ( pDoc && nList>0 && nList<=3 ) + if ( pDoc && nList>0 && nList<=4 ) { USHORT nFieldSelPos = aFieldLbArr[nList-1]->GetSelectEntryPos(); if ( nFieldSelPos ) @@ -532,10 +645,7 @@ { ScAddress theCopyPos; ScQueryParam theParam( theQueryData ); - USHORT nConnect1 = aLbConnect1.GetSelectEntryPos(); - USHORT nConnect2 = aLbConnect2.GetSelectEntryPos(); BOOL bCopyPosOk = FALSE; - SCSIZE i; if ( aBtnCopyResult.IsChecked() ) { @@ -549,57 +659,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; @@ -622,11 +681,6 @@ theParam.bRegExp = aBtnRegExp.IsChecked(); theParam.bDestPers = aBtnDestPers.IsChecked(); - // nur die drei eingestellten - alles andere zuruecksetzen - - SCSIZE nEC = theParam.GetEntryCount(); - for (i=3; i(0); + } + bConnect[nOffset] = TRUE; } else { @@ -775,6 +867,10 @@ { aLbConnect1.Enable(); } + theQueryData.GetEntry(nOffset).bDoQuery = TRUE; + USHORT nField = pLb->GetSelectEntryPos(); + theQueryData.GetEntry(nOffset).nField = nField ? (theQueryData.nCol1 + + static_cast(nField) - 1) : static_cast(0); } } else if ( pLb == &aLbField2 ) @@ -782,15 +878,31 @@ if ( aLbField2.GetSelectEntryPos() == 0 ) { aLbConnect2.SetNoSelection(); + aLbConnect3.SetNoSelection(); aLbField3.SelectEntryPos( 0 ); + aLbField4.SelectEntryPos( 0 ); aLbCond3.SelectEntryPos( 0 ); + aLbCond4.SelectEntryPos( 0 ); ClearValueList( 2 ); ClearValueList( 3 ); + ClearValueList( 4 ); aLbConnect2.Disable(); + aLbConnect3.Disable(); aLbField3.Disable(); + aLbField4.Disable(); aLbCond3.Disable(); + aLbCond4.Disable(); aEdVal3.Disable(); + aEdVal4.Disable(); + + for (USHORT i= nOffset+1; i< MAXQUERY; i++) + { + theQueryData.GetEntry(i).bDoQuery = FALSE; + bConnect[i]=FALSE; + theQueryData.GetEntry(i).nField = static_cast(0); + } + bConnect[1+nOffset] = TRUE; } else { @@ -799,13 +911,96 @@ { aLbConnect2.Enable(); } + + USHORT nField = pLb->GetSelectEntryPos(); + USHORT nQ=1+nOffset; + theQueryData.GetEntry(nQ).bDoQuery = TRUE; + theQueryData.GetEntry(nQ).nField = nField ? (theQueryData.nCol1 + + static_cast(nField) - 1) : static_cast(0); } } else if ( pLb == &aLbField3 ) { - ( aLbField3.GetSelectEntryPos() == 0 ) - ? ClearValueList( 3 ) - : UpdateValueList( 3 ); + if ( aLbField3.GetSelectEntryPos() == 0 ) + { + aLbConnect3.SetNoSelection(); + aLbField4.SelectEntryPos( 0 ); + aLbCond4.SelectEntryPos( 0 ); + ClearValueList( 3 ); + ClearValueList( 4 ); + + aLbConnect3.Disable(); + aLbField4.Disable(); + aLbCond4.Disable(); + aEdVal4.Disable(); + + for (USHORT i= nOffset+2; i< MAXQUERY; i++) + { + theQueryData.GetEntry(i).bDoQuery = FALSE; + bConnect[i]=FALSE; + theQueryData.GetEntry(i).nField = static_cast(0); + } + bConnect[2+nOffset] = TRUE; + } + else + { + UpdateValueList( 3 ); + if ( !aLbConnect3.IsEnabled() ) + { + aLbConnect3.Enable(); + } + + USHORT nField = pLb->GetSelectEntryPos(); + USHORT nQ=2+nOffset; + theQueryData.GetEntry(nQ).bDoQuery = TRUE; + + theQueryData.GetEntry(nQ).nField = nField ? (theQueryData.nCol1 + + static_cast(nField) - 1) : static_cast(0); + } + } + else if ( pLb == &aLbField4 ) + { + if ( aLbField4.GetSelectEntryPos() == 0 ) + { + ClearValueList( 4 ); + for (USHORT i= nOffset+3; i< MAXQUERY; i++) + { + theQueryData.GetEntry(i).bDoQuery = FALSE; + bConnect[i]=FALSE; + theQueryData.GetEntry(i).nField = static_cast(0); + } + bConnect[3+nOffset] = TRUE; + } + else + { + theQueryData.GetEntry(nOffset).bDoQuery = TRUE; + UpdateValueList( 4 ); + USHORT nField = pLb->GetSelectEntryPos(); + USHORT nQ=3+nOffset; + theQueryData.GetEntry(nQ).bDoQuery = TRUE; + theQueryData.GetEntry(nQ).nField = nField ? (theQueryData.nCol1 + + static_cast(nField) - 1) : static_cast(0); + } + } + + 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; @@ -827,14 +1022,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 @@ -845,6 +1043,7 @@ UpdateValueList( 1 ); // aktueller Text wird gemerkt UpdateValueList( 2 ); UpdateValueList( 3 ); + UpdateValueList( 4 ); } return 0; @@ -855,27 +1054,205 @@ 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; + ListBox* pLbCond = &aLbCond1; + ListBox* pLbField = &aLbField1; + ScQueryOp eOp = (ScQueryOp)pLbCond->GetSelectEntryPos(); - if ( pEd == &aEdVal2 ) pLb = &aLbCond2; - else if ( pEd == &aEdVal3 ) pLb = &aLbCond3; + 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; + } // wenn einer der Sonderwerte leer/nicht-leer // gewaehlt wird, so macht nur der =-Operator Sinn: 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 ) + { + 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, LoseFocusHdl, Control*, EMPTYARG ) +{ + mbDlgLostFocus = !IsActive(); + return 0; +} + +IMPL_LINK( ScFilterDlg, GetFocusHdl, Control*, pCtrl ) +{ + Edit* pEdit = NULL; + mpEdActive = NULL; + + for ( sal_uInt16 nRow = 0; nRow < EDIT_ROW_COUNT; ++nRow ) + { + if( pCtrl == mpValEdit[nRow] ) + pEdit = mpEdActive = mpValEdit[nRow]; + else if( pCtrl == mpCondListbox[nRow] ) // focus on "operator" list box + mpEdActive = mpValEdit[nRow]; // use right edit for ref input, but don't change selection + else if( pCtrl == mpFieldListbox[nRow] ) // focus on "operator" list box + mpEdActive = mpValEdit[nRow]; } + if( pEdit ) + pEdit->SetSelection( Selection( 0, 8 ) ); + 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 ) +{ + 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 || bConnect[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 ( i<3 ) + { + if(rEntry.bDoQuery) + aConnectLbArr[i]->Enable(); + else + aConnectLbArr[i]->Disable(); + USHORT nQENext = nQE+1; + if(theQueryData.GetEntry(nQENext).bDoQuery || bConnect[nQENext]) + aConnectLbArr[i]->SelectEntryPos( theQueryData.GetEntry( nQENext).eConnect ); + else + aConnectLbArr[i]->SetNoSelection(); + } + } + + else + { + if(i<3) + { + if (nOffset==0) + { + if(i<2) + { + aConnectLbArr[i+1]->SetNoSelection(); + aConnectLbArr[i+1]->Disable(); + } + } + else + { + aConnectLbArr[i]->Disable(); + aConnectLbArr[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 sc.old/source/ui/inc/filtdlg.hxx sc.new/source/ui/inc/filtdlg.hxx --- sc.old/source/ui/inc/filtdlg.hxx 2007-03-04 18:08:02.000000000 +0800 +++ sc.new/source/ui/inc/filtdlg.hxx 2008-12-29 16:38:12.000000000 +0800 @@ -133,6 +133,10 @@ virtual BOOL Close(); + void SliderMoved(); + USHORT GetSliderPos(); + void RefreshEditRow( USHORT nOffset ); + private: FixedLine aFlCriteria; //---------------------------- @@ -150,11 +154,28 @@ ListBox aLbCond3; ComboBox aEdVal3; //---------------------------- + ListBox aLbConnect3; + ListBox aLbField4; + ListBox aLbCond4; + ComboBox aEdVal4; + + ScrollBar aScrollBar; + //---------------------------- FixedText aFtConnect; FixedText aFtField; FixedText aFtCond; FixedText aFtVal; + FixedLine aFlSeparator; + bool mbDlgLostFocus; + + static const sal_uInt16 EDIT_ROW_COUNT = 4; + ListBox* mpFieldListbox[EDIT_ROW_COUNT]; + ListBox* mpCondListbox[EDIT_ROW_COUNT]; + ComboBox* mpValEdit[EDIT_ROW_COUNT]; + ListBox* mpConnectListbox[EDIT_ROW_COUNT]; + BOOL bConnect[MAXQUERY]; + _COMMON_FILTER_RSCOBJS const String aStrEmpty; @@ -171,11 +192,13 @@ ScDocument* pDoc; SCTAB nSrcTab; - ComboBox* aValueEdArr[3]; - ListBox* aFieldLbArr[3]; - ListBox* aCondLbArr[3]; + ComboBox* aValueEdArr[4]; + ListBox* aFieldLbArr[4]; + ListBox* aCondLbArr[4]; + ListBox* aConnectLbArr[3]; USHORT nFieldCount; BOOL bRefInputMode; + ComboBox* mpEdActive; TypedStrCollection* pEntryLists[MAXCOLCOUNT]; USHORT nHeaderPos[MAXCOLCOUNT]; @@ -200,6 +223,10 @@ DECL_LINK( CheckBoxHdl, CheckBox* ); DECL_LINK( EndDlgHdl, Button* ); DECL_LINK( MoreClickHdl, MoreButton* ); + DECL_LINK( GetFocusHdl, Control* ); + DECL_LINK( SelectHdl, ListBox* ); + DECL_LINK( ScrollHdl, ScrollBar* ); + DECL_LINK( LoseFocusHdl, Control* ); // Hack: RefInput-Kontrolle DECL_LINK( TimeOutHdl, Timer* ); diff -uPr sc.old/source/ui/inc/filter.hrc sc.new/source/ui/inc/filter.hrc --- sc.old/source/ui/inc/filter.hrc 2005-12-16 16:08:58.000000000 +0800 +++ sc.new/source/ui/inc/filter.hrc 2008-12-25 10:30:04.000000000 +0800 @@ -64,15 +64,21 @@ #define LB_FIELD1 24 #define LB_FIELD2 25 #define LB_FIELD3 26 +#define LB_FIELD4 39 #define LB_OP1 27 #define LB_OP2 28 +#define LB_OP3 38 #define LB_COND1 29 #define LB_COND2 30 #define LB_COND3 31 +#define LB_COND4 40 #define ED_VAL1 32 #define ED_VAL2 33 #define ED_VAL3 34 +#define ED_VAL4 41 #define FL_CRITERIA 35 +#define FL_SEPARATOR 36 +#define SB_SCROLL 37 // Spezialfilter diff -uPr sc.old/source/ui/src/filter.src sc.new/source/ui/src/filter.src --- sc.old/source/ui/src/filter.src 2007-04-20 21:21:46.000000000 +0800 +++ sc.new/source/ui/src/filter.src 2009-01-07 16:31:52.000000000 +0800 @@ -39,7 +39,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 ; @@ -58,12 +58,12 @@ 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" ; }; @@ -93,6 +93,19 @@ < "OR" ; Default ; > ; }; }; + ListBox LB_OP3 + { + 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 ; @@ -117,11 +130,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 ] = @@ -142,7 +163,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 ] = @@ -163,7 +184,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 ] = @@ -182,35 +224,49 @@ }; 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 SB_SCROLL + { + Pos = MAP_APPFONT ( 265, 25 ) ; + Size = MAP_APPFONT ( 8 , 61 ) ; + VScroll = TRUE ; + TabStop = TRUE ; + }; FixedLine FL_CRITERIA { Pos = MAP_APPFONT ( 6 , 3 ) ; - Size = MAP_APPFONT ( 230 , 8 ) ; + Size = MAP_APPFONT ( 258 , 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" ; @@ -218,7 +274,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" ; @@ -226,7 +282,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" ; @@ -234,7 +290,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" ; @@ -242,7 +298,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..." ; @@ -250,7 +306,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" ; @@ -259,8 +315,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 ; }; @@ -268,28 +324,28 @@ { 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 ) ; - Size = MAP_APPFONT ( 13 , 15 ) ; + Pos = MAP_APPFONT ( 248 , 171 ) ; + Size = MAP_APPFONT ( 13 , 15 ) ; TabStop = FALSE ; QuickHelpText [ en-US ] = "Shrink" ; }; FixedLine FL_OPTIONS { Hide = TRUE ; - Pos = MAP_APPFONT ( 6 , 75 ) ; - Size = MAP_APPFONT ( 230 , 8 ) ; + Pos = MAP_APPFONT ( 6 , 120 ) ; + Size = MAP_APPFONT ( 258 , 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" ; @@ -297,36 +353,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 ( 167 , 101 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; DefButton = TRUE ; }; CancelButton BTN_CANCEL { - Pos = MAP_APPFONT ( 242 , 23 ) ; + Pos = MAP_APPFONT ( 222 , 101 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; HelpButton BTN_HELP { - Pos = MAP_APPFONT ( 242 , 43 ) ; + Pos = MAP_APPFONT ( 70 , 101 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; MoreButton BTN_MORE { - Pos = MAP_APPFONT ( 242 , 63 ) ; - Size = MAP_APPFONT ( 50 , 14 ) ; + Pos = MAP_APPFONT ( 6 , 101 ) ; + Size = MAP_APPFONT ( 55 , 14 ) ; TabStop = TRUE ; MapUnit = MAP_APPFONT ; - Delta = 75 ; + Delta = 81 ; + }; + FixedLine FL_SEPARATOR + { + Pos = MAP_APPFONT ( 0 , 91 ) ; + Size = MAP_APPFONT ( 280 , 6 ) ; }; }; //============================================================================ @@ -647,6 +708,13 @@ TabStop = TRUE ; DropDown = TRUE ; }; + ScrollBar SB_SCROLL + { + Pos = MAP_APPFONT ( 265, 20 ) ; + Size = MAP_APPFONT ( 8 , 52 ) ; + VScroll = TRUE ; + TabStop = TRUE ; + }; FixedLine FL_CRITERIA { Pos = MAP_APPFONT ( 6 , 3 ) ; @@ -727,4 +795,3 @@ Delta = 61 ; }; }; - diff -uPr sc.old/source/ui/src/scstring.src sc.new/source/ui/src/scstring.src --- sc.old/source/ui/src/scstring.src 2007-09-22 15:53:56.000000000 +0800 +++ sc.new/source/ui/src/scstring.src 2008-12-23 15:11:28.000000000 +0800 @@ -733,3 +733,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"; +}; +