]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxGimmickView.cpp
Changed drawing method for pop ups.
[creaImageIO.git] / src2 / creaImageIOWxGimmickView.cpp
index a21617c744a831daa3727994dcbd2338e9e60a93..2d8785147b5754b69a9c2d69bc715f89acbd8f31 100644 (file)
@@ -15,6 +15,7 @@ using namespace crea;
 
 namespace creaImageIO
 {
+   
   //======================================================================
   // The ids of the different tools
   enum
@@ -66,7 +67,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);
@@ -96,36 +98,57 @@ namespace creaImageIO
     mNotebook = new wxNotebook(mSplitter,
                               -1,wxDefaultPosition, wxDefaultSize, 0);
 
-       //Gimmick
-       mGimmick=gimmick;
-       mViewer=new WxViewer(this, wxID_ANY, wxT("Gimmick! Viewer"),wxDefaultPosition, wxDefaultSize );
-
-       
-       mSelectionMaxDimension= max_dim;
-       mSelectionMinDimension= min_dim;
+    //Gimmick
+    mGimmick=gimmick;
 
+      
+    mSelectionMaxDimension= max_dim;
+    mSelectionMinDimension= min_dim;
+    
     // Create the views
     CreateTreeViews();
 
     // Bottom panel 
     mBottomPanel = new wxPanel(mSplitter,-1);
-       mText = new wxStaticText(mBottomPanel, wxID_ANY, wxT("Status: Welcome to Gimmick!"));
-       
+    
+         wxBoxSizer    *bottom_sizer = new wxBoxSizer(wxVERTICAL); //HORIZONTAL);
+    
+    
+    // Previewer
+    mViewer = new WxViewer(mBottomPanel, wxID_ANY, wxT("Gimmick! Viewer"),wxDefaultPosition, wxDefaultSize );
+       pointers.push_back(new ImagePointerHolder(GetDefaultImage()));
+       mViewer->SetImageVector(pointers);
+       mViewer->StartPlayer();
+
+
+    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
     int hsize = size.GetHeight();
-    int bottom_minsize = 15;
+
+    int top_minsize = 450;
+    int bottom_minsize = 50;
 
     mSplitter->SetMinimumPaneSize( bottom_minsize );
     mSplitter->SplitHorizontally( mNotebook, mBottomPanel, 
-                                  hsize - bottom_minsize);
-  
+                                 top_minsize);
+
     sizer->Add( mSplitter,1,wxGROW  ,0);
 
 
     SetSizer( sizer );     
     SetAutoLayout(true);
     Layout();
-
+    
+    mConstructed = true;
   }
   //======================================================================
 
@@ -186,7 +209,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
@@ -196,13 +219,6 @@ namespace creaImageIO
     mNotebook->AddPage( view, crea::std2wx(name) );
 
   }
-  //======================================================================
-  /// Returns the selected Image so that it complies with the given parameter(<4D)
-  vtkImageData* WxGimmickView::GetSelectedImage(int dim)
-  {
-         return NULL;
-                 //GetTreeViewMap()["Local database"]->GetSelectedImage(dim);
-  }
 
   //======================================================================
   /// Returns the selected Images so that they comply with the given parameter(4D)
@@ -355,21 +371,61 @@ namespace creaImageIO
   //=================================================
 
   //=================================================
-  bool WxGimmickView::ValidateSelection(void * s)
+  void WxGimmickView::OnSelectionChange(std::vector<tree::Node*>& sel, bool isSelection, int selection, bool needProcess)
   {      
+    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)
+       bool valid=true;
+       
+       if(sel.size()==0)
+       {
+               
+               valid= ValidateSelected(NULL,
+                               mSelectionMinDimension,
+                               mSelectionMaxDimension );
+       }
+       else if(needProcess)
        {
-               ReadImageThreaded(sel);
+               ClearStatus();
+               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
        {
-               mViewer->Hide();
+               ClearStatus();
+               std::vector<tree::Node*>::iterator i;
+               for(i=sel.begin();i!=sel.end()&&valid;++i)
+               {
+                       valid= ValidateSelected((*i),
+                               mSelectionMinDimension,
+                               mSelectionMaxDimension );
+               }
        }
-       return valid;
+       
+    mText->SetLabel(crea::std2wx(GetMessage()));
+    /*if(valid)
+      {
+       ReadImageThreaded(sel);
+      }
+    else
+      {
+                 ClearSelection();
+      }*/
+       ReadImageThreaded(sel);
+
     
    }
 
@@ -379,25 +435,35 @@ 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,
-                               "Requesting image from selected "
-                               <<(*selected)->GetAttribute("FullFileName")
-                               <<std::endl);
-               RequestReading(*selected,prio);
-               AddEntryToMap(*selected);
-               prio--;
-       }
-       
+   GimmickDebugMessage(5,
+                      "ReadImageThreaded"
+                      <<std::endl);
+   int maxprio = GetMaximalPriority();
+   int prio = maxprio + 2000;
+
+   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);
+          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 + 1000;
+       prio = maxprio + 20;
        std::vector<tree::Node*> up;
        GetTreeViewMap()["Local database"]->GetNodes(up,true);
        std::vector<tree::Node*>::iterator iterUp;
@@ -407,13 +473,15 @@ namespace creaImageIO
                                "Requesting image from neighbors up "
                                <<(*iterUp)->GetAttribute("FullFileName")
                                <<std::endl);
-               RequestReading(*iterUp,prio);
-               AddEntryToMap(*iterUp);
+               ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+               RequestReading(*iterUp,prio,-1,ph);
+               //              AddEntryToMap(*iterUp);
                prio--;
+               if (prio == maxprio) break;
        }
 
        //Going down
-       prio = maxprio + 999;
+       prio = maxprio + 19;
        std::vector<tree::Node*> down;
        GetTreeViewMap()["Local database"]->GetNodes(down,false);
        std::vector<tree::Node*>::iterator iterDown;
@@ -423,65 +491,53 @@ namespace creaImageIO
                                "Requesting image from neighbors down "
                                <<(*iterDown)->GetAttribute("FullFileName")
                                <<std::endl);
-               RequestReading(*iterDown,prio);
-               AddEntryToMap(*iterDown);
+               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()
-  {
-       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()))
-         {
-               mViewer->ShowImages();
-               mViewer->Show();
-         }
-    ClearQueue();
-       
-
-    MultiThreadImageReaderEventUnlock();
-       GimmickDebugMessage(5,
-                               "Processing Images. Lock Ended"
-                               <<std::endl);
-  }
   //==================================================
+   void  WxGimmickView::OnInternalIdle()
+  {
+   if (!mConstructed) return;
+   static bool first_time = true;
+   if (false)
+   {
+       first_time = false;
+     }
+   //   GimmickMessage(1,"WxGimmickView : Refresh viewer"<<std::endl);
+       //  mViewer->StartPlayer();
+   if(mViewer)
+   {
+          mViewer->RefreshIfNecessary();
+   }
+  }
+
+   //==================================================
 
   //==================================================
-   void  WxGimmickView::OnInternalIdle()
+   void  WxGimmickView::ClearSelection()
   {
-    ProcessImageEvents();
+       pointers.clear();
+       pointers.push_back(new ImagePointerHolder(GetDefaultImage()));
+       mViewer->SetImageVector(pointers);
+       mViewer->RefreshIfNecessary();
+       ClearStatus();
   }
   
   //=================================================
@@ -492,6 +548,7 @@ namespace creaImageIO
        //TODO Select current tree handler       
     wxBusyCursor busy;
     GetTreeViewMap()["Local database"]->RemoveSelected(1);
+       ClearSelection();
   }
   //=================================================