00001 #include "tonleiterdata.h"
00002 using namespace Data;
00003
00004
00005 #include <opie2/odebug.h>
00006 #include <qpe/config.h>
00007 using namespace Opie::Core;
00008
00009 TonleiterData::TonleiterData(QObject* parent)
00010 :QObject(parent)
00011 {
00012 drawnames=true;
00013 loadData();
00014 }
00015
00016 TonleiterData::~TonleiterData()
00017 {
00018 saveData();
00019 }
00020
00021 void TonleiterData::setCurrentInstrumetID(int id)
00022 {
00023 if(id>=0 && id<noOfInstruments())
00024 {
00025 currentInstrumentID=id;
00026 emit dataChange();
00027 }
00028 }
00029
00030 void TonleiterData::setCurrentScaleID(int id)
00031 {
00032 if(id>=0 && id<noOfScales())
00033 {
00034 currentScaleID=id;
00035 emit dataChange();
00036 }
00037 }
00038
00039 void TonleiterData::setCurrentNote(int id)
00040 {
00041 if(id>=0 && id<12)
00042 {
00043 currentNote=id;
00044 emit dataChange();
00045 }
00046 }
00047
00048 void TonleiterData::setDrawNames(bool dn)
00049 {
00050 drawnames=dn;
00051 emit dataChange();
00052 }
00053
00054 void TonleiterData::loadData()
00055 {
00056 Config load("Tonleiter");
00057 if(!load.isValid())
00058 {
00059
00060 load.setGroup("General");
00061 load.writeEntry("currentInstrumentID",1);
00062 load.writeEntry("currentNote",3);
00063 load.writeEntry("currentScaleID",0);
00064 load.writeEntry("drawnames",1);
00065 load.setGroup("Instrument");
00066 load.writeEntry("Inst0","Thumb6;26;14;19;24;29;34;39;");
00067 load.writeEntry("Inst1","Bass 4;12;19;24;29;34;");
00068 load.writeEntry("noOfInstruments",2);
00069 load.setGroup("Scale");
00070 load.writeEntry("Scale0","ionian;0;2;4;5;7;9;11;");
00071 load.writeEntry("Scale1","aeolian;0;2;3;5;7;8;10;");
00072 load.writeEntry("Scale2","dorian;0;2;3;5;7;9;10;");
00073 load.writeEntry("Scale3","phrygian;0;1;3;5;7;8;10;");
00074 load.writeEntry("Scale4","lydian;0;2;4;6;7;9;11;");
00075 load.writeEntry("Scale5","mixolydian;0;2;4;5;7;9;10;");
00076 load.writeEntry("noOfScales",6);
00077
00078 }
00079
00080 load.setGroup("General");
00081 currentNote=load.readNumEntry("currentNote");
00082 drawnames=load.readBoolEntry("drawnames");
00083 currentInstrumentID=load.readNumEntry("currentInstrumentID");
00084 currentScaleID=load.readNumEntry("currentScaleID");
00085
00086 load.setGroup("Instrument");
00087 int noOfInstr=load.readNumEntry("noOfInstruments",0);
00088 for(int i=0;i<noOfInstr;i++)
00089 {
00090 QStringList instlist=load.readListEntry("Inst"+QString::number(i),';');
00091 QValueList<int> strings;
00092 for(int st=2;st<(int)instlist.count();st++)
00093 strings.append(instlist[st].toInt());
00094 instruments.append(Instrument(instlist[0],instlist[1].toInt(),strings));
00095 }
00096
00097 load.setGroup("Scale");
00098 int scaleno=load.readNumEntry("noOfScales",0);
00099 for(int s=0;s<scaleno;s++)
00100 {
00101 QStringList scalelist=load.readListEntry("Scale"+QString::number(s),';');
00102 QValueList<int> halftones;
00103 for(int ht=1;ht<(int)scalelist.count();ht++)
00104 halftones.append(scalelist[ht].toInt());
00105 scales.append(Scale(scalelist[0],halftones));
00106 }
00107
00108 }
00109
00110 void TonleiterData::saveData()
00111 {
00112 Config save("Tonleiter");
00113 save.setGroup("General");
00114 save.writeEntry("currentNote",currentNote);
00115 save.writeEntry("drawnames",drawnames);
00116 save.writeEntry("currentInstrumentID",currentInstrumentID);
00117 save.writeEntry("currentScaleID",currentScaleID);
00118
00119 save.setGroup("Instrument");
00120 save.writeEntry("noOfInstruments",noOfInstruments());
00121 for(int i=0;i<noOfInstruments();i++)
00122 {
00123 QStringList instlist;
00124 Instrument inst=getInstrument(i);
00125 instlist.append(inst.instName());
00126 instlist.append(QString::number(inst.noOfFrets()));
00127 for(int st=0;st<inst.noOfStrings();st++)
00128 instlist.append(QString::number(inst.string(st)));
00129 save.writeEntry("Inst"+QString::number(i),instlist,';');
00130 }
00131
00132 save.setGroup("Scale");
00133 save.writeEntry("noOfScales",noOfScales());
00134 for(int s=0;s<noOfScales();s++)
00135 {
00136 QStringList scalelist;
00137 Scale scale=getScale(s);
00138 scalelist.append(scale.scaleName());
00139 for(int ht=0;ht<scale.noOfHaltones();ht++)
00140 scalelist.append(QString::number(scale.getHalfTone(ht)));
00141 save.writeEntry("Scale"+QString::number(s),scalelist,';');
00142 }
00143 }
00144
00145 int TonleiterData::noOfInstruments()
00146 {
00147 return (int)instruments.count();
00148 }
00149
00150 Instrument TonleiterData::getInstrument(int id)
00151 {
00152 if(id>=0 && id<noOfInstruments())
00153 return instruments[id];
00154 else
00155 {
00156 odebug << "undefined insrtument " << id << " of " << instruments.count() << "" << oendl;
00157 return Instrument();
00158 }
00159
00160 }
00161
00162 int TonleiterData::getCurrentInstrumentID()
00163 {
00164 return currentInstrumentID;
00165 }
00166
00167 int TonleiterData::noOfScales()
00168 {
00169 return (int)scales.count();
00170 }
00171
00172 Scale TonleiterData::getScale(int id)
00173 {
00174 if(id>=0 && id<noOfScales())
00175 return scales[id];
00176 else
00177 {
00178 odebug << "Undefined scale" << oendl;
00179 return Scale();
00180 }
00181 }
00182
00183 int TonleiterData::getCurrentScaleID()
00184 {
00185 return currentScaleID;
00186 }
00187
00188 int TonleiterData::getCurrentBaseNote()
00189 {
00190 return currentNote;
00191 }
00192
00193 bool TonleiterData::isDrawNames()
00194 {
00195 return drawnames;
00196 }
00197
00198
00199