Point Cloud Library (PCL)  1.11.1-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 patter for the ALT key*/
52  static const unsigned int Alt = 1;
53  /** \brief bit patter for the Control key*/
54  static const unsigned int Ctrl = 2;
55  /** \brief bit patter 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_;
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  , modifiers_ (0)
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
pcl::visualization::KeyboardEvent::KeyboardEvent
KeyboardEvent(bool action, const std::string &key_sym, unsigned char key, bool alt, bool ctrl, bool shift)
Constructor.
Definition: keyboard_event.h:119
pcl
Definition: convolution.h:46
pcl::visualization::KeyboardEvent::keyDown
bool keyDown() const
Definition: keyboard_event.h:167
pcl::visualization::KeyboardEvent::Shift
static const unsigned int Shift
bit patter for the Shift key
Definition: keyboard_event.h:56
pcl::visualization::KeyboardEvent::action_
bool action_
Definition: keyboard_event.h:113
pcl::visualization::KeyboardEvent::key_sym_
std::string key_sym_
Definition: keyboard_event.h:116
pcl::visualization::KeyboardEvent::keyUp
bool keyUp() const
Definition: keyboard_event.h:173
pcl::visualization::KeyboardEvent::getKeySym
const std::string & getKeySym() const
Definition: keyboard_event.h:161
pcl::visualization::KeyboardEvent::key_code_
unsigned char key_code_
Definition: keyboard_event.h:115
pcl::visualization::KeyboardEvent::isAltPressed
bool isAltPressed() const
Definition: keyboard_event.h:137
pcl::visualization::KeyboardEvent::Ctrl
static const unsigned int Ctrl
bit patter for the Control key
Definition: keyboard_event.h:54
pcl::visualization::KeyboardEvent::Alt
static const unsigned int Alt
bit patter for the ALT key
Definition: keyboard_event.h:52
pcl::visualization::KeyboardEvent::isCtrlPressed
bool isCtrlPressed() const
Definition: keyboard_event.h:143
pcl::visualization::KeyboardEvent::getKeyCode
unsigned char getKeyCode() const
Definition: keyboard_event.h:155
pcl::visualization::KeyboardEvent::isShiftPressed
bool isShiftPressed() const
Definition: keyboard_event.h:149
pcl::visualization::KeyboardEvent::modifiers_
unsigned int modifiers_
Definition: keyboard_event.h:114
pcl::visualization::KeyboardEvent
/brief Class representing key hit/release events
Definition: keyboard_event.h:48