#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)){mThumbNails.remove(mThumbNails.size()-1);return false;} isDirty(true); return true; } bool ThumbPage::insert(const String &strPathFileName) { mThumbNails.insert(&SmartPointer()); SmartPointer &ptrThumbNail=mThumbNails[mThumbNails.size()-1]; ptrThumbNail=::new ThumbNail(); ptrThumbNail.disposition(PointerDisposition::Delete); if(!ptrThumbNail->setImage(strPathFileName)){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); } DWORD ThumbPage::memoryUsage(void)const { DWORD memUsage(0); for(int index=0;indexmemoryUsage(); return memUsage; } 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; if(!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); } mDIB24.setAtAsm(xyPoint.y(),xyPoint.x(),ptrThumbNail->getImage()); xyPoint.x(xyPoint.x()+ptrThumbNail->width()+Separator); } 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(!gdiPoint.x())gdiPoint.x(xyPoint.x()); 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; }