]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.cpp
memory leak tracking
[creaImageIO.git] / src2 / creaImageIOWxTreeView.cpp
index 58ddc631421d889b5a5c0a89466056af3a4007a9..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();
              } 
            
          }
@@ -695,9 +687,8 @@ namespace creaImageIO
       }
          long* ptr=0;
          int flag;
-         long itemId=GetCtrl(level)->HitTest(wxPoint(clientpt.x,clientpt.y-8),flag,ptr);
-         tree::Node* node=((ItemData*)GetCtrl(level)->GetItemData(itemId))->node;
-         std::cout<<node->GetLabel()<<std::endl;
+         mLastRightLevel=level;
+         mLastRightSelected=GetCtrl(level)->HitTest(wxPoint(0,clientpt.y-8),flag,ptr);
     PopupMenu(menuItem, clientpt);
     
   }
@@ -837,9 +828,24 @@ namespace creaImageIO
    //================================================================
   void WxTreeView::OnEditField(wxCommandEvent& event)
   {
-    
-    
-    
+       if(mLastRightSelected!=-1)
+       {
+    tree::Node* node=((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node;
+       tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
+       std::vector<std::string> names;
+       std::vector<std::string> keys;
+       for (a  = GetTreeHandler()->GetTree().GetAttributeDescriptorList(mLastRightLevel+1).begin();
+            a != GetTreeHandler()->GetTree().GetAttributeDescriptorList(mLastRightLevel+1).end();
+            ++a)
+       {
+               if(a->GetFlags()==creaImageIO::tree::AttributeDescriptor::EDITABLE)
+           {
+                       names.push_back(a->GetName());
+                       keys.push_back(a->GetKey());
+               }
+       }
+       GetGimmickView()->CreateEditFieldsDialog(node,names,keys);
+       }
   }
   //================================================================
 
@@ -1070,114 +1076,97 @@ namespace creaImageIO
   }
 
    //================================================================
-  void WxTreeView::SetColor(int l, int item)
+
+   //================================================================
+  void WxTreeView::GetAttributes(std::vector<std::string>& areShown, std::vector<std::string>& notShown, int level)
   {
-         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]));
+         areShown.clear();
+         notShown.clear();
+       tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
+       for (a  = GetTreeHandler()->GetTree().GetAttributeDescriptorList(level).begin();
+            a != GetTreeHandler()->GetTree().GetAttributeDescriptorList(level).end();
+            ++a)
+       {
+               if(a->GetFlags()==creaImageIO::tree::AttributeDescriptor::EDITABLE && IsAttributeVisible(a->GetName(),level))
+           {
+                       areShown.push_back(a->GetName());
                }
-               else
-               {
-                       item.SetBackgroundColour(mColorMap[*i]); 
-               }*/
+       }
+       notShown=mLevelList[level-1].notShownAtts;
   }
+
+  //================================================================
+  void WxTreeView::SetNonVisibleAttributes(const std::vector<std::string>& notShown, int nlevel)
+  {
+       mLevelList[nlevel].notShownAtts=notShown;
+  }
+
   //================================================================
-  void WxTreeView::CreateColorPalette()
+   void WxTreeView::CreateCtrl(std::vector<std::string>& notShown, int nlevel)
   {
-  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");
+       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)   
   /*