]> Creatis software - creaImageIO.git/commitdiff
Linux compat
authorguigues <guigues>
Mon, 9 Mar 2009 10:16:44 +0000 (10:16 +0000)
committerguigues <guigues>
Mon, 9 Mar 2009 10:16:44 +0000 (10:16 +0000)
12 files changed:
appli/wxGimmick/main.cxx
src2/creaImageIOGimmickView.cpp
src2/creaImageIOGimmickView.h
src2/creaImageIOTreeView.cpp
src2/creaImageIOTreeView.h
src2/creaImageIOWxGimmickReaderDialog.cpp
src2/creaImageIOWxGimmickView.cpp
src2/creaImageIOWxGimmickView.h
src2/creaImageIOWxTreeView.cpp
src2/creaImageIOWxTreeView.h
src2/creaImageIOWxViewer.cpp
src2/creaImageIOWxViewer.h

index 4485fdeab88c7e567a21d45628f124bef317c011..91dfa1fc3e200cdd8cdc3777d3e84d9eb4da2ec4 100644 (file)
@@ -21,10 +21,10 @@ bool myApp::OnInit( )
 #endif
    wxInitAllImageHandlers();
 
-   /*
+   
    creaImageIO::SetGimmickMessageLevel(9);
    creaImageIO::SetGimmickDebugMessageLevel(9);
-   */
+   
 
    int threads = 1;
 
index 6084c7d7ff3d097ba932bbdbc78803fdbc6860fb..a16c09675fc323a6e41a9807e1339792bfb4c982 100644 (file)
@@ -274,16 +274,24 @@ namespace creaImageIO
                                MultiThreadImageReaderUser::EventType e,
                                vtkImageData* image)
   {
+    GimmickDebugMessage(5,
+                       "MultiThreadImageReader event : "<<e<<std::endl);
     if (filename.size()==0)
       {
+       GimmickDebugMessage(5,
+                           "Pushing unknown image in queue"
+                           <<std::endl);
        mImageEventQueue.push_back(ImageEventType(image));
        return;
       }
-         std::map<std::string,tree::Node*>::iterator i;
+    std::map<std::string,tree::Node*>::iterator i;
     i = mImageFileNameToNode.find(filename);
     if (i!=mImageFileNameToNode.end())
       {
-               mImageEventQueue.push_back(ImageEventType(i->second,image));
+       GimmickDebugMessage(5,
+                           "Pushing image of file '"<<i->second<<"' in queue"
+                           <<std::endl);
+       mImageEventQueue.push_back(ImageEventType(i->second,image));
       }
   }
          
index 9aa507231597bc5a8460ac71274ab939e23e1291..011e47141e6bd533cd51c906baee552f8cebfb53 100644 (file)
@@ -64,6 +64,8 @@ namespace creaImageIO
 
          virtual void GetSelectedFiles(std::vector<std::string>& s)
          { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); }
+         virtual void OnSelectionChange(std::vector<tree::Node*>& s)
+         { GimmickError("INTERNAL ERROR : OnSelectionChange not implemented"); }
 
          ///Validates the dimension compliance of the images with the maximum and minimum given, and between their sizes
          bool ValidateSelected (std::vector<tree::Node*>& sel, int min_dim, int max_dim);
