From cd9479b751ab00c29d23d1d04f8a087fd00e9317 Mon Sep 17 00:00:00 2001 From: Nathan Woods Date: Thu, 23 Jan 2014 12:43:39 +0000 Subject: Refactoring and cleanup of tapectrl.? and bbcontrl.?, created base class --- src/emu/ui/devctrl.h | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/emu/ui/devctrl.h (limited to 'src/emu/ui/devctrl.h') diff --git a/src/emu/ui/devctrl.h b/src/emu/ui/devctrl.h new file mode 100644 index 00000000000..777d837f3a9 --- /dev/null +++ b/src/emu/ui/devctrl.h @@ -0,0 +1,107 @@ +/*************************************************************************** + + ui/devctrl.h + + Device specific control (base class for tapectrl and bbcontrl) + + Copyright Nicola Salmoria and the MAME Team. + Visit http://mamedev.org for licensing and usage restrictions. + +***************************************************************************/ + +#pragma once + +#ifndef __UI_DEVCTRL_H__ +#define __UI_DEVCTRL_H__ + +template +class ui_menu_device_control : public ui_menu +{ +public: + ui_menu_device_control(running_machine &machine, render_container *container, _DeviceType *device); + +protected: + _DeviceType *current_device() { return m_device; } + int count() { return m_count; } + + int current_index(); + void previous(); + void next(); + +private: + // device iterator + typedef device_type_iterator<&device_creator<_DeviceType>, _DeviceType> device_iterator; + + _DeviceType * m_device; + int m_count; +}; + + +//------------------------------------------------- +// ctor +//------------------------------------------------- + +template +ui_menu_device_control<_DeviceType>::ui_menu_device_control(running_machine &machine, render_container *container, _DeviceType *device) + : ui_menu(machine, container) +{ + device_iterator iter(machine.root_device()); + m_device = device ? device : iter.first(); + m_count = iter.count(); +} + + +//------------------------------------------------- +// current_index +//------------------------------------------------- + +template +int ui_menu_device_control<_DeviceType>::current_index() +{ + device_iterator iter(machine().root_device()); + return iter.indexof(*m_device); +} + + +//------------------------------------------------- +// previous +//------------------------------------------------- + +template +void ui_menu_device_control<_DeviceType>::previous() +{ + // left arrow - rotate left through cassette devices + if (m_device != NULL) + { + device_iterator iter(machine().root_device()); + int index = iter.indexof(*m_device); + if (index > 0) + index--; + else + index = m_count - 1; + m_device = iter.byindex(index); + } +} + + +//------------------------------------------------- +// next +//------------------------------------------------- + +template +void ui_menu_device_control<_DeviceType>::next() +{ + // right arrow - rotate right through cassette devices + if (m_device != NULL) + { + device_iterator iter(machine().root_device()); + int index = iter.indexof(*m_device); + if (index < m_count - 1) + index++; + else + index = 0; + m_device = iter.byindex(index); + } +} + +#endif /* __UI_DEVCTRL_H__ */ -- cgit v1.2.3-70-g09d2