]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.cpp
memory leak tracking
[creaImageIO.git] / src2 / creaImageIOWxTreeView.cpp
index 2f515314ccc6b89cf4b7828e6087a0c43a580a8a..c196659863950190bbb9ac0d2a1123333ca3d8be 100644 (file)
@@ -5,26 +5,11 @@
 #include <wx/gdicmn.h>
 #include <boost/date_time/gregorian/gregorian.hpp>
 
-const std::string empty_string("");
 
 //=====================================================================
 namespace creaImageIO
 {
-  //=====================================================================
-  /// Data stored by the list items
-  struct ItemData
-  {
-    ItemData() : node(0), id(-1), attr(&empty_string) {}
-    // The corresponding Node
-    tree::Node* node;
-    // The id ?
-    int id;
-    // The pointer on the current attribute string to sort on
-    const std::string* attr;
-    // Was the item previously selected ?
-    // Useful for reselecting the item after sort
-    bool selected;
-  };
+
   //=====================================================================
 }
 //=====================================================================
@@ -263,6 +248,9 @@ namespace creaImageIO
   {
     GimmickDebugMessage(1,"WxTreeView::~WxTreeView"
                        <<std::endl);
+       delete menu;
+       delete menuItem;
+
   }
   //=====================================================================
   
@@ -275,7 +263,10 @@ namespace creaImageIO
     int l = level - 1;
     // the selection of upper level
        std::vector<tree::Node*>& sel(mLevelList[l].Selected);
-    sel.clear();
+       if (sel.size() > 0)
+       {
+               sel.clear();
+       }
          if (level == 1) 
       {
        sel.push_back(GetTreeHandler()->GetTree().GetTree());
@@ -492,13 +483,13 @@ namespace creaImageIO
                         wxLIST_MASK_FORMAT
                         );
            
-           ItemData* data = new ItemData;
+               ItemData* data = new ItemData();
            data->node = *j;
            data->id = _id;
-           
+               
            item.SetId(_id);
            item.SetData(data);
-           
+
            _id++;
            GetCtrl(l)->InsertItem(item);
            
@@ -545,6 +536,7 @@ namespace creaImageIO
                item.SetText( crea::std2wx(val));
                item.SetColumn(k);
                GetCtrl(l)->SetItem(item);
+               item.Clear();
              } 
            
          }
@@ -1084,114 +1076,6 @@ namespace creaImageIO
   }
 
    //================================================================
-  void WxTreeView::SetColor(int l, int item)
-  {
-         int colorId=12;
-         GetCtrl(l)->SetItemTextColour(item, wxColourDatabase().Find
-                  (crea::std2wx(mColorPalette[colorId])));
-         GetCtrl(l)->SetItemState(item,wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED);  /*
-         int colorId=0;
-         //Setting the color according to the parent
-               if(l==0)
-               {
-               item.SetBackgroundColour
-                 (wxColourDatabase().Find
-                  (crea::std2wx(mColorPalette[colorId]))); 
-               mColorMap.insert
-                 (NodeColorPair
-                  (*j,wxColourDatabase().Find
-                   (crea::std2wx(mColorPalette[colorId]))));
-               if(colorId<64)
-                 {
-                   colorId++;
-                 }
-               else
-                       {
-                         colorId=0;
-                       }
-               }
-               else if(l!=mLevelList.size()-1)
-                 {
-                   item.SetBackgroundColour(mColorMap[*i]); 
-                       mColorMap.insert(NodeColorPair(*j,mColorMap[*i]));
-               }
-               else
-               {
-                       item.SetBackgroundColour(mColorMap[*i]); 
-               }*/
-  }
-  //================================================================
-  void WxTreeView::CreateColorPalette()
-  {
-  GimmickDebugMessage(6,"WxTreeView::CreateColorPalette");
-  mColorPalette.push_back("WHITE");
-  mColorPalette.push_back("LIGHT GREY");
-  mColorPalette.push_back("AQUAMARINE");
-  mColorPalette.push_back("MEDIUM FOREST GREEN");
-  mColorPalette.push_back("INDIAN RED");
-  mColorPalette.push_back("KHAKI");
-  mColorPalette.push_back("ORANGE");
-  mColorPalette.push_back("LIGHT BLUE");
-  mColorPalette.push_back("LIGHT STEEL BLUE");
-  mColorPalette.push_back("PINK");
-  mColorPalette.push_back("PLUM");
-  mColorPalette.push_back("PURPLE");
-  mColorPalette.push_back("RED");
-  mColorPalette.push_back("SEA GREEN");
-  mColorPalette.push_back("SIENNA");
-  mColorPalette.push_back("SKY BLUE");
-  mColorPalette.push_back("SLATE BLUE");
-  mColorPalette.push_back("SPRING GREEN");
-  mColorPalette.push_back("TAN");
-  mColorPalette.push_back("THISTLE");
-  mColorPalette.push_back("TURQUOISE");
-  mColorPalette.push_back("VIOLET");
-  mColorPalette.push_back("VIOLET RED");
-  mColorPalette.push_back("WHEAT");
-  mColorPalette.push_back("YELLOW");
-  mColorPalette.push_back("YELLOW GREEN");
-  mColorPalette.push_back("BLUE");
-  mColorPalette.push_back("BLUE VIOLET");
-  mColorPalette.push_back("BROWN");
-  mColorPalette.push_back("CADET BLUE");
-  mColorPalette.push_back("CORAL");
-  mColorPalette.push_back("CORNFLOWER BLUE");
-  mColorPalette.push_back("CYAN");
-  mColorPalette.push_back("DARK GREY");
-  mColorPalette.push_back("DARK GREEN");
-  mColorPalette.push_back("DARK OLIVE GREEN");
-  mColorPalette.push_back("DARK ORCHID");
-  mColorPalette.push_back("DARK SLATE BLUE");
-  mColorPalette.push_back("DARK SLATE GREY");
-  mColorPalette.push_back("DARK TURQUOISE");
-  mColorPalette.push_back("FIREBRICK");
-  mColorPalette.push_back("FOREST GREEN");
-  mColorPalette.push_back("GOLD");
-  mColorPalette.push_back("GOLDENROD");
-  mColorPalette.push_back("GREY");
-  mColorPalette.push_back("GREEN");
-  mColorPalette.push_back("GREEN YELLOW");
-  mColorPalette.push_back("LIME GREEN");
-  mColorPalette.push_back("MAGENTA");
-  mColorPalette.push_back("MAROON");
-  mColorPalette.push_back("MEDIUM AQUAMARINE");
-  mColorPalette.push_back("MEDIUM BLUE");
-  mColorPalette.push_back("MEDIUM GOLDENROD");
-  mColorPalette.push_back("MEDIUM ORCHID");
-  mColorPalette.push_back("MEDIUM SEA GREEN");
-  mColorPalette.push_back("MEDIUM SLATE BLUE");
-  mColorPalette.push_back("MEDIUM SPRING GREEN");
-  mColorPalette.push_back("MEDIUM TURQUOISE");
-  mColorPalette.push_back("MEDIUM VIOLET RED");
-  mColorPalette.push_back("MIDNIGHT BLUE");
-  mColorPalette.push_back("NAVY");
-  mColorPalette.push_back("ORANGE RED");
-  mColorPalette.push_back("ORCHID, PALE GREEN");
-  mColorPalette.push_back("STEEL BLUE");
-  mColorPalette.push_back("BLACK");
-
-
-  }
 
    //================================================================
   void WxTreeView::GetAttributes(std::vector<std::string>& areShown, std::vector<std::string>& notShown, int level)
