#include #include #include #include #include #include ChordDialog::ChordDialog(void) { mInitHandler.setCallback(this,&ChordDialog::initHandler); mCreateHandler.setCallback(this,&ChordDialog::createHandler); mCloseHandler.setCallback(this,&ChordDialog::closeHandler); mDestroyHandler.setCallback(this,&ChordDialog::destroyHandler); mCommandHandler.setCallback(this,&ChordDialog::commandHandler); insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); insertHandler(VectorHandler::CreateHandler,&mCreateHandler); insertHandler(VectorHandler::CloseHandler,&mCloseHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); } ChordDialog::ChordDialog(const ChordDialog &someChordDialog) { // private implementation *this=someChordDialog; } ChordDialog::~ChordDialog() { removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); removeHandler(VectorHandler::CreateHandler,&mCreateHandler); removeHandler(VectorHandler::CloseHandler,&mCloseHandler); removeHandler(VectorHandler::CommandHandler,&mCommandHandler); removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); } ChordDialog &ChordDialog::operator=(const ChordDialog &someChordDialog) { // private implementation return *this; } bool ChordDialog::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)"CHORDDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); } CallbackData::ReturnType ChordDialog::initHandler(CallbackData &someCallbackData) { mDisplayPoint.x(mDisplayPoint.x()-(width()/2)); mDisplayPoint.y(mDisplayPoint.y()-(height()/2)); move(mDisplayPoint); mChordList=::new OwnerDrawListAltColor(*this,getItem(CHORDS_LIST),CHORDS_LIST); mChordList.disposition(PointerDisposition::Delete); setChordList(); return (CallbackData::ReturnType)false; } CallbackData::ReturnType ChordDialog::createHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType ChordDialog::closeHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType ChordDialog::destroyHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType ChordDialog::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wmCommandID()) { case IDCANCEL : endDialog(false); break; case IDOK : endDialog(true); break; } if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChordSelection(); return (CallbackData::ReturnType)FALSE; } void ChordDialog::setChordList(void) { CursorControl cursor; String strInsert; int count=0; cursor.waitCursor(true); for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++) { String strResource(rcIndex); if(strResource.isNull()||strResource=="UNSET")continue; strInsert=strResource.betweenString(0,'['); strInsert.trimRight(); strInsert+=strResource.betweenString(']',0); mChordList->insertString(strInsert); count++; } cursor.waitCursor(false); setText(CHORDS_COUNT,"chord count:"+String().fromInt(count)); } void ChordDialog::handleChordSelection(void) { String strSelect; TabEntry entry; strSelect=String(mChordList->getCurrent()+ResBegin); if(strSelect.isNull())return; makeTabEntry(strSelect,entry); CallbackData cbData(CBCommands::FBPlayTab,(DWORD)&entry); mPlayNoteHandler.callback(cbData); } void ChordDialog::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(!ptr)break; 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); } }