]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/listctrl/listtest.cpp
1. changed wxIconBundle to use m_refData and COW to make copying icon bundles
[wxWidgets.git] / samples / listctrl / listtest.cpp
index 116212c3bf1b1355bfda8446a1f65915014fca8d..864a49dbfbb699a20436e84066be2fc3c17f8560 100644 (file)
@@ -42,6 +42,7 @@
 #include "wx/timer.h"           // for wxStopWatch
 #include "wx/colordlg.h"        // for wxGetColourFromUser
 #include "wx/settings.h"
+#include "wx/sysopt.h"
 
 #include "listtest.h"
 
@@ -91,6 +92,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(LIST_FREEZE, MyFrame::OnFreeze)
     EVT_MENU(LIST_THAW, MyFrame::OnThaw)
     EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
+    EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
 
     EVT_UPDATE_UI(LIST_SHOW_COL_INFO, MyFrame::OnUpdateShowColInfo)
     EVT_UPDATE_UI(LIST_TOGGLE_MULTI_SEL, MyFrame::OnUpdateToggleMultiSel)
@@ -103,10 +105,6 @@ 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)
@@ -125,6 +123,8 @@ BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
     EVT_CONTEXT_MENU(MyListCtrl::OnContextMenu)
 #endif
     EVT_CHAR(MyListCtrl::OnChar)
+
+    EVT_RIGHT_DOWN(MyListCtrl::OnRightClick)
 END_EVENT_TABLE()
 
 IMPLEMENT_APP(MyApp)
@@ -149,6 +149,9 @@ int wxCALLBACK MyCompareFunction(long item1, long item2, long WXUNUSED(sortData)
 // `Main program' equivalent, creating windows and returning main app frame
 bool MyApp::OnInit()
 {
+  if ( !wxApp::OnInit() )
+      return false;
+
   // Create the main frame window
   MyFrame *frame = new MyFrame(wxT("wxListCtrl Test"));
 
@@ -220,6 +223,9 @@ MyFrame::MyFrame(const wxChar *title)
     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_SMALL_VIRTUAL_VIEW, _T("Small virtual vie&w\tF8"));
+#ifdef __WXMAC__
+    menuView->AppendCheckItem(LIST_MAC_USE_GENERIC, _T("Mac: Use Generic Control"));
+#endif
 
     wxMenu *menuList = new wxMenu;
     menuList->Append(LIST_FOCUS_LAST, _T("&Make last item current\tCtrl-L"));
@@ -338,6 +344,11 @@ void MyFrame::OnToggleLines(wxCommandEvent& event)
     m_listCtrl->SetSingleStyle(wxLC_HRULES | wxLC_VRULES, event.IsChecked());
 }
 
+void MyFrame::OnToggleMacUseGeneric(wxCommandEvent& event)
+{
+    wxSystemOptions::SetOption(wxT("mac.listctrl.always_use_generic"), event.IsChecked());
+}
+
 void MyFrame::OnFocusLast(wxCommandEvent& WXUNUSED(event))
 {
     long index = m_listCtrl->GetItemCount() - 1;
@@ -704,7 +715,7 @@ void MyFrame::OnDeleteAll(wxCommandEvent& WXUNUSED(event))
 {
     wxStopWatch sw;
 
-    size_t itemCount = m_listCtrl->GetItemCount();
+    int itemCount = m_listCtrl->GetItemCount();
 
     m_listCtrl->DeleteAllItems();
 
@@ -820,6 +831,7 @@ void MyListCtrl::OnEndLabelEdit(wxListEvent& event)
 void MyListCtrl::OnDeleteItem(wxListEvent& event)
 {
     LogEvent(event, _T("OnDeleteItem"));
+    wxLogMessage( wxT("Number of items when delete event is sent: %d"), GetItemCount() );
 }
 
 void MyListCtrl::OnDeleteAllItems(wxListEvent& event)
@@ -827,41 +839,6 @@ void MyListCtrl::OnDeleteAllItems(wxListEvent& event)
     LogEvent(event, _T("OnDeleteAllItems"));
 }
 
-#if WXWIN_COMPATIBILITY_2_4
-void MyListCtrl::OnGetInfo(wxListEvent& event)
-{
-    wxString msg;
-
-    msg << _T("OnGetInfo (") << event.m_item.m_itemId << _T(", ") << event.m_item.m_col << _T(")");
-    if ( event.m_item.m_mask & wxLIST_MASK_STATE )
-        msg << _T(" wxLIST_MASK_STATE");
-    if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
-        msg << _T(" wxLIST_MASK_TEXT");
-    if ( event.m_item.m_mask & wxLIST_MASK_IMAGE )
-        msg << _T(" wxLIST_MASK_IMAGE");
-    if ( event.m_item.m_mask & wxLIST_MASK_DATA )
-        msg << _T(" wxLIST_MASK_DATA");
-    if ( event.m_item.m_mask & wxLIST_SET_ITEM )
-        msg << _T(" wxLIST_SET_ITEM");
-    if ( event.m_item.m_mask & wxLIST_MASK_WIDTH )
-        msg << _T(" wxLIST_MASK_WIDTH");
-    if ( event.m_item.m_mask & wxLIST_MASK_FORMAT )
-        msg << _T(" wxLIST_MASK_WIDTH");
-
-    if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
-    {
-        event.m_item.m_text = _T("My callback text");
-    }
-
-    wxLogMessage(msg);
-}
-
-void MyListCtrl::OnSetInfo(wxListEvent& event)
-{
-    LogEvent(event, _T("OnSetInfo"));
-}
-#endif
-
 void MyListCtrl::OnSelected(wxListEvent& event)
 {
     LogEvent(event, _T("OnSelected"));
@@ -912,6 +889,12 @@ void MyListCtrl::OnListKeyDown(wxListEvent& event)
             {
                 wxListItem info;
                 info.m_itemId = event.GetIndex();
+                if ( info.m_itemId == -1 )
+                {
+                    // no item
+                    break;
+                }
+
                 GetItem(info);
 
                 wxListItemAttr *attr = info.GetAttributes();
@@ -1009,6 +992,36 @@ void MyListCtrl::OnChar(wxKeyEvent& event)
     }
 }
 
+void MyListCtrl::OnRightClick(wxMouseEvent& event)
+{
+    if ( !event.ControlDown() )
+    {
+        event.Skip();
+        return;
+    }
+
+    int flags;
+    long subitem;
+    long item = HitTest(event.GetPosition(), flags, &subitem);
+
+    wxString where;
+    switch ( flags )
+    {
+        case wxLIST_HITTEST_ABOVE: where = _T("above"); break;
+        case wxLIST_HITTEST_BELOW: where = _T("below"); break;
+        case wxLIST_HITTEST_NOWHERE: where = _T("nowhere near"); break;
+        case wxLIST_HITTEST_ONITEMICON: where = _T("on icon of"); break;
+        case wxLIST_HITTEST_ONITEMLABEL: where = _T("on label of"); break;
+        case wxLIST_HITTEST_ONITEMRIGHT: where = _T("right on"); break;
+        case wxLIST_HITTEST_TOLEFT: where = _T("to the left of"); break;
+        case wxLIST_HITTEST_TORIGHT: where = _T("to the right of"); break;
+        default: where = _T("not clear exactly where on"); break;
+    }
+
+    wxLogMessage(_T("Right double click %s item %ld, subitem %ld"),
+                 where.c_str(), item, subitem);
+}
+
 void MyListCtrl::LogEvent(const wxListEvent& event, const wxChar *eventName)
 {
     wxLogMessage(_T("Item %ld: %s (item text = %s, data = %ld)"),