Subversion Repositories svn.mios32

Rev

Rev 2092 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2092 tk 1
// $Id: seq_ui_trkinst.c 2635 2019-01-06 17:14:01Z tk $
2
/*
3
 * Track instrument page
4
 *
5
 * ==========================================================================
6
 *
7
 *  Copyright (C) 2008 Thorsten Klose (tk@midibox.org)
8
 *  Licensed for personal non-commercial use only.
9
 *  All other rights reserved.
10
 *
11
 * ==========================================================================
12
 */
13
 
14
/////////////////////////////////////////////////////////////////////////////
15
// Include files
16
/////////////////////////////////////////////////////////////////////////////
17
 
18
#include <mios32.h>
19
#include <string.h>
20
 
21
#include "tasks.h"
22
 
23
#include "seq_lcd.h"
24
#include "seq_ui.h"
25
#include "seq_cc.h"
26
#include "seq_par.h"
27
#include "seq_trg.h"
28
#include "seq_layer.h"
29
#include "seq_label.h"
30
#include "seq_midi_port.h"
31
#include "seq_midi_in.h"
32
 
33
#include "file.h"
34
#include "seq_file.h"
35
#include "seq_file_t.h"
36
 
37
 
38
/////////////////////////////////////////////////////////////////////////////
39
// Local definitions
40
/////////////////////////////////////////////////////////////////////////////
41
 
42
// Note/Chord/CC
43
#define NUM_OF_ITEMS        9
44
#define ITEM_GXTY           0
45
#define ITEM_MIDI_PORT      1
46
#define ITEM_MIDI_CHANNEL   2
47
#define ITEM_MIDI_PC        3
48
#define ITEM_MIDI_BANK_H    4
49
#define ITEM_MIDI_BANK_L    5
50
#define ITEM_TRKEVNT        6
51
#define ITEM_EDIT_NAME      7
52
#define ITEM_LAYER_SELECT   8
53
 
54
 
55
// Preset dialog screens
56
#define PR_DIALOG_NONE          0
57
#define PR_DIALOG_EDIT_LABEL    1
58
 
59
 
60
/////////////////////////////////////////////////////////////////////////////
61
// Local variables
62
/////////////////////////////////////////////////////////////////////////////
63
 
64
static u8 pr_dialog;
65
 
66
 
67
/////////////////////////////////////////////////////////////////////////////
68
// Local LED handler function
69
/////////////////////////////////////////////////////////////////////////////
70
static s32 LED_Handler(u16 *gp_leds)
71
{
72
  if( ui_cursor_flash ) // if flashing flag active: no LED flag set
73
    return 0;
74
 
75
  u8 event_mode = SEQ_CC_Get(SEQ_UI_VisibleTrackGet(), SEQ_CC_MIDI_EVENT_MODE);
76
 
77
  switch( pr_dialog ) {
78
    case PR_DIALOG_EDIT_LABEL:
79
      // no LED functions yet
80
      break;
81
 
82
    default:
83
      switch( ui_selected_item ) {
84
      case ITEM_GXTY: *gp_leds = 0x0001; break;
85
      case ITEM_MIDI_PORT: *gp_leds = 0x0002; break;
86
      case ITEM_MIDI_CHANNEL: *gp_leds = 0x0004; break;
87
      case ITEM_MIDI_PC: *gp_leds = 0x0008; break;
88
      case ITEM_MIDI_BANK_H: *gp_leds = 0x0010; break;
89
      case ITEM_MIDI_BANK_L: *gp_leds = 0x0020; break;
90
      case ITEM_EDIT_NAME: *gp_leds = (event_mode == SEQ_EVENT_MODE_Drum) ? 0x0900 : 0xf900; break;
91
      case ITEM_LAYER_SELECT: *gp_leds = (event_mode == SEQ_EVENT_MODE_Drum) ? 0x0a00 : 0xfa00; break;
92
      }
93
  }
94
 
95
  return 0; // no error
96
}
97
 
98
 
