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 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sd.hxx" 26 27 #include "Ruler.hxx" 28 #include <svl/ptitem.hxx> 29 #include <svx/ruler.hxx> 30 #ifndef _SVXIDS_HXX //autogen 31 #include <svx/svxids.hrc> 32 #endif 33 #include <sfx2/ctrlitem.hxx> 34 #include <sfx2/bindings.hxx> 35 36 37 #include "View.hxx" 38 #include "DrawViewShell.hxx" 39 #include "Window.hxx" 40 41 #include "helpids.h" 42 43 namespace sd { 44 45 /************************************************************************* 46 |* 47 |* Controller-Item fuer Ruler 48 |* 49 \************************************************************************/ 50 51 class RulerCtrlItem : public SfxControllerItem 52 { 53 Ruler &rRuler; 54 55 protected: 56 virtual void StateChanged( sal_uInt16 nSId, SfxItemState eState, 57 const SfxPoolItem* pItem ); 58 59 public: 60 RulerCtrlItem(sal_uInt16 nId, Ruler& rRlr, SfxBindings& rBind); 61 }; 62 63 /************************************************************************* 64 |* 65 \************************************************************************/ 66 67 RulerCtrlItem::RulerCtrlItem(sal_uInt16 _nId, Ruler& rRlr, SfxBindings& rBind) 68 : SfxControllerItem(_nId, rBind) 69 , rRuler(rRlr) 70 { 71 } 72 73 74 /************************************************************************* 75 |* 76 \************************************************************************/ 77 78 void RulerCtrlItem::StateChanged( sal_uInt16 nSId, SfxItemState, const SfxPoolItem* pState ) 79 { 80 switch( nSId ) 81 { 82 case SID_RULER_NULL_OFFSET: 83 { 84 const SfxPointItem* pItem = dynamic_cast< const SfxPointItem* >(pState); 85 DBG_ASSERT(pState ? pItem != NULL : sal_True, "SfxPointItem erwartet"); 86 if ( pItem ) 87 rRuler.SetNullOffset(pItem->GetValue()); 88 } 89 break; 90 } 91 } 92 93 94 /************************************************************************* 95 |* 96 |* Konstruktor 97 |* 98 \************************************************************************/ 99 100 Ruler::Ruler( DrawViewShell& rViewSh, ::Window* pParent, ::sd::Window* pWin, sal_uInt16 nRulerFlags, SfxBindings& rBindings, WinBits nWinStyle) 101 : SvxRuler(pParent, pWin, nRulerFlags, rBindings, nWinStyle) 102 , pSdWin(pWin) 103 , pDrViewShell(&rViewSh) 104 { 105 rBindings.EnterRegistrations(); 106 pCtrlItem = new RulerCtrlItem(SID_RULER_NULL_OFFSET, *this, rBindings); 107 rBindings.LeaveRegistrations(); 108 109 if ( nWinStyle & WB_HSCROLL ) 110 { 111 bHorz = sal_True; 112 SetHelpId( HID_SD_RULER_HORIZONTAL ); 113 } 114 else 115 { 116 bHorz = sal_False; 117 SetHelpId( HID_SD_RULER_VERTICAL ); 118 } 119 } 120 121 /************************************************************************* 122 |* 123 |* Destruktor 124 |* 125 \************************************************************************/ 126 127 Ruler::~Ruler() 128 { 129 SfxBindings& rBindings = pCtrlItem->GetBindings(); 130 rBindings.EnterRegistrations(); 131 delete pCtrlItem; 132 rBindings.LeaveRegistrations(); 133 } 134 135 /************************************************************************* 136 |* 137 |* MouseButtonDown-Handler 138 |* 139 \************************************************************************/ 140 141 void Ruler::MouseButtonDown(const MouseEvent& rMEvt) 142 { 143 Point aMPos = rMEvt.GetPosPixel(); 144 RulerType eType = GetType(aMPos); 145 146 if ( !pDrViewShell->GetView()->IsTextEdit() && 147 rMEvt.IsLeft() && rMEvt.GetClicks() == 1 && 148 (eType == RULER_TYPE_DONTKNOW || eType == RULER_TYPE_OUTSIDE) ) 149 { 150 pDrViewShell->StartRulerDrag(*this, rMEvt); 151 } 152 else 153 SvxRuler::MouseButtonDown(rMEvt); 154 } 155 156 /************************************************************************* 157 |* 158 |* MouseMove-Handler 159 |* 160 \************************************************************************/ 161 162 void Ruler::MouseMove(const MouseEvent& rMEvt) 163 { 164 SvxRuler::MouseMove(rMEvt); 165 } 166 167 /************************************************************************* 168 |* 169 |* MouseButtonUp-Handler 170 |* 171 \************************************************************************/ 172 173 void Ruler::MouseButtonUp(const MouseEvent& rMEvt) 174 { 175 SvxRuler::MouseButtonUp(rMEvt); 176 } 177 178 /************************************************************************* 179 |* 180 |* NullOffset setzen 181 |* 182 \************************************************************************/ 183 184 void Ruler::SetNullOffset(const Point& rOffset) 185 { 186 long nOffset; 187 188 if ( bHorz ) nOffset = rOffset.X(); 189 else nOffset = rOffset.Y(); 190 191 SetNullOffsetLogic(nOffset); 192 } 193 194 /************************************************************************* 195 |* 196 |* Command event 197 |* 198 \************************************************************************/ 199 200 void Ruler::Command(const CommandEvent& rCEvt) 201 { 202 if( rCEvt.GetCommand() == COMMAND_CONTEXTMENU && 203 !pDrViewShell->GetView()->IsTextEdit() ) 204 { 205 SvxRuler::Command( rCEvt ); 206 } 207 } 208 209 /************************************************************************* 210 |* 211 |* ExtraDown 212 |* 213 \************************************************************************/ 214 215 void Ruler::ExtraDown() 216 { 217 if( !pDrViewShell->GetView()->IsTextEdit() ) 218 SvxRuler::ExtraDown(); 219 } 220 221 } // end of namespace sd 222 223