]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.cpp
Adaptive panel splitting
[creaImageIO.git] / src2 / creaImageIOWxTreeView.cpp
index 7f2826049c77f19aa56bf9a3290d51c32ddfa38f..0b223f0e0f9ff858ff9182dfb1aa18d8ed55262c 100644 (file)
@@ -32,15 +32,26 @@ namespace creaImageIO
         i < handler->GetTree().GetNumberOfLevels();
         ++i)
       {
-       GimmickDebugMessage(5,"Creating ListCtrl for level "<<i
+
+       GimmickDebugMessage(5,"Creating view for level "<<i
                            <<std::endl);
        LevelType level;
-       wxListCtrl* ctrl = new wxListCtrl(this,
+
+       // If the first level : parent = this
+       wxWindow* sparent = this;
+       // else parent = last splitter
+       if (i>1) sparent = mLevelList[i-2].wxSplitter;
+
+       level.wxSplitter = new wxSplitterWindow( sparent , -1);
+       //          level.wxSplitter->SetMinimumPaneSize(100);
+       
+       wxListCtrl* ctrl = new wxListCtrl(level.wxSplitter,
                                          i,
                                          wxDefaultPosition, 
                                          wxDefaultSize,
                                          ctrl_style);
        level.wxCtrl = ctrl;
+       level.wxSplitter->Initialize(ctrl);
 
        // Create the columns : one for each attribute of the level
        int col = 0;
@@ -74,9 +85,13 @@ namespace creaImageIO
          }
          
        mLevelList.push_back(level);
-       sizer->Add( ctrl ,1, wxGROW  ,0);
       }
     
+
+    /// Initialize the first level splitter
+      sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW  ,0);
+
     UpdateLevel(1);
 
     SetSizer( sizer );     
@@ -164,17 +179,39 @@ namespace creaImageIO
 
   //=====================================================================
 
   //=====================================================================
-  
   /// 
   void WxTreeView::UpdateLevel( int level )
   {
-         GimmickDebugMessage(1,
+    GimmickDebugMessage(1,
                        GetTreeHandler()->GetTree().GetLabel()
                        <<" view : updating level "<<level
                        <<std::endl);
+    
+    wxBusyCursor busy;
+    RecursiveUpdateLevel(level);
+    int i;
+    for (i=0; i<level-1; i++)
+      {
+       if (!GetSplitter(i)->IsSplit()) 
+         GetSplitter(i)->SplitVertically(  GetCtrl(i), GetSplitter(i+1),
+                                           100 );
+      }
+    if (GetSplitter(i)->IsSplit()) GetSplitter(i)->Unsplit();    
+    
+  }
+  //=====================================================================
+  
+  /// 
+  void WxTreeView::RecursiveUpdateLevel( int level )
+  {
+         GimmickDebugMessage(2,
+                       GetTreeHandler()->GetTree().GetLabel()
+                       <<" view : updating level (recursive)"<<level
+                       <<std::endl);
+
 
-       wxBusyCursor busy;
     std::vector<tree::Node*> sel=GetSelected(level);
 
          int l = level - 1;