~s-cecilio/lenmus/v5.3

« back to all changes in this revision

Viewing changes to src/exercises/Constrains.cpp

  • Committer: cecilios
  • Date: 2006-03-05 11:33:10 UTC
  • Revision ID: svn-v4:2587a929-2f0e-0410-ae78-fe6f687d5efe:trunk:2
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// RCS-ID: $Id: Constrains.cpp,v 1.9 2006/03/03 15:01:14 cecilios Exp $
 
2
//--------------------------------------------------------------------------------------
 
3
//    LenMus Phonascus: The teacher of music
 
4
//    Copyright (c) 2002-2006 Cecilio Salmeron
 
5
//
 
6
//    This program is free software; you can redistribute it and/or modify it under the 
 
7
//    terms of the GNU General Public License as published by the Free Software Foundation;
 
8
//    either version 2 of the License, or (at your option) any later version.
 
9
//
 
10
//    This program is distributed in the hope that it will be useful, but WITHOUT ANY 
 
11
//    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
 
12
//    PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
13
//
 
14
//    You should have received a copy of the GNU General Public License along with this 
 
15
//    program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, 
 
16
//    Fifth Floor, Boston, MA  02110-1301, USA.
 
17
//
 
18
//    For any comment, suggestion or feature request, please contact the manager of 
 
19
//    the project at cecilios@users.sourceforge.net
 
20
//
 
21
//-------------------------------------------------------------------------------------
 
22
/*! @file Constrains.cpp
 
23
    @brief Implementation file for Constrain derived class lmClefConstrain
 
24
    @ingroup generators
 
25
*/
 
26
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 
27
#pragma implementation "Constrains.h"
 
28
#endif
 
29
 
 
30
// For compilers that support precompilation, includes "wx.h".
 
31
#include "wx/wxprec.h"
 
32
 
 
33
#ifdef __BORLANDC__
 
34
#pragma hdrstop
 
35
#endif
 
36
 
 
37
#include "Constrains.h"
 
38
 
 
39
// the config object
 
40
extern wxConfigBase *g_pPrefs;
 
41
 
 
42
 
 
43
 
 
44
//-------------------------------------------------------------------------------------------
 
45
// lmClefConstrain
 
46
//-------------------------------------------------------------------------------------------
 
47
 
 
48
lmClefConstrain::lmClefConstrain()
 
49
{
 
50
    for (int i = lmMIN_CLEF; i <= lmMAX_CLEF; i++) {
 
51
        m_fValidClefs[i-lmMIN_CLEF] = false;
 
52
        m_aLowerPitch[i-lmMIN_CLEF] = _T("c0");
 
53
        m_aUpperPitch[i-lmMIN_CLEF] = _T("c9");
 
54
    }
 
55
}
 
56
 
 
57
 
 
58
//-------------------------------------------------------------------------------------------
 
59
// lmKeyConstrains
 
60
//-------------------------------------------------------------------------------------------
 
61
 
 
62
lmKeyConstrains::lmKeyConstrains()
 
63
{
 
64
    for (int i = lmMIN_KEY; i <= lmMAX_KEY; i++) {
 
65
        m_fValidKeys[i-lmMIN_KEY] = false;
 
66
    }
 
67
}
 
68
 
 
69
 
 
70
//-------------------------------------------------------------------------------------------
 
71
// lmTimeSignConstrains
 
72
//-------------------------------------------------------------------------------------------
 
73
 
 
74
lmTimeSignConstrains::lmTimeSignConstrains()
 
75
{
 
76
    for (int i = lmMIN_TIME_SIGN; i <= lmMAX_TIME_SIGN; i++) {
 
77
        m_fValidTimes[i-lmMIN_TIME_SIGN] = false;
 
78
    }
 
79
}
 
80
 
 
81
/*! Initialize constrains from a comma separated list of values.
 
82
    i.e.: '24,34,44' (no spaces allowed)
 
83
    Returns true if error
 
84
*/
 
85
bool lmTimeSignConstrains::SetConstrains(wxString sTimeSign)
 
86
{
 
87
    int i;
 
88
    for (i = lmMIN_TIME_SIGN; i <= lmMAX_TIME_SIGN; i++) {
 
89
        m_fValidTimes[i-lmMIN_TIME_SIGN] = false;
 
90
    }
 
91
 
 
92
    wxString sData;
 
93
    int nTimeSign;
 
94
 
 
95
    //split the list into values
 
96
    i = sTimeSign.First(_T(","));
 
97
    sData = ((i > 0) ? sTimeSign.Left(i) : sTimeSign);
 
98
    while (sData != _T("")) {
 
99
        // 24,34,44,68,98,128,28,38,22,32
 
100
        if (sData == _T("24"))          nTimeSign = (int)emtr24;
 
101
        else if (sData == _T("34"))     nTimeSign = (int)emtr34;
 
102
        else if (sData == _T("44"))     nTimeSign = (int)emtr44;
 
103
        else if (sData == _T("68"))     nTimeSign = (int)emtr68;
 
104
        else if (sData == _T("98"))     nTimeSign = (int)emtr98;
 
105
        else if (sData == _T("128"))    nTimeSign = (int)emtr128;
 
106
        else if (sData == _T("28"))     nTimeSign = (int)emtr28;
 
107
        else if (sData == _T("38"))     nTimeSign = (int)emtr38;
 
108
        else if (sData == _T("22"))     nTimeSign = (int)emtr22;
 
109
        else if (sData == _T("32"))     nTimeSign = (int)emtr32;
 
110
        else {
 
111
            return true;
 
112
        }
 
113
        m_fValidTimes[nTimeSign-lmMIN_TIME_SIGN] = true;
 
114
        sTimeSign = ((i > 0) ? sTimeSign.Mid(i+1) : _T(""));
 
115
        i = sTimeSign.First(_T(","));
 
116
        sData = ((i > 0) ? sTimeSign.Left(i) : sTimeSign);
 
117
    }
 
118
    return false;
 
119
 
 
120
}
 
