FretDiagram* FretDiagram::fromString(Score* score, const QString &s) { FretDiagram* fd = new FretDiagram(score); fd->setStrings(s.size()); fd->setFrets(4); int offset = 0; int barreString = -1; for (int i = 0; i < s.size(); i++) { QChar c = s.at(i); if (c == 'X' or c == 'O') fd->setMarker(i, c.unicode()); else if (c == '-' && barreString == -1) { fd->setBarre(1); barreString = i; } else { int fret = c.digitValue(); if (fret != -1) { fd->setDot(i, fret); if (fret - 3 > 0 && offset < fret - 3) offset = fret - 3; } } } if (offset > 0) { fd->setOffset(offset); for (int i = 0; i < fd->strings(); i++) if (fd->dot(i)) fd->setDot(i, fd->dot(i) - offset); } if (barreString >= 0) fd->setDot(barreString, 1); return fd; }