@@ -1203,13 +1087,85 @@ namespace creaImageIO
             a != GetTreeHandler()->GetTree().GetAttributeDescriptorList(level).end();
             ++a)
        {
-               if(a->GetFlags()==creaImageIO::tree::AttributeDescriptor::EDITABLE)
+               if(a->GetFlags()==creaImageIO::tree::AttributeDescriptor::EDITABLE && IsAttributeVisible(a->GetName(),level))
            {
                        areShown.push_back(a->GetName());
                }
        }
        notShown=mLevelList[level-1].notShownAtts;
   }
+
+  //================================================================
+  void WxTreeView::SetNonVisibleAttributes(const std::vector<std::string>& notShown, int nlevel)
+  {
+       mLevelList[nlevel].notShownAtts=notShown;
+  }
+
+  //================================================================
+   void WxTreeView::CreateCtrl(std::vector<std::string>& notShown, int nlevel)
+  {
+       int ctrl_style = wxLC_REPORT | wxLC_VRULES;
+    int col_style = wxLIST_FORMAT_LEFT;
+       LevelType level;
+       mLevelList[nlevel].SelectedUpToDate = true;
+       mLevelList[nlevel].SortColumn = 0;
+       mLevelList[nlevel].key.clear();
+       
+       mLevelList[nlevel].wxCtrl = new wxListCtrl(mLevelList[nlevel].wxSplitter,
+                                         nlevel,
+                                         wxDefaultPosition, 
+                                         wxDefaultSize,
+                                         ctrl_style);
+       wxWindow* oldWin=mLevelList[nlevel].wxSplitter->GetWindow1();
+       mLevelList[nlevel].wxSplitter->ReplaceWindow(oldWin,mLevelList[nlevel].wxCtrl);
+       mLevelList[nlevel].wxSplitter->Initialize(mLevelList[nlevel].wxCtrl);
+   
+       // Create the columns : one for each attribute of the level
+       int col = 0;
+       std::string title;
+
+       tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
+       for (a  = GetTreeHandler()->GetTree().GetAttributeDescriptorList(nlevel+1).begin();
+            a != GetTreeHandler()->GetTree().GetAttributeDescriptorList(nlevel+1).end();
+            ++a)
+
+       {   
+           if(a->GetFlags()!=creaImageIO::tree::AttributeDescriptor::PRIVATE && IsAttributeVisible(a->GetName(),nlevel+1))
+             {
+                 title=a->GetName();
+                 std::string temp = a->GetKey();
+                 if (temp.compare("ID") != 0)
+                 {
+                       mLevelList[nlevel].wxCtrl->InsertColumn(col, 
+                                       crea::std2wx(title),
+                                       col_style);
+                       col++;
+                 }
+               mLevelList[nlevel].key.push_back(a->GetKey());
+             }
+               
+         }
+       oldWin->Destroy();
+       UpdateLevel(1);
+       }
+
+   //================================================================
+  bool WxTreeView::IsAttributeVisible(const std::string& val, int level)
+  {
+         std::vector<std::string> ns=mLevelList[level-1].notShownAtts;
+         std::vector<std::string>::iterator it;
+         bool found=false;
+         for(it=ns.begin();it!=ns.end()&&!found;++it)
+         {
+                 if(val.compare(*it)==0)
+                 {
+                         found=true;
+                 }
+         }
+
+         return !found;
+  }
+
   //================================================================
   //================================================================
   BEGIN_EVENT_TABLE(WxTreeView, wxPanel)