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

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