Files
Work/meshwrp/mainfrm.cpp
2024-08-07 09:16:27 -04:00

425 lines
12 KiB
C++

#include <meshwrp/mainfrm.hpp>
#include <meshwrp/resource.hpp>
#include <meshwrp/imageview.hpp>
#include <common/stdio.hpp>
#include <common/diskinfo.hpp>
#include <common/openfile.hpp>
#include <common/opendlg.hpp>
#include <statbar/statbarx.hpp>
#include <tooltip/toolinfo.hpp>
MainFrame::MainFrame(void)
{
mPaintHandler.setCallback(this,&MainFrame::paintHandler);
mCloseHandler.setCallback(this,&MainFrame::closeHandler);
mQueryEndSessionHandler.setCallback(this,&MainFrame::queryEndSessionHandler);
mDestroyHandler.setCallback(this,&MainFrame::destroyHandler);
mCommandHandler.setCallback(this,&MainFrame::commandHandler);
mKeyDownHandler.setCallback(this,&MainFrame::keyDownHandler);
mSizeHandler.setCallback(this,&MainFrame::sizeHandler);
mCreateHandler.setCallback(this,&MainFrame::createHandler);
insertHandlers();
}
MainFrame::~MainFrame()
{
removeHandlers();
}
void MainFrame::insertHandlers(void)
{
FrameWindow::insertHandler(MainFrame::DestroyHandler,&mDestroyHandler);
FrameWindow::insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
FrameWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
FrameWindow::insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
FrameWindow::insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
FrameWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
FrameWindow::insertHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler);
FrameWindow::insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
}
void MainFrame::removeHandlers(void)
{
FrameWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
FrameWindow::removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
FrameWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
FrameWindow::removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
FrameWindow::removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
FrameWindow::removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
FrameWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
FrameWindow::removeHandler(VectorHandler::QueryEndSessionHandler,&mQueryEndSessionHandler);
}
CallbackData::ReturnType MainFrame::commandHandler(CallbackData &someCallbackData)
{
switch(someCallbackData.wParam())
{
case IDM_CASCADE :
cascade();
break;
case IDM_TILE :
tile();
break;
case IDM_ARRANGE :
arrange();
break;
case IDM_CLOSEALL :
closeAll();
break;
case IDM_MINIMIZEALL :
minimizeAll();
break;
case IDM_RESTOREALL :
restoreAll();
break;
case MENU_FILE_OPEN :
handleFileOpen();
break;
case MENU_FILE_SAVEBITMAP :
handleSaveBitmap();
break;
case MENU_FILE_EXIT :
handleExit();
break;
case MENU_SLIDE_SELECT :
handleSlideSelect();
break;
case MENU_TBMESH :
handleMesh();
break;
case MENU_TBNOMESH :
handleNoMesh();
break;
case MENU_TBSIGMA :
handleSigma();
break;
case MENU_TBTRANSFORMA :
handleTransforma();
break;
case MENU_TBTRANSFORMB :
handleTransformb();
break;
case MENU_TBDISSOLVE :
handleCrossDissolve();
break;
case MENU_RESIZE :
handleResize();
break;
case MENU_WARP_CONVEX :
handleWarpConvex();
break;
/* case NNTP_FILE_OPEN :
handleFileOpen();
break;
case NNTP_FILE_BROWSE :
handleFileBrowse();
break;
case NNTP_FILE_EXIT :
FrameWindow::postMessage(*this,WM_CLOSE,0,0L);
break;
case NNTP_NEWS_GETNEWS :
mNewsOption.option((NewsOption::Option)someCallbackData.wParam());
handleRetrieve();
break;
case NNTP_NEWS_GETGROUPS :
mNewsOption.option((NewsOption::Option)someCallbackData.wParam());
handleRetrieve();
break;
case NNTP_NEWSGROUPS_SUBSCRIBE :
handleSubscribe();
break;
case NNTP_IMAGE_FITTOWINDOW :
handleImageFitToWindow();
break;
case NNTP_OPTIONS_NEWSSERVER :
handleNewsServer();
break;
case NNTP_OPTIONS_GENERALOPTIONS :
handleGeneralOptions();
break;
case NNTP_OPTIONS_RASSETTINGS :
handleRasSettings();
break;
case NNTP_OPTIONS_CLEARLOG :
handleClearLog();
break;
case NNTP_NEWS_CANCEL :
handleCancelNews();
break;
case NNTP_VIEW_LOG :
handleViewLog();
break; */
default :
break;
}
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::keyDownHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::paintHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::createHandler(CallbackData &/*someCallbackData*/)
{
createControls();
show(SW_SHOW);
update();
mStatusControl->setText("Ready.");
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::queryEndSessionHandler(CallbackData &someCallbackData)
{
if(getClient().hasChildren())return (CallbackData::ReturnType)FALSE;
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::closeHandler(CallbackData &someCallbackData)
{
destroy();
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::destroyHandler(CallbackData &/*someCallbackData*/)
{
// cancel();
removeHandlers();
::PostQuitMessage(0);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainFrame::sizeHandler(CallbackData &someCallbackData)
{
Rect statusRect;
Rect toolRect;
Rect cRect;
mToolControl->windowRect(toolRect);
mStatusControl->windowRect(statusRect);
cRect.right(someCallbackData.loWord());
cRect.bottom(someCallbackData.hiWord());
getClient().moveWindow(0,toolRect.bottom()-toolRect.top(),cRect.right(),cRect.bottom()-((statusRect.bottom()-statusRect.top())+(toolRect.bottom()-toolRect.top())));
return (CallbackData::ReturnType)FALSE;
}
// **************************************************************************************************
void MainFrame::handleSlideSelect()
{
}
void MainFrame::handleSaveBitmap()
{
}
void MainFrame::handleExit()
{
close();
}
void MainFrame::createControls(void)
{
Rect controlRect;
Rect statusRect;
createToolBar();
mStatusControl=::new StatusBarEx(*this,StatusBarID);
mStatusControl.disposition(PointerDisposition::Delete);
mStatusControl->clientRect(statusRect);
controlRect.bottom(height()/2-statusRect.bottom());
}
void MainFrame::handleFileOpen(void)
{
String strCurrentDirectory;
DiskInfo diskInfo;
BOOL openResult(FALSE);
OpenDialog openFileName;
diskInfo.getCurrentDirectory(strCurrentDirectory);
openFileName.owner(*this);
openFileName.instance(processInstance());
openFileName.filter("Jpg;Gif;Bmp");
openFileName.filterPattern("*.jpg");
openFileName.fileName("*.JPG");
openFileName.fileTitle("");
openFileName.initialDirectory(mLastOpenDirectory.isNull()?strCurrentDirectory:mLastOpenDirectory);
openFileName.title("Open File");
openFileName.creationFlags(OpenDialog::EXPLORER|OpenDialog::FILEMUSTEXIST);
openResult=openFileName.getOpenFileName();
diskInfo.getCurrentDirectory(mLastOpenDirectory);
diskInfo.setCurrentDirectory(strCurrentDirectory);
if(!openResult)return;
openDocument(openFileName.fileName());
}
bool MainFrame::openDocument(const String &strPathFileName)
{
ImageView &imageView=createDocumentView();
imageView.open(strPathFileName);
return false;
}
ImageView &MainFrame::createDocumentView(void)
{
SmartPointer<MDIWindow> mdiWindow;
ImageView *pImageView;
pImageView=::new ImageView;
pImageView->createWindow(*this,String(STRING_DOCUMENTVIEWCLASSNAME),"ImageView","viewMenu","PAINT");
insert(*pImageView);
return *pImageView;
}
void MainFrame::createToolBar(void)
{
mBitmaps.size(10);
mBitmaps[0].loadBitmap("MESH");
mBitmaps[1].loadBitmap("NOMESH");
mBitmaps[2].loadBitmap("SIGMA");
mBitmaps[3].loadBitmap("TRANSFORMA");
mBitmaps[4].loadBitmap("TRANSFORMB");
mBitmaps[5].loadBitmap("XDISSOLVE");
mBitmaps[6].loadBitmap("FILENEW");
mBitmaps[7].loadBitmap("FILEOPEN");
mBitmaps[8].loadBitmap("FILESAVE");
mBitmaps[9].loadBitmap("FILEHELP");
mToolControl=::new ToolBar();
mToolControl.disposition(PointerDisposition::Delete);
mToolControl->create(*this,ToolBarID);
mToolControl->setButtonSize(24,24);
mToolControl->setBitmapSize(22,24);
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[0].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[1].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[2].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[3].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[4].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[5].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[6].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[7].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[8].getHBITMAP(),0));
mToolControl->addBitmap(AddBitmap((UINT)mBitmaps[9].getHBITMAP(),0));
mToolControl->addButton(ToolBarButton(6,0,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(7,MENU_FILE_OPEN,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(8,MENU_FILE_SAVEBITMAP,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(9,0,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(0,MENU_TBMESH,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(1,MENU_TBNOMESH,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(2,MENU_TBSIGMA,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(3,MENU_TBTRANSFORMA,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(4,MENU_TBTRANSFORMB,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->addButton(ToolBarButton(5,MENU_TBDISSOLVE,ToolBarButton::StateEnabled,ToolBarButton::StyleButton));
mToolControl->enableButton(MENU_TBMESH,false);
mToolControl->enableButton(MENU_TBNOMESH,false);
mToolControl->enableButton(MENU_TBSIGMA,false);
mToolControl->enableButton(MENU_TBTRANSFORMA,false);
mToolControl->enableButton(MENU_TBTRANSFORMB,false);
mToolControl->enableButton(MENU_TBDISSOLVE,false);
}
void MainFrame::handleResize()
{
SmartPointer<MDIWindow> imageView;
getActive(imageView);
if(!imageView.isOkay())return;
((ImageView&)*imageView).resizeImage();
}
void MainFrame::handleMesh()
{
SmartPointer<MDIWindow> imageView;
getActive(imageView);
if(!imageView.isOkay())return;
((ImageView&)*imageView).showMesh();
}
void MainFrame::handleNoMesh()
{
SmartPointer<MDIWindow> imageView;
getActive(imageView);
if(!imageView.isOkay())return;
((ImageView&)*imageView).noMesh();
}
void MainFrame::handleTransforma()
{
SmartPointer<MDIWindow> imageView;
getActive(imageView);
if(!imageView.isOkay())return;
((ImageView&)*imageView).meshWarp();
}
void MainFrame::handleTransformb()
{
}
void MainFrame::handleSigma()
{
SmartPointer<MDIWindow> imageView;
getActive(imageView);
if(!imageView.isOkay())return;
((ImageView&)*imageView).handleFrames();
}
void MainFrame::handleCrossDissolve()
{
}
void MainFrame::handleWarpConvex(void)
{
PMDIWindow imageView;
getActive(imageView);
if(!imageView.isOkay())return;
((ImageView&)*imageView).handleWarpConvex();
}
// ** virtuals
void MainFrame::mdiDestroy(MDIWindow &mdiWindow)
{
// if(mLogViewWinCache.isOkay()&&*mLogViewWinCache==mdiWindow)mLogViewWinCache.destroy();
}
void MainFrame::mdiActivate(MDIWindow &mdiWindow)
{
mToolControl->enableButton(MENU_TBMESH,true);
mToolControl->enableButton(MENU_TBNOMESH,true);
mToolControl->enableButton(MENU_TBSIGMA,true);
mToolControl->enableButton(MENU_TBTRANSFORMA,true);
mToolControl->enableButton(MENU_TBTRANSFORMB,true);
mToolControl->enableButton(MENU_TBDISSOLVE,true);
}
void MainFrame::mdiDeactivate(MDIWindow &mdiWindow)
{
if(1==size())
{
mToolControl->enableButton(MENU_TBMESH,false);
mToolControl->enableButton(MENU_TBNOMESH,false);
mToolControl->enableButton(MENU_TBSIGMA,false);
mToolControl->enableButton(MENU_TBTRANSFORMA,false);
mToolControl->enableButton(MENU_TBTRANSFORMB,false);
mToolControl->enableButton(MENU_TBDISSOLVE,false);
}
}