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
SC_COND_BELOW_AVERAGE,
SC_COND_ERROR,
SC_COND_NOERROR,
SC_COND_BEGINS_WITH,
SC_COND_ENDS_WITH,
SC_COND_CONTAINS_TEXT,
SC_COND_NOT_CONTAINS_TEXT,
SC_COND_NONE
};
......
......@@ -1000,9 +1000,18 @@ bool ScConditionEntry::IsValid( double nArg, const ScAddress& rPos ) const
if ( bIsStr1 )
{
// wenn auf String getestet wird, bei Zahlen immer sal_False, ausser bei "ungleich"
return ( eOp == SC_COND_NOTEQUAL );
switch( eOp )
{
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 )
......@@ -1088,6 +1097,47 @@ bool ScConditionEntry::IsValid( double nArg, const ScAddress& rPos ) const
if( eOp == SC_COND_NOERROR )
bValid = !bValid;
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:
OSL_FAIL("unbekannte Operation bei ScConditionEntry");
break;
......@@ -1156,6 +1206,18 @@ bool ScConditionEntry::IsValidStr( const rtl::OUString& rArg, const ScAddress& r
if(eOp == SC_COND_NOERROR)
bValid = !bValid;
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:
{
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