]> Creatis software - creaImageIO.git/commitdiff
Adaptive panel splitting
authorguigues <guigues>
Mon, 23 Feb 2009 12:31:45 +0000 (12:31 +0000)
committerguigues <guigues>
Mon, 23 Feb 2009 12:31:45 +0000 (12:31 +0000)
src2/creaImageIOWxTreeView.cpp
src2/creaImageIOWxTreeView.h

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;
index 0f026e32c8a4eae16d193e13a8f54ef51d250ebd..e0e46d77708432450f386539d438456476d59e1e 100644 (file)
@@ -7,6 +7,7 @@
 #include <creaWx.h>
 
 #include <wx/listctrl.h>
+#include <wx/splitter.h>
 //#include <vector>
 
 namespace creaImageIO
@@ -45,6 +46,7 @@ namespace creaImageIO
       {
        // The
        wxListCtrl* wxCtrl;
+       wxSplitterWindow* wxSplitter;
        std::vector<std::string> key;
       };
       /// The vector of levels : one for each level of the tree      
@@ -52,10 +54,17 @@ namespace creaImageIO
       
       /// return the wxListCtrl of one level
       wxListCtrl* GetCtrl(int l) { return mLevelList[l].wxCtrl; }
+      /// return the wxSplitter of one level
+      wxSplitterWindow* GetSplitter(int l) { return mLevelList[l].wxSplitter; }
 
-         std::vector<tree::Node*>GetSelected(int level);
+      std::vector<tree::Node*> GetSelected(int level);
   
+  
+       
+      // Updates the view of a level given the selected items of upper level
+      // Recursive method
+      virtual void RecursiveUpdateLevel( int );
+
 
       DECLARE_EVENT_TABLE()
     };