99
/////////////////////////////////////////////////////////////////////////////
100
// Local encoder callback function
101
// Should return:
102
//   1 if value has been changed
103
//   0 if value hasn't been changed
104
//  -1 if invalid or unsupported encoder
105
/////////////////////////////////////////////////////////////////////////////
106
static s32 Encoder_Handler(seq_ui_encoder_t encoder, s32 incrementer)
107
{
108
  u8 visible_track = SEQ_UI_VisibleTrackGet();
109
  u8 event_mode = SEQ_CC_Get(visible_track, SEQ_CC_MIDI_EVENT_MODE);
110
 
111
  switch( pr_dialog ) {
112
    ///////////////////////////////////////////////////////////////////////////
113
    case PR_DIALOG_EDIT_LABEL:
114
      if( encoder <= SEQ_UI_ENCODER_GP16 ) {
115
    switch( encoder ) {
116
      case SEQ_UI_ENCODER_GP15: { // select preset
117
        int pos;
118
 
119
        if( event_mode == SEQ_EVENT_MODE_Drum ) {
120
          if( SEQ_UI_Var8_Inc(&ui_edit_preset_num_drum, 0, SEQ_LABEL_NumPresetsDrum()-1, incrementer) ) {
2635 tk 121
        u8 note = 36;
122
        SEQ_LABEL_CopyPresetDrum(ui_edit_preset_num_drum, (char *)&seq_core_trk[visible_track].name[5*ui_selected_instrument], &note);
123
 
124
        SEQ_LAYER_PresetDrumNoteSet(ui_edit_preset_num_drum, note); // define new default value for drum
125
 
126
        // new: also pass to CC
127
        SEQ_CC_Set(visible_track, SEQ_CC_LAY_CONST_A1 + ui_selected_instrument, note);
128
 
2092 tk 129
        for(pos=4, ui_edit_name_cursor=pos; pos>=0; --pos)
130
          if( seq_core_trk[visible_track].name[5*ui_selected_instrument + pos] == ' ' )
131
            ui_edit_name_cursor = pos;
132
          else
133
            break;
134
        return 1;
135
          }
136
          return 0;
137
        } else {
138
          if( ui_edit_name_cursor < 5 ) { // select category preset
139
        if( SEQ_UI_Var8_Inc(&ui_edit_preset_num_category, 0, SEQ_LABEL_NumPresetsCategory()-1, incrementer) ) {
140
          SEQ_LABEL_CopyPresetCategory(ui_edit_preset_num_category, (char *)&seq_core_trk[visible_track].name[0]);
141
          for(pos=4, ui_edit_name_cursor=pos; pos>=0; --pos)
142
            if( seq_core_trk[visible_track].name[pos] == ' ' )
143
              ui_edit_name_cursor = pos;
144
            else
145
              break;
146
          return 1;
147
        }
148
        return 0;
149
          } else { // select label preset
150
        if( SEQ_UI_Var8_Inc(&ui_edit_preset_num_label, 0, SEQ_LABEL_NumPresets()-1, incrementer) ) {
151
          SEQ_LABEL_CopyPreset(ui_edit_preset_num_label, (char *)&seq_core_trk[visible_track].name[5]);
152
          for(pos=19, ui_edit_name_cursor=pos; pos>=5; --pos)
153
            if( seq_core_trk[visible_track].name[pos] == ' ' )
154
              ui_edit_name_cursor = pos;
155
            else
156
              break;
157
          return 1;
158
        }
159
        return 0;
160
          }
161
        }
162
      } break;
163
 
164
      case SEQ_UI_ENCODER_GP16: // exit keypad editor
165
        // EXIT only via button
166
        if( incrementer == 0 ) {
167
          ui_selected_item = 0;
168
          pr_dialog = PR_DIALOG_NONE;
169
        }
170
        return 1;
171
    }
172
 
173
    if( event_mode == SEQ_EVENT_MODE_Drum )
174
      return SEQ_UI_KeyPad_Handler(encoder, incrementer, (char *)&seq_core_trk[visible_track].name[ui_selected_instrument*5], 5);
175
    else
176
      return SEQ_UI_KeyPad_Handler(encoder, incrementer, (char *)&seq_core_trk[visible_track].name, 20);
177
      }
178
 
179
      return -1; // encoder not mapped
180
 
181
    ///////////////////////////////////////////////////////////////////////////
182
    default:
183
 
184
      switch( encoder ) {
185
      case SEQ_UI_ENCODER_GP1:
186
    ui_selected_item = ITEM_GXTY;
187
    break;
188
 
189
      case SEQ_UI_ENCODER_GP2:
190
    ui_selected_item = ITEM_MIDI_PORT;
191
    break;
192
 
193
      case SEQ_UI_ENCODER_GP3:
194
    ui_selected_item = ITEM_MIDI_CHANNEL;
195
    break;
196
 
197
      case SEQ_UI_ENCODER_GP4:
198
    ui_selected_item = ITEM_MIDI_PC;
199
    break;
200
 
201
      case SEQ_UI_ENCODER_GP5:
202
    ui_selected_item = ITEM_MIDI_BANK_H;
203
    break;
204
 
205
      case SEQ_UI_ENCODER_GP6:
206
    ui_selected_item = ITEM_MIDI_BANK_L;
207
    break;
208
 
209
      case SEQ_UI_ENCODER_GP8:
210
    // enter track event page if button has been pressed
211
    if( incrementer == 0 )
212
      SEQ_UI_PageSet(SEQ_UI_PAGE_TRKEVNT);
213
    else
214
      ui_selected_item = ITEM_LAYER_SELECT;
215
    return 1;
216
 
217
      case SEQ_UI_ENCODER_GP9:
218
    ui_selected_item = ITEM_EDIT_NAME;
219
    break;
220
 
221
      case SEQ_UI_ENCODER_GP10:
222
    ui_selected_item = (event_mode == SEQ_EVENT_MODE_Drum) ? ITEM_LAYER_SELECT : ITEM_EDIT_NAME;
223
    break;
224
 
225
      case SEQ_UI_ENCODER_GP11:
226
      case SEQ_UI_ENCODER_GP12:
227
      case SEQ_UI_ENCODER_GP13:
228
      case SEQ_UI_ENCODER_GP14:
229
      case SEQ_UI_ENCODER_GP15:
230
      case SEQ_UI_ENCODER_GP16:
231
    ui_selected_item = ITEM_EDIT_NAME;
232
    break;
233
      }
234
 
235
      // for GP encoders and Datawheel
236
      switch( ui_selected_item ) {
237
      case ITEM_GXTY: return SEQ_UI_GxTyInc(incrementer);
238
 
239
      case ITEM_MIDI_PORT: {
240
    mios32_midi_port_t port = SEQ_CC_Get(visible_track, SEQ_CC_MIDI_PORT);
241
    u8 port_ix = SEQ_MIDI_PORT_OutIxGet(port);
242
    if( SEQ_UI_Var8_Inc(&port_ix, 0, SEQ_MIDI_PORT_OutNumGet()-1, incrementer) ) {
243
      mios32_midi_port_t new_port = SEQ_MIDI_PORT_OutPortGet(port_ix);
244
      SEQ_UI_CC_Set(SEQ_CC_MIDI_PORT, new_port);
245
      return 1; // value changed
246
    }
247
    return 0; // value not changed
248
      } break;
249
 
250
      case ITEM_MIDI_CHANNEL: return SEQ_UI_CC_Inc(SEQ_CC_MIDI_CHANNEL, 0, 15, incrementer);
251
 
252
      case ITEM_MIDI_PC: {
253
    if( SEQ_UI_CC_Inc(SEQ_CC_MIDI_PC, 0, 128, incrementer) >= 0 ) {
254
      MUTEX_MIDIOUT_TAKE;
255
      SEQ_LAYER_SendPCBankValues(visible_track, 1, 1);
256
      MUTEX_MIDIOUT_GIVE;
257
      return 1; // value changed
258
    }
259
    return 0; // value not changed
260
      }
261
 
262
      case ITEM_MIDI_BANK_H: {
263
    if( SEQ_UI_CC_Inc(SEQ_CC_MIDI_BANK_H, 0, 128, incrementer) >= 0 ) {
264
      MUTEX_MIDIOUT_TAKE;
265
      SEQ_LAYER_SendPCBankValues(visible_track, 1, 1);
266
      MUTEX_MIDIOUT_GIVE;
267
      return 1; // value changed
268
    }
269
    return 0; // value not changed
270
      }
271
 
272
      case ITEM_MIDI_BANK_L: {
273
    if( SEQ_UI_CC_Inc(SEQ_CC_MIDI_BANK_L, 0, 128, incrementer) >= 0 ) {
274
      MUTEX_MIDIOUT_TAKE;
275
      SEQ_LAYER_SendPCBankValues(visible_track, 1, 1);
276
      MUTEX_MIDIOUT_GIVE;
277
      return 1; // value changed
278
    }
279
    return 0; // value not changed
280
      }
281
 
282
      case ITEM_EDIT_NAME:
283
    // switch to keypad editor if button has been pressed
284
    if( incrementer == 0 ) {
285
      ui_selected_item = 0;
286
      pr_dialog = PR_DIALOG_EDIT_LABEL;
287
      SEQ_UI_KeyPad_Init();
288
      ui_edit_name_cursor = (event_mode != SEQ_EVENT_MODE_Drum && encoder >= SEQ_UI_ENCODER_GP13) ? 5 : 0;
289
    }
290
    return 1;
291
 
292
      case ITEM_LAYER_SELECT: {
293
    if( event_mode == SEQ_EVENT_MODE_Drum ) {
294
      return SEQ_UI_Var8_Inc(&ui_selected_instrument, 0, SEQ_TRG_NumInstrumentsGet(visible_track)-1, incrementer);
295
    } else {
296
      return 1;
297
    }
298
      } break;
299
      }
300
  }
301
 
302
  return -1; // invalid or unsupported encoder
303
}
304
 
305
 
306
/////////////////////////////////////////////////////////////////////////////
307
// Local button callback function
308
// Should return:
309
//   1 if value has been changed
310
//   0 if value hasn't been changed
311
//  -1 if invalid or unsupported button
312
/////////////////////////////////////////////////////////////////////////////
313
static s32 Button_Handler(seq_ui_button_t button, s32 depressed)
314
{
315
  if( depressed ) return 0; // ignore when button depressed
316
 
317
  if( button <= SEQ_UI_BUTTON_GP16 )
318
    return Encoder_Handler(button, 0); // re-use encoder handler
319
 
320
  switch( pr_dialog ) {
321
    ///////////////////////////////////////////////////////////////////////////
322
    case PR_DIALOG_EDIT_LABEL:
323
      break;
324
 
325
    ///////////////////////////////////////////////////////////////////////////
326
    default:
327
      switch( button ) {
328
        case SEQ_UI_BUTTON_Select:
329
        case SEQ_UI_BUTTON_Right:
330
      if( ++ui_selected_item >= NUM_OF_ITEMS )
331
        ui_selected_item = 0;
332
 
333
      return 1; // value always changed
334
 
335
        case SEQ_UI_BUTTON_Left:
336
      if( ui_selected_item == 0 )
337
        ui_selected_item = NUM_OF_ITEMS-1;
338
      else
339
        --ui_selected_item;
340
      return 1; // value always changed
341
 
342
        case SEQ_UI_BUTTON_Up:
343
      return Encoder_Handler(SEQ_UI_ENCODER_Datawheel, 1);
344
 
345
        case SEQ_UI_BUTTON_Down:
346
      return Encoder_Handler(SEQ_UI_ENCODER_Datawheel, -1);
347
      }
348
  }
349
 
350
  if( depressed )
351
    return 0; // ignore when button depressed
352
 
353
  switch( button ) {
354
  case SEQ_UI_BUTTON_Exit:
355
    if( pr_dialog != PR_DIALOG_NONE ) {
356
      // switch to main dialog
357
      pr_dialog = PR_DIALOG_NONE;
358
      ui_selected_item = 0;
359
      return 1;
360
    }
361
    break;
362
  }
363
 
364
  return -1; // invalid or unsupported button
365
}
366
 
