Kaydet (Commit) bca1f6b9 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

implement text conditional formats

Change-Id: I29e837c3495264b04c25a8d6977e3f8dd1efd73b
üst 13deb4cd
...@@ -78,6 +78,10 @@ enum ScConditionMode ...@@ -78,6 +78,10 @@ enum ScConditionMode
SC_COND_BELOW_AVERAGE, SC_COND_BELOW_AVERAGE,
SC_COND_ERROR, SC_COND_ERROR,
SC_COND_NOERROR, SC_COND_NOERROR,
SC_COND_BEGINS_WITH,
SC_COND_ENDS_WITH,
SC_COND_CONTAINS_TEXT,
SC_COND_NOT_CONTAINS_TEXT,
SC_COND_NONE SC_COND_NONE
}; };
......
...@@ -1000,9 +1000,18 @@ bool ScConditionEntry::IsValid( double nArg, const ScAddress& rPos ) const ...@@ -1000,9 +1000,18 @@ bool ScConditionEntry::IsValid( double nArg, const ScAddress& rPos ) const
if ( bIsStr1 ) if ( bIsStr1 )
{ {
// wenn auf String getestet wird, bei Zahlen immer sal_False, ausser bei "ungleich" switch( eOp )
{
return ( eOp == SC_COND_NOTEQUAL ); case SC_COND_BEGINS_WITH:
case SC_COND_ENDS_WITH:
case SC_COND_CONTAINS_TEXT:
case SC_COND_NOT_CONTAINS_TEXT:
break;
case SC_COND_NOTEQUAL:
return true;
default:
return false;
}
} }
if ( eOp == SC_COND_BETWEEN || eOp == SC_COND_NOTBETWEEN ) if ( eOp == SC_COND_BETWEEN || eOp == SC_COND_NOTBETWEEN )
...@@ -1088,6 +1097,47 @@ bool ScConditionEntry::IsValid( double nArg, const ScAddress& rPos ) const ...@@ -1088,6 +1097,47 @@ bool ScConditionEntry::IsValid( double nArg, const ScAddress& rPos ) const
if( eOp == SC_COND_NOERROR ) if( eOp == SC_COND_NOERROR )
bValid = !bValid; bValid = !bValid;
break; break;
case SC_COND_BEGINS_WITH:
if(!aStrVal1.Len())
{
rtl::OUString aStr = rtl::OUString::valueOf(nVal1);
rtl::OUString aStr2 = rtl::OUString::valueOf(nArg);
bValid = aStr2.indexOf(aStr) == 0;
}
else
{
rtl::OUString aStr2 = rtl::OUString::valueOf(nArg);
bValid = aStr2.indexOf(aStrVal1) == 0;
}
case SC_COND_ENDS_WITH:
if(!aStrVal1.Len())
{
rtl::OUString aStr = rtl::OUString::valueOf(nVal1);
rtl::OUString aStr2 = rtl::OUString::valueOf(nArg);
bValid = aStr2.endsWith(aStr) == 0;
}
else
{
rtl::OUString aStr2 = rtl::OUString::valueOf(nArg);
bValid = aStr2.endsWith(aStrVal1) == 0;
}
case SC_COND_CONTAINS_TEXT:
case SC_COND_NOT_CONTAINS_TEXT:
if(!aStrVal1.Len())
{
rtl::OUString aStr = rtl::OUString::valueOf(nVal1);
rtl::OUString aStr2 = rtl::OUString::valueOf(nArg);
bValid = aStr2.indexOf(aStr) != -1;
}
else
{
rtl::OUString aStr2 = rtl::OUString::valueOf(nArg);
bValid = aStr2.indexOf(aStrVal1) != -1;
}
if( eOp == SC_COND_NOT_CONTAINS_TEXT )
bValid = !bValid;
break;
default: default:
OSL_FAIL("unbekannte Operation bei ScConditionEntry"); OSL_FAIL("unbekannte Operation bei ScConditionEntry");
break; break;
...@@ -1156,6 +1206,18 @@ bool ScConditionEntry::IsValidStr( const rtl::OUString& rArg, const ScAddress& r ...@@ -1156,6 +1206,18 @@ bool ScConditionEntry::IsValidStr( const rtl::OUString& rArg, const ScAddress& r
if(eOp == SC_COND_NOERROR) if(eOp == SC_COND_NOERROR)
bValid = !bValid; bValid = !bValid;
break; break;
case SC_COND_BEGINS_WITH:
bValid = rArg.indexOf(aUpVal1) == 0;
break;
case SC_COND_ENDS_WITH:
bValid = rArg.endsWith(aUpVal1);
break;
case SC_COND_CONTAINS_TEXT:
case SC_COND_NOT_CONTAINS_TEXT:
bValid = rArg.indexOf(aUpVal1) != -1;
if(eOp == SC_COND_NOT_CONTAINS_TEXT)
bValid = !bValid;
break;
default: default:
{ {
sal_Int32 nCompare = ScGlobal::GetCollator()->compareString( sal_Int32 nCompare = ScGlobal::GetCollator()->compareString(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment