]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIOWxTreeView.cpp
#3319 creaImageIO Bug New Normal - Size dialog box (remove patient)
[creaImageIO.git] / src / creaImageIOWxTreeView.cpp
index 34db01a70a63b4aa8041e5b68b2656dc666a6314..c324fab08cb941739990890d0ee73e22a7609bd3 100644 (file)
@@ -1,6 +1,32 @@
+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
+#                        pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and 
+#  abiding by the rules of distribution of free software. You can  use, 
+#  modify and/ or redistribute the software under the terms of the CeCILL-B 
+#  license as circulated by CEA, CNRS and INRIA at the following URL 
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability. 
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------
+*/
+
 #include <creaImageIOWxTreeView.h>
 #include <creaImageIOGimmickView.h>
-#include <creaImageIOSystem.h>
 #include <wx/splitter.h>
 #include <wx/gdicmn.h>
 #include <boost/date_time/gregorian/gregorian.hpp>
@@ -25,6 +51,7 @@ int wxCALLBACK CompareFunctionStrings(long item1, long item2, long sortData)
 
   const std::string& s1(*(data1->attr));
   const std::string& s2(*(data2->attr));
+  
   if(sortData==1)
     {
       // inverse the order
@@ -99,104 +126,91 @@ namespace creaImageIO
     : wxPanel(parent,id),
       TreeView(handler, gimmick)
   {
-    GimmickDebugMessage(1,"WxTreeView::WxTreeView"
-                       <<std::endl);
+    GimmickDebugMessage(1,"WxTreeView::WxTreeView"<<std::endl);
 
-    
     // Split part below toolbar into notebook for views and panel
     // for preview, messages...
     // TO DO : Splitter
     //    mSplitter = new wxSplitterWindow( this , -1);
 
     // Global sizer
-    msizer = new wxBoxSizer(wxHORIZONTAL);
-    
-    int ctrl_style = wxLC_REPORT | wxLC_VRULES;
-    int col_style = wxLIST_FORMAT_LEFT;
-
+    msizer                     = new wxBoxSizer(wxHORIZONTAL);    
+    int ctrl_style     = wxLC_REPORT | wxLC_VRULES;
+    int col_style      = wxLIST_FORMAT_LEFT;
     // Creating the ListCtrl for the levels > 0 (not for Root level)
-    for (int i = 0;
-        i < handler->GetTree().GetNumberOfLevels() -1;
-        ++i)
-      {
-       GimmickDebugMessage(5,"Creating view for level "<<i
-                           <<std::endl);
-       LevelType level;
-       level.SelectedUpToDate = true;
-       level.SortColumn = 0;
-
-       // If the first level : parent = this
-       wxWindow* sparent = this;
-       // else parent = last splitter
-       if (i>0) 
-               sparent = mLevelList[i-1].wxSplitter;
-
-       level.wxSplitter = new wxSplitterWindow( sparent , -1);
-       if(i!=0)
-       {
-       level.wxSplitter->Show(false);
-       }
-       //          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;
-       std::string title;
-
-       tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
-       for (a  = handler->GetTree().GetAttributeDescriptorList(i+1).begin();
-            a != handler->GetTree().GetAttributeDescriptorList(i+1).end();
-            ++a)
-
-{
-       
-           GimmickDebugMessage(5,"Creating column "<<col<<" : "
-                               <<a->GetName()
-                               <<std::endl);
-           
-           if(a->GetFlags()!=creaImageIO::tree::AttributeDescriptor::PRIVATE)
-             {
+    for (int i = 0;i < handler->GetTree().GetNumberOfLevels() -1; ++i)
+    {
+               GimmickDebugMessage(5,"Creating view for level "<<i <<std::endl);
+               LevelType level;
+               level.SelectedUpToDate  = true;
+               level.SortColumn                = 0;
+
+               // If the first level : parent = this
+               wxWindow* sparent               = this;
+               // else parent = last splitter
+               if (i>0) 
+               {
+                       sparent = mLevelList[i-1].wxSplitter;
+               } // if
+               level.wxSplitter = new wxSplitterWindow( sparent , -1);
+               if(i!=0)
+               {
+                       level.wxSplitter->Show(false);
+               } // if
+               //          level.wxSplitter->SetMinimumPaneSize(100);
                
-               if(a->GetName()=="UNKNOWN")
-                 {
-                   title = "#";
-                   title += handler->GetTree().GetLevelDescriptor(i+1).GetName();
-                   if (title[title.size()-1]!='s')
-                     title += "s";
-                   
-                 }
-               else
-                 {
-                   title=a->GetName();
-                 }
-                 std::string temp = a->GetKey();
-                 if (temp.compare("ID") != 0)
-                 {
+               wxListCtrl* ctrl = new wxListCtrl(level.wxSplitter,
                
-               ctrl->InsertColumn(col, 
-                                  crea::std2wx(title),
-                                  col_style);
-               col++;
-                 }
-               level.key.push_back(a->GetKey());
-             }
-               
-         }
-         
-       mLevelList.push_back(level);
-      }
+// EED1 2018-08-16
+//                                               i,
+                                                 wxID_ANY,
+                                                  
+                                                 wxDefaultPosition, 
+                                                 wxDefaultSize,
+                                                 ctrl_style);
+               level.wxCtrl = ctrl;
+               level.wxSplitter->Initialize(ctrl);
+          
+               // Create the columns : one for each attribute of the level
+               int col = 0;
+               std::string title;
+
+               tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
+               for (a  = handler->GetTree().GetAttributeDescriptorList(i+1).begin();
+                        a != handler->GetTree().GetAttributeDescriptorList(i+1).end();
+                        ++a)
+               {
+                       GimmickDebugMessage(5,"Creating column "<<col<<" : " <<a->GetName() <<std::endl);       
+                       if(a->GetFlags()!=creaImageIO::tree::AttributeDescriptor::PRIVATE)
+                       {
+                               if(a->GetName()=="UNKNOWN")
+                               {
+                                       title = "#";
+                                       title += handler->GetTree().GetLevelDescriptor(i+1).GetName();
+                                       if (title[title.size()-1]!='s')
+                                       {               
+                                               title += "s";
+                                       } // if
+                               } else {
+                                       title=a->GetName();
+                               } // if a
+                               std::string temp = a->GetKey();
+                               if (temp.compare("ID") != 0)
+                               {               
+                                       ctrl->InsertColumn(col,crea::std2wx(title),col_style);
+                                       col++;
+                               } // if temp
+                                       level.key.push_back(a->GetKey());
+                       } // if
+                       
+               } // for a  
+               mLevelList.push_back(level);
+      } //  for i
     
 #if wxUSE_MENUS
 
         // Column Menu
-    menu =new wxMenu;
+    menu =new wxMenu();
        wxMenuItem* m1=menu->Append(wxID_ANY, _T("&Sort ascending"));
        wxMenuItem* m2=menu->Append(wxID_ANY, _T("&Sort descending"));
        wxMenuItem* m3=menu->Append(wxID_ANY, _T("&Filter"));
@@ -209,43 +223,38 @@ namespace creaImageIO
 
 
        ////SubMenuItem EXPORT
-       subExportMenu = new wxMenu;
+       subExportMenu = new wxMenu();
        wxMenuItem *subExp1 = subExportMenu->Append(wxID_ANY, _T("&Export to Storage"));
        Connect( subExp1->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnExportToStorage) );
 
        //ItemMenu
-       menuItem =new wxMenu;
-
+       menuItem =new wxMenu();
 
        wxMenuItem* m2Item=menuItem->Append(wxID_ANY, _T("&Local Copy"));
        wxMenuItem* m3Item=menuItem->Append(wxID_ANY, _T("&Edit Fields"));
        wxMenuItem* m4Item=menuItem->Append(wxID_ANY, _T("&Display Dicom Tags"));
        menuItem->AppendSubMenu(subExportMenu, wxT("&Export"));
 
-#if defined(USE_GDCM_ANOM)
        wxMenuItem* m1Item=menuItem->Append(wxID_ANY, _T("&Anonymize"));
        mAnonymizingID=m1Item->GetId();
-       Connect( mAnonymizingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnAnonymize) );
-#endif
+       Connect( mAnonymizingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnAnonymizer) );
+
        mLocalCopyID=m2Item->GetId();
        mEditFieldID=m3Item->GetId();
        mDumpID=m4Item->GetId();
        
-       
        Connect( mLocalCopyID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnLocalCopy) );
        Connect( mEditFieldID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnEditField) );
        Connect( mDumpID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnDumpTags) );
        
-
-       
 #endif // wxUSE_MENUS
        /// Initialize the first level splitter
          
        msizer->Add( mLevelList[0].wxSplitter ,1, wxGROW  ,0);
-       //      mColumnSelected=1;
-       mLastSelected=0;
-       mLastLevel=0;
-       //      mDirection=true;
+       //      mColumnSelected = 1;
+       mLastSelected           = 0;
+       mLastLevel                      = 0;
+       //      mDirection              = true;
 
        mIgnoreSelectedChanged = false;
 
@@ -255,7 +264,6 @@ namespace creaImageIO
     SetSizer( msizer );     
     SetAutoLayout(true);
     Layout();
-
   }
   //=====================================================================
 
@@ -263,16 +271,12 @@ namespace creaImageIO
   /// Destructor
   WxTreeView::~WxTreeView()
   {
-    GimmickDebugMessage(1,"WxTreeView::~WxTreeView"
-                       <<std::endl);
+    GimmickDebugMessage(1,"WxTreeView::~WxTreeView"<<std::endl);
        delete menu;
        delete menuItem;
-
   }
   //=====================================================================
   
-  
-  
   //=====================================================================
   const std::vector<tree::Node*>& WxTreeView::GetSelected(int level)
   {
@@ -281,29 +285,33 @@ namespace creaImageIO
     int l = level - 1;
     // the selection of upper level
        if(mLevelList.size() == level -1)
-                sel = mLevelList.back().Selected;
-       else
-                 sel=  mLevelList[l].Selected;
+       {
+               sel = mLevelList.back().Selected;
+       } else {
+               sel=  mLevelList[l].Selected;
+       }
        if (sel.size() > 0)
        {
                sel.clear();
        }
-         if (level == 1) 
-      {
-       sel.push_back(GetTreeHandler()->GetTree().GetTree());
-      }
-         else if (level < mLevelList.size()+2 ) 
+       if (level == 1) 
     {
+               sel.push_back( GetTreeHandler()->GetTree().GetTree() );
+    } else if (level < mLevelList.size()+2 ) {
                long item = -1;
                for ( ;; )
                {
-                       item = GetCtrl(l-1)->GetNextItem(item,
+               item = GetCtrl(l-1)->GetNextItem(item,
                                                                                 wxLIST_NEXT_ALL,
                                                                                 wxLIST_STATE_SELECTED);
                        if ( item == -1 )
+                       {
                                break;
-                       long adr = GetCtrl(l-1)->GetItemData(item);
-                       tree::Node* n = ((ItemData*)adr)->node;
+                       }
+//                     long adr = (long)GetCtrl(l-1)->GetItemData(item);
+                       ItemData* adr = (ItemData*)GetCtrl(l-1)->GetItemData(item);
+//                     tree::Node* n = ((ItemData*)adr)->node;
+                       tree::Node* n = adr->node;
                        /* FCY 18-04-2011: don't understand the real purpose of these lines,
                         if uncomment add last frame in first place 
                                if(mLastSelected==item)
@@ -313,12 +321,11 @@ namespace creaImageIO
                                it = sel.insert ( it , n );
                        }
                        else
-                       {*/
-                               
+                       {*/     
                                sel.push_back(n);
                        //}                     
                        
-               }
+               } // for
                /*int n = GetCtrl(l-1)->GetItemCount();
                for (int i = 0; i<n; i++)
                {
@@ -340,9 +347,7 @@ namespace creaImageIO
                                }
                        }
              }*/
-         }
-       else
-       {
+         } else {
                // NOTHING
        }   
         
@@ -365,7 +370,6 @@ namespace creaImageIO
        // if no selection, no remove action.
     if(sel.size() != 0)
        {
-       
            std::stringstream out;
            std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
            out<<"Delete ";
@@ -392,11 +396,7 @@ namespace creaImageIO
                    std::vector<tree::Node*>::const_iterator i;
                    for (i=sel.begin(); i!=sel.end(); ++i)
                      {
-                       GimmickMessage(1,
-                                      "deleting '"
-                                      <<(*i)->GetLabel()
-                                      <<"'"<<mLastLevel
-                                      <<std::endl);
+                       GimmickMessage(1,"deleting '" << (*i)->GetLabel() << "'" << mLastLevel << std::endl );                  
                        if((*i)->GetParent()->GetNumberOfChildren()<2)
                          {
                            needRefresh=true;
@@ -408,21 +408,15 @@ namespace creaImageIO
                      }
                    
                    if(needRefresh && mLastLevel>1)
-                     {
-                       UpdateLevel(mLastLevel-2);
-                     }
-                   else if(mLastLevel>1)
-                     {
-                       UpdateLevel(mLastLevel-1);
-                     }
-                   else
-                     {
-                       UpdateLevel(mLastLevel);
-                     }
-                 }
-       }
-       else
-       {
+                   {
+                               UpdateLevel(mLastLevel-2);
+                   } else if(mLastLevel>1) {
+                               UpdateLevel(mLastLevel-1);
+                   } else {
+                               UpdateLevel(mLastLevel);
+                   } // if needRefresh
+                 } // if erase
+       } else {
                // no need to incremente level
                mLastLevel = tempLevel;
        }
@@ -430,7 +424,7 @@ namespace creaImageIO
        if (erase && mLastLevel == 1 && i_save == "0")
        {
        
-               RemoveAlertDlg *dial = new RemoveAlertDlg(this,  crea::std2wx("Remove files"), wxSize(370,100));
+               RemoveAlertDlg *dial = new RemoveAlertDlg(this,  crea::std2wx("Remove files"), wxSize(450,300));
                //dial->ShowModal();
                if (dial->ShowModal() == wxID_OK)
                {
@@ -445,7 +439,7 @@ namespace creaImageIO
   /// Updates a level of the view (adds or removes children, etc.)
   void WxTreeView::UpdateLevel( int level )
   {
-    GimmickDebugMessage(1,
+       GimmickDebugMessage(1,
                        GetTreeHandler()->GetTree().GetLabel()
                        <<"WxTreeView::UpdateLevel(level "
                        <<level
@@ -456,12 +450,16 @@ namespace creaImageIO
     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();    
+    {
+               if (!GetSplitter(i)->IsSplit()) 
+               { 
+                       GetSplitter(i)->SplitVertically(  GetCtrl(i), GetSplitter(i+1),100 );
+               } // if
+      } // for
+    if (GetSplitter(i)->IsSplit()) 
+       { 
+               GetSplitter(i)->Unsplit(); 
+       }
     
   }
   //=====================================================================
@@ -476,10 +474,9 @@ namespace creaImageIO
                        <<level
                        <<")"<<std::endl);
     
-    
+    int l = level - 1; 
     const std::vector<tree::Node*>& sel(GetSelected(level));
     
-    int l = level - 1;
     
     // to speed up inserting we hide the control temporarily
     GetCtrl(l)->Hide();
@@ -488,7 +485,7 @@ namespace creaImageIO
     std::vector<tree::Node*>::const_iterator i;
     
     for (i=sel.begin(); i!=sel.end(); ++i)
-      {
+    {
        GimmickDebugMessage(1,
                            "adding children of '"
                            <<(*i)->GetLabel()
@@ -519,9 +516,9 @@ namespace creaImageIO
                         wxLIST_MASK_FORMAT
                         );
            
-               ItemData* data = new ItemData();
-           data->node = *j;
-           data->id = _id;
+               ItemData* data  = new ItemData();
+           data->node          = *j;
+           data->id            = _id;
                
            item.SetId(_id);
            item.SetData(data);
@@ -531,53 +528,52 @@ namespace creaImageIO
            
            //Setting attributes
            for (int k=0; k<GetCtrl(l)->GetColumnCount(); ++k)                          
-             {
-               std::string val;
-               //  Temporary correction : it works but no explanation about the problem FCY
-               
-               if(k==0 && level <3)
-               {
-                 val = (*j)->GetAttribute("NumberOfChildren");
-               }
-               else
-                 val = (*j)->GetAttribute(mLevelList[l].key[k]);
-               if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isDateEntry()) // Date
-                 {
-                   //                                    std::cout << "["<<val<< "]" << std::endl;
-                   std::string valtmp(val);
-                   try
-                     {
-                       boost::gregorian::date d1(boost::gregorian::from_undelimited_string(val));                                 
-                       val = to_iso_extended_string(d1);
-                     }
-                   catch (...)
-                     {
-                       val =  valtmp;
-                     }
-                   //                                    std::cout << "["<<val<< "]" << std::endl;     
-                 }
-               else if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isTimeEntry()) // Time
-                 {
-                   if ((val.size()>6) && 
-                       (val != "" || val != " "))
-                     val = val.substr(0,2) + " : " 
-                       + val.substr(2,2) + " : " 
-                       + val.substr(4,2);
-                 }
-               else
-                 {
-                   if (val.size()==0) val = "?";
-                 }
-               if (val.size()==0) val = "X";
-               item.SetText( crea::std2wx(val));
-               item.SetColumn(k);
+           {
+                       std::string val;
+                       //  Temporary correction : it works but no explanation about the problem FCY            
+                       if(k==0 && level <3)
+                       {
+                               val = (*j)->GetAttribute("NumberOfChildren");
+                       } else {
+                               val = (*j)->GetAttribute(mLevelList[l].key[k]);
+                       }
+                       if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isDateEntry()) // Date
+                       {
+                               //                                        std::cout << "["<<val<< "]" << std::endl;
+                               std::string valtmp(val);
+                               try
+                               {
+                                       boost::gregorian::date d1(boost::gregorian::from_undelimited_string(val));                                 
+                                       val = to_iso_extended_string(d1);
+                               } catch (...) {
+                                       val =  valtmp;
+                               }
+                               //                                        std::cout << "["<<val<< "]" << std::endl;     
+                       } else if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isTimeEntry()) // Time
+                       {
+                               if ((val.size()>6) && (val != "" || val != " "))
+                               {               
+                                       val = val.substr(0,2) + " : " + val.substr(2,2) + " : " + val.substr(4,2);
+                               }
+                       } else {
+                               if (val.size()==0)
+                               { 
+                                       val = "?";
+                               }
+                       } // if j
+                       if (val.size()==0)
+                       {
+                               val = "X";
+                       }
+                       item.SetText( crea::std2wx(val));
+                       item.SetColumn(k);
                  
-                 GetCtrl(l)->SetItem(item);
-                 }
+                       GetCtrl(l)->SetItem(item);
+               } // for k
                item.Clear();
            
-         }
-      }
+         } // for j
+      }  // for i
     
     SortLevel(l);
     GetCtrl(l)->Show();
