From 76e207a0161dd493be1b96d93d54d35cf3e88422 Mon Sep 17 00:00:00 2001 From: caballero Date: Thu, 26 Mar 2009 16:05:45 +0000 Subject: [PATCH] Validate is now linear --- src2/creaImageIOGimmickView.cpp | 92 ++++++++++++++++--------------- src2/creaImageIOGimmickView.h | 28 ++++------ src2/creaImageIOWxGimmickView.cpp | 52 +++++++++++++++-- src2/creaImageIOWxGimmickView.h | 2 +- src2/creaImageIOWxTreeView.cpp | 24 ++++++-- src2/creaImageIOWxTreeView.h | 4 +- src2/creaImageIOWxViewer.cpp | 5 +- src2/creaImageIOWxViewer.h | 27 ++++----- 8 files changed, 143 insertions(+), 91 deletions(-) diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index 0afd753..0a2b8e1 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -38,6 +38,10 @@ namespace creaImageIO /// void GimmickView::Initialize() { + row=""; + col=""; + plane=""; + selectionSize=0; } //====================================================================== @@ -79,49 +83,47 @@ namespace creaImageIO i->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 @@ -168,27 +170,29 @@ 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: " <& s) { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); } - virtual void OnSelectionChange(std::vector& s) + virtual void OnSelectionChange(std::vector& s, bool isSelection, int selection, bool mProcess) { GimmickError("INTERNAL ERROR : OnSelectionChange not implemented"); } virtual void ClearSelection() { GimmickError("INTERNAL ERROR : ClearSelection not implemented"); } ///Validates the dimension compliance of the images with the maximum and minimum given, and between their sizes - bool ValidateSelected (std::vector& sel, int min_dim, int max_dim); + bool ValidateSelected (tree::Node* sel, int min_dim, int max_dim); ///Reads the vector of nodes, builds images in the dimension required and returns them in the supplied vector. void ReadImagesNotThreaded(std::vector& s,std::vector im, int dim); ///Requests the reading of an image with priority and index in the /// current selection (-1 if not in selection) void RequestReading(tree::Node* n, int prio, int selection_index , ImagePointerHolder *p); - - ///Returns true if the ImageEventQueue is empty - bool IsQueueEmpty(){return mImageEventQueue.empty();} - ///Clears the queue - void ClearQueue(){mImageEventQueue.clear();} - ///Returns the next in line EventType's image - vtkImageData* GetNextImageQueued(){return mImageEventQueue.front().image;} - ///Returns the next in line EventType's node - tree::Node* GetNextNodeQueued(){return mImageEventQueue.front().node;} - ///Returns the next in line EventType's index in selection - int GetNextSelectionIndexQueued(){return mImageEventQueue.front().index;} - ///Unqueus the next in line EventType - void UnqueueNext(){mImageEventQueue.pop_front();} - + ///Obtains the message of the state std::string GetMessage(){return mMess;} ///Obtains the message of the state void SetMessage(std::string mess){mMess=mess;} + ///Clears status and begins a new selection + void ClearStatus(); /// Create the tree views void CreateTreeViews(); @@ -171,9 +160,14 @@ namespace creaImageIO ImageEventTypeMap mImageEventMap; // queue of image event typedef std::deque ImageEventQueueType; - ImageEventQueueType mImageEventQueue; + //ImageEventQueueType mImageEventQueue; ValidationSignalType mValidationSignal; + std::string row; + std::string col; + std::string plane; + int selectionSize; + bool valid; }; // EO class GimmickView diff --git a/src2/creaImageIOWxGimmickView.cpp b/src2/creaImageIOWxGimmickView.cpp index cd23af7..ba41e35 100644 --- a/src2/creaImageIOWxGimmickView.cpp +++ b/src2/creaImageIOWxGimmickView.cpp @@ -371,24 +371,56 @@ namespace creaImageIO //================================================= //================================================= - void WxGimmickView::OnSelectionChange(std::vector& sel) + void WxGimmickView::OnSelectionChange(std::vector& sel, bool isSelection, int selection, bool needProcess) { GimmickDebugMessage(5, "WxGimmickView::OnSelectionChange" <::iterator i; + for(i=sel.begin();i!=sel.end()&&valid;++i) + { + valid= ValidateSelected((*i), + mSelectionMinDimension, + mSelectionMaxDimension ); + } + } + else if(isSelection) + { + valid= ValidateSelected(sel.front(), + mSelectionMinDimension, + mSelectionMaxDimension ); + } + else + { + ClearStatus(); + std::vector::iterator i; + for(i=sel.begin();i!=sel.end()&&valid;++i) + { + valid= ValidateSelected((*i), + mSelectionMinDimension, + mSelectionMaxDimension ); + } + } + mText->SetLabel(crea::std2wx(GetMessage())); - if(valid) + /*if(valid) { ReadImageThreaded(sel); } else { ClearSelection(); - } + }*/ + ReadImageThreaded(sel); } @@ -462,6 +494,13 @@ namespace creaImageIO if (prio == maxprio) break; } } + else + { + pointers.clear(); + ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage()); + pointers.push_back(ph); + mViewer->SetImageVector(pointers); + } } //================================================== @@ -491,6 +530,7 @@ namespace creaImageIO pointers.push_back(new ImagePointerHolder(GetDefaultImage())); mViewer->SetImageVector(pointers); mViewer->RefreshIfNecessary(); + ClearStatus(); } //================================================= diff --git a/src2/creaImageIOWxGimmickView.h b/src2/creaImageIOWxGimmickView.h index 6c236cb..314d172 100644 --- a/src2/creaImageIOWxGimmickView.h +++ b/src2/creaImageIOWxGimmickView.h @@ -47,7 +47,7 @@ namespace creaImageIO void GetSelectedImages(std::vector& s, int dim); /// Callback called when a selection from a TreeView has changed //(overloaded from GimmickView) - void OnSelectionChange(std::vector& s); + void OnSelectionChange(std::vector& s, bool isSelection, int selection, bool mProcess); ///Stops the player void StopPlayer(){mViewer->StopPlayer();} ///Resets the default image diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index 3a24eb4..b01b40f 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -389,6 +389,9 @@ namespace creaImageIO " Level "< sel(GetSelected(mLevelList.size()+1)); - GetGimmickView()->OnSelectionChange(sel); + GetGimmickView()->OnSelectionChange(sel,isSelection,(mLastSelected-1), mProcess); } //================================================================ @@ -718,9 +729,12 @@ namespace creaImageIO } //================================================================ - void WxTreeView::SetColor(int l) + void WxTreeView::SetColor(int l, int item) { - /* + int colorId=12; + GetCtrl(l)->SetItemTextColour(item, wxColourDatabase().Find + (crea::std2wx(mColorPalette[colorId]))); + GetCtrl(l)->SetItemState(item,wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED); /* int colorId=0; //Setting the color according to the parent if(l==0) diff --git a/src2/creaImageIOWxTreeView.h b/src2/creaImageIOWxTreeView.h index a1d5ed6..bf13312 100644 --- a/src2/creaImageIOWxTreeView.h +++ b/src2/creaImageIOWxTreeView.h @@ -71,7 +71,7 @@ namespace creaImageIO /// Gets the user selected data from the level passed as a parameter std::vector GetSelected(int level); ///Validates the selected images - void ValidateSelectedImages(); + void ValidateSelectedImages(bool isSelection); ///Gets selected filenames void GetSelectedAsString(std::vector&s); /// Gets the next nodes on the list, be it up(true) or down(false). @@ -80,7 +80,7 @@ namespace creaImageIO /// Recursive method virtual void RecursiveUpdateLevel( int ); ///Sets the color of a selected item - void SetColor(int level); + void SetColor(int level, int item); ///Creates the color palette for the first level void CreateColorPalette(); ///Selects the lowest level (images) diff --git a/src2/creaImageIOWxViewer.cpp b/src2/creaImageIOWxViewer.cpp index f298a21..ab18933 100644 --- a/src2/creaImageIOWxViewer.cpp +++ b/src2/creaImageIOWxViewer.cpp @@ -223,6 +223,8 @@ namespace creaImageIO } return false; } + //================================================================ + //================================================== void WxViewer::StopPlayer() { @@ -231,7 +233,8 @@ namespace creaImageIO mPlayer->Delete(); mPlayer=0; } - + //================================================================ + //================================================== void WxViewer::StartPlayer() { diff --git a/src2/creaImageIOWxViewer.h b/src2/creaImageIOWxViewer.h index e64704a..5283364 100644 --- a/src2/creaImageIOWxViewer.h +++ b/src2/creaImageIOWxViewer.h @@ -26,7 +26,7 @@ namespace creaImageIO { public: - /// Ctor + /// Ctors WxViewer(); WxViewer(wxWindow *parent, const wxWindowID id, @@ -35,45 +35,40 @@ namespace creaImageIO const wxSize& size); /// Dtor virtual ~WxViewer(); - /// + /// Shows the next image in the image vector void ShowNextImage(); - + ///Starts the image player void StartPlayer(); - + ///Stops the image player void StopPlayer(); - + ///Refreshes the interface if the current image shown has changed bool RefreshIfNecessary(); - + ///Sets a new image vector to be read void SetImageVector(std::vector& pointers); private: - ///Shows the image passed as parameter + ///Shows the image passed as parameter void ShowImage(vtkImageData* im); - /// Previewer vtkImageViewer2* mViewer; /// Associated wxvtk interactor crea::creawxVTKRenderWindowInteractor *mInteractor; - /// Current extent int mx1,mx2,my1,my2,mz1,mz2; /// Current spacing double mspx,mspy,mspz; - - /// + /// Current image shown int mCurrent; ///The threaded movie player WxViewerPlayer* mPlayer; - /// The mutex wxMutex mMutex; - - /// + /// Boolean that declares if the player needs to be refreshed bool mNeedRefresh; - - + ///Last image shown vtkImageData* mLastImageShown; + ///The vectors of images to be shown std::vector imagePointers; }; -- 2.45.1