195 lines
7.4 KiB
C++
195 lines
7.4 KiB
C++
/*************************************************************************
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: CondFormat.hxx,v $
|
|
*
|
|
* $Revision: 1.2 $
|
|
*
|
|
* last change: $Author: rt $ $Date: 2007-07-09 11:56:30 $
|
|
*
|
|
* The Contents of this file are made available subject to
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
|
*
|
|
*
|
|
* GNU Lesser General Public License Version 2.1
|
|
* =============================================
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*
|
|
************************************************************************/
|
|
|
|
#ifndef RPTUI_CONDFORMAT_HXX
|
|
#define RPTUI_CONDFORMAT_HXX
|
|
|
|
#include "ModuleHelper.hxx"
|
|
|
|
#include <com/sun/star/report/XReportControlModel.hpp>
|
|
|
|
#include <vcl/dialog.hxx>
|
|
#include <vcl/button.hxx>
|
|
#include <vcl/fixed.hxx>
|
|
#include <vcl/scrbar.hxx>
|
|
|
|
#include <boost/shared_ptr.hpp>
|
|
#include <boost/noncopyable.hpp>
|
|
|
|
#include <vector>
|
|
|
|
// .............................................................................
|
|
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, USHORT _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, USHORT _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
|