1 #include <creaImageIOWxTreeView.h>
2 #include <creaImageIOGimmickView.h>
3 #include <creaImageIOSystem.h>
4 #include <wx/splitter.h>
6 #include <boost/date_time/gregorian/gregorian.hpp>
12 const std::string empty_string("");
14 //=====================================================================
17 //=====================================================================
18 /// Data stored by the list items
21 ItemData() : node(0), id(-1), attr(&empty_string) {}
22 // The corresponding Node
26 // The pointer on the current attribute string to sort on
27 const std::string* attr;
28 // Was the item previously selected ?
29 // Useful for reselecting the item after sort
32 //=====================================================================
34 //=====================================================================
36 //=====================================================================
37 ///Comparing function for ordering algorithm. Takes parameters as strings.
38 int wxCALLBACK CompareFunctionStrings(long item1, long item2, long sortData)
40 creaImageIO::ItemData* data1 = (creaImageIO::ItemData*)item1;
41 creaImageIO::ItemData* data2 = (creaImageIO::ItemData*)item2;
43 const std::string& s1(*(data1->attr));
44 const std::string& s2(*(data2->attr));
66 //=====================================================================
68 //=====================================================================
69 ///Comparing function for ordering algorithm. Takes parameters as ints.
70 int wxCALLBACK CompareFunctionInts(long item1, long item2, long sortData)
72 creaImageIO::ItemData* data1 = (creaImageIO::ItemData*)item1;
73 creaImageIO::ItemData* data2 = (creaImageIO::ItemData*)item2;
75 const std::string& s1(*(data1->attr));
76 const std::string& s2(*(data2->attr));
78 int val1=atoi(s1.c_str());
79 int val2=atoi(s2.c_str());
104 //=====================================================================
107 //=====================================================================
108 namespace creaImageIO
110 //=====================================================================
112 WxTreeView::WxTreeView(TreeHandler* handler,
113 GimmickView* gimmick,
116 : wxPanel(parent,id),
117 TreeView(handler,gimmick)
119 GimmickDebugMessage(1,"WxTreeView::WxTreeView"
123 // Split part below toolbar into notebook for views and panel
124 // for preview, messages...
126 // mSplitter = new wxSplitterWindow( this , -1);
129 wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
131 int ctrl_style = wxLC_REPORT | wxLC_VRULES;
132 int col_style = wxLIST_FORMAT_LEFT;
134 // Creating the ListCtrl for the levels > 0 (not for Root level)
136 i < handler->GetTree().GetNumberOfLevels() -1;
140 GimmickDebugMessage(5,"Creating view for level "<<i
143 level.SelectedUpToDate = true;
144 level.SortColumn = 0;
146 // If the first level : parent = this
147 wxWindow* sparent = this;
148 // else parent = last splitter
150 sparent = mLevelList[i-1].wxSplitter;
152 level.wxSplitter = new wxSplitterWindow( sparent , -1);
155 level.wxSplitter->Show(false);
157 // level.wxSplitter->SetMinimumPaneSize(100);
159 wxListCtrl* ctrl = new wxListCtrl(level.wxSplitter,
165 level.wxSplitter->Initialize(ctrl);
168 // Create the columns : one for each attribute of the level
171 tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
172 for (a = handler->GetTree().GetAttributeDescriptorList(i+1).begin();
173 a != handler->GetTree().GetAttributeDescriptorList(i+1).end();
178 GimmickDebugMessage(5,"Creating column "<<col<<" : "
182 if(a->GetFlags()!=creaImageIO::tree::AttributeDescriptor::PRIVATE)
185 if(a->GetName()=="UNKNOWN")
188 title += handler->GetTree().GetLevelDescriptor(i+1).GetName();
189 if (title[title.size()-1]!='s')
197 std::string temp = a->GetKey();
198 if (temp.compare("ID") != 0)
200 ctrl->InsertColumn(col,
205 level.key.push_back(a->GetKey());
207 // ctrl->SetColumnWidth(col, wxLIST_AUTOSIZE );
214 mLevelList.push_back(level);
220 wxMenuItem* m1=menu->Append(wxID_ANY, _T("&Sort ascending"));
221 wxMenuItem* m2=menu->Append(wxID_ANY, _T("&Sort descending"));
222 wxMenuItem* m3=menu->Append(wxID_ANY, _T("&Filter"));
223 mAscendingID=m1->GetId();
224 mDescendingID=m2->GetId();
225 mFilterID=m3->GetId();
226 Connect( mAscendingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupSort) );
227 Connect( mDescendingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupSort) );
228 Connect( mFilterID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupFilter) );
230 #endif // wxUSE_MENUS
233 /// Initialize the first level splitter
235 sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW ,0);
236 // mColumnSelected=1;
241 mIgnoreSelectedChanged = false;
243 //CreateColorPalette();
251 //=====================================================================
253 //=====================================================================
255 WxTreeView::~WxTreeView()
257 GimmickDebugMessage(1,"WxTreeView::~WxTreeView"
260 //=====================================================================
264 //=====================================================================
265 const std::vector<tree::Node*>& WxTreeView::GetSelected(int level)
267 // if (GetSelectedUpToDate(level))
270 // the selection of upper level
271 std::vector<tree::Node*>& sel(mLevelList[level-1].Selected);
276 sel.push_back(GetTreeHandler()->GetTree().GetTree());
280 int n = GetCtrl(l-1)->GetItemCount();
281 for (int i = 0; i < n; i++)
283 if ( GetCtrl(l-1)->GetItemState(i,wxLIST_STATE_SELECTED))
285 long adr = GetCtrl(l-1)->GetItemData(i);
286 tree::Node* n = ((ItemData*)adr)->node;
289 std::vector<tree::Node*>::iterator it;
291 it = sel.insert ( it , n );
307 // return mLevelList[level-1].Selected;
311 //=====================================================================
313 //=====================================================================
314 ///Removes selected nodes on last selected level
316 void WxTreeView::RemoveSelected()
318 unsigned int tempLevel = mLastLevel;
320 const std::vector<tree::Node*>& sel=GetSelected(mLastLevel+1);
321 // if no selection, no remove action.
325 std::stringstream out;
326 std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
329 if(sel.size()>1&&levelName.at(levelName.size()-1)!='s')
336 out<<" "<<GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName()<<"?";
338 if (wxMessageBox(crea::std2wx(out.str()),
340 wxYES_NO,this ) == wxYES)
346 bool needRefresh=false;
347 std::vector<tree::Node*>::const_iterator i;
348 for (i=sel.begin(); i!=sel.end(); ++i)
355 if((*i)->GetParent()->GetNumberOfChildren()<2)
359 GetTreeHandler()->Remove(*i);
362 if(needRefresh && mLastLevel>1)
364 UpdateLevel(mLastLevel-2);
366 else if(mLastLevel>1)
368 UpdateLevel(mLastLevel-1);
372 UpdateLevel(mLastLevel);
378 // no need to incremente level
379 mLastLevel = tempLevel;
385 //=====================================================================
388 //=====================================================================
389 /// Updates a level of the view (adds or removes children, etc.)
390 void WxTreeView::UpdateLevel( int level )
392 GimmickDebugMessage(1,
393 GetTreeHandler()->GetTree().GetLabel()
394 <<"WxTreeView::UpdateLevel(level "
400 RecursiveUpdateLevel(level);
402 for (i=0; i<level-1; i++)
404 if (!GetSplitter(i)->IsSplit())
405 GetSplitter(i)->SplitVertically( GetCtrl(i), GetSplitter(i+1),
408 if (GetSplitter(i)->IsSplit()) GetSplitter(i)->Unsplit();
411 //=====================================================================
413 //=====================================================================
414 /// Recursive method called upon by UpdateLevel to refresh all windows
415 void WxTreeView::RecursiveUpdateLevel( int level )
417 GimmickDebugMessage(1,
418 GetTreeHandler()->GetTree().GetLabel()
419 <<"WxTreeView::RecursiveUpdateLevel(level "
424 const std::vector<tree::Node*>& sel(GetSelected(level));
428 // to speed up inserting we hide the control temporarily
430 GetCtrl(l)->DeleteAllItems();
432 std::vector<tree::Node*>::const_iterator i;
434 for (i=sel.begin(); i!=sel.end(); ++i)
436 GimmickDebugMessage(1,
437 "adding children of '"
443 //Adds items and sets their attributes
445 GetTreeHandler()->LoadChildren(*i,1);
446 tree::Node::ChildrenListType::reverse_iterator j;
447 for (j = (*i)->GetChildrenList().rbegin();
448 j!= (*i)->GetChildrenList().rend();
451 GimmickDebugMessage(1,
458 item.SetMask(wxLIST_MASK_STATE |
460 // wxLIST_MASK_IMAGE |
462 // wxLIST_MASK_WIDTH |
466 ItemData* data = new ItemData;
474 GetCtrl(l)->InsertItem(item);
478 for (int k=0; k<GetCtrl(l)->GetColumnCount(); k++)
480 std::string val = (*j)->GetAttribute(mLevelList[l].key[k]);
481 if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isDateEntry()) // Date
483 boost::gregorian::date d1(boost::gregorian::from_undelimited_string(val));
484 val = to_iso_extended_string(d1);
486 else if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isTimeEntry()) // Time
488 if (val != "" || val != " ")
489 val = val.substr(0,2) + " : " + val.substr(2,2) + " : " + val.substr(4,2);
495 if (val.size()==0) val = "?";
496 item.SetText( crea::std2wx(val));
498 GetCtrl(l)->SetItem(item);
507 //=====================================================================
510 //================================================================
511 void WxTreeView::OnItemDeSelected(wxListEvent& event)
513 GimmickDebugMessage(1,
514 GetTreeHandler()->GetTree().GetLabel()
515 <<" WxTreeView::OnItemDeselected"<<std::endl);
516 // retrieve the level
517 wxObject* obj = event.GetEventObject();
518 unsigned int level = 0;
519 for (level = 0; level<mLevelList.size(); ++level)
521 if ( GetCtrl(level) == obj ) break;
523 SetSelectedUpToDate(level,false);
525 //================================================================
527 //================================================================
528 void WxTreeView::OnItemSelected(wxListEvent& event)
530 GimmickDebugMessage(1,
531 GetTreeHandler()->GetTree().GetLabel()
532 <<" WxTreeView::OnItemSelected"<<std::endl);
534 if (mIgnoreSelectedChanged)
536 GimmickDebugMessage(1,
537 " mIgnoreSelectedChanged true: returning"
545 info.m_itemId = event.m_itemIndex;
546 mLastSelected = event.m_itemIndex;
547 // retrieve the level
548 wxObject* obj = event.GetEventObject();
549 unsigned int level = 0;
550 for (level = 0; level<mLevelList.size(); ++level)
552 if ( GetCtrl(level) == obj ) break;
555 GimmickDebugMessage(1,
559 // Update the children level (if selection not at last level)
560 if (level<mLevelList.size()-1)
563 UpdateLevel( level + 2 );
564 // Reset the viewer setting the default image
565 GetGimmickView()->ClearSelection();
567 // Select all images if the selection is at series level
568 if (level==mLevelList.size()-2) SelectAll(level+1);
569 // Validate selected images if the selection is at image level
570 if (level==(mLevelList.size()-1)) //&&mProcess)
572 if(event.GetEventType()==10145)
574 ValidateSelectedImages (true);
578 ValidateSelectedImages (false);
583 //================================================================
585 //================================================================
586 void WxTreeView::SelectAll(int level)
589 // int level=mLevelList.size()-1;
592 item = GetCtrl(level)->GetNextItem(item,
597 if(item==(GetCtrl(level)->GetItemCount()-1))
599 mIgnoreSelectedChanged = false;//mProcess=true;
603 mIgnoreSelectedChanged = true;// mProcess=false;
605 GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE
606 | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
610 //================================================================
611 //================================================================
613 void WxTreeView::OnColClick(wxListEvent& event)
615 mColumnSelected = event.m_col;
617 clientpt.x = wxGetMousePosition().x - this->GetScreenPosition().x;
618 clientpt.y = wxGetMousePosition().y - this->GetScreenPosition().y;
619 senderCtrl = event.GetEventObject();
620 unsigned int level = 0;
621 for (level = 0; level<mLevelList.size(); ++level)
623 if ( GetCtrl(level) == senderCtrl ) break;
625 PopupMenu(menu, clientpt);
629 //================================================================
630 //================================================================
632 void WxTreeView::OnPopupFilter(wxCommandEvent& event)
635 GimmickDebugMessage(7,
636 "WxTreeView::OnEndLabelEdit"
638 wxObject* ctrl = event.GetEventObject();
639 unsigned int level = 0;
640 for (level = 0; level<mLevelList.size(); ++level)
642 if ( GetCtrl(level) == senderCtrl ) break;
644 std::string filter = crea::wx2std(wxGetTextFromUser(_T("Enter the filter to apply"), _T("Filter On Column")));
649 UpdateLevel(level+1);
651 std::vector<long> items;
656 it = GetCtrl(level)->GetNextItem(it,
661 long adr = GetCtrl(level)->GetItemData(it);
662 tree::Node* nod = ((ItemData*)adr)->node;
663 att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected]);
666 if(att.find(filter)>900)
678 items.push_back(it-del);
682 std::vector<long>::iterator iter;
683 for(iter=items.begin();iter!=items.end();++iter)
685 GetCtrl(level)->DeleteItem(*iter);
687 GetGimmickView()->ClearSelection();
689 //================================================================
691 //================================================================
692 void WxTreeView::OnPopupSort(wxCommandEvent& event)
695 unsigned int level = 0;
696 for (level = 0; level<mLevelList.size(); ++level)
698 if ( GetCtrl(level) == senderCtrl ) break;
700 mLevelList[level].SortColumn = mColumnSelected;
702 if(event.GetId()==mAscendingID)
704 mLevelList[level].SortAscending = true;
706 else if(event.GetId()==mDescendingID)
708 mLevelList[level].SortAscending = false;
713 //================================================================
715 //================================================================
716 void WxTreeView::SortLevel(int level)
718 GimmickDebugMessage(1,
719 "WxTreeView::SortLevel("
722 //Obtain the column name and the level that needs to be organized
724 // int l = level - 1;
725 //Sets the data for the items to be sorted
729 int n = GetCtrl(level)->GetItemCount();
730 for (int i = 0; i < n; i++)
733 //Gets current item data
734 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
736 //Extracts the node and the type of attribute
737 tree::Node* nod = data->node;
740 (*nod).GetAttributeDescriptor
741 (mLevelList[level].key[mLevelList[level].SortColumn])
744 //Obtains the organizing attribute
745 data->attr = & (*nod).GetAttribute
746 (mLevelList[level].key[mLevelList[level].SortColumn]);
748 data->selected = false;
749 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
751 data->selected = true;
756 GimmickDebugMessage(1,
757 "WxTreeView::OnSort : "
758 <<nbselected<<" selected before sorting"
761 mIgnoreSelectedChanged = true;
763 if (mLevelList[level].SortAscending)
768 GetCtrl(level)->SortItems(CompareFunctionInts, 0);
772 GetCtrl(level)->SortItems(CompareFunctionStrings, 0);
780 GetCtrl(level)->SortItems(CompareFunctionInts, 1);
784 GetCtrl(level)->SortItems(CompareFunctionStrings, 1);
789 // Reselects the unselected
790 n = GetCtrl(level)->GetItemCount();
792 for (int i = 0; i < n; i++)
795 //Gets current item data
796 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
801 // item = GetCtrl(level)->GetNextItem(item,wxLIST_NEXT_ALL);
802 // if ( item == -1 ) break;
803 //Gets current item data
804 // ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(item);
812 // if it is the last one we must process the selection
813 mIgnoreSelectedChanged = false;
815 GetCtrl(level)->SetItemState(i,
816 wxLIST_STATE_SELECTED,
822 | wxLIST_MASK_FORMAT);
824 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
831 mIgnoreSelectedChanged = false;
832 GimmickDebugMessage(1,
833 "WxTreeView::SortLevel : "
834 <<after<<" selected after sorting"
838 //================================================================
841 //================================================================
842 void WxTreeView::ValidateSelectedImages(bool isSelection)
844 GimmickDebugMessage(7,
845 "WxTreeView::ValidateSelectedImages"
847 const std::vector<tree::Node*>& sel(GetSelected(mLevelList.size()+1));
848 GetGimmickView()->OnSelectionChange(sel,
849 isSelection,(mLastSelected-1),
850 !mIgnoreSelectedChanged);
853 //================================================================
856 //================================================================
857 void WxTreeView::GetNodes(std::vector<tree::Node*>& nodes, bool direction)
859 long item = mLastSelected;
860 int level=mLevelList.size()-1;
861 //Gets current item data
862 long adr = GetCtrl(level)->GetItemData(item);
864 tree::Node* nod = ((ItemData*)adr)->node;
869 item = GetCtrl(level)->GetNextItem(item,
874 item = GetCtrl(level)->GetNextItem(item,
877 if ( item == -1 || item==0 )
881 if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 )
883 adr = GetCtrl(level)->GetItemData(item);
884 nod = ((ItemData*)adr)->node;
885 nodes.push_back(nod);
890 //================================================================
891 //=================================================
892 void WxTreeView::OnKeyDown(wxListEvent &event)
894 if(event.GetKeyCode() == WXK_DELETE)
901 //================================================================
903 //================================================================
904 // Should be in another place : not specific !
905 void WxTreeView::GetSelectedAsString(std::vector<std::string>&s)
907 int level=mLevelList.size();
908 const std::vector<tree::Node*>& sel=GetSelected(level+1);
909 std::vector<tree::Node*>::const_iterator i;
911 for (i=sel.begin(); i!=sel.end(); ++i)
913 std::string filename=(*i)->GetAttribute("FullFileName");
914 s.push_back(filename);
918 //================================================================
919 void WxTreeView::SetColor(int l, int item)
922 GetCtrl(l)->SetItemTextColour(item, wxColourDatabase().Find
923 (crea::std2wx(mColorPalette[colorId])));
924 GetCtrl(l)->SetItemState(item,wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED); /*
926 //Setting the color according to the parent
929 item.SetBackgroundColour
930 (wxColourDatabase().Find
931 (crea::std2wx(mColorPalette[colorId])));
934 (*j,wxColourDatabase().Find
935 (crea::std2wx(mColorPalette[colorId]))));
945 else if(l!=mLevelList.size()-1)
947 item.SetBackgroundColour(mColorMap[*i]);
948 mColorMap.insert(NodeColorPair(*j,mColorMap[*i]));
952 item.SetBackgroundColour(mColorMap[*i]);
955 //================================================================
956 void WxTreeView::CreateColorPalette()
958 GimmickDebugMessage(6,"WxTreeView::CreateColorPalette");
959 mColorPalette.push_back("WHITE");
960 mColorPalette.push_back("LIGHT GREY");
961 mColorPalette.push_back("AQUAMARINE");
962 mColorPalette.push_back("MEDIUM FOREST GREEN");
963 mColorPalette.push_back("INDIAN RED");
964 mColorPalette.push_back("KHAKI");
965 mColorPalette.push_back("ORANGE");
966 mColorPalette.push_back("LIGHT BLUE");
967 mColorPalette.push_back("LIGHT STEEL BLUE");
968 mColorPalette.push_back("PINK");
969 mColorPalette.push_back("PLUM");
970 mColorPalette.push_back("PURPLE");
971 mColorPalette.push_back("RED");
972 mColorPalette.push_back("SEA GREEN");
973 mColorPalette.push_back("SIENNA");
974 mColorPalette.push_back("SKY BLUE");
975 mColorPalette.push_back("SLATE BLUE");
976 mColorPalette.push_back("SPRING GREEN");
977 mColorPalette.push_back("TAN");
978 mColorPalette.push_back("THISTLE");
979 mColorPalette.push_back("TURQUOISE");
980 mColorPalette.push_back("VIOLET");
981 mColorPalette.push_back("VIOLET RED");
982 mColorPalette.push_back("WHEAT");
983 mColorPalette.push_back("YELLOW");
984 mColorPalette.push_back("YELLOW GREEN");
985 mColorPalette.push_back("BLUE");
986 mColorPalette.push_back("BLUE VIOLET");
987 mColorPalette.push_back("BROWN");
988 mColorPalette.push_back("CADET BLUE");
989 mColorPalette.push_back("CORAL");
990 mColorPalette.push_back("CORNFLOWER BLUE");
991 mColorPalette.push_back("CYAN");
992 mColorPalette.push_back("DARK GREY");
993 mColorPalette.push_back("DARK GREEN");
994 mColorPalette.push_back("DARK OLIVE GREEN");
995 mColorPalette.push_back("DARK ORCHID");
996 mColorPalette.push_back("DARK SLATE BLUE");
997 mColorPalette.push_back("DARK SLATE GREY");
998 mColorPalette.push_back("DARK TURQUOISE");
999 mColorPalette.push_back("FIREBRICK");
1000 mColorPalette.push_back("FOREST GREEN");
1001 mColorPalette.push_back("GOLD");
1002 mColorPalette.push_back("GOLDENROD");
1003 mColorPalette.push_back("GREY");
1004 mColorPalette.push_back("GREEN");
1005 mColorPalette.push_back("GREEN YELLOW");
1006 mColorPalette.push_back("LIME GREEN");
1007 mColorPalette.push_back("MAGENTA");
1008 mColorPalette.push_back("MAROON");
1009 mColorPalette.push_back("MEDIUM AQUAMARINE");
1010 mColorPalette.push_back("MEDIUM BLUE");
1011 mColorPalette.push_back("MEDIUM GOLDENROD");
1012 mColorPalette.push_back("MEDIUM ORCHID");
1013 mColorPalette.push_back("MEDIUM SEA GREEN");
1014 mColorPalette.push_back("MEDIUM SLATE BLUE");
1015 mColorPalette.push_back("MEDIUM SPRING GREEN");
1016 mColorPalette.push_back("MEDIUM TURQUOISE");
1017 mColorPalette.push_back("MEDIUM VIOLET RED");
1018 mColorPalette.push_back("MIDNIGHT BLUE");
1019 mColorPalette.push_back("NAVY");
1020 mColorPalette.push_back("ORANGE RED");
1021 mColorPalette.push_back("ORCHID, PALE GREEN");
1022 mColorPalette.push_back("STEEL BLUE");
1023 mColorPalette.push_back("BLACK");
1027 //================================================================
1028 BEGIN_EVENT_TABLE(WxTreeView, wxPanel)
1030 EVT_SIZE(MyFrame::OnSize)
1032 EVT_MENU(LIST_QUIT, MyFrame::OnQuit)
1033 EVT_MENU(LIST_ABOUT, MyFrame::OnAbout)
1034 EVT_MENU(LIST_LIST_VIEW, MyFrame::OnListView)
1035 EVT_MENU(LIST_REPORT_VIEW, MyFrame::OnReportView)
1036 EVT_MENU(LIST_ICON_VIEW, MyFrame::OnIconView)
1037 EVT_MENU(LIST_ICON_TEXT_VIEW, MyFrame::OnIconTextView)
1038 EVT_MENU(LIST_SMALL_ICON_VIEW, MyFrame::OnSmallIconView)
1039 EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView)
1040 EVT_MENU(LIST_VIRTUAL_VIEW, MyFrame::OnVirtualView)
1041 EVT_MENU(LIST_SMALL_VIRTUAL_VIEW, MyFrame::OnSmallVirtualView)
1043 EVT_MENU(LIST_FOCUS_LAST, MyFrame::OnFocusLast)
1044 EVT_MENU(LIST_TOGGLE_FIRST, MyFrame::OnToggleFirstSel)
1045 EVT_MENU(LIST_DESELECT_ALL, MyFrame::OnDeselectAll)
1046 EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll)
1047 EVT_MENU(LIST_DELETE, MyFrame::OnDelete)
1048 EVT_MENU(LIST_ADD, MyFrame::OnAdd)
1049 EVT_MENU(LIST_EDIT, MyFrame::OnEdit)
1050 EVT_MENU(LIST_DELETE_ALL, MyFrame::OnDeleteAll)
1051 EVT_MENU(LIST_SORT, MyFrame::OnSort)
1052 EVT_MENU(LIST_SET_FG_COL, MyFrame::OnSetFgColour)
1053 EVT_MENU(LIST_SET_BG_COL, MyFrame::OnSetBgColour)
1054 EVT_MENU(LIST_TOGGLE_MULTI_SEL, MyFrame::OnToggleMultiSel)
1055 EVT_MENU(LIST_SHOW_COL_INFO, MyFrame::OnShowColInfo)
1056 EVT_MENU(LIST_SHOW_SEL_INFO, MyFrame::OnShowSelInfo)
1057 EVT_MENU(LIST_FREEZE, MyFrame::OnFreeze)
1058 EVT_MENU(LIST_THAW, MyFrame::OnThaw)
1059 EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
1060 EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
1062 EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
1063 EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)
1066 BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
1067 EVT_LIST_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnBeginDrag)
1068 EVT_LIST_BEGIN_RDRAG(LIST_CTRL, MyListCtrl::OnBeginRDrag)
1070 EVT_LIST_BEGIN_LABEL_EDIT(-1, WxTreeView::OnBeginLabelEdit)
1071 EVT_LIST_END_LABEL_EDIT(-1, WxTreeView::OnEndLabelEdit)
1073 EVT_LIST_DELETE_ITEM(LIST_CTRL, MyListCtrl::OnDeleteItem)
1074 EVT_LIST_DELETE_ALL_ITEMS(LIST_CTRL, MyListCtrl::OnDeleteAllItems)
1075 #if WXWIN_COMPATIBILITY_2_4
1076 EVT_LIST_GET_INFO(LIST_CTRL, MyListCtrl::OnGetInfo)
1077 EVT_LIST_SET_INFO(LIST_CTRL, MyListCtrl::OnSetInfo)
1080 EVT_LIST_KEY_DOWN(-1, WxTreeView::OnKeyDown)
1081 EVT_LIST_ITEM_SELECTED(-1, WxTreeView::OnItemSelected)
1083 EVT_LIST_ITEM_DESELECTED(-1, WxTreeView::OnItemDeSelected)
1085 EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
1086 EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
1087 EVT_LIST_ITEM_FOCUSED(LIST_CTRL, MyListCtrl::OnFocused)
1089 EVT_LIST_COL_RIGHT_CLICK(-1, WxTreeView::OnColClick)
1091 EVT_LIST_COL_CLICK(-1, WxTreeView::OnColClick)
1093 //EVT_LEFT_DOWN(WxTreeView::OnMouseClick)
1095 EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnColBeginDrag)
1096 EVT_LIST_COL_DRAGGING(LIST_CTRL, MyListCtrl::OnColDragging)
1097 EVT_LIST_COL_END_DRAG(LIST_CTRL, MyListCtrl::OnColEndDrag)
1099 EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint)
1101 #if USE_CONTEXT_MENU
1102 EVT_CONTEXT_MENU(MyListCtrl::OnContextMenu)
1104 EVT_CHAR(MyListCtrl::OnChar)
1106 EVT_RIGHT_DOWN(MyListCtrl::OnRightClick)
1110 } // EO namespace creaImageIO