Initial
This commit is contained in:
395
guitar/ScaleDlg.cpp
Normal file
395
guitar/ScaleDlg.cpp
Normal file
@@ -0,0 +1,395 @@
|
||||
#include <guitar/scaledlg.hpp>
|
||||
#include <guitar/guitar.hpp>
|
||||
#include <guitar/GlobalDefs.hpp>
|
||||
#include <guitar/Fingering.hpp>
|
||||
#include <guitar/CBCommands.hpp>
|
||||
#include <music/scales.hpp>
|
||||
#include <common/puredwrd.hpp>
|
||||
#include <common/commctrl.hpp>
|
||||
#include <common/richedit.hpp>
|
||||
#include <common/crsctrl.hpp>
|
||||
|
||||
ScaleDialog::ScaleDialog(void)
|
||||
: mInEdit(false)
|
||||
{
|
||||
mInitHandler.setCallback(this,&ScaleDialog::initHandler);
|
||||
mCreateHandler.setCallback(this,&ScaleDialog::createHandler);
|
||||
mCloseHandler.setCallback(this,&ScaleDialog::closeHandler);
|
||||
mDestroyHandler.setCallback(this,&ScaleDialog::destroyHandler);
|
||||
mCommandHandler.setCallback(this,&ScaleDialog::commandHandler);
|
||||
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
||||
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
||||
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
||||
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
||||
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
||||
}
|
||||
|
||||
ScaleDialog::ScaleDialog(const ScaleDialog &someScaleDialog)
|
||||
{ // private implementation
|
||||
*this=someScaleDialog;
|
||||
}
|
||||
|
||||
ScaleDialog::~ScaleDialog()
|
||||
{
|
||||
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
||||
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
||||
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
||||
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
||||
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
||||
}
|
||||
|
||||
ScaleDialog &ScaleDialog::operator=(const ScaleDialog &someScaleDialog)
|
||||
{ // private implementation
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool ScaleDialog::perform(GUIWindow &parentWindow,CallbackPointer &callbackPointer)
|
||||
{
|
||||
mPlayNoteHandler=callbackPointer;
|
||||
return ::DialogBoxParam(processInstance(),(LPSTR)"ScaleDialog",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
|
||||
}
|
||||
|
||||
CallbackData::ReturnType ScaleDialog::initHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
GDIPoint cursorPoint;
|
||||
|
||||
mMIDIDevice=::new Sequencer();
|
||||
mMIDIDevice.disposition(PointerDisposition::Delete);
|
||||
::GetCursorPos(&cursorPoint.getPOINT());
|
||||
move(cursorPoint);
|
||||
mScaleList=::new OwnerDrawListAltColor(*this,getItem(SCALEDLG_LIST),SCALEDLG_LIST);
|
||||
mScaleList.disposition(PointerDisposition::Delete);
|
||||
mScaleList->addString("Ionian");
|
||||
mScaleList->addString("Dorian");
|
||||
mScaleList->addString("Phrygian");
|
||||
mScaleList->addString("Lydian");
|
||||
mScaleList->addString("Mixolydian");
|
||||
mScaleList->addString("Aeolian");
|
||||
mScaleList->addString("Locrian");
|
||||
mScaleList->addString("Pentatonic Minor");
|
||||
mScaleList->addString("Harmonic Minor");
|
||||
mScaleList->addString("Melodic Minor");
|
||||
mScaleList->addString("Dorian-II");
|
||||
mScaleList->addString("Lydian Augmented");
|
||||
mScaleList->addString("Lydian Dominant");
|
||||
mScaleList->addString("Locrian2");
|
||||
mScaleList->addString("Altered");
|
||||
mScaleList->addString("Diminished(Whole Step)");
|
||||
mScaleList->addString("Diminished(Half Step)");
|
||||
mScaleList->addString("Whole Tone");
|
||||
mScaleList->addString("BeBop Dominant");
|
||||
mScaleList->addString("BeBop Major");
|
||||
mScaleList->addString("BeBop Tonic Minor");
|
||||
mScaleList->addString("BeBop Minor");
|
||||
mScaleList->addString("Eight Tone Spanish");
|
||||
mScaleList->addString("Enigmatic");
|
||||
mScaleList->addString("Gypsy");
|
||||
mScaleList->addString("Hungarian");
|
||||
mScaleList->addString("Hungarian Minor");
|
||||
mScaleList->addString("Leading Whole Tone");
|
||||
mScaleList->addString("Lydian Minor");
|
||||
mScaleList->addString("Major Locrian");
|
||||
mScaleList->addString("Neapolitan Major");
|
||||
mScaleList->addString("Neapolitan Minor");
|
||||
mScaleList->addString("Oriental");
|
||||
mScaleList->addString("Todi");
|
||||
mScaleList->addString("Super Locrian");
|
||||
mScaleList->addString("Baroque");
|
||||
mScaleList->addString("Phrygian Dominant");
|
||||
sendMessage(SCALEDLG_SPIN,UDM_SETRANGE,0,(LPARAM)MAKELONG(11,0));
|
||||
sendMessage(SCALEDLG_SPIN,UDM_SETBUDDY,(WPARAM)getItem(SCALEDLG_ROOT),0L);
|
||||
sendMessage(SCALEDLG_SPIN,UDM_SETPOS,0,0L);
|
||||
setText(SCALEDLG_ROOT,"A");
|
||||
mScaleList->setCurrent(0);
|
||||
sendMessage(SCALEDLG_MUTE,BM_SETCHECK,1,0L);
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType ScaleDialog::createHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType ScaleDialog::closeHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType ScaleDialog::destroyHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType ScaleDialog::commandHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
switch(someCallbackData.wmCommandID())
|
||||
{
|
||||
case IDCANCEL :
|
||||
endDialog(false);
|
||||
break;
|
||||
case IDOK :
|
||||
handleOk();
|
||||
endDialog(true);
|
||||
break;
|
||||
case SCALEDLG_SPIN :
|
||||
break;
|
||||
case SCALEDLG_ROOT :
|
||||
handleRoot();
|
||||
break;
|
||||
case SCALEDLG_LIST :
|
||||
if(LBN_KILLFOCUS!=someCallbackData.wmCommandCommand()&&
|
||||
LBN_SETFOCUS!=someCallbackData.wmCommandCommand())
|
||||
handleList();
|
||||
break;
|
||||
}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
void ScaleDialog::handleOk(void)
|
||||
{
|
||||
}
|
||||
|
||||
void ScaleDialog::handleRoot(void)
|
||||
{
|
||||
String strRoot;
|
||||
|
||||
if(mInEdit)return;
|
||||
mInEdit=true;
|
||||
getText(SCALEDLG_ROOT,strRoot);
|
||||
strRoot.upper();
|
||||
if(strRoot=="0")setText(SCALEDLG_ROOT,"A");
|
||||
else if(strRoot=="1")setText(SCALEDLG_ROOT,"A#");
|
||||
else if(strRoot=="2")setText(SCALEDLG_ROOT,"B");
|
||||
else if(strRoot=="3")setText(SCALEDLG_ROOT,"C");
|
||||
else if(strRoot=="4")setText(SCALEDLG_ROOT,"C#");
|
||||
else if(strRoot=="5")setText(SCALEDLG_ROOT,"D");
|
||||
else if(strRoot=="6")setText(SCALEDLG_ROOT,"D#");
|
||||
else if(strRoot=="7")setText(SCALEDLG_ROOT,"E");
|
||||
else if(strRoot=="8")setText(SCALEDLG_ROOT,"F");
|
||||
else if(strRoot=="9")setText(SCALEDLG_ROOT,"F#");
|
||||
else if(strRoot=="10")setText(SCALEDLG_ROOT,"G");
|
||||
else if(strRoot=="11")setText(SCALEDLG_ROOT,"G#");
|
||||
else {mInEdit=false;return;}
|
||||
if(!showScale())setText(SCALEDLG_ROOT,"A");
|
||||
mInEdit=false;
|
||||
}
|
||||
|
||||
void ScaleDialog::handleList(void)
|
||||
{
|
||||
showScale();
|
||||
}
|
||||
|
||||
bool ScaleDialog::showScale(void)
|
||||
{
|
||||
String strScale;
|
||||
String strRoot;
|
||||
DWORD current;
|
||||
|
||||
current=mScaleList->getCurrent();
|
||||
getText(SCALEDLG_ROOT,strRoot);
|
||||
if(Note::None==Note::getNoteType(strRoot))return false;
|
||||
mScaleList->getText(strScale,current);
|
||||
playScale(strRoot,strScale);
|
||||
return true;
|
||||
}
|
||||
|
||||
void ScaleDialog::playScale(const String &root,const String &scale)
|
||||
{
|
||||
if(scale=="Ionian")
|
||||
{
|
||||
IonianScale ionianScale(Note::getNoteType(root));
|
||||
playScale(ionianScale);
|
||||
}
|
||||
else if(scale=="Dorian")
|
||||
{
|
||||
DorianScale dorianScale(Note::getNoteType(root));
|
||||
playScale(dorianScale);
|
||||
}
|
||||
else if(scale=="Phrygian")
|
||||
{
|
||||
PhrygianScale phrygianScale(Note::getNoteType(root));
|
||||
playScale(phrygianScale);
|
||||
}
|
||||
else if(scale=="Lydian")
|
||||
{
|
||||
LydianScale lydianScale(Note::getNoteType(root));
|
||||
playScale(lydianScale);
|
||||
}
|
||||
else if(scale=="Mixolydian")
|
||||
{
|
||||
MixolydianScale mixolydianScale(Note::getNoteType(root));
|
||||
playScale(mixolydianScale);
|
||||
}
|
||||
else if(scale=="Aeolian")
|
||||
{
|
||||
AeolianScale aeolianScale(Note::getNoteType(root));
|
||||
playScale(aeolianScale);
|
||||
}
|
||||
else if(scale=="Locrian")
|
||||
{
|
||||
LocrianScale locrianScale(Note::getNoteType(root));
|
||||
playScale(locrianScale);
|
||||
}
|
||||
else if(scale=="Pentatonic Minor")
|
||||
{
|
||||
PentatonicMinorScale pentatonicMinorScale(Note::getNoteType(root));
|
||||
playScale(pentatonicMinorScale);
|
||||
}
|
||||
else if(scale=="Harmonic Minor")
|
||||
{
|
||||
HarmonicMinorScale harmonicMinorScale(Note::getNoteType(root));
|
||||
playScale(harmonicMinorScale);
|
||||
}
|
||||
else if(scale=="Melodic Minor")
|
||||
{
|
||||
MelodicMinorScale melodicMinorScale(Note::getNoteType(root));
|
||||
playScale(melodicMinorScale);
|
||||
}
|
||||
else if(scale=="Dorian-II")
|
||||
{
|
||||
DorianIIScale dorianIIScale(Note::getNoteType(root));
|
||||
playScale(dorianIIScale);
|
||||
}
|
||||
else if(scale=="Lydian Augmented")
|
||||
{
|
||||
LydianAugmentedScale lydianAugmentedScale(Note::getNoteType(root));
|
||||
playScale(lydianAugmentedScale);
|
||||
}
|
||||
else if(scale=="Lydian Dominant")
|
||||
{
|
||||
LydianDominantScale lydianDominantScale(Note::getNoteType(root));
|
||||
playScale(lydianDominantScale);
|
||||
}
|
||||
else if(scale=="Locrian2")
|
||||
{
|
||||
Locrian2Scale locrian2Scale(Note::getNoteType(root));
|
||||
playScale(locrian2Scale);
|
||||
}
|
||||
else if(scale=="Altered")
|
||||
{
|
||||
AlteredScale alteredScale(Note::getNoteType(root));
|
||||
playScale(alteredScale);
|
||||
}
|
||||
else if(scale=="Diminished(Whole Step)")
|
||||
{
|
||||
DiminishedWholeScale diminishedWholeScale(Note::getNoteType(root));
|
||||
playScale(diminishedWholeScale);
|
||||
}
|
||||
else if(scale=="Diminished(Half Step)")
|
||||
{
|
||||
DiminishedHalfScale diminishedHalfScale(Note::getNoteType(root));
|
||||
playScale(diminishedHalfScale);
|
||||
}
|
||||
else if(scale=="Whole Tone")
|
||||
{
|
||||
WholeToneScale wholeToneScale(Note::getNoteType(root));
|
||||
playScale(wholeToneScale);
|
||||
}
|
||||
else if(scale=="BeBop Dominant")
|
||||
{
|
||||
BeBopDominantScale bebopDominantScale(Note::getNoteType(root));
|
||||
playScale(bebopDominantScale);
|
||||
}
|
||||
else if(scale=="BeBop Major")
|
||||
{
|
||||
BeBopMajorScale bebopMajorScale(Note::getNoteType(root));
|
||||
playScale(bebopMajorScale);
|
||||
}
|
||||
else if(scale=="BeBop Tonic Minor")
|
||||
{
|
||||
BeBopTonicMinorScale bebopTonicMinorScale(Note::getNoteType(root));
|
||||
playScale(bebopTonicMinorScale);
|
||||
}
|
||||
else if(scale=="BeBop Minor")
|
||||
{
|
||||
BeBopMinorScale bebopMinorScale(Note::getNoteType(root));
|
||||
playScale(bebopMinorScale);
|
||||
}
|
||||
else if(scale=="Eight Tone Spanish")
|
||||
{
|
||||
EightToneSpanishScale eightToneSpanishScale(Note::getNoteType(root));
|
||||
playScale(eightToneSpanishScale);
|
||||
}
|
||||
else if(scale=="Enigmatic")
|
||||
{
|
||||
EnigmaticScale enigmaticScale(Note::getNoteType(root));
|
||||
playScale(enigmaticScale);
|
||||
}
|
||||
else if(scale=="Gypsy")
|
||||
{
|
||||
GypsyScale gypsyScale(Note::getNoteType(root));
|
||||
playScale(gypsyScale);
|
||||
}
|
||||
else if(scale=="Hungarian")
|
||||
{
|
||||
HungarianScale hungarianScale(Note::getNoteType(root));
|
||||
playScale(hungarianScale);
|
||||
}
|
||||
else if(scale=="Hungarian Minor")
|
||||
{
|
||||
HungarianMinorScale hungarianMinorScale(Note::getNoteType(root));
|
||||
playScale(hungarianMinorScale);
|
||||
}
|
||||
else if(scale=="Leading Whole Tone")
|
||||
{
|
||||
LeadingWholeToneScale leadingWholeToneScale(Note::getNoteType(root));
|
||||
playScale(leadingWholeToneScale);
|
||||
}
|
||||
else if(scale=="Lydian Minor")
|
||||
{
|
||||
LydianMinorScale lydianMinorScale(Note::getNoteType(root));
|
||||
playScale(lydianMinorScale);
|
||||
}
|
||||
else if(scale=="Major Locrian") // same as LydianMinor
|
||||
{
|
||||
MajorLocrianScale majorLocrianScale(Note::getNoteType(root));
|
||||
playScale(majorLocrianScale);
|
||||
}
|
||||
else if(scale=="Neapolitan Major")
|
||||
{
|
||||
NeapolitanMajorScale neapolitanMajorScale(Note::getNoteType(root));
|
||||
playScale(neapolitanMajorScale);
|
||||
}
|
||||
else if(scale=="Neapolitan Minor")
|
||||
{
|
||||
NeapolitanMinorScale neapolitanMinorScale(Note::getNoteType(root));
|
||||
playScale(neapolitanMinorScale);
|
||||
}
|
||||
else if(scale=="Oriental")
|
||||
{
|
||||
OrientalScale orientalScale(Note::getNoteType(root));
|
||||
playScale(orientalScale);
|
||||
}
|
||||
else if(scale=="Todi")
|
||||
{
|
||||
TodiScale todiScale(Note::getNoteType(root));
|
||||
playScale(todiScale);
|
||||
}
|
||||
else if(scale=="Super Locrian")
|
||||
{
|
||||
SuperLocrianScale superLocrianScale(Note::getNoteType(root));
|
||||
playScale(superLocrianScale);
|
||||
}
|
||||
else if(scale=="Baroque")
|
||||
{
|
||||
BaroqueScale baroqueScale(Note::getNoteType(root));
|
||||
playScale(baroqueScale);
|
||||
}
|
||||
else if(scale=="Phrygian Dominant")
|
||||
{
|
||||
PhrygianDominantScale phrygianDominantScale(Note::getNoteType(root));
|
||||
playScale(phrygianDominantScale);
|
||||
}
|
||||
}
|
||||
|
||||
void ScaleDialog::playScale(const Scale &scale)
|
||||
{
|
||||
int command=BST_CHECKED==sendMessage(SCALEDLG_MUTE,BM_GETCHECK,0,0L)?CBCommands::FBShowScale:CBCommands::FBPlayScale;
|
||||
CallbackData cbData(command,(LPARAM)&scale);
|
||||
CursorControl cursorControl;
|
||||
cursorControl.waitCursor(true);
|
||||
mPlayNoteHandler.callback(cbData);
|
||||
cursorControl.waitCursor(false);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user