]> Creatis software - creaImageIO.git/commitdiff
BUG Threads MacOs
authorEduardo Davila <Eduardo.Davila@creatis.insa-lyon.fr>
Fri, 20 Mar 2009 14:43:03 +0000 (14:43 +0000)
committerEduardo Davila <Eduardo.Davila@creatis.insa-lyon.fr>
Fri, 20 Mar 2009 14:43:03 +0000 (14:43 +0000)
appli/TestWxGimmickDialog/CMakeLists.txt
appli/TestWxGimmickReaderDialog/CMakeLists.txt
appli/wxGimmick/CMakeLists.txt
src/treelistctrl.cpp
src2/creaImageIOGimmickView.cpp
src2/creaImageIOMultiThreadImageReader.cpp
src2/creaImageIOWxGimmickView.cpp
src2/creaImageIOWxViewer.cpp
src2/creaImageIOWxViewer.h

index 80cb7f4b9812c2d1a18007d9d7ab357f4a315834..a42fd05210cf44615745921736aa5ba4d18a4ecc 100644 (file)
@@ -3,7 +3,7 @@ IF(WIN32)
   ADD_EXECUTABLE(TestWxGimmickDialog WIN32 main)  
   SET_TARGET_PROPERTIES(TestWxGimmickDialog PROPERTIES LINK_FLAGS /subsystem:console )
 ELSE(WIN32)
-  ADD_EXECUTABLE(TestWxGimmickDialog main)
+  ADD_EXECUTABLE(TestWxGimmickDialog MACOSX_BUNDLE  main)
 ENDIF(WIN32)
 
 TARGET_LINK_LIBRARIES( TestWxGimmickDialog creaImageIO)
index aad22cb52427e0909aa51972a4a92cc770063192..8b9e7a5fae02ccdb30c5c695729594581d998c77 100644 (file)
@@ -3,7 +3,7 @@ IF(WIN32)
   ADD_EXECUTABLE(TestWxGimmickReaderDialog WIN32 main)  
   SET_TARGET_PROPERTIES(TestWxGimmickReaderDialog PROPERTIES LINK_FLAGS /subsystem:console )
 ELSE(WIN32)
-  ADD_EXECUTABLE(TestWxGimmickReaderDialog main)
+  ADD_EXECUTABLE(TestWxGimmickReaderDialog MACOSX_BUNDLE main)
 ENDIF(WIN32)
 
 TARGET_LINK_LIBRARIES( TestWxGimmickReaderDialog creaImageIO2)
index f94aeaf9736e59a422aff2d2ff42902fdc5f9de8..81221ff38665462858ca020d9f8bd428e1a29e63 100644 (file)
@@ -3,7 +3,7 @@ IF(WIN32)
   ADD_EXECUTABLE(${NAME} WIN32 main)  
   SET_TARGET_PROPERTIES(${NAME} PROPERTIES LINK_FLAGS /subsystem:console )
 ELSE(WIN32)
-  ADD_EXECUTABLE(${NAME} main)
+  ADD_EXECUTABLE(${NAME} MACOSX_BUNDLE main)
 ENDIF(WIN32)
 
 TARGET_LINK_LIBRARIES( ${NAME} creaImageIO2)
index 2df0ab96a5a6f63ed9460ab19a26a5b5b67b77b9..c3762047718ad030993979e6419c6741c305a9e5 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Robert Roebling
 // Maintainer:  Otto Wyss
 // Created:     01/02/97
-// RCS-ID:      $Id: treelistctrl.cpp,v 1.3 2008/10/01 14:23:59 guigues Exp $
+// RCS-ID:      $Id: treelistctrl.cpp,v 1.4 2009/03/20 14:43:12 davila Exp $
 // Copyright:   (c) 2004 Robert Roebling, Julian Smart, Alberto Griggio,
 //              Vadim Zeitlin, Otto Wyss
 // Licence:     wxWindows
@@ -1133,7 +1133,11 @@ void wxTreeListHeaderWindow::DoDrawRect( wxDC *dc, int x, int y, int w, int h )
     dc->DrawRectangle( x, y+h, w+1, 1 );          // bottom (outer)
 
 #if defined( __WXMAC__  )
-    wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID );
+
+ // EED
+ //   wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID );
+   pen.SetColour( wxColour( 0x88 , 0x88 , 0x88 )  );
 #endif
     dc->SetPen( pen );
     dc->DrawLine( x+w-m_corner, y, x+w-1, y+h );  // right (inner)
index a1c29cea8c6fc223e86d69bb716c5b9f70a2cc1a..3ce0f5c398da4a2af06f89b6a0e59e90083b6341 100644 (file)
@@ -15,8 +15,9 @@ namespace creaImageIO
   {
     GimmickDebugMessage(1,"GimmickView::GimmickView"
                        <<std::endl);
-       // Start the threads ...
-    mReader.Start();
+       // Anciently started the threads ...
+    // Threads now automatically start at first image request
+    //mReader.Start();
 
   }
   //======================================================================
