1 #include <creaImageIOWxTreeView.h>
2 #include <creaImageIOGimmickView.h>
3 #include <creaImageIOSystem.h>
4 #include <wx/splitter.h>
7 const std::string empty_string("");
9 //=====================================================================
12 //=====================================================================
13 /// Data stored by the list items
16 ItemData() : node(0), id(-1), attr(&empty_string) {}
17 // The corresponding Node
21 // The pointer on the current attribute string to sort on
22 const std::string* attr;
23 // Was the item previously selected ?
24 // Useful for reselecting the item after sort
27 //=====================================================================
29 //=====================================================================
31 //=====================================================================
32 ///Comparing function for ordering algorithm. Takes parameters as strings.
33 int wxCALLBACK CompareFunctionStrings(long item1, long item2, long sortData)
35 creaImageIO::ItemData* data1 = (creaImageIO::ItemData*)item1;
36 creaImageIO::ItemData* data2 = (creaImageIO::ItemData*)item2;
38 const std::string& s1(*(data1->attr));
39 const std::string& s2(*(data2->attr));
61 //=====================================================================
63 //=====================================================================
64 ///Comparing function for ordering algorithm. Takes parameters as ints.
65 int wxCALLBACK CompareFunctionInts(long item1, long item2, long sortData)
67 creaImageIO::ItemData* data1 = (creaImageIO::ItemData*)item1;
68 creaImageIO::ItemData* data2 = (creaImageIO::ItemData*)item2;
70 const std::string& s1(*(data1->attr));
71 const std::string& s2(*(data2->attr));
73 int val1=atoi(s1.c_str());
74 int val2=atoi(s2.c_str());
99 //=====================================================================
102 //=====================================================================
103 namespace creaImageIO
105 //=====================================================================
107 WxTreeView::WxTreeView(TreeHandler* handler,
108 GimmickView* gimmick,
111 : wxPanel(parent,id),
112 TreeView(handler,gimmick)
114 GimmickDebugMessage(1,"WxTreeView::WxTreeView"
118 // Split part below toolbar into notebook for views and panel
119 // for preview, messages...
121 // mSplitter = new wxSplitterWindow( this , -1);
124 wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
126 int ctrl_style = wxLC_REPORT | wxLC_VRULES;
127 int col_style = wxLIST_FORMAT_LEFT;
129 // Creating the ListCtrl for the levels > 0 (not for Root level)
131 i < handler->GetTree().GetNumberOfLevels();
135 GimmickDebugMessage(5,"Creating view for level "<<i
138 level.SelectedUpToDate = true;
139 level.SortColumn = 0;
141 // If the first level : parent = this
142 wxWindow* sparent = this;
143 // else parent = last splitter
144 if (i>1) sparent = mLevelList[i-2].wxSplitter;
146 level.wxSplitter = new wxSplitterWindow( sparent , -1);
149 level.wxSplitter->Show(false);
151 // level.wxSplitter->SetMinimumPaneSize(100);
153 wxListCtrl* ctrl = new wxListCtrl(level.wxSplitter,
159 level.wxSplitter->Initialize(ctrl);
162 // Create the columns : one for each attribute of the level
165 tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
166 for (a = handler->GetTree().GetAttributeDescriptorList(i).begin();
167 a != handler->GetTree().GetAttributeDescriptorList(i).end();
171 GimmickDebugMessage(5,"Creating column "<<col<<" : "
175 if(a->GetFlags()!=creaImageIO::tree::AttributeDescriptor::PRIVATE)
178 if(a->GetName()=="UNKNOWN")
181 title += handler->GetTree().GetLevelDescriptor(i+1).GetName();
182 if (title[title.size()-1]!='s')
191 ctrl->InsertColumn(col,
194 level.key.push_back(a->GetKey());
196 // ctrl->SetColumnWidth(col, wxLIST_AUTOSIZE );
203 mLevelList.push_back(level);
209 wxMenuItem* m1=menu->Append(wxID_ANY, _T("&Sort ascending"));
210 wxMenuItem* m2=menu->Append(wxID_ANY, _T("&Sort descending"));
211 wxMenuItem* m3=menu->Append(wxID_ANY, _T("&Filter"));
212 mAscendingID=m1->GetId();
213 mDescendingID=m2->GetId();
214 mFilterID=m3->GetId();
215 Connect( mAscendingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupSort) );
216 Connect( mDescendingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupSort) );
217 Connect( mFilterID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupFilter) );
219 #endif // wxUSE_MENUS
222 /// Initialize the first level splitter
224 sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW ,0);
225 // mColumnSelected=1;
230 mIgnoreSelectedChanged = false;
232 //CreateColorPalette();
240 //=====================================================================
242 //=====================================================================
244 WxTreeView::~WxTreeView()
246 GimmickDebugMessage(1,"WxTreeView::~WxTreeView"
249 //=====================================================================
253 //=====================================================================
254 const std::vector<tree::Node*>& WxTreeView::GetSelected(int level)
256 // if (GetSelectedUpToDate(level))
259 // the selection of upper level
260 std::vector<tree::Node*>& sel(mLevelList[level-1].Selected);
265 sel.push_back(GetTreeHandler()->GetTree().GetTree());
269 int n = GetCtrl(l-1)->GetItemCount();
270 for (int i = 0; i < n; i++)
272 if ( GetCtrl(l-1)->GetItemState(i,wxLIST_STATE_SELECTED))
274 long adr = GetCtrl(l-1)->GetItemData(i);
275 tree::Node* n = ((ItemData*)adr)->node;
278 std::vector<tree::Node*>::iterator it;
280 it = sel.insert ( it , n );
296 // return mLevelList[level-1].Selected;
300 //=====================================================================
302 //=====================================================================
303 ///Removes selected nodes on last selected level
305 void WxTreeView::RemoveSelected()
307 unsigned int tempLevel = mLastLevel;
309 const std::vector<tree::Node*>& sel=GetSelected(mLastLevel+1);
310 // if no selection, no remove action.
314 std::stringstream out;
315 std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
318 if(sel.size()>1&&levelName.at(levelName.size()-1)!='s')
325 out<<" "<<GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName()<<"?";
327 if (wxMessageBox(crea::std2wx(out.str()),
329 wxYES_NO,this ) == wxYES)
335 bool needRefresh=false;
336 std::vector<tree::Node*>::const_iterator i;
337 for (i=sel.begin(); i!=sel.end(); ++i)
344 if((*i)->GetParent()->GetNumberOfChildren()<2)
348 GetTreeHandler()->Remove(*i);
351 if(needRefresh && mLastLevel>1)
353 UpdateLevel(mLastLevel-2);
355 else if(mLastLevel>1)
357 UpdateLevel(mLastLevel-1);
361 UpdateLevel(mLastLevel);
367 // no need to incremente level
368 mLastLevel = tempLevel;
374 //=====================================================================
377 //=====================================================================
378 /// Updates a level of the view (adds or removes children, etc.)
379 void WxTreeView::UpdateLevel( int level )
381 GimmickDebugMessage(1,
382 GetTreeHandler()->GetTree().GetLabel()
383 <<"WxTreeView::UpdateLevel(level "
389 RecursiveUpdateLevel(level);
391 for (i=0; i<level-1; i++)
393 if (!GetSplitter(i)->IsSplit())
394 GetSplitter(i)->SplitVertically( GetCtrl(i), GetSplitter(i+1),
397 if (GetSplitter(i)->IsSplit()) GetSplitter(i)->Unsplit();
400 //=====================================================================
402 //=====================================================================
403 /// Recursive method called upon by UpdateLevel to refresh all windows
404 void WxTreeView::RecursiveUpdateLevel( int level )
406 GimmickDebugMessage(1,
407 GetTreeHandler()->GetTree().GetLabel()
408 <<"WxTreeView::RecursiveUpdateLevel(level "
413 const std::vector<tree::Node*>& sel(GetSelected(level));
417 // to speed up inserting we hide the control temporarily
419 GetCtrl(l)->DeleteAllItems();
421 std::vector<tree::Node*>::const_iterator i;
423 for (i=sel.begin(); i!=sel.end(); ++i)
425 GimmickDebugMessage(1,
426 "adding children of '"
432 //Adds items and sets their attributes
434 GetTreeHandler()->LoadChildren(*i,1);
435 tree::Node::ChildrenListType::reverse_iterator j;
436 for (j = (*i)->GetChildrenList().rbegin();
437 j!= (*i)->GetChildrenList().rend();
440 GimmickDebugMessage(1,
447 item.SetMask(wxLIST_MASK_STATE |
449 // wxLIST_MASK_IMAGE |
451 // wxLIST_MASK_WIDTH |
455 ItemData* data = new ItemData;
463 GetCtrl(l)->InsertItem(item);
467 for (int k=0; k<GetCtrl(l)->GetColumnCount(); k++)
469 std::string val = (*j)->GetAttribute(mLevelList[l].key[k]);
470 if (val.size()==0) val = "?";
471 item.SetText( crea::std2wx(val));
473 GetCtrl(l)->SetItem(item);
482 //=====================================================================
485 //================================================================
486 void WxTreeView::OnItemDeSelected(wxListEvent& event)
488 GimmickDebugMessage(1,
489 GetTreeHandler()->GetTree().GetLabel()
490 <<" WxTreeView::OnItemDeselected"<<std::endl);
491 // retrieve the level
492 wxObject* obj = event.GetEventObject();
493 unsigned int level = 0;
494 for (level = 0; level<mLevelList.size(); ++level)
496 if ( GetCtrl(level) == obj ) break;
498 SetSelectedUpToDate(level,false);
500 //================================================================
502 //================================================================
503 void WxTreeView::OnItemSelected(wxListEvent& event)
505 GimmickDebugMessage(1,
506 GetTreeHandler()->GetTree().GetLabel()
507 <<" WxTreeView::OnItemSelected"<<std::endl);
509 if (mIgnoreSelectedChanged)
511 GimmickDebugMessage(1,
512 " mIgnoreSelectedChanged true: returning"
520 info.m_itemId = event.m_itemIndex;
521 mLastSelected = event.m_itemIndex;
522 // retrieve the level
523 wxObject* obj = event.GetEventObject();
524 unsigned int level = 0;
525 for (level = 0; level<mLevelList.size(); ++level)
527 if ( GetCtrl(level) == obj ) break;
530 GimmickDebugMessage(1,
534 // Update the children level (if selection not at last level)
535 if (level<mLevelList.size()-1)
538 UpdateLevel( level + 2 );
539 // Reset the viewer setting the default image
540 GetGimmickView()->ClearSelection();
542 // Select all images if the selection is at series level
543 if (level==mLevelList.size()-2) SelectAll(level+1);
544 // Validate selected images if the selection is at image level
545 if (level==(mLevelList.size()-1)) //&&mProcess)
547 if(event.GetEventType()==10145)
549 ValidateSelectedImages (true);
553 ValidateSelectedImages (false);
558 //================================================================
560 //================================================================
561 void WxTreeView::SelectAll(int level)
564 // int level=mLevelList.size()-1;
567 item = GetCtrl(level)->GetNextItem(item,
572 if(item==(GetCtrl(level)->GetItemCount()-1))
574 mIgnoreSelectedChanged = false;//mProcess=true;
578 mIgnoreSelectedChanged = true;// mProcess=false;
580 GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE
581 | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
585 //================================================================
586 //================================================================
588 void WxTreeView::OnColClick(wxListEvent& event)
590 mColumnSelected = event.m_col;
592 clientpt.x = wxGetMousePosition().x - this->GetScreenPosition().x;
593 clientpt.y = wxGetMousePosition().y - this->GetScreenPosition().y;
594 senderCtrl = event.GetEventObject();
595 unsigned int level = 0;
596 for (level = 0; level<mLevelList.size(); ++level)
598 if ( GetCtrl(level) == senderCtrl ) break;
600 PopupMenu(menu, clientpt);
604 //================================================================
605 //================================================================
607 void WxTreeView::OnPopupFilter(wxCommandEvent& event)
610 GimmickDebugMessage(7,
611 "WxTreeView::OnEndLabelEdit"
613 wxObject* ctrl = event.GetEventObject();
614 unsigned int level = 0;
615 for (level = 0; level<mLevelList.size(); ++level)
617 if ( GetCtrl(level) == senderCtrl ) break;
619 std::string filter = crea::wx2std(wxGetTextFromUser(_T("Enter the filter to apply"), _T("Filter On Column")));
624 UpdateLevel(level+1);
626 std::vector<long> items;
631 it = GetCtrl(level)->GetNextItem(it,
636 long adr = GetCtrl(level)->GetItemData(it);
637 tree::Node* nod = ((ItemData*)adr)->node;
638 att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected]);
641 if(att.find(filter)>900)
653 items.push_back(it-del);
657 std::vector<long>::iterator iter;
658 for(iter=items.begin();iter!=items.end();++iter)
660 GetCtrl(level)->DeleteItem(*iter);
662 GetGimmickView()->ClearSelection();
664 //================================================================
666 //================================================================
667 void WxTreeView::OnPopupSort(wxCommandEvent& event)
670 unsigned int level = 0;
671 for (level = 0; level<mLevelList.size(); ++level)
673 if ( GetCtrl(level) == senderCtrl ) break;
675 mLevelList[level].SortColumn = mColumnSelected;
677 if(event.GetId()==mAscendingID)
679 mLevelList[level].SortAscending = true;
681 else if(event.GetId()==mDescendingID)
683 mLevelList[level].SortAscending = false;
688 //================================================================
690 //================================================================
691 void WxTreeView::SortLevel(int level)
693 GimmickDebugMessage(1,
694 "WxTreeView::SortLevel("
697 //Obtain the column name and the level that needs to be organized
699 // int l = level - 1;
700 //Sets the data for the items to be sorted
704 int n = GetCtrl(level)->GetItemCount();
705 for (int i = 0; i < n; i++)
708 //Gets current item data
709 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
711 //Extracts the node and the type of attribute
712 tree::Node* nod = data->node;
715 (*nod).GetAttributeDescriptor
716 (mLevelList[level].key[mLevelList[level].SortColumn])
719 //Obtains the organizing attribute
720 data->attr = & (*nod).GetAttribute
721 (mLevelList[level].key[mLevelList[level].SortColumn]);
723 data->selected = false;
724 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
726 data->selected = true;
731 GimmickDebugMessage(1,
732 "WxTreeView::OnSort : "
733 <<nbselected<<" selected before sorting"
736 mIgnoreSelectedChanged = true;
738 if (mLevelList[level].SortAscending)
743 GetCtrl(level)->SortItems(CompareFunctionInts, 0);
747 GetCtrl(level)->SortItems(CompareFunctionStrings, 0);
755 GetCtrl(level)->SortItems(CompareFunctionInts, 1);
759 GetCtrl(level)->SortItems(CompareFunctionStrings, 1);
764 // Reselects the unselected
765 n = GetCtrl(level)->GetItemCount();
767 for (int i = 0; i < n; i++)
770 //Gets current item data
771 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
776 // item = GetCtrl(level)->GetNextItem(item,wxLIST_NEXT_ALL);
777 // if ( item == -1 ) break;
778 //Gets current item data
779 // ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(item);
787 // if it is the last one we must process the selection
788 mIgnoreSelectedChanged = false;
790 GetCtrl(level)->SetItemState(i,
791 wxLIST_STATE_SELECTED,
797 | wxLIST_MASK_FORMAT);
799 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
806 mIgnoreSelectedChanged = false;
807 GimmickDebugMessage(1,
808 "WxTreeView::SortLevel : "
809 <<after<<" selected after sorting"
813 //================================================================
816 //================================================================
817 void WxTreeView::ValidateSelectedImages(bool isSelection)
819 GimmickDebugMessage(7,
820 "WxTreeView::ValidateSelectedImages"
822 const std::vector<tree::Node*>& sel(GetSelected(mLevelList.size()+1));
823 GetGimmickView()->OnSelectionChange(sel,
824 isSelection,(mLastSelected-1),
825 !mIgnoreSelectedChanged);
828 //================================================================
831 //================================================================
832 void WxTreeView::GetNodes(std::vector<tree::Node*>& nodes, bool direction)
834 long item = mLastSelected;
835 int level=mLevelList.size()-1;
836 //Gets current item data
837 long adr = GetCtrl(level)->GetItemData(item);
839 tree::Node* nod = ((ItemData*)adr)->node;
844 item = GetCtrl(level)->GetNextItem(item,
849 item = GetCtrl(level)->GetNextItem(item,
852 if ( item == -1 || item==0 )
856 if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 )
858 adr = GetCtrl(level)->GetItemData(item);
859 nod = ((ItemData*)adr)->node;
860 nodes.push_back(nod);
865 //================================================================
867 //================================================================
868 // Should be in another place : not specific !
869 void WxTreeView::GetSelectedAsString(std::vector<std::string>&s)
871 int level=mLevelList.size();
872 const std::vector<tree::Node*>& sel=GetSelected(level+1);
873 std::vector<tree::Node*>::const_iterator i;
875 for (i=sel.begin(); i!=sel.end(); ++i)
877 std::string filename=(*i)->GetAttribute("FullFileName");
878 s.push_back(filename);
882 //================================================================
883 void WxTreeView::SetColor(int l, int item)
886 GetCtrl(l)->SetItemTextColour(item, wxColourDatabase().Find
887 (crea::std2wx(mColorPalette[colorId])));
888 GetCtrl(l)->SetItemState(item,wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED); /*
890 //Setting the color according to the parent
893 item.SetBackgroundColour
894 (wxColourDatabase().Find
895 (crea::std2wx(mColorPalette[colorId])));
898 (*j,wxColourDatabase().Find
899 (crea::std2wx(mColorPalette[colorId]))));
909 else if(l!=mLevelList.size()-1)
911 item.SetBackgroundColour(mColorMap[*i]);
912 mColorMap.insert(NodeColorPair(*j,mColorMap[*i]));
916 item.SetBackgroundColour(mColorMap[*i]);
919 //================================================================
920 void WxTreeView::CreateColorPalette()
922 GimmickDebugMessage(6,"WxTreeView::CreateColorPalette");
923 mColorPalette.push_back("WHITE");
924 mColorPalette.push_back("LIGHT GREY");
925 mColorPalette.push_back("AQUAMARINE");
926 mColorPalette.push_back("MEDIUM FOREST GREEN");
927 mColorPalette.push_back("INDIAN RED");
928 mColorPalette.push_back("KHAKI");
929 mColorPalette.push_back("ORANGE");
930 mColorPalette.push_back("LIGHT BLUE");
931 mColorPalette.push_back("LIGHT STEEL BLUE");
932 mColorPalette.push_back("PINK");
933 mColorPalette.push_back("PLUM");
934 mColorPalette.push_back("PURPLE");
935 mColorPalette.push_back("RED");
936 mColorPalette.push_back("SEA GREEN");
937 mColorPalette.push_back("SIENNA");
938 mColorPalette.push_back("SKY BLUE");
939 mColorPalette.push_back("SLATE BLUE");
940 mColorPalette.push_back("SPRING GREEN");
941 mColorPalette.push_back("TAN");
942 mColorPalette.push_back("THISTLE");
943 mColorPalette.push_back("TURQUOISE");
944 mColorPalette.push_back("VIOLET");
945 mColorPalette.push_back("VIOLET RED");
946 mColorPalette.push_back("WHEAT");
947 mColorPalette.push_back("YELLOW");
948 mColorPalette.push_back("YELLOW GREEN");
949 mColorPalette.push_back("BLUE");
950 mColorPalette.push_back("BLUE VIOLET");
951 mColorPalette.push_back("BROWN");
952 mColorPalette.push_back("CADET BLUE");
953 mColorPalette.push_back("CORAL");
954 mColorPalette.push_back("CORNFLOWER BLUE");
955 mColorPalette.push_back("CYAN");
956 mColorPalette.push_back("DARK GREY");
957 mColorPalette.push_back("DARK GREEN");
958 mColorPalette.push_back("DARK OLIVE GREEN");
959 mColorPalette.push_back("DARK ORCHID");
960 mColorPalette.push_back("DARK SLATE BLUE");
961 mColorPalette.push_back("DARK SLATE GREY");
962 mColorPalette.push_back("DARK TURQUOISE");
963 mColorPalette.push_back("FIREBRICK");
964 mColorPalette.push_back("FOREST GREEN");
965 mColorPalette.push_back("GOLD");
966 mColorPalette.push_back("GOLDENROD");
967 mColorPalette.push_back("GREY");
968 mColorPalette.push_back("GREEN");
969 mColorPalette.push_back("GREEN YELLOW");
970 mColorPalette.push_back("LIME GREEN");
971 mColorPalette.push_back("MAGENTA");
972 mColorPalette.push_back("MAROON");
973 mColorPalette.push_back("MEDIUM AQUAMARINE");
974 mColorPalette.push_back("MEDIUM BLUE");
975 mColorPalette.push_back("MEDIUM GOLDENROD");
976 mColorPalette.push_back("MEDIUM ORCHID");
977 mColorPalette.push_back("MEDIUM SEA GREEN");
978 mColorPalette.push_back("MEDIUM SLATE BLUE");
979 mColorPalette.push_back("MEDIUM SPRING GREEN");
980 mColorPalette.push_back("MEDIUM TURQUOISE");
981 mColorPalette.push_back("MEDIUM VIOLET RED");
982 mColorPalette.push_back("MIDNIGHT BLUE");
983 mColorPalette.push_back("NAVY");
984 mColorPalette.push_back("ORANGE RED");
985 mColorPalette.push_back("ORCHID, PALE GREEN");
986 mColorPalette.push_back("STEEL BLUE");
987 mColorPalette.push_back("BLACK");
991 //================================================================
992 BEGIN_EVENT_TABLE(WxTreeView, wxPanel)
994 EVT_SIZE(MyFrame::OnSize)
996 EVT_MENU(LIST_QUIT, MyFrame::OnQuit)
997 EVT_MENU(LIST_ABOUT, MyFrame::OnAbout)
998 EVT_MENU(LIST_LIST_VIEW, MyFrame::OnListView)
999 EVT_MENU(LIST_REPORT_VIEW, MyFrame::OnReportView)
1000 EVT_MENU(LIST_ICON_VIEW, MyFrame::OnIconView)
1001 EVT_MENU(LIST_ICON_TEXT_VIEW, MyFrame::OnIconTextView)
1002 EVT_MENU(LIST_SMALL_ICON_VIEW, MyFrame::OnSmallIconView)
1003 EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView)
1004 EVT_MENU(LIST_VIRTUAL_VIEW, MyFrame::OnVirtualView)
1005 EVT_MENU(LIST_SMALL_VIRTUAL_VIEW, MyFrame::OnSmallVirtualView)
1007 EVT_MENU(LIST_FOCUS_LAST, MyFrame::OnFocusLast)
1008 EVT_MENU(LIST_TOGGLE_FIRST, MyFrame::OnToggleFirstSel)
1009 EVT_MENU(LIST_DESELECT_ALL, MyFrame::OnDeselectAll)
1010 EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll)
1011 EVT_MENU(LIST_DELETE, MyFrame::OnDelete)
1012 EVT_MENU(LIST_ADD, MyFrame::OnAdd)
1013 EVT_MENU(LIST_EDIT, MyFrame::OnEdit)
1014 EVT_MENU(LIST_DELETE_ALL, MyFrame::OnDeleteAll)
1015 EVT_MENU(LIST_SORT, MyFrame::OnSort)
1016 EVT_MENU(LIST_SET_FG_COL, MyFrame::OnSetFgColour)
1017 EVT_MENU(LIST_SET_BG_COL, MyFrame::OnSetBgColour)
1018 EVT_MENU(LIST_TOGGLE_MULTI_SEL, MyFrame::OnToggleMultiSel)
1019 EVT_MENU(LIST_SHOW_COL_INFO, MyFrame::OnShowColInfo)
1020 EVT_MENU(LIST_SHOW_SEL_INFO, MyFrame::OnShowSelInfo)
1021 EVT_MENU(LIST_FREEZE, MyFrame::OnFreeze)
1022 EVT_MENU(LIST_THAW, MyFrame::OnThaw)
1023 EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
1024 EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
1026 EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
1027 EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)
1030 BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
1031 EVT_LIST_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnBeginDrag)
1032 EVT_LIST_BEGIN_RDRAG(LIST_CTRL, MyListCtrl::OnBeginRDrag)
1034 EVT_LIST_BEGIN_LABEL_EDIT(-1, WxTreeView::OnBeginLabelEdit)
1035 EVT_LIST_END_LABEL_EDIT(-1, WxTreeView::OnEndLabelEdit)
1037 EVT_LIST_DELETE_ITEM(LIST_CTRL, MyListCtrl::OnDeleteItem)
1038 EVT_LIST_DELETE_ALL_ITEMS(LIST_CTRL, MyListCtrl::OnDeleteAllItems)
1039 #if WXWIN_COMPATIBILITY_2_4
1040 EVT_LIST_GET_INFO(LIST_CTRL, MyListCtrl::OnGetInfo)
1041 EVT_LIST_SET_INFO(LIST_CTRL, MyListCtrl::OnSetInfo)
1044 EVT_LIST_ITEM_SELECTED(-1, WxTreeView::OnItemSelected)
1046 EVT_LIST_ITEM_DESELECTED(-1, WxTreeView::OnItemDeSelected)
1048 EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
1049 EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
1050 EVT_LIST_ITEM_FOCUSED(LIST_CTRL, MyListCtrl::OnFocused)
1052 EVT_LIST_COL_RIGHT_CLICK(-1, WxTreeView::OnColClick)
1054 EVT_LIST_COL_CLICK(-1, WxTreeView::OnColClick)
1056 //EVT_LEFT_DOWN(WxTreeView::OnMouseClick)
1058 EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnColBeginDrag)
1059 EVT_LIST_COL_DRAGGING(LIST_CTRL, MyListCtrl::OnColDragging)
1060 EVT_LIST_COL_END_DRAG(LIST_CTRL, MyListCtrl::OnColEndDrag)
1062 EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint)
1064 #if USE_CONTEXT_MENU
1065 EVT_CONTEXT_MENU(MyListCtrl::OnContextMenu)
1067 EVT_CHAR(MyListCtrl::OnChar)
1069 EVT_RIGHT_DOWN(MyListCtrl::OnRightClick)
1073 } // EO namespace creaImageIO