Bar* Sheet::insertBar(int before) { Q_ASSERT( before >= 0 && before <= barCount() ); Bar* bar = new Bar(this); d->bars.insert(before, bar); return bar; }
void Sheet::removeBar(int index, bool deleteBar) { Q_ASSERT( index >= 0 && index < barCount() ); Bar* bar = d->bars.takeAt(index); if (deleteBar) { delete bar; } }
void Sheet::removeBars(int index, int count, bool deleteBar) { Q_ASSERT( index >= 0 && count > 0 && index + count <= barCount() ); for (int i = 0; i < count; i++) { Bar* b = d->bars.takeAt(index); if (deleteBar) { delete b; } } }
virtual int childCount() const { if (m_mainChild) return 1 + barCount(); return barCount(); }
bool BassStringLine::convert(const QString &line) { m_line = line; bool ret = true; typedef enum { Start, Bar, NewNote, InNote } STATE; STATE state = Start; int ticks = 0; QStringList notes; QString note, extra; QByteArray l = line.toLatin1().toUpper(); foreach(char c, l) { bool endNote = false; bool endBar = false; switch(c) { case '|': // bar if ((state==Start) || (state==Bar)) { state = NewNote; extra.clear(); } else { endNote = (state==InNote); endBar = true; } break; case '~': case '-': // end of reqular note if ((state==Bar) || (state==NewNote)) { note = '-'; state = InNote; extra.clear(); } else { endNote = true; } break; case 'P': // end of pulled note endNote = true; extra = 'p'; break; case 'H': // end of hammered note endNote = true; extra = 'h'; break; case 'X': // end of ghosted note endNote = true; extra = 'x'; break; case '^': // end of bended note endNote = true; extra = '~'; break; case '/': // end of note, slide up in pitch endNote = true; extra = '/'; break; case '\\': // end of note, slide down in pitch endNote = true; extra = '\\'; break; case '0': // part of fret number case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if ((state==NewNote) || (state==Bar)) { note = c; state = InNote; extra.clear(); } else if (state==InNote) { note += c; } break; case 'A': // tuning of this string case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': if (state==Start) { m_tuning = c; m_tuningBase = note2index(c); state = Bar; } break; default: emit warning(tr("Unbekanntes Zeichen in Bass Tab %1, Takt %2, Schlag %3, %4-Saite") .arg(m_lineNumber) .arg(barCount()+1) .arg(ticks+1) .arg(m_tuning) ); ret = false; } if (endNote) { ticks++; notes.append(calcNote(note)+extra); extra.clear(); state = NewNote; } if (endBar) { m_notes.append(notes); notes.clear(); extra.clear(); ticks = 0; state = Bar; } }
void Sheet::insertBar(int before, Bar* bar) { Q_ASSERT( before >= 0 && before <= barCount() ); d->bars.insert(before, bar); }
Bar* Sheet::bar(int index) { Q_ASSERT( index >= 0 && index < barCount() ); return d->bars[index]; }