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 
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 (const std::string&)> signal_configurationAdded;
239 
241  boost::signals2::signal<void (const std::string&)> signal_configurationRemoved;
242 
244  boost::signals2::signal<void (const std::string& old, const std::string& renamed)> signal_configurationRenamed;
245 
247  boost::signals2::signal<void (bool)> signal_joystickManagerLockedForUpdates;
248 
250  boost::signals2::signal<void (const std::string&, const std::string&)> signal_favoriteConfigurationChanged;
251 
252  virtual bool joystickSettingsForConfiguration(const std::string&, DtJoystickConfigurationSettings&);
253  virtual void setJoystickSettingsForConfiguration(const std::string&, const DtJoystickConfigurationSettings&);
254 
255  const DtJoystickConfigurations& joystickConfigurations() { return myJoystickConfigurations; };
256  virtual std::vector<std::string> configurations() const;
257 
258  virtual void setFromRecord(const DtJoystickConfigurations&);
259  virtual void getRecord(DtJoystickConfigurations&);
260 
262  virtual int numJoystickAxis(int deviceIndex) const;
263 
265  virtual int numJoystickButtons(int deviceIndex) const;
266 
268  virtual int numJoystickHats(int deviceIndex) const;
269 
272  virtual bool needsTransition(const std::string& functionalGroup, const std::string& function) const;
273 
275  virtual bool toggle(const std::string& functionalGroup, const std::string& function) const;
276 
278  virtual bool cycle(const std::string& functionGroup, const std::string& function) const;
279 
281  virtual void getFunctionMinMaxValues(const std::string& functionalGroup, const std::string& function,
282  double& min, double& max) const;
283 
285  virtual void loadDefaults(bool fromFactory = false);
286 
288  {
289  return mySettingsBackup;
290  }
291 
293  {
294  return mySettingsBackup;
295  }
296 
298  virtual Controllers controllers() const;
299 
301  void exportSettings(const std::string& fileName);
302 
304  void importSettings(const std::string& fileName);
305 
307  virtual DtGameControlInformation gameControlInformationFor(
308  const std::string& configuration, const std::string& functionGroup, const std::string& function) const;
309 
311  virtual std::string descriptionFor(const std::string& functionGroup, const std::string& function) const;
312 
314  virtual void removeAllGameControllers();
315 
317  virtual void removeGameControlInformationFor(
318  const std::string& configuration, const std::string& functionGroup, const std::string& function);
319 
321  virtual void addGameControlInformationFor(
322  const std::string& configuration, const std::string& functionGroup, const std::string& function,
323  const DtGameControlInformation&);
324 
325  virtual void setAutoSave(bool);
326  virtual bool autoSave() const;
327 
329  virtual bool hasConfigurationName(const std::string&) const;
330 
332  virtual void addConfiguration(const std::string&);
333 
335  virtual void removeConfiguration(const std::string&);
336 
338  virtual bool functionGroupSpecified(const std::string& configuration, const std::string& functionGroup,
339  bool all = false) const;
340 
342  virtual bool canFunctionGroupBeAssigned(const std::string& configuration, const std::string& functionGroup,
343  bool all = false) const;
344 
346  virtual void renameConfiguration(const std::string& old, const std::string& renamed);
347 
348  virtual void saveAsDefaults();
349 
351  virtual DtJoystickConfigurationSettings::GameControlInformation gameControlInformation(
352  const std::string& configuration, const std::set<std::string>&) const;
353 
357  virtual DtJoystickConfigurationSettings::GameControlInformation gameControlInformation(
358  const std::string& configuration, const std::string&) const;
359 
362  virtual void getSplitRecord(std::vector<DtJoystickConfigurations>& rec,
363  std::vector<std::string>& fileNames) {};
364 
368  DtJoystickConfigurations& combinedRec) {};
369 
370  protected:
371 
372  static int sdlEventFilterCallback(void *userdata, SDL_Event * event);
373  virtual int sdlEventFilter(SDL_Event * event);
374  virtual const std::string& className();
375 
377  void initialize();
378 
380  virtual void sendNoQueuedEvents();
381 
383  virtual void tick();
384 
386  virtual void initializeJoysticks();
387 
389  virtual void initializeGameControllers();
390 
392  virtual void initializeKeyboard();
393 
395  virtual void addJoystickDevice(int deviceId);
396 
398  virtual void removeJoystickDevice(int deviceId);
399 
402  virtual bool processControllerEvent(DtGenericControllerEvent*);
403 
404  protected:
406 
407  typedef std::map<int, DtJoystickDevice> Joysticks;
409 
410  typedef std::map<std::string, std::set<int> > JoysticksByGuid;
412 
414 
417 
419 
421 
425 
428 
430  typedef std::map<int, double> JoystickDeadzonePercent;
432 
434 
435  typedef std::vector<DtGenericControllerEvent*> JoystickEventQueue;
437  };
438 }
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:241
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:292
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:124
const DtJoystickConfigurations & joystickConfigurations()
Definition: joystickManager.h:255
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: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: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. A subclass of this handler can be added to the joystick manager to be made aware of any joystick/keyboard event.
Definition: joystickManager.h:42
boost::signals2::signal< void(const std::string &)> signal_configurationAdded
Signal sent when a new configuration is added.
Definition: joystickManager.h:238
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:287
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:413
std::map< std::string, std::set< int > > JoysticksByGuid
Definition: joystickManager.h:410
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:420
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:250
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:247
#define DT_DLL_JOYSTICKCORE
Contains DLL export macros.
Definition: joystickCore.h:25
bool myAmEventProcessor
Definition: joystickManager.h:426
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:244
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:436
ControllerInformation myKeyboardInformation
Definition: joystickManager.h:433
DtGameControllerKeyboardEvent * myKeyboardControllerEvent
Definition: joystickManager.h:424
GameControllerEventHandlers myGameControllerEventHandlers
Definition: joystickManager.h:418
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:430
DtGameControllerJoystickEvent wraps a joystick event.
Definition: gameControllerEvents.h:91
Joysticks myJoysticks
Definition: joystickManager.h:408
const GameControllerEventHandlers & gameControllerEventHandlers() const
Definition: joystickManager.h:182
GameControllerEventType
Definition: gameControllerEvents.h:26
std::map< int, DtJoystickDevice > Joysticks
Definition: joystickManager.h:407
DtDe & myDe
Definition: joystickManager.h:405
Definition: gameControllerEvents.h:28
std::vector< DtGenericControllerEvent * > JoystickEventQueue
Definition: joystickManager.h:435
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:431
boost::signals2::signal< void(const ControllerInformation &)> signal_controllerAdded
Signal sent when a joystick is added.
Definition: joystickManager.h:218
JoysticksByGuid myJoysticksByGuid
Definition: joystickManager.h:411
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. 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: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:362
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:53
Definition: joystickManager.h:99
DtGameControllerJoystickEvent * myJoystickControllerEvent
Used for event filtering so do not have to create on stack every time.
Definition: joystickManager.h:423
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:72
virtual ~DtGameControllerEventHandler()
Definition: joystickManager.h:46
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:60
bool mySentEvent
Definition: joystickManager.h:427
ControllerInformation(const ControllerInformation &orig)
Definition: joystickManager.h:104
The makVrv::DtRecordSettingsBackupInterface provides an interface to record-based backups...
Definition: DtRecordSettingsBackup.h:24
DtRecordSettingsBackupInterface * mySettingsBackup
Definition: joystickManager.h:416
The DtEventProcessorInterface defines the generic interface for classes which handle input events...
Definition: DtEventProcessorInterface.h:34
DtUnicode controllerName
Definition: joystickManager.h:122
GameControllerEventType type
Definition: joystickManager.h:125
DtJoystickConfigurations myJoystickConfigurations
Definition: joystickManager.h:415
virtual void addRecords(DtJoystickConfigurations &recs, DtJoystickConfigurations &combinedRec)
To support writing element definitions in folders as multiple files not implemented.
Definition: joystickManager.h:367

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)