#include #include #include #include #include #include #include #include #include #include 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()); }