@@ -608,21 +604,14 @@ namespace creaImageIO
   //================================================================
   void WxTreeView::OnItemSelected(wxListEvent& event)
   { 
-         
-    GimmickDebugMessage(1,
-                       GetTreeHandler()->GetTree().GetLabel()
-                       <<" WxTreeView::OnItemSelected"<<std::endl);
+    GimmickDebugMessage(1,GetTreeHandler()->GetTree().GetLabel()<<" WxTreeView::OnItemSelected"<<std::endl);
 
     if (mIgnoreSelectedChanged) 
-      {
-       GimmickDebugMessage(1,
-                           " mIgnoreSelectedChanged true: returning"
-                           <<std::endl);
-       return;
-      }
-    
-
-    
+    {
+               GimmickDebugMessage(1, " mIgnoreSelectedChanged true: returning"<<std::endl);
+               return;
+    }
+        
     wxListItem info;
     info.m_itemId = event.m_itemIndex;
     mLastSelected = event.m_itemIndex;
@@ -630,64 +619,58 @@ namespace creaImageIO
     wxObject* obj = event.GetEventObject();   
     unsigned int level = 0;
     for (level = 0; level<mLevelList.size(); ++level)
-      {
-       if ( GetCtrl(level) == obj ) break;
-      }
+    {
+               if ( GetCtrl(level) == obj ) break;
+    }
        mLastLevel=level;
-    GimmickDebugMessage(1,
-                       " Level "<<level+1
-                       <<std::endl);
+    GimmickDebugMessage(1," Level "<<level+1<<std::endl);
     
     // Update the children level (if selection not at last level)
     if (level<mLevelList.size()-1) 
-      {
-               
-       UpdateLevel( level + 2 ); 
-       // Reset the viewer setting the default image
-       GetGimmickView()->ClearSelection();
-      }
+    {  
+               UpdateLevel( level + 2 ); 
+               // Reset the viewer setting the default image
+               GetGimmickView()->ClearSelection();
+    }
     // Select all images if the selection is at series level
     if (level==mLevelList.size()-2) 
+       {
                SelectAll(level+1);
+       }
     // Validate selected images if the selection is at image level
     if (level==(mLevelList.size()-1)) //&&mProcess) 
-      {
-       if(event.GetEventType()==wxEVT_COMMAND_LIST_ITEM_SELECTED)
-         {
+    {
+               if(event.GetEventType()==wxEVT_COMMAND_LIST_ITEM_SELECTED)
+               {
                  ValidateSelectedImages (true);
-         }
-       else
-         {
+               } else {
                  ValidateSelectedImages (false);
-         }
-      }
-    
+               }
+    } // if
   }
   //================================================================
 
   //================================================================
   void WxTreeView::SelectAll(int level)
