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 <QAction>
13
14#include <mgba/core/core.h>
15
16namespace QGBA {
17
18class InputItem {
19public:
20 typedef QPair<std::function<void ()>, std::function<void ()>> Functions;
21
22 InputItem(QAction* action, const QString& name, InputItem* parent = nullptr);
23 InputItem(Functions functions, int shortcut, const QString& visibleName,
24 const QString& name, InputItem* parent = nullptr);
25 InputItem(mPlatform platform, int key, int shortcut, const QString& name, const QString& visibleName, InputItem* parent = nullptr);
26 InputItem(QMenu* action, InputItem* parent = nullptr);
27
28 QAction* action() { return m_action; }
29 const QAction* action() const { return m_action; }
30 int shortcut() const { return m_shortcut; }
31 mPlatform platform() const { return m_platform; }
32 Functions functions() const { return m_functions; }
33 int key() const { return m_keys; }
34 QMenu* menu() { return m_menu; }
35 const QMenu* menu() const { return m_menu; }
36 const QString& visibleName() const { return m_visibleName; }
37 const QString& name() const { return m_name; }
38 QList<InputItem>& items() { return m_items; }
39 const QList<InputItem>& items() const { return m_items; }
40 InputItem* parent() { return m_parent; }
41 const InputItem* parent() const { return m_parent; }
42 void addAction(QAction* action, const QString& name);
43 void addFunctions(Functions functions, int shortcut, const QString& visibleName,
44 const QString& name);
45 void addKey(mPlatform platform, int key, int shortcut, const QString& visibleName, const QString& name);
46 void addSubmenu(QMenu* menu);
47 int button() const { return m_button; }
48 void setShortcut(int sequence);
49 void setButton(int button) { m_button = button; }
50 int axis() const { return m_axis; }
51 GamepadAxisEvent::Direction direction() const { return m_direction; }
52 void setAxis(int axis, GamepadAxisEvent::Direction direction);
53
54 bool operator==(const InputItem& other) const {
55 return m_menu == other.m_menu && m_action == other.m_action;
56 }
57
58private:
59 QAction* m_action;
60 int m_shortcut;
61 QMenu* m_menu;
62 Functions m_functions;
63 QString m_name;
64 QString m_visibleName;
65 int m_button;
66 int m_axis;
67 int m_keys;
68 GamepadAxisEvent::Direction m_direction;
69 mPlatform m_platform;
70 QList<InputItem> m_items;
71 InputItem* m_parent;
72};
73
74}
75
76#endif