index 7a3f1287f8ab0796afd96c83b482626cc0d955c8..a34f0c6fc6008fb9f5267597d139465e72dbdbf0 100644 (file)
@@ -4,8 +4,9 @@
 namespace creaImageIO
 {
   // CTor
-  TreeView::TreeView(TreeHandler* handler)
-    : mTreeHandler(handler)
+  TreeView::TreeView(TreeHandler* handler,  GimmickView* gimmick )
+    : mTreeHandler(handler),
+      mGimmickView(gimmick)
   {
     GimmickDebugMessage(1,"TreeView::TreeView"
                        <<std::endl);
index a8071405a05a35c87b57ce2d50186b245075269d..5bfb116c9fba0458e536b7bf11dd9a46d392a41f 100644 (file)
@@ -7,19 +7,22 @@
 
 namespace creaImageIO
 {
+
+  class GimmickView;
+
   /**
    * \ingroup View
    */
        
   //=====================================================================
-  
+
   //=====================================================================
   /// Abstract class that handles the view of a Tree through its TreeHandler
   class TreeView
     {
     public:
       /// Ctor
-      TreeView(TreeHandler*);
+      TreeView(TreeHandler*,GimmickView*);
       /// Virtual destructor
       virtual ~TreeView();
 
@@ -49,11 +52,15 @@ namespace creaImageIO
 
     protected:
       TreeHandler* GetTreeHandler() { return mTreeHandler; }
+      GimmickView* GetGimmickView() { return mGimmickView; }
         
     private:
       /// The TreeHandler with which it corresponds
       TreeHandler* mTreeHandler;
-         };
+      /// The GimmickView which holds the TreeView
+      GimmickView* mGimmickView;  
+
+  };
     // EO class TreeView
     //=====================================================================
   
index d223e2c77b553dc7dbc4ec498ebe701bd70cb8cf..69572a33c9a363d0e476dae50e06eda944fc0d08 100644 (file)
@@ -87,8 +87,9 @@ namespace creaImageIO
   ///Callback method on a selection
   void WxGimmickReaderDialog::OnValid(wxCommandEvent& event)
   {
-         bool t=mView->ValidateSelection(event.GetClientData());
-    mOkButton->Enable(t);
+    //   bool t=mView->ValidateSelection(event.GetClientData());
+    // TO DO 
+    //   mOkButton->Enable(t);
   }
 
 
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();
        
 
index c462e8443b0d2616291c38fd4014f60d03c76924..fa2b3abcca4790b4d1d5664e6f305bb8b62350c8 100644 (file)
@@ -36,21 +36,25 @@ namespace creaImageIO
                    int number_of_threads = 0);
       /// Virtual destructor
       virtual ~WxGimmickView();
-
-         /// Returns the selected Images so that they comply with the given parameter(<4D)
-         ///(overloaded from GimmickView)
-         vtkImageData* GetSelectedImage(int dim);
-         /// Returns the selected files
-         ///(overloaded from GimmickView)
-         void GetSelectedFiles(std::vector<std::string>& s);
+      
+      /// Returns the selected Images so that they comply with the given parameter(<4D)
+      ///(overloaded from GimmickView)
+      vtkImageData* GetSelectedImage(int dim);
+      /// Returns the selected files
+      ///(overloaded from GimmickView)
+      void GetSelectedFiles(std::vector<std::string>& s);
       /// Returns the selected Images so that they comply with the given parameter(4D)
       //(overloaded from GimmickView)
-         void GetSelectedImages(std::vector<vtkImageData*>& s, int dim);
-         /// Validates the selected images
-         bool ValidateSelection(void *);
-         ///Sends a request to read the currently selected node and the ones that surround it.
-         void ReadImageThreaded(std::vector<tree::Node*> sel);
+      void GetSelectedImages(std::vector<vtkImageData*>& s, int dim);
+      /// Callback called when a selection from a TreeView has changed 
+      //(overloaded from GimmickView)
+      void OnSelectionChange(std::vector<tree::Node*>& s);
+
+
 
+      ///Sends a request to read the currently selected node and the ones that surround it.
+      void ReadImageThreaded(std::vector<tree::Node*> sel);
+      
 
     protected:
       /// Creates the tool bar
@@ -62,6 +66,10 @@ namespace creaImageIO
 
 
     private:
+      /// Is set to true at the end of constructor 
+      /// (in order to lock callbacks from threaded objects or event 
+      /// before everything is ok)
+      bool mConstructed;
       /// The ToolBar and the tools
       wxToolBar*         mToolBar;
       wxToolBarToolBase* mToolAddFile;
index 72b58fc97ca980af62eb4e18150d3d63549e98dd..e80697ab9491ac84d47ab1cf6ea36e327b5ee785 100644 (file)
@@ -1,4 +1,5 @@
 #include <creaImageIOWxTreeView.h>
+#include <creaImageIOGimmickView.h>
 #include <creaImageIOSystem.h>
 #include <wx/splitter.h>
 ///Comparing function for ordering algorithm. Takes parameters as strings.
@@ -62,10 +63,11 @@ namespace creaImageIO
   //=====================================================================
   // CTor
   WxTreeView::WxTreeView(TreeHandler* handler,
+                        GimmickView* gimmick,
                         wxWindow* parent,
                         const wxWindowID id)
     : wxPanel(parent,id),
-      TreeView(handler)
+      TreeView(handler,gimmick)
   {
     GimmickDebugMessage(1,"WxTreeView::WxTreeView"
                        <<std::endl);
@@ -400,7 +402,7 @@ namespace creaImageIO
                        " Level "<<level+1
                        <<std::endl);
     if (level<mLevelList.size()-1) UpdateLevel( level + 2 ); 
-       if (level==mLevelList.size()-1) ValidateSelectedImages ();
+    if (level==mLevelList.size()-1) ValidateSelectedImages ();
 
   }
   //================================================================
