//============================================================================= // MuseScore // Music Composition & Notation // $Id:$ // // Copyright (C) 2011 Werner Schweer // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 // as published by the Free Software Foundation and appearing in // the file LICENCE.GPL //============================================================================= #ifndef __CHORDLIST_H__ #define __CHORDLIST_H__ class Xml; //--------------------------------------------------------- // class HDegree //--------------------------------------------------------- enum HDegreeType { UNDEF, ADD, ALTER, SUBTRACT }; class HDegree { int _value; int _alter; // -1, 0, 1 (b - - #) int _type; public: HDegree() { _value = 0; _alter = 0; _type = UNDEF; } HDegree(int v, int a, int t) { _value = v; _alter = a; _type = t; } int value() const { return _value; } int alter() const { return _alter; } int type() const { return _type; } QString text() const; }; //--------------------------------------------------------- // HChord //--------------------------------------------------------- class HChord { QString str; protected: int keys; public: HChord() { keys = 0; } HChord(int k) { keys = k; } HChord(int a, int b, int c=-1, int d=-1, int e=-1, int f=-1, int g=-1, int h=-1, int i=-1, int k=-1, int l=-1); HChord(const QString&); void rotate(int semiTones); bool contains(int key) const { // key in chord? return (1 << (key % 12)) & keys; } HChord& operator+= (int key) { keys |= (1 << (key % 12)); return *this; } HChord& operator-= (int key) { keys &= ~(1 << (key % 12)); return *this; } bool operator==(const HChord& o) const { return (keys == o.keys); } bool operator!=(const HChord& o) const { return (keys != o.keys); } int getKeys() const { return keys; } void print() const; QString name(int tpc); void add(const QList& degreeList); }; //--------------------------------------------------------- // RenderAction //--------------------------------------------------------- struct RenderAction { enum RenderActionType { RENDER_SET, RENDER_MOVE, RENDER_PUSH, RENDER_POP, RENDER_NOTE, RENDER_ACCIDENTAL }; RenderActionType type; qreal movex, movey; // RENDER_MOVE QString text; // RENDER_SET RenderAction() {} RenderAction(RenderActionType t) : type(t) {} }; //--------------------------------------------------------- // ChordDescription //--------------------------------------------------------- struct ChordDescription { int id; // Chord id number (Band In A Box Chord Number) QStringList names; // list of alternative chord names // that will by recognized from keyboard entry (without root/base) QString xmlKind; // MusicXml description: kind QStringList xmlDegrees; // MusicXml description: list of degrees (if any) HChord chord; // C based chord QList renderList; public: void read(const QDomElement&); void write(Xml&); }; //--------------------------------------------------------- // ChordSymbol //--------------------------------------------------------- struct ChordSymbol { int fontIdx; QString name; QChar code; ChordSymbol() { fontIdx = -1; } bool isValid() const { return fontIdx != -1; } }; //--------------------------------------------------------- // ChordFont //--------------------------------------------------------- struct ChordFont { QString family; qreal mag; }; //--------------------------------------------------------- // ChordList //--------------------------------------------------------- class ChordList : public QMap { QHash symbols; public: QList fonts; QList renderListRoot; QList renderListBase; ChordList() {} virtual ~ChordList(); void write(Xml& xml); void read(const QDomElement&); bool read(const QString&); bool write(const QString&); ChordSymbol symbol(const QString& s) const { return symbols.value(s); } }; #endif