trunk/src/emu/ui/tapectrl.c
| r242766 | r242767 | |
| 2 | 2 | |
| 3 | 3 | ui/tapectrl.c |
| 4 | 4 | |
| 5 | | MESS's tape control |
| 5 | Tape control |
| 6 | 6 | |
| 7 | 7 | Copyright Nicola Salmoria and the MAME Team. |
| 8 | 8 | Visit http://mamedev.org for licensing and usage restrictions. |
| r242766 | r242767 | |
| 12 | 12 | #include "emu.h" |
| 13 | 13 | #include "ui/tapectrl.h" |
| 14 | 14 | |
| 15 | | |
| 16 | | |
| 17 | 15 | /*************************************************************************** |
| 18 | 16 | CONSTANTS |
| 19 | 17 | ***************************************************************************/ |
| r242766 | r242767 | |
| 23 | 21 | #define TAPECMD_PLAY ((void *) 0x0002) |
| 24 | 22 | #define TAPECMD_RECORD ((void *) 0x0003) |
| 25 | 23 | #define TAPECMD_REWIND ((void *) 0x0004) |
| 26 | | #define TAPECMD_FAST_FORWARD ((void *) 0x0005) |
| 24 | #define TAPECMD_FAST_FORWARD ((void *) 0x0005) |
| 27 | 25 | #define TAPECMD_SLIDER ((void *) 0x0006) |
| 28 | 26 | #define TAPECMD_SELECT ((void *) 0x0007) |
| 29 | 27 | |
| r242766 | r242767 | |
| 36 | 34 | // ctor |
| 37 | 35 | //------------------------------------------------- |
| 38 | 36 | |
| 39 | | ui_menu_mess_tape_control::ui_menu_mess_tape_control(running_machine &machine, render_container *container, cassette_image_device *device) |
| 37 | ui_menu_tape_control::ui_menu_tape_control(running_machine &machine, render_container *container, cassette_image_device *device) |
| 40 | 38 | : ui_menu_device_control<cassette_image_device>(machine, container, device) |
| 41 | 39 | { |
| 42 | 40 | } |
| r242766 | r242767 | |
| 46 | 44 | // dtor |
| 47 | 45 | //------------------------------------------------- |
| 48 | 46 | |
| 49 | | ui_menu_mess_tape_control::~ui_menu_mess_tape_control() |
| 47 | ui_menu_tape_control::~ui_menu_tape_control() |
| 50 | 48 | { |
| 51 | 49 | } |
| 52 | 50 | |
| r242766 | r242767 | |
| 55 | 53 | // populate - populates the main tape control menu |
| 56 | 54 | //------------------------------------------------- |
| 57 | 55 | |
| 58 | | void ui_menu_mess_tape_control::populate() |
| 56 | void ui_menu_tape_control::populate() |
| 59 | 57 | { |
| 60 | | astring timepos; |
| 61 | | cassette_state state; |
| 62 | 58 | UINT32 flags = 0; |
| 63 | 59 | |
| 64 | 60 | if (count() > 1) |
| 65 | 61 | { |
| 66 | | int index = current_index(); |
| 67 | | |
| 68 | | if( index == (count()-1) ) |
| 62 | if (current_index() == (count() - 1)) |
| 69 | 63 | flags |= MENU_FLAG_LEFT_ARROW; |
| 70 | 64 | else |
| 71 | 65 | flags |= MENU_FLAG_RIGHT_ARROW; |
| 72 | 66 | } |
| 73 | 67 | |
| 74 | | if ((current_device() != NULL) && (current_device()->exists())) |
| 75 | | { |
| 76 | | double t0, t1; |
| 77 | | UINT32 tapeflags = 0; |
| 68 | if (current_device()) |
| 69 | { |
| 70 | // name of tape |
| 71 | item_append(current_display_name().cstr(), current_device()->exists() ? current_device()->filename() : "No Tape Image loaded", flags, TAPECMD_SELECT); |
| 78 | 72 | |
| 79 | | t0 = current_device()->get_position(); |
| 80 | | t1 = current_device()->get_length(); |
| 81 | | |
| 82 | | if (t1 > 0) |
| 73 | if (current_device()->exists()) |
| 83 | 74 | { |
| 84 | | if (t0 > 0) |
| 85 | | tapeflags |= MENU_FLAG_LEFT_ARROW; |
| 86 | | if (t0 < t1) |
| 87 | | tapeflags |= MENU_FLAG_RIGHT_ARROW; |
| 75 | astring timepos; |
| 76 | cassette_state state; |
| 77 | double t0 = current_device()->get_position(); |
| 78 | double t1 = current_device()->get_length(); |
| 79 | UINT32 tapeflags = 0; |
| 80 | |
| 81 | // state |
| 82 | if (t1 > 0) |
| 83 | { |
| 84 | if (t0 > 0) |
| 85 | tapeflags |= MENU_FLAG_LEFT_ARROW; |
| 86 | if (t0 < t1) |
| 87 | tapeflags |= MENU_FLAG_RIGHT_ARROW; |
| 88 | } |
| 89 | |
| 90 | get_time_string(timepos, current_device(), NULL, NULL); |
| 91 | state = current_device()->get_state(); |
| 92 | item_append( |
| 93 | (state & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED |
| 94 | ? "stopped" |
| 95 | : ((state & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY |
| 96 | ? ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "playing" : "(playing)") |
| 97 | : ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "recording" : "(recording)") |
| 98 | ), |
| 99 | timepos, |
| 100 | tapeflags, |
| 101 | TAPECMD_SLIDER); |
| 102 | |
| 103 | // pause or stop |
| 104 | item_append("Pause/Stop", NULL, 0, TAPECMD_STOP); |
| 105 | |
| 106 | // play |
| 107 | item_append("Play", NULL, 0, TAPECMD_PLAY); |
| 108 | |
| 109 | // record |
| 110 | item_append("Record", NULL, 0, TAPECMD_RECORD); |
| 111 | |
| 112 | // rewind |
| 113 | item_append("Rewind", NULL, 0, TAPECMD_REWIND); |
| 114 | |
| 115 | // fast forward |
| 116 | item_append("Fast Forward", NULL, 0, TAPECMD_FAST_FORWARD); |
| 88 | 117 | } |
| 89 | | |
| 90 | | // name of tape |
| 91 | | item_append(current_device()->device().name(), current_device()->filename(), flags, TAPECMD_SELECT); |
| 92 | | |
| 93 | | // state |
| 94 | | get_time_string(timepos, current_device(), NULL, NULL); |
| 95 | | state = current_device()->get_state(); |
| 96 | | item_append( |
| 97 | | (state & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED |
| 98 | | ? "stopped" |
| 99 | | : ((state & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY |
| 100 | | ? ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "playing" : "(playing)") |
| 101 | | : ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "recording" : "(recording)") |
| 102 | | ), |
| 103 | | timepos, |
| 104 | | tapeflags, |
| 105 | | TAPECMD_SLIDER); |
| 106 | | |
| 107 | | // pause or stop |
| 108 | | item_append("Pause/Stop", NULL, 0, TAPECMD_STOP); |
| 109 | | |
| 110 | | // play |
| 111 | | item_append("Play", NULL, 0, TAPECMD_PLAY); |
| 112 | | |
| 113 | | // record |
| 114 | | item_append("Record", NULL, 0, TAPECMD_RECORD); |
| 115 | | |
| 116 | | // rewind |
| 117 | | item_append("Rewind", NULL, 0, TAPECMD_REWIND); |
| 118 | | |
| 119 | | // fast forward |
| 120 | | item_append("Fast Forward", NULL, 0, TAPECMD_FAST_FORWARD); |
| 121 | 118 | } |
| 122 | | else |
| 123 | | { |
| 124 | | // no tape loaded in this cassette device (but there could be more than one!) |
| 125 | | if (count() > 1) |
| 126 | | item_append("No Tape Image loaded", "", flags, TAPECMD_SELECT); |
| 127 | | else |
| 128 | | item_append("No Tape Image loaded", NULL, 0, NULL); |
| 129 | | } |
| 130 | 119 | } |
| 131 | 120 | |
| 132 | 121 | |
| r242766 | r242767 | |
| 134 | 123 | // handle - main tape control menu |
| 135 | 124 | //------------------------------------------------- |
| 136 | 125 | |
| 137 | | void ui_menu_mess_tape_control::handle() |
| 126 | void ui_menu_tape_control::handle() |
| 138 | 127 | { |
| 139 | 128 | // rebuild the menu - we have to do this so that the counter updates |
| 140 | 129 | reset(UI_MENU_RESET_REMEMBER_POSITION); |
| r242766 | r242767 | |
| 147 | 136 | switch(event->iptkey) |
| 148 | 137 | { |
| 149 | 138 | case IPT_UI_LEFT: |
| 150 | | if (event->itemref==TAPECMD_SLIDER) |
| 139 | if (event->itemref == TAPECMD_SLIDER) |
| 151 | 140 | current_device()->seek(-1, SEEK_CUR); |
| 152 | | else if (event->itemref==TAPECMD_SELECT) |
| 141 | else if (event->itemref == TAPECMD_SELECT) |
| 153 | 142 | previous(); |
| 154 | 143 | break; |
| 155 | 144 | |
| 156 | 145 | case IPT_UI_RIGHT: |
| 157 | | if (event->itemref==TAPECMD_SLIDER) |
| 146 | if (event->itemref == TAPECMD_SLIDER) |
| 158 | 147 | current_device()->seek(+1, SEEK_CUR); |
| 159 | | else if (event->itemref==TAPECMD_SELECT) |
| 148 | else if (event->itemref == TAPECMD_SELECT) |
| 160 | 149 | next(); |
| 161 | 150 | break; |
| 162 | 151 | |
| 163 | 152 | case IPT_UI_SELECT: |
| 164 | | { |
| 165 | | if (event->itemref==TAPECMD_STOP) |
| 166 | | current_device()->change_state(CASSETTE_STOPPED, CASSETTE_MASK_UISTATE); |
| 167 | | else if (event->itemref==TAPECMD_PLAY) |
| 168 | | current_device()->change_state(CASSETTE_PLAY, CASSETTE_MASK_UISTATE); |
| 169 | | else if (event->itemref==TAPECMD_RECORD) |
| 170 | | current_device()->change_state(CASSETTE_RECORD, CASSETTE_MASK_UISTATE); |
| 171 | | else if (event->itemref==TAPECMD_REWIND) |
| 172 | | current_device()->seek(-30, SEEK_CUR); |
| 173 | | else if (event->itemref==TAPECMD_FAST_FORWARD) |
| 174 | | current_device()->seek(30, SEEK_CUR); |
| 175 | | else if (event->itemref==TAPECMD_SLIDER) |
| 176 | | current_device()->seek(0, SEEK_SET); |
| 177 | | } |
| 153 | if (event->itemref == TAPECMD_STOP) |
| 154 | current_device()->change_state(CASSETTE_STOPPED, CASSETTE_MASK_UISTATE); |
| 155 | else if (event->itemref == TAPECMD_PLAY) |
| 156 | current_device()->change_state(CASSETTE_PLAY, CASSETTE_MASK_UISTATE); |
| 157 | else if (event->itemref == TAPECMD_RECORD) |
| 158 | current_device()->change_state(CASSETTE_RECORD, CASSETTE_MASK_UISTATE); |
| 159 | else if (event->itemref == TAPECMD_REWIND) |
| 160 | current_device()->seek(-30, SEEK_CUR); |
| 161 | else if (event->itemref == TAPECMD_FAST_FORWARD) |
| 162 | current_device()->seek(30, SEEK_CUR); |
| 163 | else if (event->itemref == TAPECMD_SLIDER) |
| 164 | current_device()->seek(0, SEEK_SET); |
| 178 | 165 | break; |
| 179 | 166 | } |
| 180 | 167 | } |
| r242766 | r242767 | |
| 186 | 173 | // representation of the time |
| 187 | 174 | //------------------------------------------------- |
| 188 | 175 | |
| 189 | | void ui_menu_mess_tape_control::get_time_string(astring &dest, cassette_image_device *cassette, int *curpos, int *endpos) |
| 176 | void ui_menu_tape_control::get_time_string(astring &dest, cassette_image_device *cassette, int *curpos, int *endpos) |
| 190 | 177 | { |
| 191 | 178 | double t0, t1; |
| 192 | 179 | |