Files
Work/vidcap/entrydlg.cpp
2024-08-07 09:16:27 -04:00

173 lines
5.3 KiB
C++

#include <vidcap/entrydlg.hpp>
#include <vidcap/opendir.hpp>
#include <common/opndlgex.hpp>
#include <common/profile.hpp>
#include <common/control.hpp>
WORD EntryDialog::perform()
{
WORD resultCode(::DialogBoxParam(processInstance(),(LPSTR)"SETTINGS",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)));
return resultCode;
}
CallbackData::ReturnType EntryDialog::initDialogHandler(CallbackData &/*someCallbackData*/)
{
mPreviewRate=new Control(getItem(SETTINGS_PREVIEW_RATE),SETTINGS_PREVIEW_RATE,false);
mPreviewRate.disposition(PointerDisposition::Delete);
setPreviewRates();
getParams();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType EntryDialog::dialogCodeHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)DLGC_WANTALLKEYS;
}
CallbackData::ReturnType EntryDialog::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wmCommandID())
{
case IDOK :
setParams();
endDialog(true);
break;
case IDCANCEL :
endDialog(false);
break;
case SETTINGS_PREVIEW_640x480 :
if(BN_CLICKED==someCallbackData.wmCommandCommand())
sendMessage(SETTINGS_PREVIEW_320x240,BM_SETCHECK,0,0L);
break;
case SETTINGS_PREVIEW_320x240 :
if(BN_CLICKED==someCallbackData.wmCommandCommand())
sendMessage(SETTINGS_PREVIEW_640x480,BM_SETCHECK,0,0L);
break;
case SETTINGS_CAPTURE_320x240 :
if(BN_CLICKED==someCallbackData.wmCommandCommand())
sendMessage(SETTINGS_CAPTURE_640x480,BM_SETCHECK,0,0L);
break;
case SETTINGS_CAPTURE_640x480 :
if(BN_CLICKED==someCallbackData.wmCommandCommand())
sendMessage(SETTINGS_CAPTURE_320x240,BM_SETCHECK,0,0L);
break;
case SETTINGS_BROWSE :
handleBrowse();
break;
}
return (CallbackData::ReturnType)FALSE;
}
void EntryDialog::handleBrowse(void)
{
OpenDirectory openDir;
String strDirectory;
String strFileName;
if(openDir.getOpenDirectory(*this,"Choose Path",".",strDirectory))
{
Profile profile;
getText(SETTINGS_CAPTUREFILE,strFileName);
profile.makeFileName(strFileName,strFileName);
if(!(strDirectory[(DWORD)strDirectory.length()-1]=='\\'))strDirectory+="\\";
setText(SETTINGS_CAPTUREFILE,strDirectory+strFileName);
}
}
void EntryDialog::getParams()
{
selectPreviewRate(mVidReg.getPreviewRate());
setText(SETTINGS_CAPTUREFILE,mVidReg.getCaptureFile());
if(mVidReg.getSequencing())sendMessage(SETTINGS_USESEQUENCING,BM_SETCHECK,true,0);
if(320==mVidReg.getPreviewWidth())sendMessage(SETTINGS_PREVIEW_320x240,BM_SETCHECK,true,0);
else sendMessage(SETTINGS_PREVIEW_640x480,BM_SETCHECK,true,0);
if(320==mVidReg.getCaptureWidth())sendMessage(SETTINGS_CAPTURE_320x240,BM_SETCHECK,true,0);
else sendMessage(SETTINGS_CAPTURE_640x480,BM_SETCHECK,true,0);
}
void EntryDialog::setParams(void)
{
String strCaptureFile;
getText(SETTINGS_CAPTUREFILE,strCaptureFile);
if(!verifyCaptureFile(strCaptureFile))return;
if(!strCaptureFile.isNull())mVidReg.setCaptureFile(strCaptureFile);
mVidReg.setPreviewRate(getPreviewRate());
if(sendMessage(SETTINGS_USESEQUENCING,BM_GETCHECK,0,0L))mVidReg.setSequencing(true);
else mVidReg.setSequencing(false);
if(sendMessage(SETTINGS_PREVIEW_320x240,BM_GETCHECK,0,0L))
{
mVidReg.setPreviewWidth(320);
mVidReg.setPreviewHeight(240);
}
else
{
mVidReg.setPreviewWidth(640);
mVidReg.setPreviewHeight(480);
}
if(sendMessage(SETTINGS_CAPTURE_320x240,BM_GETCHECK,0,0L))
{
mVidReg.setCaptureWidth(320);
mVidReg.setCaptureHeight(240);
}
else
{
mVidReg.setCaptureWidth(640);
mVidReg.setCaptureHeight(480);
}
}
bool EntryDialog::verifyCaptureFile(const String &strCaptureFile)
{
Profile profile;
DiskInfo diskInfo;
String strDirectory;
strDirectory=strCaptureFile;
profile.makeDirectoryName(strDirectory);
if(profile.verifyDirectory(strDirectory))return true;
if(IDCANCEL==::MessageBox(*this,strDirectory,"Create Dirctory",MB_OKCANCEL))return false;
if(!diskInfo.createDirectory(strDirectory))return false;
return true;
}
void EntryDialog::selectPreviewRate(DWORD previewRate)
{
String strPreviewRate;
int entries=mPreviewRate->sendMessage(CB_GETCOUNT,0,0L);
bool itemSelected=false;
for(int index=0;index<entries;index++)
{
mPreviewRate->sendMessage(CB_GETLBTEXT,index,(LPARAM)(LPSTR)strPreviewRate);
if(previewRate==strPreviewRate.toInt())
{
mPreviewRate->sendMessage(CB_SETCURSEL,index,0L);
itemSelected=true;
break;
}
}
if(!itemSelected)mPreviewRate->sendMessage(CB_SETCURSEL,0,0L);
}
DWORD EntryDialog::getPreviewRate(void)
{
String strPreviewRate;
int index=mPreviewRate->sendMessage(CB_GETCURSEL,0,0L);
mPreviewRate->sendMessage(CB_GETLBTEXT,index,(LPARAM)(LPSTR)strPreviewRate);
if(strPreviewRate.isNull())return 0;
return strPreviewRate.toInt();
}
void EntryDialog::setPreviewRates(void)
{
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"25");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"50");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"100");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"150");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"200");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"250");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"500");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"1000");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"15000");
mPreviewRate->sendMessage(CB_INSERTSTRING,-1,(LPARAM)"30000");
}