Пример #1
0
Bar* Sheet::insertBar(int before)
{
    Q_ASSERT( before >= 0 && before <= barCount() );
    Bar* bar = new Bar(this);
    d->bars.insert(before, bar);
    return bar;
}
Пример #2
0
void Sheet::removeBar(int index, bool deleteBar)
{
    Q_ASSERT( index >= 0 && index < barCount() );
    Bar* bar = d->bars.takeAt(index);
    if (deleteBar) {
        delete bar;
    }
}
Пример #3
0
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;
        }
    }
}
Пример #4
0
 virtual int childCount() const
 {
     if (m_mainChild)
         return 1 + barCount();
     return barCount();
 }
Пример #5
0
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;
        }
    }
Пример #6
0
void Sheet::insertBar(int before, Bar* bar)
{
    Q_ASSERT( before >= 0 && before <= barCount() );
    d->bars.insert(before, bar);
}
Пример #7
0
Bar* Sheet::bar(int index)
{
    Q_ASSERT( index >= 0 && index < barCount() );
    return d->bars[index];
}