all repos — mgba @ 10da73fcaf282b99736056a6bffb99c2f12778ba

mGBA Game Boy Advance Emulator

src/platform/qt/InputItem.h (view raw)

 1/* Copyright (c) 2013-2017 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#ifndef QGBA_INPUT_ITEM
 7#define QGBA_INPUT_ITEM
 8
 9#include "GamepadAxisEvent.h"
10#include "GamepadHatEvent.h"
11
12#include <functional>
13
14#include <QAction>
15
16#include <mgba/core/core.h>
17
18namespace QGBA {
19
20class InputItem {
21public:
22	typedef QPair<std::function<void ()>, std::function<void ()>> Functions;
23
24	InputItem(QAction* action, const QString& name, InputItem* parent = nullptr);
25	InputItem(Functions functions, int shortcut, const QString& visibleName,
26	          const QString& name, InputItem* parent = nullptr);
27	InputItem(mPlatform platform, int key, int shortcut, const QString& name, const QString& visibleName, InputItem* parent = nullptr);
28	InputItem(QMenu* action, InputItem* parent = nullptr);
29
30	QAction* action() { return m_action; }
31	const QAction* action() const { return m_action; }
32	int shortcut() const { return m_shortcut; }
33	mPlatform platform() const { return m_platform; }
34	Functions functions() const { return m_functions; }
35	int key() const { return m_keys; }
36	QMenu* menu() { return m_menu; }
37	const QMenu* menu() const { return m_menu; }
38	const QString& visibleName() const { return m_visibleName; }
39	const QString& name() const { return m_name; }
40	QList<InputItem>& items() { return m_items; }
41	const QList<InputItem>& items() const { return m_items; }
42	InputItem* parent() { return m_parent; }
43	const InputItem* parent() const { return m_parent; }
44	void addAction(QAction* action, const QString& name);
45	void addFunctions(Functions functions, int shortcut, const QString& visibleName,
46	                  const QString& name);
47	void addKey(mPlatform platform, int key, int shortcut, const QString& visibleName, const QString& name);
48	void addSubmenu(QMenu* menu);
49	int button() const { return m_button; }
50	void setShortcut(int sequence);
51	void setButton(int button) { m_button = button; }
52	int axis() const { return m_axis; }
53	GamepadAxisEvent::Direction direction() const { return m_direction; }
54	void setAxis(int axis, GamepadAxisEvent::Direction direction);
55
56	bool operator==(const InputItem& other) const {
57		return m_menu == other.m_menu && m_action == other.m_action;
58	}
59
60private:
61	QAction* m_action;
62	int m_shortcut;
63	QMenu* m_menu;
64	Functions m_functions;
65	QString m_name;
66	QString m_visibleName;
67	int m_button;
68	int m_axis;
69	int m_keys;
70	GamepadAxisEvent::Direction m_direction;
71	mPlatform m_platform;
72	QList<InputItem> m_items;
73	InputItem* m_parent;
74};
75
76}
77
78#endif