VR-Forces Developer's Guide
 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 
14 //vrf includes
19 
20 //vrv includes
23 #include <vrvUtil/DtUnicode.h>
25 #include <vrvUtil/signalslib.h>
26 
27 //third party includes
28 #include <boost/function.hpp>
29 
30 //std lib includes
31 #include <map>
32 #include <string>
33 #include <unordered_map>
34 
35 
36 struct _SDL_Joystick;
37 union SDL_Event;
38 
39 namespace makVrv
40 {
41  class DtDe;
42  class DtRecordSettingsBackupInterface;
43  class DtGenericControllerEvent;
44 
48  {
49  public:
52 
54  virtual bool gameControllerEvent(DtGenericControllerEvent*) = 0;
55 
59  {
60  return true;
61  }
62 
65  virtual void tick(bool sentEvents)
66  {
67  };
68 
70  virtual void gameControllerDeviceRemoved(int)
71  {
72  };
73 
75  virtual void gameControllerDeviceAdded(int)
76  {
77  };
78 
81  {
82  return false;
83  }
84 
86  virtual void noQueuedEvents()
87  {
88  };
89 
92  virtual void gameControlInformationAdded(const std::string& configuration,
93  const std::string& functionGroup, const std::string& function, const DtGameControlInformation& i)
94  {
95  }
96  };
97 
102  {
103  public:
105  {
106  ControllerInformation() : controllerName(DtUnicode::fromAscii("")),
107  deviceNumber(-1), type(GameControllerEventUnknown) {};
108 
110  : controllerName(orig.controllerName)
111  , deviceNumber(orig.deviceNumber)
112  , type(orig.type)
113  , guid(orig.guid)
114  {
115  }
116 
118  {
119  controllerName = rhs.controllerName;
120  deviceNumber = rhs.deviceNumber;
121  type = rhs.type;
122  guid = rhs.guid;
123 
124  return *this;
125  }
126 
128  std::string guid;
131  };
132 
133  typedef std::unordered_map<int, ControllerInformation> Controllers;
134 
136  virtual ~DtJoystickManager() override;
137 
139  static DtJoystickManager& instance(DtDe& de);
140 
142  static void registerInstance(DtDe& de, DtJoystickManager*);
143 
145  virtual void flushAllEvents();
146 
147  virtual ControllerInformation controllerInformation(int deviceId) const;
148 
150  virtual bool processMouseEvent(const DtMouseEvent& ev, DtChannel& channel) override;
151 
155  virtual bool processKeyboardEvent(const DtKeyEvent& ev, DtChannel& channel) override;
156 
158  virtual bool switchControlActive(const std::string& configuration, const std::string& switchGroup) const;
159 
161  virtual DtGenericControllerEvent* genericEventFromSDLEvent(const SDL_Event&);
162 
164  virtual void removeGameControllerEventHandler(DtGameControllerEventHandler*);
165 
167  virtual void addGameControllerEventHandlerToFront(DtGameControllerEventHandler*);
168 
170  virtual void addGameControllerEventHandlerToEnd(DtGameControllerEventHandler*);
171 
173  virtual void addJoystickControlFunction(const std::string& functionGroup, const std::string& function,
175  virtual void addJoystickControlFunction(const std::string& functionGroup, const std::string& function,
176  double minimumValue, double maximumValue, bool cycle = false, const std::string& description = "");
177 
180  virtual std::set<std::string> functionGroupsSimilarTo(const std::string& functionGroup) const;
181 
183  virtual void insertGameControllerEventHandlerBefore(DtGameControllerEventHandler*, DtGameControllerEventHandler*);
184 
186  typedef std::vector<DtGameControllerEventHandler*> GameControllerEventHandlers;
187  const GameControllerEventHandlers& gameControllerEventHandlers() const { return myGameControllerEventHandlers; };
188 
189  virtual DtUnicode gameControllerName(const std::string& configuration,
190  const std::string& functionGroup, const std::string& functionCode) const;
191  virtual DtUnicode gameControllerFunction(const std::string& configuration,
192  const std::string& functionGroup, const std::string& functionCode) const;
193 
195  virtual std::set<int> deviceIndexFromControllerInfo(const DtGameControlInformation&) const;
196  virtual int deviceIndexFromGuid(const std::string&) const;
197  virtual int deviceIndexFromDeviceName(const std::string&) const;
198  virtual int firstDeviceIndexOfConrollerType(int) const;
199 
201  std::vector<std::string> functionsForFunctionGroup(const std::string&) const;
202 
204  virtual void setFavoriteConfiguration(const std::string&);
205  virtual const std::string& favoriteConfiguration() const;
206 
209  virtual void increaseLockCount();
210  virtual void decreaseLockCount();
211  virtual bool locked() const;
212 
213  virtual double joystickDeadzonePercentage(int) const;
214  virtual void setJoystickDeadzonePercentage(int, double);
215 
217  boost::signals2::signal<void ()> signal_clear;
218 
220  boost::signals2::signal<void (int, int)> signal_joystickError;
221 
223  boost::signals2::signal<void (const ControllerInformation&)> signal_controllerAdded;
224 
226  boost::signals2::signal<void (int)> signal_controllerRemoved;
227 
229  boost::signals2::signal<void (const DtJoystickConfigurations&)> signal_configurationsChanged;
230  boost::signals2::signal<void (const std::string&, const DtJoystickConfigurationSettings&)> signal_settingsChanged;
231 
233  boost::signals2::signal<void (const std::string&, const std::string&)> signal_controllerInformationRemoved;
234 
236  boost::signals2::signal<void (const DtJoystickConfigurationSetting&)> signal_controllerInformationAdded;
237 
239  boost::signals2::signal<void (const std::string& functionGroup, const std::string& function,
241 
243  boost::signals2::signal<void (const std::string&)> signal_configurationAdded;
244 
246  boost::signals2::signal<void (const std::string&)> signal_configurationRemoved;
247 
249  boost::signals2::signal<void (const std::string& old, const std::string& renamed)> signal_configurationRenamed;
250 
252  boost::signals2::signal<void (bool)> signal_joystickManagerLockedForUpdates;
253 
255  boost::signals2::signal<void (const std::string&, const std::string&)> signal_favoriteConfigurationChanged;
256 
257  virtual bool joystickSettingsForConfiguration(const std::string&, DtJoystickConfigurationSettings&);
258  virtual void setJoystickSettingsForConfiguration(const std::string&, const DtJoystickConfigurationSettings&);
259 
260  const DtJoystickConfigurations& joystickConfigurations() { return myJoystickConfigurations; };
261  virtual std::vector<std::string> configurations() const;
262 
263  virtual void setFromRecord(const DtJoystickConfigurations&);
264  virtual void getRecord(DtJoystickConfigurations&);
265 
267  virtual int numJoystickAxis(int deviceIndex) const;
268 
270  virtual int numJoystickButtons(int deviceIndex) const;
271 
273  virtual int numJoystickHats(int deviceIndex) const;
274 
277  virtual bool needsTransition(const std::string& functionalGroup, const std::string& function) const;
278 
280  virtual bool toggle(const std::string& functionalGroup, const std::string& function) const;
281 
283  virtual bool cycle(const std::string& functionGroup, const std::string& function) const;
284 
286  virtual void getFunctionMinMaxValues(const std::string& functionalGroup, const std::string& function,
287  double& min, double& max) const;
288 
290  virtual void loadDefaults(bool fromFactory = false);
291 
293  {
294  return mySettingsBackup;
295  }
296 
298  {
299  return mySettingsBackup;
300  }
301 
303  virtual Controllers controllers() const;
304 
306  void exportSettings(const std::string& fileName);
307 
309  void importSettings(const std::string& fileName);
310 
312  virtual DtGameControlInformation gameControlInformationFor(
313  const std::string& configuration, const std::string& functionGroup, const std::string& function) const;
314 
316  virtual std::string descriptionFor(const std::string& functionGroup, const std::string& function) const;
317 
319  virtual void removeAllGameControllers();
320 
322  virtual void removeGameControlInformationFor(
323  const std::string& configuration, const std::string& functionGroup, const std::string& function);
324 
326  virtual void addGameControlInformationFor(
327  const std::string& configuration, const std::string& functionGroup, const std::string& function,
328  const DtGameControlInformation&);
329 
330  virtual void setAutoSave(bool);
331  virtual bool autoSave() const;
332 
334  virtual bool hasConfigurationName(const std::string&) const;
335 
337  virtual void addConfiguration(const std::string&);
338 
340  virtual void removeConfiguration(const std::string&);
341 
343  virtual bool functionGroupSpecified(const std::string& configuration, const std::string& functionGroup,
344  bool all = false) const;
345 
347  virtual bool canFunctionGroupBeAssigned(const std::string& configuration, const std::string& functionGroup,
348  bool all = false) const;
349 
351  virtual void renameConfiguration(const std::string& old, const std::string& renamed);
352 
353  virtual void saveAsDefaults();
354 
356  virtual DtJoystickConfigurationSettings::GameControlInformation gameControlInformation(
357  const std::string& configuration, const std::set<std::string>&) const;
358 
362  virtual DtJoystickConfigurationSettings::GameControlInformation gameControlInformation(
363  const std::string& configuration, const std::string&) const;
364 
367  virtual void getSplitRecord(std::vector<DtJoystickConfigurations>& rec,
368  std::vector<std::string>& fileNames) {};
369 
373  DtJoystickConfigurations& combinedRec) {};
374 
375  protected:
376 
377  static int sdlEventFilterCallback(void *userdata, SDL_Event * event);
378  virtual int sdlEventFilter(SDL_Event * event);
379  virtual const std::string& className() override;
380 
382  void initialize();
383 
385  virtual void sendNoQueuedEvents();
386 
388  virtual void tick();
389 
391  virtual void initializeJoysticks();
392 
394  virtual void initializeGameControllers();
395 
397  virtual void initializeKeyboard();
398 
400  virtual void addJoystickDevice(int deviceId);
401 
403  virtual void removeJoystickDevice(int deviceId);
404 
407  virtual bool processControllerEvent(DtGenericControllerEvent*);
408 
409  protected:
411 
412  typedef std::map<int, DtJoystickDevice> Joysticks;
414 
415  typedef std::map<std::string, std::set<int> > JoysticksByGuid;
417 
419 
422 
424 
426 
430 
433 
435  typedef std::map<int, double> JoystickDeadzonePercent;
437 
439 
440  typedef std::vector<DtGenericControllerEvent*> JoystickEventQueue;
442  };
443 }
ControllerInformation()
Definition: joystickManager.h:106
boost::signals2::signal< void(int, int)> signal_joystickError
Signal sent when there is an error with a particular joystick.
Definition: joystickManager.h:220
boost::signals2::signal< void(const std::string &)> signal_configurationRemoved
Signal sent when a configuration is removed.
Definition: joystickManager.h:246
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
DtRecordSettingsBackupInterface * settingsBackup()
Definition: joystickManager.h:297
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
int deviceNumber
Definition: joystickManager.h:129
const DtJoystickConfigurations & joystickConfigurations()
Definition: joystickManager.h:260
boost::signals2::signal< void(const DtJoystickConfigurationSetting &)> signal_controllerInformationAdded
Signal sent when controller information is added.
Definition: joystickManager.h:236
virtual void noQueuedEvents()
Called when there were events but now there are no longer queued events.
Definition: joystickManager.h:86
This class encapsulates a Key event.
Definition: DtKeyEvent.h:16
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:233
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:92
Handler that you insert into the manager to be made aware of game controller events. A subclass of this handler can be added to the joystick manager to be made aware of any joystick/keyboard event.
Definition: joystickManager.h:47
boost::signals2::signal< void(const std::string &)> signal_configurationAdded
Signal sent when a new configuration is added.
Definition: joystickManager.h:243
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:101
const DtRecordSettingsBackupInterface * settingsBackup() const
Definition: joystickManager.h:292
virtual bool filterGameControllerEvent(DtGenericControllerEvent *)
Return true to filter this Game controller Event.
Definition: joystickManager.h:80
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:117
boost::signals2::signal< void(const DtJoystickConfigurations &)> signal_configurationsChanged
Signal send when joystick settings have changed.
Definition: joystickManager.h:229
virtual void gameControllerDeviceRemoved(int)
Called when a game controller device is removed.
Definition: joystickManager.h:70
DtSignalConnectionManager myConnections
Definition: joystickManager.h:418
std::map< std::string, std::set< int > > JoysticksByGuid
Definition: joystickManager.h:415
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:240
std::vector< DtGameControllerEventHandler * > GameControllerEventHandlers
Returns the game controller event handlers.
Definition: joystickManager.h:186
Definition: gameControllerEvents.h:33
DtGameControllerEventHandler()
Definition: joystickManager.h:50
int myLockCount
Definition: joystickManager.h:425
This class encapsulates a mouse button event.
Definition: DtMouseEvent.h:19
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:255
boost::signals2::signal< void(bool)> signal_joystickManagerLockedForUpdates
Signal sent when lock state changes.
Definition: joystickManager.h:252
#define DT_DLL_JOYSTICKCORE
Contains DLL export macros.
Definition: joystickCore.h:25
bool myAmEventProcessor
Definition: joystickManager.h:431
The abstract Channel Class.
Definition: DtChannel.h:35
boost::signals2::signal< void(const std::string &old, const std::string &renamed)> signal_configurationRenamed
Signal sent when a configuration is renamed.
Definition: joystickManager.h:249
boost::signals2::signal< void(int)> signal_controllerRemoved
Signal sent when a joystick is removed (by device index.
Definition: joystickManager.h:226
boost::signals2::signal< void()> signal_clear
Signal sent when joystick information is cleared.
Definition: joystickManager.h:217
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:441
ControllerInformation myKeyboardInformation
Definition: joystickManager.h:438
DtGameControllerKeyboardEvent * myKeyboardControllerEvent
Definition: joystickManager.h:429
GameControllerEventHandlers myGameControllerEventHandlers
Definition: joystickManager.h:423
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:20
std::map< int, double > JoystickDeadzonePercent
Default deadzone percent by joystick device. Default is 2%.
Definition: joystickManager.h:435
DtGameControllerJoystickEvent wraps a joystick event.
Definition: gameControllerEvents.h:91
Joysticks myJoysticks
Definition: joystickManager.h:413
const GameControllerEventHandlers & gameControllerEventHandlers() const
Definition: joystickManager.h:187
GameControllerEventType
Definition: gameControllerEvents.h:26
std::map< int, DtJoystickDevice > Joysticks
Definition: joystickManager.h:412
DtDe & myDe
Definition: joystickManager.h:410
Definition: gameControllerEvents.h:28
std::vector< DtGenericControllerEvent * > JoystickEventQueue
Definition: joystickManager.h:440
The DtGameControlInformation class contains information about how a function within a function group ...
Definition: gameControlInformation.h:32
Base class to provide boost signal/slot management.
JoystickDeadzonePercent myJoystickDeadzonePercent
Definition: joystickManager.h:436
boost::signals2::signal< void(const ControllerInformation &)> signal_controllerAdded
Signal sent when a joystick is added.
Definition: joystickManager.h:223
JoysticksByGuid myJoysticksByGuid
Definition: joystickManager.h:416
virtual void gameControllerDeviceAdded(int)
Called when a game controller device is added.
Definition: joystickManager.h:75
std::string guid
Definition: joystickManager.h:128
Information that makes up a function group/function code information. This is used to figure out how ...
Definition: joystickConfigurations.h:37
boost::signals2::signal< void(const std::string &, const DtJoystickConfigurationSettings &)> signal_settingsChanged
Definition: joystickManager.h:230
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:367
virtual bool canProcessEvent(DtGenericControllerEvent *) const
Return true if this event can be processed by this handler. Return of false will filter the event for...
Definition: joystickManager.h:58
Definition: joystickManager.h:104
DtGameControllerJoystickEvent * myJoystickControllerEvent
Used for event filtering so do not have to create on stack every time.
Definition: joystickManager.h:428
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
virtual ~DtGameControllerEventHandler()
Definition: joystickManager.h:51
virtual void tick(bool sentEvents)
Called after game controller events are processed in any given tick. If sentEvents is true some game ...
Definition: joystickManager.h:65
bool mySentEvent
Definition: joystickManager.h:432
ControllerInformation(const ControllerInformation &orig)
Definition: joystickManager.h:109
The makVrv::DtRecordSettingsBackupInterface provides an interface to record-based backups...
Definition: DtRecordSettingsBackup.h:23
DtRecordSettingsBackupInterface * mySettingsBackup
Definition: joystickManager.h:421
The DtEventProcessorInterface defines the generic interface for classes which handle input events...
Definition: DtEventProcessorInterface.h:34
DtUnicode controllerName
Definition: joystickManager.h:127
GameControllerEventType type
Definition: joystickManager.h:130
DtJoystickConfigurations myJoystickConfigurations
Definition: joystickManager.h:420
std::unordered_map< int, ControllerInformation > Controllers
Definition: joystickManager.h:133
virtual void addRecords(DtJoystickConfigurations &recs, DtJoystickConfigurations &combinedRec)
To support writing element definitions in folders as multiple files not implemented.
Definition: joystickManager.h:372

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)