137 lines
3.9 KiB
C++
137 lines
3.9 KiB
C++
#include <guitar/MIDIDialog.hpp>
|
|
#include <guitar/guitar.hpp>
|
|
#include <guitar/MIDIHelper.hpp>
|
|
|
|
MIDIDialog::MIDIDialog(void)
|
|
{
|
|
mInitHandler.setCallback(this,&MIDIDialog::initHandler);
|
|
mCreateHandler.setCallback(this,&MIDIDialog::createHandler);
|
|
mCloseHandler.setCallback(this,&MIDIDialog::closeHandler);
|
|
mDestroyHandler.setCallback(this,&MIDIDialog::destroyHandler);
|
|
mCommandHandler.setCallback(this,&MIDIDialog::commandHandler);
|
|
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
MIDIDialog::MIDIDialog(const MIDIDialog &someMIDIDialog)
|
|
{ // private implementation
|
|
*this=someMIDIDialog;
|
|
}
|
|
|
|
MIDIDialog::~MIDIDialog()
|
|
{
|
|
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
MIDIDialog &MIDIDialog::operator=(const MIDIDialog &someMIDIDialog)
|
|
{ // private implementation
|
|
return *this;
|
|
}
|
|
|
|
bool MIDIDialog::perform(GUIWindow &parentWindow,const String &strPathMIDIFileName,int &selectedTrack)
|
|
{
|
|
bool returnCode;
|
|
mPathMIDIFileName=strPathMIDIFileName;
|
|
returnCode=::DialogBoxParam(processInstance(),(LPSTR)"MIDIDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
|
|
if(returnCode)selectedTrack=mSelectedTrack;
|
|
return returnCode;
|
|
}
|
|
|
|
CallbackData::ReturnType MIDIDialog::initHandler(CallbackData &someCallbackData)
|
|
{
|
|
MIDIHelper midiHelper;
|
|
TrackInfos trackInfos;
|
|
midiHelper.getTrackInfo(mPathMIDIFileName,trackInfos);
|
|
setTrackInformation(trackInfos);
|
|
return (CallbackData::ReturnType)false;
|
|
}
|
|
|
|
CallbackData::ReturnType MIDIDialog::createHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MIDIDialog::closeHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MIDIDialog::destroyHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MIDIDialog::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wmCommandID())
|
|
{
|
|
case IDCANCEL :
|
|
endDialog(false);
|
|
break;
|
|
case IDOK :
|
|
mSelectedTrack=getSelectedTrack();
|
|
if(-1==mSelectedTrack)endDialog(false);
|
|
else endDialog(true);
|
|
break;
|
|
}
|
|
if(BN_CLICKED==someCallbackData.wmCommandCommand())handleClick(someCallbackData);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
void MIDIDialog::setTrackInformation(TrackInfos &trackInfos)
|
|
{
|
|
bool isFirst=true;
|
|
for(int index=0;index<trackInfos.size();index++)
|
|
{
|
|
const TrackInfo &trackInfo=trackInfos[index];
|
|
::EnableWindow(getItem(MIDI_TRACK1+trackInfo.getTrackNo()),true);
|
|
if(isFirst)
|
|
{
|
|
isFirst=false;
|
|
sendMessage(MIDI_TRACK1+trackInfo.getTrackNo(),BM_SETCHECK,true,0L);
|
|
}
|
|
String strEvents;
|
|
strEvents.fromInt(trackInfo.getEventCount());
|
|
sendMessage(MIDI_EVENTS_TRACK1+trackInfo.getTrackNo(),WM_SETTEXT,(WPARAM)0,(LPARAM)String().fromInt(trackInfo.getEventCount()).str());
|
|
}
|
|
}
|
|
|
|
void MIDIDialog::handleClick(const CallbackData &someCallbackData)
|
|
{
|
|
UINT clickedId(LOWORD(someCallbackData.wParam()));
|
|
|
|
if(!(clickedId>=MIDI_TRACK1&&clickedId<=MIDI_TRACK16))return;
|
|
mSelectedTrack=clickedId-MIDI_TRACK1;
|
|
for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++)
|
|
{
|
|
if(btnId!=clickedId)sendMessage(btnId,BM_SETCHECK,0,0L);
|
|
}
|
|
}
|
|
|
|
int MIDIDialog::getSelectedTrack(void)const
|
|
{
|
|
int selectedTrack=-1;
|
|
|
|
for(int btnId=MIDI_TRACK1;btnId<=MIDI_TRACK16;btnId++)
|
|
{
|
|
if(1==sendMessage(btnId,BM_GETCHECK,0,0L))
|
|
{
|
|
selectedTrack=btnId-MIDI_TRACK1;
|
|
break;
|
|
}
|
|
}
|
|
return selectedTrack;
|
|
}
|
|
|
|
|
|
|
|
|
|
|