Files
Work/dvcap/Mainwnd.hpp
2024-08-07 09:16:27 -04:00

164 lines
5.2 KiB
C++

#ifndef _DVCAP_MAINWINDOW_HPP_
#define _DVCAP_MAINWINDOW_HPP_
#ifndef _COMMON_WINDOW_HPP_
#include <common/window.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_SMARTPOINTER_HPP_
#include <common/pointer.hpp>
#endif
#ifndef _COMMON_PUREMENU_HPP_
#include <common/puremenu.hpp>
#endif
#ifndef _COMMON_BLOCK_HPP_
#include <common/block.hpp>
#endif
#ifndef _COMMON_MMTIMER_HPP_
#include <common/mmtimer.hpp>
#endif
#ifndef _STATBAR_STATUSBAREX_HPP_
#include <statbar/statbarx.hpp>
#endif
#ifndef _DVCAP_DEVICENOTIFICATION_HPP_
#include <dvcap/DeviceNotify.hpp>
#endif
#ifndef _DVCAP_CAPTUREDEVICEGRAPH_HPP_
#include <dvcap/CaptureDeviceGraph.hpp>
#endif
#ifndef _TOOLBAR_TOOLBAR_HPP_
#include <toolbar/toolbar.hpp>
#endif
class MainWindow : public Window
{
public:
MainWindow(void);
virtual ~MainWindow();
static String className(void);
private:
enum{StatusBarID=200,ToolBarID=201,EditHourID=202,EditMinuteID=203,EditSecondID=204,EditFrameID=205,TCButtonID=206};
enum{InitialWidth=650,InitialHeight=480,DefaultVideoWidth=360,DefaultVideoHeight=240,WidthEdge=5,HeightEdge=95};
enum{TimerResolution=55}; // 55 ms
enum{Part1,Part2,DevStatusPart};
void registerClass(void);
void insertHandlers(void);
void removeHandlers(void);
void setParts(void);
void handleDeviceChange(CallbackData &cbData);
void message(const String &message)const;
void markGraphModeMenu(int itemID);
void markToolBarButton(bool enableRecord,bool enableOthers);
bool setPreviewWindow(void);
void dvAppSetup(bool graphResult);
bool dvRefreshMode(void);
void dvStatusText(const String &text);
bool dvUpdateTapeInfo(void);
bool dvPutVcrMode(int mode);
bool dvDisplayTimecode(void);
bool dvSeekAtn(void);
bool handleFileSetOutput(void);
void handleFileSetInput(void);
void handleFileSaveGraph(void);
void handleFileCaptureSize(void);
void handleModePreview(void);
void handleModeDVToFile(void);
void handleModeDVToFileNoPre(void);
void handleModeFileToDV(void);
void handleModeFileToDVNoPre(void);
void handleModeDVToFileType2(void);
void handleModeDVToFileNoPreType2(void);
void handleModeFileToDVType2(void);
void handleModeFileToDVNoPreType2(void);
void handleOptionsRefreshMode(void);
void handleOptionsCheckTape(void);
void handleOptionsDecodeSize(void);
void handleOptionsFrameRate(void);
void handleHelpAbout(void);
void handlePlay(void);
void handlePause(void);
void handleStop(void);
void handleRecord(void);
void handleForward(void);
void handleReverse(void);
void handleForwardFastest(void);
void handleSkipNext(void);
void handleSkipPrev(void);
void handleReverseFastest(void);
void handleSeekATN(void);
CallbackData::ReturnType paintHandler(CallbackData &someCallbackData);
CallbackData::ReturnType destroyHandler(CallbackData &someCallbackData);
CallbackData::ReturnType commandHandler(CallbackData &someCallbackData);
CallbackData::ReturnType keyDownHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType createHandler(CallbackData &someCallbackData);
CallbackData::ReturnType setFocusHandler(CallbackData &someCallbackData);
CallbackData::ReturnType userHandler(CallbackData &someCallbackData);
CallbackData::ReturnType deviceChangeHandler(CallbackData &someCallbackData);
CallbackData::ReturnType atnTimerHandler(CallbackData &someCallbackData);
CallbackData::ReturnType capLimitTimerHandler(CallbackData &someCallbackData);
CallbackData::ReturnType framesTimerHandler(CallbackData &someCallbackData);
Callback<MainWindow> mPaintHandler;
Callback<MainWindow> mDestroyHandler;
Callback<MainWindow> mCommandHandler;
Callback<MainWindow> mKeyDownHandler;
Callback<MainWindow> mSizeHandler;
Callback<MainWindow> mCreateHandler;
Callback<MainWindow> mUserHandler;
Callback<MainWindow> mDeviceChangeHandler;
Callback<MainWindow> mATNTimerHandler;
Callback<MainWindow> mCapLimitTimerHandler;
Callback<MainWindow> mFramesTimerHandler;
static char szClassName[];
static char szMenuName[];
DeviceNotification mDeviceNotification;
SmartPointer<StatusBarEx> mStatusBar;
SmartPointer<ToolBar> mToolBar;
SmartPointer<CaptureDeviceGraph> mCaptureDeviceGraph;
SmartPointer<Control> mEdit1;
SmartPointer<Control> mEdit2;
SmartPointer<Control> mEdit3;
SmartPointer<Control> mEdit4;
SmartPointer<Control> mTCButton;
CaptureDeviceGraph::GraphType mGraphType;
PureMenu mAppMenu;
bool mHaveDevice;
int mVideoWidth;
int mVideoHeight;
DWORD mCapStartTime;
MMTimer mAtnTimer;
MMTimer mCapLimitTimer;
MMTimer mFramesTimer;
String mStrTimecode; // so we don't have to allocate a string for each timer frequency period
DWORD mHours; // for timecode handling
DWORD mMinutes; // for timecode handling
DWORD mSeconds; // for timecode handling
String mOutputFileName;
String mInputFileName;
};
inline
String MainWindow::className(void)
{
return String(szClassName);
}
inline
void MainWindow::message(const String &message)const
{
::MessageBox(*this,message.str(),"DVCAP",MB_OK);
}
inline
void MainWindow::dvStatusText(const String &text)
{
if(!mStatusBar.isOkay())return;
mStatusBar->setText(text,DevStatusPart);
}
#endif