VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
joystickManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 
12 #pragma once
13 
20 #include <vrvUtil/DtUnicode.h>
22 
23 #include <string>
24 #include <map>
25 
26 #include <boost/signals2.hpp>
27 #include <boost/function.hpp>
28 #include <boost/unordered_set.hpp>
29 #include <boost/unordered_map.hpp>
30 
31 struct _SDL_Joystick;
32 union SDL_Event;
33 
34 namespace makVrv
35 {
36  class DtDe;
37  class DtRecordSettingsBackupInterface;
38  class DtGenericControllerEvent;
39 
43  {
44  public:
47 
49  virtual bool gameControllerEvent(DtGenericControllerEvent*) = 0;
50 
54  {
55  return true;
56  }
57 
60  virtual void tick(bool sentEvents)
61  {
62  };
63 
65  virtual void gameControllerDeviceRemoved(int)
66  {
67  };
68 
70  virtual void gameControllerDeviceAdded(int)
71  {
72  };
73 
76  {
77  return false;
78  }
79 
81  virtual void noQueuedEvents()
82  {
83  };
84 
87  virtual void gameControlInformationAdded(const std::string& configuration,
88  const std::string& functionGroup, const std::string& function, const DtGameControlInformation& i)
89  {
90  }
91  };
92 
97  {
98  public:
100  {
101  ControllerInformation() : controllerName(DtUnicode::fromAscii("")),
102  deviceNumber(-1), type(GameControllerEventUnknown) {};
103 
105  : controllerName(orig.controllerName)
106  , deviceNumber(orig.deviceNumber)
107  , type(orig.type)
108  , guid(orig.guid)
109  {
110  }
111 
113  {
114  controllerName = rhs.controllerName;
115  deviceNumber = rhs.deviceNumber;
116  type = rhs.type;
117  guid = rhs.guid;
118 
119  return *this;
120  }
121 
123  std::string guid;
126  };
127 
128  typedef boost::unordered_map<int, ControllerInformation> Controllers;
129 
131  virtual ~DtJoystickManager();
132 
134  static DtJoystickManager& instance(DtDe& de);
135 
137  static void registerInstance(DtDe& de, DtJoystickManager*);
138 
140  virtual void flushAllEvents();
141 
142  virtual ControllerInformation controllerInformation(int deviceId) const;
143 
145  virtual bool processMouseEvent( const DtMouseEvent& ev, DtChannel& channel);
146 
150  virtual bool processKeyboardEvent( const DtKeyEvent& ev, DtChannel& channel);
151 
153  virtual bool switchControlActive(const std::string& configuration, const std::string& switchGroup) const;
154 
156  virtual DtGenericControllerEvent* genericEventFromSDLEvent(const SDL_Event&);
157 
159  virtual void removeGameControllerEventHandler(DtGameControllerEventHandler*);
160 
162  virtual void addGameControllerEventHandlerToFront(DtGameControllerEventHandler*);
163 
165  virtual void addGameControllerEventHandlerToEnd(DtGameControllerEventHandler*);
166 
168  virtual void addJoystickControlFunction(const std::string& functionGroup, const std::string& function,
170  virtual void addJoystickControlFunction(const std::string& functionGroup, const std::string& function,
171  double minimumValue, double maximumValue, bool cycle = false, const std::string& description = "");
172 
175  virtual std::set<std::string> functionGroupsSimilarTo(const std::string& functionGroup) const;
176 
178  virtual void insertGameControllerEventHandlerBefore(DtGameControllerEventHandler*, DtGameControllerEventHandler*);
179 
181  typedef std::vector<DtGameControllerEventHandler*> GameControllerEventHandlers;
182  const GameControllerEventHandlers& gameControllerEventHandlers() const { return myGameControllerEventHandlers; };
183 
184  virtual DtUnicode gameControllerName(const std::string& configuration,
185  const std::string& functionGroup, const std::string& functionCode) const;
186  virtual DtUnicode gameControllerFunction(const std::string& configuration,
187  const std::string& functionGroup, const std::string& functionCode) const;
188 
190  virtual std::set<int> deviceIndexFromControllerInfo(const DtGameControlInformation&) const;
191  virtual int deviceIndexFromGuid(const std::string&) const;
192  virtual int deviceIndexFromDeviceName(const std::string&) const;
193  virtual int firstDeviceIndexOfConrollerType(int) const;
194 
196  std::vector<std::string> functionsForFunctionGroup(const std::string&) const;
197 
199  virtual void setFavoriteConfiguration(const std::string&);
200  virtual const std::string& favoriteConfiguration() const;
201 
204  virtual void increaseLockCount();
205  virtual void decreaseLockCount();
206  virtual bool locked() const;
207 
208  virtual double joystickDeadzonePercentage(int) const;
209  virtual void setJoystickDeadzonePercentage(int, double);
210 
212  boost::signals2::signal<void ()> signal_clear;
213 
215  boost::signals2::signal<void (int, int)> signal_joystickError;
216 
218  boost::signals2::signal<void (const ControllerInformation&)> signal_controllerAdded;
219 
221  boost::signals2::signal<void (int)> signal_controllerRemoved;
222 
224  boost::signals2::signal<void (const DtJoystickConfigurations&)> signal_configurationsChanged;
225  boost::signals2::signal<void (const std::string&, const DtJoystickConfigurationSettings&)> signal_settingsChanged;
226 
228  boost::signals2::signal<void (const std::string&, const std::string&)> signal_controllerInformationRemoved;
229 
231  boost::signals2::signal<void (const DtJoystickConfigurationSetting&)> signal_controllerInformationAdded;
232 
234  boost::signals2::signal<void (const std::string& functionGroup, const std::string& function,
236 
238  boost::signals2::signal<void (int, DtGenericControllerEvent*)> signal_gameControllerEvent;
239 
241  boost::signals2::signal<void (const std::string&)> signal_configurationAdded;
242 
244  boost::signals2::signal<void (const std::string&)> signal_configurationRemoved;
245 
247  boost::signals2::signal<void (const std::string& old, const std::string& renamed)> signal_configurationRenamed;
248 
250  boost::signals2::signal<void (bool)> signal_joystickManagerLockedForUpdates;
251 
253  boost::signals2::signal<void (const std::string&, const std::string&)> signal_favoriteConfigurationChanged;
254 
255  virtual bool joystickSettingsForConfiguration(const std::string&, DtJoystickConfigurationSettings&);
256  virtual void setJoystickSettingsForConfiguration(const std::string&, const DtJoystickConfigurationSettings&);
257 
258  const DtJoystickConfigurations& joystickConfigurations() { return myJoystickConfigurations; };
259  virtual std::vector<std::string> configurations() const;
260 
261  virtual void setFromRecord(const DtJoystickConfigurations&);
262  virtual void getRecord(DtJoystickConfigurations&);
263 
265  virtual int numJoystickAxis(int deviceIndex) const;
266 
268  virtual int numJoystickButtons(int deviceIndex) const;
269 
271  virtual int numJoystickHats(int deviceIndex) const;
272 
275  virtual bool needsTransition(const std::string& functionalGroup, const std::string& function) const;
276 
278  virtual bool toggle(const std::string& functionalGroup, const std::string& function) const;
279 
281  virtual bool cycle(const std::string& functionGroup, const std::string& function) const;
282 
284  virtual void getFunctionMinMaxValues(const std::string& functionalGroup, const std::string& function,
285  double& min, double& max) const;
286 
288  virtual void loadDefaults(bool fromFactory = false);
289 
291  {
292  return mySettingsBackup;
293  }
294 
296  {
297  return mySettingsBackup;
298  }
299 
301  virtual Controllers controllers() const;
302 
304  void exportSettings(const std::string& fileName);
305 
307  void importSettings(const std::string& fileName);
308 
310  virtual DtGameControlInformation gameControlInformationFor(
311  const std::string& configuration, const std::string& functionGroup, const std::string& function) const;
312 
314  virtual std::string descriptionFor(const std::string& functionGroup, const std::string& function) const;
315 
317  virtual void removeAllGameControllers();
318 
320  virtual void removeGameControlInformationFor(
321  const std::string& configuration, const std::string& functionGroup, const std::string& function);
322 
324  virtual void addGameControlInformationFor(
325  const std::string& configuration, const std::string& functionGroup, const std::string& function,
326  const DtGameControlInformation&);
327 
328  virtual void setAutoSave(bool);
329  virtual bool autoSave() const;
330 
332  virtual bool hasConfigurationName(const std::string&) const;
333 
335  virtual void addConfiguration(const std::string&);
336 
338  virtual void removeConfiguration(const std::string&);
339 
341  virtual bool functionGroupSpecified(const std::string& configuration, const std::string& functionGroup,
342  bool all = false) const;
343 
345  virtual bool canFunctionGroupBeAssigned(const std::string& configuration, const std::string& functionGroup,
346  bool all = false) const;
347 
349  virtual void renameConfiguration(const std::string& old, const std::string& renamed);
350 
351  virtual void saveAsDefaults();
352 
354  virtual DtJoystickConfigurationSettings::GameControlInformation gameControlInformation(
355  const std::string& configuration, const std::set<std::string>&) const;
356 
360  virtual DtJoystickConfigurationSettings::GameControlInformation gameControlInformation(
361  const std::string& configuration, const std::string&) const;
362 
365  virtual void getSplitRecord(std::vector<DtJoystickConfigurations>& rec,
366  std::vector<std::string>& fileNames) {};
367 
371  DtJoystickConfigurations& combinedRec) {};
372 
373  protected:
374 
375  static int sdlEventFilterCallback(void *userdata, SDL_Event * event);
376  virtual int sdlEventFilter(SDL_Event * event);
377  virtual const std::string& className();
378 
380  void initialize();
381 
383  virtual void sendNoQueuedEvents();
384 
386  virtual void tick();
387 
389  virtual void initializeJoysticks();
390 
392  virtual void initializeGameControllers();
393 
395  virtual void initializeKeyboard();
396 
398  virtual void addJoystickDevice(int deviceId);
399 
401  virtual void removeJoystickDevice(int deviceId);
402 
405  virtual bool processControllerEvent(DtGenericControllerEvent*);
406 
407  protected:
409 
410  typedef std::map<int, DtJoystickDevice> Joysticks;
412 
413  typedef std::map<std::string, std::set<int> > JoysticksByGuid;
415 
417 
420 
422 
424 
428 
431 
433  typedef std::map<int, double> JoystickDeadzonePercent;
435 
437 
438  typedef std::vector<DtGenericControllerEvent*> JoystickEventQueue;
440  };
441 }
ControllerInformation()
Definition: joystickManager.h:101
boost::signals2::signal< void(int, int)> signal_joystickError
Signal sent when there is an error with a particular joystick.
Definition: joystickManager.h:215
boost::signals2::signal< void(const std::string &)> signal_configurationRemoved
Signal sent when a configuration is removed.
Definition: joystickManager.h:244
Virtual base class.
Definition: DtVirtualBaseClass.h:22
DtRecordSettingsBackupInterface * settingsBackup()
Definition: joystickManager.h:295
A unicode string.
Definition: DtUnicode.h:33
int deviceNumber
Definition: joystickManager.h:124
const DtJoystickConfigurations & joystickConfigurations()
Definition: joystickManager.h:258
boost::signals2::signal< void(const DtJoystickConfigurationSetting &)> signal_controllerInformationAdded
Signal sent when controller information is added.
Definition: joystickManager.h:231
virtual void noQueuedEvents()
Called when there were events but now there are no longer queued events.
Definition: joystickManager.h:81
This class encapsulates a Key event.
Definition: DtKeyEvent.h:19
boost::signals2::signal< void(const std::string &, const std::string &)> signal_controllerInformationRemoved
Signal sent when controller information is removed for the function group and function.
Definition: joystickManager.h:228
virtual void gameControlInformationAdded(const std::string &configuration, const std::string &functionGroup, const std::string &function, const DtGameControlInformation &i)
Called when game controller information is added or updated for the given configuration, function group and function.
Definition: joystickManager.h:87
Handler that you insert into the manager to be made aware of game controller events.
Definition: joystickManager.h:42
boost::signals2::signal< void(const std::string &)> signal_configurationAdded
Signal sent when a new configuration is added.
Definition: joystickManager.h:241
std::vector< GameControl > GameControlInformation
Definition: joystickConfigurations.h:105
This class will be used to query about current joysticks and the capabilities they might have...
Definition: joystickManager.h:96
const DtRecordSettingsBackupInterface * settingsBackup() const
Definition: joystickManager.h:290
virtual bool filterGameControllerEvent(DtGenericControllerEvent *)
Return true to filter this Game controller Event.
Definition: joystickManager.h:75
A set of settings that will encompass all function groups and functions currently known...
Definition: joystickConfigurations.h:92
ControllerInformation & operator=(const ControllerInformation &rhs)
Definition: joystickManager.h:112
boost::signals2::signal< void(const DtJoystickConfigurations &)> signal_configurationsChanged
Signal send when joystick settings have changed.
Definition: joystickManager.h:224
virtual void gameControllerDeviceRemoved(int)
Called when a game controller device is removed.
Definition: joystickManager.h:65
DtSignalConnectionManager myConnections
Definition: joystickManager.h:416
std::map< std::string, std::set< int > > JoysticksByGuid
Definition: joystickManager.h:413
boost::signals2::signal< void(const std::string &functionGroup, const std::string &function, const DtFunctionGroupInformation &)> signal_addedJoystickControlFunction
Signal sent when a joystick control function is added.
Definition: joystickManager.h:235
std::vector< DtGameControllerEventHandler * > GameControllerEventHandlers
Returns the game controller event handlers.
Definition: joystickManager.h:181
Definition: gameControllerEvents.h:33
DtGameControllerEventHandler()
Definition: joystickManager.h:45
int myLockCount
Definition: joystickManager.h:423
This class encapsulates a mouse button event.
Definition: DtMouseEvent.h:22
boost::signals2::signal< void(const std::string &, const std::string &)> signal_favoriteConfigurationChanged
Signal sent when the favorite configuration has changed. Will send old/new favorite.
Definition: joystickManager.h:253
boost::unordered_map< int, ControllerInformation > Controllers
Definition: joystickManager.h:128
boost::signals2::signal< void(bool)> signal_joystickManagerLockedForUpdates
Signal sent when lock state changes.
Definition: joystickManager.h:250
#define DT_DLL_JOYSTICKCORE
Contains DLL export macros.
Definition: joystickCore.h:25
bool myAmEventProcessor
Definition: joystickManager.h:429
The abstract Channel Class.
Definition: DtChannel.h:29
boost::signals2::signal< void(const std::string &old, const std::string &renamed)> signal_configurationRenamed
Signal sent when a configuration is renamed.
Definition: joystickManager.h:247
boost::signals2::signal< void(int)> signal_controllerRemoved
Signal sent when a joystick is removed (by device index.
Definition: joystickManager.h:221
boost::signals2::signal< void()> signal_clear
Signal sent when joystick information is cleared.
Definition: joystickManager.h:212
Contains makVrv::DtVirtualBaseClass class.
DtGameControllerKeyboardEvent class wraps a keyboard event.
Definition: gameControllerEvents.h:60
Interface for an event processor for a channel.
JoystickEventQueue myJoystickEventQueue
Definition: joystickManager.h:439
ControllerInformation myKeyboardInformation
Definition: joystickManager.h:436
DtGameControllerKeyboardEvent * myKeyboardControllerEvent
Definition: joystickManager.h:427
GameControllerEventHandlers myGameControllerEventHandlers
Definition: joystickManager.h:421
DtJoystickConfigurations is a collection of joystick settings, each contained within a configuration...
Definition: joystickConfigurations.h:229
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
std::map< int, double > JoystickDeadzonePercent
Default deadzone percent by joystick device. Default is 2%.
Definition: joystickManager.h:433
DtGameControllerJoystickEvent wraps a joystick event.
Definition: gameControllerEvents.h:91
Joysticks myJoysticks
Definition: joystickManager.h:411
const GameControllerEventHandlers & gameControllerEventHandlers() const
Definition: joystickManager.h:182
GameControllerEventType
Definition: gameControllerEvents.h:26
std::map< int, DtJoystickDevice > Joysticks
Definition: joystickManager.h:410
DtDe & myDe
Definition: joystickManager.h:408
Definition: gameControllerEvents.h:28
std::vector< DtGenericControllerEvent * > JoystickEventQueue
Definition: joystickManager.h:438
The DtGameControlInformation class contains information about how a function within a function group ...
Definition: gameControlInformation.h:32
boost::signals2::signal< void(int, DtGenericControllerEvent *)> signal_gameControllerEvent
Signal sent when a controller has an event.
Definition: joystickManager.h:238
Base class to provide boost signal/slot management.
JoystickDeadzonePercent myJoystickDeadzonePercent
Definition: joystickManager.h:434
boost::signals2::signal< void(const ControllerInformation &)> signal_controllerAdded
Signal sent when a joystick is added.
Definition: joystickManager.h:218
JoysticksByGuid myJoysticksByGuid
Definition: joystickManager.h:414
virtual void gameControllerDeviceAdded(int)
Called when a game controller device is added.
Definition: joystickManager.h:70
std::string guid
Definition: joystickManager.h:123
Information that makes up a function group/function code information.
Definition: joystickConfigurations.h:37
boost::signals2::signal< void(const std::string &, const DtJoystickConfigurationSettings &)> signal_settingsChanged
Definition: joystickManager.h:225
virtual void getSplitRecord(std::vector< DtJoystickConfigurations > &rec, std::vector< std::string > &fileNames)
To support writing element definitions in folders as multiple files not implemented.
Definition: joystickManager.h:365
virtual bool canProcessEvent(DtGenericControllerEvent *) const
Return true if this event can be processed by this handler.
Definition: joystickManager.h:53
Definition: joystickManager.h:99
DtGameControllerJoystickEvent * myJoystickControllerEvent
Used for event filtering so do not have to create on stack every time.
Definition: joystickManager.h:426
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
virtual ~DtGameControllerEventHandler()
Definition: joystickManager.h:46
virtual void tick(bool sentEvents)
Called after game controller events are processed in any given tick.
Definition: joystickManager.h:60
bool mySentEvent
Definition: joystickManager.h:430
ControllerInformation(const ControllerInformation &orig)
Definition: joystickManager.h:104
The makVrv::DtRecordSettingsBackupInterface provides an interface to record-based backups...
Definition: DtRecordSettingsBackup.h:27
DtRecordSettingsBackupInterface * mySettingsBackup
Definition: joystickManager.h:419
The DtEventProcessorInterface defines the generic interface for classes which handle input events...
Definition: DtEventProcessorInterface.h:37
DtUnicode controllerName
Definition: joystickManager.h:122
GameControllerEventType type
Definition: joystickManager.h:125
DtJoystickConfigurations myJoystickConfigurations
Definition: joystickManager.h:418
virtual void addRecords(DtJoystickConfigurations &recs, DtJoystickConfigurations &combinedRec)
To support writing element definitions in folders as multiple files not implemented.
Definition: joystickManager.h:370

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)