]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.cpp
Added validation on frame exit
[creaImageIO.git] / src2 / creaImageIOWxTreeView.cpp
index 72b58fc97ca980af62eb4e18150d3d63549e98dd..4aca9f841bb524e9657ded94c9797e43875cb9df 100644 (file)
@@ -1,4 +1,5 @@
 #include <creaImageIOWxTreeView.h>
+#include <creaImageIOGimmickView.h>
 #include <creaImageIOSystem.h>
 #include <wx/splitter.h>
 ///Comparing function for ordering algorithm. Takes parameters as strings.
@@ -62,10 +63,11 @@ namespace creaImageIO
   //=====================================================================
   // CTor
   WxTreeView::WxTreeView(TreeHandler* handler,
+                        GimmickView* gimmick,
                         wxWindow* parent,
                         const wxWindowID id)
     : wxPanel(parent,id),
-      TreeView(handler)
+      TreeView(handler,gimmick)
   {
     GimmickDebugMessage(1,"WxTreeView::WxTreeView"
                        <<std::endl);
@@ -208,7 +210,7 @@ namespace creaImageIO
              }
          }     
       }
-       
+        
          return sel;
   }
 
@@ -296,6 +298,9 @@ namespace creaImageIO
                            <<"'"<<level
                            <<std::endl);
        int _id=0;
+       int r=100;
+       int g=100;
+       int b=100;
        //Adds columns
        GetTreeHandler()->LoadChildren(*i,1);
        tree::Node::ChildrenListType::reverse_iterator j;
@@ -316,20 +321,13 @@ namespace creaImageIO
            
                data->node = *j;
                item.SetId(_id);
-               /*
-               std::string a=(*j)->GetAttribute(mLevelList[l].key[mColumnSelected-1]);
-               GimmickMessage(1,
-                       "State Check: Att VAL"
-                           <<a
-                           <<std::endl);
-       */
+
                data->id = _id;
            item.SetData(data);
            
                _id++;
-         
-           long id = GetCtrl(l)->InsertItem(item);
-
+           long id=GetCtrl(l)->InsertItem(item);
+               
            std::ostringstream oss;
            int n= GetTreeHandler()->GetNumberOfChildren(*j);
            
@@ -339,10 +337,30 @@ namespace creaImageIO
                
            item.SetText( crea::std2wx(s));
            //      item.SetTextColour(*wxRED);
-           //      item.SetBackgroundColour(*wxBLACK); 
+
+               //Setting the color according to the parent
+               /*
+               if(l==0)
+               {
+               item.SetBackgroundColour(wxColour(r,g,b)); 
+                       mColorMap.insert(NodeColorPair(*j,wxColour(r,g,b)));
+               }
+               else if(l!=mLevelList.size()-1)
+               {
+                       item.SetBackgroundColour(mColorMap[*i]); 
+                       mColorMap.insert(NodeColorPair(*j,mColorMap[*i]));
+               }
+               else
+               {
+                       item.SetBackgroundColour(mColorMap[*i]); 
+               }
+                       r+=20;
+                       g+=20;
+                       b+=20;*/
+
            item.SetColumn(0);
 
-               //Sets the last level as selecte....How to make it select only the first time?
+               //Sets the last level as selected....How to make it select only the first time?
                //if (level==mLevelList.size()) item.SetState(wxLIST_STATE_SELECTED);
 
            GetCtrl(l)->SetItem(item);
@@ -388,7 +406,7 @@ namespace creaImageIO
     wxListItem info;
     info.m_itemId = event.m_itemIndex;
     mLastSelected=event.m_itemIndex;
-
+       
     // retrieve the level
     wxObject* obj = event.GetEventObject();   
     unsigned int level = 0;
@@ -399,8 +417,13 @@ namespace creaImageIO
     GimmickDebugMessage(1,
                        " Level "<<level+1
                        <<std::endl);
+
+       
+       mSelected=GetSelected(level+2);
+       
     if (level<mLevelList.size()-1) UpdateLevel( level + 2 ); 
-       if (level==mLevelList.size()-1) ValidateSelectedImages ();
+
+    if (level==mLevelList.size()-1) ValidateSelectedImages ();
 
   }
   //================================================================
@@ -422,11 +445,13 @@ namespace creaImageIO
                {
                if ( GetCtrl(level) == ctrl ) break;
                }
+               
                UpdateLevel(level+1);
+               
                wxBusyCursor busy;
         
                int l = level - 1;
-
+               
                //Sets the data for the items to be sorted
                std::string att;
                unsigned int ty=0;
@@ -484,7 +509,8 @@ namespace creaImageIO
                }
 
                //Resets original data
-                       
+               std::vector<tree::Node*>::iterator selection;
+               std::vector<long> change;
                long it = -1;
                for ( ;; )
                {
@@ -495,6 +521,21 @@ 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;
+                       for(selection=mSelected.begin();selection!=mSelected.end();++selection)
+                       {
+                               if((*selection)->GetAttribute("ID").compare(n->GetAttribute("ID"))==0)
+                               {
+                                       change.push_back(it);   
+                               }
+                       }
+                       
+               }
+               std::vector<long>::iterator selectedIts;
+               for(selectedIts=change.begin();selectedIts!=change.end();++selectedIts)
+               {
+                       GetCtrl(level)->SetItemState(*selectedIts,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE 
+               | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
                        
                }
        }
@@ -502,17 +543,29 @@ namespace creaImageIO
    }
   //================================================================
 
+
+  //================================================================
   void WxTreeView::ValidateSelectedImages()
   {
-               //Send an event telling wether the selection is valid or not
-               wxCommandEvent event( 0, GetId() );
-               event.SetEventObject( this );
-               std::vector<tree::Node*> sel=GetSelected((mLevelList.size()+1));
-               event.SetClientData(&sel);
-               GetEventHandler()->ProcessEvent( event );
+    GimmickDebugMessage(7,
+                       "WxTreeView::ValidateSelectedImages" 
+                       <<std::endl);
+    std::vector<tree::Node*> sel(GetSelected(mLevelList.size()+1));
+    GetGimmickView()->OnSelectionChange(sel);
+    /*
+    //Send an event telling wether the selection is valid or not
+    wxCommandEvent event( 0, GetId() );
+    event.SetEventObject( this );
+    std::vector<tree::Node*> sel=GetSelected((mLevelList.size()+1));
+    event.SetClientData(&sel);
+    GetEventHandler()->ProcessEvent( event );
+    */
+    // 
   }
+  //================================================================
 
-   //================================================================
+
+  //================================================================
   void WxTreeView::GetNodes(std::vector<tree::Node*>& nodes, bool direction)
   {
        long item = mLastSelected;