]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxGimmickView.cpp
Linux compat
[creaImageIO.git] / src2 / creaImageIOWxGimmickView.cpp
index a21617c744a831daa3727994dcbd2338e9e60a93..572658b4f91752e9c8ff166ab7bed9d9e828e143 100644 (file)
@@ -66,7 +66,8 @@ namespace creaImageIO
                               int number_of_threads)
     : wxPanel(parent,id,pos,size),
       GimmickView(gimmick, number_of_threads),
-      mProgressDialog(0)
+      mProgressDialog(0),
+      mConstructed(false)
   {
     GimmickDebugMessage(1,"WxGimmickView::WxGimmickView"
                        <<std::endl);
@@ -125,7 +126,8 @@ namespace creaImageIO
     SetSizer( sizer );     
     SetAutoLayout(true);
     Layout();
-
+    
+    mConstructed = true;
   }
   //======================================================================
 
@@ -186,7 +188,7 @@ namespace creaImageIO
     GimmickMessage(2,"Creating the tree view for '"<<
                   name<<"'"<<std::endl);
     // Create the WxTreeView
-    WxTreeView* view = new WxTreeView(h,mNotebook,-1);
+    WxTreeView* view = new WxTreeView(h,this,mNotebook,-1);
 
     // TO DO : TEST THAT A VIEW WITH SAME NAME IS NOT
     // ALREADY IN THE MAP
@@ -355,21 +357,25 @@ namespace creaImageIO
   //=================================================
 
   //=================================================
-  bool WxGimmickView::ValidateSelection(void * s)
+  void WxGimmickView::OnSelectionChange(std::vector<tree::Node*>& sel)
   {      
+    GimmickDebugMessage(5,
+                       "WxGimmickView::OnSelectionChange"
+                       <<std::endl);
     wxBusyCursor busy;
-       std::vector<tree::Node*> sel=* (std::vector<tree::Node*> *) s;
-       bool valid=ValidateSelected(sel,mSelectionMinDimension,mSelectionMaxDimension );
-       mText->SetLabel(_T("Status: ")+GetMessage());
-       if(valid)
-       {
-               ReadImageThreaded(sel);
-       }
-       else
-       {
-               mViewer->Hide();
-       }
-       return valid;
+    bool valid = ValidateSelected(sel,
+                                 mSelectionMinDimension,
+                                 mSelectionMaxDimension );
+    mText->SetLabel(_T("Status: ")+crea::std2wx(GetMessage()));
+    if(valid)
+      {
+       ReadImageThreaded(sel);
+      }
+    else
+      {
+       mViewer->Hide();
+      }
+
     
    }
 
@@ -379,13 +385,16 @@ namespace creaImageIO
   ///Reads Images (Threaded)
   void WxGimmickView::ReadImageThreaded(std::vector<tree::Node*> sel)
   {    
-       int maxprio = GetMaximalPriority();
-       int prio = maxprio + 2000;
-
-       //First load the selected images
-       mCurImageItemToShow = sel.front();
-       std::vector<tree::Node*>::iterator selected;
-       for(selected=sel.begin();selected!=sel.end();++selected)
+   GimmickDebugMessage(5,
+                      "ReadImageThreaded"
+                      <<std::endl);
+   int maxprio = GetMaximalPriority();
+   int prio = maxprio + 2000;
+   
+   //First load the selected images
+   mCurImageItemToShow = sel.front();
+   std::vector<tree::Node*>::iterator selected;
+   for(selected=sel.begin();selected!=sel.end();++selected)
        {
                GimmickDebugMessage(5,
                                "Requesting image from selected "
@@ -435,38 +444,48 @@ namespace creaImageIO
   /// Processes the queue of image events 
   void WxGimmickView::ProcessImageEvents()
   {
-       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();
+    if (!mConstructed) return;
 
-       mViewer->ClearImages();
+    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();
+    
+    mViewer->ClearImages();
     while (!IsQueueEmpty())
       {
-               vtkImageData* image=GetNextImageQueued();
-               tree::Node* node=GetNextNodeQueued();
-               if( image!=0 ) 
-               {
-                       bool found=false;
-                       std::vector<tree::Node*>::iterator i;
-                       for(i=sel.begin();i!=sel.end()&&!found;++i)
-                       {
-                               if((*i)==node)
-                               {
-                                       mViewer->AddImage(image);
-                                       found=true;
-                               }
-                       }
-                       UnqueueNext();
-               }
-         }
-         if(!(mViewer->ImagesEmpty()))
+       GimmickDebugMessage(5,
+                           "Queue not empty"
+                           <<std::endl);
+       
+       vtkImageData* image=GetNextImageQueued();
+       if( image!=0 ) 
          {
-               mViewer->ShowImages();
-               mViewer->Show();
+           tree::Node* node=GetNextNodeQueued();
+           
+           bool found=false;
+           std::vector<tree::Node*>::iterator i;
+           for(i=sel.begin();i!=sel.end()&&!found;++i)
+             {
+               if((*i)==node)
+                 {
+                   mViewer->AddImage(image);
+                   found=true;
+                 }
+             }
          }
+       UnqueueNext();
+      }
+    if(!(mViewer->ImagesEmpty()))
+      {
+       GimmickDebugMessage(5,
+                           "Showing images"
+                           <<std::endl);
+       mViewer->ShowImages();
+       mViewer->Show();
+      }
     ClearQueue();