1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef RPTUI_CONDITION_HXX 25*b1cdbd2cSJim Jagielski #define RPTUI_CONDITION_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "conditionalexpression.hxx" 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski #include <com/sun/star/report/XFormatCondition.hpp> 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <dbaccess/ToolBoxHelper.hxx> 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski #include <svx/fntctrl.hxx> 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski #include <svtools/valueset.hxx> 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski #include <vcl/fixed.hxx> 38*b1cdbd2cSJim Jagielski #include <vcl/lstbox.hxx> 39*b1cdbd2cSJim Jagielski #include <vcl/field.hxx> 40*b1cdbd2cSJim Jagielski #include <vcl/button.hxx> 41*b1cdbd2cSJim Jagielski #include <vcl/toolbox.hxx> 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski #include <memory> 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski namespace svx { class ToolboxButtonColorUpdater; } 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski namespace rptui 48*b1cdbd2cSJim Jagielski { 49*b1cdbd2cSJim Jagielski class ConditionalFormattingDialog; 50*b1cdbd2cSJim Jagielski class OColorPopup; 51*b1cdbd2cSJim Jagielski class OReportController; 52*b1cdbd2cSJim Jagielski class IConditionalFormatAction; 53*b1cdbd2cSJim Jagielski class Condition; 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski class ConditionField : public Edit 56*b1cdbd2cSJim Jagielski { 57*b1cdbd2cSJim Jagielski Condition* m_pParent; 58*b1cdbd2cSJim Jagielski Edit* m_pSubEdit; 59*b1cdbd2cSJim Jagielski PushButton m_aFormula; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski DECL_LINK( OnFormula, Button* ); 62*b1cdbd2cSJim Jagielski public: 63*b1cdbd2cSJim Jagielski ConditionField( Condition* pParent, const ResId& rResId ); 64*b1cdbd2cSJim Jagielski virtual ~ConditionField(); 65*b1cdbd2cSJim Jagielski virtual void Resize(); 66*b1cdbd2cSJim Jagielski }; 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski //======================================================================== 69*b1cdbd2cSJim Jagielski //= Condition 70*b1cdbd2cSJim Jagielski //======================================================================== 71*b1cdbd2cSJim Jagielski class Condition :public Control 72*b1cdbd2cSJim Jagielski ,public dbaui::OToolBoxHelper 73*b1cdbd2cSJim Jagielski { 74*b1cdbd2cSJim Jagielski ::rptui::OReportController& m_rController; 75*b1cdbd2cSJim Jagielski IConditionalFormatAction& m_rAction; 76*b1cdbd2cSJim Jagielski FixedLine m_aHeader; 77*b1cdbd2cSJim Jagielski ListBox m_aConditionType; 78*b1cdbd2cSJim Jagielski ListBox m_aOperationList; 79*b1cdbd2cSJim Jagielski ConditionField m_aCondLHS; 80*b1cdbd2cSJim Jagielski FixedText m_aOperandGlue; 81*b1cdbd2cSJim Jagielski ConditionField m_aCondRHS; 82*b1cdbd2cSJim Jagielski ToolBox m_aActions; 83*b1cdbd2cSJim Jagielski SvxFontPrevWindow m_aPreview; 84*b1cdbd2cSJim Jagielski ImageButton m_aMoveUp; 85*b1cdbd2cSJim Jagielski ImageButton m_aMoveDown; 86*b1cdbd2cSJim Jagielski PushButton m_aAddCondition; 87*b1cdbd2cSJim Jagielski PushButton m_aRemoveCondition; 88*b1cdbd2cSJim Jagielski OColorPopup* m_pColorFloat; 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski ::svx::ToolboxButtonColorUpdater* m_pBtnUpdaterFontColor; // updates the color below the toolbar icon 91*b1cdbd2cSJim Jagielski ::svx::ToolboxButtonColorUpdater* m_pBtnUpdaterBackgroundColor; 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski size_t m_nCondIndex; 95*b1cdbd2cSJim Jagielski long m_nLastKnownWindowWidth; 96*b1cdbd2cSJim Jagielski bool m_bInDestruction; 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski ConditionalExpressions m_aConditionalExpressions; 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski DECL_LINK( OnFormatAction, ToolBox* ); 101*b1cdbd2cSJim Jagielski DECL_LINK( DropdownClick, ToolBox* ); 102*b1cdbd2cSJim Jagielski DECL_LINK( OnConditionAction, Button* ); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski public: 105*b1cdbd2cSJim Jagielski Condition( Window* _pParent, IConditionalFormatAction& _rAction, ::rptui::OReportController& _rController ); 106*b1cdbd2cSJim Jagielski virtual ~Condition(); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski /** will be called when the id of the image list is needed. 109*b1cdbd2cSJim Jagielski @param _eBitmapSet 110*b1cdbd2cSJim Jagielski <svtools/imgdef.hxx> 111*b1cdbd2cSJim Jagielski @param _bHiContast 112*b1cdbd2cSJim Jagielski <TRUE/> when in high contrast mode. 113*b1cdbd2cSJim Jagielski */ 114*b1cdbd2cSJim Jagielski virtual ImageList getImageList(sal_Int16 _eBitmapSet,sal_Bool _bHiContast) const; 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski /** will be called when the controls need to be resized. 117*b1cdbd2cSJim Jagielski */ 118*b1cdbd2cSJim Jagielski virtual void resizeControls(const Size& _rDiff); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski /** sets the props at the control 121*b1cdbd2cSJim Jagielski @param _xCondition the source 122*b1cdbd2cSJim Jagielski */ 123*b1cdbd2cSJim Jagielski void setCondition(const com::sun::star::uno::Reference< com::sun::star::report::XFormatCondition >& _xCondition); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski /** fills from the control 126*b1cdbd2cSJim Jagielski _xCondition the destination 127*b1cdbd2cSJim Jagielski */ 128*b1cdbd2cSJim Jagielski void fillFormatCondition(const com::sun::star::uno::Reference< com::sun::star::report::XFormatCondition >& _xCondition); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski /** updates the toolbar 131*b1cdbd2cSJim Jagielski _xCondition the destination 132*b1cdbd2cSJim Jagielski */ 133*b1cdbd2cSJim Jagielski void updateToolbar(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportControlFormat >& _xCondition); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski /// tells the condition its new index within the dialog's condition array 136*b1cdbd2cSJim Jagielski void setConditionIndex( size_t _nCondIndex, size_t _nCondCount ); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski /// returns the condition's index within the dialog's condition array getConditionIndex() const139*b1cdbd2cSJim Jagielski size_t getConditionIndex() const { return m_nCondIndex; } 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski /** determines whether the condition is actually empty 142*b1cdbd2cSJim Jagielski */ 143*b1cdbd2cSJim Jagielski bool isEmpty() const; 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski /** forward to the parent class 146*b1cdbd2cSJim Jagielski */ 147*b1cdbd2cSJim Jagielski void ApplyCommand(sal_uInt16 _nCommandId, const ::Color& _aColor ); 148*b1cdbd2cSJim Jagielski getController() const149*b1cdbd2cSJim Jagielski inline ::rptui::OReportController& getController() const { return m_rController; } 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski protected: 152*b1cdbd2cSJim Jagielski virtual void StateChanged( StateChangedType nStateChange ); 153*b1cdbd2cSJim Jagielski virtual void DataChanged( const DataChangedEvent& rDCEvt ); 154*b1cdbd2cSJim Jagielski virtual void Paint( const Rectangle& rRect ); 155*b1cdbd2cSJim Jagielski virtual void Resize(); 156*b1cdbd2cSJim Jagielski virtual void GetFocus(); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski private: 159*b1cdbd2cSJim Jagielski void impl_layoutAll(); 160*b1cdbd2cSJim Jagielski void impl_layoutOperands(); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski /// determines the rectangle to be occupied by the toolbar, including the border drawn around it 163*b1cdbd2cSJim Jagielski Rectangle impl_getToolBarBorderRect() const; 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski inline ConditionType 166*b1cdbd2cSJim Jagielski impl_getCurrentConditionType() const; 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski inline ComparisonOperation 169*b1cdbd2cSJim Jagielski impl_getCurrentComparisonOperation() const; 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski void impl_setCondition( const ::rtl::OUString& _rConditionFormula ); 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski private: 174*b1cdbd2cSJim Jagielski DECL_LINK( OnTypeSelected, ListBox* ); 175*b1cdbd2cSJim Jagielski DECL_LINK( OnOperationSelected, ListBox* ); 176*b1cdbd2cSJim Jagielski }; 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------- impl_getCurrentConditionType() const179*b1cdbd2cSJim Jagielski inline ConditionType Condition::impl_getCurrentConditionType() const 180*b1cdbd2cSJim Jagielski { 181*b1cdbd2cSJim Jagielski return sal::static_int_cast< ConditionType >( m_aConditionType.GetSelectEntryPos() ); 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------- impl_getCurrentComparisonOperation() const185*b1cdbd2cSJim Jagielski inline ComparisonOperation Condition::impl_getCurrentComparisonOperation() const 186*b1cdbd2cSJim Jagielski { 187*b1cdbd2cSJim Jagielski return sal::static_int_cast< ComparisonOperation >( m_aOperationList.GetSelectEntryPos() ); 188*b1cdbd2cSJim Jagielski } 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski // ============================================================================= 191*b1cdbd2cSJim Jagielski } // namespace rptui 192*b1cdbd2cSJim Jagielski // ============================================================================= 193*b1cdbd2cSJim Jagielski #endif // RPTUI_CONDITION_HXX 194*b1cdbd2cSJim Jagielski 195