diff -cNr i35579old/offapi/com/sun/star/sheet/FilterOperator2.idl i35579new/offapi/com/sun/star/sheet/FilterOperator2.idl *** i35579old/offapi/com/sun/star/sheet/FilterOperator2.idl Thu Jan 1 08:00:00 1970 --- i35579new/offapi/com/sun/star/sheet/FilterOperator2.idl Tue Apr 8 16:50:36 2008 *************** *** 0 **** --- 1,169 ---- + /************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: FilterOperator.idl,v $ + * + * $Revision: 1.6 $ + * + * last change: $Author: rt $ $Date: 2005/09/08 04:39:51 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + + #ifndef __com_sun_star_sheet_FilterOperator2_idl__ + #define __com_sun_star_sheet_FilterOperator2_idl__ + + //============================================================================= + + module com { module sun { module star { module sheet { + + //============================================================================= + + /** specifies the type of a single condition in a filter descriptor. + +

This constants group extends the FilterOperator enum by + additional filter operators.

+ + @since OOo 3.0 + */ + published constants FilterOperator2 + { + + //------------------------------------------------------------------------- + + /** selects empty entries. + */ + const long EMPTY = 0; + + //------------------------------------------------------------------------- + + /** selects non-empty entries. + */ + const long NOT_EMPTY = 1; + + //------------------------------------------------------------------------- + + /** value has to be equal to the specified value. + */ + const long EQUAL = 2; + + //------------------------------------------------------------------------- + + /** value must not be equal to the specified value. + */ + const long NOT_EQUAL = 3; + + //------------------------------------------------------------------------- + + /** value has to be greater than the specified value. + */ + const long GREATER = 4; + + //------------------------------------------------------------------------- + + /** value has to be greater than or equal to the specified value. + */ + const long GREATER_EQUAL = 5; + + //------------------------------------------------------------------------- + + /** value has to be less than the specified value. + */ + const long LESS = 6; + + //------------------------------------------------------------------------- + + /** value has to be less than or equal to the specified value. + */ + const long LESS_EQUAL = 7; + + //------------------------------------------------------------------------- + + /** selects a specified number of entries with the greatest values. + */ + const long TOP_VALUES = 8; + + //------------------------------------------------------------------------- + + /** selects a specified percentage of entries with the greatest values. + */ + const long TOP_PERCENT = 9; + + //------------------------------------------------------------------------- + + /** selects a specified number of entries with the lowest values. + */ + const long BOTTOM_VALUES = 10; + + //------------------------------------------------------------------------- + + /** selects a specified percentage of entries with the lowest values. + */ + const long BOTTOM_PERCENT = 11; + + //------------------------------------------------------------------------- + + /** selects contains entries. + */ + const long CONTAINS = 12; + + //------------------------------------------------------------------------- + + /** selects does-not-contain entries. + */ + const long DOES_NOT_CONTAIN = 13; + + //------------------------------------------------------------------------- + + /** selects begins-with entries. + */ + const long BEGINS_WITH = 14; + + //------------------------------------------------------------------------- + + /** selects does-not-begin-with entries. + */ + const long DOES_NOT_BEGIN_WITH = 15; + //------------------------------------------------------------------------- + + /** selects ends-with entries. + */ + const long ENDS_WITH = 16; + + //------------------------------------------------------------------------- + + /** selects does-not-end-with entries. + */ + const long DOES_NOT_END_WITH = 17; + + }; + + //============================================================================= + + }; }; }; }; + + #endif + diff -cNr i35579old/offapi/com/sun/star/sheet/TableFilterField2.idl i35579new/offapi/com/sun/star/sheet/TableFilterField2.idl *** i35579old/offapi/com/sun/star/sheet/TableFilterField2.idl Thu Jan 1 08:00:00 1970 --- i35579new/offapi/com/sun/star/sheet/TableFilterField2.idl Tue Apr 8 16:53:06 2008 *************** *** 0 **** --- 1,108 ---- + /************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: TableFilterField.idl,v $ + * + * $Revision: 1.6 $ + * + * last change: $Author: rt $ $Date: 2005/09/08 04:58:16 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + + #ifndef __com_sun_star_sheet_TableFilterField2_idl__ + #define __com_sun_star_sheet_TableFilterField2_idl__ + + + #ifndef __com_sun_star_sheet_FilterConnection_idl__ + #include + #endif + + //============================================================================= + + module com { module sun { module star { module sheet { + + //============================================================================= + + /** describes a single condition in a filter descriptor. + +

This struct has the FilterOperator2 constants group as + member, whereas the TableFilterField struct uses the + FilterOperator enum.

+ + @see com::sun::star::sheet::SheetFilterDescriptor + + @since OOo 3.0 + */ + published struct TableFilterField2 + { + //------------------------------------------------------------------------- + + /** specifies how the condition is connected to the previous condition. + */ + FilterConnection Connection; + + //------------------------------------------------------------------------- + + /** specifies which field (column) is used for the condition. + */ + long Field; + + //------------------------------------------------------------------------- + + /** specifies the type of the condition as defined in + FilterOperator2. + */ + long Operator; + + //------------------------------------------------------------------------- + + /** selects whether the TableFilterField2::NumericValue + or the TableFilterField2::StringValue is used. + */ + boolean IsNumeric; + + //------------------------------------------------------------------------- + + /** specifies a numeric value for the condition. + */ + double NumericValue; + + //------------------------------------------------------------------------- + + /** specifies a string value for the condition. + */ + string StringValue; + + }; + + //============================================================================= + + }; }; }; }; + + + #endif + diff -cNr i35579old/offapi/com/sun/star/sheet/XSheetFilterDescriptor2.idl i35579new/offapi/com/sun/star/sheet/XSheetFilterDescriptor2.idl *** i35579old/offapi/com/sun/star/sheet/XSheetFilterDescriptor2.idl Thu Jan 1 08:00:00 1970 --- i35579new/offapi/com/sun/star/sheet/XSheetFilterDescriptor2.idl Tue Apr 8 16:55:06 2008 *************** *** 0 **** --- 1,85 ---- + /************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: XSheetFilterDescriptor.idl,v $ + * + * $Revision: 1.8 $ + * + * last change: $Author: rt $ $Date: 2005/09/08 05:19:41 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + + #ifndef __com_sun_star_sheet_XSheetFilterDescriptor2_idl__ + #define __com_sun_star_sheet_XSheetFilterDescriptor2_idl__ + + #ifndef __com_sun_star_uno_XInterface_idl__ + #include + #endif + + #ifndef __com_sun_star_sheet_TableFilterField2_idl__ + #include + #endif + + //============================================================================= + + module com { module sun { module star { module sheet { + + //============================================================================= + + /** provides access to a collection of filter conditions (filter fields). + +

This interface uses the TableFilterField2 struct, + whereas the XSheetFilterDescriptor interface uses the + TableFilterField struct.

+ + @see com::sun::star::sheet::SheetFilterDescriptor + + @since OOo 3.0 + */ + published interface XSheetFilterDescriptor2: com::sun::star::uno::XInterface + { + //------------------------------------------------------------------------- + + /** returns the collection of filter fields. + */ + sequence< com::sun::star::sheet::TableFilterField2 > getFilterFields2(); + + //------------------------------------------------------------------------- + + /** sets a new collection of filter fields. + */ + void setFilterFields2( + [in] sequence< com::sun::star::sheet::TableFilterField2 > aFilterFields ); + + }; + + //============================================================================= + + }; }; }; }; + + #endif + diff -cNr i35579old/offapi/com/sun/star/sheet/makefile.mk i35579new/offapi/com/sun/star/sheet/makefile.mk *** i35579old/offapi/com/sun/star/sheet/makefile.mk Tue Apr 8 16:58:16 2008 --- i35579new/offapi/com/sun/star/sheet/makefile.mk Tue Apr 8 17:00:38 2008 *************** *** 126,131 **** --- 126,132 ---- FillMode.idl\ FilterConnection.idl\ FilterOperator.idl\ + FilterOperator2.idl\ FormulaLanguage.idl\ FormulaMapGroup.idl\ FormulaMapGroupSpecialOffset.idl\ *************** *** 204,209 **** --- 205,211 ---- TableConditionalEntryEnumeration.idl\ TableConditionalFormat.idl\ TableFilterField.idl\ + TableFilterField2.idl\ TableOperationMode.idl\ TablePageBreakData.idl\ TablePageStyle.idl\ *************** *** 294,299 **** --- 296,302 ---- XSheetConditionalEntries.idl\ XSheetConditionalEntry.idl\ XSheetFilterDescriptor.idl\ + XSheetFilterDescriptor2.idl\ XSheetFilterable.idl\ XSheetFilterableEx.idl\ XSheetLinkable.idl\ diff -cNr i35579old/sc/inc/datauno.hxx i35579new/sc/inc/datauno.hxx *** i35579old/sc/inc/datauno.hxx Sun Mar 4 18:07:44 2007 --- i35579new/sc/inc/datauno.hxx Wed Apr 9 11:03:44 2008 *************** *** 60,65 **** --- 60,68 ---- #ifndef _COM_SUN_STAR_SHEET_XSHEETFILTERDESCRIPTOR_HPP_ #include #endif + #ifndef _COM_SUN_STAR_SHEET_XSHEETFILTERDESCRIPTOR2_HPP_ + #include + #endif #ifndef _COM_SUN_STAR_SHEET_XCONSOLIDATIONDESCRIPTOR_HPP_ #include #endif *************** *** 397,403 **** // to uno, all three look the same ! class ScFilterDescriptorBase : public cppu::WeakImplHelper3< com::sun::star::sheet::XSheetFilterDescriptor, com::sun::star::beans::XPropertySet, com::sun::star::lang::XServiceInfo >, --- 400,407 ---- // to uno, all three look the same ! class ScFilterDescriptorBase : public cppu::WeakImplHelper4< ! com::sun::star::sheet::XSheetFilterDescriptor2, com::sun::star::sheet::XSheetFilterDescriptor, com::sun::star::beans::XPropertySet, com::sun::star::lang::XServiceInfo >, *************** *** 424,429 **** --- 428,438 ---- virtual void SAL_CALL setFilterFields( const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::TableFilterField >& aFilterFields ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::TableFilterField2 > SAL_CALL + getFilterFields2() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setFilterFields2( const ::com::sun::star::uno::Sequence< + ::com::sun::star::sheet::TableFilterField2 >& aFilterFields ) + throw(::com::sun::star::uno::RuntimeException); // XPropertySet virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > diff -cNr i35579old/sc/inc/global.hxx i35579new/sc/inc/global.hxx *** i35579old/sc/inc/global.hxx Fri Mar 7 23:10:04 2008 --- i35579new/sc/inc/global.hxx Tue Apr 8 14:06:34 2008 *************** *** 709,715 **** SC_TOPVAL, SC_BOTVAL, SC_TOPPERC, ! SC_BOTPERC }; // ----------------------------------------------------------------------- --- 709,721 ---- SC_TOPVAL, SC_BOTVAL, SC_TOPPERC, ! SC_BOTPERC, ! SC_CONTAINS, ! SC_DOES_NOT_CONTAIN, ! SC_BEGINS_WITH, ! SC_DOES_NOT_BEGIN_WITH, ! SC_ENDS_WITH, ! SC_DOES_NOT_END_WITH }; // ----------------------------------------------------------------------- diff -cNr i35579old/sc/inc/sc.hrc i35579new/sc/inc/sc.hrc *** i35579old/sc/inc/sc.hrc Tue Mar 11 18:43:02 2008 --- i35579new/sc/inc/sc.hrc Tue Apr 8 14:09:46 2008 *************** *** 1304,1309 **** --- 1304,1311 ---- #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 -cNr i35579old/sc/source/core/data/table3.cxx i35579new/sc/source/core/data/table3.cxx *** i35579old/sc/source/core/data/table3.cxx Sat Sep 22 15:53:28 2007 --- i35579new/sc/source/core/data/table3.cxx Tue Apr 8 14:52:50 2008 *************** *** 1019,1030 **** --- 1019,1037 ---- } } else if ( (rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL) || + (rEntry.eOp == SC_CONTAINS || rEntry.eOp == SC_DOES_NOT_CONTAIN || + rEntry.eOp == SC_BEGINS_WITH || rEntry.eOp == SC_ENDS_WITH || + rEntry.eOp == SC_DOES_NOT_BEGIN_WITH || rEntry.eOp == SC_DOES_NOT_END_WITH) || (rEntry.bQueryByString && (pCell ? pCell->HasStringData() : HasStringData( static_cast(rEntry.nField), nRow)))) { // by String String aCellStr; + if( rEntry.eOp == SC_CONTAINS || rEntry.eOp == SC_DOES_NOT_CONTAIN + || rEntry.eOp == SC_BEGINS_WITH || rEntry.eOp == SC_ENDS_WITH + || rEntry.eOp == SC_DOES_NOT_BEGIN_WITH || rEntry.eOp == SC_DOES_NOT_END_WITH ) + bMatchWholeCell = FALSE; if ( pCell ) { if (pCell->GetCellType() != CELLTYPE_NOTE) *************** *** 1037,1043 **** GetInputString( static_cast(rEntry.nField), nRow, aCellStr ); BOOL bRealRegExp = (rParam.bRegExp && ((rEntry.eOp == SC_EQUAL) ! || (rEntry.eOp == SC_NOT_EQUAL))); BOOL bTestRegExp = (pbTestEqualCondition && rParam.bRegExp && ((rEntry.eOp == SC_LESS_EQUAL) || (rEntry.eOp == SC_GREATER_EQUAL))); --- 1044,1053 ---- GetInputString( static_cast(rEntry.nField), nRow, aCellStr ); BOOL bRealRegExp = (rParam.bRegExp && ((rEntry.eOp == SC_EQUAL) ! || (rEntry.eOp == SC_NOT_EQUAL) || (rEntry.eOp == SC_CONTAINS) ! || (rEntry.eOp == SC_DOES_NOT_CONTAIN) || (rEntry.eOp == SC_BEGINS_WITH) ! || (rEntry.eOp == SC_ENDS_WITH) || (rEntry.eOp == SC_DOES_NOT_BEGIN_WITH) ! || (rEntry.eOp == SC_DOES_NOT_END_WITH))); BOOL bTestRegExp = (pbTestEqualCondition && rParam.bRegExp && ((rEntry.eOp == SC_LESS_EQUAL) || (rEntry.eOp == SC_GREATER_EQUAL))); *************** *** 1045,1064 **** { xub_StrLen nStart = 0; xub_StrLen nEnd = aCellStr.Len(); ! BOOL bMatch = (BOOL) rEntry.GetSearchTextPtr( rParam.bCaseSens ) ! ->SearchFrwrd( aCellStr, &nStart, &nEnd ); // from 614 on, nEnd is behind the found text if ( bMatch && bMatchWholeCell && (nStart != 0 || nEnd != aCellStr.Len()) ) bMatch = FALSE; // RegExp must match entire cell string if ( bRealRegExp ) ! bOk = ((rEntry.eOp == SC_NOT_EQUAL) ? !bMatch : bMatch); else bTestEqual = bMatch; } if ( !bRealRegExp ) { ! if ( rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL ) { if ( !rEntry.bQueryByString && rEntry.pStr->Len() == 0 ) { --- 1055,1115 ---- { xub_StrLen nStart = 0; xub_StrLen nEnd = aCellStr.Len(); ! // from 614 on, nEnd is behind the found text + BOOL bMatch = FALSE; + if ( rEntry.eOp == SC_ENDS_WITH || rEntry.eOp == SC_DOES_NOT_END_WITH ) + { + nEnd = 0; + nStart = aCellStr.Len(); + bMatch = (BOOL) rEntry.GetSearchTextPtr( rParam.bCaseSens ) + ->SearchBkwrd( aCellStr, &nStart, &nEnd ); + } + else + { + bMatch = (BOOL) rEntry.GetSearchTextPtr( rParam.bCaseSens ) + ->SearchFrwrd( aCellStr, &nStart, &nEnd ); + } if ( bMatch && bMatchWholeCell && (nStart != 0 || nEnd != aCellStr.Len()) ) bMatch = FALSE; // RegExp must match entire cell string if ( bRealRegExp ) ! switch (rEntry.eOp) ! { ! case SC_EQUAL: ! case SC_CONTAINS: ! bOk = bMatch; ! break; ! case SC_NOT_EQUAL: ! case SC_DOES_NOT_CONTAIN: ! bOk = !bMatch; ! break; ! case SC_BEGINS_WITH: ! bOk = ( bMatch && (nStart == 0) ); ! break; ! case SC_DOES_NOT_BEGIN_WITH: ! bOk = !( bMatch && (nStart == 0) ); ! break; ! case SC_ENDS_WITH: ! bOk = ( bMatch && (nEnd == aCellStr.Len()) ); ! break; ! case SC_DOES_NOT_END_WITH: ! bOk = !( bMatch && (nEnd == aCellStr.Len()) ); ! break; ! default: ! { ! // added to avoid warnings ! } ! } else bTestEqual = bMatch; } if ( !bRealRegExp ) { ! if ( rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL ! || rEntry.eOp == SC_CONTAINS || rEntry.eOp == SC_DOES_NOT_CONTAIN ! || rEntry.eOp == SC_BEGINS_WITH || rEntry.eOp == SC_ENDS_WITH ! || rEntry.eOp == SC_DOES_NOT_BEGIN_WITH || rEntry.eOp == SC_DOES_NOT_END_WITH ) { if ( !rEntry.bQueryByString && rEntry.pStr->Len() == 0 ) { *************** *** 1066,1074 **** --- 1117,1131 ---- // the query value is assigned directly, and the string is empty. In that case, // don't find any string (isEqual would find empty string results in formula cells). bOk = FALSE; + if ( rEntry.eOp == SC_NOT_EQUAL ) + bOk = !bOk; } else if ( bMatchWholeCell ) + { bOk = pTransliteration->isEqual( aCellStr, *rEntry.pStr ); + if ( rEntry.eOp == SC_NOT_EQUAL ) + bOk = !bOk; + } else { ::com::sun::star::uno::Sequence< sal_Int32 > xOff; *************** *** 1078,1087 **** String aQuer( pTransliteration->transliterate( *rEntry.pStr, ScGlobal::eLnge, 0, rEntry.pStr->Len(), &xOff ) ); ! bOk = (aCell.Search( aQuer ) != STRING_NOTFOUND); } - if ( rEntry.eOp == SC_NOT_EQUAL ) - bOk = !bOk; } else { // use collator here because data was probably sorted --- 1135,1171 ---- String aQuer( pTransliteration->transliterate( *rEntry.pStr, ScGlobal::eLnge, 0, rEntry.pStr->Len(), &xOff ) ); ! xub_StrLen nIndex = (rEntry.eOp == SC_ENDS_WITH ! || rEntry.eOp == SC_DOES_NOT_END_WITH)? (aCell.Len()-aQuer.Len()):0; ! xub_StrLen nStrPos = aCell.Search( aQuer, nIndex ); ! switch (rEntry.eOp) ! { ! case SC_EQUAL: ! case SC_CONTAINS: ! bOk = ( nStrPos != STRING_NOTFOUND ); ! break; ! case SC_NOT_EQUAL: ! case SC_DOES_NOT_CONTAIN: ! bOk = ( nStrPos == STRING_NOTFOUND ); ! break; ! case SC_BEGINS_WITH: ! bOk = ( nStrPos == 0 ); ! break; ! case SC_DOES_NOT_BEGIN_WITH: ! bOk = ( nStrPos != 0 ); ! break; ! case SC_ENDS_WITH: ! bOk = ( nStrPos + aQuer.Len() == aCell.Len() ); ! break; ! case SC_DOES_NOT_END_WITH: ! bOk = ( nStrPos + aQuer.Len() != aCell.Len() ); ! break; ! default: ! { ! // added to avoid warnings ! } ! } } } else { // use collator here because data was probably sorted diff -cNr i35579old/sc/source/filter/xml/XMLExportDatabaseRanges.cxx i35579new/sc/source/filter/xml/XMLExportDatabaseRanges.cxx *** i35579old/sc/source/filter/xml/XMLExportDatabaseRanges.cxx Wed Apr 9 11:20:40 2008 --- i35579new/sc/source/filter/xml/XMLExportDatabaseRanges.cxx Thu Apr 24 15:44:46 2008 *************** *** 259,264 **** --- 259,322 ---- } } + rtl::OUString ScXMLExportDatabaseRanges::getOperatorXML(const long aFilterOperator, const sal_Bool bUseRegularExpressions) const + { + switch (aFilterOperator) + { + case sheet::FilterOperator2::EQUAL : + { + if (bUseRegularExpressions) + return GetXMLToken(XML_MATCH); + else + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("=")); + } + case sheet::FilterOperator2::NOT_EQUAL : + { + if (bUseRegularExpressions) + return GetXMLToken(XML_NOMATCH); + else + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("!=")); + } + case sheet::FilterOperator2::BOTTOM_PERCENT : + return GetXMLToken(XML_BOTTOM_PERCENT); + case sheet::FilterOperator2::BOTTOM_VALUES : + return GetXMLToken(XML_BOTTOM_VALUES); + case sheet::FilterOperator2::EMPTY : + return GetXMLToken(XML_EMPTY); + case sheet::FilterOperator2::GREATER : + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(">")); + case sheet::FilterOperator2::GREATER_EQUAL : + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(">=")); + case sheet::FilterOperator2::LESS : + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("<")); + case sheet::FilterOperator2::LESS_EQUAL : + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("<=")); + case sheet::FilterOperator2::NOT_EMPTY : + return GetXMLToken(XML_NOEMPTY); + case sheet::FilterOperator2::TOP_PERCENT : + return GetXMLToken(XML_TOP_PERCENT); + case sheet::FilterOperator2::TOP_VALUES : + return GetXMLToken(XML_TOP_VALUES); + case sheet::FilterOperator2::CONTAINS : + return GetXMLToken(XML_CONTAINS); + case sheet::FilterOperator2::DOES_NOT_CONTAIN : + return GetXMLToken(XML_DOES_NOT_CONTAIN); + case sheet::FilterOperator2::BEGINS_WITH : + return GetXMLToken(XML_BEGINS_WITH); + case sheet::FilterOperator2::DOES_NOT_BEGIN_WITH : + return GetXMLToken(XML_DOES_NOT_BEGIN_WITH); + case sheet::FilterOperator2::ENDS_WITH : + return GetXMLToken(XML_ENDS_WITH); + case sheet::FilterOperator2::DOES_NOT_END_WITH : + return GetXMLToken(XML_DOES_NOT_END_WITH); + default: + { + // added to avoid warnings + } + } + return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("=")); + } + rtl::OUString ScXMLExportDatabaseRanges::getOperatorXML(const sheet::FilterOperator aFilterOperator, const sal_Bool bUseRegularExpressions) const { switch (aFilterOperator) *************** *** 305,310 **** --- 363,386 ---- return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("=")); } + void ScXMLExportDatabaseRanges::WriteCondition(const sheet::TableFilterField2& aFilterField, sal_Bool bIsCaseSensitive, sal_Bool bUseRegularExpressions) + { + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_FIELD_NUMBER, rtl::OUString::valueOf(aFilterField.Field)); + if (bIsCaseSensitive) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_TRUE); + if (aFilterField.IsNumeric) + { + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_TYPE, XML_NUMBER); + rtl::OUStringBuffer sBuffer; + rExport.GetMM100UnitConverter().convertDouble(sBuffer, aFilterField.NumericValue); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_VALUE, sBuffer.makeStringAndClear()); + } + else + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_VALUE, aFilterField.StringValue); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_OPERATOR, getOperatorXML(aFilterField.Operator, bUseRegularExpressions)); + SvXMLElementExport aElemC(rExport, XML_NAMESPACE_TABLE, XML_FILTER_CONDITION, sal_True, sal_True); + } + void ScXMLExportDatabaseRanges::WriteCondition(const sheet::TableFilterField& aFilterField, sal_Bool bIsCaseSensitive, sal_Bool bUseRegularExpressions) { rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_FIELD_NUMBER, rtl::OUString::valueOf(aFilterField.Field)); *************** *** 323,328 **** --- 399,537 ---- SvXMLElementExport aElemC(rExport, XML_NAMESPACE_TABLE, XML_FILTER_CONDITION, sal_True, sal_True); } + void ScXMLExportDatabaseRanges::WriteFilterDescriptor(const uno::Reference & xSheetFilterDescriptor, const rtl::OUString sDatabaseRangeName) + { + uno::Reference< sheet::XSheetFilterDescriptor2 > xSheetFilterDescriptor2( xSheetFilterDescriptor, uno::UNO_QUERY ); + if ( xSheetFilterDescriptor2.is() ) + { + uno::Sequence< sheet::TableFilterField2 > aTableFilterFields2( + xSheetFilterDescriptor2->getFilterFields2() ); + sal_Int32 nTableFilterFields = aTableFilterFields2.getLength(); + if (nTableFilterFields > 0) + { + uno::Reference xPropertySet (xSheetFilterDescriptor, uno::UNO_QUERY); + if (xPropertySet.is()) + { + if (::cppu::any2bool(xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_COPYOUT))))) + { + table::CellAddress aOutputPosition; + if (xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_OUTPOS))) >>= aOutputPosition) + { + rtl::OUString sOUCellAddress; + ScRangeStringConverter::GetStringFromAddress( sOUCellAddress, aOutputPosition, pDoc ); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, sOUCellAddress); + } + } + ScDBCollection* pDBCollection = pDoc->GetDBCollection(); + sal_uInt16 nIndex; + pDBCollection->SearchName(sDatabaseRangeName, nIndex); + ScDBData* pDBData = (*pDBCollection)[nIndex]; + ScRange aAdvSource; + if (pDBData->GetAdvancedQuerySource(aAdvSource)) + { + rtl::OUString sOUCellAddress; + ScRangeStringConverter::GetStringFromRange( sOUCellAddress, aAdvSource, pDoc ); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS, sOUCellAddress); + } + + if (::cppu::any2bool(xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_SKIPDUP))))) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_DUPLICATES, XML_FALSE); + SvXMLElementExport aElemF(rExport, XML_NAMESPACE_TABLE, XML_FILTER, sal_True, sal_True); + rExport.CheckAttrList(); + sal_Bool bIsCaseSensitive = ::cppu::any2bool(xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_ISCASE)))); + sal_Bool bUseRegularExpressions = ::cppu::any2bool(xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_USEREGEX)))); + sal_Bool bAnd = sal_False; + sal_Bool bOr = sal_False; + for (sal_Int32 i = 1; i < nTableFilterFields; ++i) + { + if (aTableFilterFields2[i].Connection == sheet::FilterConnection_AND) + bAnd = sal_True; + else + bOr = sal_True; + } + if (bOr && !bAnd) + { + SvXMLElementExport aElemOr(rExport, XML_NAMESPACE_TABLE, XML_FILTER_OR, sal_True, sal_True); + for (sal_Int32 i = 0; i < nTableFilterFields; ++i) + { + WriteCondition(aTableFilterFields2[i], bIsCaseSensitive, bUseRegularExpressions); + } + } + else if (bAnd && !bOr) + { + SvXMLElementExport aElemAnd(rExport, XML_NAMESPACE_TABLE, XML_FILTER_AND, sal_True, sal_True); + for (sal_Int32 i = 0; i < nTableFilterFields; ++i) + { + WriteCondition(aTableFilterFields2[i], bIsCaseSensitive, bUseRegularExpressions); + } + } + else if (nTableFilterFields == 1) + { + WriteCondition(aTableFilterFields2[0], bIsCaseSensitive, bUseRegularExpressions); + } + else + { + SvXMLElementExport aElemC(rExport, XML_NAMESPACE_TABLE, XML_FILTER_OR, sal_True, sal_True); + sheet::TableFilterField2 aPrevFilterField = aTableFilterFields2[0]; + sheet::FilterConnection aConnection = aTableFilterFields2[1].Connection; + sal_Bool bOpenAndElement; + rtl::OUString aName = rExport.GetNamespaceMap().GetQNameByKey(XML_NAMESPACE_TABLE, GetXMLToken(XML_FILTER_AND)); + if (aConnection == sheet::FilterConnection_AND) + { + rExport.StartElement( aName, sal_True); + bOpenAndElement = sal_True; + } + else + bOpenAndElement = sal_False; + for (sal_Int32 i = 1; i < nTableFilterFields; ++i) + { + if (aConnection != aTableFilterFields2[i].Connection) + { + aConnection = aTableFilterFields2[i].Connection; + if (aTableFilterFields2[i].Connection == sheet::FilterConnection_AND) + { + rExport.StartElement( aName, sal_True ); + bOpenAndElement = sal_True; + WriteCondition(aPrevFilterField, bIsCaseSensitive, bUseRegularExpressions); + aPrevFilterField = aTableFilterFields2[i]; + if (i == nTableFilterFields - 1) + { + WriteCondition(aPrevFilterField, bIsCaseSensitive, bUseRegularExpressions); + rExport.EndElement(aName, sal_True); + bOpenAndElement = sal_False; + } + } + else + { + WriteCondition(aPrevFilterField, bIsCaseSensitive, bUseRegularExpressions); + aPrevFilterField = aTableFilterFields2[i]; + if (bOpenAndElement) + { + rExport.EndElement(aName, sal_True); + bOpenAndElement = sal_False; + } + if (i == nTableFilterFields - 1) + { + WriteCondition(aPrevFilterField, bIsCaseSensitive, bUseRegularExpressions); + } + } + } + else + { + WriteCondition(aPrevFilterField, bIsCaseSensitive, bUseRegularExpressions); + aPrevFilterField = aTableFilterFields2[i]; + if (i == nTableFilterFields - 1) + WriteCondition(aPrevFilterField, bIsCaseSensitive, bUseRegularExpressions); + } + } + if(bOpenAndElement) + rExport.EndElement(aName, sal_True); + } + } + } + } + } + void ScXMLExportDatabaseRanges::WriteFilterDescriptor(const uno::Reference & xSheetFilterDescriptor, const rtl::OUString sDatabaseRangeName) { uno::Sequence aTableFilterFields(xSheetFilterDescriptor->getFilterFields()); *************** *** 731,738 **** SvXMLElementExport aElemDR(rExport, XML_NAMESPACE_TABLE, XML_DATABASE_RANGE, sal_True, sal_True); rExport.CheckAttrList(); WriteImportDescriptor(xDatabaseRange->getImportDescriptor()); ! if (xSheetFilterDescriptor.is()) ! WriteFilterDescriptor(xSheetFilterDescriptor, sDatabaseRangeName); WriteSortDescriptor(aSortProperties); WriteSubTotalDescriptor(xDatabaseRange->getSubTotalDescriptor(), sDatabaseRangeName); } --- 940,955 ---- SvXMLElementExport aElemDR(rExport, XML_NAMESPACE_TABLE, XML_DATABASE_RANGE, sal_True, sal_True); rExport.CheckAttrList(); WriteImportDescriptor(xDatabaseRange->getImportDescriptor()); ! uno::Reference< sheet::XSheetFilterDescriptor2 > xSheetFilterDescriptor2( ! xSheetFilterDescriptor, uno::UNO_QUERY ); ! if ( xSheetFilterDescriptor2.is() ) ! { ! WriteFilterDescriptor( xSheetFilterDescriptor2, sDatabaseRangeName ); ! } ! else if ( xSheetFilterDescriptor.is() ) ! { ! WriteFilterDescriptor( xSheetFilterDescriptor, sDatabaseRangeName ); ! } WriteSortDescriptor(aSortProperties); WriteSubTotalDescriptor(xDatabaseRange->getSubTotalDescriptor(), sDatabaseRangeName); } diff -cNr i35579old/sc/source/filter/xml/XMLExportDatabaseRanges.hxx i35579new/sc/source/filter/xml/XMLExportDatabaseRanges.hxx *** i35579old/sc/source/filter/xml/XMLExportDatabaseRanges.hxx Fri Dec 16 16:08:52 2005 --- i35579new/sc/source/filter/xml/XMLExportDatabaseRanges.hxx Wed Apr 9 15:04:02 2008 *************** *** 45,56 **** --- 45,65 ---- #ifndef _COM_SUN_STAR_SHEET_FILTEROPERATOR_HPP_ #include #endif + #ifndef _COM_SUN_STAR_SHEET_FILTEROPERATOR2_HPP_ + #include + #endif #ifndef _COM_SUN_STAR_SHEET_TABLEFILTERFIELD_HPP_ #include #endif + #ifndef _COM_SUN_STAR_SHEET_TABLEFILTERFIELD2_HPP_ + #include + #endif #ifndef _COM_SUN_STAR_SHEET_XSHEETFILTERDESCRIPTOR_HPP_ #include #endif + #ifndef _COM_SUN_STAR_SHEET_XSHEETFILTERDESCRIPTOR2_HPP_ + #include + #endif #ifndef _COM_SUN_STAR_SHEET_XSUBTOTALDESCRIPTOR_HPP_ #include #endif *************** *** 69,76 **** --- 78,88 ---- void WriteImportDescriptor(const com::sun::star::uno::Sequence aImportDescriptor); rtl::OUString getOperatorXML(const com::sun::star::sheet::FilterOperator aFilterOperator, const sal_Bool bUseRegularExpressions) const; + rtl::OUString getOperatorXML(const long aFilterOperator, const sal_Bool bUseRegularExpressions) const; void WriteCondition(const com::sun::star::sheet::TableFilterField& aFilterField, sal_Bool bIsCaseSensitive, sal_Bool bUseRegularExpressions); + void WriteCondition(const com::sun::star::sheet::TableFilterField2& aFilterField, sal_Bool bIsCaseSensitive, sal_Bool bUseRegularExpressions); void WriteFilterDescriptor(const com::sun::star::uno::Reference & xSheetFilterDescriptor, const rtl::OUString sDatabaseRangeName); + void WriteFilterDescriptor(const com::sun::star::uno::Reference & xSheetFilterDescriptor, const rtl::OUString sDatabaseRangeName); void WriteSortDescriptor(const com::sun::star::uno::Sequence aSortProperties); void WriteSubTotalDescriptor(const com::sun::star::uno::Reference xSubTotalDescriptor, const rtl::OUString sDatabaseRangeName); public: diff -cNr i35579old/sc/source/filter/xml/xmldrani.cxx i35579new/sc/source/filter/xml/xmldrani.cxx *** i35579old/sc/source/filter/xml/xmldrani.cxx Thu May 24 17:27:34 2007 --- i35579new/sc/source/filter/xml/xmldrani.cxx Fri Apr 25 15:08:12 2008 *************** *** 426,432 **** xFilterPropertySet->setPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_USEREGEX)), uno::makeAny(bFilterUseRegularExpressions)); xFilterPropertySet->setPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_OUTPOS)), uno::makeAny(aFilterOutputPosition)); } ! xSheetFilterDescriptor->setFilterFields(aFilterFields); if (bFilterConditionSourceRange) { ScRange aAdvSource; --- 426,441 ---- xFilterPropertySet->setPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_USEREGEX)), uno::makeAny(bFilterUseRegularExpressions)); xFilterPropertySet->setPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_OUTPOS)), uno::makeAny(aFilterOutputPosition)); } ! uno::Reference< sheet::XSheetFilterDescriptor2 > xSheetFilterDescriptor2( ! xSheetFilterDescriptor, uno::UNO_QUERY ); ! if ( xSheetFilterDescriptor2.is() ) ! { ! xSheetFilterDescriptor2->setFilterFields2(aFilterFields2); ! } ! else ! { ! xSheetFilterDescriptor->setFilterFields(aFilterFields); ! } if (bFilterConditionSourceRange) { ScRange aAdvSource; diff -cNr i35579old/sc/source/filter/xml/xmldrani.hxx i35579new/sc/source/filter/xml/xmldrani.hxx *** i35579old/sc/source/filter/xml/xmldrani.hxx Fri Dec 16 16:08:52 2005 --- i35579new/sc/source/filter/xml/xmldrani.hxx Fri Apr 25 15:09:40 2008 *************** *** 56,61 **** --- 56,64 ---- #ifndef _COM_SUN_STAR_SHEET_TABLEFILTERFIELD_HPP_ #include #endif + #ifndef _COM_SUN_STAR_SHEET_TABLEFILTERFIELD2_HPP_ + #include + #endif #ifndef _COM_SUN_STAR_TABLE_CELLADDRESS_HPP_ #include #endif *************** *** 105,110 **** --- 108,114 ---- rtl::OUString sSourceObject; com::sun::star::uno::Sequence aSortSequence; com::sun::star::uno::Sequence aFilterFields; + com::sun::star::uno::Sequence aFilterFields2; std::vector < ScSubTotalRule > aSubTotalRules; com::sun::star::table::CellAddress aFilterOutputPosition; com::sun::star::table::CellRangeAddress aFilterConditionSourceRangeAddress; diff -cNr i35579old/sc/source/filter/xml/xmlfilti.cxx i35579new/sc/source/filter/xml/xmlfilti.cxx *** i35579old/sc/source/filter/xml/xmlfilti.cxx Thu May 24 17:27:34 2007 --- i35579new/sc/source/filter/xml/xmlfilti.cxx Fri Apr 25 16:04:22 2008 *************** *** 751,756 **** --- 751,768 ---- aFilterOperator = SC_TOPPERC; else if (IsXMLToken(sTempOperator, XML_TOP_VALUES)) aFilterOperator = SC_TOPVAL; + else if (IsXMLToken(sTempOperator, XML_CONTAINS)) + aFilterOperator = SC_CONTAINS; + else if (IsXMLToken(sTempOperator, XML_DOES_NOT_CONTAIN)) + aFilterOperator = SC_DOES_NOT_CONTAIN; + else if (IsXMLToken(sTempOperator, XML_BEGINS_WITH)) + aFilterOperator = SC_BEGINS_WITH; + else if (IsXMLToken(sTempOperator, XML_DOES_NOT_BEGIN_WITH)) + aFilterOperator = SC_DOES_NOT_BEGIN_WITH; + else if (IsXMLToken(sTempOperator, XML_ENDS_WITH)) + aFilterOperator = SC_ENDS_WITH; + else if (IsXMLToken(sTempOperator, XML_DOES_NOT_END_WITH)) + aFilterOperator = SC_DOES_NOT_END_WITH; } void ScXMLDPConditionContext::EndElement() diff -cNr i35579old/sc/source/ui/dbgui/filtdlg.cxx i35579new/sc/source/ui/dbgui/filtdlg.cxx *** i35579old/sc/source/ui/dbgui/filtdlg.cxx Wed Jan 30 21:32:24 2008 --- i35579new/sc/source/ui/dbgui/filtdlg.cxx Tue Apr 8 14:14:50 2008 *************** *** 103,108 **** --- 103,109 ---- 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,129 **** --- 125,132 ---- for (USHORT i=0; i<=MAXCOL; i++) pEntryLists[i] = NULL; + aBtnMore.SetMoreText( String(ScResId( SCSTR_MOREBTN_MOREOPTIONS )) ); + aBtnMore.SetLessText( String(ScResId( SCSTR_MOREBTN_LESSOPTIONS )) ); Init( rArgSet ); FreeResource(); diff -cNr i35579old/sc/source/ui/inc/filtdlg.hxx i35579new/sc/source/ui/inc/filtdlg.hxx *** i35579old/sc/source/ui/inc/filtdlg.hxx Sun Mar 4 18:08:02 2007 --- i35579new/sc/source/ui/inc/filtdlg.hxx Tue Apr 8 14:16:58 2008 *************** *** 154,159 **** --- 154,160 ---- FixedText aFtField; FixedText aFtCond; FixedText aFtVal; + FixedLine aFlSeparator; _COMMON_FILTER_RSCOBJS diff -cNr i35579old/sc/source/ui/inc/filter.hrc i35579new/sc/source/ui/inc/filter.hrc *** i35579old/sc/source/ui/inc/filter.hrc Fri Dec 16 16:08:58 2005 --- i35579new/sc/source/ui/inc/filter.hrc Tue Apr 8 14:18:30 2008 *************** *** 73,78 **** --- 73,79 ---- #define ED_VAL2 33 #define ED_VAL3 34 #define FL_CRITERIA 35 + #define FL_SEPARATOR 36 // Spezialfilter diff -cNr i35579old/sc/source/ui/src/filter.src i35579new/sc/source/ui/src/filter.src *** i35579old/sc/source/ui/src/filter.src Fri Apr 20 21:21:46 2007 --- i35579new/sc/source/ui/src/filter.src Tue Apr 8 15:53:54 2008 *************** *** 39,45 **** HelpId = SID_FILTER ; Hide = TRUE ; SVLook = TRUE ; ! Size = MAP_APPFONT ( 298 , 83 ) ; Text [ en-US ] = "Standard Filter" ; Moveable = TRUE ; Closeable = FALSE ; --- 39,45 ---- HelpId = SID_FILTER ; Hide = TRUE ; SVLook = TRUE ; ! Size = MAP_APPFONT ( 267 , 105 ) ; Text [ en-US ] = "Standard Filter" ; Moveable = TRUE ; Closeable = FALSE ; *************** *** 58,69 **** FixedText FT_COND { Pos = MAP_APPFONT ( 122 , 14 ) ; ! Size = MAP_APPFONT ( 47 , 8 ) ; Text [ en-US ] = "Condition" ; }; FixedText FT_VAL { ! Pos = MAP_APPFONT ( 173 , 14 ) ; Size = MAP_APPFONT ( 60 , 8 ) ; Text [ en-US ] = "Value" ; }; --- 58,69 ---- FixedText FT_COND { Pos = MAP_APPFONT ( 122 , 14 ) ; ! Size = MAP_APPFONT ( 75 , 8 ) ; Text [ en-US ] = "Condition" ; }; FixedText FT_VAL { ! Pos = MAP_APPFONT ( 201 , 14 ) ; Size = MAP_APPFONT ( 60 , 8 ) ; Text [ en-US ] = "Value" ; }; *************** *** 121,127 **** { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 25 ) ; ! Size = MAP_APPFONT ( 47 , 105 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = --- 121,127 ---- { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 25 ) ; ! Size = MAP_APPFONT ( 75 , 145 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = *************** *** 136,148 **** < "Smallest" ; Default ; > ; < "Largest %" ; Default ; > ; < "Smallest %" ; Default ; > ; }; }; ListBox LB_COND2 { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 41 ) ; ! Size = MAP_APPFONT ( 47 , 105 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = --- 136,154 ---- < "Smallest" ; Default ; > ; < "Largest %" ; Default ; > ; < "Smallest %" ; Default ; > ; + < "Contains" ; Default ; > ; + < "Does not contain" ; Default ; > ; + < "Begins with" ; Default ; > ; + < "Does not begin with" ; Default ; > ; + < "Ends with" ; Default ; > ; + < "Does not end with" ; Default ; > ; }; }; ListBox LB_COND2 { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 41 ) ; ! Size = MAP_APPFONT ( 75 , 145 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = *************** *** 157,169 **** < "Smallest" ; Default ; > ; < "Largest %" ; Default ; > ; < "Smallest %" ; Default ; > ; }; }; ListBox LB_COND3 { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 57 ) ; ! Size = MAP_APPFONT ( 47 , 105 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = --- 163,181 ---- < "Smallest" ; Default ; > ; < "Largest %" ; Default ; > ; < "Smallest %" ; Default ; > ; + < "Contains" ; Default ; > ; + < "Does not contain" ; Default ; > ; + < "Begins with" ; Default ; > ; + < "Does not begin with" ; Default ; > ; + < "Ends with" ; Default ; > ; + < "Does not end with" ; Default ; > ; }; }; ListBox LB_COND3 { Border = TRUE ; Pos = MAP_APPFONT ( 122 , 57 ) ; ! Size = MAP_APPFONT ( 75 , 145 ) ; TabStop = TRUE ; DropDown = TRUE ; stringlist [ en-US ] = *************** *** 178,202 **** < "Smallest" ; Default ; > ; < "Largest %" ; Default ; > ; < "Smallest %" ; Default ; > ; }; }; ComboBox ED_VAL1 { ! Pos = MAP_APPFONT ( 173 , 25 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; ComboBox ED_VAL2 { ! Pos = MAP_APPFONT ( 173 , 41 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; ComboBox ED_VAL3 { ! Pos = MAP_APPFONT ( 173 , 57 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; --- 190,220 ---- < "Smallest" ; Default ; > ; < "Largest %" ; Default ; > ; < "Smallest %" ; Default ; > ; + < "Contains" ; Default ; > ; + < "Does not contain" ; Default ; > ; + < "Begins with" ; Default ; > ; + < "Does not begin with" ; Default ; > ; + < "Ends with" ; Default ; > ; + < "Does not end with" ; Default ; > ; }; }; ComboBox ED_VAL1 { ! Pos = MAP_APPFONT ( 201 , 25 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; ComboBox ED_VAL2 { ! Pos = MAP_APPFONT ( 201 , 41 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; ComboBox ED_VAL3 { ! Pos = MAP_APPFONT ( 201 , 57 ) ; Size = MAP_APPFONT ( 60 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; *************** *** 204,216 **** FixedLine FL_CRITERIA { Pos = MAP_APPFONT ( 6 , 3 ) ; ! Size = MAP_APPFONT ( 230 , 8 ) ; Text [ en-US ] = "Filter criteria"; }; CheckBox BTN_CASE { Hide = TRUE ; ! Pos = MAP_APPFONT ( 12 , 86 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Case ~sensitive" ; --- 222,234 ---- FixedLine FL_CRITERIA { Pos = MAP_APPFONT ( 6 , 3 ) ; ! Size = MAP_APPFONT ( 258 , 8 ) ; Text [ en-US ] = "Filter criteria"; }; CheckBox BTN_CASE { Hide = TRUE ; ! Pos = MAP_APPFONT ( 12 , 116 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Case ~sensitive" ; *************** *** 218,224 **** CheckBox BTN_REGEXP { Hide = TRUE ; ! Pos = MAP_APPFONT ( 142 , 86 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Regular ~expression" ; --- 236,242 ---- CheckBox BTN_REGEXP { Hide = TRUE ; ! Pos = MAP_APPFONT ( 142 , 116 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Regular ~expression" ; *************** *** 226,232 **** CheckBox BTN_HEADER { Hide = TRUE ; ! Pos = MAP_APPFONT ( 12 , 100 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Range contains ~column labels" ; --- 244,250 ---- CheckBox BTN_HEADER { Hide = TRUE ; ! Pos = MAP_APPFONT ( 12 , 130 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Range contains ~column labels" ; *************** *** 234,240 **** CheckBox BTN_UNIQUE { Hide = TRUE ; ! Pos = MAP_APPFONT ( 142 , 100 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "~No duplication" ; --- 252,258 ---- CheckBox BTN_UNIQUE { Hide = TRUE ; ! Pos = MAP_APPFONT ( 142 , 130 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "~No duplication" ; *************** *** 242,248 **** CheckBox BTN_COPY_RESULT { Hide = TRUE ; ! Pos = MAP_APPFONT ( 12 , 114 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Copy ~results to..." ; --- 260,266 ---- CheckBox BTN_COPY_RESULT { Hide = TRUE ; ! Pos = MAP_APPFONT ( 12 , 144 ) ; Size = MAP_APPFONT ( 128 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "Copy ~results to..." ; *************** *** 250,256 **** CheckBox BTN_DEST_PERS { Hide = TRUE ; ! Pos = MAP_APPFONT ( 142 , 114 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "~Keep filter criteria" ; --- 268,274 ---- CheckBox BTN_DEST_PERS { Hide = TRUE ; ! Pos = MAP_APPFONT ( 142 , 144 ) ; Size = MAP_APPFONT ( 94 , 10 ) ; TabStop = TRUE ; Text [ en-US ] = "~Keep filter criteria" ; *************** *** 259,266 **** { Border = TRUE ; Hide = TRUE ; ! Pos = MAP_APPFONT ( 21 , 126 ) ; ! Size = MAP_APPFONT ( 90 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; --- 277,284 ---- { Border = TRUE ; Hide = TRUE ; ! Pos = MAP_APPFONT ( 21 , 156 ) ; ! Size = MAP_APPFONT ( 110 , 90 ) ; TabStop = TRUE ; DropDown = TRUE ; }; *************** *** 268,280 **** { Border = TRUE ; Hide = TRUE ; ! Pos = MAP_APPFONT ( 115 , 126 ) ; ! Size = MAP_APPFONT ( 104 , 12 ) ; TabStop = TRUE ; }; ImageButton RB_COPY_AREA { ! Pos = MAP_APPFONT ( 221 , 125 ) ; Size = MAP_APPFONT ( 13 , 15 ) ; TabStop = FALSE ; QuickHelpText [ en-US ] = "Shrink" ; --- 286,298 ---- { Border = TRUE ; Hide = TRUE ; ! Pos = MAP_APPFONT ( 136 , 156 ) ; ! Size = MAP_APPFONT ( 110 , 12 ) ; TabStop = TRUE ; }; ImageButton RB_COPY_AREA { ! Pos = MAP_APPFONT ( 248 , 155 ) ; Size = MAP_APPFONT ( 13 , 15 ) ; TabStop = FALSE ; QuickHelpText [ en-US ] = "Shrink" ; *************** *** 282,295 **** FixedLine FL_OPTIONS { Hide = TRUE ; ! Pos = MAP_APPFONT ( 6 , 75 ) ; ! Size = MAP_APPFONT ( 230 , 8 ) ; Text [ en-US ] = "Options" ; }; FixedText FT_DBAREA { Hide = TRUE ; ! Pos = MAP_APPFONT ( 66 , 144 ) ; Size = MAP_APPFONT ( 167 , 8 ) ; Left = TRUE ; Text [ en-US ] = "dummy" ; --- 300,313 ---- FixedLine FL_OPTIONS { Hide = TRUE ; ! Pos = MAP_APPFONT ( 6 , 104 ) ; ! Size = MAP_APPFONT ( 258 , 8 ) ; Text [ en-US ] = "Options" ; }; FixedText FT_DBAREA { Hide = TRUE ; ! Pos = MAP_APPFONT ( 66 , 174 ) ; Size = MAP_APPFONT ( 167 , 8 ) ; Left = TRUE ; Text [ en-US ] = "dummy" ; *************** *** 297,332 **** FixedText FT_DBAREA_LABEL { Hide = TRUE ; ! Pos = MAP_APPFONT ( 6 , 144 ) ; Size = MAP_APPFONT ( 58 , 8 ) ; Text [ en-US ] = "Data range:" ; }; OKButton BTN_OK { ! Pos = MAP_APPFONT ( 242 , 6 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; DefButton = TRUE ; }; CancelButton BTN_CANCEL { ! Pos = MAP_APPFONT ( 242 , 23 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; HelpButton BTN_HELP { ! Pos = MAP_APPFONT ( 242 , 43 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; MoreButton BTN_MORE { ! Pos = MAP_APPFONT ( 242 , 63 ) ; ! Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; MapUnit = MAP_APPFONT ; ! Delta = 75 ; }; }; //============================================================================ --- 315,355 ---- FixedText FT_DBAREA_LABEL { Hide = TRUE ; ! Pos = MAP_APPFONT ( 6 , 174 ) ; Size = MAP_APPFONT ( 58 , 8 ) ; Text [ en-US ] = "Data range:" ; }; OKButton BTN_OK { ! Pos = MAP_APPFONT ( 103 , 85 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; DefButton = TRUE ; }; CancelButton BTN_CANCEL { ! Pos = MAP_APPFONT ( 157 , 85 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; HelpButton BTN_HELP { ! Pos = MAP_APPFONT ( 211 , 85 ) ; Size = MAP_APPFONT ( 50 , 14 ) ; TabStop = TRUE ; }; MoreButton BTN_MORE { ! Pos = MAP_APPFONT ( 6 , 85 ) ; ! Size = MAP_APPFONT ( 55 , 14 ) ; TabStop = TRUE ; MapUnit = MAP_APPFONT ; ! Delta = 81 ; ! }; ! FixedLine FL_SEPARATOR ! { ! Pos = MAP_APPFONT ( 0 , 75 ) ; ! Size = MAP_APPFONT ( 267 , 6 ) ; }; }; //============================================================================ diff -cNr i35579old/sc/source/ui/src/scstring.src i35579new/sc/source/ui/src/scstring.src *** i35579old/sc/source/ui/src/scstring.src Sat Sep 22 15:53:56 2007 --- i35579new/sc/source/ui/src/scstring.src Tue Apr 8 14:37:00 2008 *************** *** 733,735 **** --- 733,745 ---- Text [ en-US ] = "Mouse button pressed"; }; + String SCSTR_MOREBTN_MOREOPTIONS + { + Text [ en-US ] = "More ~Options"; + }; + + String SCSTR_MOREBTN_LESSOPTIONS + { + Text [ en-US ] = "Less ~Options"; + }; + diff -cNr i35579old/sc/source/ui/unoobj/cellsuno.cxx i35579new/sc/source/ui/unoobj/cellsuno.cxx *** i35579old/sc/source/ui/unoobj/cellsuno.cxx Fri Mar 7 23:11:08 2008 --- i35579new/sc/source/ui/unoobj/cellsuno.cxx Fri Apr 11 09:54:46 2008 *************** *** 5688,5694 **** ScDocShell* pDocSh = GetDocShell(); ScFilterDescriptor aImpl(pDocSh); ! aImpl.setFilterFields( xDescriptor->getFilterFields() ); // Rest sind jetzt Properties... uno::Reference xPropSet( xDescriptor, uno::UNO_QUERY ); --- 5688,5703 ---- ScDocShell* pDocSh = GetDocShell(); ScFilterDescriptor aImpl(pDocSh); ! uno::Reference< sheet::XSheetFilterDescriptor2 > xDescriptor2( ! xDescriptor, uno::UNO_QUERY ); ! if ( xDescriptor2.is() ) ! { ! aImpl.setFilterFields2( xDescriptor2->getFilterFields2() ); ! } ! else ! { ! aImpl.setFilterFields( xDescriptor->getFilterFields() ); ! } // Rest sind jetzt Properties... uno::Reference xPropSet( xDescriptor, uno::UNO_QUERY ); diff -cNr i35579old/sc/source/ui/unoobj/datauno.cxx i35579new/sc/source/ui/unoobj/datauno.cxx *** i35579old/sc/source/ui/unoobj/datauno.cxx Thu Jan 17 03:56:06 2008 --- i35579new/sc/source/ui/unoobj/datauno.cxx Wed Apr 30 10:25:44 2008 *************** *** 51,56 **** --- 51,60 ---- #include #include + #include + #include + #include + #include "datauno.hxx" #include "dapiuno.hxx" #include "cellsuno.hxx" *************** *** 1190,1195 **** --- 1194,1274 ---- return aSeq; } + uno::Sequence SAL_CALL ScFilterDescriptorBase::getFilterFields2() + throw(uno::RuntimeException) + { + ScUnoGuard aGuard; + ScQueryParam aParam; + GetData(aParam); + + SCSIZE nEntries = aParam.GetEntryCount(); // allozierte Eintraege im Param + SCSIZE nCount = 0; // aktive + while ( nCount < nEntries && + aParam.GetEntry(nCount).bDoQuery ) + ++nCount; + + sheet::TableFilterField2 aField; + uno::Sequence aSeq(static_cast(nCount)); + sheet::TableFilterField2* pAry = aSeq.getArray(); + for (SCSIZE i=0; i& aFilterFields ) throw(uno::RuntimeException) *************** *** 1264,1269 **** --- 1343,1428 ---- PutData(aParam); } + void SAL_CALL ScFilterDescriptorBase::setFilterFields2( + const uno::Sequence& aFilterFields ) + throw(uno::RuntimeException) + { + ScUnoGuard aGuard; + ScQueryParam aParam; + GetData(aParam); + + SCSIZE nCount = static_cast(aFilterFields.getLength()); + DBG_ASSERT( nCount <= MAXQUERY, "setFilterFields: zu viele" ); + + aParam.Resize( nCount ); + + const sheet::TableFilterField2* pAry = aFilterFields.getConstArray(); + SCSIZE i; + for (i=0; iGetDocument()->GetFormatTable()->GetInputLineString(rEntry.nVal, 0, *rEntry.pStr); + } + + switch (pAry[i].Operator) // FilterOperator + { + case sheet::FilterOperator2::EQUAL: rEntry.eOp = SC_EQUAL; break; + case sheet::FilterOperator2::LESS: rEntry.eOp = SC_LESS; break; + case sheet::FilterOperator2::GREATER: rEntry.eOp = SC_GREATER; break; + case sheet::FilterOperator2::LESS_EQUAL: rEntry.eOp = SC_LESS_EQUAL; break; + case sheet::FilterOperator2::GREATER_EQUAL: rEntry.eOp = SC_GREATER_EQUAL; break; + case sheet::FilterOperator2::NOT_EQUAL: rEntry.eOp = SC_NOT_EQUAL; break; + case sheet::FilterOperator2::TOP_VALUES: rEntry.eOp = SC_TOPVAL; break; + case sheet::FilterOperator2::BOTTOM_VALUES: rEntry.eOp = SC_BOTVAL; break; + case sheet::FilterOperator2::TOP_PERCENT: rEntry.eOp = SC_TOPPERC; break; + case sheet::FilterOperator2::BOTTOM_PERCENT: rEntry.eOp = SC_BOTPERC; break; + case sheet::FilterOperator2::CONTAINS: rEntry.eOp = SC_CONTAINS; break; + case sheet::FilterOperator2::DOES_NOT_CONTAIN: rEntry.eOp = SC_DOES_NOT_CONTAIN; break; + case sheet::FilterOperator2::BEGINS_WITH: rEntry.eOp = SC_BEGINS_WITH; break; + case sheet::FilterOperator2::DOES_NOT_BEGIN_WITH: rEntry.eOp = SC_DOES_NOT_BEGIN_WITH; break; + case sheet::FilterOperator2::ENDS_WITH: rEntry.eOp = SC_ENDS_WITH; break; + case sheet::FilterOperator2::DOES_NOT_END_WITH: rEntry.eOp = SC_DOES_NOT_END_WITH; break; + case sheet::FilterOperator2::EMPTY: + { + rEntry.eOp = SC_EQUAL; + rEntry.nVal = SC_EMPTYFIELDS; + rEntry.bQueryByString = FALSE; + *rEntry.pStr = EMPTY_STRING; + } + break; + case sheet::FilterOperator2::NOT_EMPTY: + { + rEntry.eOp = SC_EQUAL; + rEntry.nVal = SC_NONEMPTYFIELDS; + rEntry.bQueryByString = FALSE; + *rEntry.pStr = EMPTY_STRING; + } + break; + default: + DBG_ERROR("Falscher Query-enum"); + rEntry.eOp = SC_EQUAL; + } + } + + SCSIZE nParamCount = aParam.GetEntryCount(); // Param wird nicht unter 8 resized + for (i=nCount; i