@@ -82,7 +83,13 @@ namespace creaImageIO
   bool GimmickView::ValidateSelected (std::vector<tree::Node*>& sel, int min_dim, int max_dim)
   {
        GimmickMessage(2,"Validating selected"<<std::endl);
+         
        bool valid=true;
+         
+         // EED validate all
+         mValidationSignal(valid);
+         return valid;
+         
        int level;
        std::string mMessage;
        if(sel.size()>0)
@@ -276,6 +283,7 @@ namespace creaImageIO
   void GimmickView::RequestReading(tree::Node* n, 
                                   int prio, int selection_index)
   {
+         mReader.Start();
     ImageEventType t(n,0,selection_index);
     mImageEventMap[n->GetAttribute("FullFileName")] = t;    
     mReader.Request(this,n->GetAttribute("FullFileName"),prio);
index 717b09cb89699f7adf87afb3f5be9f79e1719d72..053f77e32e0d1a6f30815f0f47eee7d8c0951590 100644 (file)
@@ -60,10 +60,10 @@ namespace creaImageIO
     mQueue.set(mIndexer);
     // 
     // no thread : alloc self reader
-    if (number_of_threads==0)
-      {
+//    if (number_of_threads==0)
+//      {
        mReader = new ImageReader();
-      }
+//      }
   }
   //=====================================================================
 
@@ -74,6 +74,8 @@ namespace creaImageIO
 
     //    std::cout << "#### MultiThreadImageReader::Start()"
     //               <<std::endl;
+         if (mNumberOfThreadedReadersRunning > 0) return true;
+         
     ThreadedImageReaderListType::iterator i;
     for (i =mThreadedImageReaderList.begin();
         i!=mThreadedImageReaderList.end();
@@ -187,9 +189,10 @@ namespace creaImageIO
                                        const std::string& filename, 
                                        int priority )
   {
-    wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex);
+       wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex);
     
