1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
/***************************************************************************
ui/inputmap.h
Internal menus for input mappings.
***************************************************************************/
#ifndef MAME_FRONTEND_UI_INPUTMAP_H
#define MAME_FRONTEND_UI_INPUTMAP_H
#pragma once
#include "ui/menu.h"
#include <vector>
namespace ui {
class menu_input_groups : public menu
{
public:
menu_input_groups(mame_ui_manager &mui, render_container &container);
virtual ~menu_input_groups() override;
private:
virtual void populate(float &customtop, float &custombottom) override;
virtual void handle() override;
};
class menu_input : public menu
{
public:
virtual ~menu_input() override;
protected:
enum {
INPUT_TYPE_DIGITAL = 0,
INPUT_TYPE_ANALOG = 1,
INPUT_TYPE_ANALOG_DEC = INPUT_TYPE_ANALOG + SEQ_TYPE_DECREMENT,
INPUT_TYPE_ANALOG_INC = INPUT_TYPE_ANALOG + SEQ_TYPE_INCREMENT,
INPUT_TYPE_TOTAL = INPUT_TYPE_ANALOG + SEQ_TYPE_TOTAL
};
// internal input menu item data
struct input_item_data
{
const void * ref = nullptr; // reference to type description for global inputs or field for game inputs
input_seq_type seqtype = SEQ_TYPE_INVALID; // sequence type
input_seq seq; // copy of the live sequence
const input_seq * defseq = nullptr; // pointer to the default sequence
const char * name = nullptr; // pointer to the base name of the item
const char * owner_name = nullptr; // pointer to the name of the owner of the item
ioport_group group = IPG_INVALID; // group type
uint8_t type = 0U; // type of port
bool is_optional = false; // true if this input is considered optional
};
using data_vector = std::vector<input_item_data>;
menu_input(mame_ui_manager &mui, render_container &container);
void populate_sorted();
void toggle_none_default(input_seq &selected_seq, input_seq &original_seq, const input_seq &selected_defseq);
data_vector data;
input_item_data * pollingitem;
private:
input_item_data * lastitem;
bool record_next;
input_seq starting_seq;
virtual void handle() override;
virtual void update_input(struct input_item_data *seqchangeditem) = 0;
};
class menu_input_general : public menu_input
{
public:
menu_input_general(mame_ui_manager &mui, render_container &container, int group);
virtual ~menu_input_general() override;
private:
virtual void populate(float &customtop, float &custombottom) override;
virtual void update_input(struct input_item_data *seqchangeditem) override;
const int group;
};
class menu_input_specific : public menu_input
{
public:
menu_input_specific(mame_ui_manager &mui, render_container &container);
virtual ~menu_input_specific() override;
private:
virtual void populate(float &customtop, float &custombottom) override;
virtual void update_input(struct input_item_data *seqchangeditem) override;
};
} // namespace ui
#endif // MAME_FRONTEND_UI_INPUTMAP_H
|