#include #include bool ThumbPage::insert(const String &strPathFileName,PureDevice &pureDevice) { mThumbNails.insert(&SmartPointer()); SmartPointer &ptrThumbNail=mThumbNails[mThumbNails.size()-1]; ptrThumbNail=::new ThumbNail(); ptrThumbNail.disposition(PointerDisposition::Delete); if(!ptrThumbNail->setImage(strPathFileName,pureDevice)){mThumbNails.remove(mThumbNails.size()-1);return false;} isDirty(true); return true; } bool ThumbPage::insert(PakEntry &pakEntry,PureDevice &pureDevice) { mThumbNails.insert(&SmartPointer()); SmartPointer &ptrThumbNail=mThumbNails[mThumbNails.size()-1]; ptrThumbNail=::new ThumbNail; ptrThumbNail.disposition(PointerDisposition::Delete); // if(!ptrThumbNail->setImage(pakEntry,pureDevice)){mThumbNails.remove(mThumbNails.size()-1);return false;} if(!ptrThumbNail->setImage(pakEntry)){mThumbNails.remove(mThumbNails.size()-1);return false;} isDirty(true); return true; } void ThumbPage::remove(const String &strPathFileName) { for(int index=0;indexpathFileName()==strPathFileName) { mThumbNails.remove(index); index=-1; } } isDirty(true); } void ThumbPage::draw(GUIWindow &guiWindow) { PureDevice pureDevice(guiWindow); if(mDIB24.isOkay())mDIB24.draw(pureDevice,Rect(0,0,guiWindow.width(),guiWindow.height()),Point(0,0)); } void ThumbPage::draw(PureDevice &pureDevice,const Rect &dstRect,const Point &srcPoint) { if(mDIB24.isOkay())mDIB24.draw(pureDevice,dstRect,srcPoint); } void ThumbPage::update(GUIWindow &guiWindow) { if(!isDirty())return; createBitmap(guiWindow); } bool ThumbPage::createBitmap(GUIWindow &guiWindow) { PureDevice pureDevice(guiWindow); GDIPoint gdiPoint; if(!mThumbNails.size()||!guiWindow.isValid())return false; if(!getDimensions(guiWindow,gdiPoint))return false; mDIB24.create(gdiPoint.x(),-gdiPoint.y(),pureDevice); mDIB24.setBits(BkColorBits); drawThumbNails(guiWindow); isDirty(false); return mDIB24.isOkay(); } bool ThumbPage::drawThumbNails(GUIWindow &guiWindow) { Point xyPoint; String strString; DWORD elapsedTime; if(!guiWindow.isValid()||!mThumbNails.size())return false; elapsedTime=::GetTickCount(); for(int index=0;index &ptrThumbNail=mThumbNails[index]; if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) { xyPoint.x(0); xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); } mDIB24.setAt(xyPoint.y(),xyPoint.x(),ptrThumbNail->getImage()); xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); } ::sprintf(strString,"drawThumbNails took %d seconds\n",(::GetTickCount()-elapsedTime)/1000); ::OutputDebugString(strString); return true; } bool ThumbPage::drawThumbNails(PureDevice &pureDevice,GUIWindow &guiWindow) { Point xyPoint; if(!pureDevice.isOkay()||!guiWindow.isValid()||!mThumbNails.size())return false; for(int index=0;index &ptrThumbNail=mThumbNails[index]; if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) { xyPoint.x(0); xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); } ptrThumbNail->draw(pureDevice,xyPoint); xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); } return true; } DWORD ThumbPage::rowItems(GUIWindow &guiWindow)const { Point xyPoint; DWORD rowItems; rowItems=0; if(!guiWindow.isValid()||!mThumbNails.size())return rowItems; for(int index=0;index &ptrThumbNail=((Block >&)mThumbNails)[index]; if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) { if(!rowItems)rowItems=index+1; xyPoint.x(0); xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); } xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); } if(!rowItems)rowItems=mThumbNails.size(); return rowItems; } int ThumbPage::getDimensions(GUIWindow &guiWindow,GDIPoint &gdiPoint) { Point xyPoint; gdiPoint=GDIPoint(); rowItems(0); if(!guiWindow.isValid()||!mThumbNails.size())return rowItems(); for(int index=0;index &ptrThumbNail=mThumbNails[index]; if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) { if(!rowItems()) { rowItems(index+1); gdiPoint.x(xyPoint.x()); } xyPoint.x(0); xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); } xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); } gdiPoint.y(xyPoint.y()+mThumbNails[index-1]->height()+Separator); if(!rowItems())rowItems(mThumbNails.size()); return rowItems(); } bool ThumbPage::hitTest(GUIWindow &guiWindow,const Point &clickPoint,String &strPathFileName) { Point xyPoint; if(!isOkay())return false; for(int index=0;index &ptrThumbNail=mThumbNails[index]; if(xyPoint.x()+ptrThumbNail->width()>=guiWindow.width()) { xyPoint.x(0); xyPoint.y(xyPoint.y()+ptrThumbNail->height()+Separator); } Rect rgnRect(xyPoint.x(),xyPoint.y(),xyPoint.x()+ptrThumbNail->width(),xyPoint.y()+ptrThumbNail->height()); if(rgnRect.ptInRect(clickPoint)) { strPathFileName=ptrThumbNail->pathFileName(); return true; } xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); } return false; }