-rw-r--r-- | noncore/multimedia/tonleiter/editinst.cpp | 93 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editinst.h | 31 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editscale.cpp | 32 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editscale.h | 4 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editstringwidget.cpp | 32 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/editstringwidget.h | 24 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/menuwidget.cpp | 20 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/pianoscale.cpp | 96 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/pianoscale.h | 28 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiter.pro | 4 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiterdata.cpp | 2 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiterdatahelper.cpp | 4 | ||||
-rw-r--r-- | noncore/multimedia/tonleiter/tonleiterdatahelper.h | 2 |
13 files changed, 365 insertions, 7 deletions
diff --git a/noncore/multimedia/tonleiter/editinst.cpp b/noncore/multimedia/tonleiter/editinst.cpp index 1eba4dc..120c3ac 100644 --- a/noncore/multimedia/tonleiter/editinst.cpp +++ b/noncore/multimedia/tonleiter/editinst.cpp @@ -1,14 +1,107 @@ #include "editinst.h" +#include <qlabel.h> +#include <qpushbutton.h> + Menu::InstEditDialog::InstEditDialog(TonleiterData* data,QWidget* parent,const char* name) :QDialog(parent,name,true,0),data(data) { setCaption("Tonleiter::"+tr("Instrument")); + QBoxLayout* masterlayout=new QBoxLayout(this,QBoxLayout::TopToBottom); + instid=data->getCurrentInstrumentID(); + stringlist.setAutoDelete(true); + + QBoxLayout* toplayout=new QBoxLayout(masterlayout,QBoxLayout::LeftToRight); + + //Name combo + Add + Delete + boxInst=new QComboBox(this,"boxInst"); + boxInst->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); + connect(boxInst,SIGNAL(activated(int)),this,SLOT(setCurrentInstrumetID(int))); + 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(instid); + toplayout->addWidget(boxInst); + + QPushButton* addButton=new QPushButton(tr("Add"),this,"addButton"); + connect(addButton,SIGNAL(pressed()),this,SLOT(addInstrument())); + toplayout->addWidget(addButton); + + QPushButton* delButton=new QPushButton(tr("Delete"),this,"delButton"); + connect(delButton,SIGNAL(pressed()),this,SLOT(deleteInstrument())); + toplayout->addWidget(delButton); + + QPushButton* addhighButton=new QPushButton(tr("Add High String"),this,"addhighButton"); + masterlayout->addWidget(addhighButton); + + QScrollView* scrollview=new QScrollView(this); + scrollview->setVScrollBarMode(QScrollView::AlwaysOn); + scrollview->setHScrollBarMode(QScrollView::AlwaysOff); + stringwidget=new QVBox(scrollview->viewport()); + stringwidget->setSizePolicy(QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum)); + stringwidget->setSpacing(10); + scrollview->addChild(stringwidget); + scrollview->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); + //scrollview->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding)); + masterlayout->addWidget(scrollview); + + loadInstrument(); + + QPushButton* addlowButton=new QPushButton(tr("Add Low String"),this,"addlowButton"); + masterlayout->addWidget(addlowButton); + + //make dialog fit the screen showMaximized(); } //**************************************************************************** Menu::InstEditDialog::~InstEditDialog() { } //**************************************************************************** +void Menu::InstEditDialog::setCurrentInstrumetID(int id) +{ + saveInstrument(); + instid=id; + data->setCurrentInstrumetID(id); + loadInstrument(); +} +//**************************************************************************** +void Menu::InstEditDialog::addInstrument() +{ +} +//**************************************************************************** +void Menu::InstEditDialog::deleteInstrument() +{ +} +//**************************************************************************** +void Menu::InstEditDialog::addLowString() +{ +} +//**************************************************************************** +void Menu::InstEditDialog::addHighString() +{ +} +//**************************************************************************** +void Menu::InstEditDialog::deleteString(int id) +{ +} +//**************************************************************************** +void Menu::InstEditDialog::saveInstrument() +{ + stringlist.clear(); +} +//**************************************************************************** +void Menu::InstEditDialog::loadInstrument() +{ + Instrument inst=data->getInstrument(instid); + for(uint s=0;s<inst.noOfStrings();s++) + { + stringlist.append(new EditStringWidget(inst.string(s),stringwidget)); + } +} +//**************************************************************************** //**************************************************************************** diff --git a/noncore/multimedia/tonleiter/editinst.h b/noncore/multimedia/tonleiter/editinst.h index e7eba15..948a2de 100644 --- a/noncore/multimedia/tonleiter/editinst.h +++ b/noncore/multimedia/tonleiter/editinst.h @@ -1,23 +1,52 @@ #ifndef TONLEITER_EDIT_INSTRUMENT_DIALOG_H #define TONLEITER_EDIT_INSTRUMENT_DIALOG_H #include <qdialog.h> +#include <qcombobox.h> +#include <qscrollview.h> +#include <qspinbox.h> +#include <qlayout.h> +#include <qlist.h> +#include <qvbox.h> -#include "tonleiterdata.h" + +#include "editstringwidget.h" using namespace Data; + namespace Menu { class InstEditDialog : public QDialog { Q_OBJECT private: TonleiterData* data; + int instid; + + QComboBox* boxInst; + QSpinBox* stringBox; + + QVBox* stringwidget; + + //this is a QPtrList !! + typedef QList<EditStringWidget> StringWidgetList; + StringWidgetList stringlist; public: InstEditDialog(TonleiterData* data,QWidget* parent,const char* name="InstEditDialog"); ~InstEditDialog(); + private slots: + void setCurrentInstrumetID(int id); + void addInstrument(); + void deleteInstrument(); + + void addLowString(); + void addHighString(); + void deleteString(int id); + private: + void saveInstrument(); + void loadInstrument(); }; }; #endif //TONLEITER_EDIT_INSTRUMENT_DIALOG_H diff --git a/noncore/multimedia/tonleiter/editscale.cpp b/noncore/multimedia/tonleiter/editscale.cpp index 593a150..0be0058 100644 --- a/noncore/multimedia/tonleiter/editscale.cpp +++ b/noncore/multimedia/tonleiter/editscale.cpp @@ -1,12 +1,44 @@ #include "editscale.h" +#include <qlayout.h> +#include <qpushbutton.h> + Menu::ScaleEditDialog::ScaleEditDialog(TonleiterData* data,QWidget* parent,const char* name) :QDialog(parent,name,true,0),data(data) { setCaption("Tonleiter::"+tr("Scale")); + QBoxLayout* masterlayout=new QBoxLayout(this,QBoxLayout::TopToBottom); + + QBoxLayout* toplayout=new QBoxLayout(masterlayout,QBoxLayout::LeftToRight); + + boxScale=new QComboBox(this,"boxScale"); + 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()); + boxScale->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); + connect(boxScale,SIGNAL(activated(int)),data,SLOT(setCurrentScaleID(int))); + toplayout->addWidget(boxScale); + + QPushButton* addButton=new QPushButton(tr("Add"),this,"addButton"); + connect(addButton,SIGNAL(pressed()),this,SLOT(addInstrument())); + toplayout->addWidget(addButton); + + QPushButton* delButton=new QPushButton(tr("Delete"),this,"delButton"); + connect(delButton,SIGNAL(pressed()),this,SLOT(deleteInstrument())); + toplayout->addWidget(delButton); + + pianoscale=new PianoScale(this); + masterlayout->addWidget(pianoscale); + + //make dialog fit the screen showMaximized(); } //**************************************************************************** Menu::ScaleEditDialog::~ScaleEditDialog() { } diff --git a/noncore/multimedia/tonleiter/editscale.h b/noncore/multimedia/tonleiter/editscale.h index 0e5eb1c..1121c1f 100644 --- a/noncore/multimedia/tonleiter/editscale.h +++ b/noncore/multimedia/tonleiter/editscale.h @@ -1,22 +1,26 @@ #ifndef TONLEITER_EDIT_SCALE_DIALOG_H #define TONLEITER_EDIT_SCALE_DIALOG_H #include <qdialog.h> +#include <qcombobox.h> #include "tonleiterdata.h" +#include "pianoscale.h" using namespace Data; namespace Menu { class ScaleEditDialog : public QDialog { Q_OBJECT private: TonleiterData* data; + QComboBox* boxScale; + PianoScale* pianoscale; public: ScaleEditDialog(TonleiterData* data,QWidget* parent,const char* name="ScaleEditDialog"); ~ScaleEditDialog(); }; }; diff --git a/noncore/multimedia/tonleiter/editstringwidget.cpp b/noncore/multimedia/tonleiter/editstringwidget.cpp new file mode 100644 index 0000000..d22bbc5 --- a/dev/null +++ b/noncore/multimedia/tonleiter/editstringwidget.cpp @@ -0,0 +1,32 @@ +#include "editstringwidget.h" + +#include <qlabel.h> +#include <qlayout.h> + +using namespace Data; + +Menu::EditStringWidget::EditStringWidget(int note,QWidget* parent,const char* name,WFlags f) +:QFrame(parent,name,f) +{ + QBoxLayout* layout=new QBoxLayout(this,QBoxLayout::LeftToRight,10); + + boxNote=new QComboBox(this,"boxNote"); + boxNote->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); + //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(note-12*Note::getOctaveOfNote(note)); + layout->addWidget(boxNote); + + setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); + setFrameShape(QFrame::Panel); + setFrameShadow(QFrame::Sunken); + +} +//**************************************************************************** +Menu::EditStringWidget::~EditStringWidget() +{ +} +//**************************************************************************** +//**************************************************************************** diff --git a/noncore/multimedia/tonleiter/editstringwidget.h b/noncore/multimedia/tonleiter/editstringwidget.h new file mode 100644 index 0000000..ba105a9 --- a/dev/null +++ b/noncore/multimedia/tonleiter/editstringwidget.h @@ -0,0 +1,24 @@ +#ifndef TONLEITER_EDIT_STRING_WIDGT_H +#define TONLEITER_EDIT_STRING_WIDGT_H + +#include <qframe.h> +#include <qcombobox.h> +#include <qspinbox.h> + +#include "tonleiterdata.h" + +namespace Menu +{ + class EditStringWidget : public QFrame + { + Q_OBJECT + private: + QComboBox* boxNote; + public: + EditStringWidget(int note,QWidget* parent,const char* name=0,WFlags f=0); + ~EditStringWidget(); + }; +}; + +#endif //TONLEITER_EDIT_STRING_WIDGT_H + diff --git a/noncore/multimedia/tonleiter/menuwidget.cpp b/noncore/multimedia/tonleiter/menuwidget.cpp index 1e3742c..56a2f8a 100644 --- a/noncore/multimedia/tonleiter/menuwidget.cpp +++ b/noncore/multimedia/tonleiter/menuwidget.cpp @@ -8,45 +8,63 @@ 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"); + //Instrument QLabel* instLabel=new QLabel(tr("Instr."),this,"instLabel"); + instLabel->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); layout->addWidget(instLabel,0,0); + boxInst=new QComboBox(this,"boxInst"); + boxInst->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); connect(boxInst,SIGNAL(activated(int)),data,SLOT(setCurrentInstrumetID(int))); layout->addWidget(boxInst,0,1); + editInst=new QPushButton(tr("Edit"),this,"editInst"); + editInst->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); connect(editInst,SIGNAL(pressed()),this,SLOT(editInstPressed())); layout->addWidget(editInst,0,2); + //Note QLabel* noteLabel=new QLabel(tr("Note"),this,"noteLabel"); + noteLabel->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); layout->addWidget(noteLabel,1,0); + boxNote=new QComboBox(this,"boxNote"); + boxNote->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); 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->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); noteCheck->setChecked(data->isDrawNames()); connect(noteCheck,SIGNAL(toggled(bool)),data,SLOT(setDrawNames(bool))); layout->addWidget(noteCheck,1,2); + //Scale QLabel* scaleLabel=new QLabel(tr("Scale"),this,"scaleLabel"); + scaleLabel->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); layout->addWidget(scaleLabel,2,0); + boxScale=new QComboBox(this,"boxScale"); + boxScale->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); connect(boxScale,SIGNAL(activated(int)),data,SLOT(setCurrentScaleID(int))); layout->addWidget(boxScale,2,1); + editScale=new QPushButton(tr("Edit"),this,"editScale"); + editScale->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); connect(editScale,SIGNAL(pressed()),this,SLOT(editScalePressed())); layout->addWidget(editScale,2,2); updateBoxes(); - + setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); } //**************************************************************************** Menu::MenuWidget::~MenuWidget() { } //**************************************************************************** diff --git a/noncore/multimedia/tonleiter/pianoscale.cpp b/noncore/multimedia/tonleiter/pianoscale.cpp new file mode 100644 index 0000000..3d5add2 --- a/dev/null +++ b/noncore/multimedia/tonleiter/pianoscale.cpp @@ -0,0 +1,96 @@ +#include "pianoscale.h" + +#include <qpainter.h> + + +Menu::PianoScale::PianoScale(QWidget* parent,const char* name,WFlags f) +:QWidget(parent,name,f) +{ + QColor black(0,0,0); + QColor white(255,255,255); + QColor mark(255,0,0); + blackBrush=QBrush(black); + whiteBrush=QBrush(white); + markBrush=QBrush(mark); + blackPen=QPen(black); + whitePen=QPen(white); + setBackgroundColor(QColor(0,0,255)); +} +//**************************************************************************** +Menu::PianoScale::~ PianoScale() +{ +} +//**************************************************************************** +void Menu::PianoScale::paintEvent(QPaintEvent* pe) +{ + QPainter p(this); + QRect mysize=rect(); + + int pad=10; + int x0=pad; + int y0=pad; + int w0=mysize.width()-2*pad; + int h0=mysize.height()-2*pad; + + int keypad=2; + if(mysize.width()>mysize.height()) + { + int div=(int)(w0/14.0); + int halftonewidth=(int)(div/3.0); + int halftoneheight=(int)((h0-2*keypad)*0.66); + for(int a=0;a<14;a++) + { + int x=x0+a*div; + + p.setPen(blackPen); + p.setBrush(blackBrush); + p.drawRect(x,y0,div,h0); + + p.setPen(whitePen); + p.setBrush(whiteBrush); + p.drawRect(x+keypad,y0+keypad,div-2*keypad,h0-2*keypad); + + if(a==1 || a==2 || a==4 || a==5 || a==6 || a==8 || a==9 || a==11 || a==12 || a==13) + { + p.setPen(blackPen); + p.setBrush(blackBrush); + p.drawRect(x-halftonewidth,y0+keypad,2*halftonewidth,halftoneheight); + } + } + } + else + { + int div=(int)(w0/7.0); + int halfheight=(int)(h0/2.0); + int halftonewidth=(int)(div/3.0); + int halftoneheight=(int)((halfheight-2*keypad)*0.66); + for(int a=0;a<7;a++) + { + int x=x0+a*div; + + p.setPen(blackPen); + p.setBrush(blackBrush); + p.drawRect(x,y0,div,h0); + + p.setPen(whitePen); + p.setBrush(whiteBrush); + p.drawRect(x+keypad,y0+keypad,div-2*keypad,halfheight-2*keypad); + p.drawRect(x+keypad,y0+keypad+halfheight,div-2*keypad,halfheight-2*keypad); + + if(a==1 || a==2 || a==4 || a==5 || a==6) + { + p.setPen(blackPen); + p.setBrush(blackBrush); + p.drawRect(x-halftonewidth,y0+keypad,2*halftonewidth,halftoneheight); + p.drawRect(x-halftonewidth,y0+keypad+halfheight,2*halftonewidth,halftoneheight); + } + } + } +} +//**************************************************************************** +void Menu::PianoScale::mousePressEvent(QMouseEvent* me) +{ +} +//**************************************************************************** +//**************************************************************************** + diff --git a/noncore/multimedia/tonleiter/pianoscale.h b/noncore/multimedia/tonleiter/pianoscale.h new file mode 100644 index 0000000..63995b0 --- a/dev/null +++ b/noncore/multimedia/tonleiter/pianoscale.h @@ -0,0 +1,28 @@ +#ifndef TONLEITER_PIANO_SCALE_H +#define TONLEITER_PIANO_SCALE_H + +#include <qwidget.h> +#include <qpen.h> +#include <qbrush.h> + +namespace Menu +{ + class PianoScale : public QWidget + { + Q_OBJECT + private: + QBrush blackBrush; + QBrush whiteBrush; + QBrush markBrush; + QPen blackPen; + QPen whitePen; + public: + PianoScale(QWidget* parent,const char* name="PianoScale",WFlags f=0); + ~PianoScale(); + private: + void paintEvent(QPaintEvent* pe); + void mousePressEvent(QMouseEvent* me); + }; +}; + +#endif //TONLEITER_PIANO_SCALE_H diff --git a/noncore/multimedia/tonleiter/tonleiter.pro b/noncore/multimedia/tonleiter/tonleiter.pro index 2b0a798..c52ca19 100644 --- a/noncore/multimedia/tonleiter/tonleiter.pro +++ b/noncore/multimedia/tonleiter/tonleiter.pro @@ -1,11 +1,11 @@ TEMPLATE = app #CONFIG = qt warn_on debug CONFIG = qt warn_on release -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 +HEADERS = mainwidget.h tonleiterdata.h tonleiterdatahelper.h fretboard.h menuwidget.h editinst.h editstringwidget.h editscale.h pianoscale.h +SOURCES = mainwidget.cpp tonleiterdata.cpp tonleiterdatahelper.cpp fretboard.cpp menuwidget.cpp main.cpp editinst.cpp editstringwidget.cpp editscale.cpp pianoscale.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe INTERFACES = TARGET = tonleiter DESTDIR = $(OPIEDIR)/bin diff --git a/noncore/multimedia/tonleiter/tonleiterdata.cpp b/noncore/multimedia/tonleiter/tonleiterdata.cpp index 946d4e3..bf7b32c 100644 --- a/noncore/multimedia/tonleiter/tonleiterdata.cpp +++ b/noncore/multimedia/tonleiter/tonleiterdata.cpp @@ -68,13 +68,13 @@ void TonleiterData::loadData() 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("Scale5","mixolydian;0;2;4;5;7;9;10;"); load.writeEntry("noOfScales",6); } load.setGroup("General"); currentNote=load.readNumEntry("currentNote"); diff --git a/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp b/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp index 5714cea..156dba5 100644 --- a/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp +++ b/noncore/multimedia/tonleiter/tonleiterdatahelper.cpp @@ -1,8 +1,10 @@ #include "tonleiterdatahelper.h" +#include <math.h> + using namespace Data; int Note::getOctaveOfNote(int note) { int remain=note%12; return (note-remain)/12; @@ -73,13 +75,13 @@ int Instrument::string(int id) } //**************************************************************************** int Instrument::noOfOctaves() { int lowest=strings[0]; int highest=strings[strings.count()-1]+frets; - return (int)((highest-lowest)/12.0); + return (int) ceil((highest-lowest)/12.0); } //**************************************************************************** //**************************************************************************** Scale::Scale() { name="UNDEFINED"; diff --git a/noncore/multimedia/tonleiter/tonleiterdatahelper.h b/noncore/multimedia/tonleiter/tonleiterdatahelper.h index b79162a..e4153d7 100644 --- a/noncore/multimedia/tonleiter/tonleiterdatahelper.h +++ b/noncore/multimedia/tonleiter/tonleiterdatahelper.h @@ -5,13 +5,13 @@ #include <qvaluelist.h> namespace Data { namespace Note { - const QString notenames[]={"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}; + const QString notenames[]={"A","Bb","B","C","C#","D","D#","E","F","F#","G","G#"}; int getOctaveOfNote(int note); QString getNameOfNote(int note); int getNoteFromName(QString name,int octave); int octaveOfBaseNote(int base,int note); }; |