Point Cloud Library (PCL)  1.14.0-dev
keyboard_event.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  * Copyright (c) 2010-2011, Willow Garage, Inc.
6  * Copyright (c) 2012-, Open Perception, Inc.
7  *
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * * Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  * * Redistributions in binary form must reproduce the above
17  * copyright notice, this list of conditions and the following
18  * disclaimer in the documentation and/or other materials provided
19  * with the distribution.
20  * * Neither the name of the copyright holder(s) nor the names of its
21  * contributors may be used to endorse or promote products derived
22  * from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  * POSSIBILITY OF SUCH DAMAGE.
36  *
37  */
38 
39 #pragma once
40 
41 #include <string>
42 
43 namespace pcl
44 {
45  namespace visualization
46  {
47  /** /brief Class representing key hit/release events */
49  {
50  public:
51  /** \brief bit pattern for the ALT key*/
52  static const unsigned int Alt = 1;
53  /** \brief bit pattern for the Control key*/
54  static const unsigned int Ctrl = 2;
55  /** \brief bit pattern for the Shift key*/
56  static const unsigned int Shift = 4;
57 
58  /** \brief Constructor
59  * \param[in] action true for key was pressed, false for released
60  * \param[in] key_sym the key-name that caused the action
61  * \param[in] key the key code that caused the action
62  * \param[in] alt whether the alt key was pressed at the time where this event was triggered
63  * \param[in] ctrl whether the ctrl was pressed at the time where this event was triggered
64  * \param[in] shift whether the shift was pressed at the time where this event was triggered
65  */
66  inline KeyboardEvent (bool action, const std::string& key_sym, unsigned char key,
67  bool alt, bool ctrl, bool shift);
68 
69  /**
70  * \return whether the alt key was pressed at the time where this event was triggered
71  */
72  inline bool
73  isAltPressed () const;
74 
75  /**
76  * \return whether the ctrl was pressed at the time where this event was triggered
77  */
78  inline bool
79  isCtrlPressed () const;
80 
81  /**
82  * \return whether the shift was pressed at the time where this event was triggered
83  */
84  inline bool
85  isShiftPressed () const;
86 
87  /**
88  * \return the ASCII Code of the key that caused the event. If 0, then it was a special key, like ALT, F1, F2,... PgUp etc. Then the name of the key is in the keysym field.
89  */
90  inline unsigned char
91  getKeyCode () const;
92 
93  /**
94  * \return name of the key that caused the event
95  */
96  inline const std::string&
97  getKeySym () const;
98 
99  /**
100  * \return true if a key-press caused the event, false otherwise
101  */
102  inline bool
103  keyDown () const;
104 
105  /**
106  * \return true if a key-release caused the event, false otherwise
107  */
108  inline bool
109  keyUp () const;
110 
111  protected:
112 
113  bool action_;
114  unsigned int modifiers_{0};
115  unsigned char key_code_;
116  std::string key_sym_;
117  };
118 
119  KeyboardEvent::KeyboardEvent (bool action, const std::string& key_sym, unsigned char key,
120  bool alt, bool ctrl, bool shift)
121  : action_ (action)
122  ,
123  key_code_(key)
124  , key_sym_ (key_sym)
125  {
126  if (alt)
127  modifiers_ = Alt;
128 
129  if (ctrl)
130  modifiers_ |= Ctrl;
131 
132  if (shift)
133  modifiers_ |= Shift;
134  }
135 
136  bool
138  {
139  return (modifiers_ & Alt) != 0;
140  }
141 
142  bool
144  {
145  return (modifiers_ & Ctrl) != 0;
146  }
147 
148  bool
150  {
151  return (modifiers_ & Shift) != 0;
152  }
153 
154  unsigned char
156  {
157  return (key_code_);
158  }
159 
160  const std::string&
162  {
163  return (key_sym_);
164  }
165 
166  bool
168  {
169  return (action_);
170  }
171 
172  bool
174  {
175  return (!action_);
176  }
177  } // namespace visualization
178 } // namespace pcl
/brief Class representing key hit/release events
KeyboardEvent(bool action, const std::string &key_sym, unsigned char key, bool alt, bool ctrl, bool shift)
Constructor.
const std::string & getKeySym() const
unsigned char getKeyCode() const
static const unsigned int Alt
bit pattern for the ALT key
static const unsigned int Shift
bit pattern for the Shift key
static const unsigned int Ctrl
bit pattern for the Control key