1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 #ifndef SVX_PROPERTYPANEL_POSIZEPAGE_HXX 23 #define SVX_PROPERTYPANEL_POSIZEPAGE_HXX 24 25 #include <vcl/ctrl.hxx> 26 #include <sfx2/sidebar/SidebarPanelBase.hxx> 27 #include <sfx2/sidebar/ControllerItem.hxx> 28 #include <sfx2/sidebar/IContextChangeReceiver.hxx> 29 #include <sfx2/sidebar/GridLayouter.hxx> 30 #include <boost/scoped_ptr.hpp> 31 #include <svx/rectenum.hxx> 32 #include <svl/poolitem.hxx> 33 #include <tools/fldunit.hxx> 34 #include <com/sun/star/ui/XSidebar.hpp> 35 36 class DialControl; 37 class SdrView; 38 class FixedText; 39 class MetricField; 40 class CheckBox; 41 class MetricBox; 42 43 44 namespace svx { namespace sidebar { 45 46 class SidebarDialControl; 47 48 class PosSizePropertyPanel 49 : public Control, 50 public ::sfx2::sidebar::IContextChangeReceiver, 51 public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface 52 { 53 public: 54 static PosSizePropertyPanel* Create( 55 Window* pParent, 56 const cssu::Reference<css::frame::XFrame>& rxFrame, 57 SfxBindings* pBindings, 58 const cssu::Reference<css::ui::XSidebar>& rxSidebar); 59 60 virtual void DataChanged( 61 const DataChangedEvent& rEvent); 62 63 virtual void HandleContextChange( 64 const ::sfx2::sidebar::EnumContext aContext); 65 66 virtual void NotifyItemUpdate( 67 const sal_uInt16 nSId, 68 const SfxItemState eState, 69 const SfxPoolItem* pState, 70 const bool bIsEnabled); 71 72 SfxBindings* GetBindings(); 73 void ShowMenu (void); 74 75 virtual void Resize (void); 76 77 private: 78 //Position 79 ::boost::scoped_ptr< FixedText > mpFtPosX; 80 ::boost::scoped_ptr< MetricField > mpMtrPosX; 81 ::boost::scoped_ptr< FixedText > mpFtPosY; 82 ::boost::scoped_ptr< MetricField > mpMtrPosY; 83 84 // size 85 ::boost::scoped_ptr< FixedText > mpFtWidth; 86 ::boost::scoped_ptr< MetricField > mpMtrWidth; 87 ::boost::scoped_ptr< FixedText > mpFtHeight; 88 ::boost::scoped_ptr< MetricField > mpMtrHeight; 89 ::boost::scoped_ptr< CheckBox > mpCbxScale; 90 91 //rotation 92 ::boost::scoped_ptr< FixedText > mpFtAngle; 93 ::boost::scoped_ptr< MetricBox > mpMtrAngle; 94 95 //rotation control 96 ::boost::scoped_ptr<SidebarDialControl> mpDial; 97 98 //flip 99 ::boost::scoped_ptr< FixedText > mpFtFlip; 100 ::boost::scoped_ptr< Window > mpFlipTbxBackground; 101 ::boost::scoped_ptr< ToolBox > mpFlipTbx; 102 103 // Internal variables 104 Rectangle maRect; 105 const SdrView* mpView; 106 sal_uInt32 mlOldWidth; 107 sal_uInt32 mlOldHeight; 108 RECT_POINT meRP; 109 Point maAnchorPos; //anchor position 110 long mlRotX; 111 long mlRotY; 112 Fraction maUIScale; 113 SfxMapUnit mePoolUnit; 114 FieldUnit meDlgUnit; 115 116 // Controller Items 117 ::sfx2::sidebar::ControllerItem maTransfPosXControl; 118 ::sfx2::sidebar::ControllerItem maTransfPosYControl; 119 ::sfx2::sidebar::ControllerItem maTransfWidthControl; 120 ::sfx2::sidebar::ControllerItem maTransfHeightControl; 121 122 ::sfx2::sidebar::ControllerItem maSvxAngleControl; 123 ::sfx2::sidebar::ControllerItem maRotXControl; 124 ::sfx2::sidebar::ControllerItem maRotYControl; 125 ::sfx2::sidebar::ControllerItem maProPosControl; 126 ::sfx2::sidebar::ControllerItem maProSizeControl; 127 ::sfx2::sidebar::ControllerItem maAutoWidthControl; 128 ::sfx2::sidebar::ControllerItem maAutoHeightControl; 129 ::sfx2::sidebar::ControllerItem m_aMetricCtl; 130 131 cssu::Reference< css::frame::XFrame > mxFrame; 132 ::sfx2::sidebar::EnumContext maContext; 133 SfxBindings* mpBindings; 134 135 // to remember original positions for restoring these for different layouts 136 Point maFtWidthOrigPos; 137 Point maMtrWidthOrigPos; 138 Point maFtHeightOrigPos; 139 Point maMtrHeightOrigPos; 140 Point maCbxScaleOrigPos; 141 Point maFtAngleOrigPos; 142 Point maMtrAnglOrigPos; 143 Point maFlipTbxOrigPos; 144 Point maDialOrigPos; 145 Point maFtFlipOrigPos; 146 147 /// bitfield 148 bool mbMtrPosXMirror : 1; 149 bool mbSizeProtected : 1; 150 bool mbPositionProtected : 1; 151 bool mbAutoWidth : 1; 152 bool mbAutoHeight : 1; 153 bool mbAdjustEnabled : 1; 154 bool mbIsFlip : 1; 155 156 cssu::Reference<css::ui::XSidebar> mxSidebar; 157 ::sfx2::sidebar::GridLayouter maLayouter; 158 159 DECL_LINK( ChangePosXHdl, void * ); 160 DECL_LINK( ChangePosYHdl, void * ); 161 DECL_LINK( ChangeWidthHdl, void * ); 162 DECL_LINK( ChangeHeightHdl, void * ); 163 DECL_LINK( ClickAutoHdl, void * ); 164 DECL_LINK( AngleModifiedHdl, void * ); 165 DECL_LINK( RotationHdl, void * ); 166 DECL_LINK( FlipHdl, ToolBox * ); 167 168 void SetupIcons(void); 169 void Initialize(); 170 void executePosX(); 171 void executePosY(); 172 void executeSize(); 173 174 // constructor/destuctor 175 PosSizePropertyPanel( 176 Window* pParent, 177 const cssu::Reference<css::frame::XFrame>& rxFrame, 178 SfxBindings* pBindings, 179 const cssu::Reference<css::ui::XSidebar>& rxSidebar); 180 virtual ~PosSizePropertyPanel(); 181 182 void MetricState( SfxItemState eState, const SfxPoolItem* pState ); 183 FieldUnit GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState ); 184 void DisableControls(); 185 void AdaptWidthHeightScalePosition(bool bOriginal); 186 void AdaptAngleFlipDialPosition(bool bOriginal); 187 }; 188 189 190 } } // end of namespace svx::sidebar 191 192 193 194 #endif // SVX_PROPERTYPANEL_POSIZEPAGE_HXX 195 196 // eof 197