Files
Work/nntp/IMGVIEW.CPP
2024-08-07 09:16:27 -04:00

145 lines
4.5 KiB
C++

#include <nntp/imgview.hpp>
#include <statbar/statbarx.hpp>
#include <common/crsctrl.hpp>
ImageView::ImageView(void)
{
mCreateHandler.setCallback(this,&ImageView::createHandler);
mSizeHandler.setCallback(this,&ImageView::sizeHandler);
mPaintHandler.setCallback(this,&ImageView::paintHandler);
mHorizontalScrollHandler.setCallback(this,&ImageView::horizontalScrollHandler);
mVerticalScrollHandler.setCallback(this,&ImageView::verticalScrollHandler);
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler);
insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler);
}
ImageView::~ImageView()
{
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler);
removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler);
}
CallbackData::ReturnType ImageView::createHandler(CallbackData &someCallbackData)
{
mScrollInfo.hwndOwner(*this);
setTitle("None");
return FALSE;
}
CallbackData::ReturnType ImageView::sizeHandler(CallbackData &someCallbackData)
{
mScrollInfo.handleSize(someCallbackData);
return FALSE;
}
CallbackData::ReturnType ImageView::paintHandler(CallbackData &someCallbackData)
{
CursorControl cursorControl;
cursorControl.waitCursor(TRUE);
mMutex.requestMutex();
if(!mJPGImage.isOkay())
{
mMutex.releaseMutex();
cursorControl.waitCursor(FALSE);
return (CallbackData::ReturnType)FALSE;
}
PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam());
PureDevice &paintDevice=(PureDevice&)paintInfo;
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(paintInfo.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()));
}
mMutex.releaseMutex();
cursorControl.waitCursor(FALSE);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType ImageView::verticalScrollHandler(CallbackData &someCallbackData)
{
mScrollInfo.handleVerticalScroll(someCallbackData);
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType ImageView::horizontalScrollHandler(CallbackData &someCallbackData)
{
mScrollInfo.handleHorizontalScroll(someCallbackData);
return (CallbackData::ReturnType)FALSE;
}
BOOL ImageView::open(const String &strPathFileName)
{
String strString;
CursorControl cursorControl;
BOOL result;
if(strPathFileName.isNull())return FALSE;
cursorControl.waitCursor(TRUE);
mMutex.requestMutex();
PureDevice pureDevice(*this);
result=mJPGImage.decode(strPathFileName,pureDevice);
mMutex.releaseMutex();
cursorControl.waitCursor(FALSE);
if(!result)return FALSE;
mScrollInfo.scrollableObjectDimensions(mJPGImage.width(),mJPGImage.height());
setTitle(strPathFileName);
::sprintf(strString,"%s (%dx%d)",(LPSTR)strPathFileName,mJPGImage.width(),mJPGImage.height());
invalidate();
return TRUE;
}
void ImageView::setTitle(const String &strTitle)
{
String strCaption;
String strString;
windowText(strCaption);
strString=strCaption;
strCaption=strCaption.betweenString(0,' ');
if(strCaption.isNull())strCaption=strString;
strCaption+=String(" - [")+strTitle+String("]");
setCaption(strCaption);
}
BOOL ImageView::fitToWindow(void)
{
PureDevice pureDevice(*this);
CursorControl cursorControl;
if(!mJPGImage.isOkay())return false;
cursorControl.waitCursor(true);
mJPGImage.resample(pureDevice,width());
mScrollInfo.scrollableObjectDimensions(mJPGImage.width(),mJPGImage.height());
cursorControl.waitCursor(false);
invalidate();
return true;
}
// *** virtuals
void ImageView::preRegister(WNDCLASS &wndClass)
{
wndClass.style|=CS_SAVEBITS|CS_OWNDC;
wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH);
}
void ImageView::preCreate(MDICREATESTRUCT &createStruct)
{
createStruct.style|=WS_VSCROLL|WS_HSCROLL;
}