author | waspe <waspe> | 2003-11-20 19:34:08 (UTC) |
---|---|---|
committer | waspe <waspe> | 2003-11-20 19:34:08 (UTC) |
commit | e6a5ed6de7e821a070d571045ff063f8c41b0b79 (patch) (side-by-side diff) | |
tree | 8455d7bf537cf804337b6c03b28f891ee3f286ce | |
parent | f43e28fe8f226039d96ebda4e6c4d26e4f3320ba (diff) | |
download | opie-e6a5ed6de7e821a070d571045ff063f8c41b0b79.zip opie-e6a5ed6de7e821a070d571045ff063f8c41b0b79.tar.gz opie-e6a5ed6de7e821a070d571045ff063f8c41b0b79.tar.bz2 |
added preliminary edit dialogs
default config added
-rw-r--r-- | noncore/multimedia/tonleiter/editinst.cpp | 14 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editinst.h | 23 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editscale.cpp | 14 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editscale.h | 23 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/fretboard.cpp | 20 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/fretboard.h | 80 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/mainwidget.cpp | 6 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/mainwidget.h | 6 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/menuwidget.cpp | 23 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/menuwidget.h | 37 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiter.pro | 4 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiterdata.cpp | 67 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiterdata.h | 73 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiterdatahelper.cpp | 2 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiterdatahelper.h | 86 |
15 files changed, 284 insertions, 194 deletions
diff --git a/noncore/multimedia/tonleiter/editinst.cpp b/noncore/multimedia/tonleiter/editinst.cpp new file mode 100644 index 0000000..1eba4dc --- a/dev/null +++ b/noncore/multimedia/tonleiter/editinst.cpp @@ -0,0 +1,14 @@ +#include "editinst.h" + +Menu::InstEditDialog::InstEditDialog(TonleiterData* data,QWidget* parent,const char* name) +:QDialog(parent,name,true,0),data(data) +{ + setCaption("Tonleiter::"+tr("Instrument")); + showMaximized(); +} +//**************************************************************************** +Menu::InstEditDialog::~InstEditDialog() +{ +} +//**************************************************************************** +//**************************************************************************** diff --git a/noncore/multimedia/tonleiter/editinst.h b/noncore/multimedia/tonleiter/editinst.h new file mode 100644 index 0000000..e7eba15 --- a/dev/null +++ b/noncore/multimedia/tonleiter/editinst.h @@ -0,0 +1,23 @@ +#ifndef TONLEITER_EDIT_INSTRUMENT_DIALOG_H +#define TONLEITER_EDIT_INSTRUMENT_DIALOG_H + +#include <qdialog.h> + +#include "tonleiterdata.h" + +using namespace Data; + +namespace Menu +{ + class InstEditDialog : public QDialog + { + Q_OBJECT + private: + TonleiterData* data; + public: + InstEditDialog(TonleiterData* data,QWidget* parent,const char* name="InstEditDialog"); + ~InstEditDialog(); + }; +}; + +#endif //TONLEITER_EDIT_INSTRUMENT_DIALOG_H diff --git a/noncore/multimedia/tonleiter/editscale.cpp b/noncore/multimedia/tonleiter/editscale.cpp new file mode 100644 index 0000000..593a150 --- a/dev/null +++ b/noncore/multimedia/tonleiter/editscale.cpp @@ -0,0 +1,14 @@ +#include "editscale.h" + +Menu::ScaleEditDialog::ScaleEditDialog(TonleiterData* data,QWidget* parent,const char* name) +:QDialog(parent,name,true,0),data(data) +{ + setCaption("Tonleiter::"+tr("Scale")); + showMaximized(); +} +//**************************************************************************** +Menu::ScaleEditDialog::~ScaleEditDialog() +{ +} +//**************************************************************************** +//**************************************************************************** diff --git a/noncore/multimedia/tonleiter/editscale.h b/noncore/multimedia/tonleiter/editscale.h new file mode 100644 index 0000000..0e5eb1c --- a/dev/null +++ b/noncore/multimedia/tonleiter/editscale.h @@ -0,0 +1,23 @@ +#ifndef TONLEITER_EDIT_SCALE_DIALOG_H +#define TONLEITER_EDIT_SCALE_DIALOG_H + +#include <qdialog.h> + +#include "tonleiterdata.h" + +using namespace Data; + +namespace Menu +{ + class ScaleEditDialog : public QDialog + { + Q_OBJECT + private: + TonleiterData* data; + public: + ScaleEditDialog(TonleiterData* data,QWidget* parent,const char* name="ScaleEditDialog"); + ~ScaleEditDialog(); + }; +}; + +#endif //TONLEITER_EDIT_SCALE_DIALOG_H diff --git a/noncore/multimedia/tonleiter/fretboard.cpp b/noncore/multimedia/tonleiter/fretboard.cpp index 57806be..7936c83 100644 --- a/noncore/multimedia/tonleiter/fretboard.cpp +++ b/noncore/multimedia/tonleiter/fretboard.cpp @@ -1,159 +1,159 @@ #include "fretboard.h" #include <qpainter.h> -FretBoard::FretBoard(TonleiterData* data,QWidget* parent,const char* name,WFlags f) +Graph::FretBoard::FretBoard(TonleiterData* data,QWidget* parent,const char* name,WFlags f) :QWidget(parent,name,f),data(data) { setBackgroundColor(QColor(0,0,0)); fretpen=QPen(QColor(155,155,155),0); markerbrush=QBrush(QColor(155,155,155)); stringpen=QPen(QColor(255,255,255),3); connect(data,SIGNAL(dataChange()),this,SLOT(dataChange())); } //**************************************************************************** -FretBoard::~FretBoard() +Graph::FretBoard::~FretBoard() { } //**************************************************************************** -void FretBoard::dataChange() +void Graph::FretBoard::dataChange() { repaint(true); } //**************************************************************************** -void FretBoard::paintEvent(QPaintEvent* pe) +void Graph::FretBoard::paintEvent(QPaintEvent* pe) { Q_UNUSED(pe); int instid=data->getCurrentInstrumentID(); inst=data->getInstrument(instid); //qDebug("inst %d is %s",instid,inst.instName().data()); QRect mysize=rect(); xmargin=(int)(mysize.width()*0.05); xmin=2*xmargin; xmax=mysize.width()-xmargin; xwidth=xmax-xmin; ymargin=(int)(mysize.height()*0.1); ymin=ymargin; ymax=mysize.height()-2*ymargin; yheight=ymax-ymin; QPainter p(this); paintBoard(&p); paintFrets(&p); paintStrings(&p); paintScale(&p); } //**************************************************************************** -void FretBoard::resizeEvent(QResizeEvent* re) +void Graph::FretBoard::resizeEvent(QResizeEvent* re) { Q_UNUSED(re); } //**************************************************************************** -void FretBoard::paintBoard(QPainter* p) +void Graph::FretBoard::paintBoard(QPainter* p) { //debug QColor bgc=QColor(142,138,120); p->setPen(QPen(bgc,5)); p->setBrush(QBrush(bgc)); p->drawRect(xmin,ymin,xwidth,yheight); } //**************************************************************************** -void FretBoard::paintFrets(QPainter* p) +void Graph::FretBoard::paintFrets(QPainter* p) { - //draw frets + //draw frets p->setPen(fretpen); p->setBrush(markerbrush); fretdist=(double)(xwidth)/(double)(inst.noOfFrets()); int markerwidth = (int)(fretdist/4.0); if(markerwidth>5) markerwidth=5; else if(markerwidth<2) markerwidth=2; for(int f=0;f<=inst.noOfFrets();f++) { int fretpos=(int)(fretdist*f); p->drawLine(fretpos+xmin,ymin,fretpos+xmin,ymax); int above_octave=f%12; int octave=(f-above_octave)/12; int marker=f-12*octave; if(marker==5 || marker==7 || marker==9) { p->drawEllipse(fretpos+xmin,ymax+ymargin,markerwidth,markerwidth); } else if(marker==0 && f!=0) { p->drawEllipse(fretpos+xmin,ymax+ymargin+2*markerwidth,markerwidth,markerwidth); p->drawEllipse(fretpos+xmin,ymax+ymargin-2*markerwidth,markerwidth,markerwidth); } } } //**************************************************************************** -void FretBoard::paintStrings(QPainter* p) +void Graph::FretBoard::paintStrings(QPainter* p) { //draw strings p->setPen(stringpen); stringdist=(double)(yheight)/(double)(inst.noOfStrings()-1); for(int s=0;s<inst.noOfStrings();s++) { int stringpos=(int)(stringdist*s); p->drawLine(xmin,stringpos+ymin,xmax,stringpos+ymin); int stinglabelid=inst.noOfStrings()-(s+1); QString label=Note::getNameOfNote(inst.string(stinglabelid)); p->drawText(xmargin/2,stringpos+ymin,label); } } //**************************************************************************** -void FretBoard::paintScale(QPainter* p) +void Graph::FretBoard::paintScale(QPainter* p) { int dotsize=10; int scaleid=data->getCurrentScaleID(); Scale scale=data->getScale(scaleid); int colorstart=255%inst.noOfOctaves(); int colorintervall=(255-colorstart)/inst.noOfOctaves(); for(int s=0;s<inst.noOfStrings();s++) { int y=(int)(stringdist*s)+ymin; int stingid=inst.noOfStrings()-(s+1); for(int f=0;f<=inst.noOfFrets();f++) { int note=inst.string(stingid)+f; if(scale.noteInScale(data->getCurrentBaseNote(),note)) { int x=(int)(fretdist*f)+xmin; int octave=Note::octaveOfBaseNote(data->getCurrentBaseNote(),note); if(octave>5) octave=5; p->setPen(QColor(255,0,0)); int c=colorstart+octave*colorintervall; QColor dotcolor(c,c,255); p->setBrush(dotcolor); p->drawEllipse(x-dotsize/2,y-dotsize/2,dotsize,dotsize); if(data->isDrawNames()) { p->setPen(QColor(255,155,0)); p->drawText(x-dotsize/2,y-dotsize/2,Note::getNameOfNote(note)); } } } } } //**************************************************************************** //**************************************************************************** diff --git a/noncore/multimedia/tonleiter/fretboard.h b/noncore/multimedia/tonleiter/fretboard.h index eb509b0..458c733 100644 --- a/noncore/multimedia/tonleiter/fretboard.h +++ b/noncore/multimedia/tonleiter/fretboard.h @@ -1,54 +1,56 @@ #ifndef TONLEITER_FRET_BOARD_H #define TONLEITER_FRET_BOARD_H #include <qbrush.h> #include <qpen.h> #include <qvaluelist.h> #include <qwidget.h> #include "tonleiterdata.h" -class FretBoard : public QWidget +using namespace Data; + +namespace Graph { - Q_OBJECT -private: - TonleiterData* data; - - QPen fretpen; - QBrush markerbrush; - QPen stringpen; - - Instrument inst; - - int xmargin; - int xmin; - int xmax; - int xwidth; - - int ymargin; - int ymin; - int ymax; - int yheight; - - double fretdist; - double stringdist; - -public: - FretBoard(TonleiterData* data,QWidget* parent,const char* name="FretBoard",WFlags f=0); - virtual ~FretBoard(); -private slots: - void dataChange(); -private: - void paintEvent(QPaintEvent* pe); - void resizeEvent(QResizeEvent* re); - //void mousePressEvent(QMouseEvent* mpe); - //void mouseMoveEvent(QMouseEvent* mme); - //void mouseReleaseEvent(QMouseEvent* mre); - void paintBoard(QPainter* p); - void paintFrets(QPainter* p); - void paintStrings(QPainter* p); - void paintScale(QPainter* p); + class FretBoard : public QWidget + { + Q_OBJECT + private: + TonleiterData* data; + + QPen fretpen; + QBrush markerbrush; + QPen stringpen; + + Instrument inst; + + int xmargin; + int xmin; + int xmax; + int xwidth; + + int ymargin; + int ymin; + int ymax; + int yheight; + + double fretdist; + double stringdist; + + public: + FretBoard(TonleiterData* data,QWidget* parent,const char* name="FretBoard",WFlags f=0); + virtual ~FretBoard(); + private slots: + void dataChange(); + private: + void paintEvent(QPaintEvent* pe); + void resizeEvent(QResizeEvent* re); + void paintBoard(QPainter* p); + void paintFrets(QPainter* p); + void paintStrings(QPainter* p); + void paintScale(QPainter* p); + }; }; #endif //TONLEITER_FRET_BOARD_H diff --git a/noncore/multimedia/tonleiter/mainwidget.cpp b/noncore/multimedia/tonleiter/mainwidget.cpp index 0a20b9e..f09207b 100644 --- a/noncore/multimedia/tonleiter/mainwidget.cpp +++ b/noncore/multimedia/tonleiter/mainwidget.cpp @@ -1,28 +1,28 @@ #include "mainwidget.h" #include <qwidget.h> #include <qlayout.h> MainWidget::MainWidget(QWidget* parent,const char* name,WFlags f) :QMainWindow(parent,name,f) { setCaption("Tonleiter"); - data=new TonleiterData(this); + data=new Data::TonleiterData(this); QWidget* mainwidget=new QWidget(this,"mainwidget"); setCentralWidget(mainwidget); QBoxLayout* mainlayout=new QBoxLayout(mainwidget,QBoxLayout::TopToBottom); - menuwidget=new MenuWidget(data,mainwidget); + menuwidget=new Menu::MenuWidget(data,mainwidget); mainlayout->addWidget(menuwidget); - fretboard=new FretBoard(data,mainwidget); + fretboard=new Graph::FretBoard(data,mainwidget); mainlayout->addWidget(fretboard); } //**************************************************************************** MainWidget::~MainWidget() { } //**************************************************************************** //**************************************************************************** diff --git a/noncore/multimedia/tonleiter/mainwidget.h b/noncore/multimedia/tonleiter/mainwidget.h index 71b5ba9..9bb593c 100644 --- a/noncore/multimedia/tonleiter/mainwidget.h +++ b/noncore/multimedia/tonleiter/mainwidget.h @@ -1,22 +1,22 @@ #ifndef TONLEITER_MAINWIDGET_H #define TONLEITER_MAINWIDGET_H #include <qmainwindow.h> #include "fretboard.h" #include "menuwidget.h" #include "tonleiterdata.h" class MainWidget : public QMainWindow { Q_OBJECT private: - TonleiterData* data; - MenuWidget* menuwidget; - FretBoard* fretboard; + Data::TonleiterData* data; + Menu::MenuWidget* menuwidget; + Graph::FretBoard* fretboard; public: MainWidget(QWidget* parent=0,const char* name="MainWidget",WFlags f=0); virtual ~MainWidget(); }; #endif //TONLEITER_MAINWIDGET_H diff --git a/noncore/multimedia/tonleiter/menuwidget.cpp b/noncore/multimedia/tonleiter/menuwidget.cpp index 3dfa09d..1e3742c 100644 --- a/noncore/multimedia/tonleiter/menuwidget.cpp +++ b/noncore/multimedia/tonleiter/menuwidget.cpp @@ -1,72 +1,89 @@ #include "menuwidget.h" #include <qlabel.h> #include <qlayout.h> -MenuWidget::MenuWidget(TonleiterData* data,QWidget* parent,const char* name,WFlags f) +#include "editinst.h" +#include "editscale.h" + +Menu::MenuWidget::MenuWidget(TonleiterData* data,QWidget* parent,const char* name,WFlags f) :QWidget(parent,name,f),data(data) { QGridLayout* layout=new QGridLayout(this,3,3,10,-1,"menulayout"); QLabel* instLabel=new QLabel(tr("Instr."),this,"instLabel"); layout->addWidget(instLabel,0,0); boxInst=new QComboBox(this,"boxInst"); connect(boxInst,SIGNAL(activated(int)),data,SLOT(setCurrentInstrumetID(int))); layout->addWidget(boxInst,0,1); editInst=new QPushButton(tr("Edit"),this,"editInst"); + connect(editInst,SIGNAL(pressed()),this,SLOT(editInstPressed())); layout->addWidget(editInst,0,2); QLabel* noteLabel=new QLabel(tr("Note"),this,"noteLabel"); layout->addWidget(noteLabel,1,0); boxNote=new QComboBox(this,"boxNote"); connect(boxNote,SIGNAL(activated(int)),data,SLOT(setCurrentNote(int))); layout->addWidget(boxNote,1,1); for(int a=0;a<12;a++) boxNote->insertItem(Note::notenames[a],a); boxNote->setCurrentItem(data->getCurrentBaseNote()); noteCheck=new QCheckBox(tr("show"),this,"noteCheck"); noteCheck->setChecked(data->isDrawNames()); connect(noteCheck,SIGNAL(toggled(bool)),data,SLOT(setDrawNames(bool))); layout->addWidget(noteCheck,1,2); QLabel* scaleLabel=new QLabel(tr("Scale"),this,"scaleLabel"); layout->addWidget(scaleLabel,2,0); boxScale=new QComboBox(this,"boxScale"); connect(boxScale,SIGNAL(activated(int)),data,SLOT(setCurrentScaleID(int))); layout->addWidget(boxScale,2,1); editScale=new QPushButton(tr("Edit"),this,"editScale"); + connect(editScale,SIGNAL(pressed()),this,SLOT(editScalePressed())); layout->addWidget(editScale,2,2); updateBoxes(); } //**************************************************************************** -MenuWidget::~MenuWidget() +Menu::MenuWidget::~MenuWidget() +{ +} +//**************************************************************************** +void Menu::MenuWidget::editInstPressed() +{ + InstEditDialog* instdialog=new InstEditDialog(data,this); + instdialog->exec(); +} +//**************************************************************************** +void Menu::MenuWidget::editScalePressed() { + ScaleEditDialog* scaledialog=new ScaleEditDialog(data,this); + scaledialog->exec(); } //**************************************************************************** -void MenuWidget::updateBoxes() +void Menu::MenuWidget::updateBoxes() { boxInst->clear(); for(int i=0;i<data->noOfInstruments();i++) { Instrument inst=data->getInstrument(i); QString name=inst.instName(); if(name.isNull()) continue; boxInst->insertItem(name,i); } boxInst->setCurrentItem(data->getCurrentInstrumentID()); boxScale->clear(); for(int s=0;s<data->noOfScales();s++) { Scale scale=data->getScale(s); QString name=scale.scaleName(); if(name.isNull()) continue; boxScale->insertItem(name,s); } boxScale->setCurrentItem(data->getCurrentScaleID()); } //**************************************************************************** //**************************************************************************** diff --git a/noncore/multimedia/tonleiter/menuwidget.h b/noncore/multimedia/tonleiter/menuwidget.h index 2635f8a..044a3e6 100644 --- a/noncore/multimedia/tonleiter/menuwidget.h +++ b/noncore/multimedia/tonleiter/menuwidget.h @@ -1,30 +1,37 @@ #ifndef TONLEITER_MENU_WIDGET_H #define TONLEITER_MENU_WIDGET_H #include <qcheckbox.h> #include <qcombobox.h> #include <qpushbutton.h> #include <qwidget.h> #include <qlabel.h> #include "tonleiterdata.h" -class MenuWidget : public QWidget +using namespace Data; +namespace Menu { - Q_OBJECT -private: - TonleiterData* data; - QComboBox* boxInst; - QPushButton* editInst; - QComboBox* boxNote; - QCheckBox* noteCheck; - QComboBox* boxScale; - QPushButton* editScale; -public: - MenuWidget(TonleiterData* data,QWidget* parent,const char* name="MenuWidget",WFlags f=0); - ~MenuWidget(); -public slots: - void updateBoxes(); + class MenuWidget : public QWidget + { + Q_OBJECT + private: + TonleiterData* data; + QComboBox* boxInst; + QPushButton* editInst; + QComboBox* boxNote; + QCheckBox* noteCheck; + QComboBox* boxScale; + QPushButton* editScale; + public: + MenuWidget(TonleiterData* data,QWidget* parent,const char* name="MenuWidget",WFlags f=0); + ~MenuWidget(); + private slots: + void editInstPressed(); + void editScalePressed(); + public slots: + void updateBoxes(); + }; }; #endif //TONLEITER_MENU_WIDGET_H diff --git a/noncore/multimedia/tonleiter/tonleiter.pro b/noncore/multimedia/tonleiter/tonleiter.pro index bf19c3a..2b0a798 100644 --- a/noncore/multimedia/tonleiter/tonleiter.pro +++ b/noncore/multimedia/tonleiter/tonleiter.pro @@ -1,13 +1,13 @@ TEMPLATE = app #CONFIG = qt warn_on debug CONFIG = qt warn_on release -HEADERS = mainwidget.h tonleiterdata.h tonleiterdatahelper.h fretboard.h menuwidget.h -SOURCES = mainwidget.cpp tonleiterdata.cpp tonleiterdatahelper.cpp fretboard.cpp menuwidget.cpp main.cpp +HEADERS = mainwidget.h tonleiterdata.h tonleiterdatahelper.h fretboard.h menuwidget.h editinst.h editscale.h +SOURCES = mainwidget.cpp tonleiterdata.cpp tonleiterdatahelper.cpp fretboard.cpp menuwidget.cpp main.cpp editinst.cpp editscale.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe INTERFACES = TARGET = tonleiter DESTDIR = $(OPIEDIR)/bin #TMAKE_CXXFLAGS += -DQT_QWS_VERCEL_IDR -DQWS -fno-exceptions -fno-rtti include ( $(OPIEDIR)/include.pro ) diff --git a/noncore/multimedia/tonleiter/tonleiterdata.cpp b/noncore/multimedia/tonleiter/tonleiterdata.cpp index e1ecb5a..946d4e3 100644 --- a/noncore/multimedia/tonleiter/tonleiterdata.cpp +++ b/noncore/multimedia/tonleiter/tonleiterdata.cpp @@ -1,191 +1,174 @@ #include "tonleiterdata.h" #include <qpe/config.h> +using namespace Data; + + TonleiterData::TonleiterData(QObject* parent) :QObject(parent) { drawnames=true; loadData(); } //**************************************************************************** TonleiterData::~TonleiterData() { saveData(); } //**************************************************************************** void TonleiterData::setCurrentInstrumetID(int id) { if(id>=0 && id<noOfInstruments()) { currentInstrumentID=id; emit dataChange(); } } //**************************************************************************** void TonleiterData::setCurrentScaleID(int id) { if(id>=0 && id<noOfScales()) { currentScaleID=id; emit dataChange(); } } //**************************************************************************** void TonleiterData::setCurrentNote(int id) { if(id>=0 && id<12) { currentNote=id; emit dataChange(); } } //**************************************************************************** void TonleiterData::setDrawNames(bool dn) { drawnames=dn; emit dataChange(); } //**************************************************************************** void TonleiterData::loadData() { -/* - QValueList<int> strings1; - strings1.append(Note::getNoteFromName("B",0)); - strings1.append(Note::getNoteFromName("E",1)); - strings1.append(Note::getNoteFromName("A",1)); - strings1.append(Note::getNoteFromName("D",2)); - strings1.append(Note::getNoteFromName("G",2)); - strings1.append(Note::getNoteFromName("C",3)); - instruments.append(Instrument("Thumb6",26,strings1)); - - QValueList<int> strings2; - strings2.append(Note::getNoteFromName("E",1)); - strings2.append(Note::getNoteFromName("A",1)); - strings2.append(Note::getNoteFromName("D",2)); - strings2.append(Note::getNoteFromName("G",2)); - instruments.append(Instrument("Bass 4",12,strings2)); - - currentInstrumentID=1; - - QValueList<int> scale1; - scale1.append(0); - scale1.append(2); - scale1.append(3); - scale1.append(5); - scale1.append(7); - scale1.append(8); - scale1.append(10); - scales.append(Scale("Minor",scale1)); - - QValueList<int> scale2; - scale2.append(0); - scale2.append(2); - scale2.append(4); - scale2.append(5); - scale2.append(7); - scale2.append(9); - scale2.append(10); - scales.append(Scale("Major",scale2)); + Config load("Tonleiter"); + if(!load.isValid()) + { + //write some default values + load.setGroup("General"); + load.writeEntry("currentInstrumentID",1); + load.writeEntry("currentNote",0); + load.writeEntry("currentScaleID",1); + load.writeEntry("drawnames",1); + load.setGroup("Instrument"); + load.writeEntry("Inst0","Thumb6;26;11;16;21;26;31;36;"); + load.writeEntry("Inst1","Bass 4;12;16;21;26;31;"); + load.writeEntry("noOfInstruments",2); + load.setGroup("Scale"); + load.writeEntry("Scale0","ionian;0;2;4;5;7;9;11;"); + load.writeEntry("Scale1","aeolian;0;2;3;5;7;8;10;"); + load.writeEntry("Scale2","dorian;0;2;3;5;7;9;10;"); + load.writeEntry("Scale3","phrygian;0;1;3;5;7;8;10;"); + load.writeEntry("Scale4","lydian;0;2;4;6;7;9;11;"); + load.writeEntry("Scale5","mixolyd.;0;2;4;5;7;9;10;"); + load.writeEntry("noOfScales",6); - currentScaleID=0; + } - currentNote=Note::getNoteFromName("A",0); -*/ - Config load("Tonleiter"); load.setGroup("General"); currentNote=load.readNumEntry("currentNote"); drawnames=load.readBoolEntry("drawnames"); currentInstrumentID=load.readNumEntry("currentInstrumentID"); currentScaleID=load.readNumEntry("currentScaleID"); load.setGroup("Instrument"); int noOfInstr=load.readNumEntry("noOfInstruments",0); for(int i=0;i<noOfInstr;i++) { QStringList instlist=load.readListEntry("Inst"+QString::number(i),';'); QValueList<int> strings; for(int st=2;st<(int)instlist.count();st++) strings.append(instlist[st].toInt()); instruments.append(Instrument(instlist[0],instlist[1].toInt(),strings)); } load.setGroup("Scale"); int scaleno=load.readNumEntry("noOfScales",0); for(int s=0;s<scaleno;s++) { QStringList scalelist=load.readListEntry("Scale"+QString::number(s),';'); QValueList<int> halftones; for(int ht=1;ht<(int)scalelist.count();ht++) halftones.append(scalelist[ht].toInt()); scales.append(Scale(scalelist[0],halftones)); } } //**************************************************************************** void TonleiterData::saveData() { Config save("Tonleiter"); save.setGroup("General"); save.writeEntry("currentNote",currentNote); save.writeEntry("drawnames",drawnames); save.writeEntry("currentInstrumentID",currentInstrumentID); save.writeEntry("currentScaleID",currentScaleID); save.setGroup("Instrument"); save.writeEntry("noOfInstruments",noOfInstruments()); for(int i=0;i<noOfInstruments();i++) { QStringList instlist; Instrument inst=getInstrument(i); instlist.append(inst.instName()); instlist.append(QString::number(inst.noOfFrets())); for(int st=0;st<inst.noOfStrings();st++) instlist.append(QString::number(inst.string(st))); save.writeEntry("Inst"+QString::number(i),instlist,';'); } save.setGroup("Scale"); save.writeEntry("noOfScales",noOfScales()); for(int s=0;s<noOfScales();s++) { QStringList scalelist; Scale scale=getScale(s); scalelist.append(scale.scaleName()); for(int ht=0;ht<scale.noOfHaltones();ht++) scalelist.append(QString::number(scale.getHalfTone(ht))); save.writeEntry("Scale"+QString::number(s),scalelist,';'); } } //**************************************************************************** int TonleiterData::noOfInstruments() { return (int)instruments.count(); } //**************************************************************************** Instrument TonleiterData::getInstrument(int id) { if(id>=0 && id<noOfInstruments()) return instruments[id]; else { qDebug("undefined insrtument %d of %d",id,instruments.count()); return Instrument(); } } //**************************************************************************** int TonleiterData::getCurrentInstrumentID() { return currentInstrumentID; } //**************************************************************************** int TonleiterData::noOfScales() { return (int)scales.count(); } //**************************************************************************** Scale TonleiterData::getScale(int id) { if(id>=0 && id<noOfScales()) return scales[id]; diff --git a/noncore/multimedia/tonleiter/tonleiterdata.h b/noncore/multimedia/tonleiter/tonleiterdata.h index a5e6884..71d05fd 100644 --- a/noncore/multimedia/tonleiter/tonleiterdata.h +++ b/noncore/multimedia/tonleiter/tonleiterdata.h @@ -1,46 +1,49 @@ #ifndef TONLEITER_DATA_H #define TONLEITER_DATA_H #include <qobject.h> #include "tonleiterdatahelper.h" -class TonleiterData : public QObject +namespace Data { - Q_OBJECT -private: - QValueList<Instrument> instruments; - int currentInstrumentID; - - QValueList<Scale> scales; - int currentScaleID; - - int currentNote; - bool drawnames; -public: - TonleiterData(QObject* parent); - ~TonleiterData(); -signals: - void dataChange(); -public slots: - void setCurrentInstrumetID(int id); - void setCurrentScaleID(int id); - void setCurrentNote(int id); - void setDrawNames(bool dn); -private: - void loadData(); - void saveData(); -public: - int noOfInstruments(); - Instrument getInstrument(int id); - int getCurrentInstrumentID(); - - int noOfScales(); - Scale getScale(int id); - int getCurrentScaleID(); - - int getCurrentBaseNote(); - bool isDrawNames(); + class TonleiterData : public QObject + { + Q_OBJECT + private: + QValueList<Instrument> instruments; + int currentInstrumentID; + + QValueList<Scale> scales; + int currentScaleID; + + int currentNote; + bool drawnames; + public: + TonleiterData(QObject* parent); + ~TonleiterData(); + signals: + void dataChange(); + public slots: + void setCurrentInstrumetID(int id); + void setCurrentScaleID(int id); + void setCurrentNote(int id); + void setDrawNames(bool dn); + private: + void loadData(); + void saveData(); + public: + int noOfInstruments(); + Instrument getInstrument(int id); + int getCurrentInstrumentID(); + + int noOfScales(); + Scale getScale(int id); + int getCurrentScaleID(); + + int getCurrentBaseNote(); + bool isDrawNames(); + }; }; #endif //TONLEITER_DATA_H diff --git a/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp b/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp index c52e0da..5714cea 100644 --- a/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp +++ b/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp @@ -1,98 +1,100 @@ #include "tonleiterdatahelper.h" +using namespace Data; + int Note::getOctaveOfNote(int note) { int remain=note%12; return (note-remain)/12; } //**************************************************************************** QString Note::getNameOfNote(int note) { int octave=getOctaveOfNote(note); return notenames[note-12*octave]; } //**************************************************************************** int Note::getNoteFromName(QString name,int octave) { int notevalue=0; for(int a=0;a<12;a++) { if(name==notenames[a]) { notevalue=a; break; } } return notevalue+12*octave; } //**************************************************************************** int Note::octaveOfBaseNote(int base,int note) { int normnote = (note>=base) ? note-base : (12-base)+note; int octave=getOctaveOfNote(normnote); //qDebug("note %d of %d base is norm %d -> ocatve %d",note,base,normnote,octave); return octave; } //**************************************************************************** //**************************************************************************** Instrument::Instrument() { name="UNDEFINED"; frets=0; } //**************************************************************************** Instrument::Instrument(QString name,int frets,QValueList<int> strings) :name(name),frets(frets),strings(strings) { } //**************************************************************************** Instrument::~Instrument() { } //**************************************************************************** int Instrument::noOfStrings() { return (int)strings.count(); } //**************************************************************************** int Instrument::noOfFrets() { return frets; } //**************************************************************************** QString Instrument::instName() { return name; } //**************************************************************************** int Instrument::string(int id) { return strings[id]; } //**************************************************************************** int Instrument::noOfOctaves() { int lowest=strings[0]; int highest=strings[strings.count()-1]+frets; return (int)((highest-lowest)/12.0); } //**************************************************************************** //**************************************************************************** Scale::Scale() { name="UNDEFINED"; } //**************************************************************************** Scale::Scale(QString name,QValueList<int> halftones) :name(name),halftones(halftones) { } //**************************************************************************** Scale::~Scale() { } //**************************************************************************** int Scale::noOfHaltones() { return (int)halftones.count(); } diff --git a/noncore/multimedia/tonleiter/tonleiterdatahelper.h b/noncore/multimedia/tonleiter/tonleiterdatahelper.h index 94895ea..b79162a 100644 --- a/noncore/multimedia/tonleiter/tonleiterdatahelper.h +++ b/noncore/multimedia/tonleiter/tonleiterdatahelper.h @@ -1,53 +1,55 @@ #ifndef TONLEITER_DATA_HELPER_H #define TONLEITER_DATA_HELPER_H #include <qstring.h> #include <qvaluelist.h> -namespace Note +namespace Data { - const QString notenames[]={"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}; - - int getOctaveOfNote(int note); - QString getNameOfNote(int note); - int getNoteFromName(QString name,int octave); - int octaveOfBaseNote(int base,int note); -}; - -class Instrument -{ -private: - QString name; - int frets; - QValueList<int> strings; -public: - Instrument(); - Instrument(QString name,int frets,QValueList<int> strings); - ~Instrument(); -public: - int noOfStrings(); - int noOfFrets(); - QString instName(); - int string(int id); - int noOfOctaves(); + namespace Note + { + const QString notenames[]={"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}; + + int getOctaveOfNote(int note); + QString getNameOfNote(int note); + int getNoteFromName(QString name,int octave); + int octaveOfBaseNote(int base,int note); + }; + + class Instrument + { + private: + QString name; + int frets; + QValueList<int> strings; + public: + Instrument(); + Instrument(QString name,int frets,QValueList<int> strings); + ~Instrument(); + public: + int noOfStrings(); + int noOfFrets(); + QString instName(); + int string(int id); + int noOfOctaves(); + }; + + class Scale + { + private: + QValueList<int> halftones; + QString name; + public: + Scale(); + Scale(QString name,QValueList<int> halftones); + ~Scale(); + public: + int noOfHaltones(); + int getHalfTone(int id); + QString scaleName(); + bool noteInScale(int base,int note); + }; }; -class Scale -{ -private: - QValueList<int> halftones; - QString name; -public: - Scale(); - Scale(QString name,QValueList<int> halftones); - ~Scale(); -public: - int noOfHaltones(); - int getHalfTone(int id); - QString scaleName(); - bool noteInScale(int base,int note); -}; - - #endif //TONLEITER_DATA_HELPER_H |