| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef OOX_XLS_CONDFORMATBUFFER_HXX |
| #define OOX_XLS_CONDFORMATBUFFER_HXX |
| |
| #include <com/sun/star/sheet/ConditionOperator.hpp> |
| #include "oox/xls/formulaparser.hxx" |
| #include "oox/xls/worksheethelper.hxx" |
| |
| namespace com { namespace sun { namespace star { |
| namespace sheet { class XSheetConditionalEntries; } |
| } } } |
| |
| namespace oox { |
| namespace xls { |
| |
| // ============================================================================ |
| |
| /** Model for a single rule in a conditional formatting. */ |
| struct CondFormatRuleModel |
| { |
| typedef ::std::vector< ApiTokenSequence > ApiTokenSequenceVector; |
| |
| ApiTokenSequenceVector maFormulas; /// Formulas for rule conditions. |
| ::rtl::OUString maText; /// Text for 'contains' rules. |
| sal_Int32 mnPriority; /// Priority of this rule. |
| sal_Int32 mnType; /// Type of the rule. |
| sal_Int32 mnOperator; /// In cell-is rules: Comparison operator. |
| sal_Int32 mnTimePeriod; /// In time-period rules: Type of time period. |
| sal_Int32 mnRank; /// In top-10 rules: True = bottom, false = top. |
| sal_Int32 mnStdDev; /// In average rules: Number of std deviations. |
| sal_Int32 mnDxfId; /// Differential formatting identifier. |
| bool mbStopIfTrue; /// True = stop evaluating rules, if this rule is true. |
| bool mbBottom; /// In top-10 rules: True = bottom, false = top. |
| bool mbPercent; /// In top-10 rules: True = percent, false = rank. |
| bool mbAboveAverage; /// In average rules: True = above average, false = below. |
| bool mbEqualAverage; /// In average rules: True = include average, false = exclude. |
| |
| explicit CondFormatRuleModel(); |
| |
| /** Sets the passed BIFF operator for condition type cellIs. */ |
| void setBiffOperator( sal_Int32 nOperator ); |
| |
| /** Sets the passed BIFF12 text comparison type and operator. */ |
| void setBiff12TextType( sal_Int32 nOperator ); |
| }; |
| |
| // ============================================================================ |
| |
| class CondFormat; |
| |
| /** Represents a single rule in a conditional formatting. */ |
| class CondFormatRule : public WorksheetHelper |
| { |
| public: |
| explicit CondFormatRule( const CondFormat& rCondFormat ); |
| |
| /** Imports rule settings from the cfRule element. */ |
| void importCfRule( const AttributeList& rAttribs ); |
| /** Appends a new condition formula string. */ |
| void appendFormula( const ::rtl::OUString& rFormula ); |
| |
| /** Imports rule settings from a CFRULE record. */ |
| void importCfRule( SequenceInputStream& rStrm ); |
| |
| /** Imports rule settings from a CFRULE record. */ |
| void importCfRule( BiffInputStream& rStrm, sal_Int32 nPriority ); |
| |
| /** Creates a conditional formatting rule in the Calc document. */ |
| void finalizeImport( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetConditionalEntries >& rxEntries ); |
| |
| /** Returns the priority of this rule. */ |
| inline sal_Int32 getPriority() const { return maModel.mnPriority; } |
| |
| private: |
| const CondFormat& mrCondFormat; |
| CondFormatRuleModel maModel; |
| }; |
| |
| typedef ::boost::shared_ptr< CondFormatRule > CondFormatRuleRef; |
| |
| // ============================================================================ |
| |
| /** Model for a conditional formatting object. */ |
| struct CondFormatModel |
| { |
| ApiCellRangeList maRanges; /// Cell ranges for this conditional format. |
| bool mbPivot; /// Conditional formatting belongs to pivot table. |
| |
| explicit CondFormatModel(); |
| }; |
| |
| // ============================================================================ |
| |
| /** Represents a conditional formatting object with a list of affected cell ranges. */ |
| class CondFormat : public WorksheetHelper |
| { |
| public: |
| explicit CondFormat( const WorksheetHelper& rHelper ); |
| |
| /** Imports settings from the conditionalFormatting element. */ |
| void importConditionalFormatting( const AttributeList& rAttribs ); |
| /** Imports a conditional formatting rule from the cfRule element. */ |
| CondFormatRuleRef importCfRule( const AttributeList& rAttribs ); |
| |
| /** Imports settings from the CONDFORMATTING record. */ |
| void importCondFormatting( SequenceInputStream& rStrm ); |
| /** Imports a conditional formatting rule from the CFRULE record. */ |
| void importCfRule( SequenceInputStream& rStrm ); |
| |
| /** Imports settings from the CFHEADER record. */ |
| void importCfHeader( BiffInputStream& rStrm ); |
| |
| /** Creates the conditional formatting in the Calc document. */ |
| void finalizeImport(); |
| |
| /** Returns the cell ranges this conditional formatting belongs to. */ |
| inline const ApiCellRangeList& getRanges() const { return maModel.maRanges; } |
| |
| private: |
| CondFormatRuleRef createRule(); |
| void insertRule( CondFormatRuleRef xRule ); |
| |
| private: |
| typedef RefMap< sal_Int32, CondFormatRule > CondFormatRuleMap; |
| |
| CondFormatModel maModel; /// Model of this conditional formatting. |
| CondFormatRuleMap maRules; /// Maps formatting rules by priority. |
| }; |
| |
| typedef ::boost::shared_ptr< CondFormat > CondFormatRef; |
| |
| // ============================================================================ |
| |
| class CondFormatBuffer : public WorksheetHelper |
| { |
| public: |
| explicit CondFormatBuffer( const WorksheetHelper& rHelper ); |
| |
| /** Imports settings from the conditionalFormatting element. */ |
| CondFormatRef importConditionalFormatting( const AttributeList& rAttribs ); |
| /** Imports settings from the CONDFORMATTING record. */ |
| CondFormatRef importCondFormatting( SequenceInputStream& rStrm ); |
| /** Imports settings from the CFHEADER record. */ |
| void importCfHeader( BiffInputStream& rStrm ); |
| |
| /** Creates all conditional formattings in the Calc document. */ |
| void finalizeImport(); |
| |
| /** Converts an OOXML condition operator token to the API constant. */ |
| static ::com::sun::star::sheet::ConditionOperator |
| convertToApiOperator( sal_Int32 nToken ); |
| |
| private: |
| CondFormatRef createCondFormat(); |
| |
| private: |
| typedef RefVector< CondFormat > CondFormatVec; |
| CondFormatVec maCondFormats; /// All conditional formattings in a sheet. |
| }; |
| |
| // ============================================================================ |
| |
| } // namespace xls |
| } // namespace oox |
| |
| #endif |