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

remove uno from oox cond format import code

Change-Id: I762a502403ecb31371efc0384376d283f7f09949
üst caad0f6c
......@@ -203,6 +203,8 @@ public:
virtual ScFormatEntry* Clone(ScDocument* pDoc = NULL) const;
static ScConditionMode GetModeFromApi(sal_Int32 nOperator);
protected:
virtual void DataChanged( const ScRange* pModified ) const;
ScDocument* GetDocument() const { return mpDoc; }
......
......@@ -33,6 +33,8 @@
#include <rtl/math.hxx>
#include <unotools/collatorwrapper.hxx>
#include <com/sun/star/sheet/ConditionOperator2.hpp>
#include "conditio.hxx"
#include "cell.hxx"
#include "document.hxx"
......@@ -1202,6 +1204,49 @@ ScFormatEntry* ScConditionEntry::Clone(ScDocument* pDoc) const
return new ScConditionEntry(pDoc, *this);
}
ScConditionMode ScConditionEntry::GetModeFromApi(sal_Int32 nOperation)
{
ScConditionMode eMode = SC_COND_NONE;
switch (nOperation)
{
case com::sun::star::sheet::ConditionOperator2::EQUAL:
eMode = SC_COND_EQUAL;
break;
case com::sun::star::sheet::ConditionOperator2::LESS:
eMode = SC_COND_LESS;
break;
case com::sun::star::sheet::ConditionOperator2::GREATER:
eMode = SC_COND_GREATER;
break;
case com::sun::star::sheet::ConditionOperator2::LESS_EQUAL:
eMode = SC_COND_EQLESS;
break;
case com::sun::star::sheet::ConditionOperator2::GREATER_EQUAL:
eMode = SC_COND_EQGREATER;
break;
case com::sun::star::sheet::ConditionOperator2::NOT_EQUAL:
eMode = SC_COND_NOTEQUAL;
break;
case com::sun::star::sheet::ConditionOperator2::BETWEEN:
eMode = SC_COND_BETWEEN;
break;
case com::sun::star::sheet::ConditionOperator2::NOT_BETWEEN:
eMode = SC_COND_NOTBETWEEN;
break;
case com::sun::star::sheet::ConditionOperator2::FORMULA:
eMode = SC_COND_DIRECT;
break;
case com::sun::star::sheet::ConditionOperator2::DUPLICATE:
eMode = SC_COND_DUPLICATE;
break;
case com::sun::star::sheet::ConditionOperator2::NOT_DUPLICATE:
eMode = SC_COND_NOTDUPLICATE;
break;
default:
break;
}
return eMode;
}
//------------------------------------------------------------------------
ScCondFormatEntry::ScCondFormatEntry( ScConditionMode eOper,
......
......@@ -41,6 +41,7 @@ namespace com { namespace sun { namespace star {
class ScColorScaleFormat;
class ScDataBarFormat;
struct ScDataBarFormatData;
class ScConditionalFormat;
namespace oox {
namespace xls {
......@@ -144,7 +145,7 @@ private:
class CondFormatRule : public WorksheetHelper
{
public:
explicit CondFormatRule( const CondFormat& rCondFormat );
explicit CondFormatRule( const CondFormat& rCondFormat, ScConditionalFormat* pFormat );
/** Imports rule settings from the cfRule element. */
void importCfRule( const AttributeList& rAttribs );
......@@ -155,8 +156,7 @@ public:
void importCfRule( SequenceInputStream& rStrm );
/** Creates a conditional formatting rule in the Calc document. */
void finalizeImport(
const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetConditionalEntries >& rxEntries );
void finalizeImport();
/** Returns the priority of this rule. */
inline sal_Int32 getPriority() const { return maModel.mnPriority; }
......@@ -167,6 +167,7 @@ public:
private:
const CondFormat& mrCondFormat;
CondFormatRuleModel maModel;
ScConditionalFormat* mpFormat;
boost::scoped_ptr<ColorScaleRule> mpColor;
boost::scoped_ptr<DataBarRule> mpDataBar;
};
......@@ -217,6 +218,7 @@ private:
CondFormatModel maModel; /// Model of this conditional formatting.
CondFormatRuleMap maRules; /// Maps formatting rules by priority.
ScConditionalFormat* mpFormat;
};
typedef ::boost::shared_ptr< CondFormat > CondFormatRef;
......
......@@ -54,12 +54,15 @@
#include "themebuffer.hxx"
#include "colorscale.hxx"
#include "conditio.hxx"
#include "document.hxx"
#include "convuno.hxx"
#include "docfunc.hxx"
#include "markdata.hxx"
#include "docpool.hxx"
#include "scitems.hxx"
#include "tokenarray.hxx"
#include "tokenuno.hxx"
namespace oox {
namespace xls {
......@@ -379,9 +382,10 @@ void CondFormatRuleModel::setBiff12TextType( sal_Int32 nOperator )
// ============================================================================
CondFormatRule::CondFormatRule( const CondFormat& rCondFormat ) :
CondFormatRule::CondFormatRule( const CondFormat& rCondFormat, ScConditionalFormat* pFormat ) :
WorksheetHelper( rCondFormat ),
mrCondFormat( rCondFormat )
mrCondFormat( rCondFormat ),
mpFormat(pFormat)
{
}
......@@ -611,7 +615,7 @@ void CondFormatRule::importCfRule( SequenceInputStream& rStrm )
}
}
void CondFormatRule::finalizeImport( const Reference< XSheetConditionalEntries >& rxEntries )
void CondFormatRule::finalizeImport()
{
sal_Int32 eOperator = ::com::sun::star::sheet::ConditionOperator2::NONE;
......@@ -781,107 +785,43 @@ void CondFormatRule::finalizeImport( const Reference< XSheetConditionalEntries >
eOperator = ::com::sun::star::sheet::ConditionOperator2::FORMULA;
}
if( rxEntries.is() && (eOperator != ::com::sun::star::sheet::ConditionOperator2::NONE) && !maModel.maFormulas.empty() )
CellAddress aBaseAddr = mrCondFormat.getRanges().getBaseAddress();
ScAddress aPos;
ScUnoConversion::FillScAddress( aPos, aBaseAddr );
if( (eOperator != ::com::sun::star::sheet::ConditionOperator2::NONE) && !maModel.maFormulas.empty() )
{
::std::vector< PropertyValue > aProps;
// create condition properties
lclAppendProperty( aProps, CREATE_OUSTRING( "Operator" ), eOperator );
lclAppendProperty( aProps, CREATE_OUSTRING( "Formula1" ), maModel.maFormulas[ 0 ] );
if( maModel.maFormulas.size() >= 2 )
lclAppendProperty( aProps, CREATE_OUSTRING( "Formula2" ), maModel.maFormulas[ 1 ] );
// style name for the formatting attributes
OUString aStyleName = getStyles().createDxfStyle( maModel.mnDxfId );
if( !aStyleName.isEmpty() )
lclAppendProperty( aProps, CREATE_OUSTRING( "StyleName" ), aStyleName );
// append the new rule
try
{
rxEntries->addNew( ContainerHelper::vectorToSequence( aProps ) );
}
catch( Exception& )
ScDocument& rDoc = getScDocument();
boost::scoped_ptr<ScTokenArray> pTokenArray2;
if( maModel.maFormulas.size() >= 2)
{
pTokenArray2.reset(new ScTokenArray());
ScTokenConversion::ConvertToTokenArray( rDoc, *pTokenArray2.get(), maModel.maFormulas[ 1 ] );
}
ScTokenArray aTokenArray;
OUString aStyleName = getStyles().createDxfStyle( maModel.mnDxfId );
ScTokenConversion::ConvertToTokenArray( rDoc, aTokenArray, maModel.maFormulas[ 0 ] );
ScCondFormatEntry* pNewEntry = new ScCondFormatEntry(ScCondFormatEntry::GetModeFromApi(eOperator),
&aTokenArray, pTokenArray2.get(), &rDoc, aPos, aStyleName);
mpFormat->AddEntry(pNewEntry);
}
else if( mpColor )
{
ScDocument& rDoc = getScDocument();
ScColorScaleFormat* pFormatEntry = new ScColorScaleFormat(&rDoc);
const ApiCellRangeList& rRanges = mrCondFormat.getRanges();
ScRange aRange;
ScUnoConversion::FillScRange(aRange, *rRanges.begin());
ScConditionalFormat* pFormat = rDoc.GetCondFormat( aRange.aStart.Col(), aRange.aStart.Row(), aRange.aStart.Tab() );
if(!pFormat)
{
pFormat = new ScConditionalFormat(0, &rDoc);
pFormat->AddEntry(pFormatEntry);
rDoc.AddCondFormat(pFormat, aRange.aStart.Tab());
}
else
pFormat->AddEntry(pFormatEntry);
sal_Int32 nIndex = pFormat->GetKey();
mpFormat->AddEntry(pFormatEntry);
ScRangeList aList;
// apply attributes to cells
//
for( ApiCellRangeList::const_iterator itr = rRanges.begin(); itr != rRanges.end(); ++itr)
{
ScUnoConversion::FillScRange(aRange, *itr);
ScPatternAttr aPattern( rDoc.GetPool() );
aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_CONDITIONAL, nIndex ) );
ScMarkData aMarkData;
aMarkData.SetMarkArea(aRange);
rDoc.ApplySelectionPattern( aPattern , aMarkData);
aList.Append(aRange);
}
if(aList.size())
mpColor->AddEntries( pFormatEntry, &rDoc, aList.front()->aStart );
else
mpColor->AddEntries( pFormatEntry, &rDoc, ScAddress() );
pFormat->AddRange(aList);
mpColor->AddEntries( pFormatEntry, &rDoc, aPos );
}
else if (mpDataBar)
{
ScRangeList aList;
ScDocument& rDoc = getScDocument();
ScDataBarFormat* pFormatEntry = new ScDataBarFormat(&rDoc);
const ApiCellRangeList& rRanges = mrCondFormat.getRanges();
ScRange aRange;
ScUnoConversion::FillScRange(aRange, *rRanges.begin());
ScConditionalFormat* pFormat = rDoc.GetCondFormat( aRange.aStart.Col(), aRange.aStart.Row(), aRange.aStart.Tab() );
if(!pFormat)
{
pFormat = new ScConditionalFormat(0, &rDoc);
sal_Int32 nKey = rDoc.AddCondFormat(pFormat, aRange.aStart.Tab());
pFormat->SetKey(nKey);
}
pFormat->AddEntry(pFormatEntry);
sal_Int32 nIndex = pFormat->GetKey();
// apply attributes to cells
//
for( ApiCellRangeList::const_iterator itr = rRanges.begin(); itr != rRanges.end(); ++itr)
{
ScUnoConversion::FillScRange(aRange, *itr);
ScPatternAttr aPattern( rDoc.GetPool() );
aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_CONDITIONAL, nIndex ) );
ScMarkData aMarkData;
aMarkData.SetMarkArea(aRange);
rDoc.ApplySelectionPattern( aPattern , aMarkData);
aList.Append(aRange);
}
mpDataBar->SetData( pFormatEntry, &rDoc, aList.front()->aStart );
mpFormat->AddEntry(pFormatEntry);
mpDataBar->SetData( pFormatEntry, &rDoc, aPos );
pFormat->AddRange(aList);
}
}
......@@ -911,7 +851,8 @@ CondFormatModel::CondFormatModel() :
// ============================================================================
CondFormat::CondFormat( const WorksheetHelper& rHelper ) :
WorksheetHelper( rHelper )
WorksheetHelper( rHelper ),
mpFormat(NULL)
{
}
......@@ -919,6 +860,7 @@ void CondFormat::importConditionalFormatting( const AttributeList& rAttribs )
{
getAddressConverter().convertToCellRangeList( maModel.maRanges, rAttribs.getString( XML_sqref, OUString() ), getSheetIndex(), true );
maModel.mbPivot = rAttribs.getBool( XML_pivot, false );
mpFormat = new ScConditionalFormat(0, &getScDocument());
}
CondFormatRuleRef CondFormat::importCfRule( const AttributeList& rAttribs )
......@@ -946,23 +888,29 @@ void CondFormat::importCfRule( SequenceInputStream& rStrm )
void CondFormat::finalizeImport()
{
try
{
Reference< XSheetCellRanges > xRanges( getCellRangeList( maModel.maRanges ), UNO_SET_THROW );
PropertySet aPropSet( xRanges );
Reference< XSheetConditionalEntries > xEntries( aPropSet.getAnyProperty( PROP_ConditionalFormat ), UNO_QUERY_THROW );
// maRules is sorted by rule priority
maRules.forEachMem( &CondFormatRule::finalizeImport, ::boost::cref( xEntries ) );
aPropSet.setProperty( PROP_ConditionalFormat, xEntries );
}
catch( Exception& )
ScDocument& rDoc = getScDocument();
maRules.forEachMem( &CondFormatRule::finalizeImport );
sal_Int32 nIndex = getScDocument().AddCondFormat(mpFormat, maModel.maRanges.getBaseAddress().Sheet);
ScRangeList aList;
for( ApiCellRangeList::const_iterator itr = maModel.maRanges.begin(); itr != maModel.maRanges.end(); ++itr)
{
ScRange aRange;
ScUnoConversion::FillScRange(aRange, *itr);
ScPatternAttr aPattern( rDoc.GetPool() );
aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_CONDITIONAL, nIndex ) );
ScMarkData aMarkData;
aMarkData.SetMarkArea(aRange);
rDoc.ApplySelectionPattern( aPattern , aMarkData);
aList.Append(aRange);
}
mpFormat->AddRange(aList);
}
CondFormatRuleRef CondFormat::createRule()
{
return CondFormatRuleRef( new CondFormatRule( *this ) );
return CondFormatRuleRef( new CondFormatRule( *this, mpFormat ) );
}
void CondFormat::insertRule( CondFormatRuleRef xRule )
......
......@@ -102,29 +102,6 @@ sal_Int32 lcl_ConditionModeToOperatorNew( ScConditionMode eMode )
return eOper;
}
ScConditionMode lcl_ConditionOperatorToModeNew( sal_Int32 eOper )
{
ScConditionMode eMode = SC_COND_NONE;
switch (eOper)
{
case sheet::ConditionOperator2::EQUAL: eMode = SC_COND_EQUAL; break;
case sheet::ConditionOperator2::LESS: eMode = SC_COND_LESS; break;
case sheet::ConditionOperator2::GREATER: eMode = SC_COND_GREATER; break;
case sheet::ConditionOperator2::LESS_EQUAL: eMode = SC_COND_EQLESS; break;
case sheet::ConditionOperator2::GREATER_EQUAL: eMode = SC_COND_EQGREATER; break;
case sheet::ConditionOperator2::NOT_EQUAL: eMode = SC_COND_NOTEQUAL; break;
case sheet::ConditionOperator2::BETWEEN: eMode = SC_COND_BETWEEN; break;
case sheet::ConditionOperator2::NOT_BETWEEN: eMode = SC_COND_NOTBETWEEN; break;
case sheet::ConditionOperator2::FORMULA: eMode = SC_COND_DIRECT; break;
case sheet::ConditionOperator2::DUPLICATE: eMode = SC_COND_DUPLICATE; break;
default:
{
// added to avoid warnings
}
}
return eMode;
}
sheet::ConditionOperator lcl_ConditionModeToOperator( ScConditionMode eMode )
{
sheet::ConditionOperator eOper = sheet::ConditionOperator_NONE;
......@@ -307,7 +284,7 @@ void SAL_CALL ScTableConditionalFormat::addNew(
if ( rProp.Name == SC_UNONAME_OPERATOR )
{
sal_Int32 eOper = ScUnoHelpFunctions::GetEnumFromAny( rProp.Value );
aEntry.meMode = lcl_ConditionOperatorToModeNew( eOper );
aEntry.meMode = ScConditionEntry::GetModeFromApi( eOper );
}
else if ( rProp.Name == SC_UNONAME_FORMULA1 )
{
......@@ -586,7 +563,7 @@ void SAL_CALL ScTableConditionalEntry::setConditionOperator( sal_Int32 nOperator
throw(uno::RuntimeException)
{
SolarMutexGuard aGuard;
aData.meMode = lcl_ConditionOperatorToModeNew( nOperator );
aData.meMode = ScConditionEntry::GetModeFromApi( nOperator );
}
rtl::OUString SAL_CALL ScTableConditionalEntry::getFormula1() throw(uno::RuntimeException)
......@@ -784,7 +761,7 @@ void SAL_CALL ScTableValidationObj::setConditionOperator( sal_Int32 nOperator )
throw(uno::RuntimeException)
{
SolarMutexGuard aGuard;
nMode = sal::static_int_cast<sal_uInt16>( lcl_ConditionOperatorToModeNew( nOperator ) );
nMode = sal::static_int_cast<sal_uInt16>( ScConditionEntry::GetModeFromApi( nOperator ) );
}
rtl::OUString SAL_CALL ScTableValidationObj::getFormula1() throw(uno::RuntimeException)
......
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