X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src2%2FcreaImageIOWxTreeView.cpp;h=72b58fc97ca980af62eb4e18150d3d63549e98dd;hb=6cac83c30fb8c3cd89c41685078eccff6e952a50;hp=1f3ccfeb1ff109fa35ba57ee90497ccb41cabd92;hpb=384558d116ebb2ca264900f837c4a921d695515a;p=creaImageIO.git diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index 1f3ccfe..72b58fc 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -1,16 +1,11 @@ #include #include #include +///Comparing function for ordering algorithm. Takes parameters as strings. int wxCALLBACK CompareFunctionStrings(long item1, long item2, long sortData) { std::string s1((char*)((long*)item1)[1]); std::string s2((char*)((long*)item2)[1]); - GimmickMessage(1, - " Check: STRING 1: " - <Add( mLevelList[0].wxSplitter ,1, wxGROW ,0); mColumnSelected=1; + mLastSelected=0; mDirection=true; UpdateLevel(1); @@ -204,7 +195,16 @@ namespace creaImageIO { long adr = GetCtrl(l-1)->GetItemData(i); tree::Node* n = ((ItemData*)adr)->node; - sel.push_back(n); + if(mLastSelected==i) + { + std::vector::iterator it; + it = sel.begin(); + it = sel.insert ( it , n ); + } + else + { + sel.push_back(n); + } } } } @@ -248,7 +248,7 @@ namespace creaImageIO //===================================================================== - /// + /// Updates a level of the view (adds or removes children, proganizes, etc.) void WxTreeView::UpdateLevel( int level ) { GimmickDebugMessage(1, @@ -270,7 +270,7 @@ namespace creaImageIO } //===================================================================== - /// + /// Recursive method called upon by UpdateLevel to refresh all windows void WxTreeView::RecursiveUpdateLevel( int level ) { GimmickDebugMessage(2, @@ -387,7 +387,7 @@ namespace creaImageIO wxListItem info; info.m_itemId = event.m_itemIndex; - + mLastSelected=event.m_itemIndex; // retrieve the level wxObject* obj = event.GetEventObject(); @@ -410,93 +410,94 @@ namespace creaImageIO { //Obtain the column name and the level that needs to be organized mColumnSelected=event.m_col; - GimmickMessage(1, - " Column " <GetItemCount(); - for (int i = 0; i < n; i++) - { + if(mColumnSelected!=0) + { + wxObject* ctrl = event.GetEventObject(); + unsigned int level = 0; + for (level = 0; levelGetItemCount(); + for (int i = 0; i < n; i++) + { + + //Gets current item data + long adr = GetCtrl(level)->GetItemData(i); + //Extracts the node and the type of attribute + tree::Node* nod = ((ItemData*)adr)->node; + if(i==0) + { + (*nod).GetAttributeDescriptor(mLevelList[level].key[mColumnSelected-1]).DecodeType(ty); + } + //Obtains the organizing attribute + att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected-1]); + + char* d= new char [att.size()+1]; + strcpy (d, att.c_str()); + + //Creates array + long* lp= new long[2]; + lp[0]=adr; + lp[1]=(long)d; + + //Sets it as the data + GetCtrl(level)->SetItemData(i,(long)lp); + } - //Gets current item data - long adr = GetCtrl(level)->GetItemData(i); - //Extracts the node and the type of attribute - tree::Node* nod = ((ItemData*)adr)->node; - if(i==0) - { - (*nod).GetAttributeDescriptor(mLevelList[level].key[mColumnSelected-1]).DecodeType(ty); - } - //Obtains the organizing attribute - att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected-1]); - - char* d= new char [att.size()+1]; - strcpy (d, att.c_str()); - - //Creates array - long* lp= new long[2]; - lp[0]=adr; - lp[1]=(long)d; - - //Sets it as the data - GetCtrl(level)->SetItemData(i,(long)lp); - } - - //int ty=GetAttributeDescriptor(mLevelList[level].key[mColumnSelected-1]).GetType(); - if(mDirection) - { - if(ty==1) - { - GetCtrl(level)->SortItems(CompareFunctionInts, 0); - } - else - { - GetCtrl(level)->SortItems(CompareFunctionStrings, 0); - } - - mDirection=false; - } - else - { - if(ty==1) - { - GetCtrl(level)->SortItems(CompareFunctionInts, 1); - } - else - { - GetCtrl(level)->SortItems(CompareFunctionStrings, 1); - } - mDirection=true; - } + if(mDirection) + { + if(ty==1) + { + GetCtrl(level)->SortItems(CompareFunctionInts, 0); + } + else + { + GetCtrl(level)->SortItems(CompareFunctionStrings, 0); + } + + mDirection=false; + } + else + { + if(ty==1) + { + GetCtrl(level)->SortItems(CompareFunctionInts, 1); + } + else + { + GetCtrl(level)->SortItems(CompareFunctionStrings, 1); + } + mDirection=true; + } - //Resets original data - - long it = -1; - for ( ;; ) - { - it = GetCtrl(level)->GetNextItem(it, - wxLIST_NEXT_ALL); - if ( it == -1 ) - break; - //Gets current item data, extracts the node and resets it - long item = GetCtrl(level)->GetItemData(it); - GetCtrl(level)->SetItemData(it,((long*)item)[0]); - - } + //Resets original data + + long it = -1; + for ( ;; ) + { + it = GetCtrl(level)->GetNextItem(it, + wxLIST_NEXT_ALL); + if ( it == -1 ) + break; + //Gets current item data, extracts the node and resets it + long item = GetCtrl(level)->GetItemData(it); + GetCtrl(level)->SetItemData(it,((long*)item)[0]); + + } + } } //================================================================ @@ -510,6 +511,42 @@ namespace creaImageIO event.SetClientData(&sel); GetEventHandler()->ProcessEvent( event ); } + + //================================================================ + void WxTreeView::GetNodes(std::vector& nodes, bool direction) + { + long item = mLastSelected; + int level=mLevelList.size()-1; + //Gets current item data + long adr = GetCtrl(level)->GetItemData(item); + //Extracts the node + tree::Node* nod = ((ItemData*)adr)->node; + for ( ;; ) + { + if(direction) + { + item = GetCtrl(level)->GetNextItem(item, + wxLIST_NEXT_ABOVE); + } + else + { + item = GetCtrl(level)->GetNextItem(item, + wxLIST_NEXT_BELOW); + } + if ( item == -1 ) + { + break; + } + if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0) + { + adr = GetCtrl(level)->GetItemData(item); + nod = ((ItemData*)adr)->node; + nodes.push_back(nod); + } + } + + } + //================================================================ void WxTreeView::GetSelectedAsString(std::vector&s) {