KiCad PCB EDA Suite
view_controls.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
5  * Copyright (C) 2013 CERN
6  * Copyright (C) 2013-2016 KiCad Developers, see AUTHORS.txt for contributors.
7  *
8  * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, you may find one here:
22  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
23  * or you may search the http://www.gnu.org website for the version 2 license,
24  * or you may write to the Free Software Foundation, Inc.,
25  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26  *
27  */
28 
34 #ifndef __VIEW_CONTROLS_H
35 #define __VIEW_CONTROLS_H
36 
37 #include <math/box2.h>
38 
39 namespace KIGFX
40 {
41 class VIEW;
42 
45 {
47  {
48  Reset();
49  }
50 
52  void Reset();
53 
56 
59 
62 
65 
68 
71 
74 
77 
80 
83 
86 
89 
92 
95 };
96 
97 
104 {
105 public:
106  VIEW_CONTROLS( VIEW* aView ) : m_view( aView )
107  {
108  }
109 
110  virtual ~VIEW_CONTROLS()
111  {
112  }
113 
120  virtual void SetSnapping( bool aEnabled )
121  {
122  m_settings.m_snappingEnabled = aEnabled;
123  }
124 
130  virtual void SetGrabMouse( bool aEnabled )
131  {
132  m_settings.m_grabMouse = aEnabled;
133  }
134 
141  virtual void SetAutoPan( bool aEnabled )
142  {
143  m_settings.m_autoPanEnabled = aEnabled;
144  }
145 
151  virtual void EnableAutoPan( bool aEnabled )
152  {
153  m_settings.m_autoPanSettingEnabled = aEnabled;
154  }
155 
161  virtual void SetAutoPanSpeed( float aSpeed )
162  {
163  m_settings.m_autoPanSpeed = aSpeed;
164  }
165 
171  virtual void SetAutoPanMargin( float aMargin )
172  {
173  m_settings.m_autoPanMargin = aMargin;
174  }
175 
185  virtual VECTOR2D GetMousePosition( bool aWorldCoordinates = true ) const = 0;
186 
195  {
196  return GetCursorPosition( m_settings.m_snappingEnabled );
197  }
198 
205  virtual VECTOR2D GetRawCursorPosition( bool aSnappingEnabled = true ) const = 0;
206 
215  virtual VECTOR2D GetCursorPosition( bool aEnableSnapping ) const = 0;
216 
223  virtual void ForceCursorPosition( bool aEnabled, const VECTOR2D& aPosition = VECTOR2D( 0, 0 ) )
224  {
225  m_settings.m_forceCursorPosition = aEnabled;
226  m_settings.m_forcedPosition = aPosition;
227  }
228 
236  virtual void SetCursorPosition( const VECTOR2D& aPosition, bool aWarpView = true ) = 0;
237 
238 
244  virtual void SetCrossHairCursorPosition( const VECTOR2D& aPosition, bool aWarpView = true ) = 0;
245 
246 
252  bool ForcedCursorPosition() const
253  {
254  return m_settings.m_forceCursorPosition;
255  }
256 
262  virtual void ShowCursor( bool aEnabled );
263 
269  bool IsCursorShown() const;
270 
276  virtual void CaptureCursor( bool aEnabled )
277  {
278  m_settings.m_cursorCaptured = aEnabled;
279  }
280 
286  inline bool IsCursorPositionForced() const
287  {
288  return m_settings.m_forceCursorPosition;
289  }
290 
301  virtual void WarpCursor( const VECTOR2D& aPosition, bool aWorldCoordinates = false,
302  bool aWarpView = false ) = 0;
303 
309  void EnableCursorWarping( bool aEnable )
310  {
311  m_settings.m_warpCursor = aEnable;
312  }
313 
319  {
320  return m_settings.m_warpCursor;
321  }
322 
328  virtual void EnableMousewheelPan( bool aEnable )
329  {
330  m_settings.m_enableMousewheelPan = aEnable;
331  }
332 
337  virtual bool IsMousewheelPanEnabled() const
338  {
339  return m_settings.m_enableMousewheelPan;
340  }
341 
347  virtual void CenterOnCursor() const = 0;
348 
349  void SetAdditionalPanButtons( bool aLeft = false, bool aRight = false )
350  {
351  m_settings.m_panWithLeftButton = aLeft;
352  m_settings.m_panWithRightButton = aRight;
353  }
354 
359  virtual void Reset();
360 
362  const VC_SETTINGS& GetSettings() const
363  {
364  return m_settings;
365  }
366 
368  void ApplySettings( const VC_SETTINGS& aSettings );
369 
370 protected:
373 
376 };
377 } // namespace KIGFX
378 
379 #endif
bool m_enableMousewheelPan
Mousewheel (2-finger touchpad) panning
Definition: view_controls.h:88
void Reset()
Restores the default settings
virtual void SetAutoPanSpeed(float aSpeed)
Function SetAutoPanSpeed() Sets speed of autopanning.
float m_autoPanSpeed
How fast is panning when in auto mode
Definition: view_controls.h:82
Class CAIRO_GAL is the cairo implementation of the graphics abstraction layer.
Definition: class_module.h:58
bool m_snappingEnabled
Should the cursor snap to grid or move freely
Definition: view_controls.h:67
bool IsCursorPositionForced() const
Function IsCursorPositionForced() Returns true if the cursor position is set by one of the tools...
bool m_grabMouse
Flag for grabbing the mouse cursor
Definition: view_controls.h:70
VIEW_CONTROLS(VIEW *aView)
VC_SETTINGS m_settings
Current VIEW_CONTROLS settings
virtual void EnableMousewheelPan(bool aEnable)
Function EnableMousewheelPan() Enables or disables mousewheel panning.
VECTOR2D m_forcedPosition
Forced cursor position (world coordinates)
Definition: view_controls.h:58
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool m_panWithRightButton
Allow panning with the right button in addition to middle
Definition: view_controls.h:91
virtual void SetAutoPanMargin(float aMargin)
Function SetAutoPanMArgin() Sets margin for autopanning (ie.
VIEW * m_view
Pointer to controlled VIEW.
void EnableCursorWarping(bool aEnable)
Function EnableCursorWarping() Enables or disables warping the cursor.
bool m_autoPanSettingEnabled
Flag for turning on autopanning
Definition: view_controls.h:76
bool m_forceCursorPosition
Is the forced cursor position enabled
Definition: view_controls.h:61
VECTOR2< double > VECTOR2D
Definition: vector2d.h:586
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
virtual bool IsMousewheelPanEnabled() const
Function IsMousewheelPanEnabled()
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
Structure to keep VIEW_CONTROLS settings for easy store/restore operations
Definition: view_controls.h:44
Class VIEW_CONTROLS is an interface for classes handling user events controlling the view behaviour (...
bool m_warpCursor
If the cursor is allowed to be warped
Definition: view_controls.h:85
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Function ForceCursorPosition() Places the cursor immediately at a given point.
virtual void EnableAutoPan(bool aEnabled)
Function EnableAutoPan Turns on/off auto panning (user setting to disable it entirely).
float m_autoPanMargin
Distance from cursor to VIEW edge when panning is active
Definition: view_controls.h:79
bool m_autoPanEnabled
Flag for turning on autopanning
Definition: view_controls.h:73
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
const VC_SETTINGS & GetSettings() const
Returns the current VIEW_CONTROLS settings
void SetAdditionalPanButtons(bool aLeft=false, bool aRight=false)
bool m_showCursor
Flag determining the cursor visibility
Definition: view_controls.h:55
bool IsCursorWarpingEnabled() const
Function IsCursorWarpingEnabled()
virtual void SetGrabMouse(bool aEnabled)
Function SetGrabMouse Turns on/off mouse grabbing.
bool ForcedCursorPosition() const
Function ForcedCursorPosition() Returns true if the current cursor position is forced to a specific l...
Class VIEW.
Definition: view.h:61
bool m_cursorCaptured
Should the cursor be locked within the parent window area
Definition: view_controls.h:64
bool m_panWithLeftButton
Allow panning with the left button in addition to middle
Definition: view_controls.h:94