1 #include <creaImageIOWxTreeView.h>
2 #include <creaImageIOGimmickView.h>
3 #include <creaImageIOSystem.h>
4 #include <wx/splitter.h>
7 const std::string void_string("");
9 //=====================================================================
12 //=====================================================================
13 /// Data stored by the list items
16 ItemData() : node(0), id(-1), attr(&void_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 );
290 // return mLevelList[level-1].Selected;
294 //=====================================================================
296 //=====================================================================
297 ///Removes selected nodes on last selected level
299 void WxTreeView::RemoveSelected()
302 const std::vector<tree::Node*>& sel=GetSelected(mLastLevel+1);
304 std::stringstream out;
305 std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
308 if(sel.size()>1&&levelName.at(levelName.size()-1)!='s')
315 out<<" "<<GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName()<<"?";
317 if (wxMessageBox(crea::std2wx(out.str()),
319 wxYES_NO,this ) == wxYES)
325 bool needRefresh=false;
326 std::vector<tree::Node*>::const_iterator i;
327 for (i=sel.begin(); i!=sel.end(); ++i)
334 if((*i)->GetParent()->GetNumberOfChildren()<2)
338 GetTreeHandler()->Remove(*i);
341 if(needRefresh && mLastLevel>1)
343 UpdateLevel(mLastLevel-2);
345 else if(mLastLevel>1)
347 UpdateLevel(mLastLevel-1);
351 UpdateLevel(mLastLevel);
358 //=====================================================================
361 //=====================================================================
362 /// Updates a level of the view (adds or removes children, etc.)
363 void WxTreeView::UpdateLevel( int level )
365 GimmickDebugMessage(1,
366 GetTreeHandler()->GetTree().GetLabel()
367 <<"WxTreeView::UpdateLevel(level "
373 RecursiveUpdateLevel(level);
375 for (i=0; i<level-1; i++)
377 if (!GetSplitter(i)->IsSplit())
378 GetSplitter(i)->SplitVertically( GetCtrl(i), GetSplitter(i+1),
381 if (GetSplitter(i)->IsSplit()) GetSplitter(i)->Unsplit();
384 //=====================================================================
386 //=====================================================================
387 /// Recursive method called upon by UpdateLevel to refresh all windows
388 void WxTreeView::RecursiveUpdateLevel( int level )
390 GimmickDebugMessage(1,
391 GetTreeHandler()->GetTree().GetLabel()
392 <<"WxTreeView::RecursiveUpdateLevel(level "
397 const std::vector<tree::Node*>& sel(GetSelected(level));
401 // to speed up inserting we hide the control temporarily
403 GetCtrl(l)->DeleteAllItems();
405 std::vector<tree::Node*>::const_iterator i;
407 for (i=sel.begin(); i!=sel.end(); ++i)
409 GimmickDebugMessage(2,
410 "adding children of '"
416 //Adds items and sets their attributes
417 //GetCtrl(l)->InsertItem(0, _T(""));
418 GetTreeHandler()->LoadChildren(*i,1);
419 tree::Node::ChildrenListType::reverse_iterator j;
420 for (j = (*i)->GetChildrenList().rbegin();
421 j!= (*i)->GetChildrenList().rend();
424 wxListItem* item= new wxListItem;
425 item->SetMask(wxLIST_MASK_STATE |
427 // wxLIST_MASK_IMAGE |
429 // wxLIST_MASK_WIDTH |
433 ItemData* data = new ItemData;
442 GetCtrl(l)->InsertItem(*item);
446 for (int k=0; k<GetCtrl(l)->GetColumnCount(); k++)
448 std::string val = (*j)->GetAttribute(mLevelList[l].key[k]);
449 if (val.size()==0) val = "?";
450 item->SetText( crea::std2wx(val));
452 GetCtrl(l)->SetItem(*item);
456 //GetCtrl(l)->DeleteItem(0);
466 //=====================================================================
469 //================================================================
470 void WxTreeView::OnItemDeSelected(wxListEvent& event)
472 GimmickDebugMessage(1,
473 GetTreeHandler()->GetTree().GetLabel()
474 <<" WxTreeView::OnItemDeselected"<<std::endl);
475 // retrieve the level
476 wxObject* obj = event.GetEventObject();
477 unsigned int level = 0;
478 for (level = 0; level<mLevelList.size(); ++level)
480 if ( GetCtrl(level) == obj ) break;
482 SetSelectedUpToDate(level,false);
484 //================================================================
486 //================================================================
487 void WxTreeView::OnItemSelected(wxListEvent& event)
489 GimmickDebugMessage(1,
490 GetTreeHandler()->GetTree().GetLabel()
491 <<" WxTreeView::OnItemSelected"<<std::endl);
493 if (mIgnoreSelectedChanged)
495 GimmickDebugMessage(1,
496 " mIgnoreSelectedChanged true: returning"
504 info.m_itemId = event.m_itemIndex;
505 mLastSelected = event.m_itemIndex;
506 // retrieve the level
507 wxObject* obj = event.GetEventObject();
508 unsigned int level = 0;
509 for (level = 0; level<mLevelList.size(); ++level)
511 if ( GetCtrl(level) == obj ) break;
514 GimmickDebugMessage(1,
518 // Update the children level (if selection not at last level)
519 if (level<mLevelList.size()-1)
522 UpdateLevel( level + 2 );
523 // Reset the viewer setting the default image
524 GetGimmickView()->ClearSelection();
526 // Select all images if the selection is at series level
527 if (level==mLevelList.size()-2) SelectAll(level+1);
528 // Validate selected images if the selection is at image level
529 if (level==(mLevelList.size()-1)) //&&mProcess)
531 if(event.GetEventType()==10145)
533 ValidateSelectedImages (true);
537 ValidateSelectedImages (false);
542 //================================================================
544 //================================================================
545 void WxTreeView::SelectAll(int level)
548 // int level=mLevelList.size()-1;
551 item = GetCtrl(level)->GetNextItem(item,
556 if(item==(GetCtrl(level)->GetItemCount()-1))
558 mIgnoreSelectedChanged = false;//mProcess=true;
562 mIgnoreSelectedChanged = true;// mProcess=false;
564 GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE
565 | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
569 //================================================================
570 //================================================================
572 void WxTreeView::OnColClick(wxListEvent& event)
574 mColumnSelected = event.m_col;
576 clientpt.x = wxGetMousePosition().x - this->GetScreenPosition().x;
577 clientpt.y = wxGetMousePosition().y - this->GetScreenPosition().y;
578 senderCtrl = event.GetEventObject();
579 unsigned int level = 0;
580 for (level = 0; level<mLevelList.size(); ++level)
582 if ( GetCtrl(level) == senderCtrl ) break;
584 PopupMenu(menu, clientpt);
588 //================================================================
589 //================================================================
591 void WxTreeView::OnPopupFilter(wxCommandEvent& event)
594 GimmickDebugMessage(7,
595 "WxTreeView::OnEndLabelEdit"
597 wxObject* ctrl = event.GetEventObject();
598 unsigned int level = 0;
599 for (level = 0; level<mLevelList.size(); ++level)
601 if ( GetCtrl(level) == senderCtrl ) break;
603 std::string filter = crea::wx2std(wxGetTextFromUser(_T("Enter the filter to apply"), _T("Filter On Column")));
608 UpdateLevel(level+1);
610 std::vector<long> items;
615 it = GetCtrl(level)->GetNextItem(it,
620 long adr = GetCtrl(level)->GetItemData(it);
621 tree::Node* nod = ((ItemData*)adr)->node;
622 att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected]);
625 if(att.find(filter)>900)
637 items.push_back(it-del);
641 std::vector<long>::iterator iter;
642 for(iter=items.begin();iter!=items.end();++iter)
644 GetCtrl(level)->DeleteItem(*iter);
646 GetGimmickView()->ClearSelection();
648 //================================================================
650 //================================================================
651 void WxTreeView::OnPopupSort(wxCommandEvent& event)
654 unsigned int level = 0;
655 for (level = 0; level<mLevelList.size(); ++level)
657 if ( GetCtrl(level) == senderCtrl ) break;
659 mLevelList[level].SortColumn = mColumnSelected;
661 if(event.GetId()==mAscendingID)
663 mLevelList[level].SortAscending = true;
665 else if(event.GetId()==mDescendingID)
667 mLevelList[level].SortAscending = false;
672 //================================================================
674 //================================================================
675 void WxTreeView::SortLevel(int level)
677 GimmickDebugMessage(1,
678 "WxTreeView::SortLevel("
681 //Obtain the column name and the level that needs to be organized
683 // int l = level - 1;
684 //Sets the data for the items to be sorted
688 int n = GetCtrl(level)->GetItemCount();
689 for (int i = 0; i < n; i++)
692 //Gets current item data
693 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
695 //Extracts the node and the type of attribute
696 tree::Node* nod = data->node;
699 (*nod).GetAttributeDescriptor
700 (mLevelList[level].key[mLevelList[level].SortColumn])
703 //Obtains the organizing attribute
704 data->attr = & (*nod).GetAttribute
705 (mLevelList[level].key[mLevelList[level].SortColumn]);
707 data->selected = false;
708 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
710 data->selected = true;
715 GimmickDebugMessage(1,
716 "WxTreeView::OnSort : "
717 <<nbselected<<" selected before sorting"
720 mIgnoreSelectedChanged = true;
722 if (mLevelList[level].SortAscending)
727 GetCtrl(level)->SortItems(CompareFunctionInts, 0);
731 GetCtrl(level)->SortItems(CompareFunctionStrings, 0);
739 GetCtrl(level)->SortItems(CompareFunctionInts, 1);
743 GetCtrl(level)->SortItems(CompareFunctionStrings, 1);
748 // Reselects the unselected
749 n = GetCtrl(level)->GetItemCount();
751 for (int i = 0; i < n; i++)
754 //Gets current item data
755 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
760 // item = GetCtrl(level)->GetNextItem(item,wxLIST_NEXT_ALL);
761 // if ( item == -1 ) break;
762 //Gets current item data
763 // ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(item);
771 // if it is the last one we must process the selection
772 mIgnoreSelectedChanged = false;
774 GetCtrl(level)->SetItemState(i,
775 wxLIST_STATE_SELECTED,
781 | wxLIST_MASK_FORMAT);
783 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
790 mIgnoreSelectedChanged = false;
791 GimmickDebugMessage(1,
792 "WxTreeView::SortLevel : "
793 <<after<<" selected after sorting"
797 //================================================================
800 //================================================================
801 void WxTreeView::ValidateSelectedImages(bool isSelection)
803 GimmickDebugMessage(7,
804 "WxTreeView::ValidateSelectedImages"
806 const std::vector<tree::Node*>& sel(GetSelected(mLevelList.size()+1));
807 GetGimmickView()->OnSelectionChange(sel,
808 isSelection,(mLastSelected-1),
809 !mIgnoreSelectedChanged);
812 //================================================================
815 //================================================================
816 void WxTreeView::GetNodes(std::vector<tree::Node*>& nodes, bool direction)
818 long item = mLastSelected;
819 int level=mLevelList.size()-1;
820 //Gets current item data
821 long adr = GetCtrl(level)->GetItemData(item);
823 tree::Node* nod = ((ItemData*)adr)->node;
828 item = GetCtrl(level)->GetNextItem(item,
833 item = GetCtrl(level)->GetNextItem(item,
836 if ( item == -1 || item==0 )
840 if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 )
842 adr = GetCtrl(level)->GetItemData(item);
843 nod = ((ItemData*)adr)->node;
844 nodes.push_back(nod);
849 //================================================================
851 //================================================================
852 // Should be in another place : not specific !
853 void WxTreeView::GetSelectedAsString(std::vector<std::string>&s)
855 int level=mLevelList.size();
856 const std::vector<tree::Node*>& sel=GetSelected(level+1);
857 std::vector<tree::Node*>::const_iterator i;
859 for (i=sel.begin(); i!=sel.end(); ++i)
861 std::string filename=(*i)->GetAttribute("FullFileName");
862 s.push_back(filename);
866 //================================================================
867 void WxTreeView::SetColor(int l, int item)
870 GetCtrl(l)->SetItemTextColour(item, wxColourDatabase().Find
871 (crea::std2wx(mColorPalette[colorId])));
872 GetCtrl(l)->SetItemState(item,wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED); /*
874 //Setting the color according to the parent
877 item.SetBackgroundColour
878 (wxColourDatabase().Find
879 (crea::std2wx(mColorPalette[colorId])));
882 (*j,wxColourDatabase().Find
883 (crea::std2wx(mColorPalette[colorId]))));
893 else if(l!=mLevelList.size()-1)
895 item.SetBackgroundColour(mColorMap[*i]);
896 mColorMap.insert(NodeColorPair(*j,mColorMap[*i]));
900 item.SetBackgroundColour(mColorMap[*i]);
903 //================================================================
904 void WxTreeView::CreateColorPalette()
906 GimmickDebugMessage(6,"WxTreeView::CreateColorPalette");
907 mColorPalette.push_back("WHITE");
908 mColorPalette.push_back("LIGHT GREY");
909 mColorPalette.push_back("AQUAMARINE");
910 mColorPalette.push_back("MEDIUM FOREST GREEN");
911 mColorPalette.push_back("INDIAN RED");
912 mColorPalette.push_back("KHAKI");
913 mColorPalette.push_back("ORANGE");
914 mColorPalette.push_back("LIGHT BLUE");
915 mColorPalette.push_back("LIGHT STEEL BLUE");
916 mColorPalette.push_back("PINK");
917 mColorPalette.push_back("PLUM");
918 mColorPalette.push_back("PURPLE");
919 mColorPalette.push_back("RED");
920 mColorPalette.push_back("SEA GREEN");
921 mColorPalette.push_back("SIENNA");
922 mColorPalette.push_back("SKY BLUE");
923 mColorPalette.push_back("SLATE BLUE");
924 mColorPalette.push_back("SPRING GREEN");
925 mColorPalette.push_back("TAN");
926 mColorPalette.push_back("THISTLE");
927 mColorPalette.push_back("TURQUOISE");
928 mColorPalette.push_back("VIOLET");
929 mColorPalette.push_back("VIOLET RED");
930 mColorPalette.push_back("WHEAT");
931 mColorPalette.push_back("YELLOW");
932 mColorPalette.push_back("YELLOW GREEN");
933 mColorPalette.push_back("BLUE");
934 mColorPalette.push_back("BLUE VIOLET");
935 mColorPalette.push_back("BROWN");
936 mColorPalette.push_back("CADET BLUE");
937 mColorPalette.push_back("CORAL");
938 mColorPalette.push_back("CORNFLOWER BLUE");
939 mColorPalette.push_back("CYAN");
940 mColorPalette.push_back("DARK GREY");
941 mColorPalette.push_back("DARK GREEN");
942 mColorPalette.push_back("DARK OLIVE GREEN");
943 mColorPalette.push_back("DARK ORCHID");
944 mColorPalette.push_back("DARK SLATE BLUE");
945 mColorPalette.push_back("DARK SLATE GREY");
946 mColorPalette.push_back("DARK TURQUOISE");
947 mColorPalette.push_back("FIREBRICK");
948 mColorPalette.push_back("FOREST GREEN");
949 mColorPalette.push_back("GOLD");
950 mColorPalette.push_back("GOLDENROD");
951 mColorPalette.push_back("GREY");
952 mColorPalette.push_back("GREEN");
953 mColorPalette.push_back("GREEN YELLOW");
954 mColorPalette.push_back("LIME GREEN");
955 mColorPalette.push_back("MAGENTA");
956 mColorPalette.push_back("MAROON");
957 mColorPalette.push_back("MEDIUM AQUAMARINE");
958 mColorPalette.push_back("MEDIUM BLUE");
959 mColorPalette.push_back("MEDIUM GOLDENROD");
960 mColorPalette.push_back("MEDIUM ORCHID");
961 mColorPalette.push_back("MEDIUM SEA GREEN");
962 mColorPalette.push_back("MEDIUM SLATE BLUE");
963 mColorPalette.push_back("MEDIUM SPRING GREEN");
964 mColorPalette.push_back("MEDIUM TURQUOISE");
965 mColorPalette.push_back("MEDIUM VIOLET RED");
966 mColorPalette.push_back("MIDNIGHT BLUE");
967 mColorPalette.push_back("NAVY");
968 mColorPalette.push_back("ORANGE RED");
969 mColorPalette.push_back("ORCHID, PALE GREEN");
970 mColorPalette.push_back("STEEL BLUE");
971 mColorPalette.push_back("BLACK");
975 //================================================================
976 BEGIN_EVENT_TABLE(WxTreeView, wxPanel)
978 EVT_SIZE(MyFrame::OnSize)
980 EVT_MENU(LIST_QUIT, MyFrame::OnQuit)
981 EVT_MENU(LIST_ABOUT, MyFrame::OnAbout)
982 EVT_MENU(LIST_LIST_VIEW, MyFrame::OnListView)
983 EVT_MENU(LIST_REPORT_VIEW, MyFrame::OnReportView)
984 EVT_MENU(LIST_ICON_VIEW, MyFrame::OnIconView)
985 EVT_MENU(LIST_ICON_TEXT_VIEW, MyFrame::OnIconTextView)
986 EVT_MENU(LIST_SMALL_ICON_VIEW, MyFrame::OnSmallIconView)
987 EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView)
988 EVT_MENU(LIST_VIRTUAL_VIEW, MyFrame::OnVirtualView)
989 EVT_MENU(LIST_SMALL_VIRTUAL_VIEW, MyFrame::OnSmallVirtualView)
991 EVT_MENU(LIST_FOCUS_LAST, MyFrame::OnFocusLast)
992 EVT_MENU(LIST_TOGGLE_FIRST, MyFrame::OnToggleFirstSel)
993 EVT_MENU(LIST_DESELECT_ALL, MyFrame::OnDeselectAll)
994 EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll)
995 EVT_MENU(LIST_DELETE, MyFrame::OnDelete)
996 EVT_MENU(LIST_ADD, MyFrame::OnAdd)
997 EVT_MENU(LIST_EDIT, MyFrame::OnEdit)
998 EVT_MENU(LIST_DELETE_ALL, MyFrame::OnDeleteAll)
999 EVT_MENU(LIST_SORT, MyFrame::OnSort)
1000 EVT_MENU(LIST_SET_FG_COL, MyFrame::OnSetFgColour)
1001 EVT_MENU(LIST_SET_BG_COL, MyFrame::OnSetBgColour)
1002 EVT_MENU(LIST_TOGGLE_MULTI_SEL, MyFrame::OnToggleMultiSel)
1003 EVT_MENU(LIST_SHOW_COL_INFO, MyFrame::OnShowColInfo)
1004 EVT_MENU(LIST_SHOW_SEL_INFO, MyFrame::OnShowSelInfo)
1005 EVT_MENU(LIST_FREEZE, MyFrame::OnFreeze)
1006 EVT_MENU(LIST_THAW, MyFrame::OnThaw)
1007 EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
1008 EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
1010 EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
1011 EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)
1014 BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
1015 EVT_LIST_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnBeginDrag)
1016 EVT_LIST_BEGIN_RDRAG(LIST_CTRL, MyListCtrl::OnBeginRDrag)
1018 EVT_LIST_BEGIN_LABEL_EDIT(-1, WxTreeView::OnBeginLabelEdit)
1019 EVT_LIST_END_LABEL_EDIT(-1, WxTreeView::OnEndLabelEdit)
1021 EVT_LIST_DELETE_ITEM(LIST_CTRL, MyListCtrl::OnDeleteItem)
1022 EVT_LIST_DELETE_ALL_ITEMS(LIST_CTRL, MyListCtrl::OnDeleteAllItems)
1023 #if WXWIN_COMPATIBILITY_2_4
1024 EVT_LIST_GET_INFO(LIST_CTRL, MyListCtrl::OnGetInfo)
1025 EVT_LIST_SET_INFO(LIST_CTRL, MyListCtrl::OnSetInfo)
1028 EVT_LIST_ITEM_SELECTED(-1, WxTreeView::OnItemSelected)
1030 EVT_LIST_ITEM_DESELECTED(-1, WxTreeView::OnItemDeSelected)
1032 EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
1033 EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
1034 EVT_LIST_ITEM_FOCUSED(LIST_CTRL, MyListCtrl::OnFocused)
1036 EVT_LIST_COL_RIGHT_CLICK(-1, WxTreeView::OnColClick)
1038 EVT_LIST_COL_CLICK(-1, WxTreeView::OnColClick)
1040 //EVT_LEFT_DOWN(WxTreeView::OnMouseClick)
1042 EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnColBeginDrag)
1043 EVT_LIST_COL_DRAGGING(LIST_CTRL, MyListCtrl::OnColDragging)
1044 EVT_LIST_COL_END_DRAG(LIST_CTRL, MyListCtrl::OnColEndDrag)
1046 EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint)
1048 #if USE_CONTEXT_MENU
1049 EVT_CONTEXT_MENU(MyListCtrl::OnContextMenu)
1051 EVT_CHAR(MyListCtrl::OnChar)
1053 EVT_RIGHT_DOWN(MyListCtrl::OnRightClick)
1057 } // EO namespace creaImageIO