121
 
 
122
 
 
123
 
 
124
//-------------------------------------------------------------------------------------------
 
125
// lmTheoIntervalsConstrains
 
126
//-------------------------------------------------------------------------------------------
 
127
 
 
128
lmTheoIntervalsConstrains::lmTheoIntervalsConstrains()
 
129
{
 
130
    LoadSettings();
 
131
}
 
132
 
 
133
void lmTheoIntervalsConstrains::SaveSettings()
 
134
{
 
135
    /*
 
136
    save settings in user configuration data file
 
137
    */
 
138
 
 
139
    // allowed clefs
 
140
    int i;
 
141
    wxString sKey;
 
142
    for (i = lmMIN_CLEF; i <= lmMAX_CLEF; i++) {
 
143
        sKey = wxString::Format(_T("/Constrains/TheoIntval/TheoIntervals/Clef%d"), i); 
 
144
        g_pPrefs->Write(sKey, IsValidClef((EClefType)i) );
 
145
    }
 
146
 
 
147
    // allowed accidentals
 
148
    g_pPrefs->Write(_T("/Constrains/TheoIntval/TheoIntervals/Accidentals"),
 
149
                    m_fAccidentals);
 
150
    g_pPrefs->Write(_T("/Constrains/TheoIntval/TheoIntervals/DoubleAccidentals"),
 
151
                    m_fDoubleAccidentals);
 
152
 
 
153
    // problem type
 
154
    g_pPrefs->Write(_T("/Constrains/TheoIntval/TheoIntervals/ProblemType"),
 
155
                    (long) m_nProblemType );
 
156
 
 
157
}
 
158
 
 
159
void lmTheoIntervalsConstrains::LoadSettings()
 
160
{
 
161
    /*
 
162
    load settings form user configuration data or default values
 
163
    */
 
164
 
 
165
    // allowed clefs. Default G clef
 
166
    int i;
 
167
    wxString sKey;
 
168
    bool fValid;
 
169
    for (i = lmMIN_CLEF; i <= lmMAX_CLEF; i++) {
 
170
        sKey = wxString::Format(_T("/Constrains/TheoIntval/TheoIntervals/Clef%d"), i); 
 
171
        g_pPrefs->Read(sKey, &fValid, (i == eclvSol) );
 
172
        SetClef((EClefType)i, fValid);
 
173
    }
 
174
 
 
175
    // allowed accidentals. Defaul: none
 
176
    g_pPrefs->Read(_T("/Constrains/TheoIntval/TheoIntervals/Accidentals"),
 
177
                    &m_fAccidentals, false);
 
178
    g_pPrefs->Read(_T("/Constrains/TheoIntval/TheoIntervals/DoubleAccidentals"),
 
179
                    &m_fDoubleAccidentals, false);
 
180
 
 
181
    // problem type
 
182
    m_nProblemType = (EProblemTheoIntervals) g_pPrefs->Read(
 
183
                        _T("/Constrains/TheoIntval/TheoIntervals/ProblemType"),
 
184
                        (long) ePT_Both );
 
185
 
 
186
 
 
187
}
 
188
 
 
189
 
 
190
 
 
191
//-------------------------------------------------------------------------------------------
 
192
// lmSideReadingCtrolOptions
 
193
//-------------------------------------------------------------------------------------------
 
194
 
 
195
void lmSideReadingCtrolOptions::SetLabels(wxString& sLabel, wxString* pStart, wxString* pStop)
 
196
{
 
197
    //find the bar
 
198
    int i = sLabel.Find(_T("|"));
 
199
    if (i != -1) {
 
200
        if (i > 1) *pStart = sLabel.Mid(0, i-1);
 
201
        if (i < (int)sLabel.Length()-1) *pStop = sLabel.Mid(i+1);
 
202
    }
 
203
    else {
 
204
         *pStart = sLabel;
 
205
    }
 
206
 
 
207
}
 
208
 
 
209
 
 
210
 
 
211
//-------------------------------------------------------------------------------------------
 
212
// lmScoreCtrolOptions
 
213
//-------------------------------------------------------------------------------------------
 
214
 
 
215
void lmScoreCtrolOptions::SetLabels(wxString& sLabel, wxString* pStart, wxString* pStop)
 
216
{
 
217
    //find the bar
 
218
    int i = sLabel.Find(_T("|"));
 
219
    if (i != -1) {
 
220
        if (i > 1) *pStart = sLabel.Mid(0, i-1);
 
221
        if (i < (int)sLabel.Length()-1) *pStop = sLabel.Mid(i+1);
 
222
    }
 
223
    else {
 
224
         *pStart = sLabel;
 
225
    }
 
226
 
 
227
}
 
228