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