summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h
diff options
context:
space:
mode:
authorMat M <mathew1800@gmail.com>2017-02-10 13:50:33 -0500
committerGitHub <noreply@github.com>2017-02-10 13:50:33 -0500
commitf6d364e37b35c7743d64cade8e7367457b372dfc (patch)
tree584416b87bbc0589a8541cf2236dfc960c052664 /Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h
parent8f81051df3df66a9647dbaeab8273dba7127a5c7 (diff)
parent6a75ea5653ec596b1a08e985e98fca0b05ccd6f7 (diff)
Merge pull request #4873 from lioncash/controller-emu
ControllerEmu: Separate ControlGroup from ControllerEmu
Diffstat (limited to 'Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h')
-rw-r--r--Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h
new file mode 100644
index 0000000000..68eacb6e02
--- /dev/null
+++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h
@@ -0,0 +1,117 @@
+// Copyright 2017 Dolphin Emulator Project
+// Licensed under GPLv2+
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "Common/CommonTypes.h"
+#include "Common/IniFile.h"
+#include "Core/ConfigManager.h"
+#include "InputCommon/ControllerInterface/Device.h"
+
+namespace ControllerEmu
+{
+class Control;
+
+enum
+{
+ GROUP_TYPE_OTHER,
+ GROUP_TYPE_STICK,
+ GROUP_TYPE_MIXED_TRIGGERS,
+ GROUP_TYPE_BUTTONS,
+ GROUP_TYPE_FORCE,
+ GROUP_TYPE_EXTENSION,
+ GROUP_TYPE_TILT,
+ GROUP_TYPE_CURSOR,
+ GROUP_TYPE_TRIGGERS,
+ GROUP_TYPE_SLIDER
+};
+
+class ControlGroup
+{
+public:
+ enum class SettingType
+ {
+ NORMAL, // normal settings are saved to configuration files
+ VIRTUAL, // virtual settings are not saved at all
+ };
+
+ class NumericSetting
+ {
+ public:
+ NumericSetting(const std::string& setting_name, const ControlState default_value,
+ const u32 low = 0, const u32 high = 100,
+ const SettingType setting_type = SettingType::NORMAL)
+ : m_type(setting_type), m_name(setting_name), m_default_value(default_value), m_low(low),
+ m_high(high)
+ {
+ }
+
+ ControlState GetValue() const { return m_value; }
+ void SetValue(ControlState value) { m_value = value; }
+ const SettingType m_type;
+ const std::string m_name;
+ const ControlState m_default_value;
+ const u32 m_low;
+ const u32 m_high;
+ ControlState m_value;
+ };
+
+ class BooleanSetting
+ {
+ public:
+ BooleanSetting(const std::string& setting_name, const bool default_value,
+ const SettingType setting_type = SettingType::NORMAL)
+ : m_type(setting_type), m_name(setting_name), m_default_value(default_value)
+ {
+ }
+ virtual ~BooleanSetting();
+
+ virtual bool GetValue() const { return m_value; }
+ virtual void SetValue(bool value) { m_value = value; }
+ const SettingType m_type;
+ const std::string m_name;
+ const bool m_default_value;
+ bool m_value;
+ };
+
+ class BackgroundInputSetting : public BooleanSetting
+ {
+ public:
+ BackgroundInputSetting(const std::string& setting_name)
+ : BooleanSetting(setting_name, false, SettingType::VIRTUAL)
+ {
+ }
+
+ bool GetValue() const override { return SConfig::GetInstance().m_BackgroundInput; }
+ void SetValue(bool value) override
+ {
+ m_value = value;
+ SConfig::GetInstance().m_BackgroundInput = value;
+ }
+ };
+
+ explicit ControlGroup(const std::string& name, u32 type = GROUP_TYPE_OTHER);
+ ControlGroup(const std::string& name, const std::string& ui_name, u32 type = GROUP_TYPE_OTHER);
+ virtual ~ControlGroup();
+
+ virtual void LoadConfig(IniFile::Section* sec, const std::string& defdev = "",
+ const std::string& base = "");
+ virtual void SaveConfig(IniFile::Section* sec, const std::string& defdev = "",
+ const std::string& base = "");
+
+ void SetControlExpression(int index, const std::string& expression);
+
+ const std::string name;
+ const std::string ui_name;
+ const u32 type;
+
+ std::vector<std::unique_ptr<Control>> controls;
+ std::vector<std::unique_ptr<NumericSetting>> numeric_settings;
+ std::vector<std::unique_ptr<BooleanSetting>> boolean_settings;
+};
+} // namespace ControllerEmu