]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/listctrl/listtest.cpp
compate charset names case-insensitively in GetEncodingFromName()
[wxWidgets.git] / samples / listctrl / listtest.cpp
index b440b9eaf75a61e6918f847c7a62728f1e810bc2..bfef9f62abef47db72fbc67e6b1c6d5c07f77500 100644 (file)
 #include "wx/wx.h"
 #endif
 
-#ifndef __WXMSW__
+#if !defined(__WXMSW__) && !defined(__WXPM__)
     #include "mondrian.xpm"
+#endif
 
+#ifndef __WXMSW__
     #include "bitmaps/toolbrai.xpm"
     #include "bitmaps/toolchar.xpm"
     #include "bitmaps/tooldata.xpm"
 
 #include "listtest.h"
 
+const wxChar *SMALL_VIRTUAL_VIEW_ITEMS[][2] =
+{
+    { _T("Cat"), _T("meow") },
+    { _T("Cow"), _T("moo") },
+    { _T("Crow"), _T("caw") },
+    { _T("Dog"), _T("woof") },
+    { _T("Duck"), _T("quack") },
+    { _T("Mouse"), _T("squeak") },
+    { _T("Owl"), _T("hoo") },
+    { _T("Pig"), _T("oink") },
+    { _T("Pigeon"), _T("coo") },
+    { _T("Sheep"), _T("baaah") },
+};
+
+
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_SIZE(MyFrame::OnSize)
 
@@ -59,6 +76,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(LIST_SMALL_ICON_VIEW, MyFrame::OnSmallIconView)
     EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView)
     EVT_MENU(LIST_VIRTUAL_VIEW, MyFrame::OnVirtualView)
+    EVT_MENU(LIST_SMALL_VIRTUAL_VIEW, MyFrame::OnSmallVirtualView)
 
     EVT_MENU(LIST_FOCUS_LAST, MyFrame::OnFocusLast)
     EVT_MENU(LIST_TOGGLE_FIRST, MyFrame::OnToggleFirstSel)
@@ -76,9 +94,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(LIST_SHOW_SEL_INFO, MyFrame::OnShowSelInfo)
     EVT_MENU(LIST_FREEZE, MyFrame::OnFreeze)
     EVT_MENU(LIST_THAW, MyFrame::OnThaw)
+    EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
 
     EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
-    EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)    
+    EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
@@ -88,8 +107,10 @@ BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
     EVT_LIST_END_LABEL_EDIT(LIST_CTRL, MyListCtrl::OnEndLabelEdit)
     EVT_LIST_DELETE_ITEM(LIST_CTRL, MyListCtrl::OnDeleteItem)
     EVT_LIST_DELETE_ALL_ITEMS(LIST_CTRL, MyListCtrl::OnDeleteAllItems)
+#if WXWIN_COMPATIBILITY_2_4
     EVT_LIST_GET_INFO(LIST_CTRL, MyListCtrl::OnGetInfo)
     EVT_LIST_SET_INFO(LIST_CTRL, MyListCtrl::OnSetInfo)
+#endif
     EVT_LIST_ITEM_SELECTED(LIST_CTRL, MyListCtrl::OnSelected)
     EVT_LIST_ITEM_DESELECTED(LIST_CTRL, MyListCtrl::OnDeselected)
     EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
@@ -142,10 +163,11 @@ bool MyApp::OnInit()
 
 // My frame constructor
 MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h)
-       : wxFrame((wxFrame *)NULL, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
+       : wxFrame(NULL, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
 {
-    m_listCtrl = (MyListCtrl *) NULL;
-    m_logWindow = (wxTextCtrl *) NULL;
+    m_listCtrl = NULL;
+    m_logWindow = NULL;
+    m_smallVirtual = false;
 
     // Give it an icon
     SetIcon( wxICON(mondrian) );
@@ -194,7 +216,8 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h)
     menuView->Append(LIST_ICON_TEXT_VIEW, _T("Icon view with &text\tF4"));
     menuView->Append(LIST_SMALL_ICON_VIEW, _T("&Small icon view\tF5"));
     menuView->Append(LIST_SMALL_ICON_TEXT_VIEW, _T("Small icon &view with text\tF6"));
-    menuView->Append(LIST_VIRTUAL_VIEW, _T("Virtual view\tF7"));
+    menuView->Append(LIST_VIRTUAL_VIEW, _T("&Virtual view\tF7"));
+    menuView->Append(LIST_SMALL_VIRTUAL_VIEW, _T("Small virtual vie&w\tF8"));
 
     wxMenu *menuList = new wxMenu;
     menuList->Append(LIST_FOCUS_LAST, _T("&Make last item current\tCtrl-L"));
@@ -215,6 +238,7 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h)
     menuList->Append(LIST_FREEZE, _T("Free&ze\tCtrl-Z"));
     menuList->Append(LIST_THAW, _T("Tha&w\tCtrl-W"));
     menuList->AppendSeparator();
+    menuList->AppendCheckItem(LIST_TOGGLE_LINES, _T("Toggle &lines\tCtrl-I"));
     menuList->Append(LIST_TOGGLE_MULTI_SEL, _T("&Multiple selection\tCtrl-M"),
             _T("Toggle multiple selection"), true);
 
@@ -307,6 +331,11 @@ void MyFrame::OnThaw(wxCommandEvent& WXUNUSED(event))
     m_listCtrl->Thaw();
 }
 
