X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src2%2FcreaImageIOGimmickView.cpp;h=0a2b8e1800b944ea7685a10072d02e9bba22aae9;hb=76e207a0161dd493be1b96d93d54d35cf3e88422;hp=6084c7d7ff3d097ba932bbdbc78803fdbc6860fb;hpb=6cac83c30fb8c3cd89c41685078eccff6e952a50;p=creaImageIO.git diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index 6084c7d..0a2b8e1 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -1,8 +1,13 @@ #include #include +#include "boost/filesystem.hpp" + +namespace fs = boost::filesystem; + namespace creaImageIO { + //====================================================================== // CTor GimmickView::GimmickView(Gimmick* gimmick, int threads) @@ -11,8 +16,9 @@ namespace creaImageIO { GimmickDebugMessage(1,"GimmickView::GimmickView" <second->UpdateLevel(l); } //====================================================================== + /// Clears the status and begins a new selection process + void GimmickView::ClearStatus() + { + row=""; + col=""; + plane=""; + selectionSize=0; + valid=true; + } + //====================================================================== ///Validates the dimension compliance of the images with the maximum and ///minimum given, and between their sizes - bool GimmickView::ValidateSelected (std::vector& sel, int min_dim, int max_dim) + bool GimmickView::ValidateSelected (tree::Node* sel, int min_dim, int max_dim) { GimmickMessage(2,"Validating selected"<0) + + if(row.compare("")==0 || col.compare("")==0) { - std::vector::iterator i; - std::string row; - std::string col; - std::string plane; - - //Validation between image sizes - for (i=sel.begin(); i!=sel.end() && valid; ++i) - { - if(i==sel.begin()) - { - row=(*i)->GetAttribute("D0028_0010"); - col=(*i)->GetAttribute("D0028_0011"); - plane=(*i)->GetAttribute("D0028_0012"); - level=(*i)->GetLevel(); - - } - else + row=(*sel).GetAttribute("D0028_0010"); + col=(*sel).GetAttribute("D0028_0011"); + plane=(*sel).GetAttribute("D0028_0012"); + level=(*sel).GetLevel(); + } + else + { + if(((*sel).GetAttribute("D0028_0010"))!=row || + ((*sel).GetAttribute("D0028_0011"))!=col || + ((*sel).GetAttribute("D0028_0012"))!=plane) { - if(((*i)->GetAttribute("D0028_0010"))!=row || - ((*i)->GetAttribute("D0028_0011"))!=col || - ((*i)->GetAttribute("D0028_0012"))!=plane) - { - mMessage="The selected images are not compatible."; - valid=false; - } + mMessage="The selected images are not compatible."; + valid=false; } - } + } + //Dimention validation //Compatibility with maximum and minimum @@ -156,31 +170,34 @@ namespace creaImageIO valid= false; } - if ( dim < min_dim && sel.size()<2 ) + if ( dim < min_dim ) { - GimmickDebugMessage(2, "State Check: Dim: " + GimmickMessage(1, "State Check: Dim: " <GetAttribute("FullFileName")] = t; + mReader.Request(this,n->GetAttribute("FullFileName"),prio); + } //====================================================================== //====================================================================== @@ -274,17 +301,75 @@ namespace creaImageIO MultiThreadImageReaderUser::EventType e, vtkImageData* image) { + GimmickDebugMessage(7, + "MultiThreadImageReader event : "<::iterator i; - i = mImageFileNameToNode.find(filename); - if (i!=mImageFileNameToNode.end()) + ImageEventTypeMap::iterator i; + i = mImageEventMap.find(filename); + if (i!=mImageEventMap.end()) { - mImageEventQueue.push_back(ImageEventType(i->second,image)); + GimmickDebugMessage(5, + "Putting image of file '"<second); + ie.image = image; + ie.pointerHolder->Set(ie.image); + //mImageEventMap.erase(i); } + } + else if (e==Error) + { + std::string mess="ERROR: MultiThreadImageReader: Cannot read image in file "; + mess+=filename; + mess+="\n"; + GimmickMessage(1,mess); + ImageEventTypeMap::iterator i; + i = mImageEventMap.find(filename); + if (i!=mImageEventMap.end()) + { + ImageEventType ie(i->second); + ie.image = image; + ie.pointerHolder->Set(GetDefaultImage()); + //mImageEventMap.erase(i); + } + } + + else if (e==ImageUnloaded) + { + std::string mess="Unloaded image in file "; + mess+=filename; + mess+="\n"; + GimmickMessage(1,mess); + ImageEventTypeMap::iterator i; + i = mImageEventMap.find(filename); + if (i!=mImageEventMap.end()) + { + ImageEventType ie(i->second); + ie.image = image; + ie.pointerHolder->Set(GetDefaultImage()); + //mImageEventMap.erase(i); + } + + } + } + + //==================================================================== + + //==================================================================== + void GimmickView::ConnectValidationObserver(ValidationCallbackType callback) + { + mValidationSignal.connect(callback); }