From 30884aa5b38b1dd705ee427b9fb72eb911f08bc3 Mon Sep 17 00:00:00 2001 From: caballero Date: Fri, 13 Mar 2009 15:49:35 +0000 Subject: [PATCH] Added filtering --- appli/TestWxGimmickReaderDialog/main.cxx | 2 +- src2/creaImageIOGimmickView.cpp | 20 ++- src2/creaImageIOWxGimmickView.cpp | 2 +- src2/creaImageIOWxTreeView.cpp | 157 ++++++++++++++++------- src2/creaImageIOWxTreeView.h | 6 + src2/creaImageIOWxViewer.cpp | 5 +- 6 files changed, 141 insertions(+), 51 deletions(-) diff --git a/appli/TestWxGimmickReaderDialog/main.cxx b/appli/TestWxGimmickReaderDialog/main.cxx index d6d179c..7c9dce1 100644 --- a/appli/TestWxGimmickReaderDialog/main.cxx +++ b/appli/TestWxGimmickReaderDialog/main.cxx @@ -38,7 +38,7 @@ bool myApp::OnInit( ) -1, _T("Select image(s) - Gimmick! (c) CREATIS-LRMN 2008"), wxDefaultPosition, - wxSize(600,800), + wxSize(600,750), min_dim, max_dim, output_dim, diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index ca9113c..a1c29ce 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -288,8 +288,10 @@ namespace creaImageIO MultiThreadImageReaderUser::EventType e, vtkImageData* image) { - GimmickDebugMessage(5, + GimmickDebugMessage(7, "MultiThreadImageReader event : "<SetMinimumPaneSize( bottom_minsize ); diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index 20bd9ab..a790c03 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -82,7 +82,7 @@ namespace creaImageIO // Global sizer wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); - int ctrl_style = wxLC_REPORT | wxLC_VRULES; + int ctrl_style = wxLC_REPORT | /*wxLC_VRULES |*/ wxLC_EDIT_LABELS; int col_style = wxLIST_FORMAT_LEFT; // Creating the ListCtrl for the levels > 0 (not for Root level) @@ -113,7 +113,6 @@ namespace creaImageIO // Create the columns : one for each attribute of the level int col = 0; - tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a; for (a = handler->GetTree().GetAttributeDescriptorList(i).begin(); a != handler->GetTree().GetAttributeDescriptorList(i).end(); @@ -293,6 +292,8 @@ namespace creaImageIO GetCtrl(l)->DeleteAllItems(); std::vector::iterator i; + //Adds the first item (filter) + GetCtrl(l)->InsertItem(0, "Filter:"); for (i=sel.begin(); i!=sel.end(); ++i) { GimmickDebugMessage(2, @@ -300,9 +301,12 @@ namespace creaImageIO <<(*i)->GetLabel() <<"'"<LoadChildren(*i,1); tree::Node::ChildrenListType::reverse_iterator j; for (j = (*i)->GetChildrenList().rbegin(); @@ -329,16 +333,13 @@ namespace creaImageIO _id++; long id=GetCtrl(l)->InsertItem(item); + //Setting first column (number of children) std::ostringstream oss; int n= GetTreeHandler()->GetNumberOfChildren(*j); - oss << n; std::string s(oss.str()); - - item.SetText( crea::std2wx(s)); - // item.SetTextColour(*wxRED); - + //Setting the color according to the parent if(l==0) { @@ -367,23 +368,15 @@ namespace creaImageIO item.SetColumn(0); GetCtrl(l)->SetItem(item); - // GetCtrl(l)->SetItem(id,0, crea::std2wx(s)); - // GetCtrl(l)->SetColumnWidth(0, wxLIST_AUTOSIZE ); - + //Setting other attributes for (int k=1; kGetColumnCount(); k++) { std::string val = (*j)->GetAttribute(mLevelList[l].key[k-1]); if (val.size()==0) val = "?"; item.SetText( crea::std2wx(val)); - // item.SetTextColour(*wxBLACK); - // item.SetBackgroundColour(*wxWHITE); item.SetColumn(k); - GetCtrl(l)->SetItem(item); - - // GetCtrl(l)->SetItem(id,k, crea::std2wx(val)); - // GetCtrl(l)->SetColumnWidth(k, wxLIST_AUTOSIZE ); - + GetCtrl(l)->SetItem(item); } } } @@ -408,34 +401,46 @@ 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; - for (level = 0; levelClearSelection(); + } + if (level==mLevelList.size()-2) SelectLowerLevel(); + if (level==mLevelList.size()-1) ValidateSelectedImages (); } else { - mLastLevelSelected=GetSelected(level+2); - } - - if (levelClearSelection(); + if(event.GetEventType()==10145) + { + + GetCtrl(level)->SetItemText(0,crea::std2wx("")); + GetCtrl(level)->EditLabel(event.m_itemIndex); + } + } - if (level==mLevelList.size()-2) SelectLowerLevel(); - if (level==mLevelList.size()-1) ValidateSelectedImages (); } //================================================================ @@ -451,9 +456,11 @@ namespace creaImageIO wxLIST_NEXT_ALL); if ( item == -1 ) break; - + if(item!=0) + { GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT); + } } @@ -479,12 +486,10 @@ namespace creaImageIO if ( GetCtrl(level) == ctrl ) break; } - UpdateLevel(level+1); - wxBusyCursor busy; int l = level - 1; - + GetCtrl(level)->DeleteItem(0); //Sets the data for the items to be sorted std::string att; unsigned int ty=0; @@ -551,6 +556,7 @@ namespace creaImageIO 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]); @@ -576,6 +582,7 @@ namespace creaImageIO } } + } //Resets the selected items std::vector::iterator selectedIts; @@ -585,12 +592,68 @@ namespace creaImageIO | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT); } + GetCtrl(level)->InsertItem(0,"Filter:"); } } //================================================================ + void WxTreeView::OnBeginLabelEdit(wxListEvent& event) + { + GimmickDebugMessage(7, + "WxTreeView::OnBeginLabelEdit" + <GetNextItem(it, + wxLIST_NEXT_ALL); + if ( it == -1 ) + break; + if(it!=0) + { + long adr = GetCtrl(level)->GetItemData(it); + for (int j=1;jGetColumnCount()-1&&!contains;j++) + { + tree::Node* nod = ((ItemData*)adr)->node; + att=(*nod).GetAttribute(mLevelList[level].key[j-1]); + + if(att.find(filter)<900) + { + contains=true; + } + } + if(!contains) + { + GetCtrl(level)->DeleteItem(it); + } + } + } + GetGimmickView()->ClearSelection(); + //GetCtrl(level)->DeleteAllItems(); + } //================================================================ void WxTreeView::ValidateSelectedImages() { @@ -625,11 +688,11 @@ namespace creaImageIO item = GetCtrl(level)->GetNextItem(item, wxLIST_NEXT_BELOW); } - if ( item == -1 ) + if ( item == -1 ) { break; } - if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0) + if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 && item!=0) { adr = GetCtrl(level)->GetItemData(item); nod = ((ItemData*)adr)->node; @@ -767,8 +830,10 @@ END_EVENT_TABLE() BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl) EVT_LIST_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnBeginDrag) EVT_LIST_BEGIN_RDRAG(LIST_CTRL, MyListCtrl::OnBeginRDrag) - EVT_LIST_BEGIN_LABEL_EDIT(LIST_CTRL, MyListCtrl::OnBeginLabelEdit) - EVT_LIST_END_LABEL_EDIT(LIST_CTRL, MyListCtrl::OnEndLabelEdit) + */ + EVT_LIST_BEGIN_LABEL_EDIT(-1, WxTreeView::OnBeginLabelEdit) + EVT_LIST_END_LABEL_EDIT(-1, WxTreeView::OnEndLabelEdit) + /* EVT_LIST_DELETE_ITEM(LIST_CTRL, MyListCtrl::OnDeleteItem) EVT_LIST_DELETE_ALL_ITEMS(LIST_CTRL, MyListCtrl::OnDeleteAllItems) #if WXWIN_COMPATIBILITY_2_4 diff --git a/src2/creaImageIOWxTreeView.h b/src2/creaImageIOWxTreeView.h index a010f94..a2c6026 100644 --- a/src2/creaImageIOWxTreeView.h +++ b/src2/creaImageIOWxTreeView.h @@ -42,6 +42,12 @@ namespace creaImageIO /// Callback for column click void OnColClick(wxListEvent& event); + /// Callback for first item edition + void OnBeginLabelEdit(wxListEvent& event); + + /// Callback when first item edition ends + void OnEndLabelEdit(wxListEvent& event); + private: /// The struct holding the data for one level /// Holds the wx control and other data diff --git a/src2/creaImageIOWxViewer.cpp b/src2/creaImageIOWxViewer.cpp index 563d7fb..cec086b 100644 --- a/src2/creaImageIOWxViewer.cpp +++ b/src2/creaImageIOWxViewer.cpp @@ -165,6 +165,7 @@ namespace creaImageIO void WxViewer::ShowNextImage() { wxMutexLocker lock(mMutex); + /* GimmickMessage(1,"WxViewer::ShowNextImage() " <SetInput(im); + mViewer->SetSlice( 0 ); int x1,x2,y1,y2,z1,z2; @@ -290,9 +292,8 @@ namespace creaImageIO if (mNeedRefresh) { GimmickMessage(1,"WxViewer : Refreshing"<Render(); - // mViewer->Render(); - // Refresh(); mNeedRefresh = false; return true; } -- 2.45.1