1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_SD_SOURCE_UI_INC_FUPOOR_HXX
21 #define INCLUDED_SD_SOURCE_UI_INC_FUPOOR_HXX
23 #include <tools/rtti.hxx>
24 #include <vcl/timer.hxx>
25 #include <tools/link.hxx>
26 #include <tools/gen.hxx>
27 #include <vcl/event.hxx>
28 #include <rtl/ref.hxx>
30 #include "helper/simplereferencecomponent.hxx"
45 * Base class for all functions
47 class FuPoor
: public SimpleReferenceComponent
50 static const int HITPIX
= 2; // Hit-Toleranz in Pixel
51 static const int HITLOG
= 53; // Hit tolerance in mm100
52 static const int DRGPIX
= 2; // Drag MinMove in Pixel
53 static const int DRGLOG
= 53; // Minimal drag move in mm100
57 virtual void DoExecute( SfxRequest
& rReq
);
59 void SetMouseButtonCode(sal_uInt16 nNew
) { if(nNew
!= mnCode
) mnCode
= nNew
; }
60 sal_uInt16
GetMouseButtonCode() const { return mnCode
; }
62 DrawDocShell
* GetDocSh() { return mpDocSh
; }
63 SdDrawDocument
* GetDoc() { return mpDoc
; }
66 virtual void DoCopy();
67 virtual void DoPaste();
68 virtual void DoPasteUnformatted();
70 // Mouse- & Key-Events; Returnwert=sal_True: Event wurde bearbeitet
71 virtual bool KeyInput(const KeyEvent
& rKEvt
);
72 virtual bool MouseMove(const MouseEvent
& );
73 virtual bool MouseButtonUp(const MouseEvent
& rMEvt
);
75 // moved from inline to *.cxx
76 virtual bool MouseButtonDown(const MouseEvent
& rMEvt
);
78 virtual bool Command(const CommandEvent
& rCEvt
);
79 virtual bool RequestHelp(const HelpEvent
& rHEvt
);
80 virtual void ReceiveRequest(SfxRequest
& rReq
);
82 virtual void Activate(); ///< activates the function
83 virtual void Deactivate(); ///< deactivates the function
85 void SetWindow(::sd::Window
* pWin
);
87 virtual void SelectionHasChanged();
89 sal_uInt16
GetSlotID() const { return nSlotId
; }
90 sal_uInt16
GetSlotValue() const { return nSlotValue
; }
92 void SetNoScrollUntilInside(bool bNoScroll
= true)
93 { bNoScrollUntilInside
= bNoScroll
; }
95 void StartDelayToScrollTimer ();
97 virtual SdrObject
* CreateDefaultObject(const sal_uInt16 nID
, const Rectangle
& rRectangle
);
99 /** is called when the current function should be aborted. <p>
100 This is used when a function gets a KEY_ESCAPE but can also
103 @returns true if a active function was aborted
105 virtual bool cancel();
108 /** Decide if the object to be created should be created
109 orthogonal. Default implementation uses nSlotID
110 to decide. May be overridden to use other criteria
113 @returns true if the to be created object should be orthogonal.
115 virtual bool doConstructOrthogonal() const;
122 FuPoor (ViewShell
* pViewSh
,
125 SdDrawDocument
* pDoc
,
129 DECL_LINK_TYPED( DelayHdl
, Timer
*, void );
131 static void ImpForceQuadratic(Rectangle
& rRect
);
133 /** Switch to another layer. The layer to switch to is specified by an
134 offset relative to the active layer. With respect to the layer bar
135 control at the lower left of the document window positive values
136 move to the right and negative values move to the left.
138 <p>Switching the layer is independent of the view's layer mode. The
139 layers are switched even when the layer mode is turned off and the
140 layer control is not visible.</p>
142 If the offset is positive skip that many layers in selecting the
143 next layer. If it is negative then select a previous one. An
144 offset or zero does not change the current layer. If the
145 resulting index lies outside the valid range of indices then it
146 is set to either the minimal or maximal valid index, whitchever
149 void SwitchLayer (sal_Int32 nOffset
);
152 ViewShell
* mpViewShell
;
153 VclPtr
< ::sd::Window
> mpWindow
;
154 DrawDocShell
* mpDocSh
;
155 SdDrawDocument
* mpDoc
;
158 sal_uInt16 nSlotValue
;
160 VclPtr
<Dialog
> pDialog
;
162 Timer aScrollTimer
; ///< for auto-scrolling
163 DECL_LINK_TYPED( ScrollHdl
, Timer
*, void );
164 void ForceScroll(const Point
& aPixPos
);
166 Timer aDragTimer
; ///< for Drag&Drop
167 DECL_LINK_TYPED(DragHdl
, Timer
*, void);
169 Point aMDPos
; ///< position of MouseButtonDown
171 /// Flag to prevent auto-scrolling until one drags from outside into the window
172 bool bNoScrollUntilInside
;
174 /// timer to delay scrolling (~ 1 sec) when dragging out of the window
175 Timer aDelayToScrollTimer
;
178 bool bFirstMouseMove
;
180 /// member to hold state of the mouse buttons for creation of own MouseEvents (like in ScrollHdl)
187 } // end of namespace sd
189 #endif // _SD_FUPOOR_HXX
191 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */