~s-cecilio/lenmus/v5.3

« back to all changes in this revision

Viewing changes to src/exercises/ChordConstrains.h

  • Committer: cecilios
  • Date: 2012-09-11 16:59:18 UTC
  • Revision ID: svn-v4:2587a929-2f0e-0410-ae78-fe6f687d5efe:branches/TRY-5.0:730
Paths: fixed problem with installation folders. Fixed Chinese ISO language code

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//--------------------------------------------------------------------------------------
2
 
//    LenMus Phonascus: The teacher of music
3
 
//    Copyright (c) 2002-2007 Cecilio Salmeron
4
 
//
5
 
//    This program is free software; you can redistribute it and/or modify it under the 
6
 
//    terms of the GNU General Public License as published by the Free Software Foundation;
7
 
//    either version 2 of the License, or (at your option) any later version.
8
 
//
9
 
//    This program is distributed in the hope that it will be useful, but WITHOUT ANY 
10
 
//    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
11
 
//    PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12
 
//
13
 
//    You should have received a copy of the GNU General Public License along with this 
14
 
//    program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, 
15
 
//    Fifth Floor, Boston, MA  02110-1301, USA.
16
 
//
17
 
//    For any comment, suggestion or feature request, please contact the manager of 
18
 
//    the project at cecilios@users.sourceforge.net
19
 
//
20
 
//-------------------------------------------------------------------------------------
21
 
/*! @file ChordConstrains.h
22
 
    @brief Header file for Chord exercises
23
 
    @ingroup generators
24
 
*/
25
 
#ifdef __GNUG__
26
 
// #pragma interface
27
 
#endif
28
 
 
29
 
#ifndef __CHORDCONSTRAINS_H__        //to avoid nested includes
30
 
#define __CHORDCONSTRAINS_H__
31
 
 
32
 
// For compilers that support precompilation, includes "wx/wx.h".
33
 
#include "wx/wxprec.h"
34
 
 
35
 
#ifdef __BORLANDC__
36
 
#pragma hdrstop
37
 
#endif
38
 
 
39
 
#ifndef WX_PRECOMP
40
 
#include "wx/wx.h"
41
 
#endif
42
 
 
43
 
#include "Generators.h"
44
 
#include "Constrains.h"
45
 
 
46
 
enum EChordType
47
 
{
48
 
    // Triads
49
 
    ect_MajorTriad = 0,
50
 
    ect_MinorTriad,
51
 
    ect_AugTriad,
52
 
    ect_DimTriad,
53
 
    ect_Suspended_4th,
54
 
    ect_Suspended_2nd,
55
 
    ect_LastTriad = ect_Suspended_2nd, 
56
 
 
57
 
    // Seventh chords
58
 
    ect_MajorSeventh,
59
 
    ect_DominantSeventh,
60
 
    ect_MinorSeventh,
61
 
    ect_DimSeventh,
62
 
    ect_HalfDimSeventh,
63
 
    ect_AugMajorSeventh,
64
 
    ect_AugSeventh,
65
 
    ect_MinorMajorSeventh,
66
 
    ect_LastSeventh = ect_MinorMajorSeventh,
67
 
 
68
 
    // Sixth chords
69
 
    ect_MajorSixth,
70
 
    ect_MinorSixth,
71
 
    ect_AugSixth,
72
 
    ect_LastSixth = ect_AugSixth,
73
 
 
74
 
    //last element, to signal End Of Table
75
 
    ect_Max
76
 
};
77
 
 
78
 
enum EChordGroup
79
 
{
80
 
    ecg_Triads = 0,
81
 
    ecg_Sevenths,
82
 
    ecg_Sixths,
83
 
    //last element, to signal End Of Table
84
 
    ecg_Max
85
 
};
86
 
 
87
 
 
88
 
class lmChordConstrains
89
 
{
90
 
public:
91
 
    lmChordConstrains(wxString sSection);
92
 
    ~lmChordConstrains() {}
93
 
 
94
 
    EChordType GetRandomChordType();
95
 
    int GetRandomMode();
96
 
 
97
 
    bool AreInversionsAllowed() { return m_fAllowInversions; }
98
 
    void SetInversionsAllowed(bool fValue) { m_fAllowInversions = fValue; }
99
 
 
100
 
    bool IsChordValid(EChordType nType) { return m_fValidChords[nType]; }
101
 
    void SetChordValid(EChordType nType, bool fValid) { m_fValidChords[nType] = fValid; }
102
 
    bool* GetValidChords() { return m_fValidChords; }
103
 
 
104
 
    bool IsValidGroup(EChordGroup nGroup);
105
 
 
106
 
    bool IsModeAllowed(int nMode) { return m_fAllowedModes[nMode]; }
107
 
    void SetModeAllowed(int nMode, bool fValue) {
108
 
            m_fAllowedModes[nMode] = fValue;
109
 
        }
110
 
 
111
 
    void SetDisplayKey(bool fValue) { m_fDisplayKey = fValue; }
112
 
    bool DisplayKey() { return m_fDisplayKey; }
113
 
 
114
 
    void SetSettingsLink(bool fValue) { m_fSettingsLink = fValue; }
115
 
    bool IncludeSettingsLink() { return m_fSettingsLink; }
116
 
    void SetSection(wxString sSection) {
117
 
                m_sSection = sSection;
118
 
                LoadSettings();
119
 
            }
120
 
 
121
 
    void SaveSettings();
122
 
    
123
 
    void SetTheoryMode(bool fValue) { m_fTheoryMode = fValue; }
124
 
    bool IsTheoryMode() { return m_fTheoryMode; }
125
 
 
126
 
    lmKeyConstrains* GetKeyConstrains() { return &m_oValidKeys; }
127
 
 
128
 
 
129
 
private:
130
 
    void LoadSettings();
131
 
 
132
 
    wxString            m_sSection;             //to save settings
133
 
    bool                m_fSettingsLink;        //include settings link
134
 
    bool                m_fAllowInversions;
135
 
    bool                m_fValidChords[ect_Max];
136
 
    lmKeyConstrains     m_oValidKeys;           //allowed key signatures
137
 
    bool                m_fDisplayKey;
138
 
    bool                m_fAllowedModes[3];     // 0-harmonic
139
 
                                                // 1-melodic ascending
140
 
                                                // 2-melodic descending
141
 
    wxString            m_sLowerRoot;    //valid range for root notes
142
 
    wxString            m_sUpperRoot;
143
 
 
144
 
    //lmIdfyChordCtrol is used both for ear training exercises and for theory exercises.
145
 
    //Following variables are used for configuration
146
 
    bool                m_fTheoryMode;
147
 
 
148
 
 
149
 
 
150
 
};
151
 
 
152
 
#endif  // __CHORDCONSTRAINS_H__