425 lines
12 KiB
C++
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);
|
|
}
|
|
}
|
|
|
|
|