-  {
+  {      
     long item = -1;
     //    int level=mLevelList.size()-1;
     for ( ;; )
-      {
-       item = GetCtrl(level)->GetNextItem(item,
-                                          wxLIST_NEXT_ALL);
-        if ( item == -1 )
-         break;
-       
-       if(item==(GetCtrl(level)->GetItemCount()-1))
-         {
-           mIgnoreSelectedChanged = false;//mProcess=true;
-         }
-       else
-         {
-           mIgnoreSelectedChanged = true;//    mProcess=false;
-         }
-       GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE 
-                                    | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
-      }
+    {
+               item = GetCtrl(level)->GetNextItem(item,wxLIST_NEXT_ALL);
+               if ( item == -1 )
+               {
+                       break;
+               }
+               if(item==(GetCtrl(level)->GetItemCount()-1))
+               {
+                       mIgnoreSelectedChanged = false;//mProcess=true;
+               } else {
+                       mIgnoreSelectedChanged = true;//        mProcess=false;
+               }
+               GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE 
+                                                | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
+    } // for
   }
 
   //================================================================
@@ -762,7 +745,7 @@ namespace creaImageIO
        if ( it == -1 )
          break;
        
-       long adr = GetCtrl(level)->GetItemData(it);
+       long adr = (long)GetCtrl(level)->GetItemData(it);
        tree::Node* nod = ((ItemData*)adr)->node;
        att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected]);
        
