]> Creatis software - creaImageIO.git/blobdiff - src/creaImageIOWxTreeView.cpp
#3319 creaImageIO Bug New Normal - Size dialog box (remove patient)
[creaImageIO.git] / src / creaImageIOWxTreeView.cpp
index c28e00ae518ab5fe5442e63f68ca85305ab14d84..c324fab08cb941739990890d0ee73e22a7609bd3 100644 (file)
@@ -51,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
@@ -125,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"));
@@ -235,20 +223,18 @@ 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"));
 
-
        wxMenuItem* m1Item=menuItem->Append(wxID_ANY, _T("&Anonymize"));
        mAnonymizingID=m1Item->GetId();
        Connect( mAnonymizingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnAnonymizer) );
@@ -257,21 +243,18 @@ namespace creaImageIO
        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;
 
@@ -281,7 +264,6 @@ namespace creaImageIO
     SetSizer( msizer );     
     SetAutoLayout(true);
     Layout();
-
   }
   //=====================================================================
 
@@ -289,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)
   {
@@ -307,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 = (long)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)
@@ -339,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++)
                {
@@ -366,9 +347,7 @@ namespace creaImageIO
                                }
                        }
              }*/
-         }
-       else
-       {
+         } else {
                // NOTHING
        }   
         
@@ -391,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 ";
@@ -430,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;
        }
@@ -452,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)
                {
@@ -467,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
@@ -478,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(); 
+       }
     
   }
   //=====================================================================
@@ -498,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();
@@ -510,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()
@@ -541,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);
@@ -553,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();
@@ -630,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;
@@ -652,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
   }
 
   //================================================================
@@ -965,7 +926,7 @@ namespace creaImageIO
 
   //================================================================
   void WxTreeView::SortLevel(int level)
-  {      
+  { 
     GimmickDebugMessage(1,
                        "WxTreeView::SortLevel(" 
                        <<level<<")"
@@ -979,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"
@@ -1012,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);  
-  
-  }
+    }
   //================================================================