144 lines
4.2 KiB
C++
144 lines
4.2 KiB
C++
#include <guitar/ChordDlg.hpp>
|
|
#include <guitar/guitar.hpp>
|
|
#include <guitar/TabEntry.hpp>
|
|
#include <guitar/CBCommands.hpp>
|
|
#include <common/puredwrd.hpp>
|
|
#include <common/crsctrl.hpp>
|
|
|
|
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;
|
|
|
|
cursor.waitCursor(true);
|
|
for(int rcIndex=ResBegin;rcIndex<=ResEnd;rcIndex++)
|
|
{
|
|
String strResource(rcIndex);
|
|
strInsert=strResource.betweenString(0,'[');
|
|
strInsert.trimRight();
|
|
strInsert+=strResource.betweenString(']',0);
|
|
mChordList->insertString(strInsert);
|
|
}
|
|
cursor.waitCursor(false);
|
|
setText(CHORDS_COUNT,"chord count:"+String().fromInt(rcIndex-ResBegin));
|
|
}
|
|
|
|
void ChordDialog::handleChordSelection(void)
|
|
{
|
|
String strSelect;
|
|
TabEntry entry;
|
|
|
|
strSelect=String(mChordList->getCurrent()+ResBegin);
|
|
if(strSelect.isNull())return;
|
|
makeTabEntry(strSelect,entry);
|
|
CallbackData cbData(CBCommands::FBPlayChord,(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(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);
|
|
}
|
|
}
|
|
|
|
|
|
|