]> git.saurik.com Git - wxWidgets.git/commitdiff
Restore compilation with --enable-stl, fix SetFocus with the generic control, and...
authorKevin Ollivier <kevino@theolliviers.com>
Thu, 21 Dec 2006 06:53:53 +0000 (06:53 +0000)
committerKevin Ollivier <kevino@theolliviers.com>
Thu, 21 Dec 2006 06:53:53 +0000 (06:53 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44024 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/carbon/listctrl.h
src/mac/carbon/listctrl_mac.cpp

index c34868b6ff3fc4e1d2b6bfe44bed7b274a653640..137ab881833032dca4a9afc9a294e3b906988412 100644 (file)
@@ -341,6 +341,8 @@ class WXDLLEXPORT wxListCtrl: public wxControl
   
   virtual int GetScrollPos(int orient) const;
   
+  virtual void SetFocus();
+  
   virtual void SetDropTarget( wxDropTarget *dropTarget );
   virtual wxDropTarget* GetDropTarget() const;
   
index 29fe79bd66be9700ec25eb9e9680ff92a4d5b041..a325ce5c48eee4b47127ee4abddb29c02cbac2d1 100644 (file)
@@ -38,6 +38,8 @@
 #include "wx/sysopt.h"
 #include "wx/timer.h"
 
+#include "wx/hashmap.h"
+
 #define wxMAC_ALWAYS_USE_GENERIC_LISTCTRL wxT("mac.listctrl.always_use_generic")
 
 #if wxUSE_EXTENDED_RTTI
@@ -113,9 +115,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxListItem, wxObject)
 
 IMPLEMENT_DYNAMIC_CLASS(wxListEvent, wxNotifyEvent)
 
-WX_DECLARE_EXPORTED_LIST(wxListItem, wxListItemList);
+WX_DECLARE_HASH_MAP( int, wxListItem*, wxIntegerHash, wxIntegerEqual, wxListItemList );
+
 #include "wx/listimpl.cpp"
-WX_DEFINE_LIST(wxListItemList)
 WX_DEFINE_LIST(wxColumnList)
 
 // so we can check for column clicks
@@ -2198,6 +2200,17 @@ wxDropTarget *wxListCtrl::GetDropTarget() const
     return NULL;
 }
 
+void wxListCtrl::SetFocus()
+{
+        if (m_genericImpl)
+        {
+                m_genericImpl->SetFocus();
+                return;
+        }
+       
+        wxWindow::SetFocus();
+}
+
 // wxMac internal data structures
 
 wxMacListCtrlItem::~wxMacListCtrlItem()
@@ -2848,10 +2861,16 @@ Boolean wxMacDataBrowserListCtrlControl::CompareItems(DataBrowserItemID itemOneI
     bool retval = false;
     wxString itemText;
     wxString otherItemText;
+    long itemOrder;
+    long otherItemOrder;
+    
     int colId = sortProperty - kMinColumnId;
 
     wxListCtrl* list = wxDynamicCast( GetPeer() , wxListCtrl );
 
+    DataBrowserSortOrder sort;
+    verify_noerr(GetSortOrder(&sort));
+
     if (colId >= 0)
     {
         if (!m_isVirtual)
@@ -2872,13 +2891,25 @@ Boolean wxMacDataBrowserListCtrlControl::CompareItems(DataBrowserItemID itemOneI
                 if (item1 > -1 && item2 > -1)
                 {
                     int result = func(item1, item2, list->GetCompareFuncData());
-                    return result >= 0;
+                    if (sort == kDataBrowserOrderIncreasing)
+                        return result >= 0;
+                    else
+                        return result < 0;
                 }
             }
+
             if (item->HasColumnInfo(colId))
-                itemText = item->GetColumnInfo(colId)->GetText();
+            {
+                wxListItem* colItem = item->GetColumnInfo(colId);
+                itemText = colItem->GetText();
+                itemOrder = colItem->GetId();
+            }
             if (otherItem->HasColumnInfo(colId))
-                otherItemText = otherItem->GetColumnInfo(colId)->GetText();
+            {
+                wxListItem* colItem = otherItem->GetColumnInfo(colId);
+                otherItemText = colItem->GetText();
+                otherItemOrder = colItem->GetId();
+            }
         }
         else
         {
@@ -2887,20 +2918,25 @@ Boolean wxMacDataBrowserListCtrlControl::CompareItems(DataBrowserItemID itemOneI
             long otherItemNum = (long)itemTwoID;
             itemText = list->OnGetItemText( itemNum-1, colId );
             otherItemText = list->OnGetItemText( otherItemNum-1, colId );
+            
+            // virtual listctrls don't support sorting
+            return itemNum < otherItemNum;
 
-        }
 
-        DataBrowserSortOrder sort;
-        verify_noerr(GetSortOrder(&sort));
+        }
 
-        if ( sort == kDataBrowserOrderIncreasing )
+        if ( sort == kDataBrowserOrderIncreasing && !m_sortOrder == SortOrder_None )
         {
             retval = itemText.CmpNoCase( otherItemText ) > 0;
         }
-        else if ( sort == kDataBrowserOrderDecreasing )
+        else if ( sort == kDataBrowserOrderDecreasing && !m_sortOrder == SortOrder_None )
         {
             retval = itemText.CmpNoCase( otherItemText ) < 0;
         }
+        else
+        {
+            retval = itemOrder < otherItemOrder;
+        }
     }
     else{
         // fallback for undefined cases
@@ -3009,7 +3045,7 @@ wxMacDataItem* wxMacDataBrowserListCtrlControl::CreateItem()
 
 wxMacListCtrlItem::wxMacListCtrlItem()
 {
-    m_rowItems = wxListItemList( wxKEY_INTEGER );
+    m_rowItems = wxListItemList();
 }
 
 int wxMacListCtrlItem::GetColumnImageValue( unsigned int column )
@@ -3049,15 +3085,13 @@ void wxMacListCtrlItem::SetColumnTextValue( unsigned int column, const wxString&
 
 wxListItem* wxMacListCtrlItem::GetColumnInfo( unsigned int column )
 {
-    wxListItemList::compatibility_iterator node = m_rowItems.Find( column );
-    wxASSERT_MSG( node, _T("invalid column index in wxMacListCtrlItem") );
-
-    return node->GetData();
+    wxASSERT_MSG( HasColumnInfo(column), _T("invalid column index in wxMacListCtrlItem") );
+    return m_rowItems[column]; 
 }
 
 bool wxMacListCtrlItem::HasColumnInfo( unsigned int column )
 {
-    return m_rowItems.Find( column ) != NULL;
+    return !(m_rowItems.find( column ) == m_rowItems.end());
 }
 
 void wxMacListCtrlItem::SetColumnInfo( unsigned int column, wxListItem* item )
@@ -3066,7 +3100,7 @@ void wxMacListCtrlItem::SetColumnInfo( unsigned int column, wxListItem* item )
     if ( !HasColumnInfo(column) )
     {
         wxListItem* listItem = new wxListItem(*item);
-        m_rowItems.Append( column, listItem );
+        m_rowItems[column] = listItem;
     }
     else
     {