145 lines
4.5 KiB
C++
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;
|
|
}
|