@@ -821,11 +804,11 @@ namespace creaImageIO
           wxBusyCursor busy;
           std::vector<std::string> filesname;
           std::vector<tree::Node*> nodes;
-//        nodes.push_back(((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node);
+          nodes.push_back(((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node);
           if(nodes.size() != 0)
           {
                   GetFilenamesAsString(nodes,filesname);
-               //   GetGimmickView()->Anonymize(filesname,0);
+                  GetGimmickView()->Anonymize(filesname,0);
           }
        
   }
@@ -943,7 +926,7 @@ namespace creaImageIO
 
   //================================================================
   void WxTreeView::SortLevel(int level)
-  {      
+  { 
     GimmickDebugMessage(1,
                        "WxTreeView::SortLevel(" 
                        <<level<<")"
@@ -957,31 +940,28 @@ namespace creaImageIO
     int nbselected = 0;
     int n = GetCtrl(level)->GetItemCount();
     for (int i = 0; i < n; i++)
-      {
-       
-       //Gets current item data
-       ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
+    {
+               //Gets current item data
+               ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
+               //Extracts the node and the type of attribute   
+               tree::Node* nod = data->node;
+               if(i==0)
+                 {
+                       (*nod).GetAttributeDescriptor
+                         (mLevelList[level].key[mLevelList[level].SortColumn])
+                         .DecodeType( ty );
+                 } // if i
+               //Obtains the organizing attribute
+               data->attr = & (*nod).GetAttribute(mLevelList[level].key[mLevelList[level].SortColumn]);
+               //Selected ?
+               data->selected = false;
+               if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
+               {
+                       data->selected = true;
+                       nbselected++;
+               } // if
+    }// for
        
-       //Extracts the node and the type of attribute   
-       tree::Node* nod = data->node;
-       if(i==0)
-         {
-           (*nod).GetAttributeDescriptor
-             (mLevelList[level].key[mLevelList[level].SortColumn])
-             .DecodeType( ty );
-         }
-       //Obtains the organizing attribute
-       data->attr = & (*nod).GetAttribute
-         (mLevelList[level].key[mLevelList[level].SortColumn]);
-       //Selected ?
-       data->selected = false;
-       if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
-         {
-           data->selected = true;
-           nbselected++;
-         }
-
-      }        
     GimmickDebugMessage(1,
                        "WxTreeView::OnSort : " 
                        <<nbselected<<" selected before sorting"
@@ -990,80 +970,68 @@ namespace creaImageIO
     mIgnoreSelectedChanged = true; 
     // 
     if (mLevelList[level].SortAscending)
-      {
-       
-       if(ty==1)
-         {
-           GetCtrl(level)->SortItems(CompareFunctionInts, 0);
-         }
-       else
-         {
-           GetCtrl(level)->SortItems(CompareFunctionStrings, 0);
-         }
-       
-      }
-    else
-      {
-       if(ty==1)
-         {
-           GetCtrl(level)->SortItems(CompareFunctionInts, 1);
-         }
-       else
-         {
-           GetCtrl(level)->SortItems(CompareFunctionStrings, 1);
-         }
-      }
+    {
+               if(ty==1)
+               {
+                       GetCtrl(level)->SortItems(CompareFunctionInts, 0);
+               } else {
+                       GetCtrl(level)->SortItems(CompareFunctionStrings, 0);
+               } // if ty
+    } else {
+               if(ty==1)
+               {
+                       GetCtrl(level)->SortItems(CompareFunctionInts, 1);
+               } else {
+                       GetCtrl(level)->SortItems(CompareFunctionStrings, 1);
+               } // if ty
+    } //mLevelList
  
-
     // Reselects the unselected 
     n = GetCtrl(level)->GetItemCount();
     int after = 0;
     for (int i = 0; i < n; i++)
-      {
-       
-       //Gets current item data
-       ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
-  
-       //  long item = -1;
-       //    for ( ;; )
-       //      {
-       //      item = GetCtrl(level)->GetNextItem(item,wxLIST_NEXT_ALL);
-       //      if ( item == -1 ) break;
-       //Gets current item data
-       //      ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(item);
-       // was selected ?
-       
-       if (data->selected)
-         {
-           nbselected--;
-           if (nbselected==0)
-             {
-               // if it is the last one we must process the selection
-               mIgnoreSelectedChanged = false;
-             }
-           GetCtrl(level)->SetItemState(i,
-                                        wxLIST_STATE_SELECTED, 
-                                        wxLIST_MASK_STATE 
-                                        | wxLIST_MASK_TEXT 
-                                        | wxLIST_MASK_IMAGE 
-                                        | wxLIST_MASK_DATA 
-                                        | wxLIST_MASK_WIDTH 
-                                        | wxLIST_MASK_FORMAT);   
-         }
-       if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
-         {
-           after++;
-         }
+    {
+               //Gets current item data
+               ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
+               //  long item = -1;
+               //    for ( ;; )
+               //      {
+               //      item = GetCtrl(level)->GetNextItem(item,wxLIST_NEXT_ALL);
+               //      if ( item == -1 ) break;
+               //Gets current item data
+               //      ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(item);
+               // was selected ?
+               
+               if (data->selected)
+               {
+                       nbselected--;
+                       if (nbselected==0)
+                       {
+                               // if it is the last one we must process the selection
+                               mIgnoreSelectedChanged = false;
+                       }
+                       GetCtrl(level)->SetItemState(i,
+                                                wxLIST_STATE_SELECTED, 
+                                                wxLIST_MASK_STATE 
+                                                | wxLIST_MASK_TEXT 
+                                                | wxLIST_MASK_IMAGE 
+                                                | wxLIST_MASK_DATA 
+                                                | wxLIST_MASK_WIDTH 
+                                                | wxLIST_MASK_FORMAT);   
+               } // if data
+               if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
+               {
+                       after++;
+               }
 
        
-      }
+    } // for
     mIgnoreSelectedChanged = false; 
-     GimmickDebugMessage(1,
+    GimmickDebugMessage(1,
                        "WxTreeView::SortLevel : " 
                        <<after<<" selected after sorting"
                        <<std::endl);  
-  
-  }
+    }
   //================================================================
 
   
@@ -1073,7 +1041,7 @@ namespace creaImageIO
     GimmickDebugMessage(7,
                        "WxTreeView::ValidateSelectedImages" 
                        <<std::endl);
-    const std::vector<tree::Node*>& sel(GetSelected(mLevelList.size()+1));
+    const std::vector<tree::Node*>& sel(GetSelected((int)mLevelList.size()+1));
     GetGimmickView()->OnSelectionChange(sel,
                                        isSelection,(mLastSelected-1),
                                        !mIgnoreSelectedChanged);
@@ -1086,9 +1054,9 @@ namespace creaImageIO
   void WxTreeView::GetNodes(std::vector<tree::Node*>& nodes, bool direction)
   {
        long item = mLastSelected;
-       int level=mLevelList.size()-1;
+       int level=(int)mLevelList.size()-1;
        //Gets current item data
-       long adr = GetCtrl(level)->GetItemData(item);
+       long adr = (long)GetCtrl(level)->GetItemData(item);
        //Extracts the node
        tree::Node* nod = ((ItemData*)adr)->node;
     for ( ;; )
@@ -1110,7 +1078,7 @@ namespace creaImageIO
                if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 )
                {
 
-                       adr = GetCtrl(level)->GetItemData(item);
+                       adr = (long)GetCtrl(level)->GetItemData(item);
                        nod = ((ItemData*)adr)->node;
                        nodes.push_back(nod);
                }
@@ -1136,7 +1104,7 @@ namespace creaImageIO
   // Should be in another place : not specific !
   void WxTreeView::GetSelectedAsString(std::vector<std::string>&s)
   {
-    int level=mLevelList.size();
+    int level= (int)mLevelList.size();
     const std::vector<tree::Node*>& sel=GetSelected(level+1);
     std::vector<tree::Node*>::const_iterator i;