]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.cpp
Remove algorithm is now linear, and everything can be removed without deleting the...
[creaImageIO.git] / src2 / creaImageIOWxTreeView.cpp
index 47123b8e96e06b50193a4ad9689b11dedbb4f4fd..9884cb03843de979297328302a9623811f0cdb52 100644 (file)
@@ -178,6 +178,7 @@ namespace creaImageIO
       sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW  ,0);
        mColumnSelected=1;
        mLastSelected=0;
+       mLastLevel=0;
        mDirection=true;
        mSelectionMade=false;
        mProcess=true;
@@ -247,12 +248,26 @@ namespace creaImageIO
 
   //=====================================================================
   
-  ///Removes selected nodes on given level
-  void WxTreeView::RemoveSelected( int level )
+  ///Removes selected nodes on last selected level
+  void WxTreeView::RemoveSelected()
   {
-         std::vector<tree::Node*> sel=GetSelected(level+1);
+         mLastLevel+=1;
+         std::vector<tree::Node*> sel=GetSelected(mLastLevel+1);
          bool erase=false;
-         if (wxMessageBox(_T("Delete file(s) ?"),
+         std::stringstream out;
+         std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
+         out<<"Delete ";
+         out<<sel.size();
+         if(sel.size()>1&&levelName.at(levelName.size()-1)!='s')
+         {
+         out<<" "<<levelName;
+         out<<"s?";
+         }
+         else
+         {
+      out<<" "<<GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName()<<"?";
+         }
+         if (wxMessageBox(_T(out.str()),
                         _T("Remove Files"),
                         wxYES_NO,this ) == wxYES)
          {
@@ -260,18 +275,34 @@ namespace creaImageIO
          }
          if(erase)
          {
+               bool needRefresh=false;
                std::vector<tree::Node*>::iterator i;
                for (i=sel.begin(); i!=sel.end(); ++i)
                {
-                       GimmickDebugMessage(2,
+                       GimmickMessage(1,
                                        "deleting '"
                                        <<(*i)->GetLabel()
-                                       <<"'"<<level
+                                       <<"'"<<mLastLevel
                                        <<std::endl);
+                       if((*i)->GetParent()->GetNumberOfChildren()<2)
+                       {
+                               needRefresh=true;
+                       }
                                GetTreeHandler()->Remove(*i);
                }
 
-               UpdateLevel(level);
+               if(needRefresh && mLastLevel>1)
+               {
+               UpdateLevel(mLastLevel-2);
+               }
+               else if(mLastLevel>1)
+               {
+               UpdateLevel(mLastLevel-1);
+               }
+               else
+               {
+               UpdateLevel(mLastLevel);
+               }
          }
          
   }
@@ -398,6 +429,7 @@ namespace creaImageIO
       {
        if ( GetCtrl(level) == obj ) break;
       }
+       mLastLevel=level;
     GimmickDebugMessage(1,
                        " Level "<<level+1
                        <<std::endl);
@@ -405,6 +437,7 @@ namespace creaImageIO
     // 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();
@@ -615,9 +648,6 @@ namespace creaImageIO
                }
 
                //Resets original data
-               
-               std::vector<tree::Node*>::iterator selection;
-               std::vector<long> change;
                long it = -1;
                for ( ;; )
                {
@@ -629,7 +659,7 @@ namespace creaImageIO
                        //Gets current item data, extracts the node and resets it
                        long item = GetCtrl(level)->GetItemData(it);
                        GetCtrl(level)->SetItemData(it,((long*)item)[0]);
-                       tree::Node* n= ((ItemData*)((long*)item)[0])->node;                     
+                       //tree::Node* n= ((ItemData*)((long*)item)[0])->node;                   
                        
                }
        
@@ -669,11 +699,11 @@ namespace creaImageIO
                        item = GetCtrl(level)->GetNextItem(item,
                                      wxLIST_NEXT_BELOW);
                }
-        if ( item == -1  )
+        if ( item == -1 || item==0  )
                {
             break;
                }
-               if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 /*&& item!=0*/)
+               if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 )
                {
                        adr = GetCtrl(level)->GetItemData(item);
                        nod = ((ItemData*)adr)->node;