@@ -502,17 +504,29 @@ namespace creaImageIO
    }
   //================================================================
 
+
+  //================================================================
   void WxTreeView::ValidateSelectedImages()
   {
-               //Send an event telling wether the selection is valid or not
-               wxCommandEvent event( 0, GetId() );
-               event.SetEventObject( this );
-               std::vector<tree::Node*> sel=GetSelected((mLevelList.size()+1));
-               event.SetClientData(&sel);
-               GetEventHandler()->ProcessEvent( event );
+    GimmickDebugMessage(7,
+                       "WxTreeView::ValidateSelectedImages" 
+                       <<std::endl);
+    std::vector<tree::Node*> sel(GetSelected(mLevelList.size()+1));
+    GetGimmickView()->OnSelectionChange(sel);
+    /*
+    //Send an event telling wether the selection is valid or not
+    wxCommandEvent event( 0, GetId() );
+    event.SetEventObject( this );
+    std::vector<tree::Node*> sel=GetSelected((mLevelList.size()+1));
+    event.SetClientData(&sel);
+    GetEventHandler()->ProcessEvent( event );
+    */
+    // 
   }
+  //================================================================
+
 
-   //================================================================
+  //================================================================
   void WxTreeView::GetNodes(std::vector<tree::Node*>& nodes, bool direction)
   {
        long item = mLastSelected;
index 7401e90bd8a8c94aacb280c1301009850dcce59c..e71540adf845862be2a3f84b36448548d6c10bc8 100644 (file)
@@ -12,6 +12,7 @@
 
 namespace creaImageIO
 {
+
   /**
    * \ingroup View
    */
@@ -23,7 +24,8 @@ namespace creaImageIO
     {
     public:
       /// Ctor
-      WxTreeView(TreeHandler*, wxWindow* parent, const wxWindowID id);
+      WxTreeView(TreeHandler*, GimmickView*, 
+                wxWindow* parent, const wxWindowID id);
       /// Virtual destructor
       virtual ~WxTreeView();
 
@@ -40,7 +42,7 @@ namespace creaImageIO
          /// Callback for column click
       void OnColClick(wxListEvent& event);
 
-       private:
+    private:
       /// The struct holding the data for one level
       /// Holds the wx control and other data
       /// such as the vector of attribute keys corresponding to the columns
index f8ae7b917f26ea326f15948c1afc39dedcb7dad7..63b2c887b9c9d7cec35464d076ffc45b8aace0a7 100644 (file)
@@ -43,9 +43,15 @@ namespace creaImageIO
     int mx1,mx2,my1,my2,mz1,mz2;
     double mspx,mspy,mspz;
   };
+  
+  //=====================================================================
 
 
-       // CTor
+
+  
+
+  //=====================================================================
+  // CTor
   WxViewer::WxViewer(wxWindow *parent, 
                                               wxWindowID id,
                                               wxString title,
@@ -63,15 +69,15 @@ namespace creaImageIO
     wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
 
        
-        // previewer
+    // previewer
        
-       mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
+    mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
     mInteractor->UseCaptureMouseOn();  
  
     mViewer    = vtkImageViewer2::New();
     mViewer->SetupInteractor ( mInteractor );
-
-       mMovie=new ThreadedMovie(images, mViewer, mInteractor, this);
+    
+    mMovie=new ThreadedMovie(images, mViewer, mInteractor, this);
        
     topsizer-> Add( mInteractor ,1,wxGROW  ,0);
     SetSizer( topsizer );     
@@ -88,23 +94,25 @@ namespace creaImageIO
 
   void WxViewer::ShowImage(vtkImageData* im)
   {
-       mViewer->SetInput(im);
-       mViewer->SetSlice( 0 );
-
-       int x1,x2,y1,y2,z1,z2;
-       double spx,spy,spz;
+    GimmickDebugMessage(5,"WxViewer::ShowImage"
+                       <<std::endl);
+    mViewer->SetInput(im);
+    mViewer->SetSlice( 0 );
+    
+    int x1,x2,y1,y2,z1,z2;
+    double spx,spy,spz;
     im->Update();
     
     im->GetSpacing(spx,spy,spz);
     im->GetExtent (x1,x2,y1,y2,z1,z2);
     /*
     std::cout << "-----------------------------"<<std::endl;
-      std::cout << x1 << "-"<<x2<<std::endl; 
-      std::cout << y1 << "-"<<y2<<std::endl; 
-      std::cout << z1 << "-"<<z2<<std::endl; 
-      std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl; 
+    std::cout << x1 << "-"<<x2<<std::endl; 
+    std::cout << y1 << "-"<<y2<<std::endl; 
+    std::cout << z1 << "-"<<z2<<std::endl; 
+    std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl; 
     */
-   
+    
     if ((x1!=mx1) ||
        (x2!=mx2) ||
        (y1!=my1) ||
@@ -161,8 +169,8 @@ namespace creaImageIO
          
       }
     
-    
-       
+    mInteractor->Render();
+    mViewer->Render(); 
   } 
 
   //================================================================
@@ -239,24 +247,28 @@ namespace creaImageIO
   void*  ThreadedMovie::Entry()
   {
          
+    GimmickMessage(1,"ThreadedMovie::Entry()"<<std::endl);
                        
-       while(true)
-       {               
-                       clock_t endwait;
-                               for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i)
-                               {
-                                       if(i!=mImagesToPlay.end())
-                                       {
-                                               ShowImage(*i);
-                                               mParent->Refresh();
-                                               endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
-                                               while (clock() < endwait) {}
-                                       }
-                                       
-                               }
-                                       
-       }
-       return 0;
+    while(true)
+      {                
+       clock_t endwait;
+       for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i)
+         {
+           if(i!=mImagesToPlay.end())
+             {   
+
+               GimmickMessage(1,"ThreadedMovie next image"<<std::endl);
+               
+               ShowImage(*i);
+               mParent->Refresh();
+               endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
+               while (clock() < endwait) {}
+             }
+           
+         }
+       
+      }
+    return 0;
   }
 
   //=====================================================================
index 9323e3de3e32d329e58065acdad0c0425548c8d6..21fbf50a46981357379dbdd6d710d3c6b827eb05 100644 (file)
@@ -19,6 +19,8 @@
 namespace creaImageIO
 {
 
+  class ThreadedMovie;
+
   class WxViewer : public wxFrame
   {
 
@@ -64,4 +66,4 @@ namespace creaImageIO
 
 #endif // USE_WIDGETS
 // EOF
-#endif  
\ No newline at end of file
+#endif