367
 
368
/////////////////////////////////////////////////////////////////////////////
369
// Local Display Handler function
370
// IN: <high_prio>: if set, a high-priority LCD update is requested
371
/////////////////////////////////////////////////////////////////////////////
372
static s32 LCD_Handler(u8 high_prio)
373
{
374
  if( high_prio )
375
    return 0; // there are no high-priority updates
376
 
377
  // layout:
378
  // 00000000001111111111222222222233333333330000000000111111111122222222223333333333
379
  // 01234567890123456789012345678901234567890123456789012345678901234567890123456789
380
  // <--------------------------------------><-------------------------------------->
381
  // Trk. Port Chn.  PC  BnkH BnkL      Trk. Edit                                    
382
  // G1T1 IIC2  12  ---  ---  ---       Evnt Name           xxxxx-xxxxxxxxxxxxxxx    
383
 
384
  // "Edit Name" layout:
385
  // 00000000001111111111222222222233333333330000000000111111111122222222223333333333
386
  // 01234567890123456789012345678901234567890123456789012345678901234567890123456789
387
  // <--------------------------------------><-------------------------------------->
388
  // Please enter Track Category for G1T1    <xxxxx-xxxxxxxxxxxxxxx>                 
389
  // .,!1 ABC2 DEF3 GHI4 JKL5 MNO6 PQRS7 TUV8WXYZ9 -_ 0  Char <>  Del Ins Preset DONE
390
 
391
  // "Edit Drum Name" layout:
392
  // 00000000001111111111222222222233333333330000000000111111111122222222223333333333
393
  // 01234567890123456789012345678901234567890123456789012345678901234567890123456789
394
  // <--------------------------------------><-------------------------------------->
395
  // Please enter Drum Label for G1T1- 1:C-1 <xxxxx>                                 
396
  // .,!1 ABC2 DEF3 GHI4 JKL5 MNO6 PQRS7 TUV8WXYZ9 -_ 0  Char <>  Del Ins Preset DONE
397
 
398
 
399
  u8 visible_track = SEQ_UI_VisibleTrackGet();
400
  u8 event_mode = SEQ_CC_Get(visible_track, SEQ_CC_MIDI_EVENT_MODE);
401
 
402
 
403
  switch( pr_dialog ) {
404
    ///////////////////////////////////////////////////////////////////////////
405
    case PR_DIALOG_EDIT_LABEL: {
406
      int i;
407
 
408
      SEQ_LCD_CursorSet(0, 0);
409
      if( event_mode == SEQ_EVENT_MODE_Drum ) {
410
    SEQ_LCD_PrintString("Please enter Drum Label for ");
411
    SEQ_LCD_PrintGxTy(ui_selected_group, ui_selected_tracks);
412
    SEQ_LCD_PrintFormattedString("-%2d:", ui_selected_instrument + 1);
413
    SEQ_LCD_PrintNote(SEQ_CC_Get(visible_track, SEQ_CC_LAY_CONST_A1 + ui_selected_instrument));
414
    SEQ_LCD_PrintSpaces(1);
415
 
416
    SEQ_LCD_PrintChar('<');
417
    for(i=0; i<5; ++i)
418
      SEQ_LCD_PrintChar(seq_core_trk[visible_track].name[5*ui_selected_instrument + i]);
419
    SEQ_LCD_PrintChar('>');
420
    SEQ_LCD_PrintSpaces(33);
421
 
422
    // insert flashing cursor
423
    if( ui_cursor_flash ) {
424
      if( ui_edit_name_cursor >= 5 ) // correct cursor position if it is outside the 5 char label space
425
        ui_edit_name_cursor = 0;
426
      SEQ_LCD_CursorSet(41 + ui_edit_name_cursor, 0);
427
      SEQ_LCD_PrintChar('*');
428
    }
429
      } else {
430
    if( ui_edit_name_cursor < 5 ) {
431
      SEQ_LCD_PrintString("Please enter Track Category for ");
432
      SEQ_LCD_PrintGxTy(ui_selected_group, ui_selected_tracks);
433
      SEQ_LCD_PrintSpaces(4);
434
    } else {
435
      SEQ_LCD_PrintString("Please enter Track Label for ");
436
      SEQ_LCD_PrintGxTy(ui_selected_group, ui_selected_tracks);
437
      SEQ_LCD_PrintSpaces(7);
438
    }
439
    SEQ_LCD_PrintChar('<');
440
    for(i=0; i<5; ++i)
441
      SEQ_LCD_PrintChar(seq_core_trk[visible_track].name[i]);
442
    SEQ_LCD_PrintChar('-');
443
    for(i=5; i<20; ++i)
444
      SEQ_LCD_PrintChar(seq_core_trk[visible_track].name[i]);
445
    SEQ_LCD_PrintChar('>');
446
    SEQ_LCD_PrintSpaces(17);
447
      }
448
 
449
 
450
      // insert flashing cursor
451
      if( ui_cursor_flash ) {
452
    SEQ_LCD_CursorSet(40 + ((ui_edit_name_cursor < 5) ? 1 : 2) + ui_edit_name_cursor, 0);
453
    SEQ_LCD_PrintChar('*');
454
      }
455
 
456
      SEQ_UI_KeyPad_LCD_Msg();
457
      SEQ_LCD_PrintString("Preset DONE");
458
    } break;
459
 
460
 
461
    ///////////////////////////////////////////////////////////////////////////
462
    default:
463
 
464
      SEQ_LCD_CursorSet(0, 0);
465
 
466
      SEQ_LCD_PrintString("Trk. Port Chn.  PC  BnkH BnkL      Trk. ");
467
      if( ui_selected_item == ITEM_EDIT_NAME && ui_cursor_flash ) {
468
    SEQ_LCD_PrintSpaces(5);
469
      } else {
470
    SEQ_LCD_PrintFormattedString("Edit ");
471
      }
472
 
473
      if( event_mode != SEQ_EVENT_MODE_Drum || (ui_selected_item == ITEM_LAYER_SELECT && ui_cursor_flash) ) {
474
    SEQ_LCD_PrintSpaces(5);
475
      } else {
476
    SEQ_LCD_PrintFormattedString("Drum ");
477
      }
478
 
479
      SEQ_LCD_PrintSpaces(30);
480
 
481
      ///////////////////////////////////////////////////////////////////////////
482
      SEQ_LCD_CursorSet(0, 1);
483
 
484
      if( ui_selected_item == ITEM_GXTY && ui_cursor_flash ) {
485
    SEQ_LCD_PrintSpaces(5);
486
      } else {
487
    SEQ_LCD_PrintGxTy(ui_selected_group, ui_selected_tracks);
488
    SEQ_LCD_PrintSpaces(1);
489
      }
490
 
491
      ///////////////////////////////////////////////////////////////////////////
492
      mios32_midi_port_t port = SEQ_CC_Get(visible_track, SEQ_CC_MIDI_PORT);
493
      if( ui_selected_item == ITEM_MIDI_PORT && ui_cursor_flash ) {
494
    SEQ_LCD_PrintSpaces(5);
495
      } else {
496
    SEQ_LCD_PrintMIDIOutPort(port);
497
    SEQ_LCD_PrintChar(SEQ_MIDI_PORT_OutCheckAvailable(port) ? ' ' : '*');
498
      }
499
 
500
      ///////////////////////////////////////////////////////////////////////////
501
      if( ui_selected_item == ITEM_MIDI_CHANNEL && ui_cursor_flash ) {
502
    SEQ_LCD_PrintSpaces(5);
503
      } else {
504
    SEQ_LCD_PrintFormattedString("%3d  ", SEQ_CC_Get(visible_track, SEQ_CC_MIDI_CHANNEL)+1);
505
      }
506
 
507
      ///////////////////////////////////////////////////////////////////////////
508
      if( ui_selected_item == ITEM_MIDI_PC && ui_cursor_flash ) {
509
    SEQ_LCD_PrintSpaces(5);
510
      } else {
511
    u8 value = SEQ_CC_Get(visible_track, SEQ_CC_MIDI_PC);
512
    if( value )
513
      SEQ_LCD_PrintFormattedString("%3d  ", value-1);
514
    else
515
      SEQ_LCD_PrintString("---  ");
516
      }
517
 
518
      ///////////////////////////////////////////////////////////////////////////
519
      if( ui_selected_item == ITEM_MIDI_BANK_H && ui_cursor_flash ) {
520
    SEQ_LCD_PrintSpaces(5);
521
      } else {
522
    u8 value = SEQ_CC_Get(visible_track, SEQ_CC_MIDI_BANK_H);
523
    if( value )
524
      SEQ_LCD_PrintFormattedString("%3d  ", value-1);
525
    else
526
      SEQ_LCD_PrintString("---  ");
527
      }
528
 
529
      ///////////////////////////////////////////////////////////////////////////
530
      if( ui_selected_item == ITEM_MIDI_BANK_L && ui_cursor_flash ) {
531
    SEQ_LCD_PrintSpaces(5);
532
      } else {
533
    u8 value = SEQ_CC_Get(visible_track, SEQ_CC_MIDI_BANK_L);
534
    if( value )
535
      SEQ_LCD_PrintFormattedString("%3d  ", value-1);
536
    else
537
      SEQ_LCD_PrintString("---  ");
538
      }
539
 
540
      ///////////////////////////////////////////////////////////////////////////
541
      SEQ_LCD_PrintSpaces(5);
542
 
543
      ///////////////////////////////////////////////////////////////////////////
544
      if( ui_selected_item == ITEM_TRKEVNT && ui_cursor_flash ) {
545
    SEQ_LCD_PrintSpaces(5);
546
      } else {
547
    SEQ_LCD_PrintString("Event");
548
      }
549
 
550
      ///////////////////////////////////////////////////////////////////////////
551
      if( ui_selected_item == ITEM_EDIT_NAME && ui_cursor_flash ) {
552
    SEQ_LCD_PrintSpaces(5);
553
      } else {
554
    SEQ_LCD_PrintString("Name ");
555
      }
556
 
557
      ///////////////////////////////////////////////////////////////////////////
558
      if( event_mode != SEQ_EVENT_MODE_Drum || (ui_selected_item == ITEM_LAYER_SELECT && ui_cursor_flash) ) {
559
    SEQ_LCD_PrintSpaces(5);
560
      } else {
561
    SEQ_LCD_PrintSpaces(2);
562
    SEQ_LCD_PrintChar('A' + ui_selected_instrument);
563
    SEQ_LCD_PrintSpaces(2);
564
      }
565
 
566
      SEQ_LCD_PrintSpaces(5);
567
 
568
      if( event_mode == SEQ_EVENT_MODE_Drum ) {
569
    {
570
      char *pattern_name = (char *)&seq_core_trk[visible_track].name[5*ui_selected_instrument];
571
 
572
      int i;
573
      u8 found_char = 0;
574
      for(i=0; i<5; ++i) {
575
        if( pattern_name[i] != ' ' ) {
576
          found_char = 1;
577
          break;
578
        }
579
      }
580
 
581
      if( found_char )
582
        SEQ_LCD_PrintStringPadded(pattern_name, 5);
583
      else
584
        SEQ_LCD_PrintString("_____");
585
    }
586
 
587
    SEQ_LCD_PrintSpaces(16);
588
      } else {
589
    {
590
      char *pattern_name = (char *)&seq_core_trk[visible_track].name[0];
591
 
592
      int i;
593
      u8 found_char = 0;
594
      for(i=0; i<5; ++i) {
595
        if( pattern_name[i] != ' ' ) {
596
          found_char = 1;
597
          break;
598
        }
599
      }
600
 
601
      if( found_char )
602
        SEQ_LCD_PrintStringPadded(pattern_name, 5);
603
      else
604
        SEQ_LCD_PrintString("_____");
605
    }
606
 
607
    SEQ_LCD_PrintChar('-');
608
 
609
    {
610
      char *pattern_name = (char *)&seq_core_trk[visible_track].name[5];
611
 
612
      int i;
613
      u8 found_char = 0;
614
      for(i=0; i<15; ++i) {
615
        if( pattern_name[i] != ' ' ) {
616
          found_char = 1;
617
          break;
618
        }
619
      }
620
 
621
      if( found_char )
622
        SEQ_LCD_PrintStringPadded(pattern_name, 15);
623
      else
624
        SEQ_LCD_PrintString("_______________");
625
    }
626
      }
627
 
628
      SEQ_LCD_PrintSpaces(4);
629
  }
630
 
631
  return 0; // no error
632
}
633
 
634
/////////////////////////////////////////////////////////////////////////////
635
// Initialisation
636
/////////////////////////////////////////////////////////////////////////////
637
s32 SEQ_UI_TRKINST_Init(u32 mode)
638
{
639
  // install callback routines
640
  SEQ_UI_InstallButtonCallback(Button_Handler);
641
  SEQ_UI_InstallEncoderCallback(Encoder_Handler);
642
  SEQ_UI_InstallLEDCallback(LED_Handler);
643
  SEQ_UI_InstallLCDCallback(LCD_Handler);
644
 
645
  // load charset (if this hasn't been done yet)
646
  SEQ_LCD_InitSpecialChars(SEQ_LCD_CHARSET_Menu);
647
 
648
  pr_dialog = 0;
649
 
650
  // initialize edit label vars (name is modified directly, not via ui_edit_name!)
651
  ui_edit_name_cursor = 0;
652
  ui_edit_preset_num_category = 0;
653
  ui_edit_preset_num_label = 0;
654
 
655
  return 0; // no error
656
}