/************************************************************** * * 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 RPTUI_CONDFORMAT_HXX #define RPTUI_CONDFORMAT_HXX #include "ModuleHelper.hxx" #include #include #include #include #include #include #include #include // ............................................................................. namespace rptui { // ............................................................................. #define MAX_CONDITIONS (size_t)3 class OReportController; class Condition; //========================================================================= //= IConditionalFormatAction //========================================================================= class SAL_NO_VTABLE IConditionalFormatAction { public: virtual void addCondition( size_t _nAddAfterIndex ) = 0; virtual void deleteCondition( size_t _nCondIndex ) = 0; virtual void applyCommand( size_t _nCondIndex, sal_uInt16 _nCommandId, const ::Color _aColor ) = 0; virtual void moveConditionUp( size_t _nCondIndex ) = 0; virtual void moveConditionDown( size_t _nCondIndex ) = 0; virtual ::rtl::OUString getDataField() const = 0; }; /************************************************************************* |* |* Conditional formatting dialog |* \************************************************************************/ class ConditionalFormattingDialog :public ModalDialog ,public IConditionalFormatAction ,private ::boost::noncopyable { typedef ::boost::shared_ptr< Condition > ConditionPtr; typedef ::std::vector< ConditionPtr > Conditions; OModuleClient m_aModuleClient; Window m_aConditionPlayground; Conditions m_aConditions; FixedLine m_aSeparator; OKButton m_aPB_OK; CancelButton m_aPB_CANCEL; HelpButton m_aPB_Help; ScrollBar m_aCondScroll; ::rptui::OReportController& m_rController; ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportControlModel > m_xFormatConditions; ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportControlModel > m_xCopy; bool m_bDeletingCondition; public: ConditionalFormattingDialog( Window* pParent, const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportControlModel>& _xHoldAlive, ::rptui::OReportController& _rController ); virtual ~ConditionalFormattingDialog(); // Dialog overridables virtual short Execute(); // IConditionalFormatAction overridables virtual void addCondition( size_t _nAddAfterIndex ); virtual void deleteCondition( size_t _nCondIndex ); virtual void applyCommand( size_t _nCondIndex, sal_uInt16 _nCommandId, const ::Color _aColor ); virtual void moveConditionUp( size_t _nCondIndex ); virtual void moveConditionDown( size_t _nCondIndex ); virtual ::rtl::OUString getDataField() const; protected: virtual long PreNotify( NotifyEvent& rNEvt ); private: DECL_LINK( OnScroll, ScrollBar* ); private: /// returns the current number of conditions size_t impl_getConditionCount() const { return m_aConditions.size(); } /** adds a condition @param _nNewCondIndex the index of the to-be-inserted condition */ void impl_addCondition_nothrow( size_t _nNewCondIndex ); /// deletes the condition with the given index void impl_deleteCondition_nothrow( size_t _nCondIndex ); /// moves the condition with the given index one position void impl_moveCondition_nothrow( size_t _nCondIndex, bool _bMoveUp ); /// does the dialog layouting void impl_layoutAll(); /// does the layout for the condition windows void impl_layoutConditions( Point& _out_rBelowLastVisible ); /// called when the number of conditions has changed in any way void impl_conditionCountChanged(); /// initializes the conditions from m_xCopy void impl_initializeConditions(); /// tells all our Condition instances their new index void impl_updateConditionIndicies(); /// returns the number of the condition which has the (child path) focus size_t impl_getFocusedConditionIndex( sal_Int32 _nFallBackIfNone ) const; /// returns the index of the first visible condition size_t impl_getFirstVisibleConditionIndex() const; /// returns the index of the last visible condition size_t impl_getLastVisibleConditionIndex() const; /// determines the width of a Condition long impl_getConditionWidth() const; /// focuses the condition with the given index, making it visible if necessary void impl_focusCondition( size_t _nCondIndex ); /// updates the scrollbar range. (does not update the scrollbar visibility) void impl_updateScrollBarRange(); /// determines whether we need a scrollbar for the conditions bool impl_needScrollBar() const { return m_aConditions.size() > MAX_CONDITIONS; } /// scrolls the condition with the given index to the top position void impl_scrollTo( size_t _nTopCondIndex ); /// ensures the condition with the given index is visible void impl_ensureConditionVisible( size_t _nCondIndex ); }; // ............................................................................. } // namespace rptui // ............................................................................. #endif // RPTUI_CONDFORMAT_HXX