trunk/src/emu/ui/tapectrl.c
| r242767 | r242768 | |
| 2 | 2 | |
| 3 | 3 | ui/tapectrl.c |
| 4 | 4 | |
| 5 | | Tape control |
| 5 | MESS's tape control |
| 6 | 6 | |
| 7 | 7 | Copyright Nicola Salmoria and the MAME Team. |
| 8 | 8 | Visit http://mamedev.org for licensing and usage restrictions. |
| r242767 | r242768 | |
| 12 | 12 | #include "emu.h" |
| 13 | 13 | #include "ui/tapectrl.h" |
| 14 | 14 | |
| 15 | |
| 16 | |
| 15 | 17 | /*************************************************************************** |
| 16 | 18 | CONSTANTS |
| 17 | 19 | ***************************************************************************/ |
| r242767 | r242768 | |
| 21 | 23 | #define TAPECMD_PLAY ((void *) 0x0002) |
| 22 | 24 | #define TAPECMD_RECORD ((void *) 0x0003) |
| 23 | 25 | #define TAPECMD_REWIND ((void *) 0x0004) |
| 24 | | #define TAPECMD_FAST_FORWARD ((void *) 0x0005) |
| 26 | #define TAPECMD_FAST_FORWARD ((void *) 0x0005) |
| 25 | 27 | #define TAPECMD_SLIDER ((void *) 0x0006) |
| 26 | 28 | #define TAPECMD_SELECT ((void *) 0x0007) |
| 27 | 29 | |
| r242767 | r242768 | |
| 34 | 36 | // ctor |
| 35 | 37 | //------------------------------------------------- |
| 36 | 38 | |
| 37 | | ui_menu_tape_control::ui_menu_tape_control(running_machine &machine, render_container *container, cassette_image_device *device) |
| 39 | ui_menu_mess_tape_control::ui_menu_mess_tape_control(running_machine &machine, render_container *container, cassette_image_device *device) |
| 38 | 40 | : ui_menu_device_control<cassette_image_device>(machine, container, device) |
| 39 | 41 | { |
| 40 | 42 | } |
| r242767 | r242768 | |
| 44 | 46 | // dtor |
| 45 | 47 | //------------------------------------------------- |
| 46 | 48 | |
| 47 | | ui_menu_tape_control::~ui_menu_tape_control() |
| 49 | ui_menu_mess_tape_control::~ui_menu_mess_tape_control() |
| 48 | 50 | { |
| 49 | 51 | } |
| 50 | 52 | |
| r242767 | r242768 | |
| 53 | 55 | // populate - populates the main tape control menu |
| 54 | 56 | //------------------------------------------------- |
| 55 | 57 | |
| 56 | | void ui_menu_tape_control::populate() |
| 58 | void ui_menu_mess_tape_control::populate() |
| 57 | 59 | { |
| 60 | astring timepos; |
| 61 | cassette_state state; |
| 58 | 62 | UINT32 flags = 0; |
| 59 | 63 | |
| 60 | 64 | if (count() > 1) |
| 61 | 65 | { |
| 62 | | if (current_index() == (count() - 1)) |
| 66 | int index = current_index(); |
| 67 | |
| 68 | if( index == (count()-1) ) |
| 63 | 69 | flags |= MENU_FLAG_LEFT_ARROW; |
| 64 | 70 | else |
| 65 | 71 | flags |= MENU_FLAG_RIGHT_ARROW; |
| 66 | 72 | } |
| 67 | 73 | |
| 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); |
| 74 | if ((current_device() != NULL) && (current_device()->exists())) |
| 75 | { |
| 76 | double t0, t1; |
| 77 | UINT32 tapeflags = 0; |
| 72 | 78 | |
| 73 | | if (current_device()->exists()) |
| 79 | t0 = current_device()->get_position(); |
| 80 | t1 = current_device()->get_length(); |
| 81 | |
| 82 | if (t1 > 0) |
| 74 | 83 | { |
| 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); |
| 84 | if (t0 > 0) |
| 85 | tapeflags |= MENU_FLAG_LEFT_ARROW; |
| 86 | if (t0 < t1) |
| 87 | tapeflags |= MENU_FLAG_RIGHT_ARROW; |
| 117 | 88 | } |
| 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); |
| 118 | 121 | } |
| 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 | } |
| 119 | 130 | } |
| 120 | 131 | |
| 121 | 132 | |
| r242767 | r242768 | |
| 123 | 134 | // handle - main tape control menu |
| 124 | 135 | //------------------------------------------------- |
| 125 | 136 | |
| 126 | | void ui_menu_tape_control::handle() |
| 137 | void ui_menu_mess_tape_control::handle() |
| 127 | 138 | { |
| 128 | 139 | // rebuild the menu - we have to do this so that the counter updates |
| 129 | 140 | reset(UI_MENU_RESET_REMEMBER_POSITION); |
| r242767 | r242768 | |
| 136 | 147 | switch(event->iptkey) |
| 137 | 148 | { |
| 138 | 149 | case IPT_UI_LEFT: |
| 139 | | if (event->itemref == TAPECMD_SLIDER) |
| 150 | if (event->itemref==TAPECMD_SLIDER) |
| 140 | 151 | current_device()->seek(-1, SEEK_CUR); |
| 141 | | else if (event->itemref == TAPECMD_SELECT) |
| 152 | else if (event->itemref==TAPECMD_SELECT) |
| 142 | 153 | previous(); |
| 143 | 154 | break; |
| 144 | 155 | |
| 145 | 156 | case IPT_UI_RIGHT: |
| 146 | | if (event->itemref == TAPECMD_SLIDER) |
| 157 | if (event->itemref==TAPECMD_SLIDER) |
| 147 | 158 | current_device()->seek(+1, SEEK_CUR); |
| 148 | | else if (event->itemref == TAPECMD_SELECT) |
| 159 | else if (event->itemref==TAPECMD_SELECT) |
| 149 | 160 | next(); |
| 150 | 161 | break; |
| 151 | 162 | |
| 152 | 163 | case IPT_UI_SELECT: |
| 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); |
| 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 | } |
| 165 | 178 | break; |
| 166 | 179 | } |
| 167 | 180 | } |
| r242767 | r242768 | |
| 173 | 186 | // representation of the time |
| 174 | 187 | //------------------------------------------------- |
| 175 | 188 | |
| 176 | | void ui_menu_tape_control::get_time_string(astring &dest, cassette_image_device *cassette, int *curpos, int *endpos) |
| 189 | void ui_menu_mess_tape_control::get_time_string(astring &dest, cassette_image_device *cassette, int *curpos, int *endpos) |
| 177 | 190 | { |
| 178 | 191 | double t0, t1; |
| 179 | 192 | |