Previous 199869 Revisions Next

r29309 Saturday 5th April, 2014 at 11:43:23 UTC by Nathan Woods
Fixing softlist usage under new_menus
[/branches/new_menus/src/emu/ui]emenubar.c emenubar.h menubar.h swlist.c swlist.h

branches/new_menus/src/emu/ui/swlist.h
r29308r29309
1212#ifndef __UI_SWLIST_H__
1313#define __UI_SWLIST_H__
1414
15#include "softlist.h"
16
1715// ======================> ui_menu_software_parts
1816
1917class ui_menu_software_parts : public ui_menu {
2018public:
2119   enum { T_ENTRY, T_FMGR };
22   ui_menu_software_parts(running_machine &machine, render_container *container, device_image_interface *image, software_list_device *swlist, software_info *info, const char *interface, software_part **part);
20   ui_menu_software_parts(running_machine &machine, render_container *container, const software_info *info, const char *interface, const software_part **part, bool opt_fmgr, int *result);
21   virtual ~ui_menu_software_parts();
2322   virtual void populate();
2423   virtual void handle();
2524
r29308r29309
3029   };
3130
3231   // variables
33   device_image_interface *m_image;
34   software_list_device *   m_swlist;
35   software_info *         m_info;
32   const software_info *   m_info;
3633   const char *         m_interface;
37   software_part **      m_selected_part;
34   const software_part **   m_selected_part;
35   bool               m_opt_fmgr;
36   int *               m_result;
3837};
3938
4039
r29308r29309
4241
4342class ui_menu_software_list : public ui_menu {
4443public:
45   ui_menu_software_list(running_machine &machine, render_container *container, device_image_interface *image, software_list_device *swlist, const char *interface, astring &result);
44   ui_menu_software_list(running_machine &machine, render_container *container, software_list_device *swlist, const char *interface, astring &result);
4645   virtual ~ui_menu_software_list();
4746   virtual void populate();
4847   virtual void handle();
r29308r29309
5655   };
5756
5857   // variables
59   device_image_interface *      m_image;
6058   software_list_device *         m_swlist; // currently selected list
6159   const char *               m_interface;
6260   astring &                  m_result;
r29308r29309
6765   // functions
6866   int compare_entries(const entry_info *e1, const entry_info *e2, bool shortname);
6967   entry_info *append_software_entry(const software_info *swinfo);
70   void select_entry(entry_info *entry);
7168};
7269
7370
71
7472#endif  /* __UI_SWLIST_H__ */
branches/new_menus/src/emu/ui/emenubar.c
r29308r29309
3939//  MENUBAR IMPLEMENTATION
4040//**************************************************************************
4141
42astring ui_emu_menubar::s_softlist_result;
43device_image_interface *ui_emu_menubar::s_softlist_image;
44
45
4246//-------------------------------------------------
4347//  ctor
4448//-------------------------------------------------
r29308r29309
5054
5155
5256//-------------------------------------------------
57//  handle
58//-------------------------------------------------
59
60void ui_emu_menubar::handle(render_container *container)
61{
62   // check to see if we have a softlist selection
63   if (s_softlist_result.len() > 0)
64   {
65      // do the load
66      s_softlist_image->load(s_softlist_result);
67
68      // clear out state
69      s_softlist_image = NULL;
70      s_softlist_result.reset();
71   }
72
73   // call inherited method
74   ui_menubar::handle(container);
75}
76
77
78//-------------------------------------------------
5379//  start_menu
5480//-------------------------------------------------
5581
r29308r29309
554580
555581void ui_emu_menubar::select_from_software_list(device_image_interface *image, software_list_device *swlist)
556582{
557   astring result;
558   ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_software_list(machine(), container(), image, swlist, NULL, result)));
583   s_softlist_image = image;
584   machine().ui().set_handler(ui_menu::ui_handler, 0);
585   ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_software_list(machine(), container(), swlist, image->image_interface(), s_softlist_result)));
559586}
560587
561588
branches/new_menus/src/emu/ui/menubar.h
r29308r29309
136136
137137   // methods
138138   virtual void reset();
139   void handle(render_container *container);
139   virtual void handle(render_container *container);
140140
141141   // getters
142142   bool is_visible() const { return m_menubar_visibility != MENUBAR_VISIBILITY_INVISIBLE; }
branches/new_menus/src/emu/ui/emenubar.h
r29308r29309
2323public:
2424   ui_emu_menubar(running_machine &machine);
2525
26   virtual void handle(render_container *container);
27
2628protected:
2729   virtual void menubar_build_menus();
2830   virtual void menubar_draw_ui_elements();
2931
3032private:
33   // variables
34   static device_image_interface *s_softlist_image;
35   static astring s_softlist_result;
36
3137   // menubar building
3238   void build_file_menu();
3339   void build_images_menu();
branches/new_menus/src/emu/ui/swlist.c
r29308r29309
3030//  ctor
3131//-------------------------------------------------
3232
33ui_menu_software_parts::ui_menu_software_parts(running_machine &machine, render_container *container, device_image_interface *image, software_list_device *swlist, software_info *info, const char *interface, software_part **part)
33ui_menu_software_parts::ui_menu_software_parts(running_machine &machine, render_container *container, const software_info *info, const char *interface, const software_part **part, bool opt_fmgr, int *result)
3434   : ui_menu(machine, container)
3535{
36   m_image = image;
37   m_swlist = swlist;
3836   m_info = info;
3937   m_interface = interface;
4038   m_selected_part = part;
39   m_opt_fmgr = opt_fmgr;
40   m_result = result;
4141}
4242
4343
4444//-------------------------------------------------
45//  dtor
46//-------------------------------------------------
47
48ui_menu_software_parts::~ui_menu_software_parts()
49{
50}
51
52
53//-------------------------------------------------
4554//  populate
4655//-------------------------------------------------
4756
r29308r29309
6271         item_append(m_info->shortname(), menu_part_name.cstr(), 0, entry);
6372      }
6473   }
74
75   if (m_opt_fmgr)
76   {
77      software_part_menu_entry *entry = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry));
78      entry->type = T_FMGR;
79      entry->part = 0;
80      item_append("[file manager]", 0, 0, entry);
81   }
6582}
6683
6784
r29308r29309
7693
7794   if (event != NULL && event->iptkey == IPT_UI_SELECT && event->itemref != NULL)
7895   {
79      // we have the part
80       software_part_menu_entry *entry = (software_part_menu_entry *) event->itemref;
81
82      // load the image
83      astring image_name;
84      image_name.printf("%s:%s:%s", m_swlist->list_name(), m_info->shortname(), entry->part->name());
85      m_image->load(image_name);
86
87      // and exit
96      software_part_menu_entry *entry = (software_part_menu_entry *) event->itemref;
97      *m_result = entry->type;
98      *m_selected_part = entry->part;
8899      ui_menu::stack_pop(machine());
89100   }
90101}
r29308r29309
98109//  ctor
99110//-------------------------------------------------
100111
101ui_menu_software_list::ui_menu_software_list(running_machine &machine, render_container *container, device_image_interface *image, software_list_device *swlist, const char *interface, astring &result)
112ui_menu_software_list::ui_menu_software_list(running_machine &machine, render_container *container, software_list_device *swlist, const char *interface, astring &result)
102113   : ui_menu(machine, container), m_result(result)
103114{
104   m_image = image;
105115   m_swlist = swlist;
106116   m_interface = interface;
107117   m_entrylist = NULL;
r29308r29309
119129
120130
121131//-------------------------------------------------
122//  select_entry
123//-------------------------------------------------
124
125void ui_menu_software_list::select_entry(entry_info *entry)
126{
127   software_info *swi;
128   software_part *swp;
129
130   swi = m_swlist->find(entry->short_name);
131
132   if (swi->has_multiple_parts(m_interface))
133    {
134      // multi part software; need to spawn another menu
135      ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_software_parts(machine(), container, m_image, m_swlist, swi, m_interface, &swp)));
136   }
137   else
138   {
139      // single part software; just get the part
140      swp = swi->first_part();
141
142      // and load it
143      astring image_name;
144      image_name.printf("%s:%s:%s", m_swlist->list_name(), swi->shortname(), swp->name());
145      m_image->load(image_name);
146   }
147}
148
149//-------------------------------------------------
150132//  compare_entries
151133//-------------------------------------------------
152134
r29308r29309
276258      // handle selections
277259      else if (event->iptkey == IPT_UI_SELECT)
278260      {
279         // we're done (at least with this menu
280          ui_menu::stack_pop(machine());
281
282         // select this entry
283261         entry_info *entry = (entry_info *) event->itemref;
284         select_entry(entry);
262         m_result = entry->short_name;
263         ui_menu::stack_pop(machine());
285264      }
286265      else if (event->iptkey == IPT_SPECIAL)
287266      {
r29308r29309
372351         // reset the char buffer also in this case
373352         if (m_filename_buffer[0] != '\0')
374353            memset(m_filename_buffer, '\0', ARRAY_LENGTH(m_filename_buffer));
354         m_result = m_filename_buffer;
375355         ui_menu::stack_pop(machine());
376356      }
377357   }
378358}
359

Previous 199869 Revisions Next


© 1997-2024 The MAME Team