summaryrefslogblamecommitdiffstatshomepage
path: root/src/frontend/mame/ui/inputmap.h
blob: ef14ef9b064865582f99b573fd52fa89a5ae067a (plain) (tree)
1
2
3
4
5
6
7
8

                                                               





                                                                            



                                                                            

                                   
 






                                     
       

                                                                             

                                         

  

                              
       

                                                                      
                                       










                                                                               

                              



























                                                                                                                                      

                                            
       

                                                                                         
                                         


                  
                                                                                   

  

                                             
       

                                                                               
                                         

          
                                                                                   

  

                                 
       

                                                                                      

                                         


                                   

                             










                                          

                                                       
       

                                                                                      
 
                                                                                                                              



                                                                                                                       

                                                        
       

                                                                                       

  

                               
       

                                                                       

                                         



















                                             


                                         
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
/***************************************************************************

    ui/inputmap.h

    Internal menus for input mappings.

***************************************************************************/

#pragma once

#ifndef MAME_FRONTEND_UI_INPUTMAP_H
#define MAME_FRONTEND_UI_INPUTMAP_H

#include "ui/menu.h"


namespace ui {

class menu_input_groups : public menu
{
public:
	menu_input_groups(mame_ui_manager &mui, render_container *container);
	virtual ~menu_input_groups() override;
	virtual void populate() override;
	virtual void handle() override;
};

class menu_input : public menu
{
public:
	menu_input(mame_ui_manager &mui, render_container *container);
	virtual ~menu_input() override;
	virtual void handle() 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
	{
		input_item_data *   next;               /* pointer to next item in the list */
		const void *        ref;                /* reference to type description for global inputs or field for game inputs */
		input_seq_type      seqtype;            /* sequence type */
		input_seq           seq;                /* copy of the live sequence */
		const input_seq *   defseq;             /* pointer to the default sequence */
		const char *        name;               /* pointer to the base name of the item */
		const char *        owner_name;         /* pointer to the name of the owner of the item */
		UINT32              sortorder;          /* sorting information */
		UINT8               type;               /* type of port */
	};

	void populate_and_sort(struct input_item_data *itemlist);
	virtual void update_input(struct input_item_data *seqchangeditem) = 0;
	void toggle_none_default(input_seq &selected_seq, input_seq &original_seq, const input_seq &selected_defseq);

protected:
	const void *        pollingref;
	input_seq_type      pollingseq;
	input_item_data *   pollingitem;

private:
	UINT16              last_sortorder;
	bool                record_next;
	input_seq           starting_seq;

	static int compare_items(const void *i1, const void *i2);
};

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;
	virtual void populate() override;

protected:
	int group;
	virtual void update_input(struct input_item_data *seqchangeditem) override;
};

class menu_input_specific : public menu_input
{
public:
	menu_input_specific(mame_ui_manager &mui, render_container *container);
	virtual ~menu_input_specific() override;
	virtual void populate() override;

protected:
	virtual void update_input(struct input_item_data *seqchangeditem) override;
};

class menu_settings : public menu
{
public:
	menu_settings(mame_ui_manager &mui, render_container *container, UINT32 type);
	virtual ~menu_settings() override;
	virtual void populate() override;
	virtual void handle() override;

protected:
	/* DIP switch descriptor */
	struct dip_descriptor
	{
		dip_descriptor *    next;
		const char *        name;
		UINT32              mask;
		UINT32              state;
	};

	dip_descriptor *    diplist;
	int dipcount;
	int type;
};

class menu_settings_dip_switches : public menu_settings
{
public:
	menu_settings_dip_switches(mame_ui_manager &mui, render_container *container);
	virtual ~menu_settings_dip_switches() override;

	virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
private:
	void custom_render_one(float x1, float y1, float x2, float y2, const dip_descriptor *dip, UINT32 selectedmask);
};

class menu_settings_driver_config : public menu_settings
{
public:
	menu_settings_driver_config(mame_ui_manager &mui, render_container *container);
	virtual ~menu_settings_driver_config();
};

class menu_analog : public menu
{
public:
	menu_analog(mame_ui_manager &mui, render_container *container);
	virtual ~menu_analog() override;
	virtual void populate() override;
	virtual void handle() override;

private:
	enum {
		ANALOG_ITEM_KEYSPEED = 0,
		ANALOG_ITEM_CENTERSPEED,
		ANALOG_ITEM_REVERSE,
		ANALOG_ITEM_SENSITIVITY,
		ANALOG_ITEM_COUNT
	};

	/* internal analog menu item data */
	struct analog_item_data {
		ioport_field *field;
		int                 type;
		int                 min, max;
		int                 cur;
		int                 defvalue;
	};
};

} // namesapce ui

#endif  /* MAME_FRONTEND_UI_INPUTMAP_H */