#include #include #include #include #include #include #include #include #include BrowseView::BrowseView(void) { mCreateHandler.setCallback(this,&BrowseView::createHandler); mSizeHandler.setCallback(this,&BrowseView::sizeHandler); mPaintHandler.setCallback(this,&BrowseView::paintHandler); mHorizontalScrollHandler.setCallback(this,&BrowseView::horizontalScrollHandler); mVerticalScrollHandler.setCallback(this,&BrowseView::verticalScrollHandler); mLeftButtonDoubleHandler.setCallback(this,&BrowseView::leftButtonDoubleHandler); insertHandler(VectorHandler::CreateHandler,&mCreateHandler); insertHandler(VectorHandler::SizeHandler,&mSizeHandler); insertHandler(VectorHandler::PaintHandler,&mPaintHandler); insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); insertHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); } BrowseView::~BrowseView() { removeHandler(VectorHandler::CreateHandler,&mCreateHandler); removeHandler(VectorHandler::SizeHandler,&mSizeHandler); removeHandler(VectorHandler::PaintHandler,&mPaintHandler); removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); removeHandler(VectorHandler::LeftButtonDoubleHandler,&mLeftButtonDoubleHandler); } CallbackData::ReturnType BrowseView::createHandler(CallbackData &someCallbackData) { mScrollInfo.hwndOwner(*this); setTitle("None"); return FALSE; } CallbackData::ReturnType BrowseView::sizeHandler(CallbackData &someCallbackData) { if(mThumbPage.rowItems()!=mThumbPage.rowItems(*this)) { CursorControl cursorControl; cursorControl.waitCursor(true); mThumbPage.isDirty(true); mThumbPage.update(*this); mScrollInfo.scrollableObjectDimensions(mThumbPage.width(),mThumbPage.height()); cursorControl.waitCursor(false); } mScrollInfo.handleSize(someCallbackData); return FALSE; } CallbackData::ReturnType BrowseView::paintHandler(CallbackData &someCallbackData) { PaintInformation &paintInfo=*((PaintInformation*)someCallbackData.lParam()); PureDevice &paintDevice=(PureDevice&)paintInfo; if(mScrollInfo.sizeEvent()) { mScrollInfo.sizeEvent(FALSE); mThumbPage.draw(paintDevice,Rect(0,0,mThumbPage.width(),mThumbPage.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())); mThumbPage.draw(paintDevice,paintRect,Point(paintRect.left()+mScrollInfo.currScrollx(),paintRect.top()+mScrollInfo.currScrolly())); } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType BrowseView::verticalScrollHandler(CallbackData &someCallbackData) { mScrollInfo.handleVerticalScroll(someCallbackData); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType BrowseView::horizontalScrollHandler(CallbackData &someCallbackData) { mScrollInfo.handleHorizontalScroll(someCallbackData); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType BrowseView::leftButtonDoubleHandler(CallbackData &someCallbackData) { Point clickPoint(someCallbackData.loWord(),someCallbackData.hiWord()); CallbackData callbackData; String strPathFileName; String strItemName; clickPoint.x(clickPoint.x()+mScrollInfo.currScrollx()); clickPoint.y(clickPoint.y()+mScrollInfo.currScrolly()); if(!mThumbPage.hitTest(*this,clickPoint,strItemName))return (CallbackData::ReturnType)FALSE; strPathFileName=getTitle()+String("\\")+strItemName; ::OutputDebugString(strPathFileName+String("\n")); callbackData.lParam(int((char*)strPathFileName)); mSelectHandler.callback(callbackData); return (CallbackData::ReturnType)FALSE; } bool BrowseView::browse(const String &strPathDirectory) { CursorControl cursorControl; Block strPathFileNames; PureDevice pureDevice(*this); PakEntry pakEntry; String strMessage; DWORD elapsedTime; setTitle(strPathDirectory); if(strPathDirectory.isNull())return FALSE; cursorControl.waitCursor(true); getDirectoryFileNames(strPathDirectory,strPathFileNames); mMediaPak.open(strPathDirectory+String(".pak"),MediaPak::OpenAlways); if(mMediaPak.entries()) { elapsedTime=::GetTickCount(); PakEntry pakEntry; DWORD pakEntries=mMediaPak.entries(); for(int index=0;index rawData; PakEntry pakEntry; String strPathFileName(strPathDirectory+String("\\")+strPathFileNames[index]); mThumbPage.insert(strPathFileName,pureDevice); mThumbPage[mThumbPage.entries()-1].getRawData(rawData); pakEntry.type(PakEntry::Blob); pakEntry.name(strPathFileNames[index]); pakEntry.id(mMediaPak.entries()); pakEntry.rawData(rawData); mMediaPak.add(pakEntry); } } mThumbPage.update(*this); mScrollInfo.scrollableObjectDimensions(mThumbPage.width(),mThumbPage.height()); cursorControl.waitCursor(false); invalidate(false); return TRUE; } void BrowseView::merge(MediaPak &mediaPak,Block &strPathDirFileNames,const String &strPathDirectory,PureDevice &pureDevice) { BTree strPathFileNames; EntryInfo entryInfo; String strFound; int index; for(index=0;index rawData; PakEntry pakEntry; ::OutputDebugString(String("Adding ")+strPathDirFileNames[index]+String("\n")); strPathFileNames.insert(strPathDirFileNames[index]); String strPathFileName(strPathDirectory+String("\\")+strPathDirFileNames[index]); mThumbPage.insert(strPathFileName,pureDevice); mThumbPage[mThumbPage.entries()-1].getRawData(rawData); pakEntry.type(PakEntry::Blob); pakEntry.name(strPathDirFileNames[index]); pakEntry.id(mMediaPak.entries()); pakEntry.rawData(rawData); mMediaPak.add(pakEntry); } } } bool BrowseView::getDirectoryFileNames(const String &strDirectory,Block &strPathFileNames) { PathFind pathFind; strPathFileNames.remove(); pathFind.fileList(strDirectory+String("\\")+String("*.jpg"),strPathFileNames); return strPathFileNames.size()?true:false; } void BrowseView::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); } String BrowseView::getTitle(void)const { String strCaption; windowText(strCaption); return strCaption.betweenString('[',']'); } // *** virtuals void BrowseView::preRegister(WNDCLASS &wndClass) { wndClass.style|=CS_SAVEBITS|CS_OWNDC; wndClass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); } void BrowseView::preCreate(MDICREATESTRUCT &createStruct) { createStruct.style|=WS_VSCROLL|WS_HSCROLL|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; }