Files
Work/mixer/Mainwnd.cpp
2024-08-07 09:16:27 -04:00

186 lines
6.4 KiB
C++

#include <mixer/mainwnd.hpp>
#include <mixer/MixerScope.hpp>
#include <mixer/mixer.hpp>
#include <mixer/ChannelCtrlMgr.hpp>
#include <sample/wave.hpp>
#include <common/odlstalt.hpp>
#include <common/pointer.hpp>
#include <common/resbmp.hpp>
#include <common/dib.hpp>
#include <common/puredwrd.hpp>
#include <common/opendlg.hpp>
char MainWindow::szClassName[]="Mixer [v1.00]";
char MainWindow::szMenuName[]="Mixer";
MainWindow::MainWindow(void)
: mxBorder(0)
{
mPaintHandler.setCallback(this,&MainWindow::paintHandler);
mDestroyHandler.setCallback(this,&MainWindow::destroyHandler);
mCommandHandler.setCallback(this,&MainWindow::commandHandler);
mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler);
mSizeHandler.setCallback(this,&MainWindow::sizeHandler);
mCreateHandler.setCallback(this,&MainWindow::createHandler);
mUserHandler.setCallback(this,&MainWindow::userHandler);
mEraseBackgroundHandler.setCallback(this,&MainWindow::eraseBackgroundHandler);
insertHandlers();
registerClass();
// ::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this);
::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_CLIPCHILDREN|WS_MINIMIZEBOX|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this);
mStatusBar=new StatusBar(*this);
mStatusBar.disposition(PointerDisposition::Delete);
show(SW_SHOW);
update();
}
MainWindow::~MainWindow()
{
destroy();
}
void MainWindow::insertHandlers(void)
{
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler);
insertHandler(VectorHandler::UserHandler,&mUserHandler);
}
void MainWindow::removeHandlers(void)
{
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler);
removeHandler(VectorHandler::UserHandler,&mUserHandler);
}
void MainWindow::registerClass(void)
{
HINSTANCE hInstance(processInstance());
WNDCLASS wndClass;
if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return;
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC;
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
wndClass.cbClsExtra =0;
wndClass.cbWndExtra =sizeof(MainWindow*);
wndClass.hInstance =hInstance;
wndClass.hIcon =::LoadIcon(processInstance(),"MIXER");
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);
wndClass.lpszMenuName =szMenuName;
wndClass.lpszClassName =szClassName;
::RegisterClass(&wndClass);
}
CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/)
{
removeHandlers();
::PostQuitMessage(0);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainWindow::eraseBackgroundHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)TRUE;
}
CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wParam())
{
case MIXERMENU_FILE_OPEN :
handleFileOpen();
break;
case MIXERMENU_FILE_EXIT :
sendMessage(WM_CLOSE,0,0L);
break;
default :
break;
}
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/)
{
Block<PureDWORD> stopArray;
mxBorder=::GetSystemMetrics(SM_CXDLGFRAME)<<1;
mBitmapBkGnd=new ResBitmap("BACKGROUND");
mBitmapBkGnd.disposition(PointerDisposition::Delete);
if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE;
mPureDevice=new PureDevice(*this);
mPureDevice.disposition(PointerDisposition::Delete);
mDIBitmapBkGnd=new DIBitmap(*mPureDevice,*mBitmapBkGnd,*mBitmapBkGnd);
mDIBitmapBkGnd.disposition(PointerDisposition::Delete);
mMixerScope=new MixerScope(*this,Scope1ID,0,Rect(xBorder,Scope1y,300,130),Font("Times New Roman",10,Font::PitchVariable|Font::FamilySwiss,Font::WeightNormal));
mMixerScope.disposition(PointerDisposition::Delete);
mMixerScope->show(SW_SHOW);
mMixerScope->update();
mMixerScope->bringWindowToTop();
mChannelControlManager=new ChannelControlManager(*this,Rect(xBorder,140,625,400),110);
mChannelControlManager.disposition(PointerDisposition::Delete);
mChannelControlManager->show(SW_SHOW);
mChannelControlManager->update();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData)
{
Rect winRect;
if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE;
windowRect(winRect);
mDIBitmapBkGnd->copyBits(mBitmapBkGnd->ptrData(),mBitmapBkGnd->imageExtent());
mDIBitmapBkGnd->usePalette(*mPureDevice,TRUE);
mDIBitmapBkGnd->stretchBlt(*mPureDevice,Rect(0,0,(winRect.right()-winRect.left())+mxBorder,height()-mStatusBar->statusBarHeight()));
mDIBitmapBkGnd->usePalette(*mPureDevice,FALSE);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainWindow::userHandler(CallbackData &someCallbackData)
{
/* switch(someCallbackData.wParam())
{
case WM_USER +1 :
modifyPayment();
break;
} */
return (CallbackData::ReturnType)FALSE;
}
void MainWindow::handleFileOpen()
{
OpenDialog openDialog;
String strPathFileName;
if(!openDialog.getOpenFileName(*this,"*.wav","Open File","*.wav",strPathFileName))return;
mMixerScope->setData(WaveForm(strPathFileName));
}