Initial
This commit is contained in:
180
guitar/FretDlg.cpp
Normal file
180
guitar/FretDlg.cpp
Normal file
@@ -0,0 +1,180 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user