-    if (mThreadedImageReaderList.size()==0) 
+         if (mNumberOfThreadedReadersRunning==0)
+//    if (mThreadedImageReaderList.size()==0) 
       {
        // no detached reader : use self reader
        ImageToLoad itl(user,filename);
@@ -281,7 +284,7 @@ namespace creaImageIO
   //=====================================================================
   vtkImageData* MultiThreadImageReader::GetImage(const std::string& filename)
   {
-    
+        // Start();
     //    std::cout << "** MultiThreadImageReader::GetImage('"<<filename<<"')"
     //       <<std::endl;
     
@@ -289,7 +292,8 @@ namespace creaImageIO
       {
        wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex);
                
-       if (mThreadedImageReaderList.size()==0)
+                 if (mNumberOfThreadedReadersRunning==0)
+//     if (mThreadedImageReaderList.size()==0)
          {
            ImageToLoad itl(this,filename);
            ImageMapType::iterator i = mImages.find(&itl);
index cde956b1d7d827951be87f4871062eda40a460fe..53aa4a8c8969af1668c305ae175c9819628ba5b8 100644 (file)
@@ -110,19 +110,23 @@ namespace creaImageIO
     // Bottom panel 
     mBottomPanel = new wxPanel(mSplitter,-1);
     
-    wxBoxSizer *bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+         wxBoxSizer    *bottom_sizer = new wxBoxSizer(wxVERTICAL); //HORIZONTAL);
     
-    mText = new wxStaticText(mBottomPanel, wxID_ANY, wxT("Status: Welcome to Gimmick!"));
-    bottom_sizer->Add(mText,1,wxGROW,0);
     
     // Previewer
     mViewer = new WxViewer(mBottomPanel, wxID_ANY, wxT("Gimmick! Viewer"),wxDefaultPosition, wxDefaultSize );
        mViewer->SetMovieSize(1);
        mViewer->SetImage(0,GetDefaultImage());
+         mViewer->ShowNextImage();
 
-    bottom_sizer->Add(mViewer,1,wxGROW,0);
+    bottom_sizer->Add(mViewer,1,wxGROW,1);
     //    mViewer->Show();
 
+         mText = new wxStaticText(mBottomPanel, wxID_ANY, wxT("Welcome to Gimmick!"));
+         bottom_sizer->Add(mText,0,wxGROW,0);
+
+         
+         
     mBottomPanel->SetSizer(bottom_sizer);
 
     // Splitting
@@ -374,7 +378,7 @@ namespace creaImageIO
     bool valid = ValidateSelected(sel,
                                  mSelectionMinDimension,
                                  mSelectionMaxDimension );
-    mText->SetLabel(_T("Status: ")+crea::std2wx(GetMessage()));
+    mText->SetLabel(crea::std2wx(GetMessage()));
     if(valid)
       {
        ReadImageThreaded(sel);
@@ -475,6 +479,8 @@ namespace creaImageIO
 
     while (!IsQueueEmpty())
       {
+                 mViewer->StartPlayer();
+
        GimmickDebugMessage(5,
                            "Queue not empty"
                            <<std::endl);
@@ -493,7 +499,6 @@ namespace creaImageIO
       }
     
     ClearQueue();
-       
 
     MultiThreadImageReaderEventUnlock();
     /*
@@ -518,7 +523,7 @@ namespace creaImageIO
        first_time = false;
      }
    //   GimmickMessage(1,"WxGimmickView : Refresh viewer"<<std::endl);
-
+       //  mViewer->StartPlayer();
    if (mViewer->RefreshIfNecessary())
      {
        // mViewer->Refresh();
index 2b473a22703f87773c3abe9c668fbe6c538d010a..8639888215e9e2cacd2658e939589078d534ab25 100644 (file)
@@ -81,11 +81,8 @@ namespace creaImageIO
     
     mCurrent = 0;
 
-    mPlayer = new WxViewerPlayer(this); //images, mViewer, mInteractor, this);
-       
-       mPlayer->Create();
-       mPlayer->Run();
-       
+         mPlayer = 0;
+         
     topsizer-> Add( mInteractor ,1,wxGROW  ,0);
     SetSizer( topsizer );     
     Layout(); 
@@ -164,13 +161,13 @@ namespace creaImageIO
 
   void WxViewer::ShowNextImage()
   {
-    wxMutexLocker lock(mMutex);
+       wxMutexLocker lock(mMutex);
        
-    /*
-    GimmickMessage(1,"WxViewer::ShowNextImage() "
+    
+    GimmickMessage(10,"WxViewer::ShowNextImage() "
                   <<mCurrent+1<<"/"
                   <<images.size()<<std::endl);
-    */
+    
     
     if (mCurrent<images.size()) 
       {
@@ -189,6 +186,7 @@ namespace creaImageIO
   //=====================================================================
   void WxViewer::ShowImage(vtkImageData* im)
   {
     GimmickDebugMessage(5,"WxViewer::ShowImage"
                        <<std::endl);
     if (im==0) return;
@@ -203,13 +201,6 @@ namespace creaImageIO
     
     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; 
-    */
     
     if ((x1!=mx1) ||
        (x2!=mx2) ||
@@ -242,36 +233,14 @@ namespace creaImageIO
 
         mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
 
-        /*
-       std::cout <<"bounds : "<<bounds[0]<<","
-<<bounds[1]<<","
-<<bounds[2]<<","
-<<bounds[3]<<","
-<<bounds[4]<<","
-                 <<bounds[5]<<std::endl;
-        */
          
         mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
-       /*
-       vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
-       
-       camera->SetViewUp ( spx*0, -spy*1, spz*0);
-       camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000); 
-       camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0); 
-       
-       camera->ComputeViewPlaneNormal();
-       camera->SetParallelScale(  spx*(x2-x1)/2.0 );
-       
-       camera->Roll ( 180 );
-       */
+
          
       }
     
-    //  mInteractor->Refresh();
-    //mInteractor->Render();
-    //    mViewer->Render();
-  
    //::wxWakeUpIdle();
+
   } 
   //================================================================
   
@@ -302,9 +271,24 @@ namespace creaImageIO
   //==================================================
   void WxViewer::StopPlayer()
   {
-    mPlayer->Delete();  
+         wxMutexLocker lock(mMutex);
+         if (mPlayer==0) return;
+         mPlayer->Delete();  
+         mPlayer=0;
   }
-  
+
+  //==================================================
+  void WxViewer::StartPlayer()
+       {
+       //      wxMutexLocker lock(mMutex);
+               if (mPlayer != 0) return;
+               mPlayer = new WxViewerPlayer(this);
+               mPlayer->Create();
+               mPlayer->Run();  
+       }
+       
+       
+       
  
 
   //  BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
@@ -324,40 +308,16 @@ namespace creaImageIO
   {
          
     GimmickMessage(1,"WxViewerPlayer::Entry()"<<std::endl);
-                       
-    while(true)
-      { 
-               if(!TestDestroy())
+       
+       while(!TestDestroy())
            { 
                        
                        mWxViewer->ShowNextImage();
-                       //                      mWxViewer->Refresh();
                        ::wxWakeUpIdle();
                        clock_t endwait;
                        endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
                        while (clock() < endwait) {}
                        
-               }
-               else
-               {
-                       break;
-               }
-       /*
-       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 aa0079c320e7ebe202f0cf22a61928c5c99ac982..dff169d0d29da5696133321c4b91f27f7651fbd5 100644 (file)
@@ -50,6 +50,8 @@ namespace creaImageIO
     
     void OnInternalIdle();
 
+       void StartPlayer();
+
     void StopPlayer();
 
     bool RefreshIfNecessary();