+void MyFrame::OnToggleLines(wxCommandEvent& event)
+{
+    m_listCtrl->SetSingleStyle(wxLC_HRULES | wxLC_VRULES, event.IsChecked());
+}
+
 void MyFrame::OnFocusLast(wxCommandEvent& WXUNUSED(event))
 {
     long index = m_listCtrl->GetItemCount() - 1;
@@ -467,6 +496,9 @@ void MyFrame::InitWithReportItems()
     m_listCtrl->SetColumnWidth( 0, wxLIST_AUTOSIZE );
     m_listCtrl->SetColumnWidth( 1, wxLIST_AUTOSIZE );
     m_listCtrl->SetColumnWidth( 2, wxLIST_AUTOSIZE );
+
+    // test SetItemFont too
+    m_listCtrl->SetItemFont(0, *wxITALIC_FONT);
 }
 
 void MyFrame::InitWithIconItems(bool withText, bool sameIcon)
@@ -512,6 +544,13 @@ void MyFrame::OnSmallIconTextView(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnVirtualView(wxCommandEvent& WXUNUSED(event))
 {
+    m_smallVirtual = false;
+    RecreateList(wxLC_REPORT | wxLC_VIRTUAL);
+}
+
+void MyFrame::OnSmallVirtualView(wxCommandEvent& WXUNUSED(event))
+{
+    m_smallVirtual = true;
     RecreateList(wxLC_REPORT | wxLC_VIRTUAL);
 }
 
@@ -519,12 +558,20 @@ void MyFrame::InitWithVirtualItems()
 {
     m_listCtrl->SetImageList(m_imageListSmall, wxIMAGE_LIST_SMALL);
 
-    m_listCtrl->InsertColumn(0, _T("First Column"));
-    m_listCtrl->InsertColumn(1, _T("Second Column"));
-    m_listCtrl->SetColumnWidth(0, 150);
-    m_listCtrl->SetColumnWidth(1, 150);
-
-    m_listCtrl->SetItemCount(1000000);
+    if ( m_smallVirtual )
+    {
+        m_listCtrl->InsertColumn(0, _T("Animal"));
+        m_listCtrl->InsertColumn(1, _T("Sound"));
+        m_listCtrl->SetItemCount(WXSIZEOF(SMALL_VIRTUAL_VIEW_ITEMS));
+    }
+    else
+    {
+        m_listCtrl->InsertColumn(0, _T("First Column"));
+        m_listCtrl->InsertColumn(1, _T("Second Column"));
+        m_listCtrl->SetColumnWidth(0, 150);
+        m_listCtrl->SetColumnWidth(1, 150);
+        m_listCtrl->SetItemCount(1000000);
+    }
 }
 
 void MyFrame::OnSort(wxCommandEvent& WXUNUSED(event))
@@ -647,10 +694,12 @@ void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
 {
     wxStopWatch sw;
 
+    size_t itemCount = m_listCtrl->GetItemCount();
+
     m_listCtrl->DeleteAllItems();
 
     m_logWindow->WriteText(wxString::Format(_T("Deleting %d items took %ld ms\n"),
-                                            m_listCtrl->GetItemCount(),
+                                            itemCount,
                                             sw.Time()));
 }
 
@@ -673,7 +722,11 @@ void MyListCtrl::SetColumnImage(int col, int image)
 void MyListCtrl::OnColClick(wxListEvent& event)
 {
     int col = event.GetColumn();
-    SetColumnImage(col, 0);
+
+    // set or unset image
+    static bool x = false;
+    x = !x;
+    SetColumnImage(col, x ? 0 : -1);
 
     wxLogMessage( wxT("OnColumnClick at %d."), col );
 }
@@ -686,6 +739,11 @@ void MyListCtrl::OnColRightClick(wxListEvent& event)
         SetColumnImage(col, -1);
     }
 
+    // Show popupmenu at position
+    wxMenu menu(wxT("Test"));
+    menu.Append(LIST_ABOUT, _T("&About"));
+    PopupMenu(&menu, event.GetPoint());
+
     wxLogMessage( wxT("OnColumnRightClick at %d."), event.GetColumn() );
 }
 
@@ -759,6 +817,7 @@ void MyListCtrl::OnDeleteAllItems(wxListEvent& event)
     LogEvent(event, _T("OnDeleteAllItems"));
 }
 
+#if WXWIN_COMPATIBILITY_2_4
 void MyListCtrl::OnGetInfo(wxListEvent& event)
 {
     wxString msg;
@@ -791,6 +850,7 @@ void MyListCtrl::OnSetInfo(wxListEvent& event)
 {
     LogEvent(event, _T("OnSetInfo"));
 }
+#endif
 
 void MyListCtrl::OnSelected(wxListEvent& event)
 {
@@ -833,6 +893,8 @@ void MyListCtrl::OnFocused(wxListEvent& event)
 
 void MyListCtrl::OnListKeyDown(wxListEvent& event)
 {
+    long item;
+
     switch ( event.GetKeyCode() )
     {
         case 'c': // colorize
@@ -856,35 +918,45 @@ void MyListCtrl::OnListKeyDown(wxListEvent& event)
 
         case 'n': // next
         case 'N':
+            item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
+            if ( item++ == GetItemCount() - 1 )
             {
-                long item = GetNextItem(-1,
-                                        wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
-                if ( item++ == GetItemCount() - 1 )
+                item = 0;
+            }
+
+            wxLogMessage(_T("Focusing item %ld"), item);
+
+            SetItemState(item, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
+            EnsureVisible(item);
+            break;
+
+        case 'r': // show bounding Rect
+        case 'R':
+            {
+                item = event.GetIndex();
+                wxRect r;
+                if ( !GetItemRect(item, r) )
                 {
-                    item = 0;
+                    wxLogError(_T("Failed to retrieve rect of item %ld"), item);
+                    break;
                 }
 
-                wxLogMessage(_T("Focusing item %ld"), item);
-
-                SetItemState(item, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
-                EnsureVisible(item);
+                wxLogMessage(_T("Bounding rect of item %ld is (%d, %d)-(%d, %d)"),
+                             item, r.x, r.y, r.x + r.width, r.y + r.height);
             }
             break;
 
         case WXK_DELETE:
+            item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+            while ( item != -1 )
             {
-                long item = GetNextItem(-1,
-                                        wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
-                while ( item != -1 )
-                {
-                    DeleteItem(item);
+                DeleteItem(item);
 
-                    wxLogMessage(_T("Item %ld deleted"), item);
+                wxLogMessage(_T("Item %ld deleted"), item);
 
-                    // -1 because the indices were shifted by DeleteItem()
-                    item = GetNextItem(item - 1,
-                                       wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
-                }
+                // -1 because the indices were shifted by DeleteItem()
+                item = GetNextItem(item - 1,
+                                   wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
             }
             break;
 
@@ -936,7 +1008,14 @@ void MyListCtrl::LogEvent(const wxListEvent& event, const wxChar *eventName)
 
 wxString MyListCtrl::OnGetItemText(long item, long column) const
 {
-    return wxString::Format(_T("Column %ld of item %ld"), column, item);
+    if ( GetItemCount() == WXSIZEOF(SMALL_VIRTUAL_VIEW_ITEMS) )
+    {
+        return SMALL_VIRTUAL_VIEW_ITEMS[item][column];
+    }
+    else
+    {
+        return wxString::Format(_T("Column %ld of item %ld"), column, item);
+    }
 }
 
 int MyListCtrl::OnGetItemImage(long WXUNUSED(item)) const
@@ -962,4 +1041,3 @@ void MyListCtrl::InsertItemInReportView(int i)
     buf.Printf(_T("Item %d in column 2"), i);
     SetItem(i, 2, buf);
 }
-