]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxGimmickView.cpp
The number of files on adding files now corresponds.
[creaImageIO.git] / src2 / creaImageIOWxGimmickView.cpp
index 53aa4a8c8969af1668c305ae175c9819628ba5b8..7e018a0c2bd62fec02e5de2ae0fac03559197021 100644 (file)
@@ -15,6 +15,7 @@ using namespace crea;
 
 namespace creaImageIO
 {
+   
   //======================================================================
   // The ids of the different tools
   enum
@@ -115,9 +116,10 @@ namespace creaImageIO
     
     // Previewer
     mViewer = new WxViewer(mBottomPanel, wxID_ANY, wxT("Gimmick! Viewer"),wxDefaultPosition, wxDefaultSize );
-       mViewer->SetMovieSize(1);
-       mViewer->SetImage(0,GetDefaultImage());
-         mViewer->ShowNextImage();
+       pointers.push_back(new ImagePointerHolder(GetDefaultImage()));
+       mViewer->SetImageVector(pointers);
+       mViewer->StartPlayer();
+
 
     bottom_sizer->Add(mViewer,1,wxGROW,1);
     //    mViewer->Show();
@@ -369,26 +371,60 @@ namespace creaImageIO
   //=================================================
 
   //=================================================
-  void WxGimmickView::OnSelectionChange(std::vector<tree::Node*>& sel)
+  void WxGimmickView::OnSelectionChange(std::vector<tree::Node*>& sel, bool isSelection, int selection, bool needProcess)
   {      
     GimmickDebugMessage(5,
                        "WxGimmickView::OnSelectionChange"
                        <<std::endl);
     wxBusyCursor busy;
-    bool valid = ValidateSelected(sel,
-                                 mSelectionMinDimension,
-                                 mSelectionMaxDimension );
+       bool valid=true;
+       
+       if(sel.size()==0)
+       {
+               
+               valid= ValidateSelected(NULL,
+                               mSelectionMinDimension,
+                               mSelectionMaxDimension );
+       }
+       else if(needProcess)
+       {
+               ResetExtent();
+               std::vector<tree::Node*>::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
+       {
+               ResetExtent();
+               std::vector<tree::Node*>::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
       {
-       mViewer->SetMovieSize(1);
-       mViewer->SetImage(0,GetDefaultImage());
-       //      mViewer->Hide();
-      }
+                 ClearSelection();
+      }*/
+       ReadImageThreaded(sel);
 
     
    }
@@ -405,25 +441,27 @@ namespace creaImageIO
    int maxprio = GetMaximalPriority();
    int prio = maxprio + 2000;
 
-   mViewer->SetMovieSize(sel.size());//ClearImages();
-   
+   if(sel.size()>0)
+   {
    //First load the selected images
    mCurImageItemToShow = sel.front();
+   pointers.clear();
    int index = 0;
    std::vector<tree::Node*>::iterator selected;
    for(selected=sel.begin();selected!=sel.end();++selected)
      {
        GimmickDebugMessage(5,
                           "Requesting image from selected "
                           <<(*selected)->GetAttribute("FullFileName")
                           <<std::endl);
-       RequestReading(*selected,prio,index);
+          ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+          pointers.push_back(ph);
+       RequestReading(*selected,prio,index,ph);
        //       AddEntryToMap(*selected);
        prio--;
        index++;
      }
-       
+       mViewer->SetImageVector(pointers);
        //Going up
        prio = maxprio + 20;
        std::vector<tree::Node*> up;
@@ -435,7 +473,8 @@ namespace creaImageIO
                                "Requesting image from neighbors up "
                                <<(*iterUp)->GetAttribute("FullFileName")
                                <<std::endl);
-               RequestReading(*iterUp,prio,-1);
+               ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+               RequestReading(*iterUp,prio,-1,ph);
                //              AddEntryToMap(*iterUp);
                prio--;
                if (prio == maxprio) break;
@@ -452,83 +491,41 @@ namespace creaImageIO
                                "Requesting image from neighbors down "
                                <<(*iterDown)->GetAttribute("FullFileName")
                                <<std::endl);
-               RequestReading(*iterDown,prio,-1);
+               ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+               RequestReading(*iterDown,prio,-1,ph);
                //              AddEntryToMap(*iterDown);
                prio--;
                if (prio == maxprio) break;
-       }       
+       }
+   }
+   else
+   {
+          pointers.clear();
+          ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+          pointers.push_back(ph);
+          mViewer->SetImageVector(pointers);
+   }
   }
 
   //==================================================
 
-  //==================================================
-  /// Processes the queue of image events 
-  void WxGimmickView::ProcessImageEvents()
-  {
-    if (!mConstructed) return;
-
-    //    int level=GetTreeViewMap()["Local database"]->GetNumberOfLevels();
-    //    std::vector<tree::Node*> sel=GetTreeViewMap()["Local database"]->GetSelected(level+1);
-    /*
-    GimmickDebugMessage(5,
-                       "Processing Images. Lock Started"
-                       <<std::endl);
-    */
-    MultiThreadImageReaderEventLock();
-    
-
-    while (!IsQueueEmpty())
-      {
-                 mViewer->StartPlayer();
-
-       GimmickDebugMessage(5,
-                           "Queue not empty"
-                           <<std::endl);
-       
-       vtkImageData* image = GetNextImageQueued();
-       if( image!=0 ) 
-         {
-           int index =  GetNextSelectionIndexQueued();
-           if (index>=0) 
-             {
-               mViewer->SetImage(index,image);
-             }
-           
-         }
-       UnqueueNext();
-      }
-    
-    ClearQueue();
-
-    MultiThreadImageReaderEventUnlock();
-    /*
-       GimmickDebugMessage(5,
-                               "Processing Images. Lock Ended"
-                               <<std::endl);
-    */
-  }
   //==================================================
 
   //==================================================
    void  WxGimmickView::OnInternalIdle()
   {
    if (!mConstructed) return;
-   ProcessImageEvents();
    static bool first_time = true;
    if (false)
-     {
-       mViewer->SetMovieSize(1);
-       mViewer->SetImage(0,GetDefaultImage());
-       first_time = false;
+   {
+       first_time = false;
      }
    //   GimmickMessage(1,"WxGimmickView : Refresh viewer"<<std::endl);
        //  mViewer->StartPlayer();
-   if (mViewer->RefreshIfNecessary())
-     {
-       // mViewer->Refresh();
-       //       mViewer->SetFocus();
-     }
+   if(mViewer)
+   {
+          mViewer->RefreshIfNecessary();
+   }
   }
 
    //==================================================
@@ -536,9 +533,11 @@ namespace creaImageIO
   //==================================================
    void  WxGimmickView::ClearSelection()
   {
-       mViewer->SetMovieSize(1);
-       mViewer->SetImage(0,GetDefaultImage());
+       pointers.clear();
+       pointers.push_back(new ImagePointerHolder(GetDefaultImage()));
+       mViewer->SetImageVector(pointers);
        mViewer->RefreshIfNecessary();
+       ResetExtent();
   }
   
   //=================================================