181 lines
5.2 KiB
C++
181 lines
5.2 KiB
C++
#include <guitar/fretdlg.hpp>
|
|
#include <guitar/guitar.hpp>
|
|
#include <guitar/fretboard.hpp>
|
|
#include <guitar/notetype.hpp>
|
|
#include <common/puredwrd.hpp>
|
|
|
|
FretDialog::FretDialog(void)
|
|
: mCurrEntryIndex(0), mSelectedString(-1), mSelectedFret(-1)
|
|
{
|
|
mInitHandler.setCallback(this,&FretDialog::initHandler);
|
|
mCreateHandler.setCallback(this,&FretDialog::createHandler);
|
|
mCloseHandler.setCallback(this,&FretDialog::closeHandler);
|
|
mDestroyHandler.setCallback(this,&FretDialog::destroyHandler);
|
|
mCommandHandler.setCallback(this,&FretDialog::commandHandler);
|
|
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
FretDialog::FretDialog(const FretDialog &someFretDialog)
|
|
{ // private implementation
|
|
*this=someFretDialog;
|
|
}
|
|
|
|
FretDialog::~FretDialog()
|
|
{
|
|
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
FretDialog &FretDialog::operator=(const FretDialog &someFretDialog)
|
|
{ // private implementation
|
|
return *this;
|
|
}
|
|
|
|
bool FretDialog::perform(GUIWindow &parentWindow,TabEntries &entries,int selectedString,int currEntryIndex)
|
|
{
|
|
mTabEntries=SmartPointer<TabEntries>(&entries);
|
|
mCurrEntryIndex=currEntryIndex;
|
|
mSelectedString=selectedString;
|
|
mSelectedFret=-1;
|
|
return ::DialogBoxParam(processInstance(),(LPSTR)"FRETDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
|
|
}
|
|
|
|
CallbackData::ReturnType FretDialog::createHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType FretDialog::closeHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType FretDialog::destroyHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType FretDialog::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wmCommandID())
|
|
{
|
|
case IDCANCEL :
|
|
endDialog(false);
|
|
break;
|
|
case IDOK :
|
|
handleOk();
|
|
endDialog(true);
|
|
break;
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType FretDialog::initHandler(CallbackData &someCallbackData)
|
|
{
|
|
initializeAction();
|
|
initializeNoteTypes();
|
|
setString();
|
|
setFret();
|
|
setNoteType((*mTabEntries)[mCurrEntryIndex]);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
void FretDialog::handleOk(void)
|
|
{
|
|
String selectedFret;
|
|
String selectedAction;
|
|
String selectedDuration;
|
|
String selectedString;
|
|
bool found=false;
|
|
|
|
getText(FRETENTRY_FRET,selectedFret);
|
|
getText(FRETENTRY_ACTION,selectedAction);
|
|
getText(FRETENTRY_DURATION,selectedDuration);
|
|
getText(FRETENTRY_STRING,selectedString);
|
|
if(!selectedString.isNull())
|
|
{
|
|
int string=selectedString.toInt();
|
|
if(string>=1&&string<=Fretboard::Strings)mSelectedString=Fretboard::Strings-string;
|
|
}
|
|
mSelectedFret=selectedFret.toInt();
|
|
if(mSelectedFret<0||mSelectedFret>Fretboard::Frets)
|
|
{
|
|
mSelectedFret=-1;
|
|
return;
|
|
}
|
|
TabEntry &entry=(*mTabEntries)[mCurrEntryIndex];
|
|
FrettedNote frettedNote;
|
|
frettedNote.setFret(mSelectedFret);
|
|
frettedNote.setAction(Action(selectedAction));
|
|
if(selectedFret.isNull())entry.remove(mSelectedString,mSelectedFret);
|
|
else if(!entry.setFrettedNote(mSelectedString,frettedNote))
|
|
{
|
|
entry.addFrettedNote(mSelectedString,frettedNote);
|
|
}
|
|
entry.setNoteType(NoteType().fromString(selectedDuration));
|
|
return;
|
|
}
|
|
|
|
void FretDialog::setString()
|
|
{
|
|
setText(FRETENTRY_STRING,String().fromInt(Fretboard::Strings-mSelectedString));
|
|
}
|
|
|
|
void FretDialog::setFret()
|
|
{
|
|
TabEntry &entry=(*mTabEntries)[mCurrEntryIndex];
|
|
|
|
for(int index=0;index<entry.size();index++)
|
|
{
|
|
FrettedNote &frettedNote=entry[index];
|
|
if(frettedNote.getString()==mSelectedString)
|
|
{
|
|
setText(FRETENTRY_FRET,String().fromInt(frettedNote.getFret()));
|
|
setAction(frettedNote.getAction());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void FretDialog::setAction(const Action &action)
|
|
{
|
|
LRESULT result;
|
|
if(CB_ERR==(result=sendMessage(FRETENTRY_ACTION,CB_FINDSTRINGEXACT,-1,(LPARAM)action.toString().str())))return;
|
|
sendMessage(FRETENTRY_ACTION,CB_SETCURSEL,result,0);
|
|
}
|
|
|
|
void FretDialog::setNoteType(const TabEntry &entry)
|
|
{
|
|
LRESULT result;
|
|
if(CB_ERR==(result=sendMessage(FRETENTRY_DURATION,CB_FINDSTRINGEXACT,-1,(LPARAM)entry.getNoteType().toString().str())))return;
|
|
sendMessage(FRETENTRY_DURATION,CB_SETCURSEL,result,0);
|
|
}
|
|
|
|
void FretDialog::initializeAction()
|
|
{
|
|
Array<String> actions=Action::enumerate();
|
|
for(int index=0;index<actions.size();index++)
|
|
{
|
|
sendMessage(FRETENTRY_ACTION,CB_ADDSTRING,0,(LPARAM)actions[index].str());
|
|
}
|
|
sendMessage(FRETENTRY_ACTION,CB_SETCURSEL,0,0L);
|
|
}
|
|
|
|
void FretDialog::initializeNoteTypes(void)
|
|
{
|
|
Array<String> noteTypes=NoteType::enumerate();
|
|
|
|
for(int index=0;index<noteTypes.size();index++)
|
|
{
|
|
sendMessage(FRETENTRY_DURATION,CB_ADDSTRING,-1,(LPARAM)noteTypes[index].str());
|
|
}
|
|
sendMessage(FRETENTRY_DURATION,CB_SETCURSEL,0,0L);
|
|
}
|