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>
8 const std::string empty_string("");
10 //=====================================================================
13 //=====================================================================
14 /// Data stored by the list items
17 ItemData() : node(0), id(-1), attr(&empty_string) {}
18 // The corresponding Node
22 // The pointer on the current attribute string to sort on
23 const std::string* attr;
24 // Was the item previously selected ?
25 // Useful for reselecting the item after sort
28 //=====================================================================
30 //=====================================================================
32 //=====================================================================
33 ///Comparing function for ordering algorithm. Takes parameters as strings.
34 int wxCALLBACK CompareFunctionStrings(long item1, long item2, long sortData)
36 creaImageIO::ItemData* data1 = (creaImageIO::ItemData*)item1;
37 creaImageIO::ItemData* data2 = (creaImageIO::ItemData*)item2;
39 const std::string& s1(*(data1->attr));
40 const std::string& s2(*(data2->attr));
62 //=====================================================================
64 //=====================================================================
65 ///Comparing function for ordering algorithm. Takes parameters as ints.
66 int wxCALLBACK CompareFunctionInts(long item1, long item2, long sortData)
68 creaImageIO::ItemData* data1 = (creaImageIO::ItemData*)item1;
69 creaImageIO::ItemData* data2 = (creaImageIO::ItemData*)item2;
71 const std::string& s1(*(data1->attr));
72 const std::string& s2(*(data2->attr));
74 int val1=atoi(s1.c_str());
75 int val2=atoi(s2.c_str());
100 //=====================================================================
103 //=====================================================================
104 namespace creaImageIO
106 //=====================================================================
108 WxTreeView::WxTreeView(TreeHandler* handler,
109 GimmickView* gimmick,
112 : wxPanel(parent,id),
113 TreeView(handler, gimmick)
115 GimmickDebugMessage(1,"WxTreeView::WxTreeView"
119 // Split part below toolbar into notebook for views and panel
120 // for preview, messages...
122 // mSplitter = new wxSplitterWindow( this , -1);
125 wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
127 int ctrl_style = wxLC_REPORT | wxLC_VRULES;
128 int col_style = wxLIST_FORMAT_LEFT;
130 // Creating the ListCtrl for the levels > 0 (not for Root level)
132 i < handler->GetTree().GetNumberOfLevels() -1;
136 GimmickDebugMessage(5,"Creating view for level "<<i
139 level.SelectedUpToDate = true;
140 level.SortColumn = 0;
142 // If the first level : parent = this
143 wxWindow* sparent = this;
144 // else parent = last splitter
146 sparent = mLevelList[i-1].wxSplitter;
148 level.wxSplitter = new wxSplitterWindow( sparent , -1);
151 level.wxSplitter->Show(false);
153 // level.wxSplitter->SetMinimumPaneSize(100);
155 wxListCtrl* ctrl = new wxListCtrl(level.wxSplitter,
161 level.wxSplitter->Initialize(ctrl);
163 // Create the columns : one for each attribute of the level
167 tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
168 for (a = handler->GetTree().GetAttributeDescriptorList(i+1).begin();
169 a != handler->GetTree().GetAttributeDescriptorList(i+1).end();
174 GimmickDebugMessage(5,"Creating column "<<col<<" : "
178 if(a->GetFlags()!=creaImageIO::tree::AttributeDescriptor::PRIVATE)
181 if(a->GetName()=="UNKNOWN")
184 title += handler->GetTree().GetLevelDescriptor(i+1).GetName();
185 if (title[title.size()-1]!='s')
193 std::string temp = a->GetKey();
194 if (temp.compare("ID") != 0)
197 ctrl->InsertColumn(col,
202 level.key.push_back(a->GetKey());
207 mLevelList.push_back(level);
214 wxMenuItem* m1=menu->Append(wxID_ANY, _T("&Sort ascending"));
215 wxMenuItem* m2=menu->Append(wxID_ANY, _T("&Sort descending"));
216 wxMenuItem* m3=menu->Append(wxID_ANY, _T("&Filter"));
217 mAscendingID=m1->GetId();
218 mDescendingID=m2->GetId();
219 mFilterID=m3->GetId();
220 Connect( mAscendingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupSort) );
221 Connect( mDescendingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupSort) );
222 Connect( mFilterID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupFilter) );
227 menuItem =new wxMenu;
228 wxMenuItem* m1Item=menuItem->Append(wxID_ANY, _T("&Anonymize"));
229 wxMenuItem* m2Item=menuItem->Append(wxID_ANY, _T("&Local Copy"));
231 mAnonymizingID=m1Item->GetId();
232 mLocalCopyID=m2Item->GetId();
233 //Connect( mAnonymizingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnAnonymize) );
234 //Connect( mLocalCopyID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnLocalCopy) );
237 #endif // wxUSE_MENUS
240 /// Initialize the first level splitter
242 sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW ,0);
243 // mColumnSelected=1;
248 mIgnoreSelectedChanged = false;
250 //CreateColorPalette();
258 //=====================================================================
260 //=====================================================================
262 WxTreeView::~WxTreeView()
264 GimmickDebugMessage(1,"WxTreeView::~WxTreeView"
267 //=====================================================================
271 //=====================================================================
272 const std::vector<tree::Node*>& WxTreeView::GetSelected(int level)
274 // if (GetSelectedUpToDate(level))
277 // the selection of upper level
278 std::vector<tree::Node*>& sel(mLevelList[level-1].Selected);
282 sel.push_back(GetTreeHandler()->GetTree().GetTree());
289 item = GetCtrl(l-1)->GetNextItem(item,
291 wxLIST_STATE_SELECTED);
294 long adr = GetCtrl(l-1)->GetItemData(item);
295 tree::Node* n = ((ItemData*)adr)->node;
296 if(mLastSelected==item)
298 std::vector<tree::Node*>::iterator it;
300 it = sel.insert ( it , n );
309 /*int n = GetCtrl(l-1)->GetItemCount();
310 for (int i = 0; i<n; i++)
312 std::cout<<GetCtrl(l-1)->GetItemState(i,wxLIST_STATE_SELECTED)<<std::endl;
313 if ( GetCtrl(l-1)->GetItemState(i,wxLIST_STATE_SELECTED))
315 long adr = GetCtrl(l-1)->GetItemData(i);
316 tree::Node* n = ((ItemData*)adr)->node;
319 std::vector<tree::Node*>::iterator it;
321 it = sel.insert ( it , n );
336 // return mLevelList[level-1].Selected;
340 //=====================================================================
342 //=====================================================================
343 ///Removes selected nodes on last selected level
345 void WxTreeView::RemoveSelected()
347 unsigned int tempLevel = mLastLevel;
349 const std::vector<tree::Node*>& sel=GetSelected(mLastLevel+1);
350 // if no selection, no remove action.
354 std::stringstream out;
355 std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
358 if(sel.size()>1&&levelName.at(levelName.size()-1)!='s')
365 out<<" "<<GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName()<<"?";
367 if (wxMessageBox(crea::std2wx(out.str()),
369 wxYES_NO,this ) == wxYES)
375 GetGimmickView()->modifyValidationSignal(false);
376 bool needRefresh=false;
377 std::vector<tree::Node*>::const_iterator i;
378 for (i=sel.begin(); i!=sel.end(); ++i)
385 if((*i)->GetParent()->GetNumberOfChildren()<2)
389 tree::Node* n= (tree::Node*)(*i);
390 GetTreeHandler()->LoadChildren((*i),4);
391 GetGimmickView()->AddIgnoreFile(n);
392 GetTreeHandler()->Remove(*i);
395 if(needRefresh && mLastLevel>1)
397 UpdateLevel(mLastLevel-2);
399 else if(mLastLevel>1)
401 UpdateLevel(mLastLevel-1);
405 UpdateLevel(mLastLevel);
411 // no need to incremente level
412 mLastLevel = tempLevel;
418 //=====================================================================
419 /// Updates a level of the view (adds or removes children, etc.)
420 void WxTreeView::UpdateLevel( int level )
422 GimmickDebugMessage(1,
423 GetTreeHandler()->GetTree().GetLabel()
424 <<"WxTreeView::UpdateLevel(level "
430 RecursiveUpdateLevel(level);
432 for (i=0; i<level-1; i++)
434 if (!GetSplitter(i)->IsSplit())
435 GetSplitter(i)->SplitVertically( GetCtrl(i), GetSplitter(i+1),
438 if (GetSplitter(i)->IsSplit()) GetSplitter(i)->Unsplit();
441 //=====================================================================
443 //=====================================================================
444 /// Recursive method called upon by UpdateLevel to refresh all windows
445 void WxTreeView::RecursiveUpdateLevel( int level )
447 GimmickDebugMessage(1,
448 GetTreeHandler()->GetTree().GetLabel()
449 <<"WxTreeView::RecursiveUpdateLevel(level "
454 const std::vector<tree::Node*>& sel(GetSelected(level));
458 // to speed up inserting we hide the control temporarily
460 GetCtrl(l)->DeleteAllItems();
462 std::vector<tree::Node*>::const_iterator i;
464 for (i=sel.begin(); i!=sel.end(); ++i)
466 GimmickDebugMessage(1,
467 "adding children of '"
473 //Adds items and sets their attributes
475 GetTreeHandler()->LoadChildren(*i,1);
476 tree::Node::ChildrenListType::reverse_iterator j;
477 for (j = (*i)->GetChildrenList().rbegin();
478 j!= (*i)->GetChildrenList().rend();
481 GimmickDebugMessage(1,
488 item.SetMask(wxLIST_MASK_STATE |
490 // wxLIST_MASK_IMAGE |
492 // wxLIST_MASK_WIDTH |
496 ItemData* data = new ItemData;
504 GetCtrl(l)->InsertItem(item);
507 for (int k=0; k<GetCtrl(l)->GetColumnCount(); ++k)
510 // Temporary correction : it works but no explanation about the problem FCY
512 val = (*j)->GetAttribute("NumberOfChildren");
514 val = (*j)->GetAttribute(mLevelList[l].key[k]);
515 if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isDateEntry()) // Date
517 // std::cout << "["<<val<< "]" << std::endl;
518 std::string valtmp(val);
521 boost::gregorian::date d1(boost::gregorian::from_undelimited_string(val));
522 val = to_iso_extended_string(d1);
528 // std::cout << "["<<val<< "]" << std::endl;
530 else if(((*j)->GetAttributeDescriptor(mLevelList[l].key[k])).isTimeEntry()) // Time
532 if ((val.size()>6) &&
533 (val != "" || val != " "))
534 val = val.substr(0,2) + " : "
535 + val.substr(2,2) + " : "
542 if (val.size()==0) val = "?";
543 item.SetText( crea::std2wx(val));
545 GetCtrl(l)->SetItem(item);
554 //=====================================================================
557 //================================================================
558 void WxTreeView::OnItemDeSelected(wxListEvent& event)
560 GimmickDebugMessage(1,
561 GetTreeHandler()->GetTree().GetLabel()
562 <<" WxTreeView::OnItemDeselected"<<std::endl);
563 // retrieve the level
564 wxObject* obj = event.GetEventObject();
565 unsigned int level = 0;
566 for (level = 0; level<mLevelList.size(); ++level)
568 if ( GetCtrl(level) == obj ) break;
570 SetSelectedUpToDate(level,false);
571 // to allow a first selection in images TreeView
572 if (level==mLevelList.size()-1)
573 OnItemSelected(event);
575 //================================================================
577 //================================================================
578 void WxTreeView::OnItemSelected(wxListEvent& event)
581 GimmickDebugMessage(1,
582 GetTreeHandler()->GetTree().GetLabel()
583 <<" WxTreeView::OnItemSelected"<<std::endl);
585 if (mIgnoreSelectedChanged)
587 GimmickDebugMessage(1,
588 " mIgnoreSelectedChanged true: returning"
596 info.m_itemId = event.m_itemIndex;
597 mLastSelected = event.m_itemIndex;
598 // retrieve the level
599 wxObject* obj = event.GetEventObject();
600 unsigned int level = 0;
601 for (level = 0; level<mLevelList.size(); ++level)
603 if ( GetCtrl(level) == obj ) break;
606 GimmickDebugMessage(1,
610 // Update the children level (if selection not at last level)
611 if (level<mLevelList.size()-1)
614 UpdateLevel( level + 2 );
615 // Reset the viewer setting the default image
616 GetGimmickView()->ClearSelection();
618 // Select all images if the selection is at series level
619 if (level==mLevelList.size()-2) SelectAll(level+1);
620 // Validate selected images if the selection is at image level
621 if (level==(mLevelList.size()-1)) //&&mProcess)
623 if(event.GetEventType()==wxEVT_COMMAND_LIST_ITEM_SELECTED)
625 ValidateSelectedImages (true);
629 ValidateSelectedImages (false);
634 //================================================================
636 //================================================================
637 void WxTreeView::SelectAll(int level)
640 // int level=mLevelList.size()-1;
643 item = GetCtrl(level)->GetNextItem(item,
648 if(item==(GetCtrl(level)->GetItemCount()-1))
650 mIgnoreSelectedChanged = false;//mProcess=true;
654 mIgnoreSelectedChanged = true;// mProcess=false;
656 GetCtrl(level)->SetItemState(item,wxLIST_STATE_SELECTED, wxLIST_MASK_STATE
657 | wxLIST_MASK_TEXT |wxLIST_MASK_IMAGE | wxLIST_MASK_DATA | wxLIST_MASK_WIDTH | wxLIST_MASK_FORMAT);
661 //================================================================
662 //================================================================
664 void WxTreeView::OnColClick(wxListEvent& event)
666 mColumnSelected = event.m_col;
668 clientpt.x = wxGetMousePosition().x - this->GetScreenPosition().x;
669 clientpt.y = wxGetMousePosition().y - this->GetScreenPosition().y;
670 senderCtrl = event.GetEventObject();
671 unsigned int level = 0;
672 for (level = 0; level<mLevelList.size(); ++level)
674 if ( GetCtrl(level) == senderCtrl ) break;
676 PopupMenu(menu, clientpt);
680 void WxTreeView::OnItemMenu(wxListEvent &event)
683 clientpt.x = wxGetMousePosition().x - this->GetScreenPosition().x;
684 clientpt.y = wxGetMousePosition().y - this->GetScreenPosition().y;
685 senderCtrl = event.GetEventObject();
686 unsigned int level = 0;
687 for (level = 0; level<mLevelList.size(); ++level)
689 if ( GetCtrl(level) == senderCtrl ) break;
691 PopupMenu(menuItem, clientpt);
695 //================================================================
696 //================================================================
698 void WxTreeView::OnPopupFilter(wxCommandEvent& event)
701 GimmickDebugMessage(7,
702 "WxTreeView::OnEndLabelEdit"
704 unsigned int level = 0;
705 for (level = 0; level<mLevelList.size(); ++level)
707 if ( GetCtrl(level) == senderCtrl ) break;
709 std::string filter = crea::wx2std(wxGetTextFromUser(_T("Enter the filter to apply"), _T("Filter On Column")));
714 UpdateLevel(level+1);
716 std::vector<long> items;
721 it = GetCtrl(level)->GetNextItem(it,
726 long adr = GetCtrl(level)->GetItemData(it);
727 tree::Node* nod = ((ItemData*)adr)->node;
728 att=(*nod).GetAttribute(mLevelList[level].key[mColumnSelected]);
731 if(att.find(filter)>900)
743 items.push_back(it-del);
747 std::vector<long>::iterator iter;
748 for(iter=items.begin();iter!=items.end();++iter)
750 GetCtrl(level)->DeleteItem(*iter);
752 GetGimmickView()->ClearSelection();
754 //================================================================
756 //================================================================
757 void WxTreeView::OnPopupSort(wxCommandEvent& event)
760 unsigned int level = 0;
761 for (level = 0; level<mLevelList.size(); ++level)
763 if ( GetCtrl(level) == senderCtrl ) break;
765 mLevelList[level].SortColumn = mColumnSelected;
767 if(event.GetId()==mAscendingID)
769 mLevelList[level].SortAscending = true;
771 else if(event.GetId()==mDescendingID)
773 mLevelList[level].SortAscending = false;
778 //================================================================
780 //================================================================
781 void WxTreeView::SortLevel(int level)
783 GimmickDebugMessage(1,
784 "WxTreeView::SortLevel("
787 //Obtain the column name and the level that needs to be organized
789 // int l = level - 1;
790 //Sets the data for the items to be sorted
794 int n = GetCtrl(level)->GetItemCount();
795 for (int i = 0; i < n; i++)
798 //Gets current item data
799 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
801 //Extracts the node and the type of attribute
802 tree::Node* nod = data->node;
805 (*nod).GetAttributeDescriptor
806 (mLevelList[level].key[mLevelList[level].SortColumn])
809 //Obtains the organizing attribute
810 data->attr = & (*nod).GetAttribute
811 (mLevelList[level].key[mLevelList[level].SortColumn]);
813 data->selected = false;
814 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
816 data->selected = true;
821 GimmickDebugMessage(1,
822 "WxTreeView::OnSort : "
823 <<nbselected<<" selected before sorting"
826 mIgnoreSelectedChanged = true;
828 if (mLevelList[level].SortAscending)
833 GetCtrl(level)->SortItems(CompareFunctionInts, 0);
837 GetCtrl(level)->SortItems(CompareFunctionStrings, 0);
845 GetCtrl(level)->SortItems(CompareFunctionInts, 1);
849 GetCtrl(level)->SortItems(CompareFunctionStrings, 1);
854 // Reselects the unselected
855 n = GetCtrl(level)->GetItemCount();
857 for (int i = 0; i < n; i++)
860 //Gets current item data
861 ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(i);
866 // item = GetCtrl(level)->GetNextItem(item,wxLIST_NEXT_ALL);
867 // if ( item == -1 ) break;
868 //Gets current item data
869 // ItemData* data = (ItemData*)GetCtrl(level)->GetItemData(item);
877 // if it is the last one we must process the selection
878 mIgnoreSelectedChanged = false;
880 GetCtrl(level)->SetItemState(i,
881 wxLIST_STATE_SELECTED,
887 | wxLIST_MASK_FORMAT);
889 if (GetCtrl(level)->GetItemState(i,wxLIST_STATE_SELECTED)>0)
896 mIgnoreSelectedChanged = false;
897 GimmickDebugMessage(1,
898 "WxTreeView::SortLevel : "
899 <<after<<" selected after sorting"
903 //================================================================
906 //================================================================
907 void WxTreeView::ValidateSelectedImages(bool isSelection)
909 GimmickDebugMessage(7,
910 "WxTreeView::ValidateSelectedImages"
912 const std::vector<tree::Node*>& sel(GetSelected(mLevelList.size()+1));
913 GetGimmickView()->OnSelectionChange(sel,
914 isSelection,(mLastSelected-1),
915 !mIgnoreSelectedChanged);
918 //================================================================
921 //================================================================
922 void WxTreeView::GetNodes(std::vector<tree::Node*>& nodes, bool direction)
924 long item = mLastSelected;
925 int level=mLevelList.size()-1;
926 //Gets current item data
927 long adr = GetCtrl(level)->GetItemData(item);
929 tree::Node* nod = ((ItemData*)adr)->node;
934 item = GetCtrl(level)->GetNextItem(item,
939 item = GetCtrl(level)->GetNextItem(item,
942 if ( item == -1 || item==0 )
946 if(GetCtrl(level)->GetItemState(item, wxLIST_STATE_SELECTED)==0 )
948 adr = GetCtrl(level)->GetItemData(item);
949 nod = ((ItemData*)adr)->node;
950 nodes.push_back(nod);
955 //================================================================
956 //=================================================
957 void WxTreeView::OnKeyDown(wxListEvent &event)
959 if(event.GetKeyCode() == WXK_DELETE)
964 GetGimmickView()->ClearSelection();
968 //================================================================
970 //================================================================
971 // Should be in another place : not specific !
972 void WxTreeView::GetSelectedAsString(std::vector<std::string>&s)
974 int level=mLevelList.size();
975 const std::vector<tree::Node*>& sel=GetSelected(level+1);
976 std::vector<tree::Node*>::const_iterator i;
978 for (i=sel.begin(); i!=sel.end(); ++i)
980 std::string filename=(*i)->GetAttribute("FullFileName");
981 s.push_back(filename);
985 //================================================================
986 void WxTreeView::SetColor(int l, int item)
989 GetCtrl(l)->SetItemTextColour(item, wxColourDatabase().Find
990 (crea::std2wx(mColorPalette[colorId])));
991 GetCtrl(l)->SetItemState(item,wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED); /*
993 //Setting the color according to the parent
996 item.SetBackgroundColour
997 (wxColourDatabase().Find
998 (crea::std2wx(mColorPalette[colorId])));
1001 (*j,wxColourDatabase().Find
1002 (crea::std2wx(mColorPalette[colorId]))));
1012 else if(l!=mLevelList.size()-1)
1014 item.SetBackgroundColour(mColorMap[*i]);
1015 mColorMap.insert(NodeColorPair(*j,mColorMap[*i]));
1019 item.SetBackgroundColour(mColorMap[*i]);
1022 //================================================================
1023 void WxTreeView::CreateColorPalette()
1025 GimmickDebugMessage(6,"WxTreeView::CreateColorPalette");
1026 mColorPalette.push_back("WHITE");
1027 mColorPalette.push_back("LIGHT GREY");
1028 mColorPalette.push_back("AQUAMARINE");
1029 mColorPalette.push_back("MEDIUM FOREST GREEN");
1030 mColorPalette.push_back("INDIAN RED");
1031 mColorPalette.push_back("KHAKI");
1032 mColorPalette.push_back("ORANGE");
1033 mColorPalette.push_back("LIGHT BLUE");
1034 mColorPalette.push_back("LIGHT STEEL BLUE");
1035 mColorPalette.push_back("PINK");
1036 mColorPalette.push_back("PLUM");
1037 mColorPalette.push_back("PURPLE");
1038 mColorPalette.push_back("RED");
1039 mColorPalette.push_back("SEA GREEN");
1040 mColorPalette.push_back("SIENNA");
1041 mColorPalette.push_back("SKY BLUE");
1042 mColorPalette.push_back("SLATE BLUE");
1043 mColorPalette.push_back("SPRING GREEN");
1044 mColorPalette.push_back("TAN");
1045 mColorPalette.push_back("THISTLE");
1046 mColorPalette.push_back("TURQUOISE");
1047 mColorPalette.push_back("VIOLET");
1048 mColorPalette.push_back("VIOLET RED");
1049 mColorPalette.push_back("WHEAT");
1050 mColorPalette.push_back("YELLOW");
1051 mColorPalette.push_back("YELLOW GREEN");
1052 mColorPalette.push_back("BLUE");
1053 mColorPalette.push_back("BLUE VIOLET");
1054 mColorPalette.push_back("BROWN");
1055 mColorPalette.push_back("CADET BLUE");
1056 mColorPalette.push_back("CORAL");
1057 mColorPalette.push_back("CORNFLOWER BLUE");
1058 mColorPalette.push_back("CYAN");
1059 mColorPalette.push_back("DARK GREY");
1060 mColorPalette.push_back("DARK GREEN");
1061 mColorPalette.push_back("DARK OLIVE GREEN");
1062 mColorPalette.push_back("DARK ORCHID");
1063 mColorPalette.push_back("DARK SLATE BLUE");
1064 mColorPalette.push_back("DARK SLATE GREY");
1065 mColorPalette.push_back("DARK TURQUOISE");
1066 mColorPalette.push_back("FIREBRICK");
1067 mColorPalette.push_back("FOREST GREEN");
1068 mColorPalette.push_back("GOLD");
1069 mColorPalette.push_back("GOLDENROD");
1070 mColorPalette.push_back("GREY");
1071 mColorPalette.push_back("GREEN");
1072 mColorPalette.push_back("GREEN YELLOW");
1073 mColorPalette.push_back("LIME GREEN");
1074 mColorPalette.push_back("MAGENTA");
1075 mColorPalette.push_back("MAROON");
1076 mColorPalette.push_back("MEDIUM AQUAMARINE");
1077 mColorPalette.push_back("MEDIUM BLUE");
1078 mColorPalette.push_back("MEDIUM GOLDENROD");
1079 mColorPalette.push_back("MEDIUM ORCHID");
1080 mColorPalette.push_back("MEDIUM SEA GREEN");
1081 mColorPalette.push_back("MEDIUM SLATE BLUE");
1082 mColorPalette.push_back("MEDIUM SPRING GREEN");
1083 mColorPalette.push_back("MEDIUM TURQUOISE");
1084 mColorPalette.push_back("MEDIUM VIOLET RED");
1085 mColorPalette.push_back("MIDNIGHT BLUE");
1086 mColorPalette.push_back("NAVY");
1087 mColorPalette.push_back("ORANGE RED");
1088 mColorPalette.push_back("ORCHID, PALE GREEN");
1089 mColorPalette.push_back("STEEL BLUE");
1090 mColorPalette.push_back("BLACK");
1094 //================================================================
1095 BEGIN_EVENT_TABLE(WxTreeView, wxPanel)
1097 EVT_SIZE(MyFrame::OnSize)
1099 EVT_MENU(LIST_QUIT, MyFrame::OnQuit)
1100 EVT_MENU(LIST_ABOUT, MyFrame::OnAbout)
1101 EVT_MENU(LIST_LIST_VIEW, MyFrame::OnListView)
1102 EVT_MENU(LIST_REPORT_VIEW, MyFrame::OnReportView)
1103 EVT_MENU(LIST_ICON_VIEW, MyFrame::OnIconView)
1104 EVT_MENU(LIST_ICON_TEXT_VIEW, MyFrame::OnIconTextView)
1105 EVT_MENU(LIST_SMALL_ICON_VIEW, MyFrame::OnSmallIconView)
1106 EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView)
1107 EVT_MENU(LIST_VIRTUAL_VIEW, MyFrame::OnVirtualView)
1108 EVT_MENU(LIST_SMALL_VIRTUAL_VIEW, MyFrame::OnSmallVirtualView)
1110 EVT_MENU(LIST_FOCUS_LAST, MyFrame::OnFocusLast)
1111 EVT_MENU(LIST_TOGGLE_FIRST, MyFrame::OnToggleFirstSel)
1112 EVT_MENU(LIST_DESELECT_ALL, MyFrame::OnDeselectAll)
1113 EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll)
1114 EVT_MENU(LIST_DELETE, MyFrame::OnDelete)
1115 EVT_MENU(LIST_ADD, MyFrame::OnAdd)
1116 EVT_MENU(LIST_EDIT, MyFrame::OnEdit)
1117 EVT_MENU(LIST_DELETE_ALL, MyFrame::OnDeleteAll)
1118 EVT_MENU(LIST_SORT, MyFrame::OnSort)
1119 EVT_MENU(LIST_SET_FG_COL, MyFrame::OnSetFgColour)
1120 EVT_MENU(LIST_SET_BG_COL, MyFrame::OnSetBgColour)
1121 EVT_MENU(LIST_TOGGLE_MULTI_SEL, MyFrame::OnToggleMultiSel)
1122 EVT_MENU(LIST_SHOW_COL_INFO, MyFrame::OnShowColInfo)
1123 EVT_MENU(LIST_SHOW_SEL_INFO, MyFrame::OnShowSelInfo)
1124 EVT_MENU(LIST_FREEZE, MyFrame::OnFreeze)
1125 EVT_MENU(LIST_THAW, MyFrame::OnThaw)
1126 EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
1127 EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
1129 EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
1130 EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)
1133 BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
1134 EVT_LIST_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnBeginDrag)
1135 EVT_LIST_BEGIN_RDRAG(LIST_CTRL, MyListCtrl::OnBeginRDrag)
1137 EVT_LIST_BEGIN_LABEL_EDIT(-1, WxTreeView::OnBeginLabelEdit)
1138 EVT_LIST_END_LABEL_EDIT(-1, WxTreeView::OnEndLabelEdit)
1140 EVT_LIST_DELETE_ITEM(LIST_CTRL, MyListCtrl::OnDeleteItem)
1141 EVT_LIST_DELETE_ALL_ITEMS(LIST_CTRL, MyListCtrl::OnDeleteAllItems)
1142 #if WXWIN_COMPATIBILITY_2_4
1143 EVT_LIST_GET_INFO(LIST_CTRL, MyListCtrl::OnGetInfo)
1144 EVT_LIST_SET_INFO(LIST_CTRL, MyListCtrl::OnSetInfo)
1147 EVT_LIST_KEY_DOWN(-1, WxTreeView::OnKeyDown)
1148 EVT_LIST_ITEM_SELECTED(-1, WxTreeView::OnItemSelected)
1149 EVT_LIST_ITEM_RIGHT_CLICK(-1, WxTreeView::OnItemMenu)
1150 EVT_LIST_ITEM_DESELECTED(-1, WxTreeView::OnItemDeSelected)
1152 EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
1153 EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
1154 EVT_LIST_ITEM_FOCUSED(LIST_CTRL, MyListCtrl::OnFocused)
1156 EVT_LIST_COL_RIGHT_CLICK(-1, WxTreeView::OnColClick)
1158 EVT_LIST_COL_CLICK(-1, WxTreeView::OnColClick)
1160 //EVT_LEFT_DOWN(WxTreeView::OnMouseClick)
1162 EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, MyListCtrl::OnColBeginDrag)
1163 EVT_LIST_COL_DRAGGING(LIST_CTRL, MyListCtrl::OnColDragging)
1164 EVT_LIST_COL_END_DRAG(LIST_CTRL, MyListCtrl::OnColEndDrag)
1166 EVT_LIST_CACHE_HINT(LIST_CTRL, MyListCtrl::OnCacheHint)
1168 #if USE_CONTEXT_MENU
1169 EVT_CONTEXT_MENU(MyListCtrl::OnContextMenu)
1171 EVT_CHAR(MyListCtrl::OnChar)
1173 EVT_RIGHT_DOWN(MyListCtrl::OnRightClick)
1177 } // EO namespace creaImageIO