From: guigues Date: Tue, 17 Feb 2009 15:33:32 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: EED.02Oct2009~190 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=0489e5c255bda4eff3b6e8df2c04ab12b8efd293;hp=4f5d636b958fd39d93125dee3bb9f2cbbbcfb122;p=creaImageIO.git *** empty log message *** --- diff --git a/src2/creaImageIOTreeView.cpp b/src2/creaImageIOTreeView.cpp index 43cb1ee..7a3f128 100644 --- a/src2/creaImageIOTreeView.cpp +++ b/src2/creaImageIOTreeView.cpp @@ -5,6 +5,7 @@ namespace creaImageIO { // CTor TreeView::TreeView(TreeHandler* handler) + : mTreeHandler(handler) { GimmickDebugMessage(1,"TreeView::TreeView" <InsertColumn(col, crea::std2wx(a->GetName()), col_style); + level.key.push_back(a->GetKey()); + // ctrl->SetColumnWidth(col, wxLIST_AUTOSIZE ); col++; } - mListCtrl.push_back(ctrl); + mLevelList.push_back(level); sizer->Add( ctrl ,1, wxGROW ,0); } + UpdateLevel(1); + SetSizer( sizer ); SetAutoLayout(true); Layout(); } + //===================================================================== + //===================================================================== /// Destructor WxTreeView::~WxTreeView() { GimmickDebugMessage(1,"WxTreeView::~WxTreeView" <GetTree().GetLabel() + <<" view : updating level "< 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); + } + } + } + + // 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); + + for (int k=0; kGetColumnCount(); k++) + { + GetCtrl(l)->SetItem + (id,k, + crea::std2wx + ( (*j)->GetAttribute(mLevelList[l].key[k]) )); + } + + } + } + + GetCtrl(l)->Show(); + } + //===================================================================== + + + //================================================================ + void WxTreeView::OnSelected(wxListEvent& event) + { + GimmickDebugMessage(1, + GetTreeHandler()->GetTree().GetLabel() + <<" view : item selected " + < #include +//#include namespace creaImageIO { @@ -26,14 +27,31 @@ namespace creaImageIO virtual ~WxTreeView(); - /// Something like that ... - virtual void UpdateView(); + /// Updates the view of a level given the selected items of upper level + virtual void UpdateLevel( int ); + /// Callback for selection change + void OnSelected(wxListEvent& event); + private: - /// The vector of wxListCtrl : one for each level of the tree - std::vector mListCtrl; + /// The struct holding the data for one level + /// Holds the wx control and other data + /// such as the vector of attribute keys corresponding to the columns + struct LevelType + { + // The + wxListCtrl* wxCtrl; + std::vector key; + }; + /// The vector of levels : one for each level of the tree + std::vector mLevelList; + /// return the wxListCtrl of one level + wxListCtrl* GetCtrl(int l) { return mLevelList[l].wxCtrl; } + + + DECLARE_EVENT_TABLE() }; // EO class WxTreeView //=====================================================================