VR-Forces 4.6 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/signals.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 
53  virtual bool canProcessEvent(DtGenericControllerEvent*) const
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 
75  virtual bool filterGameControllerEvent(DtGenericControllerEvent*)
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::signal<void ()> signal_clear;
213 
215  boost::signal<void (int, int)> signal_joystickError;
216 
218  boost::signal<void (const ControllerInformation&)> signal_controllerAdded;
219 
221  boost::signal<void (int)> signal_controllerRemoved;
222 
224  boost::signal<void (const DtJoystickConfigurations&)> signal_configurationsChanged;
225  boost::signal<void (const std::string&, const DtJoystickConfigurationSettings&)> signal_settingsChanged;
226 
228  boost::signal<void (const std::string&, const std::string&)> signal_controllerInformationRemoved;
229 
231  boost::signal<void (const DtJoystickConfigurationSetting&)> signal_controllerInformationAdded;
232 
234  boost::signal<void (const std::string& functionGroup, const std::string& function,
236 
238  boost::signal<void (int, DtGenericControllerEvent*)> signal_gameControllerEvent;
239 
241  boost::signal<void (const std::string&)> signal_configurationAdded;
242 
244  boost::signal<void (const std::string&)> signal_configurationRemoved;
245 
247  boost::signal<void (const std::string& old, const std::string& renamed)> signal_configurationRenamed;
248 
250  boost::signal<void (bool)> signal_joystickManagerLockedForUpdates;
251 
253  boost::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 
290  const DtRecordSettingsBackupInterface* settingsBackup() const
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 
370  virtual void addRecords(DtJoystickConfigurations& recs,
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 }

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)