Files
Work/guitar/backup/20030731/ChordDlg.cpp
2024-08-07 09:16:27 -04:00

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