Files
Work/remotepsapp/windowview.cpp
2024-08-07 09:16:27 -04:00

146 lines
5.3 KiB
C++

#include <remotepsapp/windowview.hpp>
#include <common/assert.hpp>
#include <common/string.hpp>
char WindowView::mszClassName[]="WINDOWVIEW";
WindowView::WindowView(void)
{
mCreateHandler.setCallback(this,&WindowView::createHandler);
mDestroyHandler.setCallback(this,&WindowView::destroyHandler);
mCloseHandler.setCallback(this,&WindowView::closeHandler);
mPaintHandler.setCallback(this,&WindowView::paintHandler);
mSizeHandler.setCallback(this,&WindowView::sizeHandler);
mVerticalScrollHandler.setCallback(this,&WindowView::verticalScrollHandler);
mHorizontalScrollHandler.setCallback(this,&WindowView::horizontalScrollHandler);
mEraseBackgroundHandler.setCallback(this,&WindowView::eraseBackgroundHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler);
insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler);
insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler);
registerClass();
}
WindowView::WindowView(const WindowView &someWindowView)
{
}
WindowView::~WindowView()
{
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler);
removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler);
removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler);
}
WindowView &WindowView::operator=(const WindowView &/*someWindowView*/)
{ // private implemnentation
return *this;
}
bool WindowView::create(GUIWindow &parentWindow,GUIWindow &conformParent,const Rect &winRect,UINT controlID)
{
if(isValid())return false;
createWindow(WS_EX_CLIENTEDGE,className(),className(),WS_CHILD|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE,winRect,parentWindow,(HMENU)0,processInstance(),(LPSTR)this);
assumeControl(conformParent,*this,0);
update();
return isValid();
}
void WindowView::registerClass(void)
{
WNDCLASS wndClass;
if(::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass))return;
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_OWNDC|CS_DBLCLKS;
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
wndClass.cbClsExtra =0;
wndClass.cbWndExtra =sizeof(WindowView*);
wndClass.hInstance =processInstance();
wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground =(HBRUSH)::GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName =0;
wndClass.lpszClassName =className();
::RegisterClass(&wndClass);
assert(0!=::GetClassInfo(processInstance(),className(),(WNDCLASS FAR*)&wndClass));
}
CallbackData::ReturnType WindowView::createHandler(CallbackData &someCallbackData)
{
mScrollInfo.hwndOwner(*this);
return false;
}
CallbackData::ReturnType WindowView::destroyHandler(CallbackData &someCallbackData)
{
return false;
}
CallbackData::ReturnType WindowView::closeHandler(CallbackData &someCallbackData)
{
return false;
}
CallbackData::ReturnType WindowView::paintHandler(CallbackData &someCallbackData)
{
if(!mJPGImage.isOkay())return false;
PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam();
PureDevice &paintDevice=(PureDevice&)*pPaintInfo;
if(mScrollInfo.sizeEvent())
{
mScrollInfo.sizeEvent(false);
mJPGImage.draw(paintDevice,Rect(0,0,mJPGImage.width(),mJPGImage.height()),Point(mScrollInfo.currScrollx(),mScrollInfo.currScrolly()));
}
if(mScrollInfo.scrollEvent()||(!mScrollInfo.sizeEvent()&&!mScrollInfo.scrollEvent()))
{
Rect paintRect(pPaintInfo->paintRect());
mScrollInfo.scrollEvent(FALSE);
paintRect.right(paintRect.right()-paintRect.left());
paintRect.bottom(paintRect.bottom()-paintRect.top());
mJPGImage.draw(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly()));
}
return false;
}
CallbackData::ReturnType WindowView::sizeHandler(CallbackData &someCallbackData)
{
mScrollInfo.handleSize(someCallbackData);
return false;
}
CallbackData::ReturnType WindowView::verticalScrollHandler(CallbackData &someCallbackData)
{
mScrollInfo.handleVerticalScroll(someCallbackData);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType WindowView::horizontalScrollHandler(CallbackData &someCallbackData)
{
mScrollInfo.handleHorizontalScroll(someCallbackData);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType WindowView::eraseBackgroundHandler(CallbackData &someCallbackData)
{
return (CallbackData::ReturnType)FALSE;
}
bool WindowView::createImage(const String &strPathFileName)
{
if(!isValid())return false;
PureDevice pureDevice(*this);
mJPGImage.decode(strPathFileName,pureDevice);
if(!mJPGImage.isOkay())return false;
mScrollInfo.scrollableObjectDimensions(mJPGImage.width(),mJPGImage.height());
invalidate();
return true;
}