X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOWxTreeView.cpp;h=7f2826049c77f19aa56bf9a3290d51c32ddfa38f;hb=139340305dd41bfdfff00f02a8c8c59241d14cb1;hp=fb6bcf30eafb8c68d76bd2f3e962c5c050bf709d;hpb=fcfe92562365cb738cf919d095d2f8d3608ec389;p=creaImageIO.git diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index fb6bcf3..7f28260 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -1,8 +1,10 @@ #include #include +#include namespace creaImageIO { + //===================================================================== // CTor WxTreeView::WxTreeView(TreeHandler* handler, wxWindow* parent, @@ -12,22 +14,339 @@ namespace creaImageIO { GimmickDebugMessage(1,"WxTreeView::WxTreeView" < 0 (not for Root level) + for (int i = 1; + i < handler->GetTree().GetNumberOfLevels(); + ++i) + { + GimmickDebugMessage(5,"Creating ListCtrl for level "<InsertItem(0, "1"); + + tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a; + for (a = handler->GetTree().GetAttributeDescriptorList(i).begin(); + a != handler->GetTree().GetAttributeDescriptorList(i).end(); + ++a) + { + if(col==0) + { + ctrl->InsertColumn(col, _("Children"), col_style); + //ctrl->InsertItem(0, "1"); + //level.key.push_back(_("Children")); + //level.key.push_back(handler->GetTree().GetChildrenList().size()); + col++; + } + + GimmickDebugMessage(5,"Creating column "<GetName() + <InsertColumn(col, + crea::std2wx(a->GetName()), + col_style); + level.key.push_back(a->GetKey()); + // ctrl->SetColumnWidth(col, wxLIST_AUTOSIZE ); + col++; + + + } + + mLevelList.push_back(level); + sizer->Add( ctrl ,1, wxGROW ,0); + } + + UpdateLevel(1); + + SetSizer( sizer ); + SetAutoLayout(true); + Layout(); + } + //===================================================================== + //===================================================================== /// Destructor WxTreeView::~WxTreeView() { GimmickDebugMessage(1,"WxTreeView::~WxTreeView" < WxTreeView::GetSelected(int level) { + int l = level - 1; + // the selection of upper level + std::vector sel; + + if (level == 1) + { + sel.push_back(GetTreeHandler()->GetTree().GetTree()); + } + else + { + int n = GetCtrl(l-1)->GetItemCount(); + for (int i = 0; i < n; i++) + { + if ( GetCtrl(l-1)->GetItemState(i,wxLIST_STATE_SELECTED)) + { + long adr = GetCtrl(l-1)->GetItemData(i); + tree::Node* n = ((ItemData*)adr)->node; + sel.push_back(n); + } + } + } + + return sel; } + + //===================================================================== + ///Removes selected nodes on given level + void WxTreeView::RemoveSelected( int level ) + { + std::vector sel=GetSelected(level+1); + bool erase=false; + if (wxMessageBox(_T("Delete file(s) ?"), + _T("Remove Files"), + wxYES_NO,this ) == wxYES) + { + erase = true; + } + if(erase) + { + std::vector::iterator i; + for (i=sel.begin(); i!=sel.end(); ++i) + { + GimmickDebugMessage(2, + "deleting '" + <<(*i)->GetLabel() + <<"'"<Remove(*i); + } + + UpdateLevel(level); + } + + } + + + //===================================================================== + + //===================================================================== + + /// + void WxTreeView::UpdateLevel( int level ) + { + GimmickDebugMessage(1, + GetTreeHandler()->GetTree().GetLabel() + <<" view : updating level "< sel=GetSelected(level); + + int l = level - 1; + + // to speed up inserting we hide the control temporarily + GetCtrl(l)->Hide(); + GetCtrl(l)->DeleteAllItems(); + + std::vector::iterator i; + for (i=sel.begin(); i!=sel.end(); ++i) + { + GimmickDebugMessage(2, + "adding children of '" + <<(*i)->GetLabel() + <<"'"<LoadChildren(*i,1); + tree::Node::ChildrenListType::reverse_iterator j; + for (j = (*i)->GetChildrenList().rbegin(); + j!= (*i)->GetChildrenList().rend(); + ++j) + { + wxListItem item; + item.SetMask(wxLIST_MASK_STATE | + wxLIST_MASK_TEXT | + // wxLIST_MASK_IMAGE | + wxLIST_MASK_DATA | + // wxLIST_MASK_WIDTH | + wxLIST_MASK_FORMAT + ); + + ItemData* data = new ItemData; + data->node = *j; + item.SetData(data); + + + long id = GetCtrl(l)->InsertItem(item); + + std::ostringstream oss; + + int n= GetTreeHandler()->GetNumberOfChildren(*j); + + oss << n; + std::string s(oss.str()); + + GetCtrl(l)->SetItem(id,0, crea::std2wx(s)); + GetCtrl(l)->SetColumnWidth(0, wxLIST_AUTOSIZE ); + + for (int k=1; kGetColumnCount(); k++) + { + std::string val = (*j)->GetAttribute(mLevelList[l].key[k-1]); + if (val.size()==0) val = "?"; + GetCtrl(l)->SetItem(id,k, crea::std2wx(val)); + GetCtrl(l)->SetColumnWidth(k, wxLIST_AUTOSIZE ); + + } + + } + } + + GetCtrl(l)->Show(); + + + if (levelGetTree().GetLabel() + <<" view : item selected " + <