161 lines
5.8 KiB
C++
161 lines
5.8 KiB
C++
#include <guitar/ChordBuilderDialog.hpp>
|
|
#include <guitar/guitar.hpp>
|
|
#include <guitar/TabEntry.hpp>
|
|
#include <guitar/MessageBox.hpp>
|
|
#include <guitar/CBCommands.hpp>
|
|
#include <guitar/MessageBox.hpp>
|
|
#include <music/ChordCompiler.hpp>
|
|
#include <common/puredwrd.hpp>
|
|
#include <common/crsctrl.hpp>
|
|
#include <common/StringBuffer.hpp>
|
|
|
|
using namespace Music;
|
|
|
|
ChordBuilderDialog::ChordBuilderDialog(void)
|
|
{
|
|
mInitHandler.setCallback(this,&ChordBuilderDialog::initHandler);
|
|
mCreateHandler.setCallback(this,&ChordBuilderDialog::createHandler);
|
|
mCloseHandler.setCallback(this,&ChordBuilderDialog::closeHandler);
|
|
mDestroyHandler.setCallback(this,&ChordBuilderDialog::destroyHandler);
|
|
mCommandHandler.setCallback(this,&ChordBuilderDialog::commandHandler);
|
|
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
ChordBuilderDialog::ChordBuilderDialog(const ChordBuilderDialog &someChordBuilderDialog)
|
|
{ // private implementation
|
|
*this=someChordBuilderDialog;
|
|
}
|
|
|
|
ChordBuilderDialog::~ChordBuilderDialog()
|
|
{
|
|
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
ChordBuilderDialog &ChordBuilderDialog::operator=(const ChordBuilderDialog &someChordBuilderDialog)
|
|
{ // private implementation
|
|
return *this;
|
|
}
|
|
|
|
bool ChordBuilderDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer)
|
|
{
|
|
Rect clientRect;
|
|
mPlayNoteHandler=callbackPointer;
|
|
parentWindow.clientRect(clientRect);
|
|
mDisplayPoint.x((clientRect.right()-clientRect.left())/2);
|
|
mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2);
|
|
return ::DialogBoxParam(processInstance(),(LPSTR)"CHORDBUILDERDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
|
|
}
|
|
|
|
CallbackData::ReturnType ChordBuilderDialog::initHandler(CallbackData &someCallbackData)
|
|
{
|
|
mDisplayPoint.x(mDisplayPoint.x()-(width()/2));
|
|
mDisplayPoint.y(mDisplayPoint.y()-(height()/2));
|
|
move(mDisplayPoint);
|
|
return (CallbackData::ReturnType)false;
|
|
}
|
|
|
|
CallbackData::ReturnType ChordBuilderDialog::createHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType ChordBuilderDialog::closeHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType ChordBuilderDialog::destroyHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType ChordBuilderDialog::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wmCommandID())
|
|
{
|
|
case IDCANCEL :
|
|
endDialog(false);
|
|
break;
|
|
case IDOK :
|
|
if(handleChordSelection())endDialog(true);
|
|
else MessageBox::messageBox("Unable to parse chord.","Please check parameters (parser is case sensitive)");
|
|
break;
|
|
case ENTERCHORD_EXAMPLES :
|
|
handleShowExamples();
|
|
break;
|
|
}
|
|
if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection();
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
bool ChordBuilderDialog::handleChordSelection(void)
|
|
{
|
|
ChordCompiler chordCompiler;
|
|
Music::Chord chord;
|
|
String strChord;
|
|
|
|
strChord=getText(ENTERCHORD_EDIT);
|
|
if(!chordCompiler.compile(strChord,chord))return false;
|
|
CallbackData cbData(CBCommands::FBPlayChord,(DWORD)&chord);
|
|
mPlayNoteHandler.callback(cbData);
|
|
return true;
|
|
}
|
|
|
|
void ChordBuilderDialog::makeTabEntry(String strLine,TabEntry &entry)
|
|
{
|
|
strLine=strLine.betweenString('[',']');
|
|
if(strLine.isNull())return;
|
|
char *ptr=strLine.str();
|
|
|
|
entry.remove();
|
|
for(int string=0;string<6;string++)
|
|
{
|
|
if(!string)ptr=::strtok(ptr," ]\0");
|
|
else ptr=::strtok(0," ]\0");
|
|
if(String(ptr).equals("x"))continue;
|
|
FrettedNote frettedNote;
|
|
frettedNote.setString(string);
|
|
frettedNote.setFret(::atoi(ptr));
|
|
frettedNote.setNote(mFretboard.getAt(frettedNote.getString(),frettedNote.getFret()));
|
|
entry.insert(&frettedNote);
|
|
}
|
|
}
|
|
|
|
void ChordBuilderDialog::handleShowExamples()
|
|
{
|
|
StringBuffer stringBuffer;
|
|
String crlf("\n");
|
|
|
|
stringBuffer.append("\"C^\" - C Major 7th ").append(crlf);
|
|
stringBuffer.append("\"Db^\" - D Flat Major 7th").append(crlf);
|
|
stringBuffer.append("\"C^#4\" - C Major 7th- sharp 4").append(crlf);
|
|
stringBuffer.append("\"D7\" - D Dominant 7th").append(crlf);
|
|
stringBuffer.append("\"D-7\" - D Minor 7th").append(crlf);
|
|
stringBuffer.append("\"Cb7#9\" - C Flat 7th - sharp 9").append(crlf);
|
|
stringBuffer.append("\"Eb-7\" - E Flat Minor 7th").append(crlf);
|
|
stringBuffer.append("\"G-\" - G Minor").append(crlf);
|
|
stringBuffer.append("\"Ab7\" - A Flat Dominant 7th").append(crlf);
|
|
stringBuffer.append("\"F#7\" - F Sharp Major 7th").append(crlf);
|
|
stringBuffer.append("\"C7#9\" - C Dominant 7th - sharp 9").append(crlf);
|
|
stringBuffer.append("\"Gb^#4\" - G Flat Major 7th - sharp 4").append(crlf);
|
|
stringBuffer.append("\"G7#11\" - G Dominant 7th - sharp 11").append(crlf);
|
|
stringBuffer.append("\"Ebsus\" - E Flat Sus").append(crlf);
|
|
stringBuffer.append("\"Dsusb9\" - D Sus - Flat 9").append(crlf);
|
|
stringBuffer.append("\"F#susb9\"- F Sharp Sus - Flat 9").append(crlf);
|
|
stringBuffer.append("\"Ebsusb9\"- E Flat Sus - Flat 9").append(crlf);
|
|
stringBuffer.append("\"A-b6\" - A Minor - Flat 6").append(crlf);
|
|
stringBuffer.append("\"Ao\" - A Half Diminished a.k.a B-7b5").append(crlf);
|
|
stringBuffer.append("\"C-#7\" - C Minor - Sharp 7 a.k.a C MinorMajor").append(crlf);
|
|
stringBuffer.append("\"C-^\" - C MinorMajor").append(crlf);
|
|
MessageBox::messageBox(*this,"Example Chords",stringBuffer.toString());